From: jihye424.kim Date: Thu, 1 Oct 2015 06:06:26 +0000 (+0900) Subject: Device Template: make device template table viewer X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=64ef6527ea1b52ea921290ab242dccb85dd6e4b8;p=sdk%2Femulator%2Femulator-manager.git Device Template: make device template table viewer - list up device template Change-Id: I565cdcc02d74c7756ec3fc9be69481609b93730d Signed-off-by: jihye424.kim --- diff --git a/src/org/tizen/emulator/manager/ui/renewal/MainDialog.java b/src/org/tizen/emulator/manager/ui/renewal/MainDialog.java index d3cb5f8..681728a 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/MainDialog.java +++ b/src/org/tizen/emulator/manager/ui/renewal/MainDialog.java @@ -92,9 +92,13 @@ public class MainDialog { } public void draw() { - VMListTableViewer vmListViewer = new VMListTableViewer(shell, "vmlist"); + VMListTableViewer vmListViewer = new VMListTableViewer(shell, "vmList"); viewerList.add(vmListViewer); - this.setStackTop(findViewer("vmlist")); + this.setStackTop(findViewer("vmList")); + } + + public void addViewer(AbstractTableViewer viewer) { + viewerList.add(viewer); } public AbstractTableViewer findViewer (String key) { @@ -134,9 +138,9 @@ public class MainDialog { public void setStackTop(AbstractTableViewer viewer) { stackLayout.topControl = viewer.getMainComposite(); - // TODO viewer.initTableViewer(); viewer.showTableViewer(); + shell.layout(); } } diff --git a/src/org/tizen/emulator/manager/ui/renewal/tableviewer/DeviceTemplateTableViewer.java b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/DeviceTemplateTableViewer.java new file mode 100644 index 0000000..0713c61 --- /dev/null +++ b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/DeviceTemplateTableViewer.java @@ -0,0 +1,498 @@ +/* + * Emulator Manager + * + * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * JiHye Kim + * Minkee Lee + * SeokYeon Hwang + * Sangho Park + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributors: + * - S-Core Co., Ltd + * + */ + +package org.tizen.emulator.manager.ui.renewal.tableviewer; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; +import org.tizen.emulator.manager.EmulatorManager; +import org.tizen.emulator.manager.devices.DeviceTemplate; +import org.tizen.emulator.manager.devices.DeviceTemplateValue; +import org.tizen.emulator.manager.platform.Profile; +import org.tizen.emulator.manager.platform.ProfileList; +import org.tizen.emulator.manager.renewal.resources.ColorResources; +import org.tizen.emulator.manager.renewal.resources.FontResources; +import org.tizen.emulator.manager.renewal.resources.ImageResources; +import org.tizen.emulator.manager.renewal.resources.PatchImageResources; +import org.tizen.emulator.manager.ui.renewal.MainDialog; +import org.tizen.emulator.manager.ui.renewal.widgets.Hyperlink; +import org.tizen.emulator.manager.ui.renewal.widgets.ImageButton; +import org.tizen.emulator.manager.ui.renewal.widgets.NinePatchResourceInfo; +import org.tizen.emulator.manager.ui.table.Table; +import org.tizen.emulator.manager.ui.table.TableColumn; +import org.tizen.emulator.manager.ui.table.TableItem; + +public class DeviceTemplateTableViewer extends AbstractTableViewer { + private static final int BACK_BUTTON_WIDTH = 124; + private static final int BACK_BUTTON_HEIGHT = 26; + private static final int BUTTON_WIDTH = 32; + private static final int BUTTON_HEIGHT = 26; + + Hyperlink baseImageList; + ImageButton refreshButton; + + private Composite comp; + private boolean isTableInitialize = false; + private Table table; + + private List profileButtonList; + + private ImageButton backButton; + private ImageButton createButton; + private ImageButton cloneButton; + private ImageButton modifyButton; + private ImageButton deleteButton; + + public DeviceTemplateTableViewer(Shell shell, String key) { + super(shell, key); + } + + @Override + void setTitleImage() { + setTtileBackgroundImage(ImageResources.TEMPLATE_LIST_TITLE_IMAGE.getImage()); + } + + @Override + void setLinkerMenu() { + baseImageList = new Hyperlink(getTopComp(), SWT.None); + baseImageList.setText("Base Images"); + baseImageList.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + if (event.type == SWT.Selection) { + MessageBox dialog = new MessageBox(MainDialog.getShell()); + dialog.setMessage("Click BaseImages menu"); + dialog.open(); + } + } + } + }); + addLinkMenu(baseImageList); + } + + @Override + void setIconMenu() { + refreshButton = new ImageButton(getTopComp(), SWT.PUSH); + refreshButton.setImages(ImageResources.BUTTON_REFRESH_NML.getImage(), + ImageResources.BUTTON_REFRESH_HOVER.getImage(), + ImageResources.BUTTON_REFRESH_HOVER.getImage(), + ImageResources.BUTTON_REFRESH_HOVER.getImage()); + + refreshButton.addSelectionListener(new SelectionListener() { + @Override + public void widgetDefaultSelected(SelectionEvent arg0) { + } + + @Override + public void widgetSelected(SelectionEvent arg0) { + // TODO + } + }); + + addIconMenu(refreshButton); + } + + @Override + void makeTableComposite() { + if (table != null) { + return; + } + + comp = getTableComp(); + + makeTable(); + makeBackButton(); + makeProfileButton(); + makeTemplateButton(); + setLayout(); + } + + private void makeProfileButton() { + profileButtonList = new ArrayList(); + profileButtonList.add(ProfileButtonMaker.getProfileButton("mobile", comp)); + profileButtonList.add(ProfileButtonMaker.getProfileButton("tv", comp)); + profileButtonList.add(ProfileButtonMaker.getProfileButton("wearable", comp)); + + for (Profile profile : ProfileList.getProfileList()) { + for (ProfileButton pButton : profileButtonList) { + if (pButton.getProfileName().equals(profile.getName())) { + pButton.setProfile(profile); + pButton.getButton().setEnabled(true); + pButton.getButton().addSelectionListener(profileButtonSelectionListener); + break; + } + } + } + } + + private void makeBackButton() { + backButton = new ImageButton(comp, SWT.PUSH); + Image hover = PatchImageResources.getThreePatchButtonImage(BACK_BUTTON_WIDTH, hoverInfo); + Image normal = PatchImageResources.getThreePatchButtonImage(BACK_BUTTON_WIDTH, normalInfo); + + backButton.setText(" Back to VM List"); + backButton.setFont(FontResources.DEFAULT_FONT_9.getFont()); + backButton.setFontColor(ColorResources.DEFAULT_FONT.getColor()); + backButton.setImages(normal, hover, hover, normal); + backButton.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + MainDialog mainDialog = EmulatorManager.getMainDialog(); + AbstractTableViewer viewer = mainDialog.findViewer("vmList"); + if (viewer != null) { + mainDialog.setStackTop(viewer); + } + } + } + }); + } + + private String[] titles = {"", "Type", "Name", "Resolution", "Display Size", "Ram", "Processor"}; + private void makeTable() { + table = new Table(comp, SWT.BORDER); + + for (String t : titles) { + TableColumn column = new TableColumn(table, SWT.None); + column.setText(t); + column.setAlignment(SWT.CENTER); + } + + table.setSelectedItemHeight(table.getItemHeight()); + table.getColumn(0).setResizable(false); + table.getColumn(1).setResizable(false); + table.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event e) { + if (e.type == SWT.Selection) { + tableSelected(); + } + } + }); + + table.getColumn(2).addListener(SWT.Selection, table.getDefaultSortListener()); + table.getColumn(3).addListener(SWT.Selection, table.getDefaultSortListener()); + table.getColumn(4).addListener(SWT.Selection, table.getDefaultSortListener()); + table.getColumn(5).addListener(SWT.Selection, table.getDefaultSortListener()); + table.getColumn(6).addListener(SWT.Selection, table.getDefaultSortListener()); + table.getColumn(1).addListener(SWT.Selection, new Listener() { + + @Override + public void handleEvent(Event event) { + TableColumn column = (TableColumn)event.widget; + // set column + table.settingSortColumn(column); + // make item compareable list + int dir = table.getSortDirection(); + ItemProfilePair[] pairs = new ItemProfilePair[table.getItemCount()]; + for (int i = 0; i < table.getItemCount(); i++) { + pairs[i] = new ItemProfilePair(table.getItem(i), 1, dir); + } + column.setTableItemPairs(pairs); + // sort table item + table.defaultSortTableItem(column); + } + + }); + } + + protected void tableSelected() { + // TODO Auto-generated method stub + + } + + @Override + void showTableComposite() { + if (!isTableInitialize) { + setTemplateList(); + isTableInitialize = true; + } + + } + + private void setTemplateList() { + table.removeAll(); + for (ProfileButton pButton : profileButtonList) { + if (pButton.getProfile() == null) { + continue; + } + if (!pButton.getButton().isSelection()) { + makeTableItem(pButton); + } + } + + table.getColumn(0).setWidth(30); + table.getColumn(1).setWidth(100); + for (int i = 1; i < titles.length; i++) { + table.getColumn(i).pack(); + } + } + + private void makeTableItem(ProfileButton pButton) { + for (DeviceTemplate template : pButton.getProfile().getTemplateList()) { + addTableItem(pButton, template); + } + } + + private void addTableItem (ProfileButton pButton, DeviceTemplate template) { + addTableItem(pButton, template, -1); + } + + private void addTableItem(ProfileButton pButton, DeviceTemplate template, int index) { + if (pButton == null) { + return; + } + + TableItem item = null; + if (index >= 0) { + item = new TableItem(table, SWT.NULL, index); + } else { + item = new TableItem(table, SWT.NULL); + } + + // + item.setImage(1, pButton.getIcon()); + setTableItemProperty(item, template); + // + } + + private void setTableItemProperty(TableItem item, DeviceTemplate template) { + DeviceTemplateValue value = template.getValue(); + item.setText(2, value.getName()); + item.setText(3, value.getResolution().toString()); + item.setText(4, String.valueOf(value.getDisplaySize()) + " " + value.getDisplaySizeUnit()); + item.setText(5, String.valueOf(value.getRamSize()) + " " + value.getRamSizeUnit()); + item.setText(6, String.valueOf(value.getCpuCount())); + item.setData(template); + } + + private final SelectionListener profileButtonSelectionListener = new SelectionListener() { + @Override + public void widgetSelected(SelectionEvent e) { + ImageButton b = (ImageButton)e.widget; + for (ProfileButton pButton : profileButtonList) { + if (pButton.getButton() != b) { + continue; + } + + if (!b.isSelection()) { + makeTableItem(pButton); + } else { + if (pButton.getProfile().getTemplateList().isEmpty()) { + return; + } + + String profile = pButton.getProfileName(); + for (TableItem item : table.getSelection()) { + DeviceTemplate template = (DeviceTemplate)(item.getData()); + if (template.getValue().getProfile().equals(profile)) { + table.deselectAll(); + } + } + for (DeviceTemplate template : pButton.getProfile().getTemplateList()) { + for (TableItem item : table.getItems()) { + if (item.getData() == template) { + int index = table.indexOf(item); + table.remove(index); + break; + } + } + } + } + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + }; + + private void makeTemplateButton() { + createButton = new ImageButton(comp, SWT.PUSH); + createButton.setToolTipText("create device template"); + createButton.setBackground(null); + createButton.setImages(ImageResources.BUTTON_CREATE_NORMAL.getImage(), + ImageResources.BUTTON_CREATE_HOVER.getImage(), + ImageResources.BUTTON_CREATE_HOVER.getImage(), + ImageResources.BUTTON_CREATE_DISABLE.getImage()); + createButton.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + // TODO + } + } + }); + + cloneButton = new ImageButton(comp, SWT.PUSH); + cloneButton.setToolTipText("clone device template"); + cloneButton.setBackground(null); + cloneButton.setImages(ImageResources.BUTTON_CLONE_NORMAL.getImage(), + ImageResources.BUTTON_CLONE_HOVER.getImage(), + ImageResources.BUTTON_CLONE_HOVER.getImage(), + ImageResources.BUTTON_CLONE_DISABLE.getImage()); + cloneButton.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + // TODO + } + } + }); + + modifyButton = new ImageButton(comp, SWT.PUSH); + modifyButton.setToolTipText("modify device template"); + modifyButton.setBackground(null); + modifyButton.setImages(ImageResources.BUTTON_MODIFY_NORMAL.getImage(), + ImageResources.BUTTON_MODIFY_HOVER.getImage(), + ImageResources.BUTTON_MODIFY_HOVER.getImage(), + ImageResources.BUTTON_MODIFY_DISABLE.getImage()); + modifyButton.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + // TODO + } + } + }); + + deleteButton = new ImageButton(comp, SWT.PUSH); + deleteButton.setToolTipText("delete device template"); + deleteButton.setBackground(null); + deleteButton.setImages(ImageResources.BUTTON_DELETE_NORMAL.getImage(), + ImageResources.BUTTON_DELETE_HOVER.getImage(), + ImageResources.BUTTON_DELETE_HOVER.getImage(), + ImageResources.BUTTON_DELETE_DISABLE.getImage()); + deleteButton.addListener(SWT.Selection, new Listener() { + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Selection) { + // TODO + } + } + }); + } + + + private void setLayout() { + // composite is form layout + FormData backButtonData; + backButtonData = new FormData(); + backButtonData.left = new FormAttachment(0, 10); + backButtonData.top = new FormAttachment(0, 13); + backButtonData.width = BACK_BUTTON_WIDTH; + backButtonData.height = BACK_BUTTON_HEIGHT; + backButton.setLayoutData(backButtonData); + + FormData profileButtonData; + for (int i = 0; i < profileButtonList.size(); i++) { + ProfileButton button = profileButtonList.get(i); + profileButtonData = new FormData(); + if (i == 0) { + profileButtonData.left = new FormAttachment(0, 372); + } else { + profileButtonData.left = new FormAttachment(profileButtonList.get(i-1).getButton(), 2); + } + profileButtonData.top = new FormAttachment(0, 13); + profileButtonData.width = button.getButton().getSize().x; + profileButtonData.height = button.getButton().getSize().y; + button.getButton().setLayoutData(profileButtonData); + } + + FormData workerButtonData = new FormData(); + workerButtonData.right = new FormAttachment(100, -10); + workerButtonData.top = new FormAttachment(0, 13); + workerButtonData.width = BUTTON_WIDTH; + workerButtonData.height = BUTTON_HEIGHT; + deleteButton.setLayoutData(workerButtonData); + + workerButtonData = new FormData(); + workerButtonData.right = new FormAttachment(deleteButton, -5); + workerButtonData.top = new FormAttachment(0, 13); + workerButtonData.width = BUTTON_WIDTH; + workerButtonData.height = BUTTON_HEIGHT; + modifyButton.setLayoutData(workerButtonData); + + workerButtonData = new FormData(); + workerButtonData.right = new FormAttachment(modifyButton, -5); + workerButtonData.top = new FormAttachment(0, 13); + workerButtonData.width = BUTTON_WIDTH; + workerButtonData.height = BUTTON_HEIGHT; + cloneButton.setLayoutData(workerButtonData); + + workerButtonData = new FormData(); + workerButtonData.right = new FormAttachment(cloneButton, -5); + workerButtonData.top = new FormAttachment(0, 13); + workerButtonData.width = BUTTON_WIDTH; + workerButtonData.height = BUTTON_HEIGHT; + createButton.setLayoutData(workerButtonData); + + workerButtonData = new FormData(); + workerButtonData.top = new FormAttachment(0, 45); + workerButtonData.left = new FormAttachment(0, 10); + workerButtonData.right = new FormAttachment(100, -10); + workerButtonData.bottom = new FormAttachment(100, -10); + table.setLayoutData(workerButtonData); + } + + private NinePatchResourceInfo normalInfo = new NinePatchResourceInfo(ColorResources.TABLE_VIEWER_BG, + ColorResources.TABLE_VIEWER_BG, + null, //left top + ImageResources.BACK_BTN_NORMAL_C, // top -> center + null, // right top + ImageResources.BACK_BTN_NORMAL_R, // right + null, // right bottom + null, // bottom + null, // left bottom + ImageResources.BACK_BTN_NORMAL_L); // left + + private NinePatchResourceInfo hoverInfo = new NinePatchResourceInfo(ColorResources.TABLE_VIEWER_BG, + ColorResources.TABLE_VIEWER_BG, + null, //left top + ImageResources.BACK_BTN_HOVER_C, // top -> center + null, // right top + ImageResources.BACK_BTN_HOVER_R, // right + null, // right bottom + null, // bottom + null, // left bottom + ImageResources.BACK_BTN_HOVER_L); // left +} diff --git a/src/org/tizen/emulator/manager/ui/renewal/tableviewer/VMListTableViewer.java b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/VMListTableViewer.java index 77c2e9e..51f50ea 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/tableviewer/VMListTableViewer.java +++ b/src/org/tizen/emulator/manager/ui/renewal/tableviewer/VMListTableViewer.java @@ -36,6 +36,7 @@ import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; +import org.tizen.emulator.manager.EmulatorManager; import org.tizen.emulator.manager.renewal.resources.ImageResources; import org.tizen.emulator.manager.ui.renewal.MainDialog; import org.tizen.emulator.manager.ui.renewal.widgets.Hyperlink; @@ -78,9 +79,15 @@ public class VMListTableViewer extends AbstractTableViewer { @Override public void handleEvent(Event event) { if (event.type == SWT.Selection) { - MessageBox dialog = new MessageBox(MainDialog.getShell()); - dialog.setMessage("Click Templates menu"); - dialog.open(); + MainDialog mainDialog = EmulatorManager.getMainDialog(); + AbstractTableViewer viewer = mainDialog.findViewer("templateList"); + if (viewer == null) { + DeviceTemplateTableViewer tViewer = new DeviceTemplateTableViewer(MainDialog.getShell(), "templateList"); + mainDialog.addViewer(tViewer); + mainDialog.setStackTop(tViewer); + } else { + mainDialog.setStackTop(viewer); + } } } diff --git a/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java b/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java index bf88131..1b139d3 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java +++ b/src/org/tizen/emulator/manager/ui/renewal/widgets/ImageButton.java @@ -129,10 +129,23 @@ public class ImageButton extends Canvas { return true; } + @Override + public void setFont(Font font) { + for (WSTATE s : WSTATE.values()) { + fonts.set(s.getId(), font); + } + } + public void setFont(WSTATE state, Font font) { fonts.set(state.getId(), font); } + public void setFontColor(Color color) { + for (WSTATE s : WSTATE.values()) { + fontColors.set(s.getId(), color); + } + } + public void setFontColor(WSTATE state, Color color) { fontColors.set(state.getId(), color); } @@ -363,12 +376,16 @@ public class ImageButton extends Canvas { } int fontHeight = e.gc.getFontMetrics().getHeight(); - y = rect.y + (rect.height - fontHeight) / 2 - 1; + y = rect.y + (rect.height - fontHeight) / 2; if (fontColors.get(state.getId()) != null) { e.gc.setForeground(fontColors.get(state.getId())); } + if (fonts.get(state.getId()) != null) { + e.gc.setFont(fonts.get(state.getId())); + } + if (text != null) { e.gc.drawText(text, x, y, true); } diff --git a/src/org/tizen/emulator/manager/ui/renewal/widgets/NinePatchResourceInfo.java b/src/org/tizen/emulator/manager/ui/renewal/widgets/NinePatchResourceInfo.java index f3d6b23..519c699 100644 --- a/src/org/tizen/emulator/manager/ui/renewal/widgets/NinePatchResourceInfo.java +++ b/src/org/tizen/emulator/manager/ui/renewal/widgets/NinePatchResourceInfo.java @@ -54,7 +54,7 @@ public class NinePatchResourceInfo { static final String LB = "lb"; static final String L = "l"; - NinePatchResourceInfo(ColorResources background, ColorResources transparentColor, + public NinePatchResourceInfo(ColorResources background, ColorResources transparentColor, ImageResources lt, ImageResources t, ImageResources rt, ImageResources r, ImageResources rb, ImageResources b,