You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ServerMenu.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*
  2. * Copyright (c) 2006-2014 DMDirc Developers
  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.menubar;
  23. import com.dmdirc.ServerState;
  24. import com.dmdirc.addons.ui_swing.Apple;
  25. import com.dmdirc.addons.ui_swing.dialogs.newserver.NewServerDialog;
  26. import com.dmdirc.addons.ui_swing.dialogs.serversetting.ServerSettingsDialog;
  27. import com.dmdirc.addons.ui_swing.injection.DialogProvider;
  28. import com.dmdirc.addons.ui_swing.injection.KeyedDialogProvider;
  29. import com.dmdirc.addons.ui_swing.interfaces.ActiveFrameManager;
  30. import com.dmdirc.interfaces.Connection;
  31. import com.dmdirc.interfaces.LifecycleController;
  32. import javax.inject.Inject;
  33. import javax.inject.Singleton;
  34. import javax.swing.JMenu;
  35. import javax.swing.JMenuItem;
  36. import javax.swing.event.MenuEvent;
  37. import javax.swing.event.MenuListener;
  38. /**
  39. * A menu providing server related commands to the menu bar.
  40. */
  41. @Singleton
  42. public class ServerMenu extends JMenu implements MenuListener {
  43. /** A version number for this class. */
  44. private static final long serialVersionUID = 1;
  45. /** Active frame manager. */
  46. private final ActiveFrameManager activeFrameManager;
  47. /** Lifecycle controller. */
  48. private final LifecycleController lifecycleController;
  49. /** Provider to use to retrieve NSD instances. */
  50. private final DialogProvider<NewServerDialog> newServerProvider;
  51. /** Provider for server settings dialogs. */
  52. private final KeyedDialogProvider<Connection, ServerSettingsDialog> ssdProvider;
  53. /** Menu items which can be enabled/disabled. */
  54. private JMenuItem ssd;
  55. private JMenuItem disconnect;
  56. /**
  57. * Creates a new Server menu.
  58. *
  59. * @param activeFrameManager Active frame manager.
  60. * @param lifecycleController Lifecycle controller
  61. * @param newServerProvider Provider to use to retrieve NSD instances.
  62. * @param ssdProvider Provider to get SSD instances
  63. */
  64. @Inject
  65. public ServerMenu(
  66. final ActiveFrameManager activeFrameManager,
  67. final LifecycleController lifecycleController,
  68. final DialogProvider<NewServerDialog> newServerProvider,
  69. final KeyedDialogProvider<Connection, ServerSettingsDialog> ssdProvider) {
  70. super("Server");
  71. this.activeFrameManager = activeFrameManager;
  72. this.lifecycleController = lifecycleController;
  73. this.newServerProvider = newServerProvider;
  74. this.ssdProvider = ssdProvider;
  75. setMnemonic('s');
  76. addMenuListener(this);
  77. initServerMenu();
  78. menuSelected(null);
  79. }
  80. /**
  81. * Initialises the server menu.
  82. */
  83. private void initServerMenu() {
  84. final JMenuItem newServer = new JMenuItem();
  85. newServer.setText("New Server...");
  86. newServer.setMnemonic('n');
  87. newServer.addActionListener(e -> newServerProvider.displayOrRequestFocus());
  88. add(newServer);
  89. disconnect = new JMenuItem();
  90. disconnect.setText("Disconnect");
  91. disconnect.setMnemonic('d');
  92. disconnect.addActionListener(e -> activeFrameManager.getActiveFrame()
  93. .ifPresent(f -> f.getContainer().getOptionalConnection()
  94. .ifPresent(c -> c.disconnect())));
  95. add(disconnect);
  96. ssd = new JMenuItem();
  97. ssd.setMnemonic('s');
  98. ssd.setText("Server settings");
  99. ssd.addActionListener(e -> activeFrameManager.getActiveFrame()
  100. .ifPresent(f -> f.getContainer().getOptionalConnection()
  101. .ifPresent(ssdProvider::displayOrRequestFocus)));
  102. add(ssd);
  103. if (!Apple.isAppleUI()) {
  104. final JMenuItem exit = new JMenuItem();
  105. exit.setText("Exit");
  106. exit.setMnemonic('x');
  107. exit.addActionListener(e -> lifecycleController.quit());
  108. add(exit);
  109. }
  110. }
  111. @Override
  112. public final void menuSelected(final MenuEvent e) {
  113. final boolean connected = activeFrameManager.getActiveFrame().isPresent()
  114. && activeFrameManager.getActiveFrame().get().getContainer().getOptionalConnection()
  115. .isPresent() && activeFrameManager.getActiveFrame().get().getContainer()
  116. .getOptionalConnection().get().getState() == ServerState.CONNECTED;
  117. ssd.setEnabled(connected);
  118. disconnect.setEnabled(connected);
  119. }
  120. @Override
  121. public void menuDeselected(final MenuEvent e) {
  122. // Do nothing
  123. }
  124. @Override
  125. public void menuCanceled(final MenuEvent e) {
  126. // Do nothing
  127. }
  128. }