Search in sources :

Example 81 with GroupLayout

use of javax.swing.GroupLayout in project IBMiProgTool by vzupka.

the class EditFile method splitTextArea.

/**
 * Split the text area view to an upper primary area and lower secondary area.
 */
protected void splitTextArea() {
    // Initially, the document listener for the primary text area is not set.
    // Copy text from the primary to the secondary text area
    textArea2.setText(textArea.getText());
    // Set background for secondary text area
    if (methodName.equals("rewritePcFile")) {
        textArea2.setBackground(VERY_LIGHT_PINK);
    } else {
        textArea2.setBackground(VERY_LIGHT_BLUE);
    }
    // Set caret shapes for selection modes in the secondary text area
    if (selectionModeButton.getText().equals(HORIZONTAL_SELECTION)) {
        // Horizontal selection
        if (caretShape.equals(LONG_CARET)) {
            // Long caret
            textArea2.setCaret(longCaret2);
        } else {
            // Short basic caret
            textArea2.setCaret(basicCaret2);
        }
    } else {
        // Vertical selection
        textArea2.setCaret(specialCaret2);
    }
    // Build upper and lower scroll panes, and a split vertical scroll pane
    scrollPaneUpper = new JScrollPane();
    scrollPaneUpper.setViewportView(textArea);
    scrollPaneUpper.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPaneUpper.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
    scrollPaneLower = new JScrollPane();
    scrollPaneLower.setViewportView(textArea2);
    scrollPaneLower.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPaneLower.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
    splitVerticalPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    splitVerticalPane.setPreferredSize(new Dimension(windowWidth, windowHeight));
    splitVerticalPane.setBorder(BorderFactory.createEmptyBorder());
    splitVerticalPane.setTopComponent(scrollPaneUpper);
    splitVerticalPane.setBottomComponent(scrollPaneLower);
    splitVerticalPane.setDividerSize(6);
    // 50 %
    double splitVerticalPaneDividerLoc = 0.50d;
    splitVerticalPane.setDividerLocation(splitVerticalPaneDividerLoc);
    // Stabilize vertical divider always in the middle
    splitVerticalPane.setResizeWeight(0.5);
    splitVerticalPane.setAlignmentX(CENTER_ALIGNMENT);
    // Remove global panel and create it again
    this.remove(globalPanel);
    globalPanel = new JPanel();
    // Renew global panel layout
    GroupLayout topPanelLayout = new GroupLayout(globalPanel);
    topPanelLayout.setHorizontalGroup(topPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(rowPanel2).addComponent(rowPanel1).addComponent(splitVerticalPane));
    topPanelLayout.setVerticalGroup(topPanelLayout.createSequentialGroup().addComponent(rowPanel2).addGap(2).addComponent(rowPanel1).addGap(4).addComponent(splitVerticalPane));
    // Set global panel layout
    globalPanel.setLayout(topPanelLayout);
    globalPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    // Add global panel to this (JFrame)
    add(globalPanel);
    // Get a highlighter for the primary text area
    blockHighlighter = textArea.getHighlighter();
    // Hightlight only if the option is not *NONE
    if (!progLanguage.equals("*NONE")) {
        highlightBlocks(textArea, progLanguage);
    }
    // Get a highlighter for the secondary text area
    blockHighlighter = textArea2.getHighlighter();
    // Hightlight only if the option is not *NONE
    if (!progLanguage.equals("*NONE")) {
        highlightBlocks(textArea2, progLanguage);
    }
    // Add document listener for the secondary text area
    // for the first time and next time when the view is being split.
    textArea2.getDocument().addDocumentListener(textArea2DocListener);
    // Add also document listener for the primary text area.
    textArea.getDocument().addDocumentListener(textAreaDocListener);
    // Show the window
    setVisible(true);
    changeHighlight2();
}
Also used : JScrollPane(javax.swing.JScrollPane) JPanel(javax.swing.JPanel) GroupLayout(javax.swing.GroupLayout) Dimension(java.awt.Dimension) JSplitPane(javax.swing.JSplitPane)

Example 82 with GroupLayout

use of javax.swing.GroupLayout in project IBMiProgTool by vzupka.

the class MainWindow method createWindow.

/**
 * Create window containing trees with initial files in upper part; Left tree
 * shows local file system; Right tree shows IBM i file system (IFS).
 */
public void createWindow() {
    cont = getContentPane();
    globalPanel = new JPanel();
    globalPanelLayout = new GroupLayout(globalPanel);
    menuBar = new JMenuBar();
    helpMenu = new JMenu("Help");
    helpMenuItemEN = new JMenuItem("Help English");
    helpMenuItemCZ = new JMenuItem("Nápověda česky");
    helpMenuItemRPGIII = new JMenuItem("RPG III forms");
    helpMenuItemRPGIV = new JMenuItem("RPG IV forms");
    helpMenuItemCOBOL = new JMenuItem("COBOL form");
    helpMenuItemDDS = new JMenuItem("DDS forms");
    helpMenu.add(helpMenuItemEN);
    helpMenu.add(helpMenuItemCZ);
    helpMenu.add(helpMenuItemRPGIII);
    helpMenu.add(helpMenuItemRPGIV);
    helpMenu.add(helpMenuItemCOBOL);
    helpMenu.add(helpMenuItemDDS);
    menuBar.add(helpMenu);
    // In macOS on the main system menu bar above, in Windows on the window menu bar
    setJMenuBar(menuBar);
    panelTop = new JPanel();
    panelTopLayout = new GroupLayout(panelTop);
    panelTop.setLayout(panelTopLayout);
    panelPathLeft = new JPanel();
    panelPathLeft.setLayout(new BoxLayout(panelPathLeft, BoxLayout.LINE_AXIS));
    scrollPaneLeft = new JScrollPane();
    scrollPaneLeft.setBorder(BorderFactory.createEmptyBorder());
    panelPathRight = new JPanel();
    panelPathRight.setLayout(new BoxLayout(panelPathRight, BoxLayout.LINE_AXIS));
    scrollPaneRight = new JScrollPane();
    scrollPaneRight.setBorder(BorderFactory.createEmptyBorder());
    // Windows: Disks combo box is included in order to choose proper root
    // directory (A:\, C:\, ...)
    Component diskLabelWin;
    Component disksComboBoxWin;
    if (operatingSystem.equals(WINDOWS)) {
        diskLabelWin = disksLabel;
        disksComboBoxWin = disksComboBox;
    } else {
        // 
        // Unix (Mac): Empty component instead of combo box
        diskLabelWin = new JLabel("");
        disksComboBoxWin = new JLabel("");
    }
    disksComboBox.setToolTipText("List of root directories.");
    // Lay out components in panelTop
    panelTopLayout.setAutoCreateGaps(false);
    panelTopLayout.setAutoCreateContainerGaps(false);
    panelTopLayout.setHorizontalGroup(panelTopLayout.createParallelGroup(Alignment.LEADING).addGroup(panelTopLayout.createSequentialGroup().addComponent(userNameLabel).addComponent(userNameTextField).addComponent(hostLabel).addComponent(hostTextField).addComponent(connectReconnectButton).addGap(5).addComponent(libraryPatternLabel).addComponent(libraryPatternTextField).addGap(5).addComponent(filePatternLabel).addComponent(filePatternTextField).addGap(5).addComponent(memberPatternLabel).addComponent(memberPatternTextField).addGap(5).addComponent(sourceTypeLabel).addComponent(sourceTypeComboBox)).addGroup(panelTopLayout.createSequentialGroup().addComponent(pcCharsetLabel).addComponent(pcCharComboBox).addComponent(ibmCcsidLabel).addComponent(ibmCcsidComboBox).addComponent(sourceRecordLengthLabel).addComponent(sourceRecordLengthTextField).addComponent(sourceRecordPrefixLabel).addComponent(sourceRecordPrefixCheckBox).addComponent(overwriteOutputFileLabel).addComponent(overwriteOutputFileCheckBox).addComponent(diskLabelWin).addComponent(disksComboBoxWin)));
    panelTopLayout.setVerticalGroup(panelTopLayout.createSequentialGroup().addGroup(panelTopLayout.createParallelGroup(Alignment.CENTER).addComponent(userNameLabel).addComponent(userNameTextField).addComponent(hostLabel).addComponent(hostTextField).addComponent(connectReconnectButton).addGap(5).addComponent(libraryPatternLabel).addComponent(libraryPatternTextField).addGap(5).addComponent(filePatternLabel).addComponent(filePatternTextField).addGap(5).addComponent(memberPatternLabel).addComponent(memberPatternTextField).addGap(5).addComponent(sourceTypeLabel).addComponent(sourceTypeComboBox)).addGroup(panelTopLayout.createParallelGroup(Alignment.CENTER).addComponent(pcCharsetLabel).addComponent(pcCharComboBox).addComponent(ibmCcsidLabel).addComponent(ibmCcsidComboBox).addComponent(sourceRecordLengthLabel).addComponent(sourceRecordLengthTextField).addComponent(sourceRecordPrefixLabel).addComponent(sourceRecordPrefixCheckBox).addComponent(overwriteOutputFileLabel).addComponent(overwriteOutputFileCheckBox).addComponent(diskLabelWin).addComponent(disksComboBoxWin)));
    panelTop.setLayout(panelTopLayout);
    panelPathLeft.add(leftPathLabel);
    leftPathComboBox.setEditable(true);
    panelPathLeft.add(leftPathComboBox);
    panelPathRight.add(rightPathLabel);
    rightPathComboBox.setEditable(true);
    panelPathRight.add(rightPathComboBox);
    panelLeft = new JPanel();
    panelLeft.setLayout(new BorderLayout());
    panelLeft.add(panelPathLeft, BorderLayout.NORTH);
    panelLeft.add(scrollPaneLeft, BorderLayout.CENTER);
    panelRight = new JPanel();
    panelRight.setLayout(new BorderLayout());
    panelRight.add(panelPathRight, BorderLayout.NORTH);
    panelRight.add(scrollPaneRight, BorderLayout.CENTER);
    // Split pane inner - divided by horizontal divider
    splitPaneInner = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    splitPaneInner.setLeftComponent(panelLeft);
    splitPaneInner.setRightComponent(panelRight);
    splitPaneInner.setDividerSize(6);
    splitPaneInner.setBorder(BorderFactory.createEmptyBorder());
    // Scroll pane for message list
    scrollMessagePane.setBorder(BorderFactory.createEmptyBorder());
    // Split pane outer - divided by vertical divider
    splitPaneOuter = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    splitPaneOuter.setTopComponent(splitPaneInner);
    splitPaneOuter.setBottomComponent(scrollMessagePane);
    splitPaneOuter.setDividerSize(6);
    splitPaneOuter.setBorder(BorderFactory.createEmptyBorder());
    // This listener keeps the scroll pane at the LAST MESSAGE.
    messageScrollPaneAdjustmentListenerMax = new MessageScrollPaneAdjustmentListenerMax();
    // List of messages for placing into message scroll pane
    messageList = new JList<String>();
    // Decision what color the message will get
    messageList.setCellRenderer(new DefaultListCellRenderer() {

        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            if (value.toString().startsWith("Comp")) {
                this.setForeground(DIM_BLUE);
            } else if (value.toString().startsWith("Err")) {
                this.setForeground(DIM_RED);
            } else if (value.toString().startsWith("Info")) {
                this.setForeground(Color.GRAY);
            } else if (value.toString().startsWith("Wait")) {
                this.setForeground(DIM_PINK);
            } else {
                this.setForeground(Color.BLACK);
            }
            return component;
        }
    });
    // Build messageTable and put it to scrollMessagePane and panelMessages
    buildMessageList();
    // Create left tree showing local file system
    // ----------------
    leftRoot = properties.getProperty("LEFT_PATH");
    // ----------------------------------------------
    // Create new left side
    // ----------------------------------------------
    // Create split panes containing the PC file tree on the left side of the window
    createNewLeftSide(leftRoot);
    // Lay out the window components using GroupLayout
    // -----------------------------
    globalPanelLayout.setAutoCreateGaps(false);
    globalPanelLayout.setAutoCreateContainerGaps(false);
    globalPanelLayout.setHorizontalGroup(globalPanelLayout.createSequentialGroup().addGroup(globalPanelLayout.createParallelGroup().addComponent(panelTop).addComponent(splitPaneOuter)));
    globalPanelLayout.setVerticalGroup(globalPanelLayout.createParallelGroup().addGroup(globalPanelLayout.createSequentialGroup().addComponent(panelTop).addComponent(splitPaneOuter)));
    // Create a global panel to wrap the layout
    globalPanel.setLayout(globalPanelLayout);
    // Set border to the global panel - before it is visible
    globalPanel.setBorder(BorderFactory.createLineBorder(globalPanel.getBackground(), borderWidth));
    // When the split pane is visible - can divide it by percentage
    // 50 %
    double splitPaneInnerDividerLoc = 0.50d;
    // Percentage to reveal the first message line height when the scroll pane is full
    double splitPaneOuterDividerLoc = 0.835d;
    splitPaneInner.setDividerLocation(splitPaneInnerDividerLoc);
    splitPaneOuter.setDividerLocation(splitPaneOuterDividerLoc);
    // Stabilize vertical divider always in the middle
    splitPaneInner.setResizeWeight(0.5);
    // Register WindowListener for storing X and Y coordinates to properties
    addWindowListener(new MainWindowAdapter());
    // Register HelpWindow menu item listener
    helpMenuItemEN.addActionListener(ae -> {
        String command = ae.getActionCommand();
        if (command.equals("Help English")) {
            if (Desktop.isDesktopSupported()) {
                String uri = Paths.get(System.getProperty("user.dir"), "helpfiles", "IBMiProgTool_doc_EN.pdf").toString();
                // Replace backslashes by forward slashes in Windows
                uri = uri.replace('\\', '/');
                uri = uri.replace(" ", "%20");
                try {
                    // Invoke the standard browser in the operating system
                    Desktop.getDesktop().browse(new URI("file://" + uri));
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        }
    });
    // Register HelpWindow menu item listener
    helpMenuItemCZ.addActionListener(ae -> {
        String command = ae.getActionCommand();
        if (command.equals("Nápověda česky")) {
            if (Desktop.isDesktopSupported()) {
                String uri = Paths.get(System.getProperty("user.dir"), "helpfiles", "IBMiProgTool_doc_CZ.pdf").toString();
                // Replace backslashes by forward slashes in Windows
                uri = uri.replace('\\', '/');
                uri = uri.replace(" ", "%20");
                try {
                    // Invoke the standard browser in the operating system
                    Desktop.getDesktop().browse(new URI("file://" + uri));
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        }
    });
    // Register HelpWindow menu item listener
    helpMenuItemRPGIII.addActionListener(ae -> {
        String command = ae.getActionCommand();
        if (command.equals("RPG III forms")) {
            if (Desktop.isDesktopSupported()) {
                String uri = Paths.get(System.getProperty("user.dir"), "helpfiles", "RPG_III_forms.pdf").toString();
                // Replace backslashes by forward slashes in Windows
                uri = uri.replace('\\', '/');
                try {
                    // Invoke the standard browser in the operating system
                    Desktop.getDesktop().browse(new URI("file://" + uri));
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        }
    });
    // Register HelpWindow menu item listener
    helpMenuItemRPGIV.addActionListener(ae -> {
        String command = ae.getActionCommand();
        if (command.equals("RPG IV forms")) {
            if (Desktop.isDesktopSupported()) {
                String uri = Paths.get(System.getProperty("user.dir"), "helpfiles", "RPG_IV_forms.pdf").toString();
                // Replace backslashes by forward slashes in Windows
                uri = uri.replace('\\', '/');
                uri = uri.replace(" ", "%20");
                try {
                    // Invoke the standard browser in the operating system
                    Desktop.getDesktop().browse(new URI("file://" + uri));
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        }
    });
    // Register HelpWindow menu item listener
    helpMenuItemCOBOL.addActionListener(ae -> {
        String command = ae.getActionCommand();
        if (command.equals("COBOL form")) {
            if (Desktop.isDesktopSupported()) {
                String uri = Paths.get(System.getProperty("user.dir"), "helpfiles", "COBOL_form.pdf").toString();
                // Replace backslashes by forward slashes in Windows
                uri = uri.replace('\\', '/');
                uri = uri.replace(" ", "%20");
                try {
                    // Invoke the standard browser in the operating system
                    Desktop.getDesktop().browse(new URI("file://" + uri));
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        }
    });
    // Register HelpWindow menu item listener
    helpMenuItemDDS.addActionListener(ae -> {
        String command = ae.getActionCommand();
        if (command.equals("DDS forms")) {
            if (Desktop.isDesktopSupported()) {
                String uri = Paths.get(System.getProperty("user.dir"), "helpfiles", "DDS_forms.pdf").toString();
                // Replace backslashes by forward slashes in Windows
                uri = uri.replace('\\', '/');
                uri = uri.replace(" ", "%20");
                try {
                    // Invoke the standard browser in the operating system
                    Desktop.getDesktop().browse(new URI("file://" + uri));
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        }
    });
    // Set left path string as selected in the left combo box
    leftPathComboBox.setSelectedItem(leftPathString);
    // Set also right path string in the right combo box
    rightPathComboBox.setSelectedItem(rightPathString);
    // 
    // User name text field action
    // ---------------------------
    userNameTextField.addActionListener(ae -> {
        userNameTextField.setText(userNameTextField.getText().toUpperCase());
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            properties.setProperty("USERNAME", userNameTextField.getText());
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
            refreshWindow();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Host text field action
    // ----------------------
    hostTextField.addActionListener(ae -> {
        hostTextField.setText(hostTextField.getText());
        // Connect or reconnect the server
        connectReconnectRefresh();
    });
    // 
    // Source Type combo box item listener
    // ---------------------
    sourceTypeComboBox.addItemListener(il -> {
        // JComboBox<String> source = new
        // JComboBox<String>((String[])il.getSource());
        JComboBox<String[]> source = (JComboBox) il.getSource();
        sourceType = (String) source.getSelectedItem();
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            properties.setProperty("SOURCE_TYPE", sourceType);
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Library pattern text field action
    // -------------------------
    libraryPatternTextField.addActionListener(ae -> {
        libraryPatternTextField.setText(libraryPatternTextField.getText().toUpperCase());
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            properties.setProperty("LIBRARY_PATTERN", libraryPatternTextField.getText());
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
            connectReconnectRefresh();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Source file pattern text field action
    // ------------------------------------
    filePatternTextField.addActionListener(ae -> {
        filePatternTextField.setText(filePatternTextField.getText().toUpperCase());
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            properties.setProperty("FILE_PATTERN", filePatternTextField.getText());
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
            connectReconnectRefresh();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Member pattern text field action
    // -------------------------------
    memberPatternTextField.addActionListener(ae -> {
        memberPatternTextField.setText(memberPatternTextField.getText().toUpperCase());
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            properties.setProperty("MEMBER_PATTERN", memberPatternTextField.getText());
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
            connectReconnectRefresh();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Source record length text field action
    // --------------------------------------
    sourceRecordLengthTextField.addActionListener(ae -> {
        String srcRecLen = sourceRecordLengthTextField.getText();
        try {
            Integer.parseInt(srcRecLen);
        } catch (NumberFormatException nfe) {
            // If the user enters non-integer text, take default value
            srcRecLen = "80";
        }
        sourceRecordLengthTextField.setText(srcRecLen);
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.setProperty("SOURCE_RECORD_LENGTH", srcRecLen);
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Connect/Reconnect button action
    // -------------------------------
    connectReconnectButton.addActionListener(ae -> {
        connectReconnectRefresh();
    });
    // 
    // PC charset combo box
    // --------------------
    // Select charset name from the list in combo box - listener
    pcCharComboBox.addItemListener(il -> {
        JComboBox source = (JComboBox) il.getSource();
        pcCharset = (String) source.getSelectedItem();
        if (!pcCharset.equals("*DEFAULT")) {
            // Check if charset is valid
            try {
                Charset.forName(pcCharset);
            } catch (IllegalCharsetNameException | UnsupportedCharsetException charset) {
                // If pcCharset is invalid, take ISO-8859-1
                pcCharset = "ISO-8859-1";
                pcCharComboBox.setSelectedItem(pcCharset);
            }
        }
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            properties.setProperty("PC_CHARSET", pcCharset);
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    });
    // 
    // IBM i CCSID combo box item listener
    // ---------------------
    ibmCcsidComboBox.addItemListener(il -> {
        JComboBox source = (JComboBox) il.getSource();
        ibmCcsid = (String) source.getSelectedItem();
        if (!ibmCcsid.equals("*DEFAULT")) {
            try {
                ibmCcsidInt = Integer.parseInt(ibmCcsid);
            } catch (Exception exc) {
                exc.printStackTrace();
                ibmCcsid = "37";
                ibmCcsidInt = 37;
                ibmCcsidComboBox.setSelectedItem(ibmCcsid);
            }
        }
        // Create the updated text file in directory "paramfiles"
        try {
            infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
            properties.load(infile);
            infile.close();
            outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
            properties.setProperty("IBM_CCSID", ibmCcsid);
            properties.store(outfile, PROP_COMMENT);
            outfile.close();
        } catch (Exception exc) {
            exc.printStackTrace();
        }
    });
    // 
    // Source record pattern check box - Yes = "Y", No = ""
    // ---------------------------------------------------
    sourceRecordPrefixCheckBox.addItemListener(il -> {
        Object source = il.getSource();
        if (source == sourceRecordPrefixCheckBox) {
            String check;
            if (sourceRecordPrefixCheckBox.isSelected()) {
                check = "Y";
            } else {
                check = "";
            }
            // Create the updated text file in directory "paramfiles"
            try {
                infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
                properties.load(infile);
                infile.close();
                outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
                properties.setProperty("SOURCE_RECORD_PREFIX", check);
                properties.store(outfile, PROP_COMMENT);
                outfile.close();
            } catch (Exception exc) {
                exc.printStackTrace();
            }
        }
    });
    // 
    // Overwrite output file(s) check box - Yes = "Y", No = ""
    // -------------------------------------------------------
    overwriteOutputFileCheckBox.addItemListener(il -> {
        Object source = il.getSource();
        if (source == overwriteOutputFileCheckBox) {
            String check;
            if (overwriteOutputFileCheckBox.isSelected()) {
                check = "Y";
            } else {
                check = "";
            }
            // Create the updated text file in directory "paramfiles"
            try {
                infile = Files.newBufferedReader(parPath, Charset.forName(encoding));
                properties.load(infile);
                infile.close();
                outfile = Files.newBufferedWriter(parPath, Charset.forName(encoding));
                properties.setProperty("OVERWRITE_FILE", check);
                properties.store(outfile, PROP_COMMENT);
                outfile.close();
            } catch (Exception exc) {
                exc.printStackTrace();
            }
        }
    });
    // 
    // Left popup menu on Right mouse click
    // ====================================
    // 
    // Find text in multiple PC files
    // 
    findInPcFiles.addActionListener(ae -> {
        copySourceTree = leftTree;
        // Set clipboard path string for find operation
        clipboardPathStrings = leftPathStrings;
        SearchWindow searchWindow = new SearchWindow(remoteServer, this, "PC");
    });
    // 
    // Send to remote server (IBM i)
    // 
    copyFromLeft.addActionListener(ae -> {
        copySourceTree = leftTree;
        // Set clipboard path string for paste operation
        clipboardPathStrings = leftPathStrings;
    });
    // 
    // Receive from remote server (IBM i) or PC itself
    // 
    pasteToLeft.addActionListener(ae -> {
        if (copySourceTree == rightTree) {
            row = "Wait: Copying from IBM i to PC . . .";
            msgVector.add(row);
            showMessages();
            // Paste from IBM i to PC
            ParallelCopy_IBMi_PC parallelCopy_IMBI_PC = new ParallelCopy_IBMi_PC(remoteServer, clipboardPathStrings, leftPathStrings[0], null, this);
            parallelCopy_IMBI_PC.execute();
        } else if (copySourceTree == leftTree) {
            row = "Wait: Copying from PC to PC . . .";
            msgVector.add(row);
            showMessages(nodes);
            // Paste from PC to PC
            ParallelCopy_PC_PC parallelCopy_PC_PC = new ParallelCopy_PC_PC(clipboardPathStrings, leftPathStrings[0], null, this);
            parallelCopy_PC_PC.execute();
        }
    });
    // Insert spooled file that is copied from directory *workfiles* and, renamed,
    // into selected directory *targetPathString*
    insertSpooledFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        sourcePathString = Paths.get(System.getProperty("user.dir"), "workfiles", "SpooledFile.txt").toString();
        targetPathString = leftPathStrings[0];
        copyAndRenameFile("SpooledFile.txt");
        reloadLeftSide(nodes);
    });
    // Display PC file
    displayPcFile.addActionListener(ae -> {
        clipboardPathStrings = leftPathStrings;
        // Display all selected files
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            sourcePathString = clipboardPathStrings[idx];
            JTextArea textArea = new JTextArea();
            // This is a way to display a PC file directly from Java:
            DisplayFile dspf = new DisplayFile(textArea, this);
            dspf.displayPcFile(sourcePathString);
        }
    });
    // Edit PC file
    editPcFile.addActionListener(ae -> {
        clipboardPathStrings = leftPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            sourcePathString = clipboardPathStrings[idx];
            JTextArea textArea = new JTextArea();
            JTextArea textArea2 = new JTextArea();
            EditFile edtf = new EditFile(remoteServer, this, textArea, textArea2, leftPathString, "rewritePcFile");
        }
    });
    // Rename PC file
    renamePcFile.addActionListener(ae -> {
        RenamePcObject rnmpf = new RenamePcObject(this, pcFileSep, currentX, currentY);
        rnmpf.renamePcObject(leftPathString);
    });
    // Create PC directory
    createPcDirectory.addActionListener(ae -> {
        clipboardPathStrings = leftPathStrings;
        if (clipboardPathStrings.length > 0) {
            leftPathString = clipboardPathStrings[0];
            CreateAndDeleteInPC cpcd = new CreateAndDeleteInPC(this, "createPcDirectory", currentX, currentY);
            cpcd.createAndDeleteInPC();
            reloadLeftSide(nodes);
        }
    });
    // Create PC file
    createPcFile.addActionListener(ae -> {
        CreateAndDeleteInPC cpcf = new CreateAndDeleteInPC(this, "createPcFile", currentX, currentY);
        cpcf.createAndDeleteInPC();
        reloadLeftSide(nodes);
    });
    // Move PC objects to trash
    movePcObjectToTrash.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Move selected objects to trash
        // ------------------------------
        // Set clipboard path strings for paste operation
        clipboardPathStrings = leftPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            // Set path string for the following class
            leftPathString = clipboardPathStrings[idx];
            // Move one object to trash
            CreateAndDeleteInPC dpco = new CreateAndDeleteInPC(this, "movePcObjectToTrash", currentX, currentY);
            dpco.createAndDeleteInPC();
        }
        // Remove selected nodes
        TreePath[] paths = leftTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            leftNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            leftTreeModel.removeNodeFromParent(leftNode);
        }
    });
    // 
    // Right popup menu on Right mouse click
    // =====================================
    // 
    // Find text in multiple IFS files
    // 
    findInIfsFiles.addActionListener(ae -> {
        copySourceTree = rightTree;
        // Set clipboard path string for find operation
        clipboardPathStrings = rightPathStrings;
        SearchWindow searchWindow = new SearchWindow(remoteServer, this, "IFS");
    });
    // Send to PC or IBM i itself
    copyFromRight.addActionListener(ae -> {
        copySourceTree = rightTree;
        // Set clipboard path string for paste operation
        clipboardPathStrings = rightPathStrings;
    });
    // Receive from PC or IBM i itself
    // -------------------------------
    pasteToRight.addActionListener(ae -> {
        // This listener keeps the scroll pane at the LAST MESSAGE.
        // It is removed at the end of the method of the background task.
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        sourcePathString = clipboardPathString;
        targetPathString = rightPathStrings[0];
        if (copySourceTree == rightTree) {
            // Paste from IBM i to IBM i
            row = "Wait: Copying from IBM i to IBM i . . .";
            msgVector.add(row);
            showMessages();
            ParallelCopy_IBMi_IBMi parallelCopy_IMBI_IBMI = new ParallelCopy_IBMi_IBMi(remoteServer, clipboardPathStrings, targetPathString, null, this);
            parallelCopy_IMBI_IBMI.execute();
        } else if (copySourceTree == leftTree) {
            // Paste from PC to IBM i
            row = "Wait: Copying from PC to IBM i . . .";
            msgVector.add(row);
            showMessages();
            ParallelCopy_PC_IBMi parallelCopy_PC_IBMI = new ParallelCopy_PC_IBMi(remoteServer, clipboardPathStrings, targetPathString, null, this);
            parallelCopy_PC_IBMI.execute();
        }
    });
    // Copy library
    copyLibrary.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "copyLibrary", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
        reloadRightSide();
    });
    // Clear library
    clearLibrary.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Set clipboard path strings for paste operation
        clipboardPathStrings = rightPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            rightPathString = clipboardPathStrings[idx];
            ifsFile = new IFSFile(remoteServer, rightPathString);
            // Clear selected libraries
            // ------------------------
            CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "clearLibrary", currentX, currentY);
            crtdlt.createAndDeleteInIBMi(currentX, currentY);
        }
        // Reload nodes of cleared libraries
        TreePath[] paths = rightTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            rightNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            reloadRightSide();
        }
    });
    // Delete library
    deleteLibrary.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Set clipboard path strings for paste operation
        clipboardPathStrings = rightPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            rightPathString = clipboardPathStrings[idx];
            ifsFile = new IFSFile(remoteServer, rightPathString);
            // Delete selected libraries
            // -------------------------
            CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "deleteLibrary", currentX, currentY);
            crtdlt.createAndDeleteInIBMi(currentX, currentY);
        }
        // Remove selected nodes
        TreePath[] paths = rightTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            rightNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            rightTreeModel.removeNodeFromParent(rightNode);
        }
    });
    // Create IFS directory in a parent directory
    createIfsDirectory.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "createIfsDirectory", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
        reloadRightSide();
    });
    // Create IFS directory in a parent directory
    createIfsFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "createIfsFile", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
        reloadRightSide();
    });
    // Create AS400 Source Physical File
    createSourcePhysicalFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "createSourcePhysicalFile", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
        reloadRightSide();
    });
    // Create AS400 Source Member
    createSourceMember.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "createSourceMember", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
        reloadRightSide();
    });
    // Create Save File
    createSaveFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "createSaveFile", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
        reloadRightSide();
    });
    // Clear Save File
    clearSaveFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        ifsFile = new IFSFile(remoteServer, rightPathString);
        CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "clearSaveFile", currentX, currentY);
        crtdlt.createAndDeleteInIBMi(currentX, currentY);
    });
    // Delete IFS object (directory or file)
    deleteIfsObject.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Delete selected objects
        // -----------------------
        // Set clipboard path strings for paste operation
        clipboardPathStrings = rightPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            rightPathString = clipboardPathStrings[idx];
            ifsFile = new IFSFile(remoteServer, rightPathString);
            CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "deleteIfsObject", currentX, currentY);
            crtdlt.createAndDeleteInIBMi(currentX, currentY);
        }
        // Remove selected nodes
        TreePath[] paths = rightTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            rightNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            rightTreeModel.removeNodeFromParent(rightNode);
        }
    });
    // Delete AS400 Source Member
    deleteSourceMember.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Set clipboard path strings for paste operation
        clipboardPathStrings = rightPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            rightPathString = clipboardPathStrings[idx];
            ifsFile = new IFSFile(remoteServer, rightPathString);
            // Delete selected objects
            // -----------------------
            CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "deleteSourceMember", currentX, currentY);
            crtdlt.createAndDeleteInIBMi(currentX, currentY);
        }
        // Remove selected nodes
        TreePath[] paths = rightTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            rightNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            rightTreeModel.removeNodeFromParent(rightNode);
        }
    });
    // Delete AS400 Source Physical File
    deleteSourcePhysicalFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Set clipboard path strings for paste operation
        clipboardPathStrings = rightPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            rightPathString = clipboardPathStrings[idx];
            ifsFile = new IFSFile(remoteServer, rightPathString);
            // Delete selected objects
            // -----------------------
            CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "deleteSourcePhysicalFile", currentX, currentY);
            crtdlt.createAndDeleteInIBMi(currentX, currentY);
        }
        // Remove selected nodes
        TreePath[] paths = rightTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            rightNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            rightTreeModel.removeNodeFromParent(rightNode);
        }
    });
    // Delete Save File
    deleteSaveFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        // Set clipboard path strings for paste operation
        clipboardPathStrings = rightPathStrings;
        for (int idx = 0; idx < clipboardPathStrings.length; idx++) {
            rightPathString = clipboardPathStrings[idx];
            ifsFile = new IFSFile(remoteServer, rightPathString);
            // Delete selected objects
            // -----------------------
            CreateAndDeleteInIBMi crtdlt = new CreateAndDeleteInIBMi(remoteServer, ifsFile, this, "deleteSaveFile", currentX, currentY);
            crtdlt.createAndDeleteInIBMi(currentX, currentY);
        }
        // Remove selected nodes
        TreePath[] paths = rightTree.getSelectionPaths();
        for (int indx = 0; indx < paths.length; indx++) {
            rightNode = (DefaultMutableTreeNode) (paths[indx].getLastPathComponent());
            rightTreeModel.removeNodeFromParent(rightNode);
        }
    });
    // Work with spooled files
    workWithSpooledFiles.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        String className = this.getClass().getSimpleName();
        // first "false" stands for *ALL users (not *CURRENT user),
        // second "true" stands for "create spooled file table".
        WrkSplFCall wwsp = new WrkSplFCall(remoteServer, this, rightPathString, // not *CURRENT user
        false, currentX, currentY, className, // create spooled file table
        true);
        wwsp.execute();
    });
    // Display IFS file
    displayIfsFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        JTextArea textArea = new JTextArea();
        DisplayFile dspf = new DisplayFile(textArea, this);
        dspf.displayIfsFile(remoteServer, rightPathString);
    });
    // Edit IFS file with source types suffix (e.g. .CLLE, .RPGLE, etc.)
    editIfsFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        JTextArea textArea = new JTextArea();
        JTextArea textArea2 = new JTextArea();
        EditFile edtf = new EditFile(remoteServer, this, textArea, textArea2, rightPathString, "rewriteIfsFile");
    });
    // Rename IFS file
    renameIfsFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        RenameIfsObject rnmifsf = new RenameIfsObject(remoteServer, this, currentX, currentY);
        rnmifsf.renameIfsObject(rightPathString);
    });
    // Compile IFS file
    compileIfsFile.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        if (compile == null) {
            compile = new Compile(remoteServer, this, rightPathString, true);
        }
        // "true" stands for "IFS file" as a source text
        compile.compile(rightPathString, true);
    // compile = null;
    });
    // Display IBM i Source Member
    displaySourceMember.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        JTextArea textArea = new JTextArea();
        DisplayFile dspf = new DisplayFile(textArea, this);
        dspf.displaySourceMember(remoteServer, rightPathString);
    });
    // Edit IBM i Source Member
    editSourceMember.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        JTextArea textArea = new JTextArea();
        JTextArea textArea2 = new JTextArea();
        EditFile edtf = new EditFile(remoteServer, this, textArea, textArea2, rightPathString, "rewriteSourceMember");
    });
    // Compile Source Member
    compileSourceMember.addActionListener(ae -> {
        scrollMessagePane.getVerticalScrollBar().addAdjustmentListener(messageScrollPaneAdjustmentListenerMax);
        if (compile == null) {
            compile = new Compile(remoteServer, this, rightPathString, false);
        }
        // "false" means "IFS file" is NOT a source text
        compile.compile(rightPathString, false);
    // compile = null;
    });
    // 
    // Find text in multiple Source Members
    // 
    findInSourceMembers.addActionListener(ae -> {
        copySourceTree = rightTree;
        // Set clipboard path string for find operation
        clipboardPathStrings = rightPathStrings;
        SearchWindow searchWindow = new SearchWindow(remoteServer, this, "MBR");
    });
    // =================
    if (operatingSystem.equals(WINDOWS)) {
        // Item listener for DISKS ComboBox reacts on item selection with
        // the
        // mouse
        disksComboBox.addItemListener(il -> {
            JComboBox<String> comboBox = (JComboBox) il.getSource();
            leftPathString = (String) comboBox.getSelectedItem();
            // Remove the old and create a new combo box for left path selection
            panelPathLeft.remove(leftPathComboBox);
            leftPathComboBox = new JComboBox<>();
            leftPathComboBox.setEditable(true);
            panelPathLeft.add(leftPathComboBox);
            leftPathComboBox.addItem(leftPathString);
            leftPathComboBox.setSelectedIndex(0);
            // Register a new ActionListener to the new combo box
            leftPathComboBox.addActionListener(leftPathActionListener);
            // Get the first item (disk symbol or file system root) from the
            // combo box and make it leftRoot
            leftRoot = leftPathString;
            // Make the disk symbol also firstLeftRootSymbol
            firstLeftRootSymbol = leftPathString;
            // Clear and set the tree map with leftRoot and row number 0
            leftTreeMap.clear();
            leftTreeMap.put(leftRoot, 0);
            // Create a new tree and table on the left side of the window
            leftRootChanged = true;
            createNewLeftSide(leftPathString);
        });
    }
    // End Windows
    // Processing continues for both Windows and Unix:
    // 
    // Register action listener for LEFT PATH ComboBox reacts on text change
    // in its input field (first time)
    leftPathComboBox.addActionListener(leftPathActionListener);
    // Component listener reacting to WINDOW RESIZING
    ComponentListener resizingListener = new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent componentEvent) {
            windowWidth = componentEvent.getComponent().getWidth();
            windowHeight = componentEvent.getComponent().getHeight();
            // 50 %
            double splitPaneInnerDividerLoc = 0.50d;
            // int splitPaneInnerDividerLoc = (windowWidth - (2 * borderWidth + 5)) / 2;
            splitPaneInner.setDividerLocation(splitPaneInnerDividerLoc);
        }
    };
    // Register window resizing listener
    addComponentListener(resizingListener);
    // Add the global panel to the frame, NOT container
    cont.add(globalPanel);
    add(globalPanel);
    // Set initial size and width of the window
    setSize(windowWidth, windowHeight);
    // Set window coordinates from application properties
    setLocation(mainWindowX, mainWindowY);
    // Show the window on the screen
    setVisible(true);
    // Do not pack
    pack();
}
Also used : JPanel(javax.swing.JPanel) ComponentListener(java.awt.event.ComponentListener) JTextArea(javax.swing.JTextArea) BorderLayout(java.awt.BorderLayout) DefaultListCellRenderer(javax.swing.DefaultListCellRenderer) UnsupportedCharsetException(java.nio.charset.UnsupportedCharsetException) ComponentEvent(java.awt.event.ComponentEvent) JSplitPane(javax.swing.JSplitPane) IFSFile(com.ibm.as400.access.IFSFile) BoxLayout(javax.swing.BoxLayout) URI(java.net.URI) IllegalCharsetNameException(java.nio.charset.IllegalCharsetNameException) GroupLayout(javax.swing.GroupLayout) JMenuItem(javax.swing.JMenuItem) Component(java.awt.Component) JComponent(javax.swing.JComponent) ComponentAdapter(java.awt.event.ComponentAdapter) JScrollPane(javax.swing.JScrollPane) JComboBox(javax.swing.JComboBox) JLabel(javax.swing.JLabel) IOException(java.io.IOException) Point(java.awt.Point) UnsupportedCharsetException(java.nio.charset.UnsupportedCharsetException) IllegalCharsetNameException(java.nio.charset.IllegalCharsetNameException) IOException(java.io.IOException) TreePath(javax.swing.tree.TreePath) JMenuBar(javax.swing.JMenuBar) JMenu(javax.swing.JMenu)

Example 83 with GroupLayout

use of javax.swing.GroupLayout in project IBMiProgTool by vzupka.

the class Compile method createGlobalPanelLayout.

/**
 */
protected void createGlobalPanelLayout() {
    globalPanelLayout = new GroupLayout(globalPanel);
    globalPanelLayout.setAutoCreateGaps(false);
    globalPanelLayout.setAutoCreateContainerGaps(false);
    // Set and create the global panel layout
    globalPanel.setLayout(globalPanelLayout);
    globalPanelLayout.setHorizontalGroup(globalPanelLayout.createSequentialGroup().addGroup(globalPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(titlePanel).addComponent(commandSelectionPanel).addComponent(parameterPanel).addComponent(commandPanel).addComponent(buttonPanel).addComponent(scrollMessagePane)));
    globalPanelLayout.setVerticalGroup(globalPanelLayout.createSequentialGroup().addGroup(globalPanelLayout.createSequentialGroup().addComponent(titlePanel).addComponent(commandSelectionPanel).addComponent(parameterPanel).addComponent(commandPanel).addComponent(buttonPanel).addComponent(scrollMessagePane)));
    globalPanel.setBorder(BorderFactory.createLineBorder(globalPanel.getBackground(), 5));
}
Also used : GroupLayout(javax.swing.GroupLayout)

Example 84 with GroupLayout

use of javax.swing.GroupLayout in project briefcase by opendatakit.

the class MainFormUploaderWindow method initialize.

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 680, 206);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel lblFormDefinitionFile = new JLabel("Form Definition to upload:");
    txtFormDefinitionFile = new JTextField();
    txtFormDefinitionFile.setFocusable(false);
    txtFormDefinitionFile.setEditable(false);
    txtFormDefinitionFile.setColumns(10);
    btnChoose = new JButton("Choose...");
    btnChoose.addActionListener(new FormDefinitionActionListener());
    txtDestinationName = new JTextField();
    txtDestinationName.setFocusable(false);
    txtDestinationName.setEditable(false);
    txtDestinationName.setColumns(10);
    btnChooseServer = new JButton("Configure...");
    btnChooseServer.addActionListener(new DestinationActionListener());
    lblUploading = new JLabel("");
    btnDetails = new JButton("Details...");
    btnDetails.addActionListener(__ -> {
        if (fs != null) {
            ScrollingStatusListDialog.showDialog(MainFormUploaderWindow.this.frame, fs.getFormDefinition(), fs.getStatusHistory());
        }
    });
    btnUploadForm = new JButton("Upload Form");
    btnUploadForm.addActionListener(__ -> {
        setActiveTransferState(true);
        File formDefn = new File(txtFormDefinitionFile.getText());
        TransferAction.uploadForm(MainFormUploaderWindow.this.frame.getOwner(), destinationServerInfo, terminationFuture, formDefn, fs);
    });
    btnCancel = new JButton("Cancel");
    btnCancel.addActionListener(__ -> terminationFuture.markAsCancelled(new TransferAbortEvent("Form upload cancelled by user.")));
    btnClose = new JButton("Close");
    btnClose.addActionListener(__ -> {
        if (transferStateActive) {
            if (JOptionPane.YES_OPTION != JOptionPane.showOptionDialog(frame, "An upload is in progress. Are you sure you want to abort and exit?", "Confirm Stop Form Upload", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, null, null)) {
                // no-op
                return;
            }
            terminationFuture.markAsCancelled(new TransferAbortEvent("User closes window"));
        }
        frame.setVisible(false);
        frame.dispose();
        System.exit(0);
    });
    JLabel lblUploadToServer = new JLabel("Upload to server:");
    GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
    groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup().addContainerGap().addGroup(groupLayout.createParallelGroup(Alignment.LEADING).addComponent(lblFormDefinitionFile).addComponent(lblUploadToServer).addComponent(lblUploading)).addPreferredGap(ComponentPlacement.RELATED).addGroup(groupLayout.createParallelGroup(Alignment.LEADING).addComponent(txtFormDefinitionFile, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE).addComponent(txtDestinationName, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE).addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup().addComponent(btnDetails).addPreferredGap(ComponentPlacement.RELATED).addComponent(btnUploadForm).addPreferredGap(ComponentPlacement.RELATED).addComponent(btnCancel))).addPreferredGap(ComponentPlacement.RELATED).addGroup(groupLayout.createParallelGroup(Alignment.TRAILING).addGroup(groupLayout.createParallelGroup(Alignment.LEADING).addComponent(btnChoose, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE).addComponent(btnChooseServer, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)).addComponent(btnClose)).addContainerGap());
    groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout.createSequentialGroup().addContainerGap().addGroup(groupLayout.createParallelGroup(Alignment.BASELINE).addComponent(txtFormDefinitionFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(lblFormDefinitionFile).addComponent(btnChoose)).addPreferredGap(ComponentPlacement.RELATED).addGroup(groupLayout.createParallelGroup(Alignment.BASELINE).addComponent(lblUploadToServer).addComponent(txtDestinationName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent(btnChooseServer)).addPreferredGap(ComponentPlacement.UNRELATED, 10, Short.MAX_VALUE).addGroup(groupLayout.createParallelGroup(Alignment.BASELINE).addComponent(lblUploading).addComponent(btnDetails).addComponent(btnUploadForm).addComponent(btnCancel).addComponent(btnClose)).addContainerGap()));
    frame.getContentPane().setLayout(groupLayout);
    setActiveTransferState(false);
}
Also used : JFrame(javax.swing.JFrame) JButton(javax.swing.JButton) GroupLayout(javax.swing.GroupLayout) JLabel(javax.swing.JLabel) JTextField(javax.swing.JTextField) File(java.io.File) TransferAbortEvent(org.opendatakit.briefcase.model.TransferAbortEvent)

Example 85 with GroupLayout

use of javax.swing.GroupLayout in project briefcase by opendatakit.

the class MountedSDCardChooserDialog method rebuildPanel.

private void rebuildPanel() {
    GroupLayout groupLayout = new GroupLayout(radioPanel);
    // Get mounted drives that have the needed directory structures...
    List<File> mounts = FindDirectoryStructure.searchMountedDrives();
    // remove everything from the panel
    radioPanel.removeAll();
    while (radioGroup.getButtonCount() != 0) {
        AbstractButton rb = radioGroup.getElements().nextElement();
        radioGroup.remove(rb);
    }
    // construct the panel
    ParallelGroup leftAlignedHorizontals = groupLayout.createParallelGroup(Alignment.LEADING);
    SequentialGroup verticalGroup = groupLayout.createSequentialGroup();
    int len = 0;
    File oldDevice = odkDevice;
    JRadioButton activeButton = null;
    odkDevice = null;
    boolean first = true;
    for (File m : mounts) {
        String mountName = m.getAbsolutePath();
        JRadioButton mountButton = new JRadioButton(mountName, first);
        mountButton.setActionCommand(mountName);
        radioGroup.add(mountButton);
        mountButton.addActionListener(this);
        if (first) {
            verticalGroup.addContainerGap();
            odkDevice = new File(mountName);
            activeButton = mountButton;
        } else {
            verticalGroup.addPreferredGap(ComponentPlacement.RELATED);
        }
        // try to preserve original mount point selection
        if (oldDevice != null) {
            if (oldDevice.getAbsolutePath().startsWith(mountName)) {
                if (len < mountName.length()) {
                    len = mountName.length();
                    odkDevice = new File(mountName);
                    activeButton = mountButton;
                }
            }
        }
        leftAlignedHorizontals.addComponent(mountButton);
        verticalGroup.addComponent(mountButton);
        first = false;
    }
    if (first != true) {
        verticalGroup.addContainerGap();
    }
    // TODO: set the chosen device as selected.
    if (activeButton != null) {
        activeButton.setSelected(true);
    }
    groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup().addContainerGap().addGroup(leftAlignedHorizontals).addContainerGap());
    groupLayout.setVerticalGroup(verticalGroup);
    radioPanel.setLayout(groupLayout);
    pack();
}
Also used : ParallelGroup(javax.swing.GroupLayout.ParallelGroup) AbstractButton(javax.swing.AbstractButton) JRadioButton(javax.swing.JRadioButton) SequentialGroup(javax.swing.GroupLayout.SequentialGroup) GroupLayout(javax.swing.GroupLayout) File(java.io.File)

Aggregations

GroupLayout (javax.swing.GroupLayout)194 JPanel (javax.swing.JPanel)132 JLabel (javax.swing.JLabel)79 JButton (javax.swing.JButton)53 ActionEvent (java.awt.event.ActionEvent)42 JScrollPane (javax.swing.JScrollPane)39 ActionListener (java.awt.event.ActionListener)23 JTextField (javax.swing.JTextField)22 Dimension (java.awt.Dimension)21 AbstractAction (javax.swing.AbstractAction)20 JSeparator (javax.swing.JSeparator)15 JCheckBox (javax.swing.JCheckBox)14 ParallelGroup (javax.swing.GroupLayout.ParallelGroup)11 SequentialGroup (javax.swing.GroupLayout.SequentialGroup)11 JComboBox (javax.swing.JComboBox)10 JTable (javax.swing.JTable)10 Color (java.awt.Color)9 Font (java.awt.Font)9 PropertyChangeListener (java.beans.PropertyChangeListener)8 AfterInjection (org.baderlab.csplugins.enrichmentmap.AfterInjection)8