package com.aelitis.azureus.ui.swt.shells.main; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.widgets.*; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.config.ParameterListener; import org.gudy.azureus2.core3.config.impl.ConfigurationDefaults; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.core3.util.Debug; import org.gudy.azureus2.core3.util.SystemProperties; import org.gudy.azureus2.ui.swt.Messages; import org.gudy.azureus2.ui.swt.Utils; import org.gudy.azureus2.ui.swt.mainwindow.*; import com.aelitis.azureus.core.cnetwork.ContentNetwork; import com.aelitis.azureus.core.util.FeatureAvailability; import com.aelitis.azureus.ui.UIFunctionsManager; import com.aelitis.azureus.ui.mdi.MultipleDocumentInterface; import com.aelitis.azureus.ui.swt.feature.FeatureManagerUI; import com.aelitis.azureus.ui.swt.shells.RemotePairingWindow; import com.aelitis.azureus.ui.swt.skin.SWTSkin; import com.aelitis.azureus.ui.swt.skin.SWTSkinObject; import com.aelitis.azureus.ui.swt.skin.SWTSkinUtils; import com.aelitis.azureus.ui.swt.toolbar.ToolBarItem; import com.aelitis.azureus.ui.swt.views.skin.SBC_PlusFTUX; import com.aelitis.azureus.ui.swt.views.skin.SkinViewManager; import com.aelitis.azureus.ui.swt.views.skin.ToolBarView; import com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBar; import com.aelitis.azureus.util.ConstantsVuze; import com.aelitis.azureus.util.ContentNetworkUtils; public class MainMenu implements IMainMenu, IMenuConstants { final String PREFIX_V2 = "MainWindow.menu"; final String PREFIX_V3 = "v3.MainWindow.menu"; private Menu menuBar; /** * Creates the main menu on the supplied shell * * @param shell */ public MainMenu(SWTSkin skin, final Shell shell) { if (null == skin) { throw new NullPointerException( "The parameter [SWTSkin skin] can not be null"); } buildMenu(shell); } private void buildMenu(Shell parent) { //The Main Menu menuBar = new Menu(parent, SWT.BAR); parent.setMenuBar(menuBar); addFileMenu(); //addViewMenu(); addSimpleViewMenu(); addCommunityMenu(); addToolsMenu(); /* * The Torrents menu is a user-configured option */ if (true == COConfigurationManager.getBooleanParameter("show_torrents_menu")) { addTorrentMenu(); } addWindowMenu(); // ===== Debug menu (development only)==== if (org.gudy.azureus2.core3.util.Constants.isCVSVersion()) { final Menu menuDebug = org.gudy.azureus2.ui.swt.mainwindow.DebugMenuHelper.createDebugMenuItem(menuBar); menuDebug.addMenuListener(new MenuListener() { public void menuShown(MenuEvent e) { MenuItem[] items = menuDebug.getItems(); Utils.disposeSWTObjects(items); DebugMenuHelper.createDebugMenuItem(menuDebug); MenuFactory.addSeparatorMenuItem(menuDebug); MenuItem menuItem = new MenuItem(menuDebug, SWT.PUSH); menuItem.setText("Log Views"); menuItem.setEnabled(false); PluginsMenuHelper.getInstance().buildPluginLogsMenu(menuDebug); } public void menuHidden(MenuEvent e) { } }); } addV3HelpMenu(); /* * Enabled/disable menus based on what ui mode we're in; this method call controls * which menus are enabled when we're in Vuze vs. Vuze Advanced */ MenuFactory.updateEnabledStates(menuBar); } /** * Creates the File menu and all its children */ private void addFileMenu() { MenuItem fileItem = MenuFactory.createFileMenuItem(menuBar); final Menu fileMenu = fileItem.getMenu(); builFileMenu(fileMenu); fileMenu.addListener(SWT.Show, new Listener() { public void handleEvent(Event event) { MenuItem[] menuItems = fileMenu.getItems(); for (int i = 0; i < menuItems.length; i++) { menuItems[i].dispose(); } builFileMenu(fileMenu); } }); } /** * Builds the File menu dynamically * @param fileMenu */ private void builFileMenu(Menu fileMenu) { MenuItem openMenuItem = MenuFactory.createOpenMenuItem(fileMenu); Menu openSubMenu = openMenuItem.getMenu(); MenuFactory.addOpenTorrentMenuItem(openSubMenu); MenuFactory.addOpenTorrentForTrackingMenuItem(openSubMenu); MenuFactory.addOpenVuzeFileMenuItem(openSubMenu); int userMode = COConfigurationManager.getIntParameter("User Mode"); if ( userMode > 0 ){ Menu shareSubMenu = MenuFactory.createShareMenuItem(fileMenu).getMenu(); MenuFactory.addShareFileMenuItem(shareSubMenu); MenuFactory.addShareFolderMenuItem(shareSubMenu); MenuFactory.addShareFolderContentMenuItem(shareSubMenu); MenuFactory.addShareFolderContentRecursiveMenuItem(shareSubMenu); } MenuFactory.addCreateMenuItem(fileMenu); if (FeatureManagerUI.enabled) { MenuFactory.addSeparatorMenuItem(fileMenu); MenuFactory.addMenuItem(fileMenu, "menu.plus", new Listener() { public void handleEvent(Event event) { SBC_PlusFTUX.setSourceRef("menu-file"); MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_PLUS); } }); } MenuFactory.addSeparatorMenuItem(fileMenu); MenuFactory.addCloseWindowMenuItem(fileMenu); MenuFactory.addCloseDetailsMenuItem(fileMenu); MenuFactory.addCloseDownloadBarsToMenu(fileMenu); MenuFactory.addSeparatorMenuItem(fileMenu); MenuFactory.createTransfersMenuItem(fileMenu); /* * No need for restart and exit on OS X since it's already handled on the application menu */ if (!Utils.isCarbon) { MenuFactory.addSeparatorMenuItem(fileMenu); MenuFactory.addRestartMenuItem(fileMenu); } if (!Constants.isOSX) { MenuFactory.addExitMenuItem(fileMenu); } } private void addSimpleViewMenu() { try { MenuItem viewItem = MenuFactory.createViewMenuItem(menuBar); final Menu viewMenu = viewItem.getMenu(); viewMenu.addListener(SWT.Show, new Listener() { public void handleEvent(Event event) { Utils.disposeSWTObjects(viewMenu.getItems()); buildSimpleViewMenu(viewMenu); } }); } catch (Exception e) { Debug.out("Error creating View Menu", e); } } /** * @param viewMenu * * @since 4.5.0.3 */ protected void buildSimpleViewMenu(final Menu viewMenu) { try { MenuFactory.addMenuItem(viewMenu, SWT.CHECK, PREFIX_V3 + ".view.sidebar", new Listener() { public void handleEvent(Event event) { SideBar sidebar = (SideBar) SkinViewManager.getByClass(SideBar.class); if (sidebar != null) { sidebar.flipSideBarVisibility(); } } }); MenuFactory.addMenuItem(viewMenu, SWT.CHECK, PREFIX_V3 + ".view.toolbartext", new Listener() { public void handleEvent(Event event) { ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); if (tb != null) { tb.flipShowText(); } } }); if (Constants.isCVSVersion()) { MenuItem itemStatusBar = MenuFactory.createTopLevelMenuItem(viewMenu, "v3.MainWindow.menu.view.statusbar"); itemStatusBar.setText(itemStatusBar.getText() + " (CVS Only)"); Menu menuStatusBar = itemStatusBar.getMenu(); final String[] statusAreaLangs = { "ConfigView.section.style.status.show_sr", "ConfigView.section.style.status.show_nat", "ConfigView.section.style.status.show_ddb", "ConfigView.section.style.status.show_ipf", }; final String[] statusAreaConfig = { "Status Area Show SR", "Status Area Show NAT", "Status Area Show DDB", "Status Area Show IPF", }; for (int i = 0; i < statusAreaConfig.length; i++) { final String configID = statusAreaConfig[i]; String langID = statusAreaLangs[i]; final MenuItem item = new MenuItem(menuStatusBar, SWT.CHECK); Messages.setLanguageText(item, langID); item.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { COConfigurationManager.setParameter(configID, !COConfigurationManager.getBooleanParameter(configID)); } }); menuStatusBar.addListener(SWT.Show, new Listener() { public void handleEvent(Event event) { item.setSelection(COConfigurationManager.getBooleanParameter(configID)); } }); } } if (Constants.isWindows) { MenuFactory.addSeparatorMenuItem(viewMenu); } boolean needsSep = false; boolean enabled = COConfigurationManager.getBooleanParameter("Beta Programme Enabled"); if (enabled) { MenuFactory.addMenuItem(viewMenu, SWT.CHECK, PREFIX_V2 + ".view.beta", new Listener() { public void handleEvent(Event event) { MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); if (mdi != null) { mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_BETAPROGRAM); } } }); needsSep = true; } if (Constants.isWindows && FeatureAvailability.isGamesEnabled()) { MenuFactory.addMenuItem(viewMenu, PREFIX_V3 + ".games", new Listener() { public void handleEvent(Event event) { MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); mdi.showEntryByID(SideBar.SIDEBAR_SECTION_GAMES); } }); needsSep = true; } if (needsSep) { MenuFactory.addSeparatorMenuItem(viewMenu); } MenuFactory.addMenuItem(viewMenu, SWT.RADIO, PREFIX_V3 + ".view.asSimpleList", new Listener() { public void handleEvent(Event event) { ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); if (tb != null) { ToolBarItem item = tb.getToolBarItem("modeBig"); if (item != null) { item.triggerToolBarItem(); } } } }); MenuFactory.addMenuItem(viewMenu, SWT.RADIO, PREFIX_V3 + ".view.asAdvancedList", new Listener() { public void handleEvent(Event event) { ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); if (tb != null) { ToolBarItem item = tb.getToolBarItem("modeSmall"); if (item != null) { item.triggerToolBarItem(); } } } }); viewMenu.addMenuListener(new MenuListener() { public void menuShown(MenuEvent e) { MenuItem sidebarMenuItem = MenuFactory.findMenuItem(viewMenu, PREFIX_V3 + ".view.sidebar"); if (sidebarMenuItem != null) { MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); if (mdi != null) { sidebarMenuItem.setSelection(mdi.isVisible()); } } MenuItem itemShowText = MenuFactory.findMenuItem(viewMenu, PREFIX_V3 + ".view.toolbartext"); if (itemShowText != null) { ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); if (tb != null) { itemShowText.setSelection(tb.getShowText()); } } MenuItem itemShowAsSimple = MenuFactory.findMenuItem(viewMenu, PREFIX_V3 + ".view.asSimpleList"); if (itemShowAsSimple != null) { ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); if (tb != null) { ToolBarItem item = tb.getToolBarItem("modeBig"); if (item != null && item.isEnabled()) { itemShowAsSimple.setEnabled(true); itemShowAsSimple.setSelection(item.getSkinButton().getSkinObject().getSuffix().contains( "-down")); } else { itemShowAsSimple.setEnabled(false); itemShowAsSimple.setSelection(false); } } } MenuItem itemShowAsAdv = MenuFactory.findMenuItem(viewMenu, PREFIX_V3 + ".view.asAdvancedList"); if (itemShowAsAdv != null) { ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); if (tb != null) { ToolBarItem item = tb.getToolBarItem("modeSmall"); if (item != null && item.isEnabled()) { itemShowAsAdv.setEnabled(true); itemShowAsAdv.setSelection(item.getSkinButton().getSkinObject().getSuffix().contains( "-down")); } else { itemShowAsAdv.setSelection(false); itemShowAsAdv.setEnabled(false); } } } } public void menuHidden(MenuEvent e) { } }); } catch (Exception e) { Debug.out("Error creating View Menu", e); } } /** * Creates the Tools menu and all its children */ private void addToolsMenu() { MenuItem toolsItem = MenuFactory.createToolsMenuItem(menuBar); Menu toolsMenu = toolsItem.getMenu(); MenuFactory.addMyTrackerMenuItem(toolsMenu); MenuFactory.addMySharesMenuItem(toolsMenu); MenuFactory.addConsoleMenuItem(toolsMenu); MenuFactory.addStatisticsMenuItem(toolsMenu); MenuFactory.addTransferBarToMenu(toolsMenu); MenuFactory.addAllPeersMenuItem(toolsMenu); MenuFactory.addClientStatsMenuItem(toolsMenu); MenuFactory.addBlockedIPsMenuItem(toolsMenu); MenuFactory.addSeparatorMenuItem(toolsMenu); MenuFactory.createPluginsMenuItem(toolsMenu, true); addPairingMenu(toolsMenu); MenuFactory.addOptionsMenuItem(toolsMenu); } private void addPairingMenu(Menu menu) { MenuFactory.addMenuItem(menu, MENU_ID_PAIRING, new Listener() { public void handleEvent(Event e) { RemotePairingWindow.open(); } }); } /** * Creates the Help menu and all its children */ private void addV3HelpMenu() { MenuItem helpItem = MenuFactory.createHelpMenuItem(menuBar); Menu helpMenu = helpItem.getMenu(); if (false == Constants.isOSX) { /* * The 'About' menu is on the application menu on OSX */ MenuFactory.addAboutMenuItem(helpMenu); MenuFactory.addSeparatorMenuItem(helpMenu); } MenuFactory.addMenuItem(helpMenu, PREFIX_V3 + ".getting_started", new Listener() { public void handleEvent(Event event) { MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); if (mdi != null) { mdi.showEntryByID(SideBar.SIDEBAR_SECTION_WELCOME); } } }); MenuFactory.addHelpSupportMenuItem( helpMenu, ContentNetworkUtils.getUrl( ConstantsVuze.getDefaultContentNetwork(), ContentNetwork.SERVICE_SUPPORT)); MenuFactory.addHealthMenuItem(helpMenu); MenuFactory.addReleaseNotesMenuItem(helpMenu); if (false == SystemProperties.isJavaWebStartInstance()) { MenuFactory.addSeparatorMenuItem(helpMenu); MenuFactory.addCheckUpdateMenuItem(helpMenu); MenuFactory.addBetaMenuItem(helpMenu); } if (FeatureManagerUI.enabled) { MenuFactory.addMenuItem(helpMenu, "menu.register", new Listener() { public void handleEvent(Event event) { FeatureManagerUI.openLicenceEntryWindow(false, null); } }); } MenuFactory.addDonationMenuItem(helpMenu); MenuFactory.addSeparatorMenuItem(helpMenu); MenuFactory.addConfigWizardMenuItem(helpMenu); MenuFactory.addNatTestMenuItem(helpMenu); MenuFactory.addSpeedTestMenuItem(helpMenu); MenuFactory.addSeparatorMenuItem(helpMenu); MenuFactory.addDebugHelpMenuItem(helpMenu); } /** * Creates the Window menu and all its children */ private void addWindowMenu() { MenuItem menu_window = MenuFactory.createWindowMenuItem(menuBar); Menu windowMenu = menu_window.getMenu(); MenuFactory.addMinimizeWindowMenuItem(windowMenu); MenuFactory.addZoomWindowMenuItem(windowMenu); MenuFactory.addSeparatorMenuItem(windowMenu); MenuFactory.addBringAllToFrontMenuItem(windowMenu); MenuFactory.addSeparatorMenuItem(windowMenu); MenuFactory.appendWindowMenuItems(windowMenu); } /** * Creates the Torrent menu and all its children */ private void addTorrentMenu() { MenuFactory.createTorrentMenuItem(menuBar); } public Menu getMenu(String id) { if (true == MENU_ID_MENU_BAR.equals(id)) { return menuBar; } return MenuFactory.findMenu(menuBar, id); } private void addCommunityMenu() { MenuItem item = MenuFactory.createTopLevelMenuItem(menuBar, MENU_ID_COMMUNITY); Menu communityMenu = item.getMenu(); MenuFactory.addMenuItem(communityMenu, MENU_ID_COMMUNITY_FORUMS, new Listener() { public void handleEvent(Event e) { Utils.launch(ContentNetworkUtils.getUrl( ConstantsVuze.getDefaultContentNetwork(), ContentNetwork.SERVICE_FORUMS)); } }); MenuFactory.addMenuItem(communityMenu, MENU_ID_COMMUNITY_WIKI, new Listener() { public void handleEvent(Event e) { Utils.launch(ContentNetworkUtils.getUrl( ConstantsVuze.getDefaultContentNetwork(), ContentNetwork.SERVICE_WIKI)); } }); MenuFactory.addMenuItem(communityMenu, MENU_ID_COMMUNITY_BLOG, new Listener() { public void handleEvent(Event e) { Utils.launch(ContentNetworkUtils.getUrl( ConstantsVuze.getDefaultContentNetwork(), ContentNetwork.SERVICE_BLOG)); } }); MenuFactory.addMenuItem(communityMenu, MENU_ID_FAQ, new Listener() { public void handleEvent(Event e) { Utils.launch(ContentNetworkUtils.getUrl( ConstantsVuze.getDefaultContentNetwork(), ContentNetwork.SERVICE_FAQ)); } }); } //==================================== /** * @deprecated This method has been replaced with {@link #getMenu(String)}; * use {@link #getMenu(IMenuConstants.MENU_ID_MENU_BAR)} instead * @return the menuBar */ public Menu getMenuBar() { return menuBar; } /** * @param viewMenu * @param string * @param string2 */ public static MenuItem createViewMenuItem(final SWTSkin skin, Menu viewMenu, final String textID, final String configID, final String viewID, final boolean fast, int menuIndex) { MenuItem item; if (!ConfigurationDefaults.getInstance().doesParameterDefaultExist(configID)) { COConfigurationManager.setBooleanDefault(configID, true); } item = MenuFactory.addMenuItem(viewMenu, SWT.CHECK, menuIndex, textID, new Listener() { public void handleEvent(Event event) { SWTSkinObject skinObject = skin.getSkinObject(viewID); if (skinObject != null) { boolean newVisibility = !skinObject.isVisible(); SWTSkinUtils.setVisibility(skin, configID, viewID, newVisibility, true, fast); } } }); SWTSkinUtils.setVisibility(skin, configID, viewID, COConfigurationManager.getBooleanParameter(configID), false, true); final MenuItem itemViewPluginBar = item; final ParameterListener listener = new ParameterListener() { public void parameterChanged(String parameterName) { itemViewPluginBar.setSelection(COConfigurationManager.getBooleanParameter(parameterName)); } }; COConfigurationManager.addAndFireParameterListener(configID, listener); item.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { COConfigurationManager.removeParameterListener(configID, listener); } }); return item; } // backward compat.. public static void setVisibility(SWTSkin skin, String configID, String viewID, boolean visible) { SWTSkinUtils.setVisibility(skin, configID, viewID, visible, true, false); } // backward compat.. public static void setVisibility(SWTSkin skin, String configID, String viewID, boolean visible, boolean save) { SWTSkinUtils.setVisibility(skin, configID, viewID, visible, save, false); } }