SRADA-908: Merge remote-tracking branch 'origin/ui_e4_migration' into 'sdk_merge'
authorjaeyong lee <jae-yong.lee@samsung.com>
Thu, 14 Jul 2016 06:25:45 +0000 (15:25 +0900)
committerMaria Guseva <m.guseva@samsung.com>
Thu, 14 Jul 2016 09:46:26 +0000 (18:46 +0900)
Conflicts:
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/UIAction.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties
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
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialog.java

Change-Id: I9c779c07cf946a97962e8c7c90e94a60cb626ac8

1  2 
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/GUIAction.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/nl/UserErrorWarningLabels.properties
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/shortcut/ShortCutKeyBindingHandler.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/hierarchy/tree/tool/HierarchyTreeExporter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/BaseView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/MenuBar.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/opentrace/OpenTraceProgressManager.java

index f7b0354,0000000..76ac630
mode 100644,000000..100644
--- /dev/null
@@@ -1,302 -1,0 +1,321 @@@
-                               DADialog dialog = new DADialog(shell, SWT.NONE, width, height);
-                               dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
 +/*
 + *  Dynamic Analyzer
 + *
 + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
 + *
 + * Contact: 
 + * Jaewon Lim <jaewon81.lim@samsung.com>
 + * Juyoung Kim <j0.kim@samsung.com>
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + * 
 + * Contributors:
 + * - S-Core Co., Ltd
 + * 
 + */
 +
 +package org.tizen.dynamicanalyzer.handlers;
 +
 +import java.util.Arrays;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Set;
 +
 +import org.eclipse.swt.SWT;
