// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.widgets;
import java.util.ArrayList;
import java.util.Observable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Menu;
import com.amalto.workbench.editors.AMainPageV2;
import com.amalto.workbench.editors.TransformerMainPage;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.ImageCache;
public class TableViewWrapper {
private java.util.List<ObserverMetaData> ObserverList = new ArrayList<ObserverMetaData>();
public TableViewWrapper() {
}
public void Wrap(AMainPageV2 page, Object view) {
ObserverMetaData observer = new ObserverMetaData(page, view);
ObserverList.add(observer);
}
class DeleteItemAction extends Action {
private ObserverMetaData observer;
public DeleteItemAction(ObserverMetaData obsv) {
super();
setImageDescriptor(ImageCache.getImage("icons/delete_obj.gif"));//$NON-NLS-1$
setText(Messages.TableViewWrapper_DelSelectItems);
setToolTipText(Messages.TableViewWrapper_DelSelectItems);
observer = obsv;
}
public void run() {
observer.notifyObserver(false);
}
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}
class RenameItemAction extends Action {
private ObserverMetaData observer;
public RenameItemAction(ObserverMetaData obsv) {
super();
setImageDescriptor(ImageCache.getImage("icons/rename.png"));//$NON-NLS-1$
setText(Messages.TableViewWrapper_Rename);
setToolTipText(Messages.TableViewWrapper_Rename);
observer = obsv;
}
public void run() {
observer.notifyObserver(true);
}
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}
class ObserverMetaData extends Observable {
private AMainPageV2 mainPage;
private Object observerView;
public ObserverMetaData(AMainPageV2 page, Object view) {
mainPage = page;
observerView = view;
MenuManager menuMgr = new MenuManager();
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
// ViewBrowserMainPage.this.fillContextMenu(manager);
if (observerView instanceof List) {
manager.add(new Separator());
manager.add(new RenameItemAction(ObserverMetaData.this));
}
manager.add(new DeleteItemAction(ObserverMetaData.this));
}
});
KeyListener listener = new KeyListener() {
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
// System.out.println("Table keyReleased() ");
if ((e.stateMask == 0) && (e.character == SWT.DEL) && (observerView != null)) {
notifyObserver(false);
}
}
};
if (view instanceof TableViewer) {
TableViewer tableView = (TableViewer) view;
Menu menu = menuMgr.createContextMenu(tableView.getControl());
tableView.getControl().setMenu(menu);
page.getSite().registerContextMenu(menuMgr, tableView);
tableView.getTable().addKeyListener(listener);
} else if (view instanceof List) {
List list = (List) view;
Menu menu = menuMgr.createContextMenu(list);
list.setMenu(menu);
list.addKeyListener(listener);
} else if (view instanceof ListViewer) {
ListViewer listView = (ListViewer) view;
Menu menu = menuMgr.createContextMenu(listView.getControl());
listView.getControl().setMenu(menu);
page.getSite().registerContextMenu(menuMgr, listView);
listView.getControl().addKeyListener(listener);
}
}
public void notifyObserver(boolean isRename) {
if (isRename && mainPage instanceof TransformerMainPage)
((TransformerMainPage) mainPage).rename(observerView);
else
mainPage.update(ObserverMetaData.this, observerView);
}
}
}