]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/FrameworkWizardUI.java
1. Remove "update far" from menu
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / FrameworkWizardUI.java
index 0c48798cdcf4aa531c183f9efc92e08ca9bcac90..092d7d10b42b6895e0595a97602cfa5ba7140586 100644 (file)
@@ -64,6 +64,10 @@ import org.tianocore.frameworkwizard.common.ui.IDefaultMutableTreeNode;
 import org.tianocore.frameworkwizard.common.ui.IDesktopManager;\r
 import org.tianocore.frameworkwizard.common.ui.IFrame;\r
 import org.tianocore.frameworkwizard.common.ui.ITree;\r
+import org.tianocore.frameworkwizard.far.createui.CreateStepOne;\r
+import org.tianocore.frameworkwizard.far.deleteui.DeleteStepOne;\r
+import org.tianocore.frameworkwizard.far.installui.InstallStepOne;\r
+import org.tianocore.frameworkwizard.far.updateui.UpdateStepOne;\r
 import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleBootModes;\r
 import org.tianocore.frameworkwizard.module.ui.ModuleDataHubs;\r
@@ -114,7 +118,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     /// Define class Serial Version UID\r
     ///\r
     private static final long serialVersionUID = -7103240960573031772L;\r
-    \r
+\r
     //\r
     // To save information of all files\r
     //\r
@@ -136,10 +140,6 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private int currentOpeningPlatformIndex = -1;\r
 \r
-    private String projectName = "FrameworkWizard";\r
-    \r
-    private String projectVersion = "0.5";\r
-\r
     private IDefaultMutableTreeNode dmtnRoot = null;\r
 \r
     private IDefaultMutableTreeNode dmtnModuleDescription = null;\r
@@ -286,11 +286,11 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     private JMenuItem jMenuItemHelpSearch = null;\r
 \r
-    private JMenuItem jMenuItemProjectInstallPackage = null;\r
+    private JMenuItem jMenuItemProjectInstallFar = null;\r
 \r
-    private JMenuItem jMenuItemProjectUpdatePackage = null;\r
+    private JMenuItem jMenuItemProjectUpdateFar = null;\r
 \r
-    private JMenuItem jMenuItemProjectRemovePackage = null;\r
+    private JMenuItem jMenuItemProjectRemoveFar = null;\r
 \r
     //private JToolBar jToolBarFile = null;\r
 \r
@@ -298,6 +298,17 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
 \r
     //private JToolBar jToolBarWindow = null;\r
 \r
+    private static FrameworkWizardUI fwui = null;\r
+\r
+    private JMenuItem jMenuItemProjectCreateFar = null;\r
+\r
+    public static FrameworkWizardUI getInstance() {\r
+        if (fwui == null) {\r
+            fwui = new FrameworkWizardUI();\r
+        }\r
+        return fwui;\r
+    }\r
+\r
     /**\r
      This method initializes jMenuBar \r
      \r
@@ -1257,9 +1268,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             //jMenuProject.addSeparator();\r
             jMenuProject.add(getJMenuItemProjectChangeWorkspace());\r
             jMenuProject.addSeparator();\r
-            jMenuProject.add(getJMenuItemProjectInstallPackage());\r
-            jMenuProject.add(getJMenuItemProjectUpdatePackage());\r
-            jMenuProject.add(getJMenuItemProjectRemovePackage());\r
+            jMenuProject.add(getJMenuItemProjectCreateFar());\r
+            jMenuProject.add(getJMenuItemProjectInstallFar());\r
+            jMenuProject.add(getJMenuItemProjectUpdateFar());\r
+            jMenuProject.add(getJMenuItemProjectRemoveFar());\r
             //jMenuProject.addSeparator();\r
             jMenuProject.add(getJMenuProjectBuildTargets());\r
         }\r
@@ -1602,15 +1614,15 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      *         \r
      * @return javax.swing.JMenuItem   \r
      */\r
-    private JMenuItem getJMenuItemProjectInstallPackage() {\r
-        if (jMenuItemProjectInstallPackage == null) {\r
-            jMenuItemProjectInstallPackage = new JMenuItem();\r
-            jMenuItemProjectInstallPackage.setText("Install Distribution Package");\r
-            jMenuItemProjectInstallPackage.setMnemonic('I');\r
-            jMenuItemProjectInstallPackage.setEnabled(false);\r
-            jMenuItemProjectInstallPackage.addActionListener(this);\r
+    private JMenuItem getJMenuItemProjectInstallFar() {\r
+        if (jMenuItemProjectInstallFar == null) {\r
+            jMenuItemProjectInstallFar = new JMenuItem();\r
+            jMenuItemProjectInstallFar.setText("Install FAR");\r
+            jMenuItemProjectInstallFar.setMnemonic('I');\r
+            jMenuItemProjectInstallFar.setEnabled(true);\r
+            jMenuItemProjectInstallFar.addActionListener(this);\r
         }\r
-        return jMenuItemProjectInstallPackage;\r
+        return jMenuItemProjectInstallFar;\r
     }\r
 \r
     /**\r
@@ -1618,15 +1630,16 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      *         \r
      * @return javax.swing.JMenuItem   \r
      */\r
-    private JMenuItem getJMenuItemProjectUpdatePackage() {\r
-        if (jMenuItemProjectUpdatePackage == null) {\r
-            jMenuItemProjectUpdatePackage = new JMenuItem();\r
-            jMenuItemProjectUpdatePackage.setText("Update Disstribution Package");\r
-            jMenuItemProjectUpdatePackage.setMnemonic('U');\r
-            jMenuItemProjectUpdatePackage.setEnabled(false);\r
-            jMenuItemProjectUpdatePackage.addActionListener(this);\r
+    private JMenuItem getJMenuItemProjectUpdateFar() {\r
+        if (jMenuItemProjectUpdateFar == null) {\r
+            jMenuItemProjectUpdateFar = new JMenuItem();\r
+            jMenuItemProjectUpdateFar.setText("Update FAR");\r
+            jMenuItemProjectUpdateFar.setMnemonic('U');\r
+            jMenuItemProjectUpdateFar.setEnabled(true);\r
+            jMenuItemProjectUpdateFar.addActionListener(this);\r
+            jMenuItemProjectUpdateFar.setVisible(false);\r
         }\r
-        return jMenuItemProjectUpdatePackage;\r
+        return jMenuItemProjectUpdateFar;\r
     }\r
 \r
     /**\r
@@ -1634,15 +1647,30 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      *         \r
      * @return javax.swing.JMenuItem   \r
      */\r
-    private JMenuItem getJMenuItemProjectRemovePackage() {\r
-        if (jMenuItemProjectRemovePackage == null) {\r
-            jMenuItemProjectRemovePackage = new JMenuItem();\r
-            jMenuItemProjectRemovePackage.setText("Remove Distribution Package");\r
-            jMenuItemProjectRemovePackage.setMnemonic('R');\r
-            jMenuItemProjectRemovePackage.setEnabled(false);\r
-            jMenuItemProjectRemovePackage.addActionListener(this);\r
+    private JMenuItem getJMenuItemProjectRemoveFar() {\r
+        if (jMenuItemProjectRemoveFar == null) {\r
+            jMenuItemProjectRemoveFar = new JMenuItem();\r
+            jMenuItemProjectRemoveFar.setText("Remove FAR");\r
+            jMenuItemProjectRemoveFar.setMnemonic('R');\r
+            jMenuItemProjectRemoveFar.setEnabled(true);\r
+            jMenuItemProjectRemoveFar.addActionListener(this);\r
         }\r
-        return jMenuItemProjectRemovePackage;\r
+        return jMenuItemProjectRemoveFar;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jMenuItemProjectCreateFar       \r
+     *         \r
+     * @return javax.swing.JMenuItem   \r
+     */\r
+    private JMenuItem getJMenuItemProjectCreateFar() {\r
+        if (jMenuItemProjectCreateFar == null) {\r
+            jMenuItemProjectCreateFar = new JMenuItem();\r
+            jMenuItemProjectCreateFar.setText("Create FAR");\r
+            jMenuItemProjectCreateFar.setMnemonic('C');\r
+            jMenuItemProjectCreateFar.addActionListener(this);\r
+        }\r
+        return jMenuItemProjectCreateFar;\r
     }\r
 \r
     /* (non-Javadoc)\r
@@ -1652,7 +1680,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      * \r
      */\r
     public static void main(String[] args) {\r
-        FrameworkWizardUI module = new FrameworkWizardUI();\r
+        FrameworkWizardUI module = FrameworkWizardUI.getInstance();\r
         module.setVisible(true);\r
     }\r
 \r
@@ -1690,7 +1718,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         this.addComponentListener(this);\r
         this.getCompontentsFromFrameworkDatabase();\r
         this.setContentPane(getJContentPane());\r
-        this.setTitle(projectName + " " + projectVersion + " " + "- [" + Workspace.getCurrentWorkspace() + "]");\r
+        this.setTitle(DataType.PROJECT_NAME + " " + DataType.PROJECT_VERSION + " " + "- ["\r
+                      + Workspace.getCurrentWorkspace() + "]");\r
         this.setExitType(1);\r
 \r
         //\r
@@ -1761,10 +1790,53 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             changeWorkspace();\r
         }\r
 \r
+        if (arg0.getSource() == jMenuItemProjectCreateFar) {\r
+            CreateStepOne cso = new CreateStepOne(this, true);\r
+            int result = cso.showDialog();\r
+            if (result == DataType.RETURN_TYPE_OK) {\r
+                String strReturn = "Create Far Done!";\r
+                JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);\r
+            }\r
+            cso.dispose();\r
+        }\r
+\r
+        if (arg0.getSource() == jMenuItemProjectInstallFar) {\r
+            InstallStepOne iso = new InstallStepOne(this, true);\r
+            int result = iso.showDialog();\r
+            if (result == DataType.RETURN_TYPE_OK) {\r
+                String strReturn = "<html>Install Far Done! <br>The WORKSPACE will be refreshed!</html>";\r
+                JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);\r
+                this.closeAll();\r
+            }\r
+            iso.dispose();\r
+        }\r
+\r
+        if (arg0.getSource() == jMenuItemProjectRemoveFar) {\r
+            DeleteStepOne dso = new DeleteStepOne(this, true);\r
+            int result = dso.showDialog();\r
+            if (result == DataType.RETURN_TYPE_OK) {\r
+                String strReturn = "<html>Delete Far Done! <br>The WORKSPACE will be refreshed!</html>";\r
+                JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);\r
+                this.closeAll();\r
+            }\r
+            dso.dispose();\r
+        }\r
+\r
+        if (arg0.getSource() == jMenuItemProjectUpdateFar) {\r
+            UpdateStepOne uso = new UpdateStepOne(this, true);\r
+            int result = uso.showDialog();\r
+            if (result == DataType.RETURN_TYPE_OK) {\r
+                String strReturn = "<html>Update Far Done! <br>The WORKSPACE will be refreshed!</html>";\r
+                JOptionPane.showConfirmDialog(null, strReturn, "Done", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);\r
+                this.closeAll();\r
+            }\r
+            uso.dispose();\r
+        }\r
+\r
         if (arg0.getSource() == jMenuItemToolsClone) {\r
             cloneItem();\r
         }\r
-        \r
+\r
         if (arg0.getSource() == jMenuItemToolsToolChainConfiguration) {\r
             setupToolChainConfiguration();\r
         }\r
@@ -1789,14 +1861,56 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         // Make Module Description\r
         dmtnModuleDescription = new IDefaultMutableTreeNode("ModuleDescription", IDefaultMutableTreeNode.MODULE, -1);\r
 \r
-        if (this.vModuleList.size() > 0) {\r
-            for (int index = 0; index < this.vModuleList.size(); index++) {\r
-                dmtnModuleDescription.add(new IDefaultMutableTreeNode(this.vModuleList.elementAt(index).getName(),\r
-                                                                      IDefaultMutableTreeNode.MSA_HEADER, false,\r
-                                                                      this.vModuleList.elementAt(index)));\r
+        //\r
+        // First add package\r
+        //\r
+        if (this.vPackageList.size() > 0) {\r
+            for (int index = 0; index < this.vPackageList.size(); index++) {\r
+                IDefaultMutableTreeNode dmtnModulePackage = null;\r
+                IDefaultMutableTreeNode dmtnModulePackageLibrary = null;\r
+                IDefaultMutableTreeNode dmtnModulePackageModule = null;\r
+\r
+                dmtnModulePackage = new IDefaultMutableTreeNode(this.vPackageList.elementAt(index).getName(),\r
+                                                                IDefaultMutableTreeNode.MODULE_PACKAGE, false,\r
+                                                                this.vPackageList.elementAt(index));\r
+                dmtnModulePackageLibrary = new IDefaultMutableTreeNode("Library",\r
+                                                                       IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY,\r
+                                                                       false, this.vPackageList.elementAt(index));\r
+                dmtnModulePackageModule = new IDefaultMutableTreeNode("Module",\r
+                                                                      IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
+                                                                      false, this.vPackageList.elementAt(index));\r
+\r
+                Vector<ModuleIdentification> vModule = wt.getAllModules(this.vPackageList.elementAt(index));\r
+                for (int indexJ = 0; indexJ < vModule.size(); indexJ++) {\r
+                    if (vModule.get(indexJ).isLibrary()) {\r
+                        dmtnModulePackageLibrary.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
+                                                                                 IDefaultMutableTreeNode.MSA_HEADER,\r
+                                                                                 false, vModule.get(indexJ)));\r
+                    } else {\r
+                        dmtnModulePackageModule.add(new IDefaultMutableTreeNode(vModule.get(indexJ).getName(),\r
+                                                                                IDefaultMutableTreeNode.MSA_HEADER,\r
+                                                                                false, vModule.get(indexJ)));\r
+                    }\r
+                }\r
+                if (dmtnModulePackageModule.getChildCount() > 0) {\r
+                    dmtnModulePackage.add(dmtnModulePackageModule);\r
+                }\r
+                if (dmtnModulePackageLibrary.getChildCount() > 0) {\r
+                    dmtnModulePackage.add(dmtnModulePackageLibrary);\r
+                }\r
+\r
+                dmtnModuleDescription.add(dmtnModulePackage);\r
             }\r
         }\r
 \r
+        //                if (this.vModuleList.size() > 0) {\r
+        //                    for (int index = 0; index < this.vModuleList.size(); index++) {\r
+        //                        dmtnModuleDescription.add(new IDefaultMutableTreeNode(this.vModuleList.elementAt(index).getName(),\r
+        //                                                                              IDefaultMutableTreeNode.MSA_HEADER, false,\r
+        //                                                                              this.vModuleList.elementAt(index)));\r
+        //                    }\r
+        //                }\r
+\r
         // Make Package Description\r
         dmtnPackageDescription = new IDefaultMutableTreeNode("PackageDescription", IDefaultMutableTreeNode.PACKAGE, -1);\r
         if (this.vPackageList.size() > 0) {\r
@@ -1934,6 +2048,155 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         return fc.showSaveDialog(new JPanel());\r
     }\r
 \r
+    /**\r
+     Add a module to tree\r
+     \r
+     @param mid The module node to be added\r
+     \r
+     **/\r
+    private void addModuleToTree(ModuleIdentification mid) {\r
+        //\r
+        // Add new MsaHeader node to the tree\r
+        //\r
+        IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(mid.getName(), IDefaultMutableTreeNode.MSA_HEADER,\r
+                                                                   true, mid);\r
+        //\r
+        // First find the module belongs to which package\r
+        //\r
+        IDefaultMutableTreeNode packageNode = iTree.getNodeById(dmtnModuleDescription, mid.getPackageId(),\r
+                                                                IDefaultMutableTreeNode.MODULE_PACKAGE);\r
+        //\r
+        // To check if has module node or library node\r
+        //\r
+        IDefaultMutableTreeNode parentModuleNode = null;\r
+        IDefaultMutableTreeNode parentLibraryNode = null;\r
+        boolean hasModule = false;\r
+        boolean hasLibrary = false;\r
+        for (int index = 0; index < packageNode.getChildCount(); index++) {\r
+            IDefaultMutableTreeNode iNode = (IDefaultMutableTreeNode) packageNode.getChildAt(index);\r
+            if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY) {\r
+                hasLibrary = true;\r
+                parentLibraryNode = iNode;\r
+            }\r
+            if (iNode.getCategory() == IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE) {\r
+                hasModule = true;\r
+                parentModuleNode = iNode;\r
+            }\r
+        }\r
+\r
+        //\r
+        // If is a module\r
+        //\r
+        if (!mid.isLibrary()) {\r
+            //\r
+            // Create parent node first if has no parent node\r
+            //\r
+            if (!hasModule) {\r
+                parentModuleNode = new IDefaultMutableTreeNode("Module", IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE,\r
+                                                               false, mid.getPackageId());\r
+                iTree.addNode(packageNode, parentModuleNode);\r
+            }\r
+\r
+            iTree.addNode(parentModuleNode, node);\r
+        }\r
+\r
+        //\r
+        // If is a Library\r
+        //\r
+        if (mid.isLibrary()) {\r
+            //\r
+            // Create parent node first if has no parent node\r
+            //\r
+            if (!hasLibrary) {\r
+                parentLibraryNode = new IDefaultMutableTreeNode("Library",\r
+                                                                IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY, false,\r
+                                                                mid.getPackageId());\r
+                iTree.addNode(packageNode, parentLibraryNode);\r
+            }\r
+\r
+            iTree.addNode(parentLibraryNode, node);\r
+        }\r
+    }\r
+\r
+    /**\r
+     Open Module\r
+\r
+     @param path input file path\r
+     \r
+     **/\r
+    private void openModule(String path, ModuleIdentification moduleId) {\r
+        ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = null;\r
+        try {\r
+            msa = OpenFile.openMsaFile(path);\r
+        } catch (IOException e) {\r
+            Log.err("Open Module Surface Area " + path, e.getMessage());\r
+            return;\r
+        } catch (XmlException e) {\r
+            Log.err("Open Module Surface Area " + path, e.getMessage());\r
+            return;\r
+        } catch (Exception e) {\r
+            Log.err("Open Module Surface Area " + path, "Invalid file type");\r
+            return;\r
+        }\r
+        Identification id = new Identification(msa.getMsaHeader().getModuleName(), msa.getMsaHeader().getGuidValue(),\r
+                                               msa.getMsaHeader().getVersion(), path);\r
+        //\r
+        // Generate module id\r
+        //\r
+        PackageIdentification pid = wt.getPackageIdByModuleId(id);\r
+        if (pid != null) {\r
+            //\r
+            // To judge if the module existed in vModuleList\r
+            // If not, add it to vModuleList\r
+            //\r
+            boolean isFind = false;\r
+            for (int index = 0; index < vModuleList.size(); index++) {\r
+                if (vModuleList.elementAt(index).equals(id)) {\r
+                    isFind = true;\r
+                    break;\r
+                }\r
+            }\r
+            if (!isFind) {\r
+                ModuleIdentification mid = new ModuleIdentification(id, pid, moduleId.isLibrary());\r
+                vModuleList.addElement(mid);\r
+                addModuleToTree(mid);\r
+            }\r
+        } else {\r
+            //\r
+            // The module is not in existing packages\r
+            //\r
+            Log.err("The module hasn't been added to any package of current workspace!");\r
+            return;\r
+        }\r
+\r
+        //\r
+        // Make the node selected\r
+        //\r
+        iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnModuleDescription, id,\r
+                                                                     IDefaultMutableTreeNode.MSA_HEADER)));\r
+        //\r
+        // Update opening Module list information\r
+        //\r
+        if (!openingModuleList.existsModule(id)) {\r
+            //\r
+            // Insert sub node of module\r
+            //\r
+            insertModuleTreeNode(id);\r
+            iTree.getSelectNode().setOpening(true);\r
+\r
+            //\r
+            // Update opening module list\r
+            //\r
+            openingModuleList.insertToOpeningModuleList(id, msa);\r
+            openingModuleList.setTreePathById(id, iTree.getSelectionPath());\r
+        }\r
+        //\r
+        // Show msa header in editor panel\r
+        //\r
+        showModuleElement(IDefaultMutableTreeNode.MSA_HEADER, openingModuleList.getOpeningModuleById(id));\r
+        this.currentOpeningModuleIndex = openingModuleList.findIndexOfListById(id);\r
+    }\r
+\r
     /**\r
      Open Module\r
 \r
@@ -1973,14 +2236,9 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                 }\r
             }\r
             if (!isFind) {\r
-                vModuleList.addElement(new ModuleIdentification(id, pid));\r
-                //\r
-                // Add new MsaHeader node to the tree\r
-                //\r
-                IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vModuleList.lastElement().getName(),\r
-                                                                           IDefaultMutableTreeNode.MSA_HEADER, true,\r
-                                                                           vModuleList.lastElement());\r
-                iTree.addNode(dmtnModuleDescription, node);\r
+                ModuleIdentification mid = new ModuleIdentification(id, pid);\r
+                vModuleList.addElement(mid);\r
+                addModuleToTree(mid);\r
             }\r
         } else {\r
             //\r
@@ -1990,6 +2248,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             return;\r
         }\r
 \r
+        //\r
         // Make the node selected\r
         //\r
         iTree.setSelectionPath(iTree.getPathOfNode(iTree.getNodeById(this.dmtnModuleDescription, id,\r
@@ -2306,7 +2565,8 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
     }\r
 \r
     private void insertPlatformTreeNode(Identification id) {\r
-        iTree.addNode(new IDefaultMutableTreeNode("Platform Definitions", IDefaultMutableTreeNode.FPD_PLATFORMDEFINITIONS, true, id));\r
+        iTree.addNode(new IDefaultMutableTreeNode("Platform Definitions",\r
+                                                  IDefaultMutableTreeNode.FPD_PLATFORMDEFINITIONS, true, id));\r
         iTree.addNode(new IDefaultMutableTreeNode("Flash", IDefaultMutableTreeNode.FPD_FLASH, true, id));\r
         iTree.addNode(new IDefaultMutableTreeNode("Framework Modules", IDefaultMutableTreeNode.FPD_FRAMEWORKMODULES,\r
                                                   true, id));\r
@@ -2373,10 +2633,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
      @param elementType\r
      @param fpd\r
      \r
-    **/\r
+     **/\r
     private void showPlatformElement(int elementType, OpeningPlatformType fpd) {\r
         this.cleanDesktopPanePlatform();\r
-        \r
+\r
         switch (elementType) {\r
         case IDefaultMutableTreeNode.FPD_PLATFORMDEFINITIONS:\r
             FpdPlatformDefs frmFpdPlatformDefs = new FpdPlatformDefs(fpd);\r
@@ -2591,7 +2851,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
                     e.printStackTrace();\r
                     return;\r
                 }\r
-                this.openModule(smb.getMid().getPath());\r
+                this.openModule(smb.getMid().getPath(), smb.getMid());\r
             }\r
         } else if (result == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
             //\r
@@ -2879,31 +3139,28 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             // Reinit whole window\r
             //\r
             closeAll();\r
-            this.setTitle(projectName + " " + projectVersion + " " + "- [" + Workspace.getCurrentWorkspace() + "]");\r
+            this.setTitle(DataType.PROJECT_NAME + " " + DataType.PROJECT_VERSION + " " + "- ["\r
+                          + Workspace.getCurrentWorkspace() + "]");\r
         }\r
         sw.dispose();\r
     }\r
-    \r
+\r
     /**\r
-    Show Tool Chain Configuration Dialog to setup Tool Chain\r
-    \r
-    **/\r
+     Show Tool Chain Configuration Dialog to setup Tool Chain\r
+     \r
+     **/\r
     private void setupToolChainConfiguration() {\r
-        ToolChainConfig tcc = new ToolChainConfig(this, true);\r
-        int result = tcc.showDialog();\r
-        \r
-        if (result == DataType.RETURN_TYPE_CANCEL) {\r
-            tcc.dispose();\r
-        }\r
+        ToolChainConfig tcc = ToolChainConfig.getInstance();\r
+        tcc.showDialog();\r
     }\r
-    \r
+\r
     /**\r
      Clone selected item\r
      \r
      **/\r
     private void cloneItem() {\r
         int mode = -1;\r
-        \r
+\r
         //\r
         // Check if there is any item can be cloned\r
         //\r
@@ -2918,7 +3175,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             Log.err("Please select a target to clone!");\r
             return;\r
         }\r
-        \r
+\r
         if (category == IDefaultMutableTreeNode.WORKSPACE) {\r
             mode = DataType.RETURN_TYPE_WORKSPACE;\r
             id = null;\r
@@ -2932,10 +3189,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         if (category >= IDefaultMutableTreeNode.FPD_PLATFORMHEADER) {\r
             mode = DataType.RETURN_TYPE_PLATFORM_SURFACE_AREA;\r
         }\r
-        \r
+\r
         Clone c = new Clone(this, true, mode, id);\r
         int result = c.showDialog();\r
-        \r
+\r
         if (result == DataType.RETURN_TYPE_CANCEL) {\r
             c.dispose();\r
         }\r
@@ -2945,13 +3202,7 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
         if (result == DataType.RETURN_TYPE_MODULE_SURFACE_AREA) {\r
             Tools.showInformationMessage("Module Surface Area Clone Finished");\r
             vModuleList.addElement(c.getMid());\r
-            //\r
-            // Add new MsaHeader node to the tree\r
-            //\r
-            IDefaultMutableTreeNode node = new IDefaultMutableTreeNode(vModuleList.lastElement().getName(),\r
-                                                                       IDefaultMutableTreeNode.MSA_HEADER, true,\r
-                                                                       vModuleList.lastElement());\r
-            iTree.addNode(dmtnModuleDescription, node);\r
+            addModuleToTree(c.getMid());\r
         }\r
         if (result == DataType.RETURN_TYPE_PACKAGE_SURFACE_AREA) {\r
             Tools.showInformationMessage("Package Surface Area Clone Finished");\r
@@ -3024,7 +3275,10 @@ public class FrameworkWizardUI extends IFrame implements MouseListener, TreeSele
             } else {\r
                 int category = iTree.getSelectCategory();\r
                 if (category == IDefaultMutableTreeNode.MODULE || category == IDefaultMutableTreeNode.PACKAGE\r
-                    || category == IDefaultMutableTreeNode.PLATFORM) {\r
+                    || category == IDefaultMutableTreeNode.PLATFORM\r
+                    || category == IDefaultMutableTreeNode.MODULE_PACKAGE\r
+                    || category == IDefaultMutableTreeNode.MODULE_PACKAGE_LIBRARY\r
+                    || category == IDefaultMutableTreeNode.MODULE_PACKAGE_MODULE) {\r
                     jMenuItemToolsClone.setEnabled(false);\r
                 } else {\r
                     jMenuItemToolsClone.setEnabled(true);\r