⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.java

📁 Contiki is an open source, highly portable, multi-tasking operating system for memory-constrained n
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    // Append project directory configurations    for (File projectDir : currentProjectDirs) {      try {        // Append config to general config        projectConfig.appendProjectDir(projectDir);      } catch (FileNotFoundException e) {        logger.fatal("Could not find project config file: " + projectDir);        return false;      } catch (IOException e) {        logger            .fatal("Error when reading project config file: " + projectDir);        return false;      }    }    // Create class loader    projectDirClassLoader = createClassLoader(currentProjectDirs);    // Register mote types    String[] moteTypeClassNames = projectConfig.getStringArrayValue(GUI.class,        "MOTETYPES");    if (moteTypeClassNames != null) {      for (String moteTypeClassName : moteTypeClassNames) {        Class<? extends MoteType> moteTypeClass = tryLoadClass(this,            MoteType.class, moteTypeClassName);        if (moteTypeClass != null) {          registerMoteType(moteTypeClass);          // logger.info("Loaded mote type class: " + moteTypeClassName);        } else {          logger.warn("Could not load mote type class: " + moteTypeClassName);        }      }    }    // Register plugins    registerPlugin(SimControl.class, false); // Not in menu    registerPlugin(SimInformation.class, false); // Not in menu    registerPlugin(MoteTypeInformation.class, false); // Not in menu    String[] pluginClassNames = projectConfig.getStringArrayValue(GUI.class,        "PLUGINS");    if (pluginClassNames != null) {      for (String pluginClassName : pluginClassNames) {        Class<? extends Plugin> pluginClass = tryLoadClass(this, Plugin.class,            pluginClassName);        if (pluginClass != null) {          registerPlugin(pluginClass);          // logger.info("Loaded plugin class: " + pluginClassName);        } else {          logger.warn("Could not load plugin class: " + pluginClassName);        }      }    }    // Reregister temporary plugins again    if (oldTempPlugins != null) {      for (Class<? extends Plugin> pluginClass : oldTempPlugins) {        if (registerTemporaryPlugin(pluginClass)) {          // logger.info("Reregistered temporary plugin class: " +          // getDescriptionOf(pluginClass));        } else          logger.warn("Could not reregister temporary plugin class: "              + getDescriptionOf(pluginClass));      }    }    // Register IP distributors    String[] ipDistClassNames = projectConfig.getStringArrayValue(GUI.class,        "IP_DISTRIBUTORS");    if (ipDistClassNames != null) {      for (String ipDistClassName : ipDistClassNames) {        Class<? extends IPDistributor> ipDistClass = tryLoadClass(this,            IPDistributor.class, ipDistClassName);        if (ipDistClass != null) {          registerIPDistributor(ipDistClass);          // logger.info("Loaded IP distributor class: " + ipDistClassName);        } else {          logger              .warn("Could not load IP distributor class: " + ipDistClassName);        }      }    }    // Register positioners    String[] positionerClassNames = projectConfig.getStringArrayValue(        GUI.class, "POSITIONERS");    if (positionerClassNames != null) {      for (String positionerClassName : positionerClassNames) {        Class<? extends Positioner> positionerClass = tryLoadClass(this,            Positioner.class, positionerClassName);        if (positionerClass != null) {          registerPositioner(positionerClass);          // logger.info("Loaded positioner class: " + positionerClassName);        } else {          logger              .warn("Could not load positioner class: " + positionerClassName);        }      }    }    // Register radio mediums    String[] radioMediumsClassNames = projectConfig.getStringArrayValue(        GUI.class, "RADIOMEDIUMS");    if (radioMediumsClassNames != null) {      for (String radioMediumClassName : radioMediumsClassNames) {        Class<? extends RadioMedium> radioMediumClass = tryLoadClass(this,            RadioMedium.class, radioMediumClassName);        if (radioMediumClass != null) {          registerRadioMedium(radioMediumClass);          // logger.info("Loaded radio medium class: " + radioMediumClassName);        } else {          logger.warn("Could not load radio medium class: "              + radioMediumClassName);        }      }    }    return true;  }  /**   * Returns the current project configuration common to the entire simulator.   *    * @return Current project configuration   */  public ProjectConfig getProjectConfig() {    return projectConfig;  }  /**   * Returns the current project directories common to the entire simulator.   *    * @return Current project directories.   */  public Vector<File> getProjectDirs() {    return currentProjectDirs;  }  // // PLUGIN METHODS ////  /**   * Show a started plugin in working area.   *    * @param plugin   *          Internal frame to add   */  public void showPlugin(VisPlugin plugin) {    int nrFrames = myDesktopPane.getAllFrames().length;    myDesktopPane.add(plugin);    // Set standard size if not specified by plugin itself    if (plugin.getWidth() <= 0 || plugin.getHeight() <= 0) {      plugin.setSize(FRAME_STANDARD_WIDTH, FRAME_STANDARD_HEIGHT);    }    // Set location if not already visible    if (!plugin.isVisible()) {      plugin.setLocation((nrFrames + 1) * FRAME_NEW_OFFSET, (nrFrames + 1)          * FRAME_NEW_OFFSET);      plugin.setVisible(true);    }    // Deselect all other plugins before selecting the new one    try {      for (JInternalFrame existingPlugin : myDesktopPane.getAllFrames()) {        existingPlugin.setSelected(false);      }      plugin.setSelected(true);    } catch (Exception e) {      // Ignore    }    // Mote plugin to front    myDesktopPane.moveToFront(plugin);  }  /**   * Remove a plugin from working area.   *    * @param plugin   *          Plugin to remove   * @param askUser   *          If plugin is the last one, ask user if we should remove current   *          simulation also?   */  public void removePlugin(Plugin plugin, boolean askUser) {    // Clear any allocated resources and remove plugin    plugin.closePlugin();    startedPlugins.remove(plugin);    // Dispose plugin if it has visualizer    if (plugin instanceof VisPlugin) {      ((VisPlugin) plugin).dispose();    }    if (getSimulation() != null && askUser && startedPlugins.isEmpty()) {      String s1 = "Remove";      String s2 = "Cancel";      Object[] options = { s1, s2 };      int n = JOptionPane.showOptionDialog(frame,          "You have an active simulation.\nDo you want to remove it?",          "Remove current simulation?", JOptionPane.YES_NO_OPTION,          JOptionPane.QUESTION_MESSAGE, null, options, s1);      if (n != JOptionPane.YES_OPTION) {        return;      }      doRemoveSimulation(false);    }  }  /**   * Starts a plugin of given plugin class with given arguments.   *    * @param pluginClass   *          Plugin class   * @param gui   *          GUI passed as argument to all plugins   * @param simulation   *          Simulation passed as argument to mote and simulation plugins   * @param mote   *          Mote passed as argument to mote plugins   * @return Start plugin if any   */  public Plugin startPlugin(Class<? extends Plugin> pluginClass, GUI gui,      Simulation simulation, Mote mote) {    // Check that plugin class is registered    if (!pluginClasses.contains(pluginClass)) {      logger.fatal("Plugin class not registered: " + pluginClass);      return null;    }    // Check that visualizer plugin is not started without GUI    if (!isVisualized()) {      try {        pluginClass.asSubclass(VisPlugin.class);        // Cast succeded, plugin is visualizer plugin!        logger.fatal("Can't start visualizer plugin (no GUI): " + pluginClass);        return null;      } catch (ClassCastException e) {      }    }    // Construct plugin depending on plugin type    Plugin newPlugin = null;    int pluginType = pluginClass.getAnnotation(PluginType.class).value();    try {      if (pluginType == PluginType.MOTE_PLUGIN) {        if (mote == null) {          logger.fatal("Can't start mote plugin (no mote selected)");          return null;        }        newPlugin = pluginClass.getConstructor(            new Class[] { Mote.class, Simulation.class, GUI.class })            .newInstance(mote, simulation, gui);        // Tag plugin with mote        newPlugin.tagWithObject(mote);      } else if (pluginType == PluginType.SIM_PLUGIN          || pluginType == PluginType.SIM_STANDARD_PLUGIN) {        if (simulation == null) {          logger.fatal("Can't start simulation plugin (no simulation)");          return null;        }        newPlugin = pluginClass.getConstructor(            new Class[] { Simulation.class, GUI.class }).newInstance(            simulation, gui);      } else if (pluginType == PluginType.COOJA_PLUGIN          || pluginType == PluginType.COOJA_STANDARD_PLUGIN) {        if (gui == null) {          logger.fatal("Can't start COOJA plugin (no GUI)");          return null;        }        newPlugin = pluginClass.getConstructor(new Class[] { GUI.class })            .newInstance(gui);      }    } catch (Exception e) {      logger.fatal("Exception thrown when starting plugin: " + e);      e.printStackTrace();      return null;    }    if (newPlugin == null)      return null;    // Add to active plugins list    startedPlugins.add(newPlugin);    // Show plugin if visualizer type    if (newPlugin instanceof VisPlugin) {      myGUI.showPlugin((VisPlugin) newPlugin);    }    return newPlugin;  }  /**   * Register a plugin to be included in the GUI. The plugin will be visible in   * the menubar.   *    * @param newPluginClass   *          New plugin to register   * @return True if this plugin was registered ok, false otherwise   */  public boolean registerPlugin(Class<? extends Plugin> newPluginClass) {    return registerPlugin(newPluginClass, true);  }  /**   * Register a temporary plugin to be included in the GUI. The plugin will be   * visible in the menubar. This plugin will automatically be unregistered if   * the current simulation is removed.   *    * @param newPluginClass   *          New plugin to register   * @return True if this plugin was registered ok, false otherwise   */  public boolean registerTemporaryPlugin(Class<? extends Plugin> newPluginClass) {    if (pluginClasses.contains(newPluginClass))      return false;    boolean returnVal = registerPlugin(newPluginClass, true);    if (!returnVal)      return false;    pluginClassesTemporary.add(newPluginClass);    return true;  }  /**   * Unregister a plugin class. Removes any plugin menu items links as well.   *    * @param pluginClass   *          Plugin class to unregister   */  public void unregisterPlugin(Class<? extends Plugin> pluginClass) {    // Remove (if existing) plugin class menu items    for (Component menuComponent : menuPlugins.getMenuComponents()) {      if (menuComponent.getClass().isAssignableFrom(JMenuItem.class)) {        JMenuItem menuItem = (JMenuItem) menuComponent;        if (menuItem.getClientProperty("class").equals(pluginClass))          menuPlugins.remove(menuItem);      }    }    if (menuMotePluginClasses.contains(pluginClass))      menuMotePluginClasses.remove(pluginClass);    // Remove from plugin vectors (including temporary)    if (pluginClasses.contains(pluginClass))      pluginClasses.remove(pluginClass);    if (pluginClassesTemporary.contains(pluginClass))      pluginClassesTemporary.remove(pluginClass);  }  /**   * Register a plugin to be included in the GUI.   *    * @param newPluginClass   *          New plugin to register   * @param addToMenu   *          Should this plugin be added to the dedicated plugins menubar?   * @return True if this plugin was registered ok, false otherwise   */  private boolean registerPlugin(Class<? extends Plugin> newPluginClass,      boolean addToMenu) {    // Get description annotation (if any)    String description = getDescriptionOf(newPluginClass);    // Get plugin type annotation (required)    int pluginType;    if (newPluginClass.isAnnotationPresent(PluginType.class)) {      pluginType = newPluginClass.getAnnotation(PluginType.class).value();    } else {      pluginType = PluginType.UNDEFINED_PLUGIN;    }    // Check that plugin type is valid and constructor exists    try {      if (pluginType == PluginType.MOTE_PLUGIN) {        newPluginClass.getConstructor(new Class[] { Mote.class,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -