DATABIND : Set expand & selection in the tree when it refreshed 97/18697/1
authorjaeyeol lee <jaeyeol148.lee@samsung.com>
Fri, 28 Mar 2014 08:09:14 +0000 (17:09 +0900)
committerjaeyeol lee <jaeyeol148.lee@samsung.com>
Fri, 28 Mar 2014 08:09:14 +0000 (17:09 +0900)
Change-Id: Ie30abf46df9ce5e06eb8ac5f710216fcc897d7e0
Signed-off-by: jaeyeol lee <jaeyeol148.lee@samsung.com>
org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/commands/SetViewModelCommand.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/AppManager.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingDnDManager.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingPage.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/model/BindingDataSet.java

index 30cead3..ec828e3 100644 (file)
@@ -59,7 +59,7 @@ public class SetViewModelCommand extends Command {
                if (type.equals(BindingDataSetEventType.VIEWMODEL_ITEM_ADDED)) {
                        setViewModelItem(type);
                } else if (type.equals(BindingDataSetEventType.VIEWMODEL_ITEM_REMOVED)) {
-                       oldViewModelObject = getViewModelObject(bindingData, itemPath, childName);
+                       oldViewModelObject = getViewModelObject(bindingData, itemPath);
                        setViewModelItem(type);
                } else if (type.equals(BindingDataSetEventType.VIEWMODEL_SET_DATASOURCE)) {
                        BindingData data = getViewModel(bindingData.getName());
@@ -79,9 +79,9 @@ public class SetViewModelCommand extends Command {
        }
 
        private BindingObject getViewModelObject(BindingData bindingData,
-                       List<String> itemPath, String childName) {
+                       List<String> itemPath) {
 
-               return appManager.getViewModelObject(bindingData, itemPath, childName);
+               return appManager.getViewModelObject(bindingData, itemPath);
        }
        
        private void setViewModelItem(BindingDataSetEventType type) {
index 5ad3518..be47430 100644 (file)
@@ -716,6 +716,10 @@ public class AppManager implements IPageDataSetListener, IAppListener {
         return ProjValidateType.PROJ_OK;
     }
 
+    public List<String> getSelectionPath() {
+        return bindingDataSet.getSelectionPath();
+    }
+    
     public BindingDataSet getBindingDataSet() {
         return bindingDataSet;
     }
@@ -725,8 +729,8 @@ public class AppManager implements IPageDataSetListener, IAppListener {
     }
     
     public BindingObject getViewModelObject(BindingData bindingData,
-                       List<String> itemPath, String childName) {
-               return bindingDataSet.getViewModelObject(bindingData, itemPath, childName);
+                       List<String> itemPath) {
+               return bindingDataSet.getViewModelObject(bindingData, itemPath);
        }
 
     public void addViewModel(BindingData bindingData) {
index f753ae3..59b13d0 100644 (file)
@@ -254,10 +254,6 @@ public class DataBindingDnDManager {
             }
             
             public void drop(DropTargetEvent event) {
-               if (event == null) {
-                       return;
-               }
-               
                 if (event.data == null) {
                     event.detail = DND.DROP_NONE;
                     return;
index bbaea7a..07b89c0 100644 (file)
@@ -115,6 +115,7 @@ public class DataBindingPage extends Page implements IBindingDataSetListener {
     private Part oldSelectedModel = null;
     private IAction undoHandler;
     private IAction redoHandler;
+    //private List<String> itemPath;
 
     public DataBindingPage(DataBindingView dataBindingView) {
         this.dataBindingView = dataBindingView;
@@ -192,10 +193,94 @@ public class DataBindingPage extends Page implements IBindingDataSetListener {
             refreshViewModelTree(viewModelTree);
             refreshBindingInfos();
             refreshActions();
+            
+            expandTreeItem();
         }
     }
 
-    private void refreshActions() {
+    private void expandTreeItem() {
+       
+       if (pageDesigner == null) {
+               return;
+       }
+       
+       List<String> itemPath = pageDesigner.getAppManager().getSelectionPath();
+       if ((itemPath == null) || (itemPath.isEmpty())){
+               return;
+       }
+       
+       List<String> modelPath = new ArrayList<String>();
+       for (int i=0; i<itemPath.size(); i++) {
+               modelPath.add(itemPath.get(i));
+       }
+       
+               if ((modelPath != null) && (!modelPath.isEmpty())) {
+                       TreeItem selectedItem = getSelectedItem(viewModelTree, modelPath);
+                       if (selectedItem != null) {
+                               selectedItem.setExpanded(true); 
+                               viewModelTree.setSelection(selectedItem);
+                       } else {
+                               selectedItem = getSelectedItem(dataSourceTree, itemPath.get(itemPath.size()-1));
+                               if (selectedItem != null) {
+                                       selectedItem.setExpanded(true); 
+                                       dataSourceTree.setSelection(selectedItem);
+                               }
+                       }
+               }
+       }
+    
+    private TreeItem getSelectedItem(Tree tree, String name) {
+               
+               TreeItem[] treeItems = tree.getItems();
+               TreeItem selectedItem = null;
+               for (TreeItem treeItem : treeItems) {
+                       if (treeItem.getText().equals(name)) {
+                               selectedItem = treeItem; 
+                               break;
+                       }
+               }
+               return selectedItem;
+       }
+
+       private TreeItem getSelectedItem(Tree tree, List<String> itemPath) {
+               String itemName = itemPath.get(itemPath.size()-1);
+               itemPath.remove(itemPath.size()-1);
+               TreeItem[] treeItems = tree.getItems();
+               TreeItem selectedItem = null;
+               for (TreeItem treeItem : treeItems) {
+                       if (treeItem.getText().equals(itemName)) {
+                               if (itemPath.isEmpty()) {
+                                       selectedItem = treeItem;
+                               } else {
+                                       selectedItem = getSelectedItem(treeItem, itemPath);
+                               }
+                               break;
+                       }
+               }
+               return selectedItem;
+       }
+
+       private TreeItem getSelectedItem(TreeItem parentTreeItem, List<String> itemPath) {
+               if (itemPath.isEmpty()) {
+                       return parentTreeItem;
+               }
+               String itemName = itemPath.get(itemPath.size()-1);
+               itemPath.remove(itemPath.size()-1);
+               
+               TreeItem[] treeItems = parentTreeItem.getItems();
+               TreeItem selectedItem = null;
+               
+               for (TreeItem treeItem : treeItems) {
+                       if (treeItem.getText().equals(itemName)) {
+                               selectedItem = getSelectedItem(treeItem, itemPath);
+                               break;
+                       }
+               }
+               
+               return selectedItem;
+       }
+
+       private void refreshActions() {
        if (undoHandler != null) {
                ((UpdateAction) undoHandler).update();
        }
@@ -459,7 +544,7 @@ public class DataBindingPage extends Page implements IBindingDataSetListener {
 
        TreeItem[] selectedItems = viewModelTree.getSelection();
 
-        if (selectedItems.length != 0) {
+        if (selectedItems.length > 0) {
             int idIndex = 0;
             while (!canSetTreeItemName(selectedItems[0], "viewModelItem" + idIndex)) {
                idIndex++;
@@ -715,8 +800,6 @@ public class DataBindingPage extends Page implements IBindingDataSetListener {
         composite.setLayout(new FillLayout());
 
         SashForm sashForm = new SashForm(composite, SWT.HORIZONTAL);
-        // viewModelCount = 0;
-        // dataSourceCount = 0;
 
         makeDataModelParentPanel(sashForm);
         makeBindingInfoPanel(sashForm);
index 51e5e01..61cf92a 100644 (file)
@@ -35,6 +35,7 @@ public class BindingDataSet {
 
        private List<BindingData> viewModels = new ArrayList<BindingData>();
     private List<BindingData> dataSources = new ArrayList<BindingData>();
+    private List<String> selectionPath = new ArrayList<String>();
     
     private List<IBindingDataSetListener> listeners = new ArrayList<IBindingDataSetListener>();
     private List<IBindingDataSetListener> removeListeners = new ArrayList<IBindingDataSetListener>();
@@ -48,7 +49,8 @@ public class BindingDataSet {
      */
     public void addViewModel(BindingData bindingData) {
         viewModels.add(bindingData);
-        
+        selectionPath.clear();
+        selectionPath.add(bindingData.getName());
         fireEvent(new BindingDataSetEvent(BindingDataSetEventType.VIEWMODEL_ADDED, bindingData, getNumberOfViewModels() - 1 , null));
     }
     
@@ -64,11 +66,12 @@ public class BindingDataSet {
     }
     
     public void changeViewModel(BindingDataSetEventType type, BindingData bindingData, List<String> itemPath, String childName, String value) {
+       selectionPath = itemPath;
        if (type.equals(BindingDataSetEventType.VIEWMODEL_ITEM_ADDED)) {
                List<BindingData> viewModels = getViewModels();
                for (BindingData viewModel : viewModels) {
                        if (viewModel.equals(bindingData)) {
-                               BindingObject viewModelObject = getViewModelObject(bindingData, itemPath, childName);
+                               BindingObject viewModelObject = getViewModelObject(bindingData, itemPath);
                                if (viewModelObject != null) {
                                        addChildViewModelObject(viewModelObject, childName, value);
                                } else if (childName != null) {
@@ -81,7 +84,7 @@ public class BindingDataSet {
                List<BindingData> viewModels = getViewModels();
                for (BindingData viewModel : viewModels) {
                        if (viewModel.equals(bindingData)) {
-                               BindingObject viewModelObject = getViewModelParentObject(bindingData, itemPath, childName);
+                               BindingObject viewModelObject = getViewModelParentObject(bindingData, itemPath);
                                if (viewModelObject != null) {
                                        removeChildViewModelObject(viewModelObject, childName, value);
                                } else if (childName != null) {
@@ -99,11 +102,12 @@ public class BindingDataSet {
 
        public void changeViewModel(BindingDataSetEventType type, BindingData bindingData, List<String> itemPath,
                        BindingObject viewModelObject, String value) {
+               selectionPath = itemPath;
        if (type.equals(BindingDataSetEventType.VIEWMODEL_ITEM_ADDED)) {
                List<BindingData> viewModels = getViewModels();
                for (BindingData viewModel : viewModels) {
                        if (viewModel.equals(bindingData)) {
-                               BindingObject viewModelParentObject = getViewModelParentObject(bindingData, itemPath, viewModelObject.getName());
+                               BindingObject viewModelParentObject = getViewModelParentObject(bindingData, itemPath);
                                if (viewModelParentObject != null) {
                                        viewModelParentObject.add(viewModelObject);
                                } else {
@@ -131,20 +135,21 @@ public class BindingDataSet {
 
     
     private BindingObject getViewModelParentObject(BindingData bindingData,
-               List<String> itemPath, String childName) {
-       if ((itemPath == null) || (itemPath.isEmpty())) {
+               List<String> itemPath) {
+       if ((itemPath == null) || (itemPath.size() < 2)) {
                return null;
        }
        
        List<String> modelPath = new ArrayList<String>();
-       for (int i=0; i<itemPath.size()-1; i++) {
+       for (int i=0; i<itemPath.size(); i++) {
                modelPath.add(itemPath.get(i));
        }
-       return getViewModelObject(bindingData, modelPath, childName);
+       modelPath.remove(0);
+       return getViewModelObject(bindingData, modelPath);
     }
     
     public BindingObject getViewModelObject(BindingData bindingData,
-               List<String> itemPath, String childName) {
+               List<String> itemPath) {
        List<BindingObject> viewModelObjects = bindingData.getViewModelObjects();
        BindingObject object = null;
        List<String> modelPath = new ArrayList<String>();
@@ -207,6 +212,8 @@ public class BindingDataSet {
                                break;
                        }
                }
+               selectionPath.clear();
+               selectionPath.add(bindingData.getName());
                viewModels.remove(index);
                fireEvent(new BindingDataSetEvent(BindingDataSetEventType.VIEWMODEL_REMOVED, bindingData, index, null));
        }
@@ -321,7 +328,8 @@ public class BindingDataSet {
      */
     public void addDataSource(BindingData bindingData) {
         dataSources.add(bindingData);
-        
+        selectionPath.clear();
+        selectionPath.add(bindingData.getSourceName());
         fireEvent(new BindingDataSetEvent(BindingDataSetEventType.DATASOURCE_ADDED, bindingData, getNumberOfDataSources() - 1 , null));
     }
     
@@ -347,6 +355,8 @@ public class BindingDataSet {
                                break;
                        }
                }
+               selectionPath.clear();
+               selectionPath.add(bindingData.getName());
                dataSources.remove(index);
                fireEvent(new BindingDataSetEvent(BindingDataSetEventType.DATASOURCE_REMOVED, bindingData, index, null));
        }
@@ -456,4 +466,38 @@ public class BindingDataSet {
         }
     }
 
+       public List<String> getSelectionPath() {
+               //if the object does not exist, then select parent object.
+               if (!isExist(selectionPath)) { 
+                       if (selectionPath.size() > 1) {
+                               List<String> modelPath = new ArrayList<String>();
+                       for (int i=0; i<selectionPath.size(); i++) {
+                               modelPath.add(selectionPath.get(i));
+                       }
+                       modelPath.remove(0);
+                       return modelPath;
+                       }
+               } 
+               return selectionPath;
+       }
+
+       private boolean isExist(List<String> selectionPath) {
+               if (selectionPath.size() < 1 ) {
+                       return false;
+               }
+               BindingData data = getViewModel(selectionPath.get(selectionPath.size()-1));
+               if (data != null) {
+                       BindingObject viewModelObject = getViewModelObject(data, selectionPath);
+                       if (viewModelObject == null) {
+                               return false;
+                       }
+               } else {
+                       data = getDataSource(selectionPath.get(selectionPath.size()-1));
+                       if (data == null) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+
 }