mirror of
https://github.com/angryip/ipscan.git
synced 2025-10-26 11:18:17 +00:00
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:
parent
acab9f3bcd
commit
b03dccb466
@ -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
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user