Package ch.rakudave.jnetmap.util

Source Code of ch.rakudave.jnetmap.util.Preferences

package ch.rakudave.jnetmap.util;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;

import ch.rakudave.jnetmap.JNetMap;
import ch.rakudave.jnetmap.ui.UI;


public class Preferences {
  private static Properties properties;
 
  public static String get(String key) {
    if (properties == null) load();
    return properties.getProperty(key);
  }
 
  public static Properties getProperties() {
    if (properties == null) load();
    return properties;
  }
 
  public static void load() {
    properties = new Properties();
    try {
      properties.loadFromXML(new FileInputStream(Resources.getPreferenceFile()));
    } catch (Exception e) {
      try {
        File f = new File(Resources.getPreferenceFile());
        f.createNewFile();
      } catch (Exception ex) {
        ex.printStackTrace();
        System.out.println("Error: Failed to create preferences file!");
      }
    }
  }
 
  public static void save() {
    if (properties == null) return;
    try {
      properties.storeToXML(new FileOutputStream(Resources.getPreferenceFile()), null, "UTF-8");
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error: Failed to save preferences!");
    }
  }
 
  private static void set(Object key, Object value) {
    if (properties == null) load();
    properties.put(key, value);
  }
 
  public static void set(Object key, Object value, boolean forceSave) {
    set(key, value);
    if (forceSave) save();
  }
 
  public static void show(final UI owner) {
    if (properties == null) load();
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        showDialog(owner);
      }
    });
  }
 
  private static void showDialog(final UI owner) {
    final Dialog d = new Dialog(owner, Language.get("preferences_title"));
      d.setLocation(new Point(owner.getLocation().x + 10, owner.getLocation().y + 45));
      //d.setResizable(false);
      d.setLayout(new BorderLayout());
      d.addWindowListener(new WindowListener() {
        @Override public void windowActivated(WindowEvent e) {}
        @Override public void windowClosed(WindowEvent e) {}
        @Override public void windowClosing(WindowEvent e) {save();d.dispose();}
        @Override public void windowDeactivated(WindowEvent e) {}
        @Override public void windowDeiconified(WindowEvent e) {}
        @Override public void windowIconified(WindowEvent e) {}
        @Override public void windowOpened(WindowEvent e) {}
      });
      d.setPreferredSize(new Dimension(400, 500));
      d.setResizable(false);
    JTabbedPane tabs = new JTabbedPane();
/* General */
      JPanel tabGeneral = new JPanel();
        tabGeneral.setLayout(new BoxLayout(tabGeneral, BoxLayout.PAGE_AXIS));
  /* Theme */
        JPanel generalTheme = new JPanel(new GridLayout(1,2,5,5));
          generalTheme.setBorder(BorderFactory.createTitledBorder(Language.get("preferences_general_theme_title")));
          generalTheme.setMaximumSize(new Dimension(400, 60));
          final JComboBox themeCombo = new JComboBox(Resources.getThemes());
            themeCombo.setSelectedItem(Resources.iconTheme);
            themeCombo.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                set("theme", themeCombo.getSelectedItem().toString(), true);
                Resources.iconTheme = themeCombo.getSelectedItem().toString();
                owner.constructMenu();
              }
            });
          JButton themeImport = new JButton(Language.get("preferences_general_theme_import"), Resources.getIcon("import"));
            themeImport.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                File themeZip = IO.openDialog(d, new FileNameExtensionFilter(".zip", "zip"));
                if (themeZip == null) return;
                File destination = new File(getClass().getResource(Resources.iconDir).getPath() + "/" + themeZip.getName().replaceFirst("\\.zip", ""));
                destination.mkdir();
                if (IO.unzip(themeZip, destination)) {
                  String imported = themeZip.getName().replaceFirst("\\.zip", "");
                  themeCombo.addItem(imported);
                  themeCombo.setSelectedItem(imported);
                }
              }
            });
          generalTheme.add(themeCombo);
          generalTheme.add(themeImport);
  /* Window */
        JPanel generalWindow = new JPanel(new GridLayout(2, 1, 5, 5));
          generalWindow.setMaximumSize(new Dimension(400, 40));
          generalWindow.setBorder(BorderFactory.createTitledBorder(Language.get("preferences_general_window_title")));
          final JCheckBox windowSize = new JCheckBox(
              Language.get("preferences_general_window_size"),
              "true".equals(Preferences.get("window.size.remember")));
            windowSize.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                set("window.size.remember", windowSize.isSelected()+"");
              }
            });
          final JCheckBox windowLocation = new JCheckBox(
              Language.get("preferences_general_window_location"),
              "true".equals(Preferences.get("window.location.remember")));
          windowLocation.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                set("window.location.remember", windowLocation.isSelected()+"");
              }
            });
          generalWindow.add(windowSize);
          generalWindow.add(windowLocation);
        tabGeneral.add(Language.getPreferencePanel(owner));
        tabGeneral.add(generalTheme);
        tabGeneral.add(generalWindow);
        tabGeneral.add(Box.createVerticalGlue());
      tabs.addTab(Language.get("preferences_general_title"),new JScrollPane(tabGeneral, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
      tabs.addTab(Language.get("preferences_plugins_title"), JNetMap.getController().getPluginManager().getPreferencePanel());
/* Footer */
    JPanel footer = new JPanel();
      footer.setLayout(new BoxLayout(footer, BoxLayout.X_AXIS));
        footer.setBorder(BorderFactory.createEmptyBorder(3, 8, 2, 3));
        JButton footerClose = new JButton(Language.get("buttons_save"), Resources.getIcon("save"));
          footerClose.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              save();
              d.dispose();
            }
          });
      footer.add(Box.createHorizontalGlue());
      footer.add(footerClose);
    d.add(tabs, BorderLayout.CENTER);
    d.add(footer, BorderLayout.SOUTH);
    d.pack();
    d.setVisible(true);
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.util.Preferences

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.