[SRADA-893] Add shortcut feature
authorjaeyong lee <jae-yong.lee@samsung.com>
Tue, 12 Jul 2016 06:43:51 +0000 (15:43 +0900)
committergihun chang <gihun.chang@samsung.com>
Wed, 13 Jul 2016 02:55:51 +0000 (11:55 +0900)
Conflicts:
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java

Change-Id: Ic0ec8a4c9e42e3646ec87a297df0287b31254d9d

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/shortcut/ShortCutKeyBindingHandler.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/MenuBar.java

index 5d386f2..3bd8ae4 100644 (file)
  */
 package org.tizen.dynamicanalyzer.shortcut;
 
+import java.io.File;
+
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Shell;
-import org.tizen.dynamicanalyzer.common.DAResult;
-import org.tizen.dynamicanalyzer.common.DAState;
-import org.tizen.dynamicanalyzer.common.DAResult.ErrorCode;
+import org.tizen.dynamicanalyzer.common.Global;
 import org.tizen.dynamicanalyzer.handlers.CommandAction;
-import org.tizen.dynamicanalyzer.handlers.ReplayManager;
 import org.tizen.dynamicanalyzer.handlers.UIAction;
 import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
-import org.tizen.dynamicanalyzer.ui.file.FilePage;
-import org.tizen.dynamicanalyzer.ui.kernel.KernelPage;
-import org.tizen.dynamicanalyzer.ui.memory.MemoryPage;
-import org.tizen.dynamicanalyzer.ui.network.NetworkPage;
-import org.tizen.dynamicanalyzer.ui.opengl.GLPage;
+import org.tizen.dynamicanalyzer.nl.MenuBarLabels;
+import org.tizen.dynamicanalyzer.project.Project;
+import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry;
 import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
-import org.tizen.dynamicanalyzer.ui.range.RangePage;
-import org.tizen.dynamicanalyzer.ui.summary.SummaryPage;
-import org.tizen.dynamicanalyzer.ui.thread.ThreadPage;
-import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
 import org.tizen.dynamicanalyzer.ui.toolbar.AboutDialog;
-import org.tizen.dynamicanalyzer.ui.toolbar.SaveAsDialog;
 import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar;
-import org.tizen.dynamicanalyzer.ui.toolbar.opentrace.OpenTraceDialog;
-import org.tizen.dynamicanalyzer.ui.toolbar.replayEditor.ReplayEditDialog;
-import org.tizen.dynamicanalyzer.ui.toolbar.setting.FlatFeatureDialog;
-import org.tizen.dynamicanalyzer.ui.toolbar.setting.SettingDialog;
-import org.tizen.dynamicanalyzer.ui.userinterface.UIPage;
+import org.tizen.dynamicanalyzer.ui.toolbar.opentrace.OpenTraceProgressManager;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
-import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
 
 public class ShortCutKeyBindingHandler extends AbstractHandler {
        private int CTRL_STATE_MASK = SWT.CTRL;
@@ -87,13 +75,63 @@ public class ShortCutKeyBindingHandler extends AbstractHandler {
                if (!enabled) {
                        return null;
                }
+               
+               Shell currentShell = WorkbenchUtil.getWorkbenchWindow().getShell();
 
                if (e.keyCode == SWT.F1) {
                        Logger.debug("about");
                        Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
                        AboutDialog dialog = new AboutDialog(shell);
                        dialog.open();
-               } 
+               } else if (e.stateMask == CTRL_STATE_MASK && e.keyCode == 'o') {
+                       FileDialog dialog = new FileDialog(currentShell, SWT.OPEN);
+                       dialog.setFilterNames(new String[] { "Zip file" });
+                       dialog.setFilterExtensions(new String[] { "*.zip" });
+                       dialog.setText(MenuBarLabels.FILE_LOAD_DIALOG_TITLE);
+
+                       final Object result = dialog.open();
+                       if (null != result) {
+                               Toolbar.INSTANCE.clearMarkerTimeList();
+                               RangeDataManager.getInstance().clearMarkerTime();
+                               RangeDataManager.getInstance().clearTimelineMarker();
+                               Thread loadthread = new Thread(new Runnable() {
+
+                                       @Override
+                                       public void run() {
+                                               String decompresspath = CommandAction.loadFromZip((String) result);
+
+                                               OpenTraceProgressManager.getInstance().setSavePath(decompresspath);
+                                               OpenTraceProgressManager.getInstance().startOpenTraceThread();
+                                       }
+                               });
+
+                               loadthread.run();
+                       }
+               } else if (e.stateMask == CTRL_STATE_MASK && e.keyCode == 's') {
+                       Project project = Global.getProject();
+                       if (project == null) {
+                               return null;
+                       }
+
+                       project.save();
+                       DataManagerRegistry.saveData();
+
+                       String savefilename = project.getSavePath()
+                                       .substring(project.getSavePath().lastIndexOf(File.separator) + 1);
+
+                       FileDialog dialog = new FileDialog(currentShell, SWT.SAVE);
+                       dialog.setFilterNames(new String[] { "Zip file" });
+                       dialog.setFilterExtensions(new String[] { "*.zip" });
+                       dialog.setFileName(savefilename + ".zip");
+                       dialog.setText(MenuBarLabels.FILE_SAVE_DIALOG_TITLE);
+
+                       Object result = dialog.open();
+                       if (null != result) {
+                               if (!CommandAction.saveToZip((String) result)) {
+                                       UIAction.showWarning(AnalyzerLabels.SAVE_FAILED);
+                               }
+                       }
+               }
                /*              
                else if (e.keyCode == SWT.F2) {
                        Logger.debug("configuration");
index 81e0a12..afc9367 100644 (file)
@@ -32,11 +32,17 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.jface.bindings.Binding;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.keys.IBindingService;
 import org.eclipse.ui.part.ViewPart;
 import org.tizen.dynamicanalyzer.annotation.UIMethod;
 import org.tizen.dynamicanalyzer.callback.ExecutionCallbackManager;
@@ -45,12 +51,18 @@ import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.common.DAState;
 import org.tizen.dynamicanalyzer.common.PreWindowShellCloseCallback;
 import org.tizen.dynamicanalyzer.common.path.PathManager;
+import org.tizen.dynamicanalyzer.communicator.DACommunicator;
 import org.tizen.dynamicanalyzer.communicator.DeviceManager;
 import org.tizen.dynamicanalyzer.communicator.IDECommunicator;
+import org.tizen.dynamicanalyzer.communicator.UnsupportedProtocolException;
 import org.tizen.dynamicanalyzer.control.SideWorker;
+import org.tizen.dynamicanalyzer.handlers.CommonAction;
+import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
 import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.setting.FlatFeature;
 import org.tizen.dynamicanalyzer.setting.SettingConstants;
 import org.tizen.dynamicanalyzer.setting.SettingDataManager;
+import org.tizen.dynamicanalyzer.setting.TargetData;
 import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager;
 import org.tizen.dynamicanalyzer.ui.file.FilePage;
 import org.tizen.dynamicanalyzer.ui.hierarchy.HierarchyPage;
@@ -60,11 +72,14 @@ import org.tizen.dynamicanalyzer.ui.kernel.KernelPage;
 import org.tizen.dynamicanalyzer.ui.memory.MemoryPage;
 import org.tizen.dynamicanalyzer.ui.network.NetworkPage;
 import org.tizen.dynamicanalyzer.ui.opengl.GLPage;
+import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
 import org.tizen.dynamicanalyzer.ui.summary.SummaryPage;
 import org.tizen.dynamicanalyzer.ui.thread.ThreadPage;
 import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
 import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar;
 import org.tizen.dynamicanalyzer.ui.toolbar.setting.FlatFeatureDialog;
+import org.tizen.dynamicanalyzer.ui.toolbar.setting.PreferencesDialog;
+import org.tizen.dynamicanalyzer.ui.toolbar.setting.TargetDialog;
 import org.tizen.dynamicanalyzer.ui.userinterface.UIPage;
 import org.tizen.dynamicanalyzer.util.CommonUtil;
 import org.tizen.dynamicanalyzer.util.Logger;
@@ -73,6 +88,7 @@ import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
 import org.tizen.dynamicanalyzer.widgets.da.view.DABaseComposite;
 import org.tizen.dynamicanalyzer.widgets.da.view.DAPageComposite;
 import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite;
+import org.tizen.dynamicanalyzer.widgets.scale.DAScale;
 import org.tizen.dynamicanalyzer.workbench.LayoutManager;
 
 public class BaseView extends ViewPart {
@@ -112,7 +128,94 @@ public class BaseView extends ViewPart {
                RunInitializing();
                MenuBar.getInstance().makeMenuBar();
                setMinumumShellSize();
+               unbindNeedlessCommand();
+               addKeyListener();
        }
+       
+       private void unbindNeedlessCommand() {
+               IWorkbench workbench = PlatformUI.getWorkbench(); 
+                 IBindingService bindingService = (IBindingService) workbench.getAdapter(IBindingService.class);
+                 for (Binding binding : bindingService.getBindings()) {
+                   if(binding.getTriggerSequence().toString().equals("CTRL+N")) {
+                       binding.getParameterizedCommand().getCommand().undefine();
+                   }
+                 }
+       }
+       
+       public void addKeyListener() {
+               PlatformUI.getWorkbench().getDisplay().addFilter(SWT.KeyDown, new Listener() {
+                       public void handleEvent(Event e) {
+                               Shell currentShell = WorkbenchUtil.getWorkbenchWindow().getShell();
+                               
+                               if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'q')) {
+                                       currentShell.close();
+                               } else if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'n')) {
+                                       CommonAction.clear();
+                                       Toolbar.INSTANCE.clearMarkerTimeList();
+                                       RangeDataManager.getInstance().clearMarkerTime();
+                                       RangeDataManager.getInstance().clearTimelineMarker();
+                                       
+                                       // change UI state
+                                       Toolbar.INSTANCE.changeUIState(DAState.INIT);
+                                       Toolbar.INSTANCE.setScaleSelection(DAScale.DEFAULT_SCALE_INDEX);
+                                       
+                                       FlatFeatureDialog featureDialog = new FlatFeatureDialog(currentShell);
+                                       featureDialog.open();
+                                       
+                                       /// if Feature Select changed and OK, is NewSetting is true.
+                                       if(SettingDataManager.INSTANCE.isNewSetting()){
+                                               // reset checks on ReportMenu items 
+//                                             resetReportItemCheck();                                 
+                                       }
+                               } else if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 't')) {
+                                       TargetDialog targetDialog = new TargetDialog(currentShell);
+                                       targetDialog.open();    
+                               } else if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'h')) {
+                                       if(MenuBar.getInstance().getViewDetail().getSelection()) {
+                                               MenuBar.getInstance().getViewDetail().setSelection(false);
+                                       } else {
+                                               MenuBar.getInstance().getViewDetail().setSelection(true);
+                                       }
+                                       MenuBar.getInstance().getViewDetail().notifyListeners(SWT.Selection, new Event());
+                               } else if(e.keyCode == 16777234) { //f9
+                                       if(DAState.isRunning()) {
+                                               TargetData target = SettingDataManager.INSTANCE.getConnectedTarget();
+                                               Set<String> targetChartList = SettingDataManager.INSTANCE.getSelectedChartSet(target
+                                                               .getTargetName());
+                                               if(!targetChartList.contains(TimelineChartLabels.SCREENSHOT_CHART_TITLE)) {
+                                                       BaseView baseView = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID);
+                                                       if(baseView.getTopComposite() instanceof TimelinePage) {
+                                                               TimelinePage timelinePage = (TimelinePage)baseView.getTopComposite();
+                                                               timelinePage.getTimelineChartView().addScreenshotChart();
+                                                               target.addSelectedFlatFeature(FlatFeature.SCREENSHOT.getName());
+                                                       }
+                                               }
+                                       }
+                                       
+                                       try {
+                                               if (!DACommunicator.captureScreenshot().isSuccess()) {
+                                                       Logger.error("Failed to capture screenshot");
+                                               }
+                                       } catch (InterruptedException ex) {
+                                               Logger.warning("Interrupted during send screenshot message");
+                                       } catch (UnsupportedProtocolException ex) {
+                                               Logger.warning("Message to capture screenshot is not supported by communicator");
+                                       }
+                               }
+                       }
+               });
+               
+               PlatformUI.getWorkbench().getDisplay().addFilter(SWT.KeyUp, new Listener() {
+                       public void handleEvent(Event e) {
+                               if(e.keyCode == 16777235) { //f10 calls keyPress listener twice
+                                       Shell currentShell = WorkbenchUtil.getWorkbenchWindow().getShell();
+                                       PreferencesDialog preferencesDialog = new PreferencesDialog(currentShell);
+                                       preferencesDialog.open();
+                               }
+                       }
+               });
+       }
+       
        public void RunInitializing(){
                DAState.changeCurrentState(DAState.INIT);
 
index 5b7fb77..d43f552 100644 (file)
@@ -90,6 +90,12 @@ public class MenuBar {
        private Menu menubar = null;
        
        private boolean sourceView = false;
+       
+       private MenuItem viewDetail;
+       
+       public MenuItem getViewDetail() {
+               return viewDetail;
+       }
 
        public MenuBar() {
                currentShell = WorkbenchUtil.getWorkbenchWindow().getShell();
@@ -158,7 +164,7 @@ public class MenuBar {
                Menu viewMenu = new Menu(currentShell, SWT.DROP_DOWN);
                viewItem.setMenu(viewMenu);
 
-               MenuItem viewDetail = new MenuItem(viewMenu, SWT.CHECK);
+               viewDetail = new MenuItem(viewMenu, SWT.CHECK);
                viewDetail.setText(MenuBarLabels.VIEW_DETAIL);
                viewDetail.addSelectionListener(viewMenuListener);
                viewDetail.setSelection(true);