Search in sources :

Example 1 with Config

use of net.runelite.client.config.Config in project runelite by runelite.

the class PluginManager method getPluginConfigProxies.

public List<Config> getPluginConfigProxies() {
    List<Injector> injectors = new ArrayList<>();
    injectors.add(RuneLite.getInjector());
    getPlugins().forEach(pl -> injectors.add(pl.getInjector()));
    List<Config> list = new ArrayList<>();
    for (Injector injector : injectors) {
        for (Key<?> key : injector.getAllBindings().keySet()) {
            Class<?> type = key.getTypeLiteral().getRawType();
            if (Config.class.isAssignableFrom(type)) {
                Config config = (Config) injector.getInstance(key);
                list.add(config);
            }
        }
    }
    return list;
}
Also used : Injector(com.google.inject.Injector) RuneLiteConfig(net.runelite.client.config.RuneLiteConfig) Config(net.runelite.client.config.Config) ArrayList(java.util.ArrayList) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList)

Example 2 with Config

use of net.runelite.client.config.Config in project runelite by runelite.

the class ConfigPanel method rebuildPluginList.

final void rebuildPluginList() {
    scrollBarPosition = getScrollPane().getVerticalScrollBar().getValue();
    Map<String, JPanel> newChildren = new TreeMap<>();
    pluginManager.getPlugins().stream().filter(plugin -> !plugin.getClass().getAnnotation(PluginDescriptor.class).hidden()).sorted(Comparator.comparing(left -> left.getClass().getAnnotation(PluginDescriptor.class).name())).forEach(plugin -> {
        final Config pluginConfigProxy = pluginManager.getPluginConfigProxy(plugin);
        final String pluginName = plugin.getClass().getAnnotation(PluginDescriptor.class).name();
        final JPanel groupPanel = buildGroupPanel();
        groupPanel.add(new JLabel(pluginName), BorderLayout.CENTER);
        final JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(1, 2, 3, 0));
        groupPanel.add(buttonPanel, BorderLayout.LINE_END);
        final JButton editConfigButton = buildConfigButton(pluginConfigProxy);
        buttonPanel.add(editConfigButton);
        final JButton toggleButton = buildToggleButton(plugin);
        buttonPanel.add(toggleButton);
        newChildren.put(pluginName, groupPanel);
    });
    final JPanel groupPanel = buildGroupPanel();
    groupPanel.add(new JLabel("RuneLite"), BorderLayout.CENTER);
    final JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1, 2, 3, 0));
    groupPanel.add(buttonPanel, BorderLayout.LINE_END);
    final JButton editConfigButton = buildConfigButton(runeLiteConfig);
    buttonPanel.add(editConfigButton);
    final JButton toggleButton = buildToggleButton(null);
    buttonPanel.add(toggleButton);
    newChildren.put("RuneLite", groupPanel);
    children = newChildren;
    openConfigList();
}
Also used : JPanel(javax.swing.JPanel) PluginDescriptor(net.runelite.client.plugins.PluginDescriptor) GridLayout(java.awt.GridLayout) RuneLiteConfig(net.runelite.client.config.RuneLiteConfig) Config(net.runelite.client.config.Config) JButton(javax.swing.JButton) JLabel(javax.swing.JLabel) TreeMap(java.util.TreeMap)

Example 3 with Config

use of net.runelite.client.config.Config in project runelite by runelite.

the class ConfigPanel method openGroupConfigPanel.

private void openGroupConfigPanel(Config config, ConfigDescriptor cd, ConfigManager configManager) {
    scrollBarPosition = getScrollPane().getVerticalScrollBar().getValue();
    removeAll();
    String name = cd.getGroup().name() + " Configuration";
    JLabel title = new JLabel(name);
    title.setToolTipText(cd.getGroup().description());
    add(title, SwingConstants.CENTER);
    for (ConfigItemDescriptor cid : cd.getItems()) {
        if (cid.getItem().hidden()) {
            continue;
        }
        JPanel item = new JPanel();
        item.setLayout(new BorderLayout());
        name = cid.getItem().name();
        JLabel configEntryName = new JLabel(name);
        configEntryName.setToolTipText("<html>" + name + ":<br>" + cid.getItem().description() + "</html>");
        item.add(configEntryName, BorderLayout.CENTER);
        if (cid.getType() == boolean.class) {
            JCheckBox checkbox = new JCheckBox();
            checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())));
            checkbox.addActionListener(ae -> changeConfiguration(checkbox, cd, cid));
            item.add(checkbox, BorderLayout.EAST);
        }
        if (cid.getType() == int.class) {
            int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()));
            SpinnerModel model = new SpinnerNumberModel(value, 0, Integer.MAX_VALUE, 1);
            JSpinner spinner = new JSpinner(model);
            Component editor = spinner.getEditor();
            JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField();
            spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
            spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
            item.add(spinner, BorderLayout.EAST);
        }
        if (cid.getType() == String.class) {
            JTextField textField = new JTextField("", TEXT_FIELD_WIDTH);
            textField.setText(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()));
            textField.addFocusListener(new FocusListener() {

                @Override
                public void focusGained(FocusEvent e) {
                }

                @Override
                public void focusLost(FocusEvent e) {
                    changeConfiguration(textField, cd, cid);
                    textField.setToolTipText(textField.getText());
                }
            });
            textField.setToolTipText(textField.getText());
            item.add(textField, BorderLayout.EAST);
        }
        if (cid.getType() == Color.class) {
            JButton colorPicker = new JButton("Pick a color");
            colorPicker.setFocusable(false);
            colorPicker.setBackground(Color.decode(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())));
            colorPicker.addMouseListener(new MouseAdapter() {

                @Override
                public void mouseClicked(MouseEvent e) {
                    final JFrame parent = new JFrame();
                    JColorChooser jColorChooser = new JColorChooser(Color.decode(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())));
                    jColorChooser.getSelectionModel().addChangeListener(e1 -> colorPicker.setBackground(jColorChooser.getColor()));
                    parent.addWindowListener(new WindowAdapter() {

                        @Override
                        public void windowClosing(WindowEvent e) {
                            changeConfiguration(jColorChooser, cd, cid);
                        }
                    });
                    parent.add(jColorChooser);
                    parent.pack();
                    parent.setVisible(true);
                }
            });
            item.add(colorPicker, BorderLayout.EAST);
        }
        if (cid.getType() == Dimension.class) {
            JPanel dimensionPanel = new JPanel();
            dimensionPanel.setLayout(new BorderLayout());
            String str = configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName());
            String[] splitStr = str.split("x");
            int width = Integer.parseInt(splitStr[0]);
            int height = Integer.parseInt(splitStr[1]);
            SpinnerModel widthModel = new SpinnerNumberModel(width, 0, Integer.MAX_VALUE, 1);
            JSpinner widthSpinner = new JSpinner(widthModel);
            Component widthEditor = widthSpinner.getEditor();
            JFormattedTextField widthSpinnerTextField = ((JSpinner.DefaultEditor) widthEditor).getTextField();
            widthSpinnerTextField.setColumns(4);
            SpinnerModel heightModel = new SpinnerNumberModel(height, 0, Integer.MAX_VALUE, 1);
            JSpinner heightSpinner = new JSpinner(heightModel);
            Component heightEditor = heightSpinner.getEditor();
            JFormattedTextField heightSpinnerTextField = ((JSpinner.DefaultEditor) heightEditor).getTextField();
            heightSpinnerTextField.setColumns(4);
            ChangeListener listener = e -> configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
            widthSpinner.addChangeListener(listener);
            heightSpinner.addChangeListener(listener);
            dimensionPanel.add(widthSpinner, BorderLayout.WEST);
            dimensionPanel.add(new JLabel(" x "), BorderLayout.CENTER);
            dimensionPanel.add(heightSpinner, BorderLayout.EAST);
            item.add(dimensionPanel, BorderLayout.EAST);
        }
        if (cid.getType().isEnum()) {
            Class<? extends Enum> type = (Class<? extends Enum>) cid.getType();
            JComboBox box = new JComboBox(type.getEnumConstants());
            box.setFocusable(false);
            // sorry but this is the way to keep the size of the combobox in check.
            box.setPrototypeDisplayValue("XXXXXXXX");
            try {
                Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()));
                box.setSelectedItem(selectedItem);
                box.setToolTipText(selectedItem.toString());
            } catch (IllegalArgumentException ex) {
                log.debug("invalid seleced item", ex);
            }
            box.addItemListener(e -> {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    changeConfiguration(box, cd, cid);
                    box.setToolTipText(box.getSelectedItem().toString());
                }
            });
            item.add(box, BorderLayout.EAST);
        }
        add(item);
    }
    JButton resetButton = new JButton("Reset");
    resetButton.addActionListener((e) -> {
        configManager.setDefaultConfiguration(config, true);
        // Reload configuration panel
        openGroupConfigPanel(config, cd, configManager);
    });
    add(resetButton);
    JButton backButton = new JButton("Back");
    backButton.addActionListener(e -> openConfigList());
    add(backButton);
    revalidate();
    getScrollPane().getVerticalScrollBar().setValue(0);
}
Also used : Color(java.awt.Color) FocusListener(java.awt.event.FocusListener) DocumentListener(javax.swing.event.DocumentListener) YES_NO_OPTION(javax.swing.JOptionPane.YES_NO_OPTION) ConfigManager(net.runelite.client.config.ConfigManager) YES_OPTION(javax.swing.JOptionPane.YES_OPTION) Map(java.util.Map) MouseAdapter(java.awt.event.MouseAdapter) ImageIO(javax.imageio.ImageIO) ConfigDescriptor(net.runelite.client.config.ConfigDescriptor) ChangeListener(javax.swing.event.ChangeListener) BorderLayout(java.awt.BorderLayout) JComboBox(javax.swing.JComboBox) JFrame(javax.swing.JFrame) WARNING_MESSAGE(javax.swing.JOptionPane.WARNING_MESSAGE) ItemEvent(java.awt.event.ItemEvent) BufferedImage(java.awt.image.BufferedImage) RuneLiteConfig(net.runelite.client.config.RuneLiteConfig) WindowAdapter(java.awt.event.WindowAdapter) Component(java.awt.Component) WindowEvent(java.awt.event.WindowEvent) Dimension(java.awt.Dimension) Slf4j(lombok.extern.slf4j.Slf4j) Config(net.runelite.client.config.Config) JCheckBox(javax.swing.JCheckBox) JPanel(javax.swing.JPanel) JColorChooser(javax.swing.JColorChooser) JTextField(javax.swing.JTextField) SpinnerNumberModel(javax.swing.SpinnerNumberModel) PluginDescriptor(net.runelite.client.plugins.PluginDescriptor) SwingConstants(javax.swing.SwingConstants) GridLayout(java.awt.GridLayout) ConfigItemDescriptor(net.runelite.client.config.ConfigItemDescriptor) ConfigItem(net.runelite.client.config.ConfigItem) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ImageIcon(javax.swing.ImageIcon) SpinnerModel(javax.swing.SpinnerModel) DocumentEvent(javax.swing.event.DocumentEvent) Plugin(net.runelite.client.plugins.Plugin) JComponent(javax.swing.JComponent) JButton(javax.swing.JButton) JFormattedTextField(javax.swing.JFormattedTextField) JSpinner(javax.swing.JSpinner) IOException(java.io.IOException) JOptionPane(javax.swing.JOptionPane) PluginPanel(net.runelite.client.ui.PluginPanel) MouseEvent(java.awt.event.MouseEvent) PluginManager(net.runelite.client.plugins.PluginManager) JScrollPane(javax.swing.JScrollPane) PluginInstantiationException(net.runelite.client.plugins.PluginInstantiationException) TreeMap(java.util.TreeMap) FocusEvent(java.awt.event.FocusEvent) JLabel(javax.swing.JLabel) Comparator(java.util.Comparator) JPanel(javax.swing.JPanel) JButton(javax.swing.JButton) WindowAdapter(java.awt.event.WindowAdapter) JTextField(javax.swing.JTextField) FocusEvent(java.awt.event.FocusEvent) SpinnerModel(javax.swing.SpinnerModel) SpinnerNumberModel(javax.swing.SpinnerNumberModel) BorderLayout(java.awt.BorderLayout) JFrame(javax.swing.JFrame) ChangeListener(javax.swing.event.ChangeListener) ConfigItemDescriptor(net.runelite.client.config.ConfigItemDescriptor) Component(java.awt.Component) JComponent(javax.swing.JComponent) MouseEvent(java.awt.event.MouseEvent) JComboBox(javax.swing.JComboBox) JFormattedTextField(javax.swing.JFormattedTextField) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) JCheckBox(javax.swing.JCheckBox) WindowEvent(java.awt.event.WindowEvent) JSpinner(javax.swing.JSpinner) FocusListener(java.awt.event.FocusListener) JColorChooser(javax.swing.JColorChooser)

Aggregations

Config (net.runelite.client.config.Config)3 RuneLiteConfig (net.runelite.client.config.RuneLiteConfig)3 GridLayout (java.awt.GridLayout)2 TreeMap (java.util.TreeMap)2 JButton (javax.swing.JButton)2 JLabel (javax.swing.JLabel)2 JPanel (javax.swing.JPanel)2 PluginDescriptor (net.runelite.client.plugins.PluginDescriptor)2 Injector (com.google.inject.Injector)1 BorderLayout (java.awt.BorderLayout)1 Color (java.awt.Color)1 Component (java.awt.Component)1 Dimension (java.awt.Dimension)1 FocusEvent (java.awt.event.FocusEvent)1 FocusListener (java.awt.event.FocusListener)1 ItemEvent (java.awt.event.ItemEvent)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 WindowAdapter (java.awt.event.WindowAdapter)1 WindowEvent (java.awt.event.WindowEvent)1