package apes; import javax.swing.JFrame; import javax.swing.undo.UndoManager; import apes.controllers.ConfigController; import apes.controllers.HelpController; import apes.controllers.InternalFormatController; import apes.controllers.KeyBindingController; import apes.controllers.LanguageController; import apes.controllers.PlayerController; import apes.controllers.PluginController; import apes.controllers.TabsController; import apes.controllers.TagsController; import apes.exceptions.UnidentifiedLanguageException; import apes.lib.ApesFile; import apes.lib.Language; import apes.lib.PluginHandler; import apes.models.Config; import apes.models.Tabs; import apes.views.ApesError; import apes.views.ApplicationView; /** * This is where it all starts. This creates a basic GUI with a layout and on * it a few components are placed. * * @author Johan Andersson (johandy@student.chalmers.se) */ public class Main extends JFrame { /** * Starts the program. * * @param args Files to loaded at startup. */ public Main(String[] args) throws Exception { // Parse the configuration file and set default values. Config config = Config.getInstance(); config.parse(); // Create the plugin handler PluginHandler pluginHandler = new PluginHandler(config.getOption("plugin_path")); // Fix language. Language language = Language.getInstance(); try { language.setLanguage(config.getOption("language")); language.load(); } catch(Exception e) { e.printStackTrace(); } // Create the undo manager. UndoManager undoManager = new UndoManager(); undoManager.setLimit(config.getIntOption("undo")); // Init tabs. Tabs tabs = new Tabs(); TabsController tabsController = new TabsController(tabs); // Set up some controllers. ConfigController configController = new ConfigController(); HelpController helpController = new HelpController(); PlayerController playerController = new PlayerController(); TagsController tagsController = new TagsController(); LanguageController languageController = new LanguageController(); PluginController pluginController = new PluginController(pluginHandler); InternalFormatController internalFormatController = new InternalFormatController(tabs, undoManager); KeyBindingController keyBindingController = new KeyBindingController(); // Create the application view. new ApplicationView(internalFormatController, tagsController, languageController, configController, pluginController, helpController, playerController, tabsController, keyBindingController); // Open all files passed in as arguments. for(int i = 0; i < args.length; i++) { try { ApesFile apesFile = new ApesFile(args[i]); tabs.add(apesFile.getInternalFormat()); } catch(UnidentifiedLanguageException e) { ApesError.unsupportedFormat(); } catch(Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { try { new Main(args); } catch(Exception e) { ApesError.unknownErrorOccurred(); System.out.println(); e.printStackTrace(); } } }