++import org.eclipse.swt.events.SelectionEvent;
++import org.eclipse.swt.events.SelectionListener;
++import org.eclipse.swt.widgets.Button;
 +import org.eclipse.swt.widgets.Display;
 +import org.eclipse.swt.widgets.Shell;
 +import org.tizen.dynamicanalyzer.common.DALogExport;
 +import org.tizen.dynamicanalyzer.common.DAResult;
 +import org.tizen.dynamicanalyzer.constant.CommonConstants;
 +import org.tizen.dynamicanalyzer.project.Project;
 +import org.tizen.dynamicanalyzer.resources.ImageResources;
 +import org.tizen.dynamicanalyzer.setting.SettingDataManager;
 +import org.tizen.dynamicanalyzer.setting.TargetData;
 +import org.tizen.dynamicanalyzer.setting.UILayoutDataManager;
 +import org.tizen.dynamicanalyzer.ui.info.appStartup.AppStartupView;
 +import org.tizen.dynamicanalyzer.ui.page.BaseView;
 +import org.tizen.dynamicanalyzer.ui.page.PageInfoRegistry;
 +import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfilingView;
 +import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
 +import org.tizen.dynamicanalyzer.ui.timeline.calltrace.CallTraceView;
 +import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineChartManager;
 +import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineTableView;
 +import org.tizen.dynamicanalyzer.util.Logger;
 +import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
 +import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
 +import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
 +import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
 +import org.tizen.dynamicanalyzer.widgets.da.base.DADialog;
 +import org.tizen.dynamicanalyzer.widgets.da.view.DATabComposite;
 +
 +public class GUIAction implements UIAction {
 +      public static final int DEFAULT_WARNING_WIDTH = 446;
 +      public static final int DEFAULT_WARNING_HEIGHT = 153;
 +
 +      /**
 +       * Reset UI. Disable lastest button in screenshot view, and change leak view title.
 +       */
 +      @Override
 +      public void applyStartTraceUI() {
 +              Display.getDefault().syncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              AnalyzerUtil.setLatestTraceMode(TimelinePage.pageID, true);
 +                      }
 +              });
 +      }
 +
 +      @Override
 +      public void applyStopTraceUI() {
 +              Display.getDefault().syncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              AnalyzerUtil.setLatestTraceMode(TimelinePage.pageID, true);
 +                      }
 +              });
 +      }
 +
 +      @Override
 +      public void applyWebProfilingUI(final boolean isWeb) {
 +              Display.getDefault().syncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              // change startup table in timeline page
 +                              DATabComposite timelineTabComp = (DATabComposite) AnalyzerUtil.getView(
 +                                              TimelinePage.pageID, TimelineTableView.tabID);
 +                              AppStartupView appStartup = (AppStartupView) timelineTabComp
 +                                              .getView(TimelineTableView.appStartupViewID);
 +                              appStartup.changeTable(isWeb);
 +
 +                              // change call trace table in timeline page
 +                              CallTraceView apiListView = (CallTraceView) AnalyzerUtil.getView(
 +                                              TimelinePage.pageID, TimelinePage.calltraceViewID);
 +                              apiListView.changeTable(isWeb);
 +
 +                              // change profiling table in summary page
 +                              FunctionUsageProfilingView userFunctionProfilingView = (FunctionUsageProfilingView) AnalyzerUtil
 +                                              .getView(TimelinePage.pageID, FunctionUsageProfilingView.class.getName());
 +                              if(userFunctionProfilingView != null) {
 +                                      userFunctionProfilingView.changeTable(isWeb);
 +                              }
 +                      }
 +              });
 +      }
 +
 +      @Override
 +      public void showWarning(final String message, final int width,
 +                      final int height) {
 +              Display.getDefault().asyncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                               dialog.setDialog(true);
-                               dialog.getExportButton().addClickListener(exportListener);
++                              DADialog dialog = new DADialog(shell, DADialog.DIALOGTYPE.ERROR_WITH_EXPORT, SWT.NONE, width, height);
++                              dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
 +                              dialog.setMessage(message);
-                               DADialog dialog = new DADialog(shell, SWT.NONE);
-                               dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
-                               dialog.setMessage(message);
-                               dialog.setDialog(true);
-                               dialog.getExportButton().addClickListener(exportListener);
++                              dialog.setDialog();
++                              dialog.getExportButton().addSelectionListener(exportButtonListener);
 +                              dialog.open();
 +                      }
 +              });
 +      }
 +
 +      @Override
 +      public void showWarning(final DAResult result, final int width,
 +                      final int height) {
 +              showWarning(result.getMessage() + " (" + result.getErrorNumber() + ")", width, height);
 +      }
 +
 +      @Override
 +      public void showWarning(final String message) {
 +              Display.getDefault().asyncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-               Display.getDefault().asyncExec(new Runnable() {
-                       @Override
-                       public void run() {
-                               Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
-                               DADialog dialog = new DADialog(shell, SWT.NONE);
-                               dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
-                               dialog.setTitleText(title);
-                               dialog.setMessage(message);
-                               dialog.open();
-                       }
-               });
++                              DADialog dialog = new DADialog(shell, DADialog.DIALOGTYPE.ERROR_WITH_EXPORT, SWT.NONE);
++                              dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
++                              dialog.setMessage(message);                             
++                              dialog.setDialog();
++                              dialog.getExportButton().addSelectionListener(exportButtonListener);
 +                              dialog.open();
 +                      }
 +              });
 +      }
 +
 +      @Override
 +      public void showWarning(final String title, final String message) {
-                               DADialog dialog = new DADialog(shell, SWT.NONE);
-                               dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
++//            Display.getDefault().asyncExec(new Runnable() {
++//                    @Override
++//                    public void run() {
++//                            Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
++//                            DADialog dialog = new DADialog(shell, SWT.NONE);
++//                            dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
++//                            dialog.setTitleText(title);
++//                            dialog.setMessage(message);
++//                            dialog.open();
++//                    }
++//            });
 +      }
 +
 +      @Override
 +      public void showWarning(final DAResult result) {
 +              showWarning(result.getMessage() + CommonConstants.SPACE + CommonConstants.OPEN_BRACKET
 +                              + result.getErrorNumber() + CommonConstants.CLOSE_BRACKET);
 +      }
 +
 +      @Override
 +      public void showWarning(final Shell shell, final String message) {
 +              Display.getDefault().asyncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
-                               dialog.setDialog(true);
-                               dialog.getExportButton().addClickListener(exportListener);
++                              DADialog dialog = new DADialog(shell, DADialog.DIALOGTYPE.ERROR_WITH_EXPORT, SWT.NONE);
++                              dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
 +                              dialog.setMessage(message);
++                              dialog.setDialog();
++                              dialog.getExportButton().addSelectionListener(exportButtonListener);
 +                              dialog.open();
 +                      }
 +              });
 +      }
 +
 +      @Override
 +      public void showWarning(final Shell shell, final DAResult result) {
 +              showWarning(shell, result.getMessage() + CommonConstants.SPACE
 +                              + CommonConstants.OPEN_BRACKET + result.getErrorNumber()
 +                              + CommonConstants.CLOSE_BRACKET);
 +      }
 +
 +      @Override
 +      public List<String> getPageNames() {
 +              BaseView bv = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID);
 +              List<String> idList = bv.getMainTab().getViewIDList();
 +              List<String> nameList = PageInfoRegistry.convertPageIDtoPageName(idList);
 +
 +              return nameList;
 +      }
 +
 +      @Override
 +      public void setUIElements(Project project) {
 +              setPages(project.getPageTabList());
 +              setCharts(project.getTimelineChartList());
 +      }
 +
 +      /**
 +       * Set tab pages to be shown on UI.
 +       *
 +       * @param pageNames list of page names.
 +       */
 +      private void setPages(String[] pageNames) {
 +              if (pageNames != null) {
 +                      final Set<String> pageNameSet = new HashSet<String>(Arrays.asList(pageNames));
 +
 +                      Display.getDefault().syncExec(new Runnable() {
 +                              @Override
 +                              public void run() {
 +                                      BaseView bv = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID);
 +                                      bv.compositePages(pageNameSet);
 +                              }
 +                      });
 +              }
 +      }
 +
 +      /**
 +       * Set charts to be shown on UI.
 +       *
 +       * @param chartNames list of chart names.
 +       */
 +      private void setCharts(String[] chartNames) {
 +              if (chartNames != null) {
 +                      final List<String> chartNameList = Arrays.asList(chartNames);
 +
 +                      Display.getDefault().syncExec(new Runnable() {
 +                              @Override
 +                              public void run() {
 +                                      TimelineChartManager.getInstance().loadSelectedChartListByFile(chartNameList);
 +                              }
 +                      });
 +              }
 +      }
 +
 +      @Override
 +      public void setUIElementsBySetting() {
 +              setPageBySetting();
 +              setChartBySetting();
 +      }
 +
 +      @Override
 +      public void setPageBySetting() {
 +              TargetData target = SettingDataManager.INSTANCE.getConnectedTarget();
 +              final String targetName = target.getTargetName();
 +
 +              Display.getDefault().syncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              Logger.debug(targetName);
 +                              BaseView bv = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID);
 +                              bv.createPagesByTarget(targetName);
 +                      }
 +              });
 +
 +              UILayoutDataManager.INSTANCE.setDirty(false);
 +      }
 +
 +      /**
 +       * Update charts to be shown on UI based on current settings.
 +       */
 +      private void setChartBySetting() {
 +              final Set<String> selectedChartSet = new HashSet<String>();
 +
 +              // set selected chart list
 +              TargetData target = SettingDataManager.INSTANCE.getConnectedTarget();
 +              Set<String> targetChartList = SettingDataManager.INSTANCE.getSelectedChartSet(target
 +                              .getTargetName());
 +              selectedChartSet.addAll(targetChartList);
 +              selectedChartSet.addAll(SettingDataManager.INSTANCE.getOptionsSelectedFeatureChartSet());
 +              Logger.debug(selectedChartSet);
 +
 +              Display.getDefault().syncExec(new Runnable() {
 +                      @Override
 +                      public void run() {
 +                              // update chart list in timeline page
 +                              Logger.debug(selectedChartSet);
 +                              TimelineChartManager.getInstance().loadSelectedChartList(selectedChartSet);
 +                      }
 +              });
 +      }
 +
 +      private static DACustomButtonClickEventListener exportListener = new DACustomButtonClickEventListener() {
 +              @Override
 +              public void handleClickEvent(DACustomButton button) {
 +                      DALogExport export = new DALogExport();
 +              }
 +      };
++      
++      private static SelectionListener exportButtonListener = new SelectionListener() {
++
++              @Override
++              public void widgetSelected(SelectionEvent e) {
++                      new DALogExport();
++                      if(e.getSource() != null && e.getSource() instanceof Button) {
++                              ((Button)e.getSource()).getParent().getParent().dispose();
++                      }
++              }
++
++              @Override
++              public void widgetDefaultSelected(SelectionEvent e) {
++              }
++              
++      };
 +}
@@@ -1,56 -1,41 +1,41 @@@
  ERROR_LIBTRACE_START=Library tracing cannot be started properly.
- ERROR_RPM_NOT_FOUND=Library rpm package file cannot be found. 
- ERROR_LIB_NOT_FOUND_INRPM=Library file cannot be found in rpm package. 
- ERROR_NO_APPID_FOR_LAUNCHPAD=There is no appid for launch_app.
- ERROR_DEVICE_CONNECTION= Failed to connect with the device. \nPlease re-run Dynamic Analyzer and reboot the device.
- ERROR_DEVICE_NOT_SUPPORTED=Current device is not supported. \nPlease ask to administrator.
- ERROR_DEVICE_IS_BUSY=Current device is occupied by another tracing process. \nPlease stop it before new requests.
- ERROR_TRACING_NOT_RUNNING=There are no tracing activities on current device.
- ERROR_DEVICE_NOT_FOUND=There is no connected device. \nPlease check the connection with device.
- ERROR_UNSUPPORTED_PROTOCOL=This version of platform of the device is not supported.\nPlease update the platform of device and retry.
- ERROR_BY_SECURITY_REASON=Current Device is not avaliable Root or developer account mode.
- ERROR_APP_SELECT_BY_SECURITY=Selected application cannot be traced due to security reason.
- ERROR_NONEXIST_APPLICATION=Does not exist in device.\nPlease check that the application has been installed successfully.
- ERROR_UNSUPPORTED_APPLICATION=Selected Application is invalid. \nPlease select another application or restart DA. 
- ERROR_CONFIGURATION_FAILED=Could not retrieve configuration from device. \nPlease check the connection with device.
- ERROR_CONNECTION_CLOSED="dataSocketClosed" status was checked in DataChannelThread. \nPlease re-connect device.
- ERROR_DOWNLOAD_FILE_FAILED=Downloading file is failed.
- ERROR_FAILED_OPERATION=Could not retrieve binary information from device. \nPlease re-connect device.
- ERROR_INTERNAL_REASON=Failed by internal reason.\nPlease try again or restart DA.
- ERROR_BY_UNKNOWN_REASON=Failed by unknown reason.
- ERROR_OUT_OF_MEMORY=Out of memory in Dynamic Analyzer.
- ERROR_START_TRACE_FAILED=Sending TraceStartMessage is failed. \nSelect another application available for trace.
- ERROR_NONEXIST_BINARY=Binary does not exist in device.
- ERROR_NONELF_BINARY=Binary is not ELF format.
- ERROR_SCREENSHOT_FAILED=Communicator don't receive AckMessage for Screenshot from device. \nPlease re-connect device.
- ERROR_UIHIERARCHY_FAILED=Communicator failed to get information of UI objects. Please try again.
- ERROR_UI_OBJECT_NOT_FOUND=Communicator didn't find Requested UI object from device. Please try again.
- ERROR_UI_OBJECT_SCREENSHOT_NOT_AVAILABLE=Application is running in background.\nTo get screenshot, application should be in foreground.
- ERROR_UIHIERARCHY_CANCEL_FAILED=It was unable to cancel getting information of UI objects.
+ ERROR_RPM_NOT_FOUND=Library RPM package file cannot be found. 
+ ERROR_LIB_NOT_FOUND_INRPM=Library file cannot be found in the RPM package. 
+ ERROR_NO_APPID_FOR_LAUNCHPAD=No app ID for launch_app
+ ERROR_DEVICE_CONNECTION= Failed to connect with the device. \nRe-run the dynamic analyzer and reboot the device.
+ ERROR_DEVICE_NOT_SUPPORTED=Current device is not supported.
+ ERROR_DEVICE_NOT_FOUND=No connected device is found. \nCheck the connection.
+ ERROR_UNSUPPORTED_PROTOCOL=Device platform version is not supported.\nUpdate the device platform and retry.
+ ERROR_BY_SECURITY_REASON=Current device is not available in the root or developer account mode.
+ ERROR_APP_SELECT_BY_SECURITY=Application cannot be traced due to security reasons.
+ ERROR_NONEXIST_APPLICATION=Application does not exist in the device.\nCheck that it has been installed successfully.
+ ERROR_UNSUPPORTED_APPLICATION=Invalid application. \nSelect another application or restart the dynamic analyzer. 
+ ERROR_CONFIGURATION_FAILED=Configuration cannot be retrieved from the device. \nCheck the connection.
+ ERROR_CONNECTION_CLOSED=Socket seems to be closed. \nReconnect the device.
+ ERROR_DOWNLOAD_FILE_FAILED=Download failed.
+ ERROR_FAILED_OPERATION=Binary information cannot be retrieved from the device. \nReconnect the device.
+ ERROR_INTERNAL_REASON=Failed for an internal reason.\nTry again or restart the dynamic analyzer.
+ ERROR_BY_UNKNOWN_REASON=Failed for some reason.
+ ERROR_OUT_OF_MEMORY=Dynamic analyzer is out of memory.
+ ERROR_START_TRACE_FAILED=Starting the trace failed. \nSelect another application available for trace.
+ ERROR_NONEXIST_BINARY=Binary does not exist in the device.
+ ERROR_NONELF_BINARY=Binary is not in the ELF format.
+ ERROR_SCREENSHOT_FAILED=Communicator did not receive the acknowledgement for the screenshot from the device. \nRe-connect the device.
+ ERROR_UIHIERARCHY_FAILED=Communicator failed to get the UI object information. Try again.
+ ERROR_UI_OBJECT_NOT_FOUND=Communicator did not find the UI object from the device. Try again.
+ ERROR_UI_OBJECT_SCREENSHOT_NOT_AVAILABLE=Application is running in the background.\nTo get a screenshot, the application must be in the foreground.
+ ERROR_UIHIERARCHY_CANCEL_FAILED=Canceling the UI object information retrieval failed.
  WARNING_PATH_NOT_FOUND=Path cannot be found.
  WARNING_FILE_NOT_FOUND=File cannot be found.
- WARNING_RUNNING_PROCESS_LIMIT=Only some limited features (System, Function profiling / sampling) can be worked in Running process tracing.
- WARNING_OVERHEAD_EXPLODE=Tracing overhead is too heavy to show the accurate \nresult. Please except some features in Settings to \nreduce overhead.
- WARNING_USER_CANCEL=Operation is canceled by user.
- WARNING_FILENAME_INVALID_CHAR=File name contains invalid character.
+ WARNING_RUNNING_PROCESS_LIMIT=Only some limited features (system, function profiling/sampling) can be used in the running process tracing.
+ WARNING_OVERHEAD_EXPLODE=Tracing overhead is too heavy to show the accurate \nresult. Disable some features in Settings to \nreduce the overhead.
+ WARNING_USER_CANCEL=Operation is canceled by the user.
+ WARNING_FILENAME_INVALID_CHAR=File name contains an invalid character.
  WARNING_FILENAME_EMPTY=File name is empty.
  WARNING_FILENAME_TOO_LONG=File name is too long.
- ERR_START_DATA_CHANNEL=Failed to start StartDataChannel. \nPlease try again or restart DA.
- ERR_START_MESSAGE_PARSER=Failed to start MessageParser. \nPlease try again or restart DA. 
- ERR_START_LOG_PARSER=Failed to start LogParser. \nPlease try again or restart DA.
- ERR_NO_PROCINFO=The process is not possible tracing. \nPlease select another process.
- ERR_WRONG_MESSAGE_FORMAT=Payload of AckMessage is null or exceeded "MAX_PAYLOAD_SIZE". \nPlease re-connect device.
- ERR_MSG_SEND_FAIL=No ack from device. \nPlease re-connect device.
+ ERR_START_DATA_CHANNEL=Failed to start the data channel. \nTry again or restart the dynamic analyzer.
+ ERR_START_MESSAGE_PARSER=Failed to start the MessageParser. \nTry again or restart the dynamic analyzer.
+ ERR_START_LOG_PARSER=Failed to start the LogParser. \nTry again or restart the dynamic analyzer.
+ ERR_NO_PROCINFO=Process cannot be traced. \nSelect another process.
+ ERR_WRONG_MESSAGE_FORMAT=AckMessage payload is null or exceeds the maximum size. \nRe-connect the device.
 -ERR_MSG_SEND_FAIL=No acknowledgement from the device. \nRe-connect the device.
++ERR_MSG_SEND_FAIL=No acknowledgement from the device. \nRe-connect the device.
@@@ -30,32 -32,19 +32,25 @@@ import org.eclipse.core.commands.Execut
  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.DAResult.ErrorCode;
 +import org.tizen.dynamicanalyzer.common.DAState;
 +import org.tizen.dynamicanalyzer.handlers.CommandAction;
 +import org.tizen.dynamicanalyzer.handlers.ReplayManager;
 +import org.tizen.dynamicanalyzer.handlers.UIActionHolder;
+ import org.tizen.dynamicanalyzer.common.Global;
+ import org.tizen.dynamicanalyzer.handlers.CommandAction;
+ 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;
@@@ -93,7 -83,55 +89,55 @@@ public class ShortCutKeyBindingHandler 
                        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);
++                                      UIActionHolder.getUIAction().showWarning(AnalyzerLabels.SAVE_FAILED);
+                               }
+                       }
+               }
                /*              
                else if (e.keyCode == SWT.F2) {
                        Logger.debug("configuration");
@@@ -43,14 -51,36 +51,38 @@@ import org.tizen.dynamicanalyzer.common
  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.swap.logparser.DataManagerRegistry;
+ 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;
+ import org.tizen.dynamicanalyzer.ui.interactive.InteractivePage;
+ import org.tizen.dynamicanalyzer.ui.interactive.data.InteractiveDataManager;
+ 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.swap.platform.BinarySettingManager;
  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;
  import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
@@@ -732,4 -721,67 +721,67 @@@ public class MenuBar 
  
                return false;
        }
 -                              UIAction.showWarning(AnalyzerLabels.SAVE_FAILED);
+       
+       private boolean showSaveWarning() {
+               boolean clear = true;
+               
+               if (Global.getProject() != null && Global.getProject().getIsSavedData() == false) {
+                       Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
+                       DADialog dialog = new DADialog(shell, DADialog.DIALOGTYPE.SAVE, SWT.NONE);
+                       dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
+                       dialog.setMessage("Tracing data is not saved.\nAre you sure to remove it?");
+                       dialog.setDialog();
+                       dialog.getSaveButton().addSelectionListener(saveButtonListener);
+                       dialog.open();
+                       clear = dialog.getResult();
+               }
+               
+               return clear;
+       }
+       
+       private void showSaveDialog() {
+               Project project = Global.getProject();
+               if (project == null) {
+                       return;
+               }
+               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)) {
++                              UIActionHolder.getUIAction().showWarning(AnalyzerLabels.SAVE_FAILED);
+                       }
+                       else {
+                               setMenuItemEnable(MenuBarLabels.FILE_SAVE, false);
+                               project.setSavedData(true);
+                       }
+               }
+       }
+       
+       private SelectionListener saveButtonListener = new SelectionListener() {
+               @Override
+               public void widgetSelected(SelectionEvent e) {
+                       showSaveDialog();
+                       if(e.getSource() != null && e.getSource() instanceof Button) {
+                               ((Button)e.getSource()).getParent().getParent().dispose();
+                       }
+               }
+               @Override
+               public void widgetDefaultSelected(SelectionEvent e) {
+               }
+               
+       };
  }