NSCREEN : NScreen view implement update 25/20725/1
authorjooyoul_lee <jy.exe.lee@samsung.com>
Mon, 12 May 2014 11:24:35 +0000 (20:24 +0900)
committerjooyoul_lee <jy.exe.lee@samsung.com>
Mon, 12 May 2014 11:24:35 +0000 (20:24 +0900)
NScreen view contents changed
NScreen view action changed
Nscreen icons added

Change-Id: Ic7d7ec601b8acba2ab51aaae3db6321fd191270f
Signed-off-by: jooyoul_lee <jy.exe.lee@samsung.com>
47 files changed:
org.tizen.webuibuilder/res/icons/common.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/orientation-landscape.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/orientation-portrait.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/pixel-ratio10.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/pixel-ratio15.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/pixel-ratio20.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/pixel-ratio30.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-1-1.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-10-16.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-16-10.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-16-9.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-2-3.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-3-2.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-3-4.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-3-5.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-4-3.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-4-5.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-5-3.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-5-4.png [new file with mode: 0644]
org.tizen.webuibuilder/res/icons/resoluion-9-16.png [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/common/ColorManager.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/common/ColorResource.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/Part.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/nscreen/NScreenModel.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/page/PageData.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/editor/PageDesigner.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/editor/PageDesignerToolbar.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/editor/ResolutionManger.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/FontUtil.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/INScreenDrawRenderer.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenBaseComposite.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenGroup.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenItem.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenItemFloatRenderer.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenPage.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenSimpleRenderer.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenUtil.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenDisableCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenEnableCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkCutCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkDownCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkUpCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenMoveDownCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenMoveUpCommand.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/model/NScreenPageModel.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/testcode.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/properties/style/CssStyleTab.java

diff --git a/org.tizen.webuibuilder/res/icons/common.png b/org.tizen.webuibuilder/res/icons/common.png
new file mode 100644 (file)
index 0000000..9b94a64
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/common.png differ
diff --git a/org.tizen.webuibuilder/res/icons/orientation-landscape.png b/org.tizen.webuibuilder/res/icons/orientation-landscape.png
new file mode 100644 (file)
index 0000000..64255c1
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/orientation-landscape.png differ
diff --git a/org.tizen.webuibuilder/res/icons/orientation-portrait.png b/org.tizen.webuibuilder/res/icons/orientation-portrait.png
new file mode 100644 (file)
index 0000000..81b1a9c
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/orientation-portrait.png differ
diff --git a/org.tizen.webuibuilder/res/icons/pixel-ratio10.png b/org.tizen.webuibuilder/res/icons/pixel-ratio10.png
new file mode 100644 (file)
index 0000000..b323494
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/pixel-ratio10.png differ
diff --git a/org.tizen.webuibuilder/res/icons/pixel-ratio15.png b/org.tizen.webuibuilder/res/icons/pixel-ratio15.png
new file mode 100644 (file)
index 0000000..233e30f
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/pixel-ratio15.png differ
diff --git a/org.tizen.webuibuilder/res/icons/pixel-ratio20.png b/org.tizen.webuibuilder/res/icons/pixel-ratio20.png
new file mode 100644 (file)
index 0000000..d2955c2
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/pixel-ratio20.png differ
diff --git a/org.tizen.webuibuilder/res/icons/pixel-ratio30.png b/org.tizen.webuibuilder/res/icons/pixel-ratio30.png
new file mode 100644 (file)
index 0000000..a15e21b
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/pixel-ratio30.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-1-1.png b/org.tizen.webuibuilder/res/icons/resoluion-1-1.png
new file mode 100644 (file)
index 0000000..e9e0d5c
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-1-1.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-10-16.png b/org.tizen.webuibuilder/res/icons/resoluion-10-16.png
new file mode 100644 (file)
index 0000000..f992bb8
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-10-16.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-16-10.png b/org.tizen.webuibuilder/res/icons/resoluion-16-10.png
new file mode 100644 (file)
index 0000000..7dacf7c
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-16-10.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-16-9.png b/org.tizen.webuibuilder/res/icons/resoluion-16-9.png
new file mode 100644 (file)
index 0000000..818c828
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-16-9.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-2-3.png b/org.tizen.webuibuilder/res/icons/resoluion-2-3.png
new file mode 100644 (file)
index 0000000..5d59e63
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-2-3.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-3-2.png b/org.tizen.webuibuilder/res/icons/resoluion-3-2.png
new file mode 100644 (file)
index 0000000..63b565f
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-3-2.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-3-4.png b/org.tizen.webuibuilder/res/icons/resoluion-3-4.png
new file mode 100644 (file)
index 0000000..8ffde85
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-3-4.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-3-5.png b/org.tizen.webuibuilder/res/icons/resoluion-3-5.png
new file mode 100644 (file)
index 0000000..d27bfd0
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-3-5.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-4-3.png b/org.tizen.webuibuilder/res/icons/resoluion-4-3.png
new file mode 100644 (file)
index 0000000..7109f52
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-4-3.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-4-5.png b/org.tizen.webuibuilder/res/icons/resoluion-4-5.png
new file mode 100644 (file)
index 0000000..2114d62
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-4-5.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-5-3.png b/org.tizen.webuibuilder/res/icons/resoluion-5-3.png
new file mode 100644 (file)
index 0000000..dbb0e5e
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-5-3.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-5-4.png b/org.tizen.webuibuilder/res/icons/resoluion-5-4.png
new file mode 100644 (file)
index 0000000..80fb2c1
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-5-4.png differ
diff --git a/org.tizen.webuibuilder/res/icons/resoluion-9-16.png b/org.tizen.webuibuilder/res/icons/resoluion-9-16.png
new file mode 100644 (file)
index 0000000..c938f32
Binary files /dev/null and b/org.tizen.webuibuilder/res/icons/resoluion-9-16.png differ
index 3d0f036..5997006 100644 (file)
@@ -212,7 +212,44 @@ public class ColorManager {
 
         // keyframeWidgetText
         setColor("keyframeWidgetText", new RGB(157, 157, 157));
-
+        
+        
+        setColor("GRAY", new RGB(177, 177, 177)); //$NON-NLS-1$
+        setColor("ITEM_SELECTED", new RGB(52, 188, 254));//$NON-NLS-1$
+        setColor("ITEM_SELECTED_FONT", new RGB(1, 132, 195));//$NON-NLS-1$
+        setColor("ITEM_HOVER", new RGB(213, 231, 243));//$NON-NLS-1$
+        
+        // for NScreenItem
+        setColor("NSE_BG", new RGB(52, 188, 254)); //$NON-NLS-1$
+        setColor("NSD_BG", new RGB(160, 160, 190));//$NON-NLS-1$
+        setColor("NNE_BG", new RGB(242, 241, 240));//$NON-NLS-1$
+        setColor("NND_BG", new RGB(204, 201, 198));//$NON-NLS-1$
+        
+        setColor("HSE_BG", new RGB(126, 213, 254)); //$NON-NLS-1$
+        setColor("HSD_BG", new RGB(197, 197, 216));//$NON-NLS-1$
+        setColor("HNE_BG", new RGB(210, 240, 255));//$NON-NLS-1$
+        setColor("HND_BG", new RGB(232, 231, 230));//$NON-NLS-1$
+        
+        setColor("PSE_BG", new RGB(1, 112, 165)); //$NON-NLS-1$
+        setColor("PSD_BG", new RGB(155, 151, 155));//$NON-NLS-1$
+        setColor("PNE_BG", new RGB(1, 112, 165));//$NON-NLS-1$
+        setColor("PND_BG", new RGB(192, 188, 184));//$NON-NLS-1$
+        
+        
+        setColor("NSE_FG", new RGB(14, 13, 12)); //$NON-NLS-1$
+        setColor("NSD_FG", new RGB(112, 101, 106));//$NON-NLS-1$
+        setColor("NNE_FG", new RGB(14, 13, 12));//$NON-NLS-1$
+        setColor("NND_FG", new RGB(112, 101, 106));//$NON-NLS-1$
+        
+        setColor("HSE_FG", new RGB(14, 13, 12)); //$NON-NLS-1$
+        setColor("HSD_FG", new RGB(112, 101, 106));//$NON-NLS-1$
+        setColor("HNE_FG", new RGB(14, 13, 12));//$NON-NLS-1$
+        setColor("HND_FG", new RGB(112, 101, 106));//$NON-NLS-1$
+        
+        setColor("PSE_FG", new RGB(14, 13, 12)); //$NON-NLS-1$
+        setColor("PSD_FG", new RGB(14, 13, 12));//$NON-NLS-1$
+        setColor("PNE_FG", new RGB(14, 13, 12));//$NON-NLS-1$
+        setColor("PND_FG", new RGB(112, 101, 106));//$NON-NLS-1$
     }
 
     /**
index e606360..917a8c9 100644 (file)
@@ -172,6 +172,41 @@ public class ColorResource {
 
     public static final Color TIMEBAR_TEXT_TIME = getColor("timeBarTime");
 
+    public static final Color GRAY = getColor("GRAY");
+    public static final Color ITEM_SELECTED = getColor("ITEM_SELECTED");
+    public static final Color ITEM_SELECTED_FONT = getColor("ITEM_SELECTED_FONT");
+    public static final Color ITEM_HOVER = getColor("ITEM_HOVER");
+    
+    public static final Color NSE_BG = getColor("NSE_BG");
+    public static final Color NSD_BG = getColor("NSD_BG");
+    public static final Color NNE_BG = getColor("NNE_BG");
+    public static final Color NND_BG = getColor("NND_BG");
+    
+    public static final Color HSE_BG = getColor("HSE_BG");
+    public static final Color HSD_BG = getColor("HSD_BG");
+    public static final Color HNE_BG = getColor("HNE_BG");
+    public static final Color HND_BG = getColor("HND_BG");
+    
+    public static final Color PSE_BG = getColor("PSE_BG");
+    public static final Color PSD_BG = getColor("PSD_BG");
+    public static final Color PNE_BG = getColor("PNE_BG");
+    public static final Color PND_BG = getColor("PND_BG");
+    
+    public static final Color NSE_FG = getColor("NSE_FG");
+    public static final Color NSD_FG = getColor("NSD_FG");
+    public static final Color NNE_FG = getColor("NNE_FG");
+    public static final Color NND_FG = getColor("NND_FG");
+    
+    public static final Color HSE_FG = getColor("HSE_FG");
+    public static final Color HSD_FG = getColor("HSD_FG");
+    public static final Color HNE_FG = getColor("HNE_FG");
+    public static final Color HND_FG = getColor("HND_FG");
+    
+    public static final Color PSE_FG = getColor("PSE_FG");
+    public static final Color PSD_FG = getColor("PSD_FG");
+    public static final Color PNE_FG = getColor("PNE_FG");
+    public static final Color PND_FG = getColor("PND_FG");
+
     /**
      * Get Color
      * 
index fc5519c..09265a2 100644 (file)
@@ -1114,7 +1114,7 @@ public class Part implements ISerializer {
         return null;
 
     }
-    
+
     public Boolean hasEventValue(String eventName, String value) {
         List<String> list = events.get(eventName);
         if (list != null) {
@@ -1161,7 +1161,7 @@ public class Part implements ISerializer {
 
         if ((value != null) && (hasEventValue(eventName, value))) {
             oldValues.remove(value);
-            //TODO change order
+            // TODO change order
         } else if ((value != null) && (oldValueText != null)) {
             oldValues.remove(index);
             oldValues.add(index, value);
@@ -1204,7 +1204,7 @@ public class Part implements ISerializer {
     // fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this,
     // eventName, oldValue));
     // }
-    
+
     /**
      * Resets event value corresponding event name.
      * 
@@ -1235,28 +1235,28 @@ public class Part implements ISerializer {
     public GotoPageProperty getGotoPageproperty(String eventName) {
         return gotoPageProperties.get(eventName);
     }
-    
+
     public void removeGotoPageEventValue(String eventName) {
         gotoPageProperties.remove(eventName);
         fireEvent(new PartEvent(PartEvent.EventType.EVENT_CHANGED, this, eventName, null));
     }
-    
+
     public Map<String, String> getOpenUrlProperties() {
         return openUrlProperties;
     }
-    
+
     public String getOpenUrlEventValues(String eventName) {
         return openUrlProperties.get(eventName);
     }
 
     public void setOpenUrlEventValue(String eventName, String urlValue) {
-        if (urlValue == null ) {
+        if (urlValue == null) {
             return;
         }
-        
+
         if (urlValue.equals(BuilderConstants.EMPTY)) {
             openUrlProperties.remove(eventName);
-        } else { 
+        } else {
             String oldValue = getOpenUrlEventValues(eventName);
             if (urlValue.equals(oldValue)) {
                 return;
@@ -1359,6 +1359,18 @@ public class Part implements ISerializer {
         }
     }
 
+    public void clearAllSelector() {
+        if (selectors.size() > 0) {
+            selectors.clear();
+        }
+        if (getChildren().size() > 0) {
+            for (Part child : getChildren()) {
+                child.clearAllSelector();
+            }
+        }
+
+    }
+
     /**
      * Removes a css selector.
      * 
@@ -1397,7 +1409,7 @@ public class Part implements ISerializer {
             selectors.remove(selectorName);
         }
     }
-    
+
     /**
      * Removes all styles in css selector.
      * 
@@ -1410,7 +1422,7 @@ public class Part implements ISerializer {
             CssSelector selector = getSelector(selectorName);
             if (selector != null) {
                 selector.reset();
-                
+
                 fireEvent(new CssEvent(EventType.CSS_NEED_REFRESH, this, selectorName, null, null));
                 fireEvent(new PartEvent(PartEvent.EventType.NEED_REFRESH, this, EMPTY, EMPTY));
             }
@@ -1478,34 +1490,34 @@ public class Part implements ISerializer {
     public void setSelectorPropertyValue(String selectorName, String propertyKey, String value) {
         setSelectorPropertyValue(selectorName, propertyKey, value, null);
     }
-    
+
     public void setSelectorStyles(String selectorName, Collection<CssStyle> styles) {
         CssSelector selector = getSelector(selectorName);
         selector.setStyles(styles);
-        
+
         boolean isPosition = false;
         for (CssStyle style : styles) {
-           String key = style.getKey();
-           String value = style.getStringValue();
-           
-           if (key.equals(POSITION)) {
-               isPosition = true;
-           } else if (key.equals(LEFT)) {
-               position.x = HtmlNumber.parseInt(value);
-               isPosition = true;
-           } else if (key.equals(TOP)) {
-               position.y = HtmlNumber.parseInt(value);
-               isPosition = true;
-           } else if (key.equals(WIDTH)) {
-               position.width = HtmlNumber.parseInt(value);
-               isPosition = true;
-           } else if (key.equals(HEIGHT)) {
-               position.height = HtmlNumber.parseInt(value);
-               isPosition = true;
-           }
+            String key = style.getKey();
+            String value = style.getStringValue();
+
+            if (key.equals(POSITION)) {
+                isPosition = true;
+            } else if (key.equals(LEFT)) {
+                position.x = HtmlNumber.parseInt(value);
+                isPosition = true;
+            } else if (key.equals(TOP)) {
+                position.y = HtmlNumber.parseInt(value);
+                isPosition = true;
+            } else if (key.equals(WIDTH)) {
+                position.width = HtmlNumber.parseInt(value);
+                isPosition = true;
+            } else if (key.equals(HEIGHT)) {
+                position.height = HtmlNumber.parseInt(value);
+                isPosition = true;
+            }
         }
         fireEvent(new CssEvent(EventType.CSS_NEED_REFRESH, this, selectorName, null, null));
-        
+
         if (isPosition) {
             fireEvent(new PartEvent(PartEvent.EventType.POSITION_CHANGED, this, EMPTY, EMPTY));
         }
@@ -2446,65 +2458,66 @@ public class Part implements ISerializer {
         return false;
     }
 
-//    /**
-//     * Checks whether a {@link Part} can be cloned.
-//     * 
-//     * @return <code>true</code> if a {@link Part} can be cloned, and <code>false</code> otherwise
-//     */
-//    public boolean canCloneWidget() {
-//        if (!((this instanceof Part) && descriptor != null && (descriptor instanceof WidgetPartDescriptor))) {
-//            return false;
-//        }
-//
-//        for (Part child : getChildren()) {
-//            if (!child.canCloneWidget()) {
-//                return false;
-//            }
-//        }
-//
-//        return true;
-//    }
-//
-//    /**
-//     * Clones a {@link Part}.
-//     * 
-//     * @return cloned {@link Part} if to clone {@link Part} is succeeded, and <code>null</code>
-//     *         otherwise
-//     */
-//    public Part cloneWidget() {
-//        if (descriptor != null && descriptor instanceof WidgetPartDescriptor) {
-//            Part part = new Part(ownerRef, (WidgetPartDescriptor) descriptor);
-//
-//            // Clones properties.
-//            List<PropertyDescriptor> propertyDescriptors = descriptor.getPropertyDescriptors();
-//            int size = propertyDescriptors.size();
-//            for (int i = 0; i < size; i++) {
-//                PropertyDescriptor propertyDescriptor = propertyDescriptors.get(i);
-//                String propertyName = propertyDescriptor.getPropertyName();
-//                String propertyValue = getPropertyValue(propertyName);
-//                if (propertyName != null) {
-//                    part.setPropertyValue(propertyName, propertyValue);
-//                }
-//            }
-//
-//            // Clones selectors.
-//            List<String> selectorNames = getSelectorNameList();
-//            int selectorNamesSize = selectorNames.size();
-//            for (int i = 0; i < selectorNamesSize; i++) {
-//                String selectorName = selectorNames.get(i);
-//                CssSelector cssSelector = getSelector(selectorName);
-//                CssSelector clonedCssSelector = cssSelector.cloneCssSelector(selectorName);
-//                part.addSelector(selectorName, clonedCssSelector);
-//            }
-//
-//            part.setUniqueId();
-//            part.setAbsolutePositionProvider(absolutePositionProvider);
-//
-//            return part;
-//        } else {
-//            return null;
-//        }
-//    }
+    // /**
+    // * Checks whether a {@link Part} can be cloned.
+    // *
+    // * @return <code>true</code> if a {@link Part} can be cloned, and <code>false</code> otherwise
+    // */
+    // public boolean canCloneWidget() {
+    // if (!((this instanceof Part) && descriptor != null && (descriptor instanceof
+    // WidgetPartDescriptor))) {
+    // return false;
+    // }
+    //
+    // for (Part child : getChildren()) {
+    // if (!child.canCloneWidget()) {
+    // return false;
+    // }
+    // }
+    //
+    // return true;
+    // }
+    //
+    // /**
+    // * Clones a {@link Part}.
+    // *
+    // * @return cloned {@link Part} if to clone {@link Part} is succeeded, and <code>null</code>
+    // * otherwise
+    // */
+    // public Part cloneWidget() {
+    // if (descriptor != null && descriptor instanceof WidgetPartDescriptor) {
+    // Part part = new Part(ownerRef, (WidgetPartDescriptor) descriptor);
+    //
+    // // Clones properties.
+    // List<PropertyDescriptor> propertyDescriptors = descriptor.getPropertyDescriptors();
+    // int size = propertyDescriptors.size();
+    // for (int i = 0; i < size; i++) {
+    // PropertyDescriptor propertyDescriptor = propertyDescriptors.get(i);
+    // String propertyName = propertyDescriptor.getPropertyName();
+    // String propertyValue = getPropertyValue(propertyName);
+    // if (propertyName != null) {
+    // part.setPropertyValue(propertyName, propertyValue);
+    // }
+    // }
+    //
+    // // Clones selectors.
+    // List<String> selectorNames = getSelectorNameList();
+    // int selectorNamesSize = selectorNames.size();
+    // for (int i = 0; i < selectorNamesSize; i++) {
+    // String selectorName = selectorNames.get(i);
+    // CssSelector cssSelector = getSelector(selectorName);
+    // CssSelector clonedCssSelector = cssSelector.cloneCssSelector(selectorName);
+    // part.addSelector(selectorName, clonedCssSelector);
+    // }
+    //
+    // part.setUniqueId();
+    // part.setAbsolutePositionProvider(absolutePositionProvider);
+    //
+    // return part;
+    // } else {
+    // return null;
+    // }
+    // }
 
     /**
      * Checks whether a {@link Part} can have a specific child {@link Part}.
index a485a80..c11f8e0 100644 (file)
@@ -37,7 +37,7 @@ public class NScreenModel {
     public static final int DOWN = 1;
 
     public enum Orientation {
-        LANDSCAPE, PORTRAIT
+        LANDSCAPE, PORTRAIT;
     }
 
     public enum Scan {
@@ -73,7 +73,6 @@ public class NScreenModel {
     private String resolution;
     private Scan scan = null;
     private boolean grid = false;
-
     // TODO : Next Version.
     // private int minDeviceHeight;
     // private int maxDeviceHeight;
@@ -113,6 +112,7 @@ public class NScreenModel {
 
     public void addDisablePage(String pageId) {
         this.enablePages.put(pageId, false);
+        link.put(pageId, NONE);
     }
 
     public void removeEnablePage(String pageId) {
@@ -142,6 +142,13 @@ public class NScreenModel {
         return this.link.get(pageId);
     }
 
+    public boolean isLinked(String pageId) {
+        if (getLink(pageId) == NONE) {
+            return false;
+        }
+        return true;
+    }
+
     public boolean isValidStatus(int status) {
         boolean checkValue = false;
 
index 683d263..7b9abd4 100644 (file)
@@ -773,21 +773,20 @@ public class PageData implements IPartListener, ICssListener {
                }
        }
 
-//     public void removeCssFile(String fileName) {
-//             removeCssFile(getCssFile(fileName));
-//     }
+       public void removeCssFileByPath(String path) {
+               removeCssFile(getCssFile(path));
+       }
 
-//     public CssFile getCssFile(String fileName) {
-//             if (fileName != null) {
-//                     for (CssFile cssFile : cssFiles) {
-//                             if (fileName.equals(cssFile.getFileName())) {
-//                                     return cssFile;
-//                             }
-//                     }
-//             }
-//
-//             return null;
-//     }
+       public CssFile getCssFile(String filePath) {
+               if (filePath != null) {
+                       for (CssFile cssFile : cssFiles) {
+                               if (filePath.equals(cssFile.getCssFilePath())) {
+                                       return cssFile;
+                               }
+                       }
+               }
+               return null;
+       }
 
        public List<CssFile> getCssFiles() {
                return cssFiles;
index 9ef1706..3d3dde4 100644 (file)
@@ -28,8 +28,12 @@ import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.EventObject;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
@@ -147,6 +151,7 @@ import org.tizen.webuibuilder.model.css.CssFile;
 import org.tizen.webuibuilder.model.css.CssSelector;
 import org.tizen.webuibuilder.model.css.io.CssReader;
 import org.tizen.webuibuilder.model.descriptors.DescriptorManager;
+import org.tizen.webuibuilder.model.nscreen.Device;
 import org.tizen.webuibuilder.model.nscreen.NScreenModel;
 import org.tizen.webuibuilder.model.nscreen.NScreenModelController;
 import org.tizen.webuibuilder.model.page.IPageDataListener;
@@ -167,6 +172,7 @@ import org.tizen.webuibuilder.ui.editor.dnd.listener.TemplateTransferDropTargetL
 import org.tizen.webuibuilder.ui.editor.ruler.DesignerRuler;
 import org.tizen.webuibuilder.ui.editor.ruler.DesignerRulerProvider;
 import org.tizen.webuibuilder.ui.editor.texteditor.TextEditor;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
 import org.tizen.webuibuilder.ui.views.properties.PropertiesPage;
 import org.tizen.webuibuilder.ui.views.properties.PropertiesPage.PropertiesMode;
 
@@ -288,15 +294,12 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
     }
 
     public void setNscreenIndex(NScreenModel model) {
-        
-        String cssFileName = pageData.getName() +"." + model.getFileName();
-        
-        if( model.getFileName().equals( "common.css" ) )
-            cssFileName = model.getFileName();
-        
-        File curFile = new File( pageData.getCurrentCssFile().getCssFilePath() );
-        
-        if ( curFile.getName().equals(cssFileName)) {
+
+        String cssFileName = pageData.getName() + "_" + model.getName() + ".css";
+
+        File curFile = new File(pageData.getCurrentCssFile().getCssFilePath());
+
+        if (curFile.getName().equals(cssFileName)) {
             return;
         }
         // remove css selector in previous CssFile
@@ -306,9 +309,9 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
         int size = list.size();
         for (int i = 0; i < size; i++) {
             CssFile file = list.get(i);
-            
-            String fileName = new File( file.getCssFilePath() ).getName();
-            if ( fileName.equals( cssFileName ) ) {
+
+            String fileName = new File(file.getCssFilePath()).getName();
+            if (fileName.equals(cssFileName)) {
                 // apply new css file
                 setCssFileToModel(pageData.getCommonCssFile());
                 setCssFileToModel(list.get(i));
@@ -328,6 +331,52 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
 
     }
 
+    public void setNscreenIndex2(Device device, NScreenModel itemModel) {
+        List<NScreenModel> models =
+                appManager.getNScreenModelManger().getNScreenModelsForDevice(device);
+
+        clearSelectorsOfRootPart();
+
+        List<CssFile> list = pageData.getCssFiles();
+        List<CssFile> applyList = new ArrayList<CssFile>();
+        for (NScreenModel model : models) {
+            String cssFileName = pageData.getName() + "_" + model.getName() + ".css";
+
+            int size = list.size();
+            for (int i = 0; i < size; i++) {
+                CssFile file = list.get(i);
+                String fileName = new File(file.getCssFilePath()).getName();
+                if (fileName.equals(cssFileName)) {
+                    applyList.add(file);
+                    break;
+                }
+            }
+        }
+
+        for (int i = 0; i < applyList.size(); i++) {
+            setCssFileToModel(applyList.get(i));
+        }
+        if (null != itemModel) {
+            String cssFileName = pageData.getName() + "_" + itemModel.getName() + ".css";
+            boolean isSet = false;
+            for (int i = 0; i < list.size(); i++) {
+                CssFile file = list.get(i);
+                String fileName = new File(file.getCssFilePath()).getName();
+                if (fileName.equals(cssFileName)) {
+                    pageData.setCssFileIndex(i);
+                    isSet = true;
+                    break;
+                }
+            }
+            if (!isSet) {
+                pageData.setCssFileIndex(0);
+            }
+        }
+        System.out.println(pageData.getCurrentCssFile().getCssFilePath());
+        getViewer().updateStyle();
+
+    }
+
     protected void setCssFileToModel(CssFile cssFile) {
         if (rootPart != null && cssFile != null) {
             for (CssSelector selector : cssFile.getSelectors()) {
@@ -349,18 +398,20 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
     }
 
     protected void clearSelectorsOfRootPart() {
-        CssFile currentCssFile = pageData.getCurrentCssFile();
-        for (CssSelector selector : currentCssFile.getSelectors()) {
-            String pageId = selector.getPageId();
-            Part pagePart = rootPart.getChildOfIdPropertyValue(pageId, true);
-            if (pagePart != null) {
-                String partId = selector.getPartId();
-                Part part = rootPart.getChildOfIdPropertyValue(partId, true);
-                if (part != null) {
-                    part.removeSelector(selector.getSelectorName(), false);
-                }
-            }
-        }
+        rootPart.clearAllSelector();
+        // CssFile currentCssFile = pageData.getCurrentCssFile();
+        // Collection<CssSelector> selectors = rootPart.getSelectors();
+        // for (CssSelector selector : currentCssFile.getSelectors()) {
+        // String pageId = selector.getPageId();
+        // Part pagePart = rootPart.getChildOfIdPropertyValue(pageId, true);
+        // if (pagePart != null) {
+        // String partId = selector.getPartId();
+        // Part part = rootPart.getChildOfIdPropertyValue(partId, true);
+        // if (part != null) {
+        // part.removeSelector(selector.getSelectorName(), false);
+        // }
+        // }
+        // }
     }
 
     private DescriptorManager getDescriptorManager() {
@@ -920,7 +971,7 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
 
     @Override
     public void dispose() {
-        if(controller != null){
+        if (controller != null) {
             controller.removeListener();
         }
 
@@ -1063,6 +1114,10 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
         toolbar.adjustLayout(false);
     }
 
+    public void setShowingSize(List<Device> devices, NScreenItem nsItem) {
+        toolbar.setResolution(devices, nsItem);
+    }
+
     public void setLandscape(boolean landscape) {
         designer.setLandscape(landscape);
         preview.setLandscape(landscape);
@@ -1109,13 +1164,15 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
 
                         Part model = (Part) part.getModel();
                         if (model.isPagePart()) {
-                            AnimatorModelManager modelManager = appManager.getAnimatorModelManager();
+                            AnimatorModelManager modelManager =
+                                    appManager.getAnimatorModelManager();
                             modelManager.setPagePart((AnimatorPagePart) model);
                         } else {
                             Part parentPart = model.getParent();
                             while (parentPart != null) {
                                 if (parentPart.isPagePart()) {
-                                    AnimatorModelManager modelManager = appManager.getAnimatorModelManager();
+                                    AnimatorModelManager modelManager =
+                                            appManager.getAnimatorModelManager();
                                     modelManager.setPagePart((AnimatorPagePart) parentPart);
                                     break;
                                 }
@@ -1379,14 +1436,16 @@ public class PageDesigner extends GraphicalEditor implements CommandStackListene
 
         boolean isExist = AnimatorFileReader.isExistModelFile(animatorModelJsFile);
         if (isExist) {
-            AnimatorFileReader.makeModelbyFile(animatorModelManager, rootPart, animatorModelJsFile, animatorModelCssFile);
+            AnimatorFileReader.makeModelbyFile(animatorModelManager, rootPart, animatorModelJsFile,
+                                               animatorModelCssFile);
         } else {
             List<AnimatorAnimation> animations =
                     ((AnimatorPart) rootPart).createDefaultAnimations(animatorModelManager);
             for (Part part : rootPart.getChildren()) {
                 for (AnimatorAnimation animation : animations) {
                     if (part.equals(animation.getPartLink())) {
-                        ((AnimatorPagePart) part).addAnimation(animatorModelManager, animation, Origin.EDITOR);
+                        ((AnimatorPagePart) part).addAnimation(animatorModelManager, animation,
+                                                               Origin.EDITOR);
                     }
                 }
             }
index 24f38fd..222f57f 100644 (file)
@@ -42,11 +42,8 @@ import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.ui.IPerspectiveRegistry;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
 import org.tizen.webuibuilder.BuilderConstants;
 import org.tizen.webuibuilder.animator.AnimatorConstants;
 import org.tizen.webuibuilder.animator.gef.command.AnimationCreateCommand;
@@ -58,7 +55,11 @@ import org.tizen.webuibuilder.gef.editparts.DesignerEditPart;
 import org.tizen.webuibuilder.gef.viewer.HoverBrowserRulerComposite;
 import org.tizen.webuibuilder.model.Part;
 import org.tizen.webuibuilder.model.app.AppManager;
+import org.tizen.webuibuilder.model.nscreen.Device;
+import org.tizen.webuibuilder.model.nscreen.Device.Orientation;
+import org.tizen.webuibuilder.model.nscreen.DeviceManger;
 import org.tizen.webuibuilder.nl.BuilderMessages;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
 import org.tizen.webuibuilder.utility.Platform;
 import org.tizen.webuibuilder.utility.ResourceManager;
 
@@ -87,16 +88,18 @@ public class PageDesignerToolbar implements ISelectionListener {
     private ResolutionManger resolution;
     private ScreenSize currentScreen;
     private ScaleData scaleData;
+    private Device defaultDevice = null;
 
     private boolean isLandscape;
     private boolean isFiting;
 
+    private NScreenItem nscreen = null;
     private boolean PLUS = true;
     private boolean MINUS = false;
     private final int MARGIN = 15;
 
-//    private ToolItem animatorPerspectiveItem;
-//    private ToolItem designerPerspectiveItem;
+    // private ToolItem animatorPerspectiveItem;
+    // private ToolItem designerPerspectiveItem;
     private ToolItem animatorAnimationItem;
     private Part currentSelectedPart = null;
 
@@ -130,6 +133,13 @@ public class PageDesignerToolbar implements ISelectionListener {
         // ProjectManager.getProjectManager(project);
         // PageData pageData = mainEditor.getPageData();
         // pageData.addPageListener(this);
+        defaultDevice = new Device("DefaultDevice", "Default Device [360x640, 9:16, PR:2.0]");
+        defaultDevice.setOrientation(Orientation.PORTRAIT);
+        defaultDevice.setDevicePixelRatio(2.0);
+        defaultDevice.setDeviceWidth(360);
+        defaultDevice.setDeviceHeight(640);
+        defaultDevice.setWidth(720);
+        defaultDevice.setHeight(1280);
     }
 
     public void dispose() {
@@ -154,11 +164,61 @@ public class PageDesignerToolbar implements ISelectionListener {
         // ProjectManager projectManger =
         // ProjectManager.getProjectManager(project);
 
+        // if (!resolution.getDeviceMode().equals(appManager.getFrameworkScale())) {
+        // resolution.setScreeSizesFromDeviceMode(appManager.getFrameworkScale());
+        // screenSize.setEnabled(resolution.getEnable());
+        // resetMenuPart();
+        // }
+
         if (!resolution.getDeviceMode().equals(appManager.getFrameworkScale())) {
-            resolution.setScreeSizesFromDeviceMode(appManager.getFrameworkScale());
-            screenSize.setEnabled(resolution.getEnable());
+            setResolution(DeviceManger.getDeviceManager().getDevices(), null);
             resetMenuPart();
         }
+
+    }
+
+    public void setResolution(List<Device> devices, NScreenItem nsItem) {
+        nscreen = nsItem;
+        Device device = null;
+        
+        if (devices.isEmpty()) {
+            devices.add(defaultDevice);
+        }
+        resolution
+                .setScreeSizesFromNScreen(devices, mainEditor.getAppManager().getFrameworkScale());
+        screenSize.setEnabled(resolution.getEnable());
+        if (null != nscreen && nscreen.getLastResolution() != null) {
+            currentScreen = resolution.getScreenSize(nscreen.getLastResolution());
+            device = resolution.getDevice(nscreen.getLastResolution());
+        } else {
+            currentScreen = resolution.getScreenSize(0);
+            if (devices != null && !devices.isEmpty()) {
+                device = devices.get(0);
+            }
+        }
+        screenSizeText.setText(currentScreen.getScreenSize());
+
+        if (null != mainEditor.getViewer()) {
+            if (nscreen != null) {
+                if (nscreen.getScale() <= 0f || isFiting) {
+                    adjustLayout(true);
+                } else {
+                    mainEditor.zoomBrowser(nscreen.getScale());
+                    float value = nscreen.getScale();
+                    int intValue = 0;
+                    value = value * 100;
+                    intValue = (int) value;
+                    scaleValueText.setText("" + intValue);
+                }
+            } else {
+                resetMenuPart();
+                resetScreen();
+            }
+
+            mainEditor.setNscreenIndex2(device, nscreen.getModel());
+            mainEditor.setShowingSize(currentScreen.getWidth(), currentScreen.getHeight());
+            mainEditor.scrollToCenter();
+        }
     }
 
     private void draw() {
@@ -241,17 +301,17 @@ public class PageDesignerToolbar implements ISelectionListener {
 
         separator = new ToolItem(toolBar, SWT.SEPARATOR);
         separator.setWidth(50);
-//
-//        animatorPerspectiveItem = new ToolItem(toolBar, SWT.PUSH);
-//        animatorPerspectiveItem.setImage(ResourceManager.getImage(BuilderConstants.ICON_DIR,
-//                                                                  "video_16.png"));
-//        animatorPerspectiveItem.setToolTipText(BuilderMessages.ANIMATORMODE);
-//
-//        designerPerspectiveItem = new ToolItem(toolBar, SWT.PUSH);
-//        designerPerspectiveItem.setImage(ResourceManager.getImage(BuilderConstants.ICON_DIR,
-//                                                                  "Add_New_Page.png"));
-//        designerPerspectiveItem.setToolTipText(BuilderMessages.DESIGNERMODE);
-//        designerPerspectiveItem.setEnabled(false);
+        //
+        // animatorPerspectiveItem = new ToolItem(toolBar, SWT.PUSH);
+        // animatorPerspectiveItem.setImage(ResourceManager.getImage(BuilderConstants.ICON_DIR,
+        // "video_16.png"));
+        // animatorPerspectiveItem.setToolTipText(BuilderMessages.ANIMATORMODE);
+        //
+        // designerPerspectiveItem = new ToolItem(toolBar, SWT.PUSH);
+        // designerPerspectiveItem.setImage(ResourceManager.getImage(BuilderConstants.ICON_DIR,
+        // "Add_New_Page.png"));
+        // designerPerspectiveItem.setToolTipText(BuilderMessages.DESIGNERMODE);
+        // designerPerspectiveItem.setEnabled(false);
 
         scaleValue.addSelectionListener(new SelectionAdapter() {
             @Override
@@ -272,7 +332,9 @@ public class PageDesignerToolbar implements ISelectionListener {
 
     public void resetScreen() {
         // currentScreen = resolution.getScreenSize(0);
-        mainEditor.setShowingSize(currentScreen.getWidth(), currentScreen.getHeight());
+        if (null != mainEditor.getViewer()) {
+            mainEditor.setShowingSize(currentScreen.getWidth(), currentScreen.getHeight());
+        }
     }
 
     private void resetMenuPart() {
@@ -329,6 +391,8 @@ public class PageDesignerToolbar implements ISelectionListener {
                 public void widgetSelected(SelectionEvent e) {
                     screenSizeText.setText(item.getText());
                     currentScreen = resolution.getScreenSize(item.getText());
+                    nscreen.setLastResolution(item.getText());
+                    mainEditor.setNscreenIndex2(resolution.getDevice(item.getText()), null);
                     mainEditor.setShowingSize(currentScreen.getWidth(), currentScreen.getHeight());
                 }
             });
@@ -348,6 +412,9 @@ public class PageDesignerToolbar implements ISelectionListener {
                     float value = currentValue;
                     value = value / 100;
                     mainEditor.zoomBrowser(value);
+                    if (nscreen != null) {
+                        nscreen.setScale(value);
+                    }
                 }
             });
         }
@@ -356,7 +423,7 @@ public class PageDesignerToolbar implements ISelectionListener {
     private void insertPreDefinedAnimations(Menu menu) {
         // IProject project = ((FileEditorInput)
         // mainEditor.getEditorInput()).getFile().getProject();
-        AnimatorDescriptorManager manager = AnimatorDescriptorManager.getInstance(appManager);        
+        AnimatorDescriptorManager manager = AnimatorDescriptorManager.getInstance(appManager);
 
         List<CssAnimationDescriptor> cssAnimations = manager.getCssAnimations();
         MenuItem preSubMenuItem = null;
@@ -484,6 +551,9 @@ public class PageDesignerToolbar implements ISelectionListener {
     private void setEditorZoom(int scale) {
         float zoomScale = (float) (scale / 100.0);
         mainEditor.zoomBrowser(zoomScale);
+        if (nscreen != null) {
+            nscreen.setScale(zoomScale);
+        }
     }
 
     private float autoFit(int margin) {
@@ -519,8 +589,7 @@ public class PageDesignerToolbar implements ISelectionListener {
                 editor = composite.getSize();
             }
 
-        }
-        else if (tabMode.endsWith(BuilderMessages.TABTEXTANIMATOR)) {
+        } else if (tabMode.endsWith(BuilderMessages.TABTEXTANIMATOR)) {
             Composite composite = mainEditor.getAnimatorComposite();
             if (composite instanceof HoverBrowserRulerComposite) {
                 Rectangle clientArea = ((HoverBrowserRulerComposite) composite).getEditorBounds();
@@ -569,6 +638,9 @@ public class PageDesignerToolbar implements ISelectionListener {
     public void adjustLayout(boolean force) {
         if (force || isFiting) {
             float value = autoFit(MARGIN);
+            if (nscreen != null) {
+                nscreen.setScale(value);
+            }
             int intValue = 0;
             value = value * 100;
             intValue = (int) value;
@@ -590,37 +662,37 @@ public class PageDesignerToolbar implements ISelectionListener {
 
             }
         });
-//        animatorPerspectiveItem.addSelectionListener(new SelectionAdapter() {
-//            @Override
-//            public void widgetSelected(SelectionEvent e) {
-//                IWorkbenchWindow activeWorkbenchWindow =
-//                        PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-//                IPerspectiveRegistry perspectiveRegistry =
-//                        PlatformUI.getWorkbench().getPerspectiveRegistry();
-//
-//                activeWorkbenchWindow
-//                        .getActivePage()
-//                        .setPerspective(perspectiveRegistry
-//                                                .findPerspectiveWithLabel(BuilderMessages.ANIMATOR_PERSPECTIVE));
-//                changeToAnimatorPerspective();
-//            }
-//        });
-//
-//        designerPerspectiveItem.addSelectionListener(new SelectionAdapter() {
-//            @Override
-//            public void widgetSelected(SelectionEvent e) {
-//                IWorkbenchWindow activeWorkbenchWindow =
-//                        PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-//                IPerspectiveRegistry perspectiveRegistry =
-//                        PlatformUI.getWorkbench().getPerspectiveRegistry();
-//
-//                activeWorkbenchWindow
-//                        .getActivePage()
-//                        .setPerspective(perspectiveRegistry
-//                                                .findPerspectiveWithLabel(BuilderMessages.DESIGNER_PERSPECTIVE));
-//                changeToDesignerPerspective();
-//            }
-//        });
+        // animatorPerspectiveItem.addSelectionListener(new SelectionAdapter() {
+        // @Override
+        // public void widgetSelected(SelectionEvent e) {
+        // IWorkbenchWindow activeWorkbenchWindow =
+        // PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+        // IPerspectiveRegistry perspectiveRegistry =
+        // PlatformUI.getWorkbench().getPerspectiveRegistry();
+        //
+        // activeWorkbenchWindow
+        // .getActivePage()
+        // .setPerspective(perspectiveRegistry
+        // .findPerspectiveWithLabel(BuilderMessages.ANIMATOR_PERSPECTIVE));
+        // changeToAnimatorPerspective();
+        // }
+        // });
+        //
+        // designerPerspectiveItem.addSelectionListener(new SelectionAdapter() {
+        // @Override
+        // public void widgetSelected(SelectionEvent e) {
+        // IWorkbenchWindow activeWorkbenchWindow =
+        // PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+        // IPerspectiveRegistry perspectiveRegistry =
+        // PlatformUI.getWorkbench().getPerspectiveRegistry();
+        //
+        // activeWorkbenchWindow
+        // .getActivePage()
+        // .setPerspective(perspectiveRegistry
+        // .findPerspectiveWithLabel(BuilderMessages.DESIGNER_PERSPECTIVE));
+        // changeToDesignerPerspective();
+        // }
+        // });
 
         leftArrowButton.addSelectionListener(new SelectionAdapter() {
             @Override
@@ -639,6 +711,7 @@ public class PageDesignerToolbar implements ISelectionListener {
         fitButton.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
+                // useless isFiting value
                 isFiting = fitButton.getSelection();
                 adjustLayout(true);
             }
@@ -653,15 +726,15 @@ public class PageDesignerToolbar implements ISelectionListener {
         animatorAnimationItem.setEnabled(false);
     }
 
-//    public void changeToAnimatorPerspective() {
-//        designerPerspectiveItem.setEnabled(true);
-//        animatorPerspectiveItem.setEnabled(false);
-//    }
-//
-//    public void changeToDesignerPerspective() {
-//        designerPerspectiveItem.setEnabled(false);
-//        animatorPerspectiveItem.setEnabled(true);
-//    }
+    // public void changeToAnimatorPerspective() {
+    // designerPerspectiveItem.setEnabled(true);
+    // animatorPerspectiveItem.setEnabled(false);
+    // }
+    //
+    // public void changeToDesignerPerspective() {
+    // designerPerspectiveItem.setEnabled(false);
+    // animatorPerspectiveItem.setEnabled(true);
+    // }
 
     @Override
     public void selectionChanged(IWorkbenchPart part, ISelection selection) {
@@ -669,11 +742,11 @@ public class PageDesignerToolbar implements ISelectionListener {
             Object element = ((StructuredSelection) selection).getFirstElement();
             if ((element instanceof DesignerEditPart)) {
                 Object model = ((DesignerEditPart) element).getModel();
-                if(model instanceof Part){
-                       Part modelPart = (Part)model;
-                       if (!modelPart.isDocumentPart()) {
-                           currentSelectedPart = (Part) model;
-                       }
+                if (model instanceof Part) {
+                    Part modelPart = (Part) model;
+                    if (!modelPart.isDocumentPart()) {
+                        currentSelectedPart = (Part) model;
+                    }
                 }
             }
         }
@@ -686,5 +759,4 @@ public class PageDesignerToolbar implements ISelectionListener {
     public void setCommandStack(CommandStack commandStack) {
         this.commandStack = commandStack;
     }
-
 }
index dfb84b0..f0a8d16 100644 (file)
 
 package org.tizen.webuibuilder.ui.editor;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.tizen.webuibuilder.model.nscreen.Device;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+
 
 public class ResolutionManger {
     private List<ScreenSize> mList;
+    private List<Device> devices = null;
     private boolean enable;
     private String curDeviceMode = new String("");
 
@@ -55,7 +60,10 @@ public class ResolutionManger {
     }
 
     public ScreenSize getScreenSize(int index) {
-        return this.mList.get(index);
+        if (mList != null && !mList.isEmpty()) {
+            return this.mList.get(index);
+        }
+        return null;
     }
 
     public ScreenSize getScreenSize(String screen) {
@@ -124,8 +132,42 @@ public class ResolutionManger {
 
     }
 
+    public void setScreeSizesFromNScreen(List<Device> devices, String deviceMode) {
+        if (devices == null || deviceMode == null) {
+            return;
+        }
+
+        curDeviceMode = deviceMode;
+        removeAll();
+
+        if (deviceMode.equals("device-width")) {
+            for (Device device : devices) {
+                // StringBuffer deviceInfo = new StringBuffer();
+                // deviceInfo.append(device.getName()).append(" (").append(device.getDeviceWidth())
+                // .append("x").append(device.getDeviceHeight()).append(")");
+                // addScreenSize(device.getDeviceWidth(), device.getDeviceHeight(),
+                // deviceInfo.toString());
+                addScreenSize(device);
+                enable = true;
+            }
+        }
+
+        if (deviceMode.equals("480")) {
+            removeAll();
+            addScreenSize(480, 800, "Static 480X800");
+            enable = false;
+        }
+
+        if (deviceMode.equals("720")) {
+            removeAll();
+            addScreenSize(720, 1280, "Static 720X1280");
+            enable = false;
+        }
+    }
+
     private void init() {
         this.mList = new LinkedList<ScreenSize>();
+        this.devices = new ArrayList<Device>();
         this.enable = true;
     }
 
@@ -133,7 +175,21 @@ public class ResolutionManger {
         mList.add(new ScreenSize(width, height, resolutionText));
     }
 
+    private void addScreenSize(Device device) {
+        addScreenSize(device.getDeviceWidth(), device.getDeviceHeight(), device.getDisplayName());
+        devices.add(device);
+    }
+
     public String getDeviceMode() {
         return curDeviceMode;
     }
+
+    public Device getDevice(String resolutionText) {
+        for (Device device : devices) {
+            if (device.getDisplayName().equals(resolutionText)) {
+                return device;
+            }
+        }
+        return null;
+    }
 }
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/FontUtil.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/FontUtil.java
new file mode 100644 (file)
index 0000000..81c0d69
--- /dev/null
@@ -0,0 +1,222 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import org.eclipse.jface.resource.FontRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.PlatformUI;
+import org.tizen.common.util.OSChecker;
+
+
+public class FontUtil {
+    private static FontRegistry fontRegistry = new FontRegistry();
+    private static final Font defaultFont = getDADefaultFont();
+
+    // * Toolbal Layout
+    // Combo botton text font
+    public static final Font COMBO = getFont("combo", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // mac 11
+
+    // Combo drop-down list text font
+    public static final Font DROPDOWN = getFont("dropdown", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // mac 11
+
+    // Timer
+    public static final Font TIMER = getFont("timer", resizeDefaultFont(12, 5));//$NON-NLS-1$
+    // mac version 17
+
+    // tab button font
+    public static final Font TAB_BUTTON_FONT = getFont("tab_button_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    // * Time-Line Layout
+    // Edit Chart Dlg.
+    public static final Font ADDITEM_BUTTON_FONT =
+            getFont("additem_button_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font FLOATING = getFont("float_renderer", resizeDefaultFont(14, 1));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font NSCREEN_TITLE =
+            getFont("nscreen_title", setDefaultFontStyleAndSize(SWT.ITALIC, 15));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font COMMON = getFont("nscreen_common", resizeDefaultFont(14, 1));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font ORIENTATION = getFont("nscreen_orientation", resizeDefaultFont(14, 1));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font PIXELRATIO = getFont("nscreen_pixelratio", resizeDefaultFont(14, 1));//$NON-NLS-1$
+    // mac 11
+    public static final Font DEVICE = getFont("nscreen_device", resizeDefaultFont(12, 1));//$NON-NLS-1$
+    // mac 11
+
+    // ui event text font
+    public static final Font TIMELINE_UIEVENT_FONT =
+            getFont("timeline_uievent_font", resizeDefaultFont(7, 3));//$NON-NLS-1$
+
+    // * Open Trace
+    // Inner title : saved file and temporary file
+    public static final Font OPEN_TRACE_INNER_TITLE =
+            getFont("open_trace_inner_title", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // mac 11
+
+    // * Edit Chart
+    // Title
+    public static final Font EDIT_CHART_DLG_TITLE =
+            getFont("edit_chart_dlg_title", resizeDefaultFont(9, 0));//$NON-NLS-1$
+    // Button
+    public static final Font EDIT_CHART_DLG_BUTTON =
+            getFont("edit_chart_dlg_button", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // Item Name
+    public static final Font EDIT_CHART_DLG_ITEM_NAME =
+            getFont("edit_chart_item_name", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // Item SubName
+    public static final Font EDIT_CHART_DLG_ITEM_SUB_NAME =
+            getFont("edit_chart_item_sub_name", resizeDefaultFont(9, 2));//$NON-NLS-1$
+
+    // DA table header and header group font
+    public static final Font TABLE_HEADER_FONT =
+            getFont("table_header_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    // DA table cell font (contents font)
+    public static final Font TABLE_CELL_FONT = getFont("table_cell_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font EXPLORER_CELL_FONT =
+            getFont("table_cell_font", resizeDefaultFont(15, 3));//$NON-NLS-1$
+
+    public static final Font DETAIL_INFO_FONT =
+            getFont("detail_info_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    // * About Dlg.
+    public static final Font ABOUT_TEXT = getFont("about_text", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // mac 11
+    public static final Font DIALOG_BUTTON_FONT =
+            getFont("dialog_button_font", resizeDefaultFont(9, 2));//$NON-NLS-1$
+    // mac 11
+
+    // * stop progress dialog
+    public static final Font STOP_PROGRESS_FONT =
+            getFont("stop_progress_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    public static final Font PROGRESS_FONT = getFont("progress_font", resizeDefaultFont(9, 3));//$NON-NLS-1$
+
+    // * not support
+    public static final Font TOOLTIP = getFont("tooltip", resizeDefaultFont(10, 1));//$NON-NLS-1$
+    public static final Font CIRCULAR_GRAPH_VALUE_FONT =
+            getFont("circular_graph_value_font", resizeDefaultFont(13, 5));//$NON-NLS-1$
+    // mac 18
+
+    public static final Font CIRCULAR_GRAPH_MEASURE_FONT =
+            getFont("circular_graph_measure_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font CIRCULAR_LABEL_FONT =
+            getFont("circular_label_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font BAR_GRAPH_LABEL_FONT =
+            getFont("bar_graph_label_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font BAR_GRAPH_FONT = getFont("bar_graph_font", resizeDefaultFont(6, 5));//$NON-NLS-1$
+    // mac 11
+
+    public static final Font LOCK_LABEL_FONT = getFont("lock_label_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+
+    public static final Font SCORE_TITLE_FONT =
+            getFont("score_title_font", setDefaultFontStyleAndSize(SWT.BOLD, 10));//$NON-NLS-1$
+
+    // * chart
+    public static final Font CHART_TOOLTIP_FONT =
+            getFont("chart_tootip_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+
+    public static final Font CHART_AXIS_FONT = getFont("chart_axis_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+
+    public static final Font CHART_ARROW_TID_FONT =
+            getFont("chart_arrow_tid_font", resizeDefaultFont(7, 3));//$NON-NLS-1$
+
+    // * chart board
+    public static final Font CHART_NAME_FONT = getFont("chart_name_font", resizeDefaultFont(8, 3));//$NON-NLS-1$
+
+    // * context menu
+    public static final Font CONTEXT_MENU_TITLE_FONT =
+            getFont("context_menu_title_font", resizeDefaultFont(9, 3));//$NON-NLS-1$
+
+    public static final Font CONTEXT_MENU_ITEM_FONT =
+            getFont("context_menu_item_font", resizeDefaultFont(9, 3));//$NON-NLS-1$
+
+    // * configuration
+    public static final Font CONFIGURATION_TABLE_TITLE_FONT =
+            getFont("configuration_table_title_font", resizeDefaultFont(9, 3));//$NON-NLS-1$
+
+    // timeline
+    public static final Font TIMELINE_FONT = getFont("timeline_font", resizeDefaultFont(8, 3)); //$NON-NLS-1$
+
+    public static final Font TIMELINE_TICK_FONT = getFont("time_tick", resizeDefaultFont(6, 3));//$NON-NLS-1$
+    public static final Font TIMELINE_BALLOON_FONT =
+            getFont("time_balloon", resizeDefaultFont(8, 3));//$NON-NLS-1$
+
+    private static Font getFont(String fontName, FontData[] fontData) {
+        if (!fontRegistry.hasValueFor(fontName)) {
+            fontRegistry.put(fontName, fontData);
+        }
+        return fontRegistry.get(fontName);
+    }
+
+    public static FontData[] resizeDefaultFont(int size, int mac) {
+        if (OSChecker.isMAC()) {
+            return resizeDefaultFont(size + mac);
+        }
+        return resizeDefaultFont(size);
+    }
+
+    public static FontData[] resizeDefaultFont(int size) {
+        FontData[] fontData = defaultFont.getFontData();
+        for (int i = 0; i < fontData.length; i++) {
+            fontData[i].setHeight(size);
+        }
+        return fontData;
+    }
+
+    public static FontData[] setDefaultFontStyle(int style) {
+        FontData[] fontData = defaultFont.getFontData();
+        for (int i = 0; i < fontData.length; i++) {
+            fontData[i].setStyle(style);
+        }
+        return fontData;
+    }
+
+    public static FontData[] setDefaultFontStyleAndSize(int style, int size) {
+        FontData[] fontData = defaultFont.getFontData();
+        for (int i = 0; i < fontData.length; i++) {
+            fontData[i].setStyle(style);
+            fontData[i].setHeight(size);
+        }
+        return fontData;
+    }
+
+    public static Font getDADefaultFont() {
+        String fontName = null;
+        if (OSChecker.isLinux()) {
+            fontName = "Dejavu Sans";//$NON-NLS-1$
+        } else if (OSChecker.isWindows()) {
+            fontName = "Verdana";//$NON-NLS-1$
+        } else {
+            return PlatformUI.getWorkbench().getDisplay().getSystemFont();
+        }
+        return getFont("ex_font", new FontData[] { new FontData(fontName, 9, SWT.NORMAL) }); //$NON-NLS-1$
+    }
+
+    public static Point getTextArea(String text, GC gc) {
+        return gc.textExtent(text, SWT.DRAW_MNEMONIC);
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/INScreenDrawRenderer.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/INScreenDrawRenderer.java
new file mode 100644 (file)
index 0000000..19cda0f
--- /dev/null
@@ -0,0 +1,14 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+
+
+public interface INScreenDrawRenderer {
+    public void draw(GC gc, Canvas canvas, int state, boolean isSelected, boolean isEnabled,
+                     Image thumb, NScreenModel model, String pageId);
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenBaseComposite.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenBaseComposite.java
new file mode 100644 (file)
index 0000000..e9cac7e
--- /dev/null
@@ -0,0 +1,258 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.tizen.webuibuilder.animator.ui.views.timeline.common.ColorResource;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.NScreenType;
+import org.tizen.webuibuilder.ui.views.nscreen.model.NScreenPageModel;
+
+
+public class NScreenBaseComposite extends ScrolledComposite {
+
+    private List<NScreenGroup> groups = new ArrayList<NScreenGroup>();
+    private static int SEPARATOR_HEIGHT = 10;
+    private Composite comp = null;
+    private Menu popup = null;
+    private NScreenPageModel pageModel = null;
+
+    public NScreenBaseComposite(Composite parent, int style, NScreenPageModel nscreenPageModel) {
+        super(parent, SWT.V_SCROLL);
+        pageModel = nscreenPageModel;
+        comp = new Composite(this, SWT.NONE);
+        comp.setLayout(new FormLayout());
+        comp.setBackground(NScreenItem.BG_COLOR);
+        createPopupMenu();
+
+        setContent(comp);
+        setExpandVertical(true);
+        setExpandHorizontal(true);
+        addControlListener(new ControlAdapter() {
+            public void controlResized(ControlEvent e) {
+                Rectangle r = getClientArea();
+                setMinSize(comp.computeSize(r.width, SWT.DEFAULT));
+            }
+        });
+    }
+
+    private Composite addSeparator() {
+        Composite separator = new Composite(this, SWT.NONE);
+        separator.addPaintListener(new PaintListener() {
+
+            @Override
+            public void paintControl(PaintEvent e) {
+                e.gc.setBackground(ColorResource.BLACK);
+                e.gc.fillRectangle(getBounds());
+            }
+        });
+        int size = groups.size();
+        FormData data = new FormData();
+        data.top = new FormAttachment(groups.get(size - 1), 0);
+        data.left = new FormAttachment(0, 0);
+        data.right = new FormAttachment(100, 0);
+        data.height = SEPARATOR_HEIGHT;
+        separator.setLayoutData(data);
+        return separator;
+    }
+
+    private void createPopupMenu() {
+        popup = new Menu(getShell(), SWT.POP_UP);
+        MenuItem enableItem = new MenuItem(popup, SWT.PUSH);
+        enableItem.setText("Enable");
+        enableItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.enableAction();
+                }
+            }
+        });
+
+        MenuItem disableItem = new MenuItem(popup, SWT.PUSH);
+        disableItem.setText("Disable");
+        disableItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.disableAction();
+                }
+
+            }
+        });
+        new MenuItem(popup, SWT.SEPARATOR);
+
+        MenuItem moveUpItem = new MenuItem(popup, SWT.PUSH);
+        moveUpItem.setText("Move up");
+        moveUpItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (null != obj && obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.moveUpAction();
+                }
+            }
+        });
+
+        MenuItem moveDownItem = new MenuItem(popup, SWT.PUSH);
+        moveDownItem.setText("Move down");
+        moveDownItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (null != obj && obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.moveDownAction();
+                }
+            }
+        });
+
+        new MenuItem(popup, SWT.SEPARATOR);
+
+        MenuItem cutLinkItem = new MenuItem(popup, SWT.PUSH);
+        cutLinkItem.setText("Cut link");
+        cutLinkItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (null != obj && obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.LinkCutAction();
+                }
+            }
+        });
+
+        MenuItem linkUpItem = new MenuItem(popup, SWT.PUSH);
+        linkUpItem.setText("Link up");
+        linkUpItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (null != obj && obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.LinkUpAction();
+                }
+            }
+        });
+
+        MenuItem linkDownItem = new MenuItem(popup, SWT.PUSH);
+        linkDownItem.setText("Link down");
+        linkDownItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                MenuItem menuItem = (MenuItem) e.widget;
+                Object obj = menuItem.getParent().getData("caller");
+                if (null != obj && obj instanceof NScreenItem) {
+                    NScreenItem item = (NScreenItem) obj;
+                    item.LinkDownAction();
+                }
+            }
+        });
+    }
+
+    public void layout() {
+        comp.layout();
+        Rectangle r = getClientArea();
+        setMinSize(comp.computeSize(r.width, SWT.DEFAULT));
+    }
+
+    public NScreenGroup createNewGroup(NScreenType groupId, String title) {
+        int height = 0;
+        int count = groups.size();
+        Composite separator = null;
+        if (count > 0) {
+            for (NScreenGroup g : groups) {
+                height += g.getGroupHeight();
+            }
+            height += (count - 1) * SEPARATOR_HEIGHT;
+            separator  = addSeparator();
+//            height += SEPARATOR_HEIGHT;
+        }
+
+        NScreenGroup newGroup = new NScreenGroup(this, SWT.NONE, groupId);
+        if (title != null) {
+            newGroup.setTitle(title);
+        }
+
+        FormData data = new FormData();
+        if (count > 0) {
+            data.top = new FormAttachment(groups.get(count - 1), 4);
+        } else {
+            data.top = new FormAttachment(0, 0);
+        }
+        data.left = new FormAttachment(0, 0);
+        data.right = new FormAttachment(100, 0);
+        data.height = newGroup.getGroupHeight();
+        newGroup.setLayoutData(data);
+        newGroup.setMenu(popup);
+        groups.add(newGroup);
+        return newGroup;
+    }
+
+    public boolean hasSelection() {
+        for (NScreenGroup group : groups) {
+            if (group.hasSelection()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void checkSelection(NScreenType selectedType) {
+        for (NScreenGroup group : groups) {
+            if (group.getType() != selectedType) {
+                group.clearSelection();
+            }
+        }
+    }
+
+    public void setFocusToSelectedItem() {
+        NScreenGroup sg = null;
+        for (NScreenGroup group : groups) {
+            if (group.hasSelection()) {
+                sg = group;
+                break;
+            }
+        }
+        sg.getSelectedItem().setFocus();
+    }
+
+    public Composite getInnerComposite() {
+        return comp;
+    }
+
+    public NScreenPageModel getNScreenPageModel() {
+        return pageModel;
+    }
+
+    public List<NScreenGroup> getNScreenGroups() {
+        return groups;
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenGroup.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenGroup.java
new file mode 100644 (file)
index 0000000..774d38a
--- /dev/null
@@ -0,0 +1,333 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.tizen.webuibuilder.animator.ui.views.timeline.common.ColorResource;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.NScreenType;
+import org.tizen.webuibuilder.ui.views.nscreen.model.NScreenPageModel;
+
+
+public class NScreenGroup extends Composite {
+
+    private List<NScreenItem> items = new ArrayList<NScreenItem>();
+
+    // FIXME
+    public static final int GROUP_LABEL_HEIGHT = 50;
+    public static final int MIN_GROUP_ITEM_HEIGHT = 50;
+    public static final int ITEM_MARGIN = 0;
+
+    private int height = MIN_GROUP_ITEM_HEIGHT;
+    private NScreenType groupType;
+    private String title = null;
+    private NScreenBaseComposite owner = null;
+
+    private Listener menuDisableListener = new Listener() {
+
+        @Override
+        public void handleEvent(Event event) {
+            Menu menu = getMenu();
+            for (MenuItem item : menu.getItems()) {
+                item.setEnabled(false);
+            }
+        }
+    };
+    private PaintListener paintListener = new PaintListener() {
+
+        @Override
+        public void paintControl(PaintEvent e) {
+            Rectangle rect = getClientArea();
+            Color color = e.display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+            e.gc.setBackground(color);
+            e.gc.fillRectangle(rect);
+            e.gc.setForeground(ColorResource.BLACK);
+
+            if (null != title) {
+                e.gc.setFont(FontUtil.NSCREEN_TITLE);
+                Point textWH = FontUtil.getTextArea(title, e.gc);
+                int x = rect.x + (rect.width - textWH.x) / 2;
+                int y = rect.y + (GROUP_LABEL_HEIGHT - textWH.y) / 2;
+
+                e.gc.drawText(title, x, y);
+            }
+            // e.gc.setBackground(ColorResource.WHITE);
+            // int x = rect.x;
+            // int y = rect.y;
+            // int w = rect.width;
+            // int h = rect.height;
+            // e.gc.fillPolygon(new int[] { x + 2, y + 2, x + 170, y + 2, x + 170 + 0, y + 28,
+            // x + w - 2, y + 28, x + w - 2, y + h - 2, 2, y + h - 2, x + 2, y + 2 });
+            // e.gc.drawPolygon(new int[] {x +2, y+2,
+            // x + 170, y+2,
+            // x + 170 + 0, y +28,
+            // x +w -2, y+28,
+            // x+w-2, y+h-2,
+            // 2, y+h-2,
+            // x+2, y+2
+            // });
+
+        }
+    };
+
+    public NScreenGroup(NScreenBaseComposite owner, int style, NScreenType groupId) {
+        super(owner.getInnerComposite(), style);
+        this.owner = owner;
+        setLayout(new FormLayout());
+        groupType = groupId;
+        this.addPaintListener(paintListener);
+        this.addListener(SWT.MouseDown, menuDisableListener);
+    }
+
+    public NScreenPageModel getNScreenPageModel() {
+        return owner.getNScreenPageModel();
+    }
+
+    public NScreenItem addItem(NScreenModel model) {
+        int count = items.size();
+        // FIXME : contant -> margin is 1
+        int h = 0;
+        if (count > 0) {
+            h = height * (count - 1) + ITEM_MARGIN;
+        }
+        FormData data = new FormData();
+        data.left = new FormAttachment(0, 0);
+        data.right = new FormAttachment(100, -0);
+        if (count > 0) {
+            data.top = new FormAttachment(items.get(count - 1), ITEM_MARGIN);
+        } else {
+            if (null != title) {
+                data.top = new FormAttachment(0, GROUP_LABEL_HEIGHT);
+            } else {
+                data.top = new FormAttachment(0, ITEM_MARGIN);
+            }
+        }
+        data.height = height;
+        NScreenItem newNScreen = new NScreenItem(this, SWT.NONE, model);
+        newNScreen.setLayoutData(data);
+        items.add(newNScreen);
+
+        if (!owner.hasSelection()) {
+            newNScreen.setSelection(true);
+        }
+        newNScreen.setMenu(getMenu());
+
+        data = (FormData) getLayoutData();
+        data.height = getGroupHeight();
+        return newNScreen;
+    }
+
+    public NScreenItem addItem(Image img, NScreenModel model) {
+        NScreenItem ns = addItem(model);
+        ns.setImage(img);
+        return ns;
+    }
+
+    public List<NScreenItem> getItems() {
+        return items;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public int getHeight() {
+        return height;
+    }
+
+    public void setHeight(int height) {
+        if (height < MIN_GROUP_ITEM_HEIGHT) {
+            height = MIN_GROUP_ITEM_HEIGHT;
+        }
+        this.height = height;
+    }
+
+    public int getGroupHeight() {
+        int h = 0;
+        if (groupType == NScreenType.COMMON) {
+            h = (height * items.size() + (items.size() - 1) * ITEM_MARGIN) + GROUP_LABEL_HEIGHT;
+        } else {
+            h = (height * items.size() + (items.size() - 1) * ITEM_MARGIN);
+        }
+        return h;
+    }
+
+    public void selected(NScreenItem selectedItem) {
+
+        for (NScreenItem item : items) {
+            if (item.isSelected()) {
+                item.setSelection(false);
+            }
+        }
+        selectedItem.setSelection(true);
+    }
+
+    public boolean hasSelection() {
+        for (NScreenItem ns : items) {
+            if (ns.isSelected()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void clearSelection() {
+        for (NScreenItem ns : items) {
+            if (ns.isSelected()) {
+                ns.setSelection(false);
+            }
+        }
+    }
+
+    public boolean setDefaultSelection() {
+        if (items.size() == 0) {
+            return false;
+        }
+        items.get(0).setSelection(true);
+        return true;
+    }
+
+    public void gotSelection() {
+        owner.checkSelection(groupType);
+    }
+
+    public NScreenType getType() {
+        return groupType;
+    }
+
+    public NScreenBaseComposite getOwner() {
+        return owner;
+    }
+
+    public void setOwner(NScreenBaseComposite owner) {
+        this.owner = owner;
+    }
+
+    public List<NScreenItem> getLinkedItems(NScreenItem item) {
+        NScreenItem root = item;
+        if (!item.isRoot()) {
+            root = item.getReference();
+        }
+
+        List<NScreenItem> linked = root.getLinkedList();
+        int size = linked.size() + 1;
+        int index = 100;
+        NScreenItem childItem = null;
+        for (NScreenItem ni : linked) {
+            int linkIndex = getItems().indexOf(ni);
+            if (linkIndex < index) {
+                index = linkIndex;
+                childItem = ni;
+            }
+        }
+
+        int firstIndex = -1;
+        if (getItems().indexOf(root) > getItems().indexOf(childItem)) {
+            firstIndex = getItems().indexOf(childItem);
+        } else {
+            firstIndex = getItems().indexOf(root);
+        }
+
+        List<NScreenItem> retList = new ArrayList<NScreenItem>();
+        for (int i = firstIndex; i < firstIndex + size; i++) {
+            retList.add(getItems().get(i));
+        }
+
+        return retList;
+    }
+
+    public void changeOrder(NScreenItem prev, List<NScreenItem> source, List<NScreenItem> target,
+                            NScreenItem after) {
+        NScreenItem sourceFirst = source.get(0);
+        NScreenItem sourceLast = source.get(source.size() - 1);
+        NScreenItem targetFirst = target.get(0);
+        NScreenItem targetLast = target.get(target.size() - 1);
+
+        FormData data = null;
+
+        data = (FormData) sourceFirst.getLayoutData();
+        data.top = new FormAttachment(targetLast, NScreenGroup.ITEM_MARGIN);
+
+        if (after != null) {
+            data = (FormData) after.getLayoutData();
+            data.top = new FormAttachment(sourceLast, NScreenGroup.ITEM_MARGIN);
+        }
+
+        data = (FormData) targetFirst.getLayoutData();
+        if (null != prev) {
+            data.top = new FormAttachment(prev, NScreenGroup.ITEM_MARGIN);
+        } else {
+            data.top = new FormAttachment(0, NScreenGroup.GROUP_LABEL_HEIGHT);
+        }
+        layout();
+    }
+
+    public void changeItemIndex(List<NScreenItem> source, List<NScreenItem> target) {
+        int sourceFirstIndex = getItems().indexOf(source.get(0));
+        int sourceSize = source.size();
+        int targetSize = target.size();
+
+        for (int i = sourceFirstIndex, k = 0; i < sourceFirstIndex + targetSize && k < targetSize; i++, k++) {
+            getItems().set(i, target.get(k));
+        }
+
+        for (int i = sourceFirstIndex + targetSize, k = 0; k < sourceSize; i++, k++) {
+            getItems().set(i, source.get(k));
+        }
+    }
+
+    public void changeModelIndex(List<NScreenItem> source, List<NScreenItem> target) {
+        List<NScreenModel> models =
+                getNScreenPageModel().getAppManager().getNScreenModelManger().getNScreenModels();
+
+        int sourceFirstIndex = models.indexOf(source.get(0).getModel());
+        int sourceSize = source.size();
+        int targetSize = target.size();
+
+        for (int i = sourceFirstIndex, k = 0; i < sourceFirstIndex + targetSize && k < targetSize; i++, k++) {
+            models.set(i, target.get(k).getModel());
+        }
+
+        for (int i = sourceFirstIndex + targetSize, k = 0; k < sourceSize; i++, k++) {
+            models.set(i, source.get(k).getModel());
+        }
+    }
+
+    public NScreenItem getSelectedItem() {
+        for (NScreenItem item : items) {
+            if (item.isSelected()) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public void createLinkTree() {
+        String pageId = owner.getNScreenPageModel().getPageData().getName();
+        for (int i = 0; i < items.size(); i++) {
+            NScreenItem item = items.get(i);
+            int dir = item.getModel().getLink(pageId);
+
+            if (dir != NScreenModel.NONE) {
+                item.setLink(dir);
+            }
+        }
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenItem.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenItem.java
new file mode 100644 (file)
index 0000000..dc05de0
--- /dev/null
@@ -0,0 +1,476 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.tizen.webuibuilder.animator.ui.views.timeline.common.ColorResource;
+import org.tizen.webuibuilder.model.css.CssFile;
+import org.tizen.webuibuilder.model.nscreen.Device;
+import org.tizen.webuibuilder.model.nscreen.DeviceManger;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.NScreenType;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenDisableCommand;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenEnableCommand;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenLinkCutCommand;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenLinkDownCommand;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenLinkUpCommand;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenMoveDownCommand;
+import org.tizen.webuibuilder.ui.views.nscreen.command.NScreenMoveUpCommand;
+
+
+public class NScreenItem extends Composite {
+    public static final int STATE_NORMAL = 0;
+    public static final int STATE_HOVER = 1;
+    public static final int STATE_PUSH = 2;
+
+    public static final int MENU_ENABLE = 0;
+    public static final int MENU_DISABLE = 1;
+    // public static final int SEPARATOR = 2;
+    public static final int MENU_MOVE_UP = 3;
+    public static final int MENU_MOVE_DOWN = 4;
+    // public static final int SEPARATOR = 5;
+    public static final int MENU_LINK_CUT = 6;
+    public static final int MENU_LINK_UP = 7;
+    public static final int MENU_LINK_DOWN = 8;
+
+    public static final Color BG_COLOR = ColorResource.WHITE;
+
+    private int state = STATE_NORMAL;
+    private Image thumb = null;
+    private NScreenGroup parent = null;
+    private Canvas canvas = null;
+    private NScreenModel model = null;
+
+    private float scale = 0f;
+    private String lastResolution = null;
+
+    // ui only data
+    private NScreenItem reference = null;
+    private List<NScreenItem> linked = new ArrayList<NScreenItem>();
+
+    private boolean selected = false;
+
+    private INScreenDrawRenderer renderer = new NScreenSimpleRenderer();
+
+    private Listener keyListener = new Listener() {
+
+        @Override
+        public void handleEvent(Event event) {
+            if (parent.getType() == NScreenType.RESOLUTION) {
+                if (event.keyCode == SWT.ARROW_UP) {
+                    moveUpAction();
+                } else if (event.keyCode == SWT.ARROW_DOWN) {
+                    moveDownAction();
+                }
+            }
+        }
+    };
+    private Listener mouseListener = new Listener() {
+
+        @Override
+        public void handleEvent(Event event) {
+            if (event.type == SWT.MouseEnter) {
+                state = STATE_HOVER;
+            } else if (event.type == SWT.MouseExit) {
+                state = STATE_NORMAL;
+            } else if (event.type == SWT.MouseDown) {
+                state = STATE_PUSH;
+                setMenuState();
+                // parent.getOwner().setFocusToSelectedItem();
+            }
+
+            else if (event.type == SWT.MouseUp) {
+                state = STATE_HOVER;
+                if (event.stateMask != SWT.BUTTON2) {
+                    Rectangle rect = getClientArea();
+                    if (rect.contains(event.x, event.y)) {
+                        clicked();
+                    }
+                }
+            }
+            canvas.redraw();
+        }
+    };
+
+    private String getPageId() {
+        return parent.getNScreenPageModel().getPageData().getName();
+    }
+
+    private void setMenuState() {
+        Menu menu = getMenu();
+        menu.setData("caller", this);
+        for (MenuItem menuItem : menu.getItems()) {
+            menuItem.setEnabled(false);
+        }
+
+        if (model.getType() != NScreenType.COMMON) {
+            if (!model.isEnablePage(getPageId())) {
+                menu.getItem(MENU_ENABLE).setEnabled(true);
+            } else {
+                menu.getItem(MENU_DISABLE).setEnabled(true);
+
+                List<NScreenItem> items = parent.getItems();
+                int size = items.size();
+                int index = items.indexOf(this);
+
+                if (model.getType() != NScreenType.ORIENTATION) {
+                    if (model.getLink(getPageId()) != NScreenModel.NONE) {
+                        menu.getItem(MENU_LINK_CUT).setEnabled(true);
+                    } else {
+                        if (index > 0 && items.get(index - 1).isItemEnabled() && !isRoot()) {
+                            menu.getItem(MENU_LINK_UP).setEnabled(true);
+                        }
+                        if (index < size - 1 && items.get(index + 1).isItemEnabled() && !isRoot()) {
+                            menu.getItem(MENU_LINK_DOWN).setEnabled(true);
+                        }
+                    }
+
+                    if (model.getType() != NScreenType.PIXELRATIO) {
+                        if (index > 0 && !model.isLinked(getPageId()) && !isRoot()) {
+                            menu.getItem(MENU_MOVE_UP).setEnabled(true);
+                        }
+                        if (index < size - 1 && !model.isLinked(getPageId()) && !isRoot()) {
+                            menu.getItem(MENU_MOVE_DOWN).setEnabled(true);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public NScreenItem(Composite parent, int style, NScreenModel m) {
+        super(parent, SWT.TRANSPARENT);
+        this.parent = (NScreenGroup) parent;
+        this.model = m;
+        setLayout(new FillLayout());
+        this.setBackground(BG_COLOR);
+        canvas = new Canvas(this, SWT.TRANSPARENT);
+
+//        if (model.getType() != NScreenType.COMMON) {
+//            if (model.isEnablePage(getPageId())) {
+//                setSelection(true);
+//            }
+//        }
+
+        addMouseListener();
+        canvas.addListener(SWT.KeyUp, keyListener);
+        canvas.addPaintListener(new PaintListener() {
+
+            @Override
+            public void paintControl(PaintEvent e) {
+                renderer.draw(e.gc, canvas, state, isSelected(), isItemEnabled(), thumb, model,
+                              getPageId());
+            }
+        });
+    }
+
+    private void addMouseListener() {
+        canvas.addListener(SWT.MouseDown, mouseListener);
+        canvas.addListener(SWT.MouseUp, mouseListener);
+        canvas.addListener(SWT.MouseEnter, mouseListener);
+        canvas.addListener(SWT.MouseExit, mouseListener);
+    }
+
+    public void clicked() {
+        if (!isSelected()) {
+            parent.selected(this);
+            setFocus();
+        }
+
+        parent.getNScreenPageModel().getPageDesigner().setShowingSize(filterScreen(), this);
+    }
+
+    private List<Device> filterScreen() {
+        List<Device> devices = DeviceManger.getDeviceManager().getDevices();
+
+        NScreenType type = model.getType();
+
+        List<Device> selected = new ArrayList<Device>();
+        if (type == NScreenType.COMMON) {
+            selected.addAll(devices);
+        } else if (type == NScreenType.ORIENTATION) {
+            for (Device device : devices) {
+                if (device.getOrientation() == null
+                        || device.getOrientation().toString()
+                                .equals(model.getOrientation().toString())) {
+                    selected.add(device);
+                }
+            }
+        } else if (type == NScreenType.PIXELRATIO) {
+            for (Device device : devices) {
+                if (device.getDevicePixelRatio() == model.getDevicePixelRatio()) {
+                    selected.add(device);
+                }
+            }
+        } else if (type == NScreenType.RESOLUTION) {
+            for (Device device : devices) {
+                if (model.getDeviceWidth() == device.getDeviceWidth()
+                        && model.getDeviceHeight() == device.getDeviceHeight()) {
+                    selected.add(device);
+                    break;
+                }
+            }
+        } else {
+            // custom
+        }
+        return selected;
+    }
+
+    public void setImage(Image img) {
+        thumb = img;
+    }
+
+    public void setSelection(boolean isSelected) {
+        if (selected == isSelected) {
+            return;
+        }
+        selected = isSelected;
+
+        if (isSelected) {
+            ((NScreenGroup) getParent()).gotSelection();
+        }
+
+        canvas.redraw();
+    }
+
+    public boolean isSelected() {
+        return selected;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public boolean isItemEnabled() {
+        return model.isEnablePage(getPageId());
+    }
+
+    public void setItemEnabled(boolean enabled) {
+        if (enabled) { // enable
+            model.addEnablePage(getPageId());
+            state = STATE_NORMAL;
+        } else { // disable
+            model.addDisablePage(getPageId());
+        }
+    }
+
+    @Override
+    public void setMenu(Menu menu) {
+        super.setMenu(menu);
+        canvas.setMenu(menu);
+    }
+
+    public NScreenModel getModel() {
+        return model;
+    }
+
+    public void setModel(NScreenModel model) {
+        this.model = model;
+    }
+
+    public String getFileName() {
+        if (model.isLinked(getPageId())) {
+            return reference.getFileName();
+        }
+        String pageId = parent.getNScreenPageModel().getPageData().getName();
+        String screenName = model.getName();
+        StringBuffer strBuffer = new StringBuffer();
+        strBuffer.append(pageId).append("_").append(screenName).append(".css");
+        return strBuffer.toString();
+    }
+
+    public void enableAction() {
+        Command command = new NScreenEnableCommand(this);
+        parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+    }
+
+    public void disableAction() {
+        Command command = new NScreenDisableCommand(this);
+        parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+    }
+
+    public void moveUpAction() {
+        int index = parent.getItems().indexOf(this);
+        if (index != 0 && isItemEnabled() && !isLinked() && !isRoot()) {
+            Command command = new NScreenMoveUpCommand(this);
+            parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+        }
+    }
+
+    public void moveDownAction() {
+        int index = parent.getItems().indexOf(this);
+        if (index < parent.getItems().size() - 1 && isItemEnabled() && !isLinked() && !isRoot()) {
+            Command command = new NScreenMoveDownCommand(this);
+            parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+        }
+    }
+
+    public void LinkCutAction() {
+        Command command = new NScreenLinkCutCommand(this);
+        parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+    }
+
+    public void LinkUpAction() {
+        Command command = new NScreenLinkUpCommand(this);
+        parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+    }
+
+    public void LinkDownAction() {
+        Command command = new NScreenLinkDownCommand(this);
+        parent.getNScreenPageModel().getPageDesigner().getCommandStack().execute(command);
+    }
+
+    public void redrawItem() {
+        canvas.redraw();
+    }
+
+    public boolean setFocus() {
+        return canvas.setFocus();
+    }
+
+    public List<NScreenItem> getLinkedList() {
+        return linked;
+    }
+
+    public <T> boolean addList(List<T> list, T item) {
+        int index = list.indexOf(item);
+        if (index < 0) {
+            list.add(item);
+            return true;
+        }
+        return false;
+    }
+
+    public int setLink(int direction) {
+        if (direction == SWT.UP) {
+            int index = parent.getItems().indexOf(this);
+            reference = parent.getItems().get(index - 1);
+            if (reference.isLinked()) {
+                reference = reference.getReference();
+            }
+            model.addLink(getPageId(), NScreenModel.UP);
+            addList(reference.getLinkedList(), this);
+        } else if (direction == SWT.DOWN) {
+            int index = parent.getItems().indexOf(this);
+            reference = parent.getItems().get(index + 1);
+            if (reference.isLinked()) {
+                reference = reference.getReference();
+            }
+            model.addLink(getPageId(), NScreenModel.DOWN);
+            addList(reference.getLinkedList(), this);
+        } else if (direction == SWT.NONE) {
+            direction = model.getLink(getPageId());
+            reference.getLinkedList().remove(this);
+            model.addLink(getPageId(), NScreenModel.NONE);
+            reference.redrawItem();
+            reference = null;
+        }
+
+        if (reference != null) {
+            reference.redrawItem();
+        }
+        return direction;
+    }
+
+    public boolean isLinked() {
+        if (model.getLink(getPageId()) == NScreenModel.NONE) {
+            return false;
+        }
+        return true;
+    }
+
+    public NScreenItem getReference() {
+        return reference;
+    }
+
+    public void setReference(NScreenItem ref) {
+        reference = ref;
+    }
+
+    public void deleteFile() {
+        String cssFolderPath = parent.getNScreenPageModel().getAppManager().getCssFolder();
+        String filePath = cssFolderPath + IPath.SEPARATOR + getFileName();
+        File newCSSFile = new File(filePath);
+
+        if (newCSSFile.exists()) {
+            newCSSFile.delete();
+        }
+
+        parent.getNScreenPageModel().getPageData().removeCssFileByPath(filePath);
+    }
+
+    public void copyFile(NScreenItem source) {
+        String sourceFileName = source.getFileName();
+        String targetFileName = getFileName();
+
+        String filePath = parent.getNScreenPageModel().getAppManager().getCssFolder();
+//        CssFile sourceCssFile = new CssFile(filePath + IPath.SEPARATOR + sourceFileName);
+        File sourceFile = new File(filePath + IPath.SEPARATOR + sourceFileName);
+        File targetFile = new File(filePath + IPath.SEPARATOR + targetFileName);
+        parent.getNScreenPageModel().getPageData().removeCssFileByPath(filePath + IPath.SEPARATOR+sourceFileName);
+
+        sourceFile.renameTo(targetFile);
+        CssFile targetCssFile = new CssFile(filePath + IPath.SEPARATOR + sourceFileName);
+        parent.getNScreenPageModel().getPageData().addCssFile(targetCssFile);
+    }
+
+    public void createFile() {
+        String filePath = parent.getNScreenPageModel().getAppManager().getCssFolder();
+        CssFile cssFile = new CssFile(filePath + IPath.SEPARATOR + getFileName());
+        File newCSSFile = new File(filePath + IPath.SEPARATOR + getFileName());
+
+        try {
+            if (!newCSSFile.exists()) {
+                File dir = newCSSFile.getParentFile();
+                dir.mkdirs();
+                newCSSFile.createNewFile();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        parent.getNScreenPageModel().getPageData().addCssFile(cssFile);
+    }
+
+    public boolean isRoot() {
+        if (!isLinked() && linked.size() > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    public float getScale() {
+        return scale;
+    }
+
+    public void setScale(float scale) {
+        this.scale = scale;
+    }
+
+    public String getLastResolution() {
+        return lastResolution;
+    }
+
+    public void setLastResolution(String last) {
+        this.lastResolution = last;
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenItemFloatRenderer.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenItemFloatRenderer.java
new file mode 100644 (file)
index 0000000..3cd2fe8
--- /dev/null
@@ -0,0 +1,149 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import static org.tizen.webuibuilder.ui.views.nscreen.NScreenItem.STATE_HOVER;
+import static org.tizen.webuibuilder.ui.views.nscreen.NScreenItem.STATE_NORMAL;
+import static org.tizen.webuibuilder.ui.views.nscreen.NScreenItem.STATE_PUSH;
+
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.tizen.webuibuilder.animator.ui.views.timeline.common.ColorResource;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.NScreenType;
+
+
+public class NScreenItemFloatRenderer implements INScreenDrawRenderer {
+    private static int IMAGE_SIZE = 30;
+    private static int X_MARGIN = 4;
+
+    private static int TEXT_MARGIN_X = X_MARGIN + IMAGE_SIZE + 30;
+
+    @Override
+    public void draw(GC gc, Canvas canvas, int state, boolean isSelected, boolean enabled,
+                     Image thumb, NScreenModel model, String pageId) {
+//        NScreenItem item = (NScreenItem) canvas.getParent();
+//        Rectangle rect = canvas.getClientArea();
+//
+//        int canvasX = rect.x;
+//        int canvasY = rect.y;
+//        int canvasW = rect.width;
+//        int canvasH = rect.height;
+//
+//        gc.setBackground(ColorResource.BLACK);
+//        gc.fillRectangle(canvasX + 6, canvasY + 6, canvasW - 8, canvasH - 8);
+//        // e.gc.fillRoundRectangle(x + 6, y + 6, w - 8, h - 8, 10, 10);
+//
+//        Rectangle drawRect = checkState(new Rectangle(canvasX, canvasY, canvasW, canvasH), state);
+//
+//        if (isSelected) {
+//            gc.setBackground(ColorResource.BOUNCE_IN_UP);
+//        } else {
+//            gc.setBackground(ColorResource.WHITE);
+//        }
+//
+//        Rectangle linkRect =
+//                new Rectangle(drawRect.x + drawRect.width - 20, drawRect.y, 20, drawRect.height);
+//
+//        gc.fillRectangle(drawRect);
+//        // e.gc.fillRoundRectangle(drawRect.x, drawRect.y, drawRect.width, drawRect.height,
+//        // 10, 10);
+//
+//        if (state == STATE_DISABLED) {
+//            gc.setBackground(ColorResource.GRAY);
+//        } else if (model.getType() != NScreenType.COMMON) {
+//            gc.setBackground(ColorResource.NAVY);
+//
+//            int direction = model.getLink(pageId);
+//            int x = linkRect.x;
+//            int y = linkRect.y;
+//            int w = linkRect.width;
+//            int h = linkRect.height;
+//
+//            if (direction == NScreenModel.UP) {
+//                gc.fillPolygon(new int[] { x, y + 10, x + w / 2, y, x + w, y + 10, x + w, y + h,
+//                        x + w / 2, y + h - 10, x, y + h });
+//            } else if (direction == NScreenModel.DOWN) {
+//                gc.fillPolygon(new int[] { x, y, x + w / 2, y + 10, x + w, y, x + w, y, x + w,
+//                        y + h - 10, x + w / 2, y + h, x, y + h - 10 });
+//            } else if (item.isRoot()) {
+//                gc.fillRectangle(linkRect);
+//            }
+//
+//        }
+//
+//        // e.gc.drawRoundRectangle(drawRect.x, drawRect.y, drawRect.width, drawRect.height,
+//        // 10, 10);
+//        if (state == STATE_DISABLED) {
+//            gc.setForeground(ColorResource.GRAY);
+//        } else {
+//            gc.setForeground(ColorResource.BLACK);
+//        }
+//        gc.drawRectangle(drawRect);
+//
+//        // e.gc.setForeground(bgColors[state * 2]);
+//        // e.gc.setBackground(bgColors[state * 2 + 1]);
+//        //
+//        // e.gc.fillGradientRectangle(rect.x, rect.y, rect.width, rect.height, true);
+//        //
+//        // e.gc.setForeground(fgColors[state]);
+//        //
+//        int targetY = (drawRect.height - IMAGE_SIZE) / 2;
+//        if (thumb != null) {
+//            Rectangle imgRect = thumb.getBounds();
+//            gc.drawImage(thumb, imgRect.x, imgRect.y, imgRect.width, imgRect.height, drawRect.x
+//                    + X_MARGIN, drawRect.y + targetY, IMAGE_SIZE, IMAGE_SIZE);
+//        } else {
+//            gc.drawRectangle(drawRect.x + X_MARGIN, drawRect.y + targetY, IMAGE_SIZE, IMAGE_SIZE);
+//        }
+//
+//        // drawText
+//        if (isSelected) {
+//            gc.setBackground(ColorResource.BOUNCE_IN_UP);
+//        } else {
+//            gc.setBackground(ColorResource.WHITE);
+//        }
+//        if (state == STATE_DISABLED) {
+//            gc.setForeground(ColorResource.GRAY);
+//        } else {
+//            gc.setForeground(ColorResource.BLACK);
+//        }
+//        Font font = gc.getFont();
+//        gc.setFont(FontUtil.FLOATING);
+//        gc.drawText(model.getName(), drawRect.x + TEXT_MARGIN_X, targetY);
+//        gc.setFont(font);
+//    }
+//
+//    private Rectangle checkState(Rectangle rect, int state) {
+//
+//        int offset = 0;
+//        switch (state) {
+//            case STATE_NORMAL:
+//                offset = 2;
+//                break;
+//            case STATE_HOVER:
+//                offset = 0;
+//                break;
+//            case STATE_PUSH:
+//                offset = 5;
+//                break;
+//            case STATE_SELECTED:
+//                offset = 3;
+//                break;
+//            case STATE_DISABLED:
+//                offset = 2;
+//                break;
+//            default:
+//                break;
+//        }
+//        rect.width = rect.width - 8;
+//        rect.height = rect.height - 8;
+//        rect.x = rect.x + offset;
+//        rect.y = rect.y + offset;
+//        return rect;
+    }
+
+}
index 914a05f..2095197 100644 (file)
@@ -30,6 +30,7 @@ import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IActionBars;
@@ -53,7 +54,7 @@ public class NScreenPage extends Page {
     private Action mActionHDL;
     private Action mActionCustom;
     private NScreenList mNScreenList;
-    private Composite mParentComposite;
+    private NScreenBaseComposite mParentComposite;
 
     class NScrrenAction extends Action {
         private String mTitle;
@@ -166,10 +167,10 @@ public class NScreenPage extends Page {
      */
     public void addNewNscreen(String title, int width, int height, String cssFileName,
                               boolean isSelected) {
-//        String filePath = mNScreenPageModel.getAppManager().getCssFolder();
-//
-//        File newCSSFile = new File(filePath + IPath.SEPARATOR + cssFileName);
-//        String cssFileFullPath = newCSSFile.getAbsolutePath();
+        // String filePath = mNScreenPageModel.getAppManager().getCssFolder();
+        //
+        // File newCSSFile = new File(filePath + IPath.SEPARATOR + cssFileName);
+        // String cssFileFullPath = newCSSFile.getAbsolutePath();
 
         NScreenModel model = new NScreenModel(title, NScreenType.CUSTOM);
         model.setDeviceWidth(width);
@@ -177,8 +178,8 @@ public class NScreenPage extends Page {
         model.setFileName(cssFileName);
 
         Command command =
-                new NScreenAddCommand(mNScreenPageModel.getAppManager().getNScreenModelManger().getNScreenModels(), model,
-                                      mNScreenList);
+                new NScreenAddCommand(mNScreenPageModel.getAppManager().getNScreenModelManger()
+                        .getNScreenModels(), model, mNScreenList);
         mNScreenPageModel.getPageDesigner().getCommandStack().execute(command);
     }
 
@@ -193,7 +194,8 @@ public class NScreenPage extends Page {
     }
 
     public void deleteNScreen(NScreenListItem item) {
-        List<NScreenModel> list = mNScreenPageModel.getAppManager().getNScreenModelManger().getNScreenModels();
+        List<NScreenModel> list =
+                mNScreenPageModel.getAppManager().getNScreenModelManger().getNScreenModels();
         if (list.get(0) == item.getModel()) {
             showInfomationDialog("can not delete the default screen.");
             return;
@@ -238,7 +240,7 @@ public class NScreenPage extends Page {
      * @see org.eclipse.ui.part.Page#dispose()
      */
     public void dispose() {
-        mNScreenList.removeAll();
+        // mNScreenList.removeAll();
         super.dispose();
     }
 
@@ -249,20 +251,41 @@ public class NScreenPage extends Page {
      * @see org.eclipse.ui.part.Page#createControl(org.eclipse.swt.widgets.Composite)
      */
     public void createControl(Composite parent) {
-        mParentComposite = parent;
-
-        makeActions();
-        contributeToActionBars();
-
-        mNScreenList = new NScreenList(parent, mNScreenPageModel);
-
-        List<NScreenModel> list = mNScreenPageModel.getAppManager().getNScreenModelManger().getNScreenModels();
+        mParentComposite = new NScreenBaseComposite(parent, SWT.NONE, mNScreenPageModel);
+        // addSample();
+        List<NScreenModel> models =
+                mNScreenPageModel.getAppManager().getNScreenModelManger().getNScreenModels();
+        List<NScreenGroup> groups = mParentComposite.getNScreenGroups();
+        NScreenGroup group = null;
+
+        for (NScreenModel model : models) {
+            if (groups.size() == 0) {
+                group =
+                        mParentComposite.createNewGroup(model.getType(), mNScreenPageModel
+                                .getPageData().getName());
+                group.setHeight(50);
+                group.addItem(model);
+            } else {
+                NScreenGroup selectedGroup = null;
+                for (NScreenGroup g : groups) {
+                    if (g.getType() == model.getType()) {
+                        selectedGroup = g;
+                        break;
+                    }
+                }
+                if (selectedGroup == null) {
+                    group = mParentComposite.createNewGroup(model.getType(), null);
+                    group.setHeight(50);
+                    group.addItem(model);
+                } else {
+                    selectedGroup.addItem(model);
+                }
+            }
+        }
 
-        for (int i = 0, size = list.size(); i < size; i++) {
-            NScreenModel nsModel = list.get(i);
-            mNScreenList.addItem(nsModel, i == 0 ? true : false);
+        for (NScreenGroup g : mParentComposite.getNScreenGroups()) {
+            g.createLinkTree();
         }
-        mNScreenList.layout();
     }
 
     @Override
@@ -272,7 +295,8 @@ public class NScreenPage extends Page {
      * @see org.eclipse.ui.part.Page#getControl()
      */
     public Control getControl() {
-        return mNScreenList.getControl();
+        return mParentComposite;
+        // return mNScreenList.getControl();
     }
 
     @Override
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenSimpleRenderer.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenSimpleRenderer.java
new file mode 100644 (file)
index 0000000..849d74e
--- /dev/null
@@ -0,0 +1,249 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import static org.tizen.webuibuilder.ui.views.nscreen.NScreenItem.STATE_HOVER;
+import static org.tizen.webuibuilder.ui.views.nscreen.NScreenItem.STATE_NORMAL;
+import static org.tizen.webuibuilder.ui.views.nscreen.NScreenItem.STATE_PUSH;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.tizen.webuibuilder.animator.ui.views.timeline.common.ColorResource;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.NScreenType;
+
+
+public class NScreenSimpleRenderer implements INScreenDrawRenderer {
+    private static int X_MARGIN = 10;
+
+    @Override
+    public void draw(GC gc, Canvas canvas, int state, boolean isSelected, boolean isEnabled,
+                     Image thumb, NScreenModel model, String pageId) {
+        NScreenItem item = (NScreenItem) canvas.getParent();
+        NScreenGroup group = (NScreenGroup) item.getParent();
+        int size = group.getItems().size();
+        int index = group.getItems().indexOf(item);
+        Rectangle rect = canvas.getClientArea();
+
+        gc.setBackground(checkBackgroundColor(canvas, state, isSelected, isEnabled));
+        gc.fillRectangle(rect);
+
+        gc.setForeground(ColorResource.BLACK);
+        if (index == 0 || index == size - 1) {
+            if (index == size - 1) {
+                gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height - 1);
+                gc.drawRectangle(rect.x + 1, rect.y - 1, rect.width - 3, rect.height - 1);
+
+            }
+            if (index == 0) {
+                gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height);
+                gc.drawRectangle(rect.x + 1, rect.y + 1, rect.width - 3, rect.height + 4);
+            }
+        } else {
+            gc.drawRectangle(rect.x, rect.y, rect.width - 1, rect.height);
+            gc.drawRectangle(rect.x + 1, rect.y, rect.width - 3, rect.height);
+        }
+
+        // draw image
+        Image img = NScreenUtil.getScreenImage(model);
+        if (img != null) {
+            Rectangle imgRect = img.getBounds();
+            int yPosition = rect.y + (rect.height - imgRect.height) / 2;
+            gc.drawImage(img, rect.x + X_MARGIN, yPosition);
+        }
+        Font font = gc.getFont();
+        gc.setForeground(checkForegroundColor(canvas, state, isSelected, isEnabled));
+        setContents(canvas, model, gc);
+        gc.setFont(font);
+    }
+
+    private Color checkBackgroundColor(Canvas canvas, int state, boolean selected, boolean enabled) {
+        Color color = null;
+        switch (state) {
+            case STATE_NORMAL:
+                if (selected) {
+                    if (enabled) {
+                        // selected - enable
+                        color = ColorResource.NSE_BG;
+                    } else {
+                        // selected - disable
+                        color = ColorResource.NSD_BG;
+                    }
+                } else {
+                    if (enabled) {
+                        // normal - enable
+                        color = ColorResource.NNE_BG;
+                    } else {
+                        // normal - disable
+                        color = ColorResource.NND_BG;
+                    }
+                }
+                break;
+            case STATE_HOVER:
+                if (selected) {
+                    if (enabled) {
+                        // hover selected enabled
+                        color = ColorResource.HSE_BG;
+                    } else {
+                        // hover selected disabled
+                        color = ColorResource.HSD_BG;
+                    }
+                } else {
+                    if (enabled) {
+                        // hover normal enabled
+                        color = ColorResource.HNE_BG;
+                    } else {
+                        // hover normal disabled
+                        color = ColorResource.HND_BG;
+                    }
+                }
+                break;
+            case STATE_PUSH:
+                if (selected) {
+                    if (enabled) {
+                        // pushed selected enabled
+                        color = ColorResource.PSE_BG;
+                    } else {
+                        // pushed selected disabled
+                        color = ColorResource.PSD_BG;
+                    }
+                } else {
+                    if (enabled) {
+                        // pushed normal enabled
+                        color = ColorResource.PNE_BG;
+                    } else {
+                        // pushed normal disabled
+                        color = ColorResource.PND_BG;
+                    }
+                }
+                break;
+            default:
+                break;
+        }
+        return color;
+    }
+
+    private Color checkForegroundColor(Canvas canvas, int state, boolean selected, boolean enabled) {
+        Color color = null;
+        switch (state) {
+            case STATE_NORMAL:
+                if (selected) {
+                    if (enabled) {
+                        // selected - enable
+                        color = ColorResource.NSE_FG;
+                    } else {
+                        // selected - disable
+                        color = ColorResource.NSD_FG;
+                    }
+                } else {
+                    if (enabled) {
+                        // normal - enable
+                        color = ColorResource.NNE_FG;
+                    } else {
+                        // normal - disable
+                        color = ColorResource.NND_FG;
+                    }
+                }
+                break;
+            case STATE_HOVER:
+                if (selected) {
+                    if (enabled) {
+                        // hover selected enabled
+                        color = ColorResource.HSE_FG;
+                    } else {
+                        // hover selected disabled
+                        color = ColorResource.HSD_FG;
+                    }
+                } else {
+                    if (enabled) {
+                        // hover normal enabled
+                        color = ColorResource.HNE_FG;
+                    } else {
+                        // hover normal disabled
+                        color = ColorResource.HND_FG;
+                    }
+                }
+                break;
+            case STATE_PUSH:
+                if (selected) {
+                    if (enabled) {
+                        // pushed selected enabled
+                        color = ColorResource.PSE_FG;
+                    } else {
+                        // pushed selected disabled
+                        color = ColorResource.PSD_FG;
+                    }
+                } else {
+                    if (enabled) {
+                        // pushed normal enabled
+                        color = ColorResource.PNE_FG;
+                    } else {
+                        // pushed normal disabled
+                        color = ColorResource.PND_FG;
+                    }
+                }
+                break;
+            default:
+                break;
+        }
+        return color;
+    }
+
+    private Font getGroupFont(NScreenModel model) {
+        Font font = null;
+        NScreenType type = model.getType();
+        if (type == NScreenType.COMMON) {
+            font = FontUtil.COMMON;
+        } else if (type == NScreenType.ORIENTATION) {
+            font = FontUtil.ORIENTATION;
+        } else if (type == NScreenType.PIXELRATIO) {
+            font = FontUtil.PIXELRATIO;
+        } else if (type == NScreenType.RESOLUTION) {
+            font = FontUtil.DEVICE;
+        } else {
+            font = FontUtil.DEVICE;
+        }
+
+        return font;
+    }
+
+    private void setContents(Canvas canvas, NScreenModel model, GC gc) {
+        // int targetY = (canvas.getClientArea().height - IMAGE_SIZE) / 2;
+        Rectangle rect = canvas.getClientArea();
+        NScreenType type = model.getType();
+        if (type == NScreenType.COMMON || type == NScreenType.ORIENTATION
+                || type == NScreenType.PIXELRATIO) {
+            gc.setFont(getGroupFont(model));
+            String content = model.getName();
+            Point textWH = FontUtil.getTextArea(content, gc);
+            int x = rect.x + (rect.width - textWH.x) / 2;
+            int y = rect.y + (rect.height - textWH.y) / 2;
+            gc.drawText(content, x, y, true);
+        } else if (type == NScreenType.RESOLUTION) {
+            gc.setFont(getGroupFont(model));
+            String content1 = model.getName();
+            // String content2 =
+            // NScreenUtil.getResolutionText(model.getDeviceWidth(), model.getDeviceHeight(),
+            // false)
+            // + "  "
+            // + NScreenUtil.getRatioText(model.getDeviceWidth(),
+            // model.getDeviceHeight(), true);
+            Point content1WH = FontUtil.getTextArea(content1, gc);
+            // Point content2WH = FontUtil.getTextArea(content2, gc);
+            int x1 = rect.x + (rect.width - content1WH.x) / 2;
+            // int x2 = rect.x + (rect.width - content2WH.x) / 2;
+            // int y1 = rect.y + (rect.height - content1WH.y - content2WH.y) / 2;
+            int y1 = rect.y + (rect.height - content1WH.y) / 2;
+            // int y2 = y1 + content1WH.y;
+            gc.drawText(content1, x1, y1, true);
+            // gc.drawText(content2, x2, y2, true);
+        } else {
+
+        }
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenUtil.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/NScreenUtil.java
new file mode 100644 (file)
index 0000000..ff2b474
--- /dev/null
@@ -0,0 +1,193 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import org.eclipse.swt.graphics.Image;
+import org.tizen.webuibuilder.BuilderConstants;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.NScreenType;
+import org.tizen.webuibuilder.model.nscreen.NScreenModel.Orientation;
+import org.tizen.webuibuilder.utility.ResourceManager;
+
+
+public class NScreenUtil {
+    public static boolean copyFile(String srcPath, String destPath) {
+        boolean success = false;
+        FileInputStream fi = null;
+        FileOutputStream fo = null;
+        try {
+            File src = new File(srcPath);
+            File dest = new File(destPath);
+            fi = new FileInputStream(src);
+            fo = new FileOutputStream(dest);
+            byte[] buffer = new byte[1024];
+            int readCount = 0;
+            while ((readCount = fi.read(buffer)) != -1) {
+                fo.write(buffer, 0, readCount);
+            }
+            success = true;
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            tryClose(fi, fo);
+        }
+        return success;
+    }
+
+    public static void tryClose(final Object... closeables) {
+        if (null == closeables) {
+            return;
+        }
+
+        for (Object obj : closeables) {
+            if (null == obj) {
+                continue;
+            }
+            try {
+                if (obj instanceof Closeable) {
+                    ((Closeable) obj).close();
+                } else if (obj instanceof Socket) {
+                    ((Socket) obj).close();
+                } else if (obj instanceof ServerSocket) {
+                    ((ServerSocket) obj).close();
+                }
+            } catch (final IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static String getResolutionText(int width, int height, boolean brace) {
+        StringBuffer buffer = new StringBuffer();
+        if (brace) {
+            buffer.append("(");
+        }
+        buffer.append(width).append("x").append(height);
+        if (brace) {
+            buffer.append(")");
+        }
+        return buffer.toString();
+    }
+
+    public static int getGCD(int a, int b) {
+        int i, j;
+        int gcd = 0;
+
+        if (a == b) {
+            return a;
+        }
+        j = (a < b) ? a : b;
+
+        for (i = 1; i < j; i++) {
+            if (a % i == 0 && b % i == 0) {
+                gcd = i;
+            }
+        }
+        return gcd;
+    }
+
+    public static int getLCM(int a, int b) {
+        int i, j;
+        int lcm = 0;
+
+        j = (a > b) ? a : b;
+
+        for (i = j;; i++) {
+            if (i % a == 0 && i % b == 0) {
+                lcm = i;
+                break;
+            }
+        }
+        return lcm;
+    }
+
+    public static String getRatioText(int a, int b, boolean brace) {
+        int gcd = getGCD(a, b);
+        int aValue = a / gcd;
+        int bValue = b / gcd;
+
+        StringBuffer buffer = new StringBuffer();
+        if (brace) {
+            buffer.append("(");
+        }
+        buffer.append(Integer.toString(aValue)).append("x").append(Integer.toString(bValue));
+        if (brace) {
+            buffer.append(")");
+        }
+        return buffer.toString();
+    }
+
+    public static Image getScreenImage(NScreenModel model) {
+        String imgName = null;
+        if (model.getType() == NScreenType.COMMON) {
+            imgName = "common.png";
+        } else if (model.getType() == NScreenType.ORIENTATION) {
+            if (model.getOrientation() == Orientation.LANDSCAPE) {
+                imgName = "orientation-landscape.png";
+            } else {
+                imgName = "orientation-portrait.png";
+            }
+        } else if (model.getType() == NScreenType.PIXELRATIO) {
+            if (model.getDevicePixelRatio() == 1.0) {
+                imgName = "pixel-ratio10.png";
+            } else if (model.getDevicePixelRatio() == 1.5) {
+                imgName = "pixel-ratio15.png";
+            } else if (model.getDevicePixelRatio() == 2.0) {
+                imgName = "pixel-ratio20.png";
+            } else if (model.getDevicePixelRatio() == 3.0) {
+                imgName = "pixel-ratio30.png";
+            }
+        } else if (model.getType() == NScreenType.RESOLUTION) {
+            String resolution =
+                    getRatioText(model.getDeviceWidth(), model.getDeviceHeight(), false);
+            if (resolution.equals("1x1")) {
+                imgName = "resoluion-1-1.png";
+            } else if (resolution.equals("2x3")) {
+                imgName = "resoluion-2-3.png";
+            } else if (resolution.equals("3x2")) {
+                imgName = "resoluion-3-2.png";
+            } else if (resolution.equals("3x4")) {
+                imgName = "resoluion-3-4.png";
+            } else if (resolution.equals("3x5")) {
+                imgName = "resoluion-3-5.png";
+            } else if (resolution.equals("4x3")) {
+                imgName = "resoluion-4-3.png";
+            } else if (resolution.equals("4x5")) {
+                imgName = "resoluion-4-5.png";
+            } else if (resolution.equals("5x3")) {
+                imgName = "resoluion-5-3.png";
+            } else if (resolution.equals("5x4")) {
+                imgName = "resoluion-5-4.png";
+            } else if (resolution.equals("9x16")) {
+                imgName = "resoluion-9-16.png";
+            } else if (resolution.equals("5x8") || resolution.equals("39x62")) {
+                imgName = "resoluion-10-16.png";
+            } else if (resolution.equals("16x9")) {
+                imgName = "resoluion-16-9.png";
+            } else if (resolution.equals("8x5") || resolution.equals("62x39")) {
+                imgName = "resoluion-16-10.png";
+            }
+        } else // custom
+        {
+            imgName = model.getImageName();
+        }
+
+        if (null != imgName) {
+            return ResourceManager.getImage(BuilderConstants.ICON_DIR, imgName);
+        }
+        return null;
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenDisableCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenDisableCommand.java
new file mode 100644 (file)
index 0000000..91f15cd
--- /dev/null
@@ -0,0 +1,94 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenGroup;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+
+public class NScreenDisableCommand extends Command {
+    private NScreenItem item = null;
+    private NScreenGroup group = null;
+
+    public NScreenDisableCommand(NScreenItem item) {
+        this.item = item;
+        group = (NScreenGroup) item.getParent();
+    }
+
+    @Override
+    public void execute() {
+        String pageId = group.getNScreenPageModel().getPageData().getName();
+
+        if (item.isLinked() || item.isRoot()) {
+            List<NScreenItem> source = new ArrayList<NScreenItem>();
+            List<NScreenItem> target = new ArrayList<NScreenItem>();
+
+            source.add(item);
+            List<NScreenItem> links = group.getLinkedItems(item);
+            int sourceIndex = links.indexOf(item);
+
+            if (sourceIndex != 0 && sourceIndex != links.size() - 1) {
+
+                for (int i = sourceIndex + 1; i < links.size(); i++) {
+                    target.add(links.get(i));
+                }
+
+                NScreenItem prev = null;
+                NScreenItem after = null;
+
+                int sourceFirstIndex = group.getItems().indexOf(source.get(0));
+                if (sourceFirstIndex != 0) {
+                    prev = group.getItems().get(sourceFirstIndex - 1);
+                }
+
+                int targetLastIndex = group.getItems().indexOf(target.get(target.size() - 1));
+                if (targetLastIndex < group.getItems().size() - 1) {
+                    after = group.getItems().get(targetLastIndex + 1);
+                }
+
+                group.changeOrder(prev, source, target, after);
+                group.changeItemIndex(source, target);
+                group.changeModelIndex(source, target);
+            }
+
+            if (!item.isRoot()) {
+                item.getReference().getLinkedList().remove(item);
+                item.getReference().redrawItem();
+            }
+
+            if (item.isRoot()) {
+                List<NScreenItem> linkeds = item.getLinkedList();
+                NScreenItem newRoot = linkeds.get(0);
+                newRoot.setLink(SWT.NONE);
+                newRoot.copyFile(item);
+                List<NScreenItem> newLinks = new ArrayList<NScreenItem>();
+                newLinks.addAll(linkeds);
+                item.getLinkedList().clear();
+                newRoot.getLinkedList().addAll(newLinks);
+                for (NScreenItem link : newLinks) {
+                    link.setReference(newRoot);
+                }
+                newRoot.redrawItem();
+            }
+        }
+        item.deleteFile();
+        item.setItemEnabled(false);
+        item.getModel().addDisablePage(pageId);
+        item.redrawItem();
+    }
+
+    @Override
+    public void redo() {
+        // execute();
+    }
+
+    @Override
+    public void undo() {
+
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenEnableCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenEnableCommand.java
new file mode 100644 (file)
index 0000000..fb10209
--- /dev/null
@@ -0,0 +1,67 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.gef.commands.Command;
+import org.tizen.webuibuilder.model.css.CssFile;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenGroup;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+
+public class NScreenEnableCommand extends Command {
+
+    private NScreenItem item = null;
+    private NScreenGroup group = null;
+
+    public NScreenEnableCommand(NScreenItem nscreenItem) {
+        item = nscreenItem;
+        group = (NScreenGroup) item.getParent();
+    }
+
+    @Override
+    public void execute() {
+//        String filePath = group.getNScreenPageModel().getAppManager().getCssFolder();
+//        CssFile cssFile = new CssFile(filePath + IPath.SEPARATOR + item.getFileName());
+//        File newCSSFile = new File(filePath + IPath.SEPARATOR + item.getFileName());
+//
+//        try {
+//            if (!newCSSFile.exists()) {
+//                File dir = newCSSFile.getParentFile();
+//                dir.mkdirs();
+//                newCSSFile.createNewFile();
+//            }
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//
+//        group.getNScreenPageModel().getPageData().addCssFile(cssFile);
+        item.createFile();
+        item.setItemEnabled(true);
+        
+//        String pageId = group.getNScreenPageModel().getPageData().getName();
+//        item.getModel().addEnablePage(pageId);
+    }
+
+    @Override
+    public void redo() {
+//        execute();
+    }
+
+    @Override
+    public void undo() {
+//        String filePath = group.getNScreenPageModel().getAppManager().getCssFolder();
+//        CssFile cssFile = new CssFile(filePath + IPath.SEPARATOR + item.getFileName());
+//        File newCSSFile = new File(filePath + IPath.SEPARATOR + item.getFileName());
+//
+//        if (newCSSFile.exists()) {
+//            newCSSFile.delete();
+//        }
+//
+//        group.getNScreenPageModel().getPageData().removeCssFile(cssFile);
+//        item.setEnabled(false);
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkCutCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkCutCommand.java
new file mode 100644 (file)
index 0000000..048f065
--- /dev/null
@@ -0,0 +1,75 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenGroup;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+
+public class NScreenLinkCutCommand extends Command {
+    private NScreenItem item = null;
+    private NScreenGroup group = null;
+    private int direction = 0;
+
+    public NScreenLinkCutCommand(NScreenItem item) {
+        this.item = item;
+        group = (NScreenGroup) item.getParent();
+    }
+
+    @Override
+    public void execute() {
+
+        List<NScreenItem> source = new ArrayList<NScreenItem>();
+        List<NScreenItem> target = new ArrayList<NScreenItem>();
+
+        source.add(item);
+        List<NScreenItem> links = group.getLinkedItems(item);
+        int sourceIndex = links.indexOf(item);
+
+        if (sourceIndex != 0 && sourceIndex != links.size() - 1) {
+
+            for (int i = sourceIndex + 1; i < links.size(); i++) {
+                target.add(links.get(i));
+            }
+
+            NScreenItem prev = null;
+            NScreenItem after = null;
+
+            int sourceFirstIndex = group.getItems().indexOf(source.get(0));
+            if (sourceFirstIndex != 0) {
+                prev = group.getItems().get(sourceFirstIndex - 1);
+            }
+
+            int targetLastIndex = group.getItems().indexOf(target.get(target.size() - 1));
+            if (targetLastIndex < group.getItems().size() - 1) {
+                after = group.getItems().get(targetLastIndex + 1);
+            }
+
+            group.changeOrder(prev, source, target, after);
+            group.changeItemIndex(source, target);
+            group.changeModelIndex(source, target);
+        }
+
+        item.getReference().getLinkedList().remove(item);
+        item.getReference().redrawItem();
+        
+        direction = item.setLink(SWT.NONE);
+        item.createFile();
+    }
+
+    @Override
+    public void redo() {
+        execute();
+    }
+
+    @Override
+    public void undo() {
+//        item.deleteFile();
+//        item.setLink(direction);
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkDownCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkDownCommand.java
new file mode 100644 (file)
index 0000000..96422b1
--- /dev/null
@@ -0,0 +1,30 @@
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+public class NScreenLinkDownCommand extends Command {
+    private NScreenItem item = null;
+
+    public NScreenLinkDownCommand(NScreenItem item) {
+        this.item = item;
+    }
+
+    @Override
+    public void execute() {
+        item.deleteFile();
+        item.setLink(SWT.DOWN);
+    }
+
+    @Override
+    public void redo() {
+        execute();
+    }
+
+    @Override
+    public void undo() {
+        item.setLink(SWT.NONE);
+        item.createFile();
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkUpCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenLinkUpCommand.java
new file mode 100644 (file)
index 0000000..e7d6a01
--- /dev/null
@@ -0,0 +1,33 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+
+public class NScreenLinkUpCommand extends Command {
+    private NScreenItem item = null;
+
+    public NScreenLinkUpCommand(NScreenItem item) {
+        this.item = item;
+    }
+
+    @Override
+    public void execute() {
+        item.deleteFile();
+        item.setLink(SWT.UP);
+    }
+
+    @Override
+    public void redo() {
+        execute();
+    }
+
+    @Override
+    public void undo() {
+        item.setLink(SWT.NONE);
+        item.createFile();
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenMoveDownCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenMoveDownCommand.java
new file mode 100644 (file)
index 0000000..749a168
--- /dev/null
@@ -0,0 +1,77 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenGroup;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+
+public class NScreenMoveDownCommand extends Command {
+    private NScreenItem item = null;
+
+    public NScreenMoveDownCommand(NScreenItem item) {
+        this.item = item;
+    }
+
+    @Override
+    public void execute() {
+        NScreenGroup group = (NScreenGroup) item.getParent();
+        // group.changeOrder(item, SWT.DOWN);
+
+        List<NScreenItem> source = new ArrayList<NScreenItem>();
+        List<NScreenItem> target = new ArrayList<NScreenItem>();
+
+        if (item.isLinked() || item.isRoot()) {
+            source = group.getLinkedItems(item);
+        } else {
+            source.add(item);
+        }
+
+        int index = group.getItems().indexOf(source.get(source.size() - 1));
+
+        if (index == group.getItems().size() - 1) {
+            return;
+        }
+
+        NScreenItem next = group.getItems().get(index + 1);
+
+        if (next.isLinked() || next.isRoot()) {
+            target = group.getLinkedItems(next);
+        } else {
+            target.add(next);
+        }
+
+        NScreenItem prev = null;
+        NScreenItem after = null;
+
+        int sourceFirstIndex = group.getItems().indexOf(source.get(0));
+        if (sourceFirstIndex != 0) {
+            prev = group.getItems().get(sourceFirstIndex - 1);
+        }
+        
+        int targetLastIndex = group.getItems().indexOf(target.get(target.size()-1));
+        if (targetLastIndex < group.getItems().size() - 1) {
+            after = group.getItems().get(targetLastIndex + 1);
+        }
+
+        group.changeOrder(prev, source, target, after);
+        group.changeItemIndex(source, target);
+        group.changeModelIndex(source, target);
+    }
+
+    @Override
+    public void redo() {
+        execute();
+    }
+
+    @Override
+    public void undo() {
+//        NScreenGroup group = (NScreenGroup) item.getParent();
+//        group.changeOrder(item, SWT.UP);
+    }
+}
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenMoveUpCommand.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/command/NScreenMoveUpCommand.java
new file mode 100644 (file)
index 0000000..7b66680
--- /dev/null
@@ -0,0 +1,77 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.swt.SWT;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenGroup;
+import org.tizen.webuibuilder.ui.views.nscreen.NScreenItem;
+
+
+public class NScreenMoveUpCommand extends Command {
+    private NScreenItem item = null;
+
+    public NScreenMoveUpCommand(NScreenItem item) {
+        this.item = item;
+    }
+
+    @Override
+    public void execute() {
+        NScreenGroup group = (NScreenGroup) item.getParent();
+//        group.changeOrder(item, SWT.UP);
+
+        List<NScreenItem> source = new ArrayList<NScreenItem>();
+        List<NScreenItem> target = new ArrayList<NScreenItem>();
+
+        if (item.isLinked() || item.isRoot()) {
+            target = group.getLinkedItems(item);
+        } else {
+            target.add(item);
+        }
+
+        int index = group.getItems().indexOf(target.get(0));
+
+        if (index == 0) {
+            return;
+        }
+
+        NScreenItem front = group.getItems().get(index - 1);
+
+        if (front.isLinked() || front.isRoot()) {
+            source = group.getLinkedItems(front);
+        } else {
+            source.add(front);
+        }
+
+        NScreenItem prev = null;
+        NScreenItem after = null;
+
+        int sourceFirstIndex = group.getItems().indexOf(source.get(0));
+        if (sourceFirstIndex != 0) {
+            prev = group.getItems().get(sourceFirstIndex - 1);
+        }
+        
+        int targetLastIndex = group.getItems().indexOf(target.get(target.size()-1));
+        if (targetLastIndex < group.getItems().size() - 1) {
+            after = group.getItems().get(targetLastIndex + 1);
+        }
+
+        group.changeOrder(prev, source, target, after);
+        group.changeItemIndex(source, target);
+        group.changeModelIndex(source, target);
+    }
+
+    @Override
+    public void redo() {
+        execute();
+    }
+
+    @Override
+    public void undo() {
+//        NScreenGroup group = (NScreenGroup) item.getParent();
+//        group.changeOrder(item, SWT.DOWN);
+    }
+}
index 6236e00..888f85a 100644 (file)
@@ -60,7 +60,6 @@ public class NScreenPageModel {
         }
         mRootPathUri = mIProject.getLocationURI().toString();
         mToolPathUri = ResourceManager.getFileURL(BuilderPlugin.PLUGIN_ID, null).toString();
-
     }
 
     public IProject getIProject() {
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/testcode.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/nscreen/testcode.java
new file mode 100644 (file)
index 0000000..e0dbd7e
--- /dev/null
@@ -0,0 +1,45 @@
+
+
+package org.tizen.webuibuilder.ui.views.nscreen;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Rectangle;
+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.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class testcode {
+
+    public static void main(String[] args) {
+        Display display = new Display();
+        Shell shell = new Shell(display);
+        Composite composite = new Composite(shell, SWT.BORDER);
+        composite.addListener(SWT.MouseDown | SWT.MouseUp, new Listener() {
+
+            @Override
+            public void handleEvent(Event event) {
+                System.out.println("mouse up/down");
+
+            }
+        });
+        Rectangle clientArea = shell.getClientArea();
+        composite.setBounds(clientArea.x, clientArea.y, 100, 100);
+        Menu menu = new Menu(shell, SWT.POP_UP);
+        MenuItem item1 = new MenuItem(menu, SWT.PUSH);
+        item1.setText("test");
+        composite.setMenu(menu);
+        shell.setMenu(menu);
+        shell.setSize(300, 300);
+        shell.open();
+        while (!shell.isDisposed()) {
+            if (!display.readAndDispatch())
+                display.sleep();
+        }
+        display.dispose();
+    }
+}
index d74f851..c6fc4af 100644 (file)
@@ -495,10 +495,6 @@ public class CssStyleTab extends PropertiesTabItem implements IPageDataListener
     }
     
     private boolean setSelector(String selectorName) {
-        if (currentSelector != null && currentSelector.getSelectorName().equals(selectorName)) {
-            return false;
-        }
-        
         CssSelector cssSelector = cssFile.getSelector(selectorName);
         
         if (cssSelector != null) {