--- /dev/null
+/*
+ * Emulator Manager
+ *
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * JiHye Kim <jihye424.kim@samsung.com>
+ * Minkee Lee <minkee.lee@samsung.com>
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * Sangho Park <sangho1206.park@samsung.com>
+ *
+ * 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.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+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.platform.BaseImage;
+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 BaseImageTableViewer 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;
+
+ private Hyperlink templateList;
+
+ private Composite comp;
+ private boolean isTableInitialize = false;
+ private Table table;
+
+ private List<ProfileButton> profileButtonList;
+
+ private ImageButton backButton;
+ private ImageButton createButton;
+ private ImageButton deleteButton;
+
+ public BaseImageTableViewer(Shell shell, String key) {
+ super(shell, key);
+ }
+
+ @Override
+ void setTitleImage() {
+ setTtileBackgroundImage(ImageResources.BASEIMAGE_LIST_TITLE_IMAGE.getImage());
+ }
+
+ @Override
+ void setLinkerMenu() {
+ templateList = new Hyperlink(getTopComp(), SWT.None);
+ templateList.setText("Templates");
+ templateList.addListener(SWT.Selection, new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ if (event.type == SWT.Selection) {
+ 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);
+ }
+ }
+ }
+ });
+ addLinkMenu(templateList);
+ }
+
+ @Override
+ void setIconMenu() {
+ // TODO
+ }
+
+ @Override
+ void makeTableComposite() {
+ if (table != null) {
+ return;
+ }
+
+ comp = getTableComp();
+
+ makeTable();
+ makeBackButton();
+ makeProfileButton();
+ makeFunctionButton();
+ setLayout();
+ }
+
+ @Override
+ void showTableComposite() {
+ if (!isTableInitialize) {
+ setBaseImageListTable();
+ isTableInitialize = true;
+ }
+ }
+
+ private final String[] titles = {"", "Type", "Name", "Platform", "File Name", "Description"};
+ private void makeTable() {
+ table = new Table(comp, SWT.BORDER | SWT.SINGLE);
+
+ 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.addListener(SWT.Selection, new Listener() {
+ @Override
+ public void handleEvent(Event e) {
+ if (e.type == SWT.Selection) {
+ tableSelected();
+ }
+ }
+ });
+
+ table.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyPressed(KeyEvent event) {
+ if (table.getSelectionCount() == 0) {
+ return;
+ }
+ if (event.keyCode != SWT.DEL) {
+ return;
+ }
+
+ TableItem item = table.getSelection()[0];
+ deleteBaseImage(item, true);
+ }
+ });
+
+ settingSortingPair();
+ }
+
+ private void settingSortingPair() {
+ 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 comparable item list
+ int dir = table.getSortDirection();
+ IntegerTypeItemPair[] pairs = new IntegerTypeItemPair[table.getItemCount()];
+ for (int i = 0; i < table.getItemCount(); i++) {
+ BaseImage t = (BaseImage)table.getItem(i).getData();
+ Profile p = ProfileList.getProfile(t.getProfile());
+ int priority = p.getPriority();
+ if (!t.isStandard()) {
+ priority += 1;
+ }
+ pairs[i] = new IntegerTypeItemPair(table.getItem(i), 1, dir, priority);
+ }
+ column.setTableItemPairs(pairs);
+ // sort table item
+ table.defaultSortTableItem(column);
+ }
+
+ });
+
+ table.getColumn(2).addListener(SWT.Selection, table.getDefaultSortListener());
+ table.getColumn(3).addListener(SWT.Selection, table.getDefaultSortListener());
+ table.getColumn(4).addListener(SWT.Selection, table.getDefaultSortListener());
+ }
+
+ private void setBaseImageListTable() {
+ 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 = 2; i < titles.length; i++) {
+ table.getColumn(i).pack();
+ }
+ }
+
+ private void makeTableItem(ProfileButton pButton) {
+ for (BaseImage image : pButton.getProfile().getImageList()) {
+ addTableItem(pButton, image);
+ }
+ }
+
+ private void addTableItem(ProfileButton pButton, BaseImage image) {
+ addTableItem(pButton, image, -1);
+ }
+
+ private void addTableItem(ProfileButton pButton, BaseImage image, 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);
+ }
+
+ if (image.isStandard()) {
+ item.setImage(1, pButton.getIcon());
+ } else {
+ item.setImage(1, pButton.getCustomIcon());
+ }
+
+ setTableItemProperty(item, image);
+ setTableItemMenu(item, image);
+ }
+
+ private void setTableItemProperty(TableItem item, BaseImage image) {
+ item.setText(2, image.getName());
+ item.setText(3, image.getPlatformName());
+ item.setText(4, image.getPathName());
+ // TODO set description
+ item.setText(5, image.getDescription());
+ item.setData(image);
+ // TODO
+ // setting tool tip
+ }
+
+ private void setTableItemMenu(TableItem item, BaseImage image) {
+ // TODO
+ }
+
+ private void makeFunctionButton() {
+ createButton = new ImageButton(comp, SWT.PUSH);
+ createButton.setToolTipText("create custom base image");
+ 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) {
+ createBaseImage();
+ }
+ }
+ });
+
+ deleteButton = new ImageButton(comp, SWT.PUSH);
+ deleteButton.setToolTipText("delete base image");
+ 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) {
+ TableItem[] items = table.getSelection();
+ if (items != null && items.length > 0) {
+ deleteBaseImage(items[0], false);
+ }
+ }
+ }
+ });
+
+ deleteButton.setEnabled(false);
+ }
+
+ private void makeProfileButton() {
+ profileButtonList = new ArrayList<ProfileButton>();
+ 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 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().getImageList().isEmpty()) {
+ return;
+ }
+
+ String profile = pButton.getProfileName();
+ for (TableItem item : table.getSelection()) {
+ BaseImage image = (BaseImage)(item.getData());
+ if (image.getProfile().equals(profile)) {
+ table.deselectAll();
+ }
+ }
+ for (BaseImage image : pButton.getProfile().getImageList()) {
+ for (TableItem item : table.getItems()) {
+ if (item.getData() == image) {
+ int index = table.indexOf(item);
+ table.remove(index);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ tableSelected();
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ };
+
+ private void createBaseImage() {
+ // TODO
+ }
+
+ private void deleteBaseImage(TableItem item, boolean needCheck) {
+ // TODO
+ }
+
+ private void tableSelected() {
+ if (table.getSelectionCount() == 0) {
+ deleteButton.setEnabled(false);
+ } else {
+ BaseImage image = (BaseImage)table.getSelection()[0].getData();
+ if (image.isStandard()) {
+ deleteButton.setEnabled(false);
+ } else {
+ deleteButton.setEnabled(true);
+ }
+ }
+ }
+
+ 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;
+ 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 final 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 final 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
+}