Search in sources :

Example 1 with SlickDarkScrollBarUI

use of net.mcreator.ui.laf.SlickDarkScrollBarUI in project MCreator by MCreator.

the class ProcedureGUI method initGUI.

@Override
protected void initGUI() {
    pane5.setOpaque(false);
    localVarsList.setOpaque(false);
    localVarsList.setCellRenderer(new LocalVariableListRenderer());
    localVarsList.setBorder(BorderFactory.createEmptyBorder());
    localVarsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JList<Dependency> dependenciesList = new JList<>(dependencies);
    dependenciesList.setOpaque(false);
    dependenciesList.setCellRenderer(new DependenciesListRenderer());
    dependenciesList.setBorder(BorderFactory.createEmptyBorder());
    dependenciesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JList<Dependency> dependenciesExtTrigList = new JList<>(dependenciesExtTrigger);
    dependenciesExtTrigList.setOpaque(false);
    dependenciesExtTrigList.setCellRenderer(new DependenciesListRenderer());
    dependenciesExtTrigList.setBorder(BorderFactory.createEmptyBorder());
    dependenciesExtTrigList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    returnType.setVisible(false);
    returnType.setOpaque(false);
    returnType.add("Center", returnTypeLabel);
    returnTypeLabel.setOpaque(true);
    returnTypeLabel.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    returnTypeLabel.setBorder(BorderFactory.createEmptyBorder(0, 7, 9, 0));
    ComponentUtils.deriveFont(returnType, 13);
    JToolBar bar4 = new JToolBar();
    bar4.setBorder(BorderFactory.createEmptyBorder(2, 2, 5, 0));
    bar4.setFloatable(false);
    bar4.setOpaque(false);
    bar4.add(ComponentUtils.deriveFont(L10N.label("elementgui.procedure.return_type"), 13));
    JPanel rettypeHeader = new JPanel(new GridLayout());
    rettypeHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    rettypeHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    rettypeHeader.add(bar4);
    returnType.add("North", rettypeHeader);
    returnType.setOpaque(false);
    returnType.setPreferredSize(new Dimension(150, 46));
    returnType.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")));
    triggerInfoPanel.setOpaque(false);
    triggerInfoPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 0));
    triggerInfoPanel.add("North", cancelableTriggerLabel);
    triggerInfoPanel.add("Center", hasResultTriggerLabel);
    triggerInfoPanel.add("South", sideTriggerLabel);
    JPanel localVarsPan = new JPanel(new BorderLayout());
    localVarsPan.setOpaque(false);
    JScrollPane scrollPane = new JScrollPane(localVarsList);
    scrollPane.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    scrollPane.getViewport().setOpaque(false);
    scrollPane.getVerticalScrollBar().setUnitIncrement(11);
    scrollPane.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPane.getVerticalScrollBar()));
    scrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0));
    scrollPane.getHorizontalScrollBar().setUnitIncrement(11);
    scrollPane.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPane.getHorizontalScrollBar()));
    scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8));
    scrollPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    localVarsPan.add("Center", scrollPane);
    JToolBar bar = new JToolBar();
    bar.setBorder(BorderFactory.createEmptyBorder(2, 2, 5, 0));
    bar.setFloatable(false);
    bar.setOpaque(false);
    bar.add(ComponentUtils.deriveFont(L10N.label("elementgui.procedure.local_variables"), 13));
    JButton addvar = new JButton(UIRES.get("16px.add.gif"));
    addvar.setContentAreaFilled(false);
    addvar.setOpaque(false);
    ComponentUtils.deriveFont(addvar, 11);
    addvar.setBorder(BorderFactory.createEmptyBorder(1, 6, 0, 2));
    bar.add(addvar);
    JButton remvar = new JButton(UIRES.get("16px.delete.gif"));
    remvar.setContentAreaFilled(false);
    remvar.setOpaque(false);
    ComponentUtils.deriveFont(remvar, 11);
    remvar.setBorder(BorderFactory.createEmptyBorder(1, 1, 0, 1));
    bar.add(remvar);
    addvar.addActionListener(e -> {
        VariableElement element = NewVariableDialog.showNewVariableDialog(mcreator, false, new OptionPaneValidatior() {

            @Override
            public Validator.ValidationResult validate(JComponent component) {
                Validator validator = new JavaMemberNameValidator((VTextField) component, false, false);
                String textname = Transliteration.transliterateString(((VTextField) component).getText());
                for (int i = 0; i < localVars.getSize(); i++) {
                    String nameinrow = localVars.get(i).getName();
                    if (textname.equals(nameinrow))
                        return new Validator.ValidationResult(Validator.ValidationResultType.ERROR, L10N.t("common.name_already_exists"));
                }
                for (Dependency dependency : dependenciesArrayList) {
                    String nameinrow = dependency.getName();
                    if (textname.equals(nameinrow))
                        return new ValidationResult(ValidationResultType.ERROR, L10N.t("elementgui.procedure.name_already_exists_dep"));
                }
                return validator.validate();
            }
        }, VariableTypeLoader.INSTANCE.getLocalVariableTypes(mcreator.getGeneratorConfiguration()));
        if (element != null) {
            blocklyPanel.addLocalVariable(element.getName(), element.getType().getBlocklyVariableType());
            localVars.addElement(element);
        }
    });
    remvar.addActionListener(e -> {
        VariableElement element = localVarsList.getSelectedValue();
        if (element != null) {
            int n = JOptionPane.showConfirmDialog(mcreator, L10N.t("elementgui.procedure.confirm_delete_var_msg"), L10N.t("common.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
            if (n == JOptionPane.YES_OPTION) {
                blocklyPanel.removeLocalVariable(element.getName());
                localVars.removeElement(element);
            }
        }
    });
    localVarsList.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (localVars.getSize() > 0 && e.getClickCount() == 2) {
                VariableElement selectedVar = localVarsList.getSelectedValue();
                VariableType type = selectedVar.getType();
                String blockXml = "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"variables_" + (e.isAltDown() ? "set_" : "get_") + type.getName() + "\"><field name=\"VAR\">local:" + selectedVar.getName() + "</field></block></xml>";
                blocklyPanel.addBlocksFromXML(blockXml);
            }
        }
    });
    dependenciesList.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (dependencies.getSize() > 0 && e.getClickCount() == 2) {
                Dependency selectedDep = dependenciesList.getSelectedValue();
                String blockXml = selectedDep.getDependencyBlockXml();
                if (blockXml != null)
                    blocklyPanel.addBlocksFromXML(blockXml);
            }
        }
    });
    dependenciesExtTrigList.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (dependenciesExtTrigger.getSize() > 0 && e.getClickCount() == 2) {
                Dependency selectedDep = dependenciesExtTrigList.getSelectedValue();
                String blockXml = selectedDep.getDependencyBlockXml();
                if (blockXml != null)
                    blocklyPanel.addBlocksFromXML(blockXml);
            }
        }
    });
    JPanel varHeader = new JPanel(new GridLayout());
    varHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    varHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    varHeader.add(bar);
    localVarsPan.add("North", varHeader);
    localVarsPan.setOpaque(false);
    localVarsPan.setPreferredSize(new Dimension(150, 0));
    JPanel depsPan = new JPanel(new BorderLayout());
    depsPan.setOpaque(false);
    JToolBar bar2 = new JToolBar();
    bar2.setBorder(BorderFactory.createEmptyBorder(2, 2, 5, 0));
    bar2.setFloatable(false);
    bar2.setOpaque(false);
    bar2.add(ComponentUtils.deriveFont(L10N.label("elementgui.procedure.required_dependencies"), 13));
    JPanel depsHeader = new JPanel(new BorderLayout());
    depsHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    depsHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    depsHeader.add("North", bar2);
    depsHeader.add("South", ComponentUtils.deriveFont(depsWarningLabel, 11));
    depsPan.add("North", depsHeader);
    depsPan.setOpaque(false);
    depsPan.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")));
    JScrollPane scrollPaneDeps = new JScrollPane(dependenciesList);
    scrollPaneDeps.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    scrollPaneDeps.getViewport().setOpaque(false);
    scrollPaneDeps.getVerticalScrollBar().setUnitIncrement(11);
    scrollPaneDeps.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneDeps.getVerticalScrollBar()));
    scrollPaneDeps.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0));
    scrollPaneDeps.getHorizontalScrollBar().setUnitIncrement(11);
    scrollPaneDeps.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneDeps.getHorizontalScrollBar()));
    scrollPaneDeps.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8));
    scrollPaneDeps.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    depsPan.add("Center", scrollPaneDeps);
    depsPan.setPreferredSize(new Dimension(150, 0));
    JToolBar bar3 = new JToolBar();
    bar3.setBorder(BorderFactory.createEmptyBorder(2, 2, 5, 0));
    bar3.setFloatable(false);
    bar3.setOpaque(false);
    bar3.add(ComponentUtils.deriveFont(extDepsLab, 13));
    JPanel extdepsHeader = new JPanel(new BorderLayout());
    extdepsHeader.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    extdepsHeader.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    extdepsHeader.add("North", bar3);
    triggerDepsPan.add("North", extdepsHeader);
    triggerDepsPan.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    triggerDepsPan.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT")));
    JScrollPane scrollPaneExtDeps = new JScrollPane(dependenciesExtTrigList);
    scrollPaneExtDeps.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    scrollPaneExtDeps.getViewport().setOpaque(false);
    scrollPaneExtDeps.getVerticalScrollBar().setUnitIncrement(11);
    scrollPaneExtDeps.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneExtDeps.getVerticalScrollBar()));
    scrollPaneExtDeps.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0));
    scrollPaneExtDeps.getHorizontalScrollBar().setUnitIncrement(11);
    scrollPaneExtDeps.getHorizontalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), scrollPaneExtDeps.getHorizontalScrollBar()));
    scrollPaneExtDeps.getHorizontalScrollBar().setPreferredSize(new Dimension(0, 8));
    scrollPaneExtDeps.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
    triggerDepsPan.add("Center", PanelUtils.northAndCenterElement(triggerInfoPanel, PanelUtils.northAndCenterElement(ComponentUtils.deriveFont(L10N.label("elementgui.procedure.provided_dependencies"), 13), scrollPaneExtDeps, 0, 1), 0, 4));
    triggerDepsPan.setPreferredSize(new Dimension(150, 0));
    triggerDepsPan.setVisible(false);
    JPanel eastPan = new JPanel();
    eastPan.setLayout(new BoxLayout(eastPan, BoxLayout.PAGE_AXIS));
    eastPan.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
    eastPan.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, (Color) UIManager.get("MCreatorLAF.DARK_ACCENT")));
    eastPan.add(localVarsPan);
    eastPan.add(depsPan);
    eastPan.add(triggerDepsPan);
    pane5.add("East", PanelUtils.centerAndSouthElement(eastPan, returnType));
    pane5.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
    externalBlocks = BlocklyLoader.INSTANCE.getProcedureBlockLoader().getDefinedBlocks();
    blocklyPanel = new BlocklyPanel(mcreator);
    blocklyPanel.addTaskToRunAfterLoaded(() -> {
        BlocklyLoader.INSTANCE.getProcedureBlockLoader().loadBlocksAndCategoriesInPanel(blocklyPanel, ExternalBlockLoader.ToolboxType.PROCEDURE);
        BlocklyLoader.INSTANCE.getExternalTriggerLoader().getExternalTrigers().forEach(blocklyPanel.getJSBridge()::addExternalTrigger);
        for (VariableElement variable : mcreator.getWorkspace().getVariableElements()) {
            blocklyPanel.addGlobalVariable(variable.getName(), variable.getType().getBlocklyVariableType());
        }
        blocklyPanel.getJSBridge().setJavaScriptEventListener(() -> new Thread(this::regenerateProcedure).start());
        if (!isEditingMode()) {
            blocklyPanel.setXML("<xml><block type=\"event_trigger\" deletable=\"false\" x=\"40\" y=\"40\"></block></xml>");
        }
    });
    pane5.add("Center", blocklyPanel);
    pane5.add("South", compileNotesPanel);
    compileNotesPanel.setPreferredSize(new Dimension(0, 70));
    BlocklyEditorToolbar blocklyEditorToolbar = new BlocklyEditorToolbar(mcreator, BlocklyEditorType.PROCEDURE, blocklyPanel, this);
    blocklyEditorToolbar.setTemplateLibButtonWidth(168);
    pane5.add("North", blocklyEditorToolbar);
    addPage(PanelUtils.gridElements(1, 1, pane5));
}
Also used : SlickDarkScrollBarUI(net.mcreator.ui.laf.SlickDarkScrollBarUI) VariableElement(net.mcreator.workspace.elements.VariableElement) AggregatedValidationResult(net.mcreator.ui.validation.AggregatedValidationResult) BlocklyPanel(net.mcreator.ui.blockly.BlocklyPanel) BlocklyEditorToolbar(net.mcreator.ui.blockly.BlocklyEditorToolbar) MouseEvent(java.awt.event.MouseEvent) VariableType(net.mcreator.workspace.elements.VariableType) JavaMemberNameValidator(net.mcreator.ui.validation.validators.JavaMemberNameValidator) MouseAdapter(java.awt.event.MouseAdapter) VTextField(net.mcreator.ui.validation.component.VTextField) OptionPaneValidatior(net.mcreator.ui.validation.optionpane.OptionPaneValidatior) JavaMemberNameValidator(net.mcreator.ui.validation.validators.JavaMemberNameValidator) Validator(net.mcreator.ui.validation.Validator)

Example 2 with SlickDarkScrollBarUI

use of net.mcreator.ui.laf.SlickDarkScrollBarUI in project MCreator by MCreator.

the class WorkspacePanelLocalizations method reloadElements.

@Override
public void reloadElements() {
    for (var al : del.getActionListeners()) del.removeActionListener(al);
    for (var al : imp.getActionListeners()) imp.removeActionListener(al);
    for (var al : exp.getActionListeners()) exp.removeActionListener(al);
    pane.removeAll();
    sorters = new ArrayList<>();
    for (var entry : workspacePanel.getMcreator().getWorkspace().getLanguageMap().entrySet()) {
        ConcurrentHashMap<String, String> entries = entry.getValue();
        JTable elements = new JTable(new DefaultTableModel(new Object[] { L10N.t("workspace.localization.column_key"), "Localized text for " + entry.getKey() + (entry.getKey().equals("en_us") ? " - values in en_us might get overwritten!" : " - mappings can be edited here") }, 0));
        final Font textFont = new Font("Sans-Serif", Font.PLAIN, 13);
        elements.setFont(textFont);
        elements.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                var c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                c.setFont(textFont);
                return c;
            }
        });
        elements.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JTextField()) {

            final JComponent component = new JTextField();

            {
                component.setFont(textFont);
            }

            @Override
            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex) {
                ((JTextField) component).setText((String) value);
                return component;
            }

            @Override
            public Object getCellEditorValue() {
                return ((JTextField) component).getText();
            }
        });
        TableRowSorter<TableModel> sorter = new TableRowSorter<>(elements.getModel());
        elements.setRowSorter(sorter);
        sorters.add(sorter);
        elements.setBackground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
        elements.setSelectionBackground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"));
        elements.setForeground((Color) UIManager.get("MCreatorLAF.BRIGHT_COLOR"));
        elements.setSelectionForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
        elements.setBorder(BorderFactory.createEmptyBorder());
        elements.setGridColor((Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"));
        elements.setRowHeight(22);
        elements.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
        elements.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 13));
        JTableHeader header = elements.getTableHeader();
        header.setBackground((Color) UIManager.get("MCreatorLAF.MAIN_TINT"));
        header.setForeground((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"));
        DefaultTableModel model = (DefaultTableModel) elements.getModel();
        for (Map.Entry<String, String> langs : entries.entrySet()) {
            model.addRow(new String[] { langs.getKey(), langs.getValue() });
        }
        // save values on table edit, do it in another thread
        // we add the listener after the values are inserted
        elements.getModel().addTableModelListener(e -> new Thread(() -> {
            if (e.getType() == TableModelEvent.UPDATE) {
                ConcurrentHashMap<String, String> keyValueMap = new ConcurrentHashMap<>();
                for (int i = 0; i < elements.getModel().getRowCount(); i++) {
                    keyValueMap.put((String) elements.getModel().getValueAt(i, 0), (String) elements.getModel().getValueAt(i, 1));
                }
                workspacePanel.getMcreator().getWorkspace().updateLanguage(entry.getKey(), keyValueMap);
            }
        }).start());
        JScrollPane sp = new JScrollPane(elements);
        sp.setOpaque(false);
        sp.getViewport().setOpaque(false);
        sp.getVerticalScrollBar().setUnitIncrement(11);
        sp.getVerticalScrollBar().setUI(new SlickDarkScrollBarUI((Color) UIManager.get("MCreatorLAF.DARK_ACCENT"), (Color) UIManager.get("MCreatorLAF.LIGHT_ACCENT"), sp.getVerticalScrollBar()));
        sp.getVerticalScrollBar().setPreferredSize(new Dimension(8, 0));
        sp.setColumnHeaderView(null);
        final int id = pane.getTabCount();
        pane.addTab(entry.getKey(), null, sp);
        JPanel tab = new JPanel(new FlowLayout(FlowLayout.LEFT, 1, 1));
        tab.setOpaque(false);
        JButton button = new JButton(UIRES.get("16px.delete.gif"));
        button.setContentAreaFilled(false);
        button.setBorder(BorderFactory.createEmptyBorder());
        button.setMargin(new Insets(0, 0, 0, 0));
        button.addActionListener(e -> {
            int n = JOptionPane.showConfirmDialog(workspacePanel.getMcreator(), L10N.t("workspace.localization.confirm_delete_map"), L10N.t("common.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
            if (n == 0) {
                workspacePanel.getMcreator().getWorkspace().removeLocalizationLanguage(entry.getKey());
                reloadElements();
            }
        });
        button.setEnabled(!entry.getKey().equals("en_us"));
        String flagpath = "/flags/" + entry.getKey().split("_")[1].toUpperCase(Locale.ENGLISH) + ".png";
        JLabel label = new JLabel(" " + entry.getKey() + " ");
        ComponentUtils.deriveFont(label, 12);
        try {
            @SuppressWarnings("ConstantConditions") BufferedImage image = ImageIO.read(getClass().getResourceAsStream(flagpath));
            label.setIcon(new ImageIcon(ImageUtils.crop(image, new Rectangle(1, 2, 14, 11))));
        } catch (Exception ignored) {
        // flag not found, ignore
        }
        label.setBorder(BorderFactory.createEmptyBorder());
        tab.add(label);
        tab.add(button);
        pane.setTabComponentAt(id, tab);
        del.addActionListener(e -> {
            if (elements.getSelectedRow() == -1 || pane.getSelectedIndex() != id)
                return;
            String key = (String) elements.getValueAt(elements.getSelectedRow(), 0);
            if (key != null) {
                int n = JOptionPane.showConfirmDialog(workspacePanel.getMcreator(), L10N.t("workspace.localization.confirm_delete_entry"), L10N.t("common.confirmation"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
                if (n == 0) {
                    Arrays.stream(elements.getSelectedRows()).mapToObj(el -> (String) elements.getValueAt(el, 0)).forEach(workspacePanel.getMcreator().getWorkspace()::removeLocalizationEntryByKey);
                    reloadElements();
                }
            }
        });
        exp.addActionListener(e -> {
            if (pane.getSelectedIndex() != id)
                return;
            if (entry.getKey().equals("en_us")) {
                JOptionPane.showMessageDialog(workspacePanel.getMcreator(), L10N.t("workspace.localization.confirm_export"), L10N.t("workspace.localization.export_translation"), JOptionPane.WARNING_MESSAGE);
                return;
            }
            File expFile = FileDialogs.getSaveDialog(workspacePanel.getMcreator(), new String[] { ".csv" });
            if (expFile != null) {
                Map<String, String> en_us = workspacePanel.getMcreator().getWorkspace().getLanguageMap().get("en_us");
                ByteArrayOutputStream csvResult = new ByteArrayOutputStream();
                Writer outputWriter = new OutputStreamWriter(csvResult);
                CsvWriter writer = new CsvWriter(outputWriter, new CsvWriterSettings());
                writer.writeHeaders("Translation key (DON'T EDIT)", "TRANSLATION IN " + entry.getKey() + " - EDIT THIS COLUMN", "English text (DON'T EDIT - reference only)");
                for (Map.Entry<String, String> langs : workspacePanel.getMcreator().getWorkspace().getLanguageMap().get(entry.getKey()).entrySet()) writer.writeRow(langs.getKey(), langs.getValue(), en_us.get(langs.getKey()));
                writer.close();
                FileIO.writeUTF8toFile("SEP=,\n" + csvResult.toString(StandardCharsets.UTF_8), expFile);
            }
        });
        imp.addActionListener(e -> {
            if (pane.getSelectedIndex() != id)
                return;
            if (entry.getKey().equals("en_us")) {
                JOptionPane.showMessageDialog(workspacePanel.getMcreator(), L10N.t("workspace.localization.warning_export"), L10N.t("workspace.localization.export_translation"), JOptionPane.WARNING_MESSAGE);
                return;
            }
            File impFile = FileDialogs.getOpenDialog(workspacePanel.getMcreator(), new String[] { ".csv" });
            if (impFile != null) {
                ConcurrentHashMap<String, String> en_us = workspacePanel.getMcreator().getWorkspace().getLanguageMap().get("en_us");
                CsvParserSettings settings = new CsvParserSettings();
                settings.setDelimiterDetectionEnabled(true);
                CsvParser parser = new CsvParser(settings);
                List<String[]> rows = parser.parseAll(impFile, StandardCharsets.UTF_8);
                ConcurrentHashMap<String, String> keyValueMap = new ConcurrentHashMap<>();
                for (String[] row : rows) {
                    if (row.length < 2)
                        continue;
                    String key = row[0];
                    String value = row[1];
                    if (en_us.containsKey(key) && value != null)
                        keyValueMap.put(key, value);
                }
                workspacePanel.getMcreator().getWorkspace().updateLanguage(entry.getKey(), keyValueMap);
                SwingUtilities.invokeLater(this::reloadElements);
            }
        });
    }
    int lastid = pane.getTabCount();
    pane.addTab("", null, null);
    pane.setTabComponentAt(lastid, new JLabel(UIRES.get("16px.add.gif")));
    pane.removeChangeListener(changeListener);
    changeListener = e -> {
        if (pane.getSelectedIndex() == lastid) {
            pane.setSelectedIndex(0);
            newLocalizationDialog();
        }
    };
    pane.addChangeListener(changeListener);
    refilterElements();
}
Also used : java.util(java.util) ByteArrayOutputStream(java.io.ByteArrayOutputStream) TransparentToolBar(net.mcreator.ui.component.TransparentToolBar) ComponentUtils(net.mcreator.ui.component.util.ComponentUtils) javax.swing.table(javax.swing.table) FileDialogs(net.mcreator.ui.dialogs.FileDialogs) UIRES(net.mcreator.ui.init.UIRES) ImageIO(javax.imageio.ImageIO) OutputStreamWriter(java.io.OutputStreamWriter) CsvWriterSettings(com.univocity.parsers.csv.CsvWriterSettings) ChangeListener(javax.swing.event.ChangeListener) CsvParser(com.univocity.parsers.csv.CsvParser) L10N(net.mcreator.ui.init.L10N) CsvParserSettings(com.univocity.parsers.csv.CsvParserSettings) FileIO(net.mcreator.io.FileIO) TableModelEvent(javax.swing.event.TableModelEvent) BufferedImage(java.awt.image.BufferedImage) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ImageUtils(net.mcreator.util.image.ImageUtils) CsvWriter(com.univocity.parsers.csv.CsvWriter) File(java.io.File) StandardCharsets(java.nio.charset.StandardCharsets) java.awt(java.awt) SlickDarkScrollBarUI(net.mcreator.ui.laf.SlickDarkScrollBarUI) List(java.util.List) Writer(java.io.Writer) javax.swing(javax.swing) SlickDarkScrollBarUI(net.mcreator.ui.laf.SlickDarkScrollBarUI) CsvWriterSettings(com.univocity.parsers.csv.CsvWriterSettings) CsvParser(com.univocity.parsers.csv.CsvParser) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) File(java.io.File) BufferedImage(java.awt.image.BufferedImage) CsvParserSettings(com.univocity.parsers.csv.CsvParserSettings) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) CsvWriter(com.univocity.parsers.csv.CsvWriter) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStreamWriter(java.io.OutputStreamWriter) OutputStreamWriter(java.io.OutputStreamWriter) CsvWriter(com.univocity.parsers.csv.CsvWriter) Writer(java.io.Writer)

Aggregations

SlickDarkScrollBarUI (net.mcreator.ui.laf.SlickDarkScrollBarUI)2 CsvParser (com.univocity.parsers.csv.CsvParser)1 CsvParserSettings (com.univocity.parsers.csv.CsvParserSettings)1 CsvWriter (com.univocity.parsers.csv.CsvWriter)1 CsvWriterSettings (com.univocity.parsers.csv.CsvWriterSettings)1 java.awt (java.awt)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 BufferedImage (java.awt.image.BufferedImage)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 File (java.io.File)1 OutputStreamWriter (java.io.OutputStreamWriter)1 Writer (java.io.Writer)1 StandardCharsets (java.nio.charset.StandardCharsets)1 java.util (java.util)1 List (java.util.List)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ImageIO (javax.imageio.ImageIO)1 javax.swing (javax.swing)1 ChangeListener (javax.swing.event.ChangeListener)1