1b164ae3eSLei De Bin /************************************************************** 2b164ae3eSLei De Bin * 3b164ae3eSLei De Bin * Licensed to the Apache Software Foundation (ASF) under one 4b164ae3eSLei De Bin * or more contributor license agreements. See the NOTICE file 5b164ae3eSLei De Bin * distributed with this work for additional information 6b164ae3eSLei De Bin * regarding copyright ownership. The ASF licenses this file 7b164ae3eSLei De Bin * to you under the Apache License, Version 2.0 (the 8b164ae3eSLei De Bin * "License"); you may not use this file except in compliance 9b164ae3eSLei De Bin * with the License. You may obtain a copy of the License at 10b164ae3eSLei De Bin * 11b164ae3eSLei De Bin * http://www.apache.org/licenses/LICENSE-2.0 12b164ae3eSLei De Bin * 13b164ae3eSLei De Bin * Unless required by applicable law or agreed to in writing, 14b164ae3eSLei De Bin * software distributed under the License is distributed on an 15b164ae3eSLei De Bin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b164ae3eSLei De Bin * KIND, either express or implied. See the License for the 17b164ae3eSLei De Bin * specific language governing permissions and limitations 18b164ae3eSLei De Bin * under the License. 19b164ae3eSLei De Bin * 20b164ae3eSLei De Bin *************************************************************/ 21b164ae3eSLei De Bin 22b164ae3eSLei De Bin 237dd7871fSLei De Bin 247dd7871fSLei De Bin package org.openoffice.test.assistant.views; 257dd7871fSLei De Bin 267dd7871fSLei De Bin import java.io.File; 277dd7871fSLei De Bin import java.lang.reflect.InvocationTargetException; 287dd7871fSLei De Bin import java.util.ArrayList; 297dd7871fSLei De Bin 307dd7871fSLei De Bin import org.eclipse.core.runtime.IProgressMonitor; 317dd7871fSLei De Bin import org.eclipse.core.runtime.IStatus; 327dd7871fSLei De Bin import org.eclipse.jdt.core.JavaConventions; 337dd7871fSLei De Bin import org.eclipse.jface.action.Action; 347dd7871fSLei De Bin import org.eclipse.jface.action.IMenuListener; 357dd7871fSLei De Bin import org.eclipse.jface.action.IMenuManager; 367dd7871fSLei De Bin import org.eclipse.jface.action.IToolBarManager; 377dd7871fSLei De Bin import org.eclipse.jface.action.MenuManager; 387dd7871fSLei De Bin import org.eclipse.jface.action.Separator; 397dd7871fSLei De Bin import org.eclipse.jface.dialogs.MessageDialog; 407dd7871fSLei De Bin import org.eclipse.jface.operation.IRunnableWithProgress; 417dd7871fSLei De Bin import org.eclipse.jface.preference.IPreferenceStore; 427dd7871fSLei De Bin import org.eclipse.jface.text.IDocument; 437dd7871fSLei De Bin import org.eclipse.jface.text.ITextSelection; 447dd7871fSLei De Bin import org.eclipse.jface.viewers.CellEditor; 457dd7871fSLei De Bin import org.eclipse.jface.viewers.ColumnViewerEditor; 467dd7871fSLei De Bin import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent; 477dd7871fSLei De Bin import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; 487dd7871fSLei De Bin import org.eclipse.jface.viewers.DoubleClickEvent; 497dd7871fSLei De Bin import org.eclipse.jface.viewers.ICellModifier; 507dd7871fSLei De Bin import org.eclipse.jface.viewers.IDoubleClickListener; 517dd7871fSLei De Bin import org.eclipse.jface.viewers.ISelection; 527dd7871fSLei De Bin import org.eclipse.jface.viewers.IStructuredSelection; 537dd7871fSLei De Bin import org.eclipse.jface.viewers.TableViewer; 547dd7871fSLei De Bin import org.eclipse.jface.viewers.TableViewerEditor; 557dd7871fSLei De Bin import org.eclipse.jface.viewers.TextCellEditor; 567dd7871fSLei De Bin import org.eclipse.swt.SWT; 577dd7871fSLei De Bin import org.eclipse.swt.events.ModifyEvent; 587dd7871fSLei De Bin import org.eclipse.swt.events.ModifyListener; 597dd7871fSLei De Bin import org.eclipse.swt.graphics.Color; 607dd7871fSLei De Bin import org.eclipse.swt.layout.GridData; 617dd7871fSLei De Bin import org.eclipse.swt.layout.GridLayout; 627dd7871fSLei De Bin import org.eclipse.swt.widgets.Composite; 637dd7871fSLei De Bin import org.eclipse.swt.widgets.Display; 647dd7871fSLei De Bin import org.eclipse.swt.widgets.Label; 657dd7871fSLei De Bin import org.eclipse.swt.widgets.Menu; 667dd7871fSLei De Bin import org.eclipse.swt.widgets.Table; 677dd7871fSLei De Bin import org.eclipse.swt.widgets.TableColumn; 687dd7871fSLei De Bin import org.eclipse.swt.widgets.TableItem; 697dd7871fSLei De Bin import org.eclipse.swt.widgets.Text; 707dd7871fSLei De Bin import org.eclipse.ui.IActionBars; 717dd7871fSLei De Bin import org.eclipse.ui.IEditorPart; 727dd7871fSLei De Bin import org.eclipse.ui.IWorkbench; 737dd7871fSLei De Bin import org.eclipse.ui.IWorkbenchActionConstants; 747dd7871fSLei De Bin import org.eclipse.ui.IWorkbenchPage; 757dd7871fSLei De Bin import org.eclipse.ui.IWorkbenchWindow; 767dd7871fSLei De Bin import org.eclipse.ui.PlatformUI; 777dd7871fSLei De Bin import org.eclipse.ui.part.ViewPart; 787dd7871fSLei De Bin import org.eclipse.ui.texteditor.AbstractTextEditor; 797dd7871fSLei De Bin import org.eclipse.ui.texteditor.IDocumentProvider; 807dd7871fSLei De Bin import org.openoffice.test.assistant.Activator; 817dd7871fSLei De Bin import org.openoffice.test.assistant.preferences.PreferenceConstants; 827dd7871fSLei De Bin import org.openoffice.test.vcl.client.CommandCaller.WinInfoReceiver; 837dd7871fSLei De Bin import org.openoffice.test.vcl.client.Constant; 847dd7871fSLei De Bin import org.openoffice.test.vcl.client.SmartId; 857dd7871fSLei De Bin import org.openoffice.test.vcl.client.VclHook; 867dd7871fSLei De Bin import org.openoffice.test.vcl.widgets.VclApp; 877dd7871fSLei De Bin 887dd7871fSLei De Bin public class VclExplorer extends ViewPart implements WinInfoReceiver { 897dd7871fSLei De Bin public static final String ID = "org.vclauto.assistant.views.VclExplorer"; 907dd7871fSLei De Bin private TableViewer viewer; 917dd7871fSLei De Bin private Label messageLabel; 927dd7871fSLei De Bin private Action inspectAction; 937dd7871fSLei De Bin private Action launchAction; 947dd7871fSLei De Bin private Action insertCodeAction; 957dd7871fSLei De Bin private UIMapOp uiMapOp = new UIMapOp(); 967dd7871fSLei De Bin private ArrayList<ControlInfo> controlInfos = new ArrayList<ControlInfo>(); 977dd7871fSLei De Bin private Display display; 987dd7871fSLei De Bin private Color duplicatedNameColor; 997dd7871fSLei De Bin /** 1007dd7871fSLei De Bin * The constructor. 1017dd7871fSLei De Bin */ VclExplorer()1027dd7871fSLei De Bin public VclExplorer() { 1037dd7871fSLei De Bin VclHook.getCommandCaller().setWinInfoReceiver(this); 1047dd7871fSLei De Bin } 1057dd7871fSLei De Bin createPartControl(Composite parent)1067dd7871fSLei De Bin public void createPartControl(Composite parent) { 1077dd7871fSLei De Bin GridLayout layout = new GridLayout(); 1087dd7871fSLei De Bin layout.numColumns = 1; 1097dd7871fSLei De Bin layout.marginLeft = 0; 1107dd7871fSLei De Bin layout.marginRight = 0; 1117dd7871fSLei De Bin layout.marginTop = 0; 1127dd7871fSLei De Bin layout.marginBottom = 0; 1137dd7871fSLei De Bin layout.marginHeight = 0; 1147dd7871fSLei De Bin layout.marginWidth = 0; 1157dd7871fSLei De Bin parent.setLayout(layout); 1167dd7871fSLei De Bin 1177dd7871fSLei De Bin messageLabel = new Label(parent, SWT.NONE); 1187dd7871fSLei De Bin GridData gridData = new GridData(GridData.FILL_HORIZONTAL); 1197dd7871fSLei De Bin gridData.minimumHeight = 14; 1207dd7871fSLei De Bin gridData.heightHint = 14; 1217dd7871fSLei De Bin messageLabel.setLayoutData(gridData); 1227dd7871fSLei De Bin 1237dd7871fSLei De Bin viewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 1247dd7871fSLei De Bin gridData = new GridData(GridData.FILL_BOTH); 1257dd7871fSLei De Bin viewer.getTable().setLayoutData(gridData); 1267dd7871fSLei De Bin 1277dd7871fSLei De Bin viewer.setContentProvider(new VclExplorerContentProvider()); 1287dd7871fSLei De Bin viewer.setLabelProvider(new VclExplorerLabelProvider()); 1297dd7871fSLei De Bin viewer.setInput(controlInfos); 1307dd7871fSLei De Bin 1317dd7871fSLei De Bin display = parent.getDisplay(); 1327dd7871fSLei De Bin duplicatedNameColor = new Color(display, 255, 160, 160); 1337dd7871fSLei De Bin final Table table = viewer.getTable(); 1347dd7871fSLei De Bin table.setHeaderVisible(true); 1357dd7871fSLei De Bin table.setLinesVisible(true); 1367dd7871fSLei De Bin TableColumn column = new TableColumn(table, SWT.NONE); 1377dd7871fSLei De Bin column.setText("ID"); 1387dd7871fSLei De Bin column.setResizable(true); 1397dd7871fSLei De Bin column.setMoveable(false); 1407dd7871fSLei De Bin column.setWidth(100); 1417dd7871fSLei De Bin column = new TableColumn(table, SWT.NONE); 1427dd7871fSLei De Bin column.setText("Name"); 1437dd7871fSLei De Bin column.setResizable(true); 1447dd7871fSLei De Bin column.setMoveable(false); 1457dd7871fSLei De Bin column.setWidth(150); 1467dd7871fSLei De Bin 1477dd7871fSLei De Bin column = new TableColumn(table, SWT.NONE); 1487dd7871fSLei De Bin column.setText("Type"); 1497dd7871fSLei De Bin column.setResizable(true); 1507dd7871fSLei De Bin column.setMoveable(false); 1517dd7871fSLei De Bin column.setWidth(100); 1527dd7871fSLei De Bin column = new TableColumn(table, SWT.NONE); 1537dd7871fSLei De Bin column.setText("Tips"); 1547dd7871fSLei De Bin column.setResizable(true); 1557dd7871fSLei De Bin column.setMoveable(false); 1567dd7871fSLei De Bin column.setWidth(200); 1577dd7871fSLei De Bin 1587dd7871fSLei De Bin viewer.setColumnProperties(new String[] { "ID", "Name", "Type", "Tips" }); 1597dd7871fSLei De Bin TextCellEditor nameCellEditor = new TextCellEditor(viewer.getTable()); 1607dd7871fSLei De Bin final Text nameText = ((Text) nameCellEditor.getControl()); 1617dd7871fSLei De Bin nameText.addModifyListener(new ModifyListener() { 1627dd7871fSLei De Bin public void modifyText(ModifyEvent me) { 1637dd7871fSLei De Bin String message = validateName(nameText.getText()); 1647dd7871fSLei De Bin if (message != null) { 1657dd7871fSLei De Bin messageLabel.setText(message); 1667dd7871fSLei De Bin nameText.setBackground(duplicatedNameColor); 1677dd7871fSLei De Bin } else { 1687dd7871fSLei De Bin messageLabel.setText(""); 1697dd7871fSLei De Bin nameText.setBackground(null); 1707dd7871fSLei De Bin } 1717dd7871fSLei De Bin } 1727dd7871fSLei De Bin }); 1737dd7871fSLei De Bin 1747dd7871fSLei De Bin viewer.setCellEditors(new CellEditor[] { null, nameCellEditor, null, null}); 1757dd7871fSLei De Bin viewer.setCellModifier(new ICellModifier() { 1767dd7871fSLei De Bin 1777dd7871fSLei De Bin public boolean canModify(Object element, String property) { 1787dd7871fSLei De Bin if (!"Name".equals(property)) 1797dd7871fSLei De Bin return false; 1807dd7871fSLei De Bin 1817dd7871fSLei De Bin ControlInfo controlInfo = (ControlInfo) element; 1827dd7871fSLei De Bin if (controlInfo.name != null) 1837dd7871fSLei De Bin return false; 1847dd7871fSLei De Bin 1857dd7871fSLei De Bin return uiMapOp.scan(); 1867dd7871fSLei De Bin } 1877dd7871fSLei De Bin 1887dd7871fSLei De Bin public Object getValue(Object element, String property) { 1897dd7871fSLei De Bin // if (!"Name".equals(property)) 1907dd7871fSLei De Bin // return false; 1917dd7871fSLei De Bin ControlInfo controlInfo = (ControlInfo) element; 1927dd7871fSLei De Bin return controlInfo.name == null ? "" : controlInfo.name; 1937dd7871fSLei De Bin } 1947dd7871fSLei De Bin 1957dd7871fSLei De Bin public void modify(Object element, String property, Object value) { 1967dd7871fSLei De Bin // if (!"Name".equals(property)) 1977dd7871fSLei De Bin // return; 1987dd7871fSLei De Bin TableItem item = (TableItem) element; 1997dd7871fSLei De Bin ControlInfo controlInfo = (ControlInfo) item.getData(); 2007dd7871fSLei De Bin String newName = (String) value; 2017dd7871fSLei De Bin String msg = validateName(newName); 2027dd7871fSLei De Bin if (msg == null) { 2037dd7871fSLei De Bin controlInfo.name = newName; 2047dd7871fSLei De Bin if (doDefineName(controlInfo)) { 2057dd7871fSLei De Bin item.setText(1, newName); 2067dd7871fSLei De Bin messageLabel.setText(""); 2077dd7871fSLei De Bin } else { 2087dd7871fSLei De Bin controlInfo.name = null; 2097dd7871fSLei De Bin messageLabel.setText("Can't define the control in UIMap. UIMap maybe is broken!"); 2107dd7871fSLei De Bin } 2117dd7871fSLei De Bin } else { 2127dd7871fSLei De Bin messageLabel.setText(msg); 2137dd7871fSLei De Bin } 2147dd7871fSLei De Bin } 2157dd7871fSLei De Bin 2167dd7871fSLei De Bin }); 2177dd7871fSLei De Bin 2187dd7871fSLei De Bin ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy( 2197dd7871fSLei De Bin viewer) { 2207dd7871fSLei De Bin protected boolean isEditorActivationEvent( 2217dd7871fSLei De Bin ColumnViewerEditorActivationEvent event) { 2227dd7871fSLei De Bin return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL 2237dd7871fSLei De Bin || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION 2247dd7871fSLei De Bin || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; 2257dd7871fSLei De Bin } 2267dd7871fSLei De Bin }; 2277dd7871fSLei De Bin 2287dd7871fSLei De Bin TableViewerEditor.create(viewer, actSupport, 2297dd7871fSLei De Bin ColumnViewerEditor.TABBING_HORIZONTAL 2307dd7871fSLei De Bin | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR 2317dd7871fSLei De Bin | ColumnViewerEditor.TABBING_VERTICAL 2327dd7871fSLei De Bin | ColumnViewerEditor.KEYBOARD_ACTIVATION); 2337dd7871fSLei De Bin 2347dd7871fSLei De Bin // Create the help context id for the viewer's control 2357dd7871fSLei De Bin PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "org.vclauto.assistant.viewer"); 2367dd7871fSLei De Bin makeActions(); 2377dd7871fSLei De Bin hookContextMenu(); 2387dd7871fSLei De Bin hookDoubleClickAction(); 2397dd7871fSLei De Bin contributeToActionBars(); 2407dd7871fSLei De Bin } 2417dd7871fSLei De Bin hookContextMenu()2427dd7871fSLei De Bin private void hookContextMenu() { 2437dd7871fSLei De Bin MenuManager menuMgr = new MenuManager("#PopupMenu"); 2447dd7871fSLei De Bin menuMgr.setRemoveAllWhenShown(true); 2457dd7871fSLei De Bin menuMgr.addMenuListener(new IMenuListener() { 2467dd7871fSLei De Bin public void menuAboutToShow(IMenuManager manager) { 2477dd7871fSLei De Bin VclExplorer.this.fillContextMenu(manager); 2487dd7871fSLei De Bin } 2497dd7871fSLei De Bin }); 2507dd7871fSLei De Bin Menu menu = menuMgr.createContextMenu(viewer.getControl()); 2517dd7871fSLei De Bin viewer.getControl().setMenu(menu); 2527dd7871fSLei De Bin getSite().registerContextMenu(menuMgr, viewer); 2537dd7871fSLei De Bin } 2547dd7871fSLei De Bin contributeToActionBars()2557dd7871fSLei De Bin private void contributeToActionBars() { 2567dd7871fSLei De Bin IActionBars bars = getViewSite().getActionBars(); 2577dd7871fSLei De Bin fillLocalPullDown(bars.getMenuManager()); 2587dd7871fSLei De Bin fillLocalToolBar(bars.getToolBarManager()); 2597dd7871fSLei De Bin } 2607dd7871fSLei De Bin fillLocalPullDown(IMenuManager manager)2617dd7871fSLei De Bin private void fillLocalPullDown(IMenuManager manager) { 2627dd7871fSLei De Bin manager.add(inspectAction); 2637dd7871fSLei De Bin manager.add(new Separator()); 2647dd7871fSLei De Bin manager.add(launchAction); 2657dd7871fSLei De Bin } 2667dd7871fSLei De Bin fillContextMenu(IMenuManager manager)2677dd7871fSLei De Bin private void fillContextMenu(IMenuManager manager) { 2687dd7871fSLei De Bin manager.add(inspectAction); 2697dd7871fSLei De Bin manager.add(launchAction); 2707dd7871fSLei De Bin // Other plug-ins can contribute there actions here 2717dd7871fSLei De Bin manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); 2727dd7871fSLei De Bin } 2737dd7871fSLei De Bin fillLocalToolBar(IToolBarManager manager)2747dd7871fSLei De Bin private void fillLocalToolBar(IToolBarManager manager) { 2757dd7871fSLei De Bin manager.add(inspectAction); 2767dd7871fSLei De Bin manager.add(launchAction); 2777dd7871fSLei De Bin } 2787dd7871fSLei De Bin makeActions()2797dd7871fSLei De Bin private void makeActions() { 2807dd7871fSLei De Bin inspectAction = new Action() { 2817dd7871fSLei De Bin public void run() { 2827dd7871fSLei De Bin if (!VclHook.available()) { 2837dd7871fSLei De Bin showMessage("OpenOffice is not launched or initializing. Click \"Launch\" to start OpenOffice or wait it to finish initializing."); 2847dd7871fSLei De Bin return; 2857dd7871fSLei De Bin } 2867dd7871fSLei De Bin try { 2877dd7871fSLei De Bin VclHook.invokeCommand(Constant.RC_DisplayHid, new Object[]{Boolean.TRUE}); 2887dd7871fSLei De Bin } catch (Exception e) { 2897dd7871fSLei De Bin showMessage("OpenOffice disappeared! It maybe crashed or freezed. Please re-launch it."); 2907dd7871fSLei De Bin } 2917dd7871fSLei De Bin 2927dd7871fSLei De Bin 2937dd7871fSLei De Bin } 2947dd7871fSLei De Bin }; 2957dd7871fSLei De Bin inspectAction.setText("Inspect"); 2967dd7871fSLei De Bin inspectAction.setToolTipText("Inspect VCL controls."); 2977dd7871fSLei De Bin // action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). 2987dd7871fSLei De Bin // getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); 2997dd7871fSLei De Bin 3007dd7871fSLei De Bin launchAction = new Action() { 3017dd7871fSLei De Bin public void run() { 3027dd7871fSLei De Bin IPreferenceStore store = Activator.getDefault().getPreferenceStore(); 3037dd7871fSLei De Bin final String ooHome = store.getString(PreferenceConstants.P_OPENOFFICE_HOME); 3047dd7871fSLei De Bin if (ooHome == null || ooHome.length() == 0) { 3057dd7871fSLei De Bin showMessage("Please set OpenOffice home in the Vclauto assistant preference page."); 3067dd7871fSLei De Bin return; 3077dd7871fSLei De Bin } 3087dd7871fSLei De Bin File ooHomeFile = new File(ooHome, "soffice.bin"); 3097dd7871fSLei De Bin if (!ooHomeFile.exists()) { 3107dd7871fSLei De Bin showMessage("OpenOffice home is not set correctly in the Vclauto assistant preference page."); 3117dd7871fSLei De Bin return; 3127dd7871fSLei De Bin } 3137dd7871fSLei De Bin 3147dd7871fSLei De Bin IRunnableWithProgress op = new IRunnableWithProgress() { 3157dd7871fSLei De Bin @Override 3167dd7871fSLei De Bin public void run(IProgressMonitor arg0) throws InvocationTargetException, InterruptedException { 3177dd7871fSLei De Bin VclApp app = new VclApp(ooHome); 3187dd7871fSLei De Bin if (!app.exists()) { 3197dd7871fSLei De Bin app.kill(); 3207dd7871fSLei De Bin app.start(); 3217dd7871fSLei De Bin } 3227dd7871fSLei De Bin } 3237dd7871fSLei De Bin }; 3247dd7871fSLei De Bin 3257dd7871fSLei De Bin IWorkbench wb = PlatformUI.getWorkbench(); 3267dd7871fSLei De Bin 3277dd7871fSLei De Bin try { 3287dd7871fSLei De Bin wb.getProgressService().run(true, false, op); 3297dd7871fSLei De Bin } catch (InvocationTargetException e) { 3307dd7871fSLei De Bin e.printStackTrace(); 3317dd7871fSLei De Bin } catch (InterruptedException e) { 3327dd7871fSLei De Bin 3337dd7871fSLei De Bin e.printStackTrace(); 3347dd7871fSLei De Bin } 3357dd7871fSLei De Bin } 3367dd7871fSLei De Bin }; 3377dd7871fSLei De Bin launchAction.setText("Launch"); 3387dd7871fSLei De Bin launchAction.setToolTipText("Launch OpenOffice"); 3397dd7871fSLei De Bin // action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). 3407dd7871fSLei De Bin // getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); 3417dd7871fSLei De Bin insertCodeAction = new Action() { 3427dd7871fSLei De Bin public void run() { 3437dd7871fSLei De Bin ISelection selection = viewer.getSelection(); 3447dd7871fSLei De Bin if (selection == null) 3457dd7871fSLei De Bin return; 3467dd7871fSLei De Bin 3477dd7871fSLei De Bin final ControlInfo controlInfo = (ControlInfo)((IStructuredSelection) selection).getFirstElement(); 3487dd7871fSLei De Bin if (controlInfo.name != null) { 3497dd7871fSLei De Bin doInsertCode(controlInfo.name); 3507dd7871fSLei De Bin } 3517dd7871fSLei De Bin } 3527dd7871fSLei De Bin }; 3537dd7871fSLei De Bin } 3547dd7871fSLei De Bin validateName(String name)3557dd7871fSLei De Bin private String validateName(String name) { 3567dd7871fSLei De Bin if (uiMapOp.names.contains(name)) 3577dd7871fSLei De Bin return "Duplicated name."; 3587dd7871fSLei De Bin IStatus status = JavaConventions.validateFieldName(name, "1.5", "1.5"); 3597dd7871fSLei De Bin return status.isOK() ? null : "It's an invalidate java field name."; 3607dd7871fSLei De Bin } doDefineName(ControlInfo controlInfo)3617dd7871fSLei De Bin private boolean doDefineName(ControlInfo controlInfo) { 3627dd7871fSLei De Bin try { 3637dd7871fSLei De Bin uiMapOp.define(controlInfo); 3647dd7871fSLei De Bin } catch (Exception e) { 3657dd7871fSLei De Bin controlInfo.name = null; 3667dd7871fSLei De Bin e.printStackTrace(); 3677dd7871fSLei De Bin } 3687dd7871fSLei De Bin 3697dd7871fSLei De Bin return true; 3707dd7871fSLei De Bin } 3717dd7871fSLei De Bin doInsertCode(String code)3727dd7871fSLei De Bin private void doInsertCode(String code) { 3737dd7871fSLei De Bin IWorkbench wb = PlatformUI.getWorkbench(); 3747dd7871fSLei De Bin IWorkbenchWindow window = wb.getActiveWorkbenchWindow(); 3757dd7871fSLei De Bin IWorkbenchPage page = window.getActivePage(); 3767dd7871fSLei De Bin 3777dd7871fSLei De Bin IEditorPart editorPart = page.getActiveEditor(); 3787dd7871fSLei De Bin if (!(editorPart instanceof AbstractTextEditor)) 3797dd7871fSLei De Bin return; 3807dd7871fSLei De Bin 3817dd7871fSLei De Bin AbstractTextEditor editor = (AbstractTextEditor) editorPart; 3827dd7871fSLei De Bin IDocumentProvider dp = editor.getDocumentProvider(); 3837dd7871fSLei De Bin IDocument doc = dp.getDocument(editor.getEditorInput()); 3847dd7871fSLei De Bin try { 3857dd7871fSLei De Bin ITextSelection textSelection = (ITextSelection) editorPart.getSite().getSelectionProvider().getSelection(); 3867dd7871fSLei De Bin int offset = textSelection.getOffset(); 3877dd7871fSLei De Bin 3887dd7871fSLei De Bin doc.replace(offset, textSelection.getLength(), code); 3897dd7871fSLei De Bin } catch (Exception e) { 3907dd7871fSLei De Bin // TODO: handle exception 3917dd7871fSLei De Bin e.printStackTrace(); 3927dd7871fSLei De Bin } 3937dd7871fSLei De Bin } 3947dd7871fSLei De Bin hookDoubleClickAction()3957dd7871fSLei De Bin private void hookDoubleClickAction() { 3967dd7871fSLei De Bin viewer.addDoubleClickListener(new IDoubleClickListener() { 3977dd7871fSLei De Bin public void doubleClick(DoubleClickEvent event) { 3987dd7871fSLei De Bin 3997dd7871fSLei De Bin insertCodeAction.run(); 4007dd7871fSLei De Bin } 4017dd7871fSLei De Bin }); 4027dd7871fSLei De Bin } showMessage(String message)4037dd7871fSLei De Bin private void showMessage(String message) { 4047dd7871fSLei De Bin MessageDialog.openInformation( 4057dd7871fSLei De Bin viewer.getControl().getShell(), 4067dd7871fSLei De Bin "Vcl Explorer", 4077dd7871fSLei De Bin message); 4087dd7871fSLei De Bin } 4097dd7871fSLei De Bin 4107dd7871fSLei De Bin /** 4117dd7871fSLei De Bin * Passing the focus request to the viewer's control. 4127dd7871fSLei De Bin */ setFocus()4137dd7871fSLei De Bin public void setFocus() { 4147dd7871fSLei De Bin viewer.getControl().setFocus(); 4157dd7871fSLei De Bin } 4167dd7871fSLei De Bin 4177dd7871fSLei De Bin 4187dd7871fSLei De Bin @Override addWinInfo(final SmartId id, final long type, final String t)4197dd7871fSLei De Bin public void addWinInfo(final SmartId id, final long type, final String t) { 4207dd7871fSLei De Bin final String tooltip = t.replaceAll("%.*%.*:", ""); 4217dd7871fSLei De Bin ControlInfo info = new ControlInfo(id, type, tooltip); 4227dd7871fSLei De Bin //info.shot(); 4237dd7871fSLei De Bin controlInfos.add(info); 4247dd7871fSLei De Bin } 4257dd7871fSLei De Bin 4267dd7871fSLei De Bin @Override onFinishReceiving()4277dd7871fSLei De Bin public void onFinishReceiving() { 4287dd7871fSLei De Bin // for (ControlInfo info : controlInfos) { 4297dd7871fSLei De Bin // info.shot(); 4307dd7871fSLei De Bin // } 4317dd7871fSLei De Bin // 4327dd7871fSLei De Bin display.asyncExec(new Runnable() { 4337dd7871fSLei De Bin public void run() { 4347dd7871fSLei De Bin if (uiMapOp.scan()) { 4357dd7871fSLei De Bin uiMapOp.populateName(controlInfos); 4367dd7871fSLei De Bin } else { 4377dd7871fSLei De Bin messageLabel.setText("Can not find UIMap and code generating will not work."); 4387dd7871fSLei De Bin } 4397dd7871fSLei De Bin viewer.setInput(controlInfos); 4407dd7871fSLei De Bin } 4417dd7871fSLei De Bin }); 4427dd7871fSLei De Bin } 4437dd7871fSLei De Bin 4447dd7871fSLei De Bin @Override onStartReceiving()4457dd7871fSLei De Bin public void onStartReceiving() { 4467dd7871fSLei De Bin controlInfos = new ArrayList<ControlInfo>(); 4477dd7871fSLei De Bin } 4487dd7871fSLei De Bin }