Fixed openers menu attachment problem in case of GTK

git-svn-id: https://ipscan.svn.sourceforge.net/svnroot/ipscan/ipscan@49 375186e5-ef17-0410-b0b6-91563547dcda
This commit is contained in:
angryziber 2006-11-07 19:41:17 +00:00
parent acab9f3bcd
commit b03dccb466
3 changed files with 20 additions and 20 deletions

View File

@ -14,12 +14,14 @@ import net.azib.ipscan.gui.actions.ToolsActions;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Decorations;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.PicoContainer;
import org.picocontainer.defaults.ConstructorInjectionComponentAdapter;
import org.picocontainer.defaults.DefaultPicoContainer;
/**
@ -45,8 +47,9 @@ public class MainMenu {
container.registerComponentImplementation(CommandsActions.EditOpeners.class);
container.registerComponentImplementation(CommandsActions.SelectOpener.class);
container.registerComponentImplementation(CommandsActions.ShowOpenersMenu.class);
container.registerComponentImplementation(OpenersMenu.class);
container.registerComponentImplementation(CommandsActions.ShowOpenersMenu.class);
// this one is not cached because we need 2 instances of it - in the Commands menu and in the context menu
container.registerComponent(new ConstructorInjectionComponentAdapter(OpenersMenu.class, OpenersMenu.class));
shell.setMenuBar(mainMenu);
createMainMenuItems(mainMenu);
@ -112,24 +115,16 @@ public class MainMenu {
}
private void createOpenersMenu(Menu subMenu) {
// TODO: this OpenersMenu singleton produces
// Gtk-WARNING **: gtk_menu_attach_to_widget(): menu already attached to GtkImageMenuItem
OpenersMenu openersMenu = (OpenersMenu) container.getComponentInstance(OpenersMenu.class);
MenuItem openersMenuItem = new MenuItem(subMenu, SWT.CASCADE);
openersMenuItem.setText(Labels.getLabel("menu.commands.open"));
openersMenuItem.setMenu(openersMenu);
Listener showOpenersMenuListener = (Listener) container.getComponentInstance(CommandsActions.ShowOpenersMenu.class);
openersMenu.addListener(SWT.Show, showOpenersMenuListener);
// run the listener to populate the menu initially and initialize accelerators
showOpenersMenuListener.handleEvent(null);
}
private void createFavoritesMenu(Menu parentMenu) {
MenuItem favoritesMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
favoritesMenuItem.setText(Labels.getLabel("menu.favorites"));
Menu favoritesMenu = (Menu) container.getComponentInstance(FavoritesMenu.class);
favoritesMenu.addListener(SWT.Show, (Listener) container.getComponentInstance(FavoritesActions.ShowMenu.class));
favoritesMenuItem.setMenu(favoritesMenu);
}
@ -182,11 +177,18 @@ public class MainMenu {
* OpenersMenu wrapper for type-safety
*/
public static class OpenersMenu extends Menu {
public OpenersMenu(Decorations parent, CommandsActions.EditOpeners editOpenersListener) {
public OpenersMenu(Decorations parent, CommandsActions.EditOpeners editOpenersListener, CommandsActions.ShowOpenersMenu showOpenersMenuListener) {
super(parent, SWT.DROP_DOWN);
initMenuItem(this, "menu.commands.open.edit", null, editOpenersListener);
initMenuItem(this, null, null, null);
addListener(SWT.Show, showOpenersMenuListener);
// run the listener to populate the menu initially and initialize accelerators
Event e = new Event();
e.widget = this;
showOpenersMenuListener.handleEvent(e);
}
protected void checkSubclass() { } // allow extending of Menu class
}
@ -195,12 +197,14 @@ public class MainMenu {
* FavoritesMenu wrapper for type-safety
*/
public static class FavoritesMenu extends Menu {
public FavoritesMenu(Decorations parent, FavoritesActions.Add addListener, FavoritesActions.Edit editListener) {
public FavoritesMenu(Decorations parent, FavoritesActions.Add addListener, FavoritesActions.Edit editListener, FavoritesActions.ShowMenu showFavoritesMenuListener) {
super(parent, SWT.DROP_DOWN);
initMenuItem(this, "menu.favorites.add", new Integer(SWT.CONTROL | 'D'), addListener);
initMenuItem(this, "menu.favorites.edit", null, editListener);
initMenuItem(this, null, null, null);
addListener(SWT.Show, showFavoritesMenuListener);
}
protected void checkSubclass() { } // allow extending of Menu class
}

View File

@ -14,7 +14,6 @@ import net.azib.ipscan.gui.EditOpenersDialog;
import net.azib.ipscan.gui.ResultTable;
import net.azib.ipscan.gui.StatusBar;
import net.azib.ipscan.gui.UserErrorException;
import net.azib.ipscan.gui.MainMenu.OpenersMenu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
@ -108,15 +107,14 @@ public class CommandsActions {
public static class ShowOpenersMenu implements Listener {
private Menu openersMenu;
private Listener openersSelectListener;
public ShowOpenersMenu(OpenersMenu openersMenu, SelectOpener selectOpener) {
this.openersMenu = openersMenu;
public ShowOpenersMenu(SelectOpener selectOpener) {
this.openersSelectListener = selectOpener;
}
public void handleEvent(Event event) {
Menu openersMenu = (Menu)event.widget;
MenuItem[] menuItems = openersMenu.getItems();
for (int i = 2; i < menuItems.length; i++) {
menuItems[i].dispose();

View File

@ -11,7 +11,6 @@ import net.azib.ipscan.config.NamedListConfig;
import net.azib.ipscan.gui.EditFavoritesDialog;
import net.azib.ipscan.gui.InputDialog;
import net.azib.ipscan.gui.UserErrorException;
import net.azib.ipscan.gui.MainMenu.FavoritesMenu;
import net.azib.ipscan.gui.feeders.FeederGUIRegistry;
import org.eclipse.swt.SWT;
@ -79,16 +78,15 @@ public class FavoritesActions {
}
public static class ShowMenu implements Listener {
private Menu favoritesMenu;
private Listener favoritesSelectListener;
public ShowMenu(FavoritesMenu favoritesMenu, Select favoritesSelectListener) {
this.favoritesMenu = favoritesMenu;
public ShowMenu(Select favoritesSelectListener) {
// the listener for favorites selections from the menu
this.favoritesSelectListener = favoritesSelectListener;
}
public void handleEvent(Event event) {
Menu favoritesMenu = (Menu) event.widget;
// populate favorites in the menu
NamedListConfig favoritesConfig = Config.getFavoritesConfig();