--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srcanaapps/depexplorer/com.nokia.s60tools.appdep/src/com/nokia/s60tools/appdep/ui/views/listview/ListView.java Sat Jan 09 10:04:11 2010 +0530
@@ -0,0 +1,530 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package com.nokia.s60tools.appdep.ui.views.listview;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+
+import com.nokia.s60tools.appdep.AppDepHelpContextIDs;
+import com.nokia.s60tools.appdep.core.AppDepSettings;
+import com.nokia.s60tools.appdep.core.model.ComponentPropertiesData;
+import com.nokia.s60tools.appdep.plugin.AppDepPlugin;
+import com.nokia.s60tools.appdep.resources.Messages;
+import com.nokia.s60tools.appdep.ui.actions.ExportReportListViewAction;
+import com.nokia.s60tools.appdep.ui.actions.SelectAllFromTableViewerComponentListViewAction;
+import com.nokia.s60tools.appdep.ui.actions.SetNewRootComponentListViewAction;
+import com.nokia.s60tools.appdep.ui.utils.UiUtils;
+import com.nokia.s60tools.appdep.ui.views.main.MainView;
+import com.nokia.s60tools.ui.ICopyActionHandler;
+import com.nokia.s60tools.ui.S60ToolsTable;
+import com.nokia.s60tools.ui.S60ToolsTableColumnData;
+import com.nokia.s60tools.ui.S60ToolsTableFactory;
+import com.nokia.s60tools.ui.actions.CopyFromTableViewerAction;
+
+/**
+ * This class comprises the IsUsed By -component List view of the tool.
+ */
+public class ListView extends ViewPart {
+
+ /**
+ * We can get view ID at runtime once the view is instantiated, but we
+ * also need static access to ID in order to be able to invoke the view.
+ */
+ public static final String ID = "com.nokia.s60tools.appdep.ui.views.listview.ListView"; //$NON-NLS-1$
+
+ //
+ // Controls and related classes (providers etc.)
+ //
+
+ private SashForm listViewSashForm;
+
+ private TableViewer listItemsViewer;
+ private Action actionCompPropertiesDataCopy;
+ private Action actionSelectAll;
+ private Action actionSetAsNewRoot;
+ private ExportReportListViewAction actionExportReport;
+ private ListViewContentProvider listViewContentProvider;
+
+ /**
+ * Name of the component to query 'Is Use By' relationships for.
+ */
+ private String componentName;
+
+ /**
+ * Name of the function to query 'Is Use By' relationships for.
+ */
+ private String functionName;
+
+ /**
+ * The constructor.
+ */
+ public ListView() {
+ }
+
+ /**
+ * This is a callback that will allow us
+ * to create the componentTreeViewer and initialize it.
+ */
+ public void createPartControl(Composite parent) {
+
+ //
+ // Creating controls
+ //
+
+ // The left side contains component hierarchy tree view
+ listViewSashForm = new SashForm(parent, SWT.HORIZONTAL);
+
+ // List view viewer
+ listItemsViewer = createListViewTableViewer(listViewSashForm);
+
+ listViewContentProvider = new ListViewContentProvider();
+ listItemsViewer.setContentProvider(listViewContentProvider);
+ listItemsViewer.setLabelProvider(new ListViewLabelProvider());
+ listItemsViewer.setInput(listViewContentProvider);
+ listItemsViewer.setSorter(new ComponentListViewSorter());
+ listItemsViewer.addSelectionChangedListener(new ListViewSelectionChangedListener(this));
+ // On double-click setting clicked component as new root component
+ listItemsViewer.addDoubleClickListener(new IDoubleClickListener(){
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ public void doubleClick(DoubleClickEvent event) {
+ IStructuredSelection sel = (IStructuredSelection) event.getSelection();
+ if(sel.size() == 1){
+ Object firstElement = sel.getFirstElement();
+ if(firstElement instanceof ComponentPropertiesData){
+ ComponentPropertiesData propData = (ComponentPropertiesData)firstElement;
+ String selectedComponentName = propData.getFilename();
+ try {
+ MainView view = MainView.getViewInstance();
+ UiUtils.setComponentAsNewRootInMainView(view , selectedComponentName, propData.getTargetPlatform());
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ } // doubleClick
+
+ } // new IDoubleClickListener()
+ );
+
+ //
+ // Doing other initializations
+ //
+ createActions();
+ hookContextMenu();
+ contributeToActionBars();
+
+ // Updating initial state of menu actions
+ updateViewActionEnabledStates();
+
+ // Setting context help IDs
+ AppDepPlugin.setContextSensitiveHelpID(listItemsViewer.getControl(),
+ AppDepHelpContextIDs.APPDEP_COMPONENT_LIST_VIEW);
+ }
+
+ /**
+ * Creates table viewer for import functions tab item.
+ * @return New <code>TableViewer</code> object instance.
+ */
+ private TableViewer createListViewTableViewer(Composite parent) {
+
+ ArrayList<S60ToolsTableColumnData> columnDataArr = new ArrayList<S60ToolsTableColumnData>();
+
+ //
+ // NOTE: Column indeces must start from zero (0) and
+ // the columns must be added in ascending numeric
+ // order.
+ //
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.Name_TableColumnTitle"), //$NON-NLS-1$
+ 150,
+ ComponentPropertiesData.NAME_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_NAME));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.BinaryFormat_TableColumnTitle"), //$NON-NLS-1$
+ 150,
+ ComponentPropertiesData.BIN_FORMAT_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_BIN_FORMAT));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.UID1_TableColumnTitle"), //$NON-NLS-1$
+ 80,
+ ComponentPropertiesData.UID1_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_UID1));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.UID2_TableColumnTitle"), //$NON-NLS-1$
+ 80,
+ ComponentPropertiesData.UID2_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_UID2));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.UID3_TableColumnTitle"), //$NON-NLS-1$
+ 80,
+ ComponentPropertiesData.UID3_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_UID3));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.SecureId_TableColumnTitle"), //$NON-NLS-1$
+ 80,
+ ComponentPropertiesData.SECURE_ID_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_SECURE_ID));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.VendorID_TableColumnTitle"), //$NON-NLS-1$
+ 80,
+ ComponentPropertiesData.VENDOR_ID_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_VENDOR_ID));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.MinHeapSize_TableColumnTitle"), //$NON-NLS-1$
+ 100,
+ ComponentPropertiesData.MIN_HEAP_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_MIN_HEAP));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.MaxHeapSize_TableColumnTitle"), //$NON-NLS-1$
+ 100,
+ ComponentPropertiesData.MAX_HEAP_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_MAX_HEAP));
+
+ columnDataArr.add(new S60ToolsTableColumnData(Messages.getString("ListView.StackSize_TableColumnTitle"), //$NON-NLS-1$
+ 100,
+ ComponentPropertiesData.STACK_SIZE_COLUMN_INDEX,
+ ComponentListViewSorter.CRITERIA_STACK_SIZE));
+
+ S60ToolsTableColumnData[] arr
+ = (S60ToolsTableColumnData[]) columnDataArr.toArray(
+ new S60ToolsTableColumnData[0]);
+
+ S60ToolsTable tbl = S60ToolsTableFactory.create(parent, arr);
+
+ TableViewer tblViewer = new TableViewer(tbl.getTableInstance());
+ tbl.setHostingViewer(tblViewer);
+
+ return tblViewer;
+ }
+
+ /**
+ * Creating context menu.
+ */
+ private void hookContextMenu() {
+ MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ ListView.this.fillViewContextMenu(manager);
+ }
+ });
+ Menu menu = menuMgr.createContextMenu(listItemsViewer.getControl());
+ listItemsViewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, listItemsViewer);
+ }
+
+ /**
+ * Contributing items to view menu and toolbar.
+ */
+ private void contributeToActionBars() {
+ IActionBars bars = getViewSite().getActionBars();
+ fillViewPullDownMenu(bars.getMenuManager());
+ fillViewToolBar(bars.getToolBarManager());
+ }
+
+ /**
+ * Fills view menu.
+ * @param manager Menu manager.
+ */
+ private void fillViewPullDownMenu(IMenuManager manager) {
+ }
+
+ /**
+ * Fills view's context menu.
+ * @param manager Menu manager.
+ */
+ private void fillViewContextMenu(IMenuManager manager) {
+ manager.add(actionCompPropertiesDataCopy);
+ manager.add(actionSelectAll);
+ manager.add(new Separator());
+ manager.add(actionSetAsNewRoot);
+ manager.add(actionExportReport);
+ // Other plug-ins can contribute there actions here
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ /**
+ * Fills view's toolbar.
+ * @param manager Menu manager.
+ */
+ private void fillViewToolBar(IToolBarManager manager) {
+ }
+
+ /**
+ * Creating actions for the view.
+ */
+ private void createActions() {
+
+ ComponentPropertiesClipboardCopyHandler copyHandler = new ComponentPropertiesClipboardCopyHandler();
+ actionCompPropertiesDataCopy = new CopyFromTableViewerAction(listItemsViewer,
+ new ICopyActionHandler[]{ copyHandler }
+ );
+ actionSelectAll = new SelectAllFromTableViewerComponentListViewAction(this);
+ actionSetAsNewRoot = new SetNewRootComponentListViewAction(this);
+ actionExportReport = new ExportReportListViewAction(this);
+ }
+
+ /**
+ * Passing the focus request to the listItemsViewer's control.
+ */
+ public void setFocus() {
+ listItemsViewer.getControl().setFocus();
+ }
+
+ /**
+ * Allows other classes to update content description.
+ * @param newContentDescription New description.
+ */
+ public void updateDescription(String newContentDescription){
+ setContentDescription(newContentDescription);
+ IToolBarManager tbManager = getViewSite().getActionBars().getToolBarManager();
+ tbManager.update(true);
+ }
+
+ /**
+ * Refreshes the view.
+ */
+ public void refresh(){
+ listItemsViewer.refresh();
+ }
+
+ /**
+ * Returns currently selected element from list view.
+ * @return Returns currently selected element or <code>null</code>
+ * if there are no selection made.
+ */
+ public Object getComponentListSelectedElement() {
+ ISelection selection = listItemsViewer.getSelection();
+ Object obj = ((IStructuredSelection)selection).getFirstElement();
+ return obj;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+ */
+ public void dispose() {
+ super.dispose();
+ }
+
+ /**
+ * Sets input for the list view.
+ * @param usingCompPropArrayList List of component properties data to set.
+ */
+ public void setInput(List<ComponentPropertiesData> usingCompPropArrayList) {
+ listItemsViewer.setInput(usingCompPropArrayList);
+ actionExportReport.setIsUsedByData(usingCompPropArrayList);
+ }
+
+ /**
+ * Gets component list viewer.
+ * @return component list viewer.
+ */
+ public TableViewer getComponentListViewer(){
+ return listItemsViewer;
+ }
+
+ /**
+ * Sets name of the component that was searched for using components.
+ * @param componentName Component name
+ */
+ public void setComponentName(String componentName) {
+ this.componentName = componentName;
+ }
+
+ /**
+ * Gets name of the component that was searched for using components.
+ * @return name of the component that was searched for using components.
+ */
+ public String getComponentName() {
+ return componentName;
+
+ }
+
+ /**
+ * Enables to get reference of the main view
+ * from the classes that do not actually
+ * have reference to the main view instance.
+ * @throws PartInitException
+ */
+ private static ListView getViewInstance() throws PartInitException{
+
+ IWorkbenchPage page = AppDepPlugin.getCurrentlyActivePage();
+
+ IViewPart viewPart = null;
+
+ IViewReference[] viewRefs = page.getViewReferences();
+ if(viewRefs == null){
+ return null;
+ }
+ for (int i = 0; i < viewRefs.length; i++) {
+ IViewReference reference = viewRefs[i];
+ String id = reference.getId();
+ if(id.equalsIgnoreCase(ListView.ID)){
+ viewPart = reference.getView(true);
+ }
+ }
+ if(viewPart == null){
+ return null;
+ }
+ return ((ListView) viewPart);
+ }
+
+ /**
+ * Clears list view (By updating it with empty List).
+ */
+ public static void clear(){
+ try {
+ ListView view = getViewInstance();
+ if(view != null){
+ ArrayList<ComponentPropertiesData> emptyData = new ArrayList<ComponentPropertiesData>();
+ view.setInput(emptyData);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Gets the name of the function that was searched for using components.
+ * @return the name of the function that was searched for using components.
+ */
+ public String getFunctionName() {
+ return functionName;
+ }
+
+ /**
+ * Sets the name of the function that was searched for using components.
+ * @param functionName the functionName to set
+ */
+ public void setFunctionName(String functionName) {
+ this.functionName = functionName;
+ }
+
+ /**
+ * Checks if the component list has currently any selections.
+ * @return <code>true</code> if has, otherwise <code>false</code>.
+ */
+ private boolean hasComponentListSelection() {
+ int selectionCount = getListViewSelectionCount();
+ return (selectionCount > 0);
+ }
+
+ /**
+ * Checks if only single component is selected.
+ * @return <code>true</code> if has, otherwise <code>false</code>.
+ */
+ private boolean hasComponentListSingleSelection() {
+ int selectionCount = getListViewSelectionCount();
+ return (selectionCount == 1);
+ }
+
+ /**
+ * Gets component list viewer selection count.
+ * @return component list viewer selection count.
+ */
+ private int getListViewSelectionCount() {
+ return listItemsViewer.getTable().getSelectionCount();
+ }
+
+ /**
+ * Checks if all components has been selected.
+ * @return <code>true</code> if all selected, otherwise <code>false</code>.
+ */
+ private boolean isAllComponentsSelected() {
+ return (getListViewItemCount() == getListViewSelectionCount());
+ }
+
+ /**
+ * Gets count of all elements in component list view.
+ * @return count of all elements in component list view.
+ */
+ private int getListViewItemCount() {
+ return listItemsViewer.getTable().getItemCount();
+ }
+
+ /**
+ * Checks if the component list has currently any components.
+ * @return <code>true</code> if has, otherwise <code>false</code>.
+ */
+ private boolean hasComponentsOnList() {
+ return (listItemsViewer.getTable().getItemCount() > 0);
+ }
+
+ /**
+ * Sets enabled/disabled states for actions commands
+ * on this view, based on the current application state.
+ * This method should be called whenever an operation is
+ * started or stopped that might have effect on action
+ * button states.
+ */
+ public void updateViewActionEnabledStates(){
+
+ // Resolving current state
+ boolean isRootComponentSelectedForAnalysis = AppDepSettings.isRootComponentSelectedForAnalysis();
+ boolean isValidComponentSelection = isRootComponentSelectedForAnalysis && (getComponentListSelectedElement() != null);
+ boolean isComponentListActionsEnabled = isValidComponentSelection && hasComponentsOnList();
+ boolean hasComponentListSelection = isComponentListActionsEnabled && hasComponentListSelection();
+ boolean isAllComponentsSelected = isComponentListActionsEnabled && isAllComponentsSelected();
+ boolean hasComponentListSingleSelection = isComponentListActionsEnabled && hasComponentListSingleSelection();
+
+ // Updating action enable/disable statuses
+ setEnableState(actionCompPropertiesDataCopy, hasComponentListSelection);
+ setEnableState(actionSelectAll, isComponentListActionsEnabled && !isAllComponentsSelected);
+ setEnableState(actionSetAsNewRoot, hasComponentListSingleSelection);
+ setEnableState(actionExportReport, hasComponentListSingleSelection);
+ }
+
+ /**
+ * Sets given enable state for an action if it is non <code>null</code>.
+ * @param action Action to set enable status for.
+ * @param enableStatus <code>true</code> if enabled, otherwise <code>false</code>.
+ */
+ private void setEnableState(Action action, boolean enableStatus) {
+ if(action != null){
+ action.setEnabled(enableStatus);
+ }
+ }
+}