Search in sources :

Example 1 with ProjectUICommands

use of org.omegat.gui.main.ProjectUICommands in project omegat by omegat-org.

the class PreferencesWindowController method show.

@SuppressWarnings("serial")
public void show(Window parent, Class<? extends IPreferencesController> initialSelection) {
    dialog = new JDialog();
    dialog.setTitle(OStrings.getString("PREFERENCES_TITLE_NO_SELECTION"));
    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    dialog.setModal(true);
    StaticUIUtils.setWindowIcon(dialog);
    outerPanel = new PreferencePanel();
    innerPanel = new PreferenceViewSelectorPanel();
    outerPanel.prefsViewPanel.add(innerPanel, BorderLayout.CENTER);
    dialog.getContentPane().add(outerPanel);
    overlay = new HighlightablePanel(dialog.getRootPane(), innerPanel.selectedPrefsScrollPane);
    // Prevent ugly white viewport background with GTK LAF
    innerPanel.selectedPrefsScrollPane.getViewport().setOpaque(false);
    innerPanel.selectedPrefsScrollPane.setBackground(innerPanel.getBackground());
    innerPanel.searchTextField.getDocument().addDocumentListener(new DocumentListener() {

        @Override
        public void removeUpdate(DocumentEvent e) {
            SwingUtilities.invokeLater(PreferencesWindowController.this::searchAndFilterTree);
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            SwingUtilities.invokeLater(PreferencesWindowController.this::searchAndFilterTree);
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            SwingUtilities.invokeLater(PreferencesWindowController.this::searchAndFilterTree);
        }
    });
    innerPanel.searchTextField.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_UP) {
                innerPanel.availablePrefsTree.getActionForKeyStroke(KeyStroke.getKeyStrokeForEvent(e)).actionPerformed(new ActionEvent(innerPanel.availablePrefsTree, 0, null));
                innerPanel.availablePrefsTree.requestFocusInWindow();
                e.consume();
            }
        }
    });
    innerPanel.searchTextField.addFocusListener(new FocusAdapter() {

        @Override
        public void focusGained(FocusEvent e) {
            innerPanel.searchTextField.selectAll();
            searchCurrentView();
            preloadGuis();
        }
    });
    innerPanel.clearButton.addActionListener(e -> {
        innerPanel.searchTextField.clear();
    });
    innerPanel.availablePrefsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    DefaultMutableTreeNode root = createNodeTree();
    walkTree(root, node -> {
        IPreferencesController view = (IPreferencesController) node.getUserObject();
        if (view != null) {
            view.addFurtherActionListener(this);
        }
    });
    innerPanel.availablePrefsTree.setModel(new DefaultTreeModel(root));
    innerPanel.availablePrefsTree.addTreeSelectionListener(e -> {
        handleViewSelection(e);
        updateTitle();
    });
    innerPanel.availablePrefsTree.addTreeExpansionListener(new TreeExpansionListener() {

        @Override
        public void treeExpanded(TreeExpansionEvent event) {
            SwingUtilities.invokeLater(PreferencesWindowController.this::adjustTreeSize);
        }

        @Override
        public void treeCollapsed(TreeExpansionEvent event) {
        }
    });
    innerPanel.selectedPrefsScrollPane.getViewport().setBackground(innerPanel.getBackground());
    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) innerPanel.availablePrefsTree.getCellRenderer();
    renderer.setIcon(null);
    renderer.setLeafIcon(null);
    renderer.setOpenIcon(null);
    renderer.setClosedIcon(null);
    renderer.setDisabledIcon(null);
    outerPanel.okButton.addActionListener(e -> {
        if (currentView == null || currentView.validate()) {
            new SwingWorker<Void, Void>() {

                @Override
                protected Void doInBackground() throws Exception {
                    doSave();
                    return null;
                }

                @Override
                protected void done() {
                    if (getIsReloadRequired()) {
                        SwingUtilities.invokeLater(ProjectUICommands::promptReload);
                    }
                }
            }.execute();
            StaticUIUtils.closeWindowByEvent(dialog);
        }
    });
    outerPanel.cancelButton.addActionListener(e -> StaticUIUtils.closeWindowByEvent(dialog));
    // Hide undo, reset buttons on outer panel
    outerPanel.undoButton.setVisible(false);
    outerPanel.resetButton.setVisible(false);
    // Use ones on inner panel to indicate that actions are view-specific
    innerPanel.undoButton.addActionListener(e -> currentView.undoChanges());
    innerPanel.resetButton.addActionListener(e -> currentView.restoreDefaults());
    dialog.addWindowListener(new WindowAdapter() {

        @Override
        public void windowOpened(WindowEvent e) {
            walkTree(root, node -> {
                // Start with tree fully expanded
                if (node.getChildCount() > 0) {
                    innerPanel.availablePrefsTree.expandPath(new TreePath(node.getPath()));
                }
            });
            SwingUtilities.invokeLater(() -> {
                if (initialSelection != null) {
                    selectView(initialSelection);
                }
            });
        }
    });
    innerPanel.availablePrefsScrollPane.addComponentListener(new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent e) {
            SwingUtilities.invokeLater(PreferencesWindowController.this::adjustTreeSize);
        }
    });
    ActionMap actionMap = innerPanel.getActionMap();
    InputMap inputMap = innerPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    actionMap.put(ACTION_KEY_NEW_SEARCH, new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            innerPanel.searchTextField.requestFocusInWindow();
            innerPanel.searchTextField.selectAll();
        }
    });
    KeyStroke searchKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
    inputMap.put(searchKeyStroke, ACTION_KEY_NEW_SEARCH);
    actionMap.put(ACTION_KEY_CLEAR_OR_CLOSE, new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (!innerPanel.searchTextField.isEmpty()) {
                // Move focus away from search field
                innerPanel.availablePrefsTree.requestFocusInWindow();
                innerPanel.clearButton.doClick();
            } else {
                StaticUIUtils.closeWindowByEvent(dialog);
            }
        }
    });
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ACTION_KEY_CLEAR_OR_CLOSE);
    // Don't let Enter close the dialog
    innerPanel.searchTextField.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), ACTION_KEY_DO_SEARCH);
    innerPanel.searchTextField.getActionMap().put(ACTION_KEY_DO_SEARCH, new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            searchCurrentView();
        }
    });
    String searchKeyText = StaticUIUtils.getKeyStrokeText(searchKeyStroke);
    innerPanel.searchTextField.setHintText(OStrings.getString("PREFERENCES_SEARCH_HINT", searchKeyText));
    // Set initial state
    searchAndFilterTree();
    adjustTreeSize();
    dialog.getRootPane().setDefaultButton(outerPanel.okButton);
    dialog.setPreferredSize(new Dimension(800, 500));
    dialog.pack();
    // Prevent search field from getting initial focus
    innerPanel.availablePrefsTree.requestFocusInWindow();
    dialog.setLocationRelativeTo(parent);
    dialog.setVisible(true);
}
Also used : Color(java.awt.Color) ExternalFinderPreferencesController(org.omegat.externalfinder.gui.ExternalFinderPreferencesController) Enumeration(java.util.Enumeration) StaticUIUtils(org.omegat.util.gui.StaticUIUtils) RepositoriesCredentialsController(org.omegat.core.team2.gui.RepositoriesCredentialsController) CustomColorSelectionController(org.omegat.gui.preferences.view.CustomColorSelectionController) StringUtil(org.omegat.util.StringUtil) MouseWheelEvent(java.awt.event.MouseWheelEvent) Map(java.util.Map) SwingWorker(javax.swing.SwingWorker) CharTableAutoCompleterOptionsController(org.omegat.gui.preferences.view.CharTableAutoCompleterOptionsController) KeyStroke(javax.swing.KeyStroke) TreePath(javax.swing.tree.TreePath) FiltersCustomizerController(org.omegat.gui.filters2.FiltersCustomizerController) UserPassController(org.omegat.gui.preferences.view.UserPassController) KeyEvent(java.awt.event.KeyEvent) WindowAdapter(java.awt.event.WindowAdapter) Component(java.awt.Component) InvocationTargetException(java.lang.reflect.InvocationTargetException) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) AbstractAction(javax.swing.AbstractAction) FontSelectionController(org.omegat.gui.preferences.view.FontSelectionController) LanguageToolConfigurationController(org.omegat.gui.preferences.view.LanguageToolConfigurationController) AutotextAutoCompleterOptionsController(org.omegat.gui.preferences.view.AutotextAutoCompleterOptionsController) BasicStroke(java.awt.BasicStroke) SpellcheckerConfigurationController(org.omegat.gui.preferences.view.SpellcheckerConfigurationController) GlossaryPreferencesController(org.omegat.gui.preferences.view.GlossaryPreferencesController) TeamOptionsController(org.omegat.gui.preferences.view.TeamOptionsController) TreeExpansionListener(javax.swing.event.TreeExpansionListener) Preferences(org.omegat.util.Preferences) JPanel(javax.swing.JPanel) WindowConstants(javax.swing.WindowConstants) TreeExpansionEvent(javax.swing.event.TreeExpansionEvent) ProjectUICommands(org.omegat.gui.main.ProjectUICommands) KeyAdapter(java.awt.event.KeyAdapter) ArrayList(java.util.ArrayList) MachineTranslationPreferencesController(org.omegat.gui.preferences.view.MachineTranslationPreferencesController) BiConsumer(java.util.function.BiConsumer) Container(java.awt.Container) DocumentEvent(javax.swing.event.DocumentEvent) TMMatchesPreferencesController(org.omegat.gui.preferences.view.TMMatchesPreferencesController) ActionMap(javax.swing.ActionMap) GeneralOptionsController(org.omegat.gui.preferences.view.GeneralOptionsController) DefaultTreeCellRenderer(javax.swing.tree.DefaultTreeCellRenderer) JRootPane(javax.swing.JRootPane) Window(java.awt.Window) TreeSelectionModel(javax.swing.tree.TreeSelectionModel) MouseEvent(java.awt.event.MouseEvent) SaveOptionsController(org.omegat.gui.preferences.view.SaveOptionsController) JScrollBar(javax.swing.JScrollBar) JLayeredPane(javax.swing.JLayeredPane) AutoCompleterController(org.omegat.gui.preferences.view.AutoCompleterController) DocumentListener(javax.swing.event.DocumentListener) JDialog(javax.swing.JDialog) Area(java.awt.geom.Area) HistoryAutoCompleterOptionsController(org.omegat.gui.preferences.view.HistoryAutoCompleterOptionsController) Point(java.awt.Point) RenderingHints(java.awt.RenderingHints) SegmentationCustomizerController(org.omegat.gui.segmentation.SegmentationCustomizerController) ComponentListener(java.awt.event.ComponentListener) Core(org.omegat.core.Core) MouseAdapter(java.awt.event.MouseAdapter) BorderLayout(java.awt.BorderLayout) Method(java.lang.reflect.Method) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) Shape(java.awt.Shape) Predicate(java.util.function.Predicate) ComponentEvent(java.awt.event.ComponentEvent) Logger(java.util.logging.Logger) WindowEvent(java.awt.event.WindowEvent) RoundRectangle2D(java.awt.geom.RoundRectangle2D) DictionaryPreferencesController(org.omegat.gui.preferences.view.DictionaryPreferencesController) Objects(java.util.Objects) Dimension(java.awt.Dimension) List(java.util.List) PluginsPreferencesController(org.omegat.gui.preferences.view.PluginsPreferencesController) Graphics(java.awt.Graphics) Optional(java.util.Optional) Pattern(java.util.regex.Pattern) Toolkit(java.awt.Toolkit) Rectangle(java.awt.Rectangle) TreeNode(javax.swing.tree.TreeNode) HashMap(java.util.HashMap) Function(java.util.function.Function) ViewOptionsController(org.omegat.gui.preferences.view.ViewOptionsController) TreeSelectionEvent(javax.swing.event.TreeSelectionEvent) SecureStoreController(org.omegat.gui.preferences.view.SecureStoreController) Level(java.util.logging.Level) FocusAdapter(java.awt.event.FocusAdapter) SwingUtilities(javax.swing.SwingUtilities) Graphics2D(java.awt.Graphics2D) FurtherActionListener(org.omegat.gui.preferences.IPreferencesController.FurtherActionListener) OStrings(org.omegat.util.OStrings) JComponent(javax.swing.JComponent) GlossaryAutoCompleterOptionsController(org.omegat.gui.preferences.view.GlossaryAutoCompleterOptionsController) ActionEvent(java.awt.event.ActionEvent) ComponentAdapter(java.awt.event.ComponentAdapter) Consumer(java.util.function.Consumer) FocusEvent(java.awt.event.FocusEvent) EditingBehaviorController(org.omegat.gui.preferences.view.EditingBehaviorController) TagProcessingOptionsController(org.omegat.gui.preferences.view.TagProcessingOptionsController) AppearanceController(org.omegat.gui.preferences.view.AppearanceController) InputMap(javax.swing.InputMap) DocumentListener(javax.swing.event.DocumentListener) FocusAdapter(java.awt.event.FocusAdapter) TreeExpansionListener(javax.swing.event.TreeExpansionListener) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) ActionEvent(java.awt.event.ActionEvent) KeyAdapter(java.awt.event.KeyAdapter) WindowAdapter(java.awt.event.WindowAdapter) FocusEvent(java.awt.event.FocusEvent) DefaultTreeCellRenderer(javax.swing.tree.DefaultTreeCellRenderer) KeyEvent(java.awt.event.KeyEvent) AbstractAction(javax.swing.AbstractAction) TreeExpansionEvent(javax.swing.event.TreeExpansionEvent) ComponentAdapter(java.awt.event.ComponentAdapter) ActionMap(javax.swing.ActionMap) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) Dimension(java.awt.Dimension) DocumentEvent(javax.swing.event.DocumentEvent) InvocationTargetException(java.lang.reflect.InvocationTargetException) TreePath(javax.swing.tree.TreePath) WindowEvent(java.awt.event.WindowEvent) KeyStroke(javax.swing.KeyStroke) InputMap(javax.swing.InputMap) ComponentEvent(java.awt.event.ComponentEvent) JDialog(javax.swing.JDialog)

Aggregations

BasicStroke (java.awt.BasicStroke)1 BorderLayout (java.awt.BorderLayout)1 Color (java.awt.Color)1 Component (java.awt.Component)1 Container (java.awt.Container)1 Dimension (java.awt.Dimension)1 Graphics (java.awt.Graphics)1 Graphics2D (java.awt.Graphics2D)1 Point (java.awt.Point)1 Rectangle (java.awt.Rectangle)1 RenderingHints (java.awt.RenderingHints)1 Shape (java.awt.Shape)1 Toolkit (java.awt.Toolkit)1 Window (java.awt.Window)1 ActionEvent (java.awt.event.ActionEvent)1 ComponentAdapter (java.awt.event.ComponentAdapter)1 ComponentEvent (java.awt.event.ComponentEvent)1 ComponentListener (java.awt.event.ComponentListener)1 FocusAdapter (java.awt.event.FocusAdapter)1 FocusEvent (java.awt.event.FocusEvent)1