1 /* 2 * Copyright (C) Azureus Software, Inc, All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details ( see the LICENSE file ). 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 */ 18 19 package com.aelitis.azureus.ui.swt.shells.main; 20 21 import org.eclipse.swt.SWT; 22 import org.eclipse.swt.events.*; 23 import org.eclipse.swt.widgets.*; 24 25 import org.gudy.azureus2.core3.config.COConfigurationManager; 26 import org.gudy.azureus2.core3.config.ParameterListener; 27 import org.gudy.azureus2.core3.config.impl.ConfigurationDefaults; 28 import org.gudy.azureus2.core3.util.Constants; 29 import org.gudy.azureus2.core3.util.Debug; 30 import org.gudy.azureus2.core3.util.SystemProperties; 31 import org.gudy.azureus2.plugins.ui.toolbar.UIToolBarActivationListener; 32 import org.gudy.azureus2.plugins.ui.toolbar.UIToolBarItem; 33 import org.gudy.azureus2.plugins.ui.toolbar.UIToolBarManager; 34 import org.gudy.azureus2.ui.swt.KeyBindings; 35 import org.gudy.azureus2.ui.swt.MenuBuildUtils; 36 import org.gudy.azureus2.ui.swt.Messages; 37 import org.gudy.azureus2.ui.swt.Utils; 38 import org.gudy.azureus2.ui.swt.mainwindow.*; 39 import org.gudy.azureus2.ui.swt.pluginsimpl.UIToolBarManagerImpl; 40 41 import com.aelitis.azureus.core.cnetwork.ContentNetwork; 42 import com.aelitis.azureus.core.util.FeatureAvailability; 43 import com.aelitis.azureus.ui.UIFunctionsManager; 44 import com.aelitis.azureus.ui.mdi.MultipleDocumentInterface; 45 import com.aelitis.azureus.ui.selectedcontent.SelectedContentManager; 46 import com.aelitis.azureus.ui.skin.SkinConstants; 47 import com.aelitis.azureus.ui.swt.feature.FeatureManagerUI; 48 import com.aelitis.azureus.ui.swt.skin.SWTSkin; 49 import com.aelitis.azureus.ui.swt.skin.SWTSkinFactory; 50 import com.aelitis.azureus.ui.swt.skin.SWTSkinObject; 51 import com.aelitis.azureus.ui.swt.skin.SWTSkinUtils; 52 import com.aelitis.azureus.ui.swt.views.skin.SBC_PlusFTUX; 53 import com.aelitis.azureus.ui.swt.views.skin.SkinViewManager; 54 import com.aelitis.azureus.ui.swt.views.skin.ToolBarView; 55 import com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBar; 56 import com.aelitis.azureus.util.ConstantsVuze; 57 import com.aelitis.azureus.util.ContentNetworkUtils; 58 59 public class MainMenu 60 implements IMainMenu, IMenuConstants 61 { 62 private final static String PREFIX_V2 = "MainWindow.menu"; 63 64 private final static String PREFIX_V3 = "v3.MainWindow.menu"; 65 66 private Menu menuBar; 67 68 /** 69 * Creates the main menu on the supplied shell 70 * 71 * @param shell 72 */ MainMenu(SWTSkin skin, final Shell shell)73 public MainMenu(SWTSkin skin, final Shell shell) { 74 if (null == skin) { 75 System.err.println("MainMenu: The parameter [SWTSkin skin] can not be null"); 76 return; 77 } 78 79 buildMenu(shell); 80 81 } 82 buildMenu(Shell parent)83 private void buildMenu(Shell parent) { 84 85 //The Main Menu 86 menuBar = new Menu(parent, SWT.BAR); 87 parent.setMenuBar(menuBar); 88 89 addFileMenu(); 90 //addViewMenu(); 91 addSimpleViewMenu(); 92 93 addCommunityMenu(); 94 95 addToolsMenu(); 96 97 /* 98 * The Torrents menu is a user-configured option 99 */ 100 if (true == COConfigurationManager.getBooleanParameter("show_torrents_menu")) { 101 addTorrentMenu(); 102 } 103 104 if (!Constants.isWindows) { 105 addWindowMenu(); 106 } 107 108 // ===== Debug menu (development only)==== 109 if (org.gudy.azureus2.core3.util.Constants.isCVSVersion()) { 110 final Menu menuDebug = org.gudy.azureus2.ui.swt.mainwindow.DebugMenuHelper.createDebugMenuItem(menuBar); 111 menuDebug.addMenuListener(new MenuListener() { 112 113 public void menuShown(MenuEvent e) { 114 MenuItem[] items = menuDebug.getItems(); 115 Utils.disposeSWTObjects(items); 116 117 DebugMenuHelper.createDebugMenuItem(menuDebug); 118 MenuFactory.addSeparatorMenuItem(menuDebug); 119 MenuItem menuItem = new MenuItem(menuDebug, SWT.PUSH); 120 menuItem.setText("Log Views"); 121 menuItem.setEnabled(false); 122 PluginsMenuHelper.getInstance().buildPluginLogsMenu(menuDebug); 123 } 124 125 public void menuHidden(MenuEvent e) { 126 } 127 }); 128 } 129 130 addV3HelpMenu(); 131 132 /* 133 * Enabled/disable menus based on what ui mode we're in; this method call controls 134 * which menus are enabled when we're in Vuze vs. Vuze Advanced 135 */ 136 MenuFactory.updateEnabledStates(menuBar); 137 } 138 139 /** 140 * Creates the File menu and all its children 141 */ addFileMenu()142 private void addFileMenu() { 143 MenuItem fileItem = MenuFactory.createFileMenuItem(menuBar); 144 final Menu fileMenu = fileItem.getMenu(); 145 builFileMenu(fileMenu); 146 147 fileMenu.addListener(SWT.Show, new Listener() { 148 public void handleEvent(Event event) { 149 MenuItem[] menuItems = fileMenu.getItems(); 150 for (int i = 0; i < menuItems.length; i++) { 151 menuItems[i].dispose(); 152 } 153 154 builFileMenu(fileMenu); 155 } 156 }); 157 } 158 159 /** 160 * Builds the File menu dynamically 161 * @param fileMenu 162 */ builFileMenu(Menu fileMenu)163 private void builFileMenu(Menu fileMenu) { 164 165 MenuItem openMenuItem = MenuFactory.createOpenMenuItem(fileMenu); 166 Menu openSubMenu = openMenuItem.getMenu(); 167 MenuFactory.addOpenTorrentMenuItem(openSubMenu); 168 MenuFactory.addOpenURIMenuItem(openSubMenu); 169 MenuFactory.addOpenTorrentForTrackingMenuItem(openSubMenu); 170 MenuFactory.addOpenVuzeFileMenuItem(openSubMenu); 171 172 int userMode = COConfigurationManager.getIntParameter("User Mode"); 173 174 if ( userMode > 0 ){ 175 Menu shareSubMenu = MenuFactory.createShareMenuItem(fileMenu).getMenu(); 176 MenuFactory.addShareFileMenuItem(shareSubMenu); 177 MenuFactory.addShareFolderMenuItem(shareSubMenu); 178 MenuFactory.addShareFolderContentMenuItem(shareSubMenu); 179 MenuFactory.addShareFolderContentRecursiveMenuItem(shareSubMenu); 180 } 181 182 MenuFactory.addCreateMenuItem(fileMenu); 183 184 if (FeatureManagerUI.enabled) { 185 MenuFactory.addSeparatorMenuItem(fileMenu); 186 MenuFactory.addMenuItem(fileMenu, "menu.plus", new Listener() { 187 public void handleEvent(Event event) { 188 SBC_PlusFTUX.setSourceRef("menu-file"); 189 190 MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); 191 mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_PLUS); 192 } 193 }); 194 } 195 196 MenuFactory.addSeparatorMenuItem(fileMenu); 197 MenuFactory.addCloseWindowMenuItem(fileMenu); 198 MenuFactory.addCloseDetailsMenuItem(fileMenu); 199 MenuFactory.addCloseDownloadBarsToMenu(fileMenu); 200 201 MenuFactory.addSeparatorMenuItem(fileMenu); 202 MenuFactory.createTransfersMenuItem(fileMenu); 203 204 /* 205 * No need for restart and exit on OS X since it's already handled on the application menu 206 */ 207 if (!Utils.isCarbon) { 208 MenuFactory.addSeparatorMenuItem(fileMenu); 209 MenuFactory.addRestartMenuItem(fileMenu); 210 } 211 if (!Constants.isOSX) { 212 MenuFactory.addExitMenuItem(fileMenu); 213 } 214 } 215 addSimpleViewMenu()216 private void addSimpleViewMenu() { 217 try { 218 MenuItem viewItem = MenuFactory.createViewMenuItem(menuBar); 219 final Menu viewMenu = viewItem.getMenu(); 220 221 viewMenu.addListener(SWT.Show, new Listener() { 222 public void handleEvent(Event event) { 223 Utils.disposeSWTObjects(viewMenu.getItems()); 224 buildSimpleViewMenu(viewMenu,-1); 225 } 226 }); 227 228 // hack to handle key binding before menu is actually created... 229 230 final KeyBindings.KeyBindingInfo binding_info = KeyBindings.getKeyBindingInfo( "v3.MainWindow.menu.view." + SkinConstants.VIEWID_PLUGINBAR ); 231 232 if ( binding_info != null ){ 233 Display.getDefault().addFilter(SWT.KeyDown, new Listener() { 234 public void handleEvent(Event event) { 235 if (event.keyCode == binding_info.accelerator ){ 236 Utils.disposeSWTObjects(viewMenu.getItems()); 237 buildSimpleViewMenu(viewMenu, event.keyCode); 238 } 239 } 240 }); 241 } 242 } catch (Exception e) { 243 Debug.out("Error creating View Menu", e); 244 } 245 } 246 247 /** 248 * @param viewMenu 249 * 250 * @since 4.5.0.3 251 */ buildSimpleViewMenu(final Menu viewMenu, int accelerator)252 private void buildSimpleViewMenu(final Menu viewMenu, int accelerator) { 253 try { 254 255 MenuFactory.addMenuItem(viewMenu, SWT.CHECK, PREFIX_V3 + ".view.sidebar", 256 new Listener() { 257 public void handleEvent(Event event) { 258 SideBar sidebar = (SideBar) SkinViewManager.getByClass(SideBar.class); 259 if (sidebar != null) { 260 sidebar.flipSideBarVisibility(); 261 } 262 } 263 }); 264 265 if (COConfigurationManager.getIntParameter("User Mode") > 1) { 266 267 SWTSkin skin = SWTSkinFactory.getInstance(); 268 269 SWTSkinObject plugin_bar = skin.getSkinObject(SkinConstants.VIEWID_PLUGINBAR); 270 271 if ( plugin_bar != null ){ 272 273 MenuItem mi = 274 MainMenu.createViewMenuItem(skin, viewMenu, 275 "v3.MainWindow.menu.view." + SkinConstants.VIEWID_PLUGINBAR, 276 SkinConstants.VIEWID_PLUGINBAR + ".visible", 277 SkinConstants.VIEWID_PLUGINBAR, true, -1); 278 279 if ( accelerator != -1 && mi.getAccelerator() == accelerator ){ 280 281 Listener[] listeners = mi.getListeners( SWT.Selection ); 282 283 for ( Listener l: listeners ){ 284 285 try{ 286 l.handleEvent( null ); 287 288 }catch( Throwable e ){ 289 } 290 } 291 } 292 } 293 } 294 295 ///////// 296 297 MenuItem itemStatusBar = MenuFactory.createTopLevelMenuItem(viewMenu, 298 "v3.MainWindow.menu.view.statusbar"); 299 itemStatusBar.setText(itemStatusBar.getText()); 300 Menu menuStatusBar = itemStatusBar.getMenu(); 301 302 final String[] statusAreaLangs = { 303 "ConfigView.section.style.status.show_sr", 304 "ConfigView.section.style.status.show_nat", 305 "ConfigView.section.style.status.show_ddb", 306 "ConfigView.section.style.status.show_ipf", 307 }; 308 final String[] statusAreaConfig = { 309 "Status Area Show SR", 310 "Status Area Show NAT", 311 "Status Area Show DDB", 312 "Status Area Show IPF", 313 }; 314 315 for (int i = 0; i < statusAreaConfig.length; i++) { 316 final String configID = statusAreaConfig[i]; 317 String langID = statusAreaLangs[i]; 318 319 final MenuItem item = new MenuItem(menuStatusBar, SWT.CHECK); 320 Messages.setLanguageText(item, langID); 321 item.addListener(SWT.Selection, new Listener() { 322 public void handleEvent(Event event) { 323 COConfigurationManager.setParameter(configID, 324 !COConfigurationManager.getBooleanParameter(configID)); 325 } 326 }); 327 menuStatusBar.addListener(SWT.Show, new Listener() { 328 public void handleEvent(Event event) { 329 item.setSelection(COConfigurationManager.getBooleanParameter(configID)); 330 } 331 }); 332 } 333 334 ///////// 335 336 if (Constants.isWindows) { 337 MenuFactory.addSeparatorMenuItem(viewMenu); 338 } 339 340 boolean needsSep = false; 341 boolean enabled = COConfigurationManager.getBooleanParameter("Beta Programme Enabled"); 342 if (enabled) { 343 MenuFactory.addMenuItem(viewMenu, SWT.CHECK, PREFIX_V2 + ".view.beta", 344 new Listener() { 345 public void handleEvent(Event event) { 346 MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); 347 if (mdi != null) { 348 mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_BETAPROGRAM); 349 } 350 } 351 }); 352 needsSep = true; 353 } 354 355 if (Constants.isWindows && FeatureAvailability.isGamesEnabled()) { 356 MenuFactory.addMenuItem(viewMenu, PREFIX_V3 + ".games", new Listener() { 357 public void handleEvent(Event event) { 358 MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); 359 mdi.showEntryByID(SideBar.SIDEBAR_SECTION_GAMES); 360 } 361 }); 362 needsSep = true; 363 } 364 365 366 if (needsSep) { 367 MenuFactory.addSeparatorMenuItem(viewMenu); 368 } 369 370 needsSep = PluginsMenuHelper.getInstance().buildViewMenu(viewMenu, viewMenu.getShell()); 371 372 if ( COConfigurationManager.getBooleanParameter( "Library.EnableSimpleView" )){ 373 374 if (needsSep) { 375 MenuFactory.addSeparatorMenuItem(viewMenu); 376 } 377 378 // Ubuntu Unity (14.04) with SWT 4508 crashes when global View menu triggered as it appears 379 // that radio menu items aren't supported 380 // https://bugs.eclipse.org/bugs/show_bug.cgi?id=419729#c9 381 382 int simple_advanced_menu_type = Constants.isLinux?SWT.CHECK:SWT.RADIO; 383 384 MenuFactory.addMenuItem(viewMenu, simple_advanced_menu_type, PREFIX_V3 385 + ".view.asSimpleList", new Listener() { 386 public void handleEvent(Event event) { 387 UIToolBarManager tb = UIToolBarManagerImpl.getInstance(); 388 if (tb != null) { 389 UIToolBarItem item = tb.getToolBarItem("modeBig"); 390 if (item != null) { 391 item.triggerToolBarItem( 392 UIToolBarActivationListener.ACTIVATIONTYPE_NORMAL, 393 SelectedContentManager.convertSelectedContentToObject(null)); 394 } 395 } 396 } 397 }); 398 MenuFactory.addMenuItem(viewMenu, simple_advanced_menu_type, PREFIX_V3 399 + ".view.asAdvancedList", new Listener() { 400 public void handleEvent(Event event) { 401 UIToolBarManager tb = UIToolBarManagerImpl.getInstance(); 402 if (tb != null) { 403 UIToolBarItem item = tb.getToolBarItem("modeSmall"); 404 if (item != null) { 405 item.triggerToolBarItem( 406 UIToolBarActivationListener.ACTIVATIONTYPE_NORMAL, 407 SelectedContentManager.convertSelectedContentToObject(null)); 408 } 409 } 410 } 411 }); 412 } 413 414 viewMenu.addMenuListener(new MenuListener() { 415 416 public void menuShown(MenuEvent e) { 417 418 MenuItem sidebarMenuItem = MenuFactory.findMenuItem(viewMenu, 419 PREFIX_V3 + ".view.sidebar"); 420 if (sidebarMenuItem != null) { 421 MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); 422 if (mdi != null) { 423 sidebarMenuItem.setSelection(mdi.isVisible()); 424 } 425 } 426 427 MenuItem itemShowText = MenuFactory.findMenuItem(viewMenu, PREFIX_V3 428 + ".view.toolbartext"); 429 if (itemShowText != null) { 430 ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class); 431 if (tb != null) { 432 itemShowText.setSelection(tb.getShowText()); 433 } 434 } 435 436 if ( COConfigurationManager.getBooleanParameter( "Library.EnableSimpleView" )){ 437 438 MenuItem itemShowAsSimple = MenuFactory.findMenuItem(viewMenu, 439 PREFIX_V3 + ".view.asSimpleList"); 440 if (itemShowAsSimple != null) { 441 UIToolBarManager tb = UIToolBarManagerImpl.getInstance(); 442 if (tb != null) { 443 UIToolBarItem item = tb.getToolBarItem("modeBig"); 444 long state = item == null ? 0 : item.getState(); 445 itemShowAsSimple.setEnabled((state & UIToolBarItem.STATE_ENABLED) > 0); 446 itemShowAsSimple.setSelection((state & UIToolBarItem.STATE_DOWN) > 0); 447 } 448 } 449 MenuItem itemShowAsAdv = MenuFactory.findMenuItem(viewMenu, PREFIX_V3 450 + ".view.asAdvancedList"); 451 if (itemShowAsAdv != null) { 452 UIToolBarManager tb = UIToolBarManagerImpl.getInstance(); 453 if (tb != null) { 454 UIToolBarItem item = tb.getToolBarItem("modeSmall"); 455 long state = item == null ? 0 : item.getState(); 456 itemShowAsAdv.setEnabled((state & UIToolBarItem.STATE_ENABLED) > 0); 457 itemShowAsAdv.setSelection((state & UIToolBarItem.STATE_DOWN) > 0); 458 } 459 } 460 } 461 } 462 463 public void menuHidden(MenuEvent e) { 464 } 465 }); 466 } catch (Exception e) { 467 Debug.out("Error creating View Menu", e); 468 } 469 } 470 471 /** 472 * Creates the Tools menu and all its children 473 */ addToolsMenu()474 private void addToolsMenu() { 475 MenuItem toolsItem = MenuFactory.createToolsMenuItem(menuBar); 476 Menu toolsMenu = toolsItem.getMenu(); 477 478 MenuFactory.addMyTrackerMenuItem(toolsMenu); 479 MenuFactory.addMySharesMenuItem(toolsMenu); 480 MenuFactory.addConsoleMenuItem(toolsMenu); 481 MenuFactory.addStatisticsMenuItem(toolsMenu); 482 MenuFactory.addSpeedLimitsToMenu(toolsMenu); 483 484 MenuFactory.addTransferBarToMenu(toolsMenu); 485 MenuFactory.addAllPeersMenuItem(toolsMenu); 486 MenuFactory.addClientStatsMenuItem(toolsMenu); 487 MenuFactory.addBlockedIPsMenuItem(toolsMenu); 488 489 MenuFactory.addSeparatorMenuItem(toolsMenu); 490 MenuFactory.createPluginsMenuItem(toolsMenu, true); 491 492 MenuFactory.addPairingMenuItem(toolsMenu); 493 494 MenuFactory.addOptionsMenuItem(toolsMenu); 495 496 } 497 498 /** 499 * Creates the Help menu and all its children 500 */ addV3HelpMenu()501 private void addV3HelpMenu() { 502 MenuItem helpItem = MenuFactory.createHelpMenuItem(menuBar); 503 Menu helpMenu = helpItem.getMenu(); 504 505 if (false == Constants.isOSX) { 506 /* 507 * The 'About' menu is on the application menu on OSX 508 */ 509 MenuFactory.addAboutMenuItem(helpMenu); 510 MenuFactory.addSeparatorMenuItem(helpMenu); 511 } 512 513 MenuFactory.addMenuItem(helpMenu, PREFIX_V3 + ".getting_started", 514 new Listener() { 515 public void handleEvent(Event event) { 516 MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI(); 517 if (mdi != null) { 518 mdi.showEntryByID(SideBar.SIDEBAR_SECTION_WELCOME); 519 } 520 } 521 }); 522 523 MenuFactory.addHelpSupportMenuItem( 524 helpMenu, 525 ContentNetworkUtils.getUrl( 526 ConstantsVuze.getDefaultContentNetwork(), ContentNetwork.SERVICE_SUPPORT)); 527 528 MenuFactory.addHealthMenuItem(helpMenu); 529 530 MenuFactory.addReleaseNotesMenuItem(helpMenu); 531 532 if (false == SystemProperties.isJavaWebStartInstance()) { 533 MenuFactory.addSeparatorMenuItem(helpMenu); 534 MenuFactory.addCheckUpdateMenuItem(helpMenu); 535 MenuFactory.addBetaMenuItem(helpMenu); 536 MenuFactory.addVoteMenuItem(helpMenu); 537 } 538 539 if (FeatureManagerUI.enabled) { 540 MenuFactory.addMenuItem(helpMenu, "menu.register", new Listener() { 541 public void handleEvent(Event event) { 542 FeatureManagerUI.openLicenceEntryWindow(false, null); 543 } 544 }); 545 } 546 547 MenuFactory.addDonationMenuItem(helpMenu); 548 549 MenuFactory.addSeparatorMenuItem(helpMenu); 550 MenuFactory.addConfigWizardMenuItem(helpMenu); 551 MenuFactory.addNatTestMenuItem(helpMenu); 552 MenuFactory.addNetStatusMenuItem(helpMenu); 553 MenuFactory.addSpeedTestMenuItem(helpMenu); 554 MenuFactory.addAdvancedHelpMenuItem(helpMenu); 555 556 MenuFactory.addSeparatorMenuItem(helpMenu); 557 MenuFactory.addDebugHelpMenuItem(helpMenu); 558 559 } 560 561 /** 562 * Creates the Window menu and all its children 563 */ addWindowMenu()564 private void addWindowMenu() { 565 MenuItem menu_window = MenuFactory.createWindowMenuItem(menuBar); 566 Menu windowMenu = menu_window.getMenu(); 567 568 MenuFactory.addMinimizeWindowMenuItem(windowMenu); 569 MenuFactory.addZoomWindowMenuItem(windowMenu); 570 MenuFactory.addSeparatorMenuItem(windowMenu); 571 MenuFactory.addBringAllToFrontMenuItem(windowMenu); 572 573 MenuFactory.addSeparatorMenuItem(windowMenu); 574 MenuFactory.appendWindowMenuItems(windowMenu); 575 } 576 577 /** 578 * Creates the Torrent menu and all its children 579 */ addTorrentMenu()580 private void addTorrentMenu() { 581 MenuFactory.createTorrentMenuItem(menuBar); 582 } 583 getMenu(String id)584 public Menu getMenu(String id) { 585 if (true == MENU_ID_MENU_BAR.equals(id)) { 586 return menuBar; 587 } 588 return MenuFactory.findMenu(menuBar, id); 589 } 590 addCommunityMenu()591 private void addCommunityMenu() { 592 MenuItem item = MenuFactory.createTopLevelMenuItem(menuBar, MENU_ID_COMMUNITY); 593 594 final Menu communityMenu = item.getMenu(); 595 596 communityMenu.addListener( 597 SWT.Show, 598 new Listener() 599 { 600 public void 601 handleEvent( Event event) 602 { 603 Utils.disposeSWTObjects( communityMenu.getItems()); 604 605 MenuFactory.addMenuItem(communityMenu, MENU_ID_COMMUNITY_FORUMS, 606 new Listener() { 607 public void handleEvent(Event e) { 608 Utils.launch(ContentNetworkUtils.getUrl( 609 ConstantsVuze.getDefaultContentNetwork(), 610 ContentNetwork.SERVICE_FORUMS)); 611 } 612 }); 613 614 MenuFactory.addMenuItem(communityMenu, MENU_ID_COMMUNITY_WIKI, 615 new Listener() { 616 public void handleEvent(Event e) { 617 Utils.launch(ContentNetworkUtils.getUrl( 618 ConstantsVuze.getDefaultContentNetwork(), 619 ContentNetwork.SERVICE_WIKI)); 620 } 621 }); 622 623 MenuBuildUtils.addChatMenu( communityMenu, MENU_ID_COMMUNITY_CHAT, "General: Help" ); 624 625 MenuFactory.addMenuItem(communityMenu, MENU_ID_COMMUNITY_BLOG, 626 new Listener() { 627 public void handleEvent(Event e) { 628 Utils.launch(ContentNetworkUtils.getUrl( 629 ConstantsVuze.getDefaultContentNetwork(), 630 ContentNetwork.SERVICE_BLOG)); 631 } 632 }); 633 } 634 }); 635 } 636 637 //==================================== 638 639 /** 640 * @deprecated This method has been replaced with {@link #getMenu(String)}; 641 * use {@link #getMenu(IMenuConstants.MENU_ID_MENU_BAR)} instead 642 * @return the menuBar 643 */ getMenuBar()644 public Menu getMenuBar() { 645 return menuBar; 646 } 647 648 /** 649 * @param viewMenu 650 * @param string 651 * @param string2 652 */ createViewMenuItem(final SWTSkin skin, Menu viewMenu, final String textID, final String configID, final String viewID, final boolean fast, int menuIndex)653 public static MenuItem createViewMenuItem(final SWTSkin skin, Menu viewMenu, 654 final String textID, final String configID, final String viewID, 655 final boolean fast, int menuIndex) { 656 MenuItem item; 657 658 if (!ConfigurationDefaults.getInstance().doesParameterDefaultExist(configID)) { 659 COConfigurationManager.setBooleanDefault(configID, true); 660 } 661 662 item = MenuFactory.addMenuItem(viewMenu, SWT.CHECK, menuIndex, textID, 663 new Listener() { 664 public void handleEvent(Event event) { 665 SWTSkinObject skinObject = skin.getSkinObject(viewID); 666 if (skinObject != null) { 667 boolean newVisibility = !skinObject.isVisible(); 668 669 SWTSkinUtils.setVisibility(skin, configID, viewID, newVisibility, 670 true, fast); 671 } 672 } 673 }); 674 SWTSkinUtils.setVisibility(skin, configID, viewID, 675 COConfigurationManager.getBooleanParameter(configID), false, true); 676 677 final MenuItem itemViewPluginBar = item; 678 final ParameterListener listener = new ParameterListener() { 679 public void parameterChanged(String parameterName) { 680 itemViewPluginBar.setSelection(COConfigurationManager.getBooleanParameter(parameterName)); 681 } 682 }; 683 684 COConfigurationManager.addAndFireParameterListener(configID, listener); 685 item.addDisposeListener(new DisposeListener() { 686 public void widgetDisposed(DisposeEvent e) { 687 COConfigurationManager.removeParameterListener(configID, listener); 688 } 689 }); 690 691 return item; 692 } 693 694 // backward compat.. setVisibility(SWTSkin skin, String configID, String viewID, boolean visible)695 public static void setVisibility(SWTSkin skin, String configID, 696 String viewID, boolean visible) { 697 SWTSkinUtils.setVisibility(skin, configID, viewID, visible, true, false); 698 } 699 700 // backward compat.. setVisibility(SWTSkin skin, String configID, String viewID, boolean visible, boolean save)701 public static void setVisibility(SWTSkin skin, String configID, 702 String viewID, boolean visible, boolean save) { 703 SWTSkinUtils.setVisibility(skin, configID, viewID, visible, save, false); 704 } 705 706 } 707