Package org.gudy.azureus2.ui.swt.mainwindow

Source Code of org.gudy.azureus2.ui.swt.mainwindow.MenuFactory

package org.gudy.azureus2.ui.swt.mainwindow;

import java.util.Iterator;

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.download.DownloadManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.pluginsimpl.local.download.DownloadManagerImpl;
import org.gudy.azureus2.ui.common.util.MenuItemManager;
import org.gudy.azureus2.ui.swt.*;
import org.gudy.azureus2.ui.swt.beta.BetaWizard;
import org.gudy.azureus2.ui.swt.components.shell.ShellManager;
import org.gudy.azureus2.ui.swt.config.wizard.ConfigureWizard;
import org.gudy.azureus2.ui.swt.debug.UIDebugGenerator;
import org.gudy.azureus2.ui.swt.donations.DonationWindow;
import org.gudy.azureus2.ui.swt.exporttorrent.wizard.ExportTorrentWizard;
import org.gudy.azureus2.ui.swt.help.AboutWindow;
import org.gudy.azureus2.ui.swt.help.HealthHelpWindow;
import org.gudy.azureus2.ui.swt.importtorrent.wizard.ImportTorrentWizard;
import org.gudy.azureus2.ui.swt.maketorrent.NewTorrentWizard;
import org.gudy.azureus2.ui.swt.minibar.AllTransfersBar;
import org.gudy.azureus2.ui.swt.minibar.MiniBarManager;
import org.gudy.azureus2.ui.swt.nat.NatTestWindow;
import org.gudy.azureus2.ui.swt.pluginsinstaller.InstallPluginWizard;
import org.gudy.azureus2.ui.swt.pluginsuninstaller.UnInstallPluginWizard;
import org.gudy.azureus2.ui.swt.sharing.ShareUtils;
import org.gudy.azureus2.ui.swt.shells.CoreWaiterSWT;
import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
import org.gudy.azureus2.ui.swt.speedtest.SpeedTestWizard;
import org.gudy.azureus2.ui.swt.update.UpdateMonitor;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.utils.TableContextMenuManager;
import org.gudy.azureus2.ui.swt.views.utils.ManagerUtils;
import org.gudy.azureus2.ui.swt.welcome.WelcomeWindow;

import com.aelitis.azureus.core.*;
import com.aelitis.azureus.core.vuzefile.VuzeFileComponent;
import com.aelitis.azureus.core.vuzefile.VuzeFileHandler;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.mdi.MdiEntry;
import com.aelitis.azureus.ui.mdi.MultipleDocumentInterface;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;

import org.gudy.azureus2.plugins.ui.menus.MenuManager;
import org.gudy.azureus2.plugins.ui.tables.*;
import org.gudy.azureus2.plugins.update.Update;
import org.gudy.azureus2.plugins.update.UpdateCheckInstance;
import org.gudy.azureus2.plugins.update.UpdateCheckInstanceListener;

public class MenuFactory
  implements IMenuConstants
{

  private static boolean isAZ3 = "az3".equalsIgnoreCase(COConfigurationManager.getStringParameter("ui"));

  public static MenuItem createFileMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_FILE);
  }

  public static MenuItem createTransfersMenuItem(Menu menuParent) {
    MenuItem transferMenuItem = createTopLevelMenuItem(menuParent,
        MENU_ID_TRANSFERS);

    Menu transferMenu = transferMenuItem.getMenu();

    MenuFactory.addStartAllMenuItem(transferMenu);
    MenuFactory.addStopAllMenuItem(transferMenu);

    final MenuItem itemPause = MenuFactory.addPauseMenuItem(transferMenu);
    final MenuItem itemResume = MenuFactory.addResumeMenuItem(transferMenu);
    //    if (notMainWindow) {
    //      MenuFactory.performOneTimeDisable(itemPause, true);
    //      MenuFactory.performOneTimeDisable(itemResume, true);
    //    }

    transferMenu.addMenuListener(new MenuListener() {
      public void menuShown(MenuEvent menu) {
        if (!AzureusCoreFactory.isCoreRunning()) {
          itemPause.setEnabled(false);
          itemResume.setEnabled(false);
        } else {
          AzureusCore core = AzureusCoreFactory.getSingleton();
          itemPause.setEnabled(core.getGlobalManager().canPauseDownloads());
          itemResume.setEnabled(core.getGlobalManager().canResumeDownloads());
        }
      }

      public void menuHidden(MenuEvent menu) {
      }
    });

    return transferMenuItem;
  }

  public static MenuItem createViewMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_VIEW);
  }

  public static MenuItem createAdvancedMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_ADVANCED);
  }

  public static Menu createTorrentMenuItem(final Menu menuParent) {
    final Menu torrentMenu = createTopLevelMenuItem(menuParent,
        MENU_ID_TORRENT).getMenu();

    /*
     * The Torrents menu is context-sensitive to which torrent is selected in the UI.
     * For this reason we need to dynamically build the menu when ever it is about to be displayed
     * so that the states of the menu items accurately reflect what was selected in the UI.
     */
    MenuBuildUtils.addMaintenanceListenerForMenu(torrentMenu,
        new MenuBuildUtils.MenuBuilder() {
          public void buildMenu(Menu menu, MenuEvent menuEvent) {
            buildTorrentMenu(menu);
          }
        });
    return torrentMenu;
  }

  public static void buildTorrentMenu(Menu menu) {
    DownloadManager[] current_dls = (DownloadManager[]) menu.getData("downloads");
    if (current_dls == null) {
      return;
    }

    if (AzureusCoreFactory.isCoreRunning()) {
      boolean is_detailed_view = ((Boolean) menu.getData("is_detailed_view")).booleanValue();
      TableViewSWT tv = (TableViewSWT) menu.getData("TableView");
      AzureusCore core = AzureusCoreFactory.getSingleton();

      TorrentUtil.fillTorrentMenu(menu, current_dls, core,
          menu.getShell(), !is_detailed_view, 0, tv);
    }

    org.gudy.azureus2.plugins.ui.menus.MenuItem[] menu_items;

    menu_items = MenuItemManager.getInstance().getAllAsArray(
        new String[] {
          MenuManager.MENU_TORRENT_MENU,
          MenuManager.MENU_DOWNLOAD_CONTEXT
        });

    final Object[] plugin_dls = DownloadManagerImpl.getDownloadStatic(current_dls);

    if (menu_items.length > 0) {
      addSeparatorMenuItem(menu);

      MenuBuildUtils.addPluginMenuItems(menu.getShell(),
          menu_items, menu, true, true,
          new MenuBuildUtils.MenuItemPluginMenuControllerImpl(
              plugin_dls));
    }

    menu_items = null;

    /**
     * OK, "hack" time - we'll allow plugins which add menu items against
     * a table to appear in this menu. We'll have to fake the table row
     * object though. All downloads need to share a common table.
     */
      String table_to_use = null;
    for (int i = 0; i < current_dls.length; i++) {
      String table_name = (current_dls[i].isDownloadComplete(false)
          ? TableManager.TABLE_MYTORRENTS_COMPLETE
              : TableManager.TABLE_MYTORRENTS_INCOMPLETE);
      if (table_to_use == null || table_to_use.equals(table_name)) {
        table_to_use = table_name;
      } else {
        table_to_use = null;
        break;
      }
    }

    if (table_to_use != null) {
      menu_items = TableContextMenuManager.getInstance().getAllAsArray(
          table_to_use);
    }

    if (menu_items != null) {
      addSeparatorMenuItem(menu);

      TableRow[] dls_as_rows = null;
      dls_as_rows = new TableRow[plugin_dls.length];
      for (int i = 0; i < plugin_dls.length; i++) {
        dls_as_rows[i] = wrapAsRow(plugin_dls[i], table_to_use);
      }

      MenuBuildUtils.addPluginMenuItems(menu.getShell(),
          menu_items, menu, true, true,
          new MenuBuildUtils.MenuItemPluginMenuControllerImpl(
              dls_as_rows));
    }

  }

  public static MenuItem createToolsMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_TOOLS);
  }

  /**
   * Creates the Plugins menu item and all it's children
   * @param menuParent
   * @param includeGetPluginsMenu if <code>true</code> then also include a menu item for getting new plugins
   * @return
   */
  public static MenuItem createPluginsMenuItem(final Menu menuParent,
      final boolean includeGetPluginsMenu) {

    MenuItem pluginsMenuItem = createTopLevelMenuItem(menuParent,
        MENU_ID_PLUGINS);
    MenuBuildUtils.addMaintenanceListenerForMenu(pluginsMenuItem.getMenu(),
        new MenuBuildUtils.MenuBuilder() {
          public void buildMenu(Menu menu, MenuEvent menuEvent) {
            PluginsMenuHelper.getInstance().buildPluginMenu(menu,
                menuParent.getShell(), includeGetPluginsMenu);
          }
        });

    return pluginsMenuItem;
  }

  public static MenuItem createWindowMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_WINDOW);
  }

  public static MenuItem createHelpMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_HELP);
  }

  public static MenuItem addCreateMenuItem(Menu menuParent) {
    MenuItem file_create = addMenuItem(menuParent, MENU_ID_CREATE,
        new Listener() {
          public void handleEvent(Event e) {
            new NewTorrentWizard(e.display);
          }
        });
    return file_create;
  }

  public static MenuItem createOpenMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_OPEN);
  }

  public static MenuItem addLogsViewMenuItem(Menu menuParent) {
    return createTopLevelMenuItem(menuParent, MENU_ID_LOG_VIEWS);
  }

  public static MenuItem addOpenTorrentMenuItem(Menu menuParent) {
    return addMenuItem(menuParent, MENU_ID_OPEN_TORRENT, new Listener() {
      public void handleEvent(Event e) {
        TorrentOpener.openTorrentWindow();
      }
    });
  }

  public static MenuItem addOpenTorrentForTrackingMenuItem(Menu menuParent) {
    MenuItem file_new_torrent_for_tracking = addMenuItem(menuParent,
        MENU_ID_OPEN_TORRENT_FOR_TRACKING, new Listener() {
          public void handleEvent(Event e) {
            TorrentOpener.openTorrentTrackingOnly();
          }
        });
    return file_new_torrent_for_tracking;
  }
 
  public static MenuItem addSearchMenuItem(Menu menuParent) {
    MenuItem item = addMenuItem(menuParent,
        "Button.search", new Listener() {
          public void handleEvent(Event e) {
            UIFunctionsManagerSWT.getUIFunctionsSWT().promptForSearch();
          }
        });
    return item;
  }


  public static MenuItem addOpenVuzeFileMenuItem(final Menu menuParent) {
    return addMenuItem(menuParent, MENU_ID_OPEN_VUZE_FILE, new Listener() {
      public void handleEvent(Event e) {
        Display display = menuParent.getDisplay();

        display.asyncExec(new AERunnable() {
          public void runSupport() {
            FileDialog dialog = new FileDialog(menuParent.getShell(),
                SWT.SYSTEM_MODAL | SWT.OPEN);

            dialog.setFilterPath(TorrentOpener.getFilterPathData());

            dialog.setText(MessageText.getString("MainWindow.dialog.select.vuze.file"));

            dialog.setFilterExtensions(new String[] {
              "*.vuze",
              "*.vuz",
              Constants.FILE_WILDCARD
            });
            dialog.setFilterNames(new String[] {
              "*.vuze",
              "*.vuz",
              Constants.FILE_WILDCARD
            });

            String path = TorrentOpener.setFilterPathData(dialog.open());

            if (path != null) {

              VuzeFileHandler vfh = VuzeFileHandler.getSingleton();

              if (vfh.loadAndHandleVuzeFile(path,
                  VuzeFileComponent.COMP_TYPE_NONE) == null) {

                TorrentOpener.openTorrent(path);
              }
            }
          }
        });
      }
    });
  }

  public static MenuItem createShareMenuItem(Menu menuParent) {
    MenuItem file_share = createTopLevelMenuItem(menuParent, MENU_ID_SHARE);
    return file_share;
  }

  public static MenuItem addShareFileMenuItem(final Menu menuParent) {

    MenuItem file_share_file = addMenuItem(menuParent, MENU_ID_SHARE_FILE,
        new Listener() {
          public void handleEvent(Event e) {
            ShareUtils.shareFile(menuParent.getShell());
          }
        });
    return file_share_file;
  }

  public static MenuItem addShareFolderMenuItem(final Menu menuParent) {
    MenuItem file_share_dir = addMenuItem(menuParent, MENU_ID_SHARE_DIR,
        new Listener() {
          public void handleEvent(Event e) {
            ShareUtils.shareDir(menuParent.getShell());
          }
        });
    return file_share_dir;
  }

  public static MenuItem addShareFolderContentMenuItem(final Menu menuParent) {
    MenuItem file_share_dircontents = addMenuItem(menuParent,
        MENU_ID_SHARE_DIR_CONTENT, new Listener() {
          public void handleEvent(Event e) {
            ShareUtils.shareDirContents(menuParent.getShell(), false);
          }
        });
    return file_share_dircontents;
  }

  public static MenuItem addShareFolderContentRecursiveMenuItem(
      final Menu menuParent) {
    MenuItem file_share_dircontents_rec = addMenuItem(menuParent,
        MENU_ID_SHARE_DIR_CONTENT_RECURSE, new Listener() {
          public void handleEvent(Event e) {
            ShareUtils.shareDirContents(menuParent.getShell(), true);
          }
        });
    return file_share_dircontents_rec;
  }

  public static MenuItem addImportMenuItem(Menu menuParent) {
    MenuItem file_import = addMenuItem(menuParent, MENU_ID_IMPORT,
        new Listener() {
          public void handleEvent(Event e) {
            new ImportTorrentWizard();
          }
        });
    return file_import;
  }

  public static MenuItem addExportMenuItem(Menu menuParent) {
    MenuItem file_export = addMenuItem(menuParent, MENU_ID_EXPORT,
        new Listener() {
          public void handleEvent(Event e) {
            new ExportTorrentWizard();
          }
        });
    return file_export;
  }

  public static MenuItem addCloseWindowMenuItem(final Menu menuParent) {

    MenuItem closeWindow = addMenuItem(menuParent, MENU_ID_WINDOW_CLOSE,
        new Listener() {
          public void handleEvent(Event event) {
            Shell shell = menuParent.getShell();
            if (shell != null && !shell.isDisposed()) {
              menuParent.getShell().close();
            }
          }
        });
    return closeWindow;
  }

  public static MenuItem addCloseTabMenuItem(Menu menu) {
    final MenuItem menuItem = addMenuItem(menu, MENU_ID_CLOSE_TAB, new Listener() {
      public void handleEvent(Event event) {
        MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
        if (mdi != null) {
          MdiEntry currentEntry = mdi.getCurrentEntry();
          if (currentEntry != null && currentEntry.isCloseable()) {
            mdi.closeEntry(currentEntry.getId());
          }
        }
      }
    });
    menu.addMenuListener(new MenuListener() {
      public void menuShown(MenuEvent e) {
        MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
        if (mdi != null) {
          MdiEntry currentEntry = mdi.getCurrentEntry();
          if (currentEntry != null && currentEntry.isCloseable()) {
            menuItem.setEnabled(true);
            return;
          }
        }
        menuItem.setEnabled(false);
      }
     
      public void menuHidden(MenuEvent e) {
      }
    });
    return menuItem;
  }

  public static MenuItem addCloseDetailsMenuItem(Menu menu) {
    final MenuItem item = addMenuItem(menu, MENU_ID_CLOSE_ALL_DETAIL,
        new Listener() {
          public void handleEvent(Event e) {
            UIFunctionsManagerSWT.getUIFunctionsSWT().closeAllDetails();
          }
        });

    Listener enableHandler = new Listener() {
      public void handleEvent(Event event) {
        if (true == MenuFactory.isEnabledForCurrentMode(item)) {
          if (false == item.isDisposed() && false == event.widget.isDisposed()) {
            boolean hasDetails = UIFunctionsManagerSWT.getUIFunctionsSWT().hasDetailViews();
            item.setEnabled(hasDetails);
          }
        }
      }
    };

    menu.addListener(SWT.Show, enableHandler);

    return item;
  }

  public static MenuItem addCloseDownloadBarsToMenu(Menu menu) {
    final MenuItem item = addMenuItem(menu, MENU_ID_CLOSE_ALL_DL_BARS,
        new Listener() {
          public void handleEvent(Event e) {
            MiniBarManager.getManager().closeAll();
          }
        });

    Listener enableHandler = new Listener() {
      public void handleEvent(Event event) {
        if (false == item.isDisposed()) {
          item.setEnabled(false == MiniBarManager.getManager().getShellManager().isEmpty());
        }
      }
    };
    menu.addListener(SWT.Show, enableHandler);
    //    shell.addListener(SWT.FocusIn, enableHandler);
    return item;
  }

  public static MenuItem addRestartMenuItem(Menu menuParent) {
    MenuItem file_restart = new MenuItem(menuParent, SWT.NULL);
    Messages.setLanguageText(file_restart, MENU_ID_RESTART); //$NON-NLS-1$

    file_restart.addListener(SWT.Selection, new Listener() {

      public void handleEvent(Event event) {
        UIFunctionsManagerSWT.getUIFunctionsSWT().dispose(true, false);
      }
    });
    return file_restart;
  }

  public static MenuItem addExitMenuItem(Menu menuParent) {
    final MenuItem file_exit = new MenuItem(menuParent, SWT.NULL);
    if (!COConfigurationManager.getBooleanParameter("Enable System Tray")
        || !COConfigurationManager.getBooleanParameter("Close To Tray")) {
      KeyBindings.setAccelerator(file_exit, MENU_ID_EXIT);
    }
    Messages.setLanguageText(file_exit, MENU_ID_EXIT); //$NON-NLS-1$

    file_exit.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        UIFunctionsManagerSWT.getUIFunctionsSWT().dispose(false, false);
      }
    });

    // let platform decide
    ParameterListener paramListener = new ParameterListener() {
      public void parameterChanged(String parameterName) {
        if (COConfigurationManager.getBooleanParameter("Enable System Tray")
            && COConfigurationManager.getBooleanParameter("Close To Tray")) {
          KeyBindings.removeAccelerator(file_exit, MENU_ID_EXIT);
        } else {
          KeyBindings.setAccelerator(file_exit, MENU_ID_EXIT);
        }
      }
    };
    COConfigurationManager.addParameterListener("Enable System Tray",
        paramListener);
    COConfigurationManager.addParameterListener("Close To Tray", paramListener);
    return file_exit;
  }

  public static MenuItem addStartAllMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_START_ALL_TRANSFERS,
        new ListenerNeedingCoreRunning() {
          public void handleEvent(AzureusCore core, Event e) {
            core.getGlobalManager().startAllDownloads();
        /*
         * KN: Not sure why we can not use the call below as opposed to the line above
         *  which was the exiting code
         */
        // ManagerUtils.asyncStartAll();
      }
    });
  }

  public static MenuItem addStopAllMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_STOP_ALL_TRANSFERS, new Listener() {
      public void handleEvent(Event event) {
        ManagerUtils.asyncStopAll();
      }
    });
  }

  public static MenuItem addPauseMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_PAUSE_TRANSFERS, new Listener() {
      public void handleEvent(Event event) {
        ManagerUtils.asyncPause();
      }
    });
  }

  public static MenuItem addResumeMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_RESUME_TRANSFERS, new Listener() {
      public void handleEvent(Event event) {
        ManagerUtils.asyncResume();
      }
    });
  }

  public static MenuItem addMyTorrentsMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_MY_TORRENTS, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_MYTORRENTS, null);
        }
      }
    });
  }
 
  public static MenuItem addAllPeersMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_ALL_PEERS, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_ALLPEERS, null);
        }
      }
    });
  }

  public static MenuItem addClientStatsMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_CLIENT_STATS, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_PEERS_STATS, null);
        }
      }
    });
  }

  public static MenuItem addDeviceManagerMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_DEVICEMANAGER, new Listener() {
      public void handleEvent(Event e) {
        MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
        mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_DEVICES);
      }
    });
  }

  public static MenuItem addSubscriptionMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_SUBSCRIPTIONS, new Listener() {
      public void handleEvent(Event e) {
        MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
        mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_HEADER_SUBSCRIPTIONS);
      }
    });
  }

  public static MenuItem addMyTrackerMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_MY_TRACKERS, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_MYTRACKER, null);
        }
      }
    });
  }

  public static MenuItem addMySharesMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_MY_SHARES, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_MYSHARES, null);
        }
      }
    });
  }

  public static MenuItem addViewToolbarMenuItem(Menu menu) {
    final MenuItem item = addMenuItem(menu, SWT.CHECK, MENU_ID_TOOLBAR,
        new Listener() {
          public void handleEvent(Event e) {
            UIFunctionsSWT uiFunctions = getUIFunctionSWT();
            if (null != uiFunctions) {
              IMainWindow mainWindow = uiFunctions.getMainWindow();
              boolean isToolbarVisible = mainWindow.isVisible(IMainWindow.WINDOW_ELEMENT_TOOLBAR);
              mainWindow.setVisible(IMainWindow.WINDOW_ELEMENT_TOOLBAR,
                  !isToolbarVisible);
            }
          }
        });

    final ParameterListener listener = new ParameterListener() {
      public void parameterChanged(String parameterName) {
        item.setSelection(COConfigurationManager.getBooleanParameter(parameterName));
      }
    };

    COConfigurationManager.addAndFireParameterListener("IconBar.enabled",
        listener);
    item.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        COConfigurationManager.removeParameterListener("IconBar.enabled",
            listener);
      }
    });
    return item;
  }

  public static MenuItem addTransferBarToMenu(final Menu menu) {
    final MenuItem item = addMenuItem(menu, SWT.CHECK, MENU_ID_TRANSFER_BAR,
        new ListenerNeedingCoreRunning() {
          public void handleEvent(AzureusCore core, Event e) {
            if (AllTransfersBar.getManager().isOpen(
                core.getGlobalManager())) {
              AllTransfersBar.close(core.getGlobalManager());
            } else {
              AllTransfersBar.open(core.getGlobalManager(),
                  menu.getShell());
            }
          }
        });
    item.setSelection(!MiniBarManager.getManager().getShellManager().isEmpty());

    menu.addListener(SWT.Show, new Listener() {
      public void handleEvent(Event event) {
        if (item.isDisposed()) {
          menu.removeListener(SWT.Show, this);
        } else {
          item.setSelection(!MiniBarManager.getManager().getShellManager().isEmpty());
        }
      }
    });
    return item;
  }

  public static MenuItem addBlockedIPsMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_IP_FILTER, new ListenerNeedingCoreRunning() {
      public void handleEvent(AzureusCore core, Event e) {
        BlockedIpsWindow.showBlockedIps(core,
            getUIFunctionSWT().getMainShell());
      }
    });
  }

  public static MenuItem addConsoleMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_CONSOLE, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_CONSOLE, null);
        }
      }
    });
  }

  public static MenuItem addStatisticsMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_STATS, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_STATS, null);
        }
      }
    });
  }

  public static MenuItem addNatTestMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_NAT_TEST, new Listener() {
      public void handleEvent(Event e) {
        new NatTestWindow();
      }
    });
  }

  public static MenuItem addSpeedTestMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_SPEED_TEST, new Listener() {
      public void handleEvent(Event e) {
        CoreWaiterSWT.waitForCoreRunning(new AzureusCoreRunningListener() {
          public void azureusCoreRunning(AzureusCore core) {
            new SpeedTestWizard();
          }
        });
      }
    });
  }

  public static MenuItem addConfigWizardMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_CONFIGURE, new Listener() {
      public void handleEvent(Event e) {
        new ConfigureWizard(false,ConfigureWizard.WIZARD_MODE_FULL);
      }
    });
  }

  public static MenuItem addOptionsMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_OPTIONS, new Listener() {
      public void handleEvent(Event e) {
        UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
        if (uiFunctions != null) {
          uiFunctions.openView(UIFunctions.VIEW_CONFIG, null);
        }
      }
    });
  }

  public static MenuItem addMinimizeWindowMenuItem(Menu menu) {
    final Shell shell = menu.getShell();

    final MenuItem item = addMenuItem(menu, MENU_ID_WINDOW_MINIMIZE,
        new Listener() {
          public void handleEvent(Event event) {
            if (null == shell || shell.isDisposed()) {
              event.doit = false;
              return;
            }
            shell.setMinimized(true);
          }
        });

    Listener enableHandler = new Listener() {
      public void handleEvent(Event event) {
        if (null == shell || true == shell.isDisposed()
            || true == item.isDisposed()) {
          event.doit = false;
          return;
        }

        if (((shell.getStyle() & SWT.MIN) != 0)) {
          item.setEnabled(false == shell.getMinimized());
        } else {
          item.setEnabled(false);
        }
      }
    };

    menu.addListener(SWT.Show, enableHandler);
    shell.addListener(SWT.FocusIn, enableHandler);
    shell.addListener(SWT.Iconify, enableHandler);
    shell.addListener(SWT.Deiconify, enableHandler);

    return item;
  }

  public static MenuItem addBringAllToFrontMenuItem(Menu menu) {
    final MenuItem item = addMenuItem(menu, MENU_ID_WINDOW_ALL_TO_FRONT,
        new Listener() {
          public void handleEvent(Event event) {
            Iterator iter = ShellManager.sharedManager().getWindows();
            while (iter.hasNext()) {
              Shell shell = (Shell) iter.next();
              if (!shell.isDisposed() && !shell.getMinimized())
                shell.open();
            }
          }
        });

    final Listener enableHandler = new Listener() {
      public void handleEvent(Event event) {
        if (item.isDisposed()) {
          return;
        }
        Iterator iter = ShellManager.sharedManager().getWindows();
        boolean hasNonMaximizedShell = false;
        while (iter.hasNext()) {
          Shell shell = (Shell) iter.next();
          if (false == shell.isDisposed() && false == shell.getMinimized()) {
            hasNonMaximizedShell = true;
            break;
          }
        }
        item.setEnabled(hasNonMaximizedShell);
      }
    };

    menu.addListener(SWT.Show, enableHandler);
    menu.getShell().addListener(SWT.FocusIn, enableHandler);

    ShellManager.sharedManager().addWindowAddedListener(enableHandler);
    ShellManager.sharedManager().addWindowRemovedListener(enableHandler);
    item.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent event) {
        ShellManager.sharedManager().removeWindowAddedListener(enableHandler);
        ShellManager.sharedManager().removeWindowRemovedListener(enableHandler);
      }
    });

    return item;
  }

  /**
   * Appends the list of opened interactive windows to the bottom of the specified shell menu
   * @param menuParent The shell menu
   * @param shell
   */
  public static void appendWindowMenuItems(final Menu menuParent) {
    final Shell shell = menuParent.getShell();
    final int numTopItems = menuParent.getItemCount();
    Listener rebuild = new Listener() {
      public void handleEvent(Event event) {
        try {
          if (menuParent.isDisposed() || shell.isDisposed())
            return;

          final int size = ShellManager.sharedManager().getSize();
          if (size == menuParent.getItemCount() - numTopItems) {
            for (int i = numTopItems; i < menuParent.getItemCount(); i++) {
              final MenuItem item = menuParent.getItem(i);
              item.setSelection(item.getData() == shell);
            }
            return;
          }

          for (int i = numTopItems; i < menuParent.getItemCount();)
            menuParent.getItem(i).dispose();

          Iterator iter = ShellManager.sharedManager().getWindows();
          for (int i = 0; i < size; i++) {
            final Shell sh = (Shell) iter.next();

            if (sh.isDisposed() || sh.getText().length() == 0)
              continue;

            final MenuItem item = new MenuItem(menuParent, SWT.CHECK);

            item.setText(sh.getText());
            item.setSelection(shell == sh);
            item.setData(sh);

            item.addSelectionListener(new SelectionAdapter() {
              public void widgetSelected(SelectionEvent event) {
                if (event.widget.isDisposed() || sh.isDisposed())
                  return;

                if (sh.getMinimized())
                  sh.setMinimized(false);

                sh.open();
              }
            });
          }
        } catch (Exception e) {
          Logger.log(new LogEvent(LogIDs.GUI, "rebuild menu error", e));
        }
      }
    };

    ShellManager.sharedManager().addWindowAddedListener(rebuild);
    ShellManager.sharedManager().addWindowRemovedListener(rebuild);
    shell.addListener(SWT.FocusIn, rebuild);
    menuParent.addListener(SWT.Show, rebuild);
  }

  public static MenuItem addZoomWindowMenuItem(Menu menuParent) {
    final Shell shell = menuParent.getShell();
    final MenuItem item = addMenuItem(menuParent, MENU_ID_WINDOW_ZOOM,
        new Listener() {
          public void handleEvent(Event event) {
            if (shell.isDisposed()) {
              event.doit = false;
              return;
            }
            shell.setMaximized(!shell.getMaximized());
          }
        });

    Listener enableHandler = new Listener() {
      public void handleEvent(Event event) {
        if ( !shell.isDisposed() && !item.isDisposed()) {
          if (false == Constants.isOSX) {
            if (true == shell.getMaximized()) {
              Messages.setLanguageText(
                  item,
                  MessageText.resolveLocalizationKey(MENU_ID_WINDOW_ZOOM_RESTORE));
            } else {
              Messages.setLanguageText(
                  item,
                  MessageText.resolveLocalizationKey(MENU_ID_WINDOW_ZOOM_MAXIMIZE));
            }
          }

          if (((shell.getStyle() & SWT.MAX) != 0)) {
            item.setEnabled(false == shell.getMinimized());
          } else {
            item.setEnabled(false);
          }
        }
      }
    };

    menuParent.addListener(SWT.Show, enableHandler);
    shell.addListener(SWT.FocusIn, enableHandler);
    shell.addListener(SWT.Iconify, enableHandler);
    shell.addListener(SWT.Deiconify, enableHandler);

    return item;
  }

  public static MenuItem addAboutMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_ABOUT, new Listener() {
      public void handleEvent(Event e) {
        AboutWindow.show();
      }
    });
  }

  public static MenuItem addHealthMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_HEALTH, new Listener() {
      public void handleEvent(Event e) {
        HealthHelpWindow.show(getDisplay());
      }
    });
  }

  public static MenuItem addWhatsNewMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_WHATS_NEW, new Listener() {
      public void handleEvent(Event e) {
        Utils.launch("http://plugins.vuze.com/changelog.php?version="
            + Constants.AZUREUS_VERSION);
      }
    });
  }

  public static MenuItem addWikiMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_COMMUNITY_WIKI, new Listener() {
      public void handleEvent(Event e) {
        Utils.launch(Constants.AZUREUS_WIKI);
      }
    });
  }

  public static MenuItem addReleaseNotesMenuItem(final Menu menu) {
    return addMenuItem(menu, MENU_ID_RELEASE_NOTES, new Listener() {
      public void handleEvent(Event e) {
        new WelcomeWindow(menu.getShell());
      }
    });
  }

 
  public static MenuItem addHelpSupportMenuItem(Menu menu, final String support_url ) {
    return addMenuItem(menu, MENU_ID_HELP_SUPPORT, new Listener() {
      public void handleEvent(Event e) {
        Utils.launch( support_url );
      }
    });
  }
 
  public static MenuItem addDonationMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_DONATE, new Listener() {
      public void handleEvent(Event e) {
        DonationWindow.open(true, "menu");
      }
    });
  }

 
  public static MenuItem addGetPluginsMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_PLUGINS_HELP, new Listener() {
      public void handleEvent(Event e) {
        Utils.launch("http://plugins.vuze.com/plugin_list.php");
        //MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
        //mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_ABOUTPLUGINS);
      }
    });
  }

  public static MenuItem addDebugHelpMenuItem(Menu menu) {
    return addMenuItem(menu, MENU_ID_DEBUG_HELP, new Listener() {
      public void handleEvent(Event e) {
        UIDebugGenerator.generate(Constants.APP_NAME + " "
            + Constants.AZUREUS_VERSION, "Generated via Help Menu");
      }
    });
  }

  public static MenuItem addCheckUpdateMenuItem(final Menu menu) {
    return addMenuItem(menu, MENU_ID_UPDATE_CHECK, new ListenerNeedingCoreRunning() {
      public void handleEvent(AzureusCore core, Event e) {
        UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
        if (uiFunctions != null) {
          uiFunctions.bringToFront();
        }
        UpdateMonitor.getSingleton(core).performCheck(true, false, false,
            new UpdateCheckInstanceListener() {
              public void cancelled(UpdateCheckInstance instance) {
              }

              public void complete(UpdateCheckInstance instance) {
                Update[] updates = instance.getUpdates();
                boolean hasUpdates = false;
                for (Update update : updates) {
                  if (update.getDownloaders().length > 0) {
                    hasUpdates = true;
                    break;
                  }
                }
                if (!hasUpdates) {
                  MessageBoxShell mb = new MessageBoxShell(
                      SWT.ICON_INFORMATION | SWT.OK,
                      "window.update.noupdates", (String[]) null);
                  mb.open(null);
                }
              }
            });
      }
    });
  }

  public static MenuItem addBetaMenuItem(Menu menuParent) {
    final MenuItem menuItem = addMenuItem(menuParent, MENU_ID_BETA_PROG,
        new Listener() {
          public void handleEvent(Event e) {
            new BetaWizard();
      }
    });

    COConfigurationManager.addAndFireParameterListener(
        "Beta Programme Enabled", new ParameterListener() {
          public void parameterChanged(String parameterName) {
            Utils.execSWTThread(new AERunnable() {
              public void runSupport() {
                if ( menuItem.isDisposed()){
                  return;
                }
                boolean enabled = COConfigurationManager.getBooleanParameter("Beta Programme Enabled");
                Messages.setLanguageText(
                    menuItem,
                    MessageText.resolveLocalizationKey(MENU_ID_BETA_PROG
                        + (enabled ? ".off" : ".on")));
              }
            });
          }
        });

    return menuItem;
  }
 
  public static MenuItem addPluginInstallMenuItem(Menu menuParent) {
    return addMenuItem(menuParent, MENU_ID_PLUGINS_INSTALL,
        new Listener() {
          public void handleEvent(Event e) {
            new InstallPluginWizard();
      }
    });
  }

  public static MenuItem addPluginUnInstallMenuItem(Menu menuParent) {
    return addMenuItem(menuParent, MENU_ID_PLUGINS_UNINSTALL,
        new Listener() {
          public void handleEvent(Event e) {
            new UnInstallPluginWizard(getDisplay());
      }
    });
  }

  /**
   * Creates a menu item that is simply a label; it does nothing is selected
   * @param menu
   * @param localizationKey
   * @return
   */
  public static final MenuItem addLabelMenuItem(Menu menu,
      String localizationKey) {
    MenuItem item = new MenuItem(menu, SWT.NULL);
    Messages.setLanguageText(item, localizationKey);
    item.setEnabled(false);
    return item;
  }

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

  public static MenuItem addSeparatorMenuItem(Menu menuParent) {
    return new MenuItem(menuParent, SWT.SEPARATOR);
  }

  public static MenuItem createTopLevelMenuItem(Menu menuParent,
      String localizationKey) {
    Menu menu = new Menu(menuParent.getShell(), SWT.DROP_DOWN);
    MenuItem menuItem = new MenuItem(menuParent, SWT.CASCADE);
    Messages.setLanguageText(menuItem, localizationKey);
    menuItem.setMenu(menu);

    /*
     * A top level menu and its menu item has the same ID; this is used to locate them at runtime
     */
    menu.setData(KEY_MENU_ID, localizationKey);
    menuItem.setData(KEY_MENU_ID, localizationKey);

    return menuItem;
  }

  public static final MenuItem addMenuItem(Menu menu, String localizationKey,
      Listener selListener) {
    return addMenuItem(menu, localizationKey, selListener, SWT.NONE);
  }

  public static final MenuItem addMenuItem(Menu menu, String localizationKey,
      Listener selListener, int style) {
    MenuItem menuItem = new MenuItem(menu, style);
    Messages.setLanguageText(menuItem,
        MessageText.resolveLocalizationKey(localizationKey));
    KeyBindings.setAccelerator(menuItem,
        MessageText.resolveAcceleratorKey(localizationKey));
    if (null != selListener) {
      menuItem.addListener(SWT.Selection, selListener);
    }
    /*
     * Using the localizationKey as the id for the menu item; this can be used to locate it at runtime
     * using .KN: missing method pointers
     */
    menuItem.setData(KEY_MENU_ID, localizationKey);
    return menuItem;
  }

  public static final MenuItem addMenuItem(Menu menu, int style,
      String localizationKey, Listener selListener) {
    return addMenuItem(menu, style, -1, localizationKey, selListener);
  }

  public static final MenuItem addMenuItem(Menu menu, int style, int index,
      String localizationKey, Listener selListener) {
    if (index < 0 || index > menu.getItemCount()) {
      index = menu.getItemCount();
    }
    MenuItem menuItem = new MenuItem(menu, style, index);
    Messages.setLanguageText(menuItem, localizationKey);
    KeyBindings.setAccelerator(menuItem, localizationKey);
    menuItem.addListener(SWT.Selection, selListener);
    /*
     * Using the localizationKey as the id for the menu item; this can be used to locate it at runtime
     * using .KN: missing method pointers
     */
    menuItem.setData(KEY_MENU_ID, localizationKey);
    return menuItem;
  }

  private static UIFunctionsSWT getUIFunctionSWT() {
    UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
    if (null != uiFunctions) {
      return uiFunctions;
    }
    throw new IllegalStateException(
        "No instance of UIFunctionsSWT found; the UIFunctionsManager might not have been initialized properly");
  }

  private static Display getDisplay() {
    return SWTThread.getInstance().getDisplay();
  }

  public static void updateMenuText(Object menu) {
    if (menu == null)
      return;
    if (menu instanceof Menu) {
      MenuItem[] menus = ((Menu) menu).getItems();
      for (int i = 0; i < menus.length; i++) {
        updateMenuText(menus[i]);
      }
    } else if (menu instanceof MenuItem) {
      MenuItem item = (MenuItem) menu;
      if (item.getData(KEY_MENU_ID) instanceof String) {
        String localizationKey = (String) item.getData(KEY_MENU_ID);
        item.setText(MessageText.getString(localizationKey));
        KeyBindings.setAccelerator(item,
            MessageText.resolveAcceleratorKey(localizationKey));
        updateMenuText(item.getMenu());
      } else {
        Messages.updateLanguageForControl(item);
      }
    }
  }

  public static void performOneTimeDisable(MenuItem item,
      boolean affectsChildMenuItems) {
    item.setEnabled(false);
    if (affectsChildMenuItems) {
      Menu childMenu = item.getMenu();
      if (childMenu == null)
        return;

      for (int i = 0; i < childMenu.getItemCount(); i++) {
        childMenu.getItem(i).setEnabled(false);
      }
    }
  }

  /**
   * Find and return the menu with the given id starting from the given menu
   *
   * @param menuToStartWith
   * @param idToMatch any of the menu keys listed in {@link org.gudy.azureus2.ui.swt.mainwindow.IMenuConstants}
   * @return may return <code>null</code> if not found
   */
  public static Menu findMenu(Menu menuToStartWith, String idToMatch) {

    /*
     * This is a recursive method; it will start at the given menuToStartWith
     * and recursively traverse to all its sub menus until a matching
     * menu is found or until it has touched all sub menus
     */
    if (null == menuToStartWith || true == menuToStartWith.isDisposed()
        || null == idToMatch || idToMatch.length() < 1) {
      return null;
    }

    /*
     * The given menuToStartWith may be the one we're looking for
     */
    if (true == idToMatch.equals(getID(menuToStartWith))) {
      return menuToStartWith;
    }

    MenuItem[] items = menuToStartWith.getItems();

    /*
     * Go deeper into each child to try and find it
     */
    for (int i = 0; i < items.length; i++) {
      MenuItem item = items[i];
      Menu menuToFind = findMenu(item.getMenu(), idToMatch);
      if (null != menuToFind) {
        return menuToFind;
      }
    }

    return null;
  }

  /**
   * Find and return the menu item with the given id starting from the given menu
   *
   * @param menuToStartWith
   * @param idToMatch any of the menu keys listed in {@link org.gudy.azureus2.ui.swt.mainwindow.IMenuConstants}
   * @return may return <code>null</code> if not found
   */
  public static MenuItem findMenuItem(Menu menuToStartWith, String idToMatch) {
    return findMenuItem(menuToStartWith, idToMatch, true);
  }

  public static MenuItem findMenuItem(Menu menuToStartWith, String idToMatch, boolean deep) {
    /*
     * This is a recursive method; it will start at the given menuToStartWith
     * and recursively traverse to all its sub menus until a matching
     * menu item is found or until it has touched all existing menu items
     */
    if (null == menuToStartWith || true == menuToStartWith.isDisposed()
        || null == idToMatch || idToMatch.length() < 1) {
      return null;
    }

    MenuItem[] items = menuToStartWith.getItems();

    for (int i = 0; i < items.length; i++) {
      MenuItem item = items[i];
      if (true == idToMatch.equals(getID(item))) {
        return item;
      }

      if (deep) {
        /*
         * Go deeper into each child to try and find it
         */
        MenuItem menuItemToFind = findMenuItem(item.getMenu(), idToMatch);
        if (null != menuItemToFind) {
          return menuItemToFind;
        }
      }
    }

    return null;
  }

  private static String getID(Widget widget) {
    if (null != widget && false == widget.isDisposed()) {
      Object id = widget.getData(KEY_MENU_ID);
      if (null != id) {
        return id.toString();
      }
    }
    return "";
  }

  public static void setEnablementKeys(Widget widget, int keys) {
    if (null != widget && false == widget.isDisposed()) {
      widget.setData(KEY_ENABLEMENT, new Integer(keys));
    }
  }

  public static int getEnablementKeys(Widget widget) {
    if (null != widget && false == widget.isDisposed()) {
      Object keys = widget.getData(KEY_ENABLEMENT);
      if (keys instanceof Integer) {
        return ((Integer) keys).intValue();
      }
    }
    return -1;
  }

  /**
   * Updates the enabled state of the given menu and all its applicable children
   * <p><b>NOTE:</b> This method currently iterates through the menu hierarchy to
   * set the enablement which may be inefficient since most menus do not have this flag set;
   * it may be desirable to employ a map of only the effected menus for efficient direct
   * access to them</p>
   * @param menuToStartWith
   */
  public static void updateEnabledStates(Menu menuToStartWith) {
    /*
     * This is a recursive method; it will start at the given menuToStartWith
     * and recursively traverse to all its sub menus until a matching
     * menu item is found or until it has touched all existing menu items
     */
    if (null == menuToStartWith || true == menuToStartWith.isDisposed()) {
      return;
    }

    /*
     * If the given menu itself is disabled then just return since
     * its menu items can not be seen anyway
     */
    if (false == setEnablement(menuToStartWith)) {
      return;
    }

    MenuItem[] items = menuToStartWith.getItems();

    for (int i = 0; i < items.length; i++) {
      MenuItem item = items[i];

      /*
       * If the current menu item is disabled then just return since
       * its children items can not be seen anyway
       */
      if (false == setEnablement(item)) {
        continue;
      }

      /*
       * Go deeper into the children items and set their enablement
       */
      updateEnabledStates(item.getMenu());

    }
  }

  /**
   * Sets whether the given widget is enabled or not based on the value of the
   * KEY_ENABLEMENT object data set into the given widget.
   * @param widget
   * @return
   */
  public static boolean setEnablement(Widget widget) {
    if (null != widget && false == widget.isDisposed()) {
      boolean isEnabled = isEnabledForCurrentMode(widget);

      if (widget instanceof MenuItem) {
        ((MenuItem) widget).setEnabled(isEnabled);
      } else if (widget instanceof Menu) {
        ((Menu) widget).setEnabled(isEnabled);
      }
      return isEnabled;
    }
    return false;
  }

  /**
   * Returns whether the given widget should be enabled for the current mode;
   * current mode can be az2, az3, or az3 advanced.
   * @param widget
   * @return
   */
  public static boolean isEnabledForCurrentMode(Widget widget) {
    int keys = getEnablementKeys(widget);
    if (keys <= 0) {
      return true;
    } else if (true == isAZ3) {
      return ((keys & FOR_AZ3) != 0);
    } else {
      return ((keys & FOR_AZ2) != 0);
    }
  }

  private static final boolean DEBUG_SET_FOREGROUND = System.getProperty("debug.setforeground") != null;
 
  private static TableRow wrapAsRow(final Object o, final String table_name) {
    return new TableRow() {
        public Object getDataSource() {return o;}
        public String getTableID() {return table_name;}
       
        private void notSupported() {
          throw new RuntimeException("method is not supported - table row is a \"virtual\" one, only getDataSource and getTableID are supported.");
        }
       
        private void setForegroundDebug() {
          if (DEBUG_SET_FOREGROUND) {
            Debug.out("setForeground on fake TableRow");
          }
        }

        // Everything below is unsupported.
        public void setForeground(int red, int green, int blue) {setForegroundDebug(); notSupported();}
        public void setForeground(int[] rgb) {setForegroundDebug(); notSupported();}
        public void setForegroundToErrorColor() {setForegroundDebug(); notSupported();}
        public boolean isValid() {notSupported(); return false;}
        public TableCell getTableCell(String sColumnName) {notSupported(); return null;}
        public boolean isSelected()  {notSupported(); return false;}
        public void addMouseListener(TableRowMouseListener listener) {notSupported();}
        public void removeMouseListener(TableRowMouseListener listener) {notSupported();}
        public Object getData(String id) {return null;}
        public void setData(String id, Object data) {}
    };
  }

}
TOP

Related Classes of org.gudy.azureus2.ui.swt.mainwindow.MenuFactory

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.