Adjusted sizes to accommodate Windows, iMac and Linux GUI
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / dialog / SourceFilesDlg.java
index 53ac9a5..81759be 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
  \r
- The file is used to create, update SourceFile of MSA/MBD file\r
+ The file is used to create, update SourceFiles section of the MSA file\r
  \r
  Copyright (c) 2006, Intel Corporation\r
  All rights reserved. This program and the accompanying materials\r
@@ -27,20 +27,21 @@ import javax.swing.JTextField;
 \r
 import org.tianocore.frameworkwizard.common.DataType;\r
 import org.tianocore.frameworkwizard.common.DataValidation;\r
+import org.tianocore.frameworkwizard.common.EnumerationData;\r
 import org.tianocore.frameworkwizard.common.Log;\r
 import org.tianocore.frameworkwizard.common.Tools;\r
 import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;\r
+import org.tianocore.frameworkwizard.common.ui.IComboBox;\r
 import org.tianocore.frameworkwizard.common.ui.IDialog;\r
 import org.tianocore.frameworkwizard.common.ui.IFrame;\r
 import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
 import org.tianocore.frameworkwizard.module.Identifications.SourceFiles.SourceFilesIdentification;\r
 \r
 /**\r
- The class is used to create, update SourceFile of MSA/MBD file\r
- It extends IInternalFrame\r
\r
-\r
-\r
+ * The class is used to create, update SourceFiles section of the MSA file\r
+ *\r
+ * It extends IDialog\r
+ * \r
  **/\r
 public class SourceFilesDlg extends IDialog {\r
 \r
@@ -76,6 +77,8 @@ public class SourceFilesDlg extends IDialog {
 \r
     private JTextField jTextFieldToolCode = null;\r
 \r
+    private IComboBox iComboBoxToolCode = null;\r
+\r
     private JTextField jTextFieldToolChainFamily = null;\r
 \r
     private JLabel jLabelFeatureFlag = null;\r
@@ -83,7 +86,7 @@ public class SourceFilesDlg extends IDialog {
     private JTextField jTextFieldFeatureFlag = null;\r
 \r
     private ArchCheckBox jArchCheckBox = null;\r
-    \r
+\r
     private JButton jButtonOk = null;\r
 \r
     private JButton jButtonCancel = null;\r
@@ -91,10 +94,12 @@ public class SourceFilesDlg extends IDialog {
     //\r
     // Not used by UI\r
     //\r
-    private SourceFilesIdentification sfid = null;\r
+    private SourceFilesIdentification sfid[] = null;\r
 \r
     private String msaFileName = "";\r
 \r
+    private EnumerationData ed = new EnumerationData();\r
+\r
     /**\r
      This method initializes jTextFieldFileName \r
      \r
@@ -104,7 +109,7 @@ public class SourceFilesDlg extends IDialog {
     private JTextField getJTextFieldSourceFilesDirectory() {\r
         if (jTextFieldFileName == null) {\r
             jTextFieldFileName = new JTextField();\r
-            jTextFieldFileName.setBounds(new java.awt.Rectangle(140, 10, 250, 20));\r
+            jTextFieldFileName.setBounds(new java.awt.Rectangle(168, 12, 250, 20));\r
             jTextFieldFileName.setPreferredSize(new java.awt.Dimension(250, 20));\r
             jTextFieldFileName.setToolTipText("Path is relative to the MSA file and must include the file name");\r
         }\r
@@ -121,7 +126,7 @@ public class SourceFilesDlg extends IDialog {
         if (jButtonOpenFile == null) {\r
             jButtonOpenFile = new JButton();\r
             jButtonOpenFile.setText("Browse");\r
-            jButtonOpenFile.setBounds(new java.awt.Rectangle(395, 10, 85, 20));\r
+            jButtonOpenFile.setBounds(new java.awt.Rectangle(422, 12, 85, 20));\r
             jButtonOpenFile.setPreferredSize(new java.awt.Dimension(85, 20));\r
             jButtonOpenFile.addActionListener(this);\r
         }\r
@@ -149,13 +154,26 @@ public class SourceFilesDlg extends IDialog {
     private JTextField getJTextFieldTagName() {\r
         if (jTextFieldTagName == null) {\r
             jTextFieldTagName = new JTextField();\r
-            jTextFieldTagName.setBounds(new java.awt.Rectangle(140, 35, 340, 20));\r
+            jTextFieldTagName.setBounds(new java.awt.Rectangle(168, 37, 340, 20));\r
             jTextFieldTagName.setPreferredSize(new java.awt.Dimension(340, 20));\r
             jTextFieldTagName.setToolTipText("You may specify a specific tool chain tag name, such as BILL1");\r
         }\r
         return jTextFieldTagName;\r
     }\r
 \r
+    private IComboBox getIComboBoxToolCode() {\r
+        if (iComboBoxToolCode == null) {\r
+            iComboBoxToolCode = new IComboBox();\r
+            iComboBoxToolCode.setBounds(new java.awt.Rectangle(168, 62, 340, 20));\r
+            iComboBoxToolCode.setPreferredSize(new java.awt.Dimension(340, 20));\r
+            iComboBoxToolCode.setToolTipText("<html>You may select a specific tool command from drop down list, <br>"\r
+                                             + "or you can DOUBLE-CLICK this fild to enter your customizing <br>"\r
+                                             + "tool command.<br>"\r
+                                             + "Press ENTER to save your input or press ESCAPE to quit</html>");\r
+        }\r
+        return iComboBoxToolCode;\r
+    }\r
+\r
     /**\r
      * This method initializes jTextFieldToolCode      \r
      *         \r
@@ -164,9 +182,10 @@ public class SourceFilesDlg extends IDialog {
     private JTextField getJTextFieldToolCode() {\r
         if (jTextFieldToolCode == null) {\r
             jTextFieldToolCode = new JTextField();\r
-            jTextFieldToolCode.setBounds(new java.awt.Rectangle(140, 60, 340, 20));\r
+            jTextFieldToolCode.setBounds(new java.awt.Rectangle(168, 62, 340, 20));\r
             jTextFieldToolCode.setPreferredSize(new java.awt.Dimension(340, 20));\r
             jTextFieldToolCode.setToolTipText("You may specify a specific tool command, such as ASM");\r
+            jTextFieldToolCode.setVisible(false);\r
         }\r
         return jTextFieldToolCode;\r
     }\r
@@ -179,7 +198,7 @@ public class SourceFilesDlg extends IDialog {
     private JTextField getJTextFieldToolChainFamily() {\r
         if (jTextFieldToolChainFamily == null) {\r
             jTextFieldToolChainFamily = new JTextField();\r
-            jTextFieldToolChainFamily.setBounds(new java.awt.Rectangle(140, 85, 340, 20));\r
+            jTextFieldToolChainFamily.setBounds(new java.awt.Rectangle(168, 87, 340, 20));\r
             jTextFieldToolChainFamily.setPreferredSize(new java.awt.Dimension(340, 20));\r
             jTextFieldToolChainFamily.setToolTipText("You may specify a specific tool chain family, such as GCC");\r
         }\r
@@ -194,7 +213,7 @@ public class SourceFilesDlg extends IDialog {
     private JTextField getJTextFieldFeatureFlag() {\r
         if (jTextFieldFeatureFlag == null) {\r
             jTextFieldFeatureFlag = new JTextField();\r
-            jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(140, 110, 340, 20));\r
+            jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(168, 112, 340, 20));\r
             jTextFieldFeatureFlag.setPreferredSize(new java.awt.Dimension(340, 20));\r
             jTextFieldFeatureFlag.setToolTipText("RESERVED FOR FUTURE USE");\r
         }\r
@@ -210,7 +229,7 @@ public class SourceFilesDlg extends IDialog {
     private JButton getJButtonOk() {\r
         if (jButtonOk == null) {\r
             jButtonOk = new JButton();\r
-            jButtonOk.setBounds(new java.awt.Rectangle(290, 165, 90, 20));\r
+            jButtonOk.setBounds(new java.awt.Rectangle(317, 172, 90, 20));\r
             jButtonOk.setText("Ok");\r
             jButtonOk.addActionListener(this);\r
         }\r
@@ -226,7 +245,7 @@ public class SourceFilesDlg extends IDialog {
     private JButton getJButtonCancel() {\r
         if (jButtonCancel == null) {\r
             jButtonCancel = new JButton();\r
-            jButtonCancel.setBounds(new java.awt.Rectangle(390, 165, 90, 20));\r
+            jButtonCancel.setBounds(new java.awt.Rectangle(412, 172, 90, 20));\r
             jButtonCancel.setText("Cancel");\r
             jButtonCancel.addActionListener(this);\r
         }\r
@@ -251,11 +270,12 @@ public class SourceFilesDlg extends IDialog {
      \r
      **/\r
     private void init() {\r
-        this.setSize(500, 235);\r
+        this.setSize(525, 240);\r
         this.setContentPane(getJScrollPane());\r
         this.setTitle("Source Files");\r
         this.setViewMode(false);\r
         this.centerWindow();\r
+        Tools.generateComboBoxByVector(iComboBoxToolCode, ed.getVToolCode());\r
     }\r
 \r
     /**         \r
@@ -268,16 +288,41 @@ public class SourceFilesDlg extends IDialog {
      **/\r
     private void init(SourceFilesIdentification inSourceFilesIdentifications, String fileName) {\r
         init();\r
-        this.sfid = inSourceFilesIdentifications;\r
+        //this.sfid = inSourceFilesIdentifications;\r
         this.msaFileName = fileName;\r
 \r
-        if (this.sfid != null) {\r
-            this.jTextFieldFileName.setText(sfid.getFilename());\r
-            this.jTextFieldTagName.setText(sfid.getTagName());\r
-            this.jTextFieldToolCode.setText(sfid.getToolCode());\r
-            this.jTextFieldToolChainFamily.setText(sfid.getToolChainFamily());\r
-            jTextFieldFeatureFlag.setText(sfid.getFeatureFlag());\r
-            this.jArchCheckBox.setSelectedItems(sfid.getSupArchList());\r
+        if (inSourceFilesIdentifications != null) {\r
+            this.jTextFieldFileName.setText(inSourceFilesIdentifications.getFilename());\r
+            this.jTextFieldTagName.setText(inSourceFilesIdentifications.getTagName());\r
+\r
+            //\r
+            // Generate Tool Code selection list\r
+            //\r
+            Vector<String> v = ed.getVToolCode();\r
+            boolean isFind = false;\r
+            String strToolCode = inSourceFilesIdentifications.getToolCode();\r
+\r
+            //\r
+            // If the input value is not in the default list, add it to the list\r
+            //\r
+            if (strToolCode != null) {\r
+                for (int index = 0; index < v.size(); index++) {\r
+                    if (v.elementAt(index).equals(strToolCode)) {\r
+                        isFind = true;\r
+                        break;\r
+                    }\r
+                }\r
+                if (!isFind && !isEmpty(strToolCode)) {\r
+                    v.addElement(strToolCode);\r
+                }\r
+            }\r
+\r
+            Tools.generateComboBoxByVector(iComboBoxToolCode, v);\r
+            this.iComboBoxToolCode.setSelectedItem(strToolCode);\r
+\r
+            this.jTextFieldToolChainFamily.setText(inSourceFilesIdentifications.getToolChainFamily());\r
+            jTextFieldFeatureFlag.setText(inSourceFilesIdentifications.getFeatureFlag());\r
+            this.jArchCheckBox.setSelectedItems(inSourceFilesIdentifications.getSupArchList());\r
         }\r
     }\r
 \r
@@ -303,30 +348,30 @@ public class SourceFilesDlg extends IDialog {
     private JPanel getJContentPane() {\r
         if (jContentPane == null) {\r
             jArchCheckBox = new ArchCheckBox();\r
-            jArchCheckBox.setBounds(new java.awt.Rectangle(140, 135, 340, 20));\r
+            jArchCheckBox.setBounds(new java.awt.Rectangle(168, 137, 340, 20));\r
             jArchCheckBox.setPreferredSize(new java.awt.Dimension(340, 20));\r
             jLabelFeatureFlag = new JLabel();\r
-            jLabelFeatureFlag.setBounds(new java.awt.Rectangle(15, 110, 120, 20));\r
-            jLabelFeatureFlag.setText("Feature Flag");\r
+            jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 112, 155, 20));\r
+            jLabelFeatureFlag.setText("Feature Flag Expression");\r
             jLabelToolCode = new JLabel();\r
-            jLabelToolCode.setBounds(new java.awt.Rectangle(15, 60, 120, 20));\r
+            jLabelToolCode.setBounds(new java.awt.Rectangle(12, 62, 155, 20));\r
             jLabelToolCode.setText("Tool Code");\r
             jLabelTagName = new JLabel();\r
-            jLabelTagName.setBounds(new java.awt.Rectangle(15, 35, 120, 20));\r
+            jLabelTagName.setBounds(new java.awt.Rectangle(12, 37, 155, 20));\r
             jLabelTagName.setText("Tag Name");\r
             jLabelArch = new JLabel();\r
-            jLabelArch.setBounds(new java.awt.Rectangle(15, 135, 120, 20));\r
-            jLabelArch.setText("Sup Arch List");\r
+            jLabelArch.setBounds(new java.awt.Rectangle(12, 137, 155, 20));\r
+            jLabelArch.setText("Supported Architectures");\r
             jLabelToolChainFamily = new JLabel();\r
-            jLabelToolChainFamily.setBounds(new java.awt.Rectangle(15, 85, 120, 20));\r
+            jLabelToolChainFamily.setBounds(new java.awt.Rectangle(12, 87, 155, 20));\r
             jLabelToolChainFamily.setText("Tool Chain Family");\r
             jLabelFileName = new JLabel();\r
             jLabelFileName.setText("File Name");\r
-            jLabelFileName.setBounds(new java.awt.Rectangle(15, 10, 120, 20));\r
+            jLabelFileName.setBounds(new java.awt.Rectangle(12, 12, 155, 20));\r
 \r
             jContentPane = new JPanel();\r
             jContentPane.setLayout(null);\r
-            jContentPane.setPreferredSize(new java.awt.Dimension(490, 185));\r
+            jContentPane.setPreferredSize(new java.awt.Dimension(505, 192));\r
 \r
             jContentPane.add(jLabelFileName, null);\r
             jContentPane.add(getJTextFieldSourceFilesDirectory(), null);\r
@@ -341,6 +386,7 @@ public class SourceFilesDlg extends IDialog {
             jContentPane.add(getJTextFieldTagName(), null);\r
             jContentPane.add(jLabelToolCode, null);\r
             jContentPane.add(getJTextFieldToolCode(), null);\r
+            jContentPane.add(getIComboBoxToolCode(), null);\r
             jContentPane.add(getJTextFieldToolChainFamily(), null);\r
             jContentPane.add(jLabelFeatureFlag, null);\r
             jContentPane.add(getJTextFieldFeatureFlag(), null);\r
@@ -376,14 +422,21 @@ public class SourceFilesDlg extends IDialog {
         }\r
     }\r
 \r
-    private SourceFilesIdentification getCurrentSourceFiles() {\r
+    private SourceFilesIdentification[] getCurrentSourceFiles() {\r
         String name = this.jTextFieldFileName.getText();\r
+        String s[] = name.split(";");\r
         String tagName = this.jTextFieldTagName.getText();\r
-        String toolCode = this.jTextFieldToolCode.getText();\r
+        String toolCode = this.iComboBoxToolCode.getSelectedItem().toString();\r
+        if (toolCode.equals(DataType.EMPTY_SELECT_ITEM)) {\r
+            toolCode = "";\r
+        }\r
         String tcf = this.jTextFieldToolChainFamily.getText();\r
         String featureFlag = this.jTextFieldFeatureFlag.getText();\r
         Vector<String> arch = this.jArchCheckBox.getSelectedItemsVector();\r
-        sfid = new SourceFilesIdentification(name, tagName, toolCode, tcf, featureFlag, arch);\r
+        sfid = new SourceFilesIdentification[s.length];\r
+        for (int index = 0; index < s.length; index++) {\r
+            sfid[index] = new SourceFilesIdentification(s[index], tagName, toolCode, tcf, featureFlag, arch);\r
+        }\r
         return sfid;\r
     }\r
 \r
@@ -399,11 +452,11 @@ public class SourceFilesDlg extends IDialog {
         // Check Filename\r
         //\r
         if (isEmpty(this.jTextFieldFileName.getText())) {\r
-            Log.err("File Name couldn't be empty");\r
+            Log.wrn("Update Source Files", "File Name couldn't be empty");\r
             return false;\r
         }\r
         if (!DataValidation.isFilename(this.jTextFieldFileName.getText())) {\r
-            Log.err("Incorrect data type for File Name");\r
+            Log.wrn("Update Source Files", "Incorrect data type for File Name");\r
             return false;\r
         }\r
 \r
@@ -412,7 +465,7 @@ public class SourceFilesDlg extends IDialog {
         //\r
         if (!isEmpty(this.jTextFieldTagName.getText())) {\r
             if (!DataValidation.isTagName(this.jTextFieldTagName.getText())) {\r
-                Log.err("Incorrect data type for Tag Name");\r
+                Log.wrn("Update Source Files", "Incorrect data type for Tag Name");\r
                 return false;\r
             }\r
         }\r
@@ -422,7 +475,7 @@ public class SourceFilesDlg extends IDialog {
         //\r
         if (!isEmpty(this.jTextFieldToolCode.getText())) {\r
             if (!DataValidation.isToolCode(this.jTextFieldToolCode.getText())) {\r
-                Log.err("Incorrect data type for Tool Code");\r
+                Log.wrn("Update Source Files", "Incorrect data type for Tool Code");\r
                 return false;\r
             }\r
         }\r
@@ -432,7 +485,7 @@ public class SourceFilesDlg extends IDialog {
         //\r
         if (!isEmpty(this.jTextFieldToolChainFamily.getText())) {\r
             if (!DataValidation.isToolChainFamily(this.jTextFieldToolChainFamily.getText())) {\r
-                Log.err("Incorrect data type for Tool Chain Family");\r
+                Log.wrn("Update Source Files", "Incorrect data type for Tool Chain Family");\r
                 return false;\r
             }\r
         }\r
@@ -442,7 +495,7 @@ public class SourceFilesDlg extends IDialog {
         //\r
         if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
             if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
-                Log.err("Incorrect data type for Feature Flag");\r
+                Log.wrn("Update Source Files", "Incorrect data type for Feature Flag");\r
                 return false;\r
             }\r
         }\r
@@ -457,17 +510,23 @@ public class SourceFilesDlg extends IDialog {
     private void selectFile() {\r
         JFileChooser fc = new JFileChooser();\r
         fc.setCurrentDirectory(new File(Tools.getFilePathOnly(msaFileName)));\r
+        fc.setMultiSelectionEnabled(true);\r
         int result = fc.showOpenDialog(new JPanel());\r
         if (result == JFileChooser.APPROVE_OPTION) {\r
-            this.jTextFieldFileName.setText(fc.getSelectedFile().getName());\r
+            File f[] = fc.getSelectedFiles();\r
+            String s = "";\r
+            for (int index = 0; index < f.length; index++) {\r
+                s = s + f[index].getName() + ";";\r
+            }\r
+            this.jTextFieldFileName.setText(s);\r
         }\r
     }\r
 \r
-    public SourceFilesIdentification getSfid() {\r
+    public SourceFilesIdentification[] getSfid() {\r
         return sfid;\r
     }\r
 \r
-    public void setSfid(SourceFilesIdentification sfid) {\r
+    public void setSfid(SourceFilesIdentification[] sfid) {\r
         this.sfid = sfid;\r
     }\r
 }\r