Package com.aelitis.azureus.ui.swt.shells.main

Source Code of com.aelitis.azureus.ui.swt.shells.main.MainMenu

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));
          }
        });
  }

  //====================================

  /**
   * @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);
  }

}
TOP

Related Classes of com.aelitis.azureus.ui.swt.shells.main.MainMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.