Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

MenuBar.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /*
  2. * Copyright (c) 2006-2010 Chris Smith, Shane Mc Cormack, Gregory Holmes
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. * SOFTWARE.
  21. */
  22. package com.dmdirc.addons.ui_swing.components;
  23. import com.dmdirc.addons.ui_swing.dialogs.StandardInputDialog;
  24. import com.dmdirc.ServerManager;
  25. import com.dmdirc.ServerState;
  26. import com.dmdirc.ui.interfaces.Window;
  27. import com.dmdirc.addons.ui_swing.Apple;
  28. import com.dmdirc.addons.ui_swing.MainFrame;
  29. import com.dmdirc.addons.ui_swing.components.frames.ChannelFrame;
  30. import com.dmdirc.addons.ui_swing.SwingController;
  31. import com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog;
  32. import com.dmdirc.addons.ui_swing.dialogs.NewServerDialog;
  33. import com.dmdirc.addons.ui_swing.dialogs.about.AboutDialog;
  34. import com.dmdirc.addons.ui_swing.dialogs.actionsmanager.ActionsManagerDialog;
  35. import com.dmdirc.addons.ui_swing.dialogs.aliases.AliasManagerDialog;
  36. import com.dmdirc.addons.ui_swing.dialogs.prefs.SwingPreferencesDialog;
  37. import com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog;
  38. import com.dmdirc.addons.ui_swing.framemanager.windowmenu.WindowMenuFrameManager;
  39. import java.awt.event.ActionEvent;
  40. import java.awt.event.ActionListener;
  41. import java.awt.Dialog.ModalityType;
  42. import javax.swing.Box;
  43. import javax.swing.JMenu;
  44. import javax.swing.JMenuBar;
  45. import javax.swing.JMenuItem;
  46. import javax.swing.event.MenuEvent;
  47. import javax.swing.event.MenuListener;
  48. import net.miginfocom.layout.PlatformDefaults;
  49. import net.miginfocom.swing.MigLayout;
  50. /**
  51. * DMDirc menu bar.
  52. */
  53. public class MenuBar extends JMenuBar implements ActionListener, MenuListener {
  54. /**
  55. * A version number for this class. It should be changed whenever the class
  56. * structure is changed (or anything else that would prevent serialized
  57. * objects being unserialized with the new class).
  58. */
  59. private static final long serialVersionUID = 1;
  60. /** CSD. */
  61. private JMenuItem csd;
  62. /** SSD. */
  63. private JMenuItem ssd;
  64. /** disconnect. */
  65. private JMenuItem disconnect;
  66. /** join. */
  67. private JMenuItem join;
  68. /** Swing controller. */
  69. private SwingController controller;
  70. /** Main frame. */
  71. private MainFrame mainFrame;
  72. /**
  73. * Instantiates a new menu bar.
  74. *
  75. * @param controller Swing controller
  76. * @param mainFrame Main frame
  77. */
  78. public MenuBar(final SwingController controller, final MainFrame mainFrame) {
  79. super();
  80. this.controller = controller;
  81. this.mainFrame = mainFrame;
  82. setLayout(new MigLayout("ins 0, fillx"));
  83. initServerMenu();
  84. initChannelMenu();
  85. initSettingsMenu();
  86. add(new WindowMenuFrameManager(controller));
  87. initHelpMenu();
  88. add(Box.createHorizontalGlue(), "growx, pushx");
  89. add(new MDIBar(mainFrame));
  90. add(Box.createHorizontalStrut(PlatformDefaults.getPanelInsets(1).getUnit()));
  91. getActionMap().setParent(null);
  92. getActionMap().clear();
  93. }
  94. /**
  95. * Initialises the server menu.
  96. */
  97. private void initServerMenu() {
  98. JMenuItem menuItem;
  99. final JMenu menu = new JMenu("Server");
  100. menu.setMnemonic('s');
  101. menu.addMenuListener(this);
  102. add(menu);
  103. menuItem = new JMenuItem();
  104. menuItem.setText("New Server...");
  105. menuItem.setMnemonic('n');
  106. menuItem.setActionCommand("NewServer");
  107. menuItem.addActionListener(this);
  108. menu.add(menuItem);
  109. disconnect = new JMenuItem();
  110. disconnect.setText("Disconnect");
  111. disconnect.setMnemonic('d');
  112. disconnect.setActionCommand("Disconnect");
  113. disconnect.addActionListener(this);
  114. menu.add(disconnect);
  115. ssd = new JMenuItem();
  116. ssd.setMnemonic('s');
  117. ssd.setText("Server settings");
  118. ssd.setActionCommand("ServerSettings");
  119. ssd.addActionListener(this);
  120. menu.add(ssd);
  121. if (!Apple.isAppleUI()) {
  122. menuItem = new JMenuItem();
  123. menuItem.setText("Exit");
  124. menuItem.setMnemonic('x');
  125. menuItem.setActionCommand("Exit");
  126. menuItem.addActionListener(this);
  127. menu.add(menuItem);
  128. }
  129. }
  130. /**
  131. * Initialises the channel menu.
  132. */
  133. private void initChannelMenu() {
  134. final JMenu menu = new JMenu("Channel");
  135. menu.setMnemonic('c');
  136. menu.addMenuListener(this);
  137. add(menu);
  138. join = new JMenuItem();
  139. join.setText("Join Channel...");
  140. join.setMnemonic('j');
  141. join.setActionCommand("JoinChannel");
  142. join.addActionListener(this);
  143. menu.add(join);
  144. csd = new JMenuItem();
  145. csd.setMnemonic('c');
  146. csd.setText("Channel Settings");
  147. csd.setActionCommand("ChannelSettings");
  148. csd.addActionListener(this);
  149. menu.add(csd);
  150. }
  151. /**
  152. * Initialises the settings menu.
  153. */
  154. private void initSettingsMenu() {
  155. JMenuItem menuItem;
  156. final JMenu menu = new JMenu("Settings");
  157. menu.setMnemonic('e');
  158. menu.addMenuListener(this);
  159. add(menu);
  160. if (!Apple.isAppleUI()) {
  161. menuItem = new JMenuItem();
  162. menuItem.setText("Preferences");
  163. menuItem.setMnemonic('p');
  164. menuItem.setActionCommand("Preferences");
  165. menuItem.addActionListener(this);
  166. menu.add(menuItem);
  167. }
  168. menuItem = new JMenuItem();
  169. menuItem.setMnemonic('m');
  170. menuItem.setText("Profile Manager");
  171. menuItem.setActionCommand("Profile");
  172. menuItem.addActionListener(this);
  173. menu.add(menuItem);
  174. menuItem = new JMenuItem();
  175. menuItem.setMnemonic('a');
  176. menuItem.setText("Actions Manager");
  177. menuItem.setActionCommand("Actions");
  178. menuItem.addActionListener(this);
  179. menu.add(menuItem);
  180. menuItem = new JMenuItem();
  181. menuItem.setMnemonic('l');
  182. menuItem.setText("Alias Manager");
  183. menuItem.setActionCommand("Aliases");
  184. menuItem.addActionListener(this);
  185. menu.add(menuItem);
  186. }
  187. /**
  188. * Initialises the help menu.
  189. */
  190. private void initHelpMenu() {
  191. JMenuItem menuItem;
  192. final JMenu menu = new JMenu("Help");
  193. menu.setMnemonic('h');
  194. add(menu);
  195. menuItem = new JMenuItem();
  196. menuItem.setMnemonic('j');
  197. menuItem.setText("Join Dev channel");
  198. menuItem.setActionCommand("JoinDevChat");
  199. menuItem.addActionListener(this);
  200. menu.add(menuItem);
  201. menuItem = new JMenuItem();
  202. menuItem.setMnemonic('f');
  203. menuItem.setText("Send Feedback");
  204. menuItem.setActionCommand("feedback");
  205. menuItem.addActionListener(this);
  206. menu.add(menuItem);
  207. if (!Apple.isAppleUI()) {
  208. menuItem = new JMenuItem();
  209. menuItem.setMnemonic('a');
  210. menuItem.setText("About");
  211. menuItem.setActionCommand("About");
  212. menuItem.addActionListener(this);
  213. menu.add(menuItem);
  214. }
  215. }
  216. /**
  217. * {@inheritDoc}
  218. *
  219. * @param e Action event
  220. */
  221. @Override
  222. public void actionPerformed(final ActionEvent e) {
  223. if ("NewServer".equals(e.getActionCommand())) {
  224. NewServerDialog.showNewServerDialog(mainFrame);
  225. } else if ("Preferences".equals(e.getActionCommand())) {
  226. SwingPreferencesDialog.showSwingPreferencesDialog(mainFrame);
  227. } else if (e.getActionCommand().equals("About")) {
  228. AboutDialog.showAboutDialog(mainFrame);
  229. } else if (e.getActionCommand().equals("Profile")) {
  230. ProfileManagerDialog.showProfileManagerDialog(mainFrame);
  231. } else if (e.getActionCommand().equals("Exit")) {
  232. mainFrame.quit();
  233. } else if (e.getActionCommand().equals("Actions")) {
  234. ActionsManagerDialog.showActionsManagerDialog(mainFrame, controller);
  235. } else if (e.getActionCommand().equals("Aliases")) {
  236. AliasManagerDialog.showAliasManagerDialog(mainFrame);
  237. } else if (e.getActionCommand().equals("JoinDevChat")) {
  238. ServerManager.getServerManager().joinDevChat();
  239. } else if (e.getActionCommand().equals("feedback")) {
  240. FeedbackDialog.showFeedbackDialog(mainFrame);
  241. } else if (e.getActionCommand().equals("ChannelSettings")) {
  242. final Window activeWindow = controller.getActiveWindow();
  243. if (activeWindow instanceof ChannelFrame) {
  244. controller.showChannelSettingsDialog(((ChannelFrame) activeWindow).
  245. getChannel());
  246. }
  247. } else if (e.getActionCommand().equals("ServerSettings")) {
  248. controller.showServerSettingsDialog(controller.getActiveServer());
  249. } else if (e.getActionCommand().equals("Disconnect")) {
  250. controller.getActiveServer().disconnect();
  251. } else if (e.getActionCommand().equals("JoinChannel")) {
  252. new StandardInputDialog(mainFrame, ModalityType.MODELESS,
  253. "Join channel", "Enter the name of the channel to join.") {
  254. /** Serial version UID. */
  255. private static final long serialVersionUID = 1;
  256. /** {@inheritDoc} */
  257. @Override
  258. public boolean save() {
  259. controller.getActiveServer().join(getText());
  260. return true;
  261. }
  262. /** {@inheritDoc} */
  263. @Override
  264. public void cancelled() {
  265. //Ignore
  266. }
  267. }.display();
  268. }
  269. }
  270. /** {@inheritDoc} */
  271. @Override
  272. public void menuSelected(final MenuEvent e) {
  273. final Window activeWindow = controller.getActiveWindow();
  274. ssd.setEnabled(activeWindow != null && activeWindow.getContainer().
  275. getServer() != null && activeWindow.getContainer().
  276. getServer().getState() == ServerState.CONNECTED);
  277. csd.setEnabled(activeWindow instanceof ChannelFrame && activeWindow.getContainer().
  278. getServer() != null && activeWindow.getContainer().
  279. getServer().getState() == ServerState.CONNECTED);
  280. disconnect.setEnabled(activeWindow != null && activeWindow.getContainer().
  281. getServer() != null && activeWindow.getContainer().
  282. getServer().getState() == ServerState.CONNECTED);
  283. join.setEnabled(activeWindow != null && activeWindow.getContainer().
  284. getServer() != null && activeWindow.getContainer().
  285. getServer().getState() == ServerState.CONNECTED);
  286. }
  287. /** {@inheritDoc} */
  288. @Override
  289. public void menuDeselected(final MenuEvent e) {
  290. //Ignore
  291. }
  292. /** {@inheritDoc} */
  293. @Override
  294. public void menuCanceled(final MenuEvent e) {
  295. //Ignore
  296. }
  297. }