package view;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import view.interfaces.AbstractTab;
import manager.TabManager;
import manager.structure.Tab;
import model.exception.TabInitException;
import model.util.WindowUtils;
import net.miginfocom.swing.MigLayout;
import com.cf.mls.MLS;
import com.cf.mls.extension.LanguageMenuExtension;
import config.Config;
import config.Constants;
public class MainWindow extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* the multi language supporter
*/
private MLS mls;
/**
* all tabs
*/
private List<Tab> tabs;
private JPanel contentPane;
private JTabbedPane tabbedPane;
private JMenu languageM;
private JMenu fileM;
private JMenu helpM;
private JMenu skinsM;
private JMenu settingsM;
private JMenuItem hifiLookAndFeelMI;
private JMenuItem acrylLookAndFeelMI;
private JMenuItem aeroLookAndFeelMI;
private JMenuItem aluminiumLookAndFeelMI;
private JMenuItem bernsteinLookAndFeelMI;
private JMenuItem FastLookAndFeelMI;
private JMenuItem graphiteLookAndFeelMI;
private JMenuItem lunaLookAndFeelMI;
private JMenuItem mcWinLookAndFeelMI;
private JMenuItem mintLookAndFeelMI;
private JMenuItem noireLookAndFeelMI;
private JMenuItem smartLookAndFeelMI;
private JMenuItem textureLookAndFeelMI;
private JMenuItem quitMI;
private JMenuItem settingsMI;
private JMenuItem updateMI;
private JMenuItem debugMI;
private JMenuItem donateMI;
private JMenuItem licenseMI;
private JMenuItem aboutMI;
/**
* Constructor
*/
public MainWindow() {
mls = new MLS("view/languageFiles/MainWindow", Config.getInstance().getCurrentLanguage());
mls.setConfigPath("view/mls.conf");
mls.setToolTipDuration(-1);
this.tabs = TabManager.getInstance().getTabs();
}
/**
* inits the window
*
* @throws TabInitException
* thrown if a tab couldn't be initialised
*/
public void init() throws TabInitException {
mls.addJFrame("window", this);
languageM = mls.generateJMenu("languageM");
fileM = mls.generateJMenu("fileM");
helpM = mls.generateJMenu("helpM");
settingsM = mls.generateJMenu("settingsM");
skinsM = mls.generateJMenu("skinsM");
hifiLookAndFeelMI = mls.generateJMenuItem("hifiLookAndFeelMI");
acrylLookAndFeelMI = mls.generateJMenuItem("acrylLookAndFeelMI");
aeroLookAndFeelMI = mls.generateJMenuItem("aeroLookAndFeelMI");
aluminiumLookAndFeelMI = mls.generateJMenuItem("aluminiumLookAndFeelMI");
bernsteinLookAndFeelMI = mls.generateJMenuItem("bernsteinLookAndFeelMI");
FastLookAndFeelMI = mls.generateJMenuItem("fastLookAndFeelMI");
graphiteLookAndFeelMI = mls.generateJMenuItem("graphiteLookAndFeelMI");
lunaLookAndFeelMI = mls.generateJMenuItem("lunaLookAndFeelMI");
mcWinLookAndFeelMI = mls.generateJMenuItem("mcWinLookAndFeelMI");
mintLookAndFeelMI = mls.generateJMenuItem("mintLookAndFeelMI");
noireLookAndFeelMI = mls.generateJMenuItem("noireLookAndFeelMI");
smartLookAndFeelMI = mls.generateJMenuItem("smartLookAndFeelMI");
textureLookAndFeelMI = mls.generateJMenuItem("textureLookAndFeelMI");
quitMI = mls.generateJMenuItem("quitMI");
settingsMI = mls.generateJMenuItem("settingsMI");
updateMI = mls.generateJMenuItem("updateMI");
debugMI = mls.generateJMenuItem("debugMI");
donateMI = mls.generateJMenuItem("donateMI");
licenseMI = mls.generateJMenuItem("licenseMI");
aboutMI = mls.generateJMenuItem("aboutMI");
JMenuBar menubar = new JMenuBar();
setJMenuBar(menubar);
menubar.add(fileM);
menubar.add(skinsM);
menubar.add(languageM);
menubar.add(settingsM);
menubar.add(helpM);
fileM.add(quitMI);
skinsM.add(acrylLookAndFeelMI);
skinsM.add(aeroLookAndFeelMI);
skinsM.add(aluminiumLookAndFeelMI);
skinsM.add(bernsteinLookAndFeelMI);
skinsM.add(FastLookAndFeelMI);
skinsM.add(graphiteLookAndFeelMI);
skinsM.add(hifiLookAndFeelMI);
skinsM.add(lunaLookAndFeelMI);
skinsM.add(mcWinLookAndFeelMI);
skinsM.add(mintLookAndFeelMI);
skinsM.add(noireLookAndFeelMI);
skinsM.add(smartLookAndFeelMI);
skinsM.add(textureLookAndFeelMI);
settingsM.add(settingsMI);
settingsM.addSeparator();
settingsM.add(updateMI);
if (Constants.DEBUG) {
settingsM.addSeparator();
settingsM.add(debugMI);
}
helpM.add(donateMI);
helpM.addSeparator();
helpM.add(licenseMI);
helpM.addSeparator();
helpM.add(aboutMI);
contentPane = new JPanel();
JScrollPane sp = new JScrollPane();
sp.setViewportView(contentPane);
setContentPane(sp);
// setContentPane(contentPane);
contentPane.setLayout(new MigLayout("insets 5", "[grow]", "[grow]"));
tabbedPane = mls.generateJTabbedPane("tabbedPane", true);
contentPane.add(tabbedPane, "grow");
// init tabs
for (Tab t : this.tabs) {
t.getTab().init();
mls.addTab(tabbedPane, t.getTab(), t.getIdentifier());
}
mls.addCheckBoxLanguageMenuItem(languageM, mls.getLocale(), new LanguageMenuExtension() {
@Override
public void changeLanguage(Locale lang) {
for (Tab t : tabs) {
t.getTab().changeLanguage(lang);
t.getTab().revalidate();
}
Config.getInstance().setCurrentLanguage(lang);
revalidate();
pack();
}
});
setMinimumSize(new Dimension(1000, 500));
// check resolution
double width = Config.getInstance().getCurrDimension().getWidth();
double height = Config.getInstance().getCurrDimension().getHeight();
if (WindowUtils.getScreenResolution().getWidth() < width)
width = WindowUtils.getScreenResolution().getWidth();
if (WindowUtils.getScreenResolution().getHeight() < height)
height = WindowUtils.getScreenResolution().getHeight() - 50;
setPreferredSize(new Dimension((int) width, (int) height));
pack();
}
/**
* gets the current language
*
* @return the current locale
*/
public Locale getCurrentLanguage() {
return mls.getLocale();
}
/**
* gets the current size of the window
*
* @return the dimension
*/
public Dimension getCurrentSize() {
return getSize();
}
/**
* shows a given message
*
* @param identifier
* identifier for the translator
*/
public void showMessage(String identifier) {
JOptionPane.showMessageDialog(this, mls.getMessage(identifier));
}
/**
* shows a given message and asks for yes or no
*
* @param identifier
* identifier for the translator
*
* @return the JOPtionPane.YES or NO answer
*/
public int showConfirmationMessage(String identifier) {
return JOptionPane.showConfirmDialog(this, this.mls.getMessage(identifier));
}
/**
* sets an ActionListener
*
* @param l
* the ActionListener
*/
public void setActionListener(ActionListener l) {
hifiLookAndFeelMI.addActionListener(l);
acrylLookAndFeelMI.addActionListener(l);
aeroLookAndFeelMI.addActionListener(l);
aluminiumLookAndFeelMI.addActionListener(l);
bernsteinLookAndFeelMI.addActionListener(l);
FastLookAndFeelMI.addActionListener(l);
graphiteLookAndFeelMI.addActionListener(l);
lunaLookAndFeelMI.addActionListener(l);
mcWinLookAndFeelMI.addActionListener(l);
mintLookAndFeelMI.addActionListener(l);
noireLookAndFeelMI.addActionListener(l);
smartLookAndFeelMI.addActionListener(l);
textureLookAndFeelMI.addActionListener(l);
quitMI.addActionListener(l);
settingsMI.addActionListener(l);
updateMI.addActionListener(l);
debugMI.addActionListener(l);
donateMI.addActionListener(l);
licenseMI.addActionListener(l);
aboutMI.addActionListener(l);
}
/**
* gets the tab with the given index
*
* @param index
* the given index
*
* @return the tab
*/
public AbstractTab getTab(int index) {
return this.tabs.get(index).getTab();
}
}