Issue #29 Fixed issue with radar menu dispose

Former-commit-id: 8f0fbbf4e8 [formerly 279c4037f9f6fbefe53bc12cbf82017daa3399d2]
Former-commit-id: f131667c9e
This commit is contained in:
Max Schenkelberg 2012-02-02 16:52:38 -06:00
parent eead5c9a7e
commit 56897ee0df
8 changed files with 18 additions and 251 deletions

View file

@ -1,153 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.ui.menus.widgets;
import java.util.Set;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.ToolBar;
import com.raytheon.uf.common.menus.xml.CommonAbstractMenuContribution;
import com.raytheon.uf.common.menus.xml.VariableSubstitution;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.ui.menus.xml.IncludeMenuItem;
/**
*
* Waits to load included files until the menu is filled.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 13, 2011 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class IncludeContributionItem extends ContributionItem {
static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(IncludeContributionItem.class);
private final IncludeMenuItem imc;
private final CommonAbstractMenuContribution contribs;
private final VariableSubstitution[] incomingSubs;
private final Set<String> removalsIn;
private IContributionItem[] items = null;
public IncludeContributionItem(IncludeMenuItem imc,
CommonAbstractMenuContribution contribs,
VariableSubstitution[] incomingSubs, Set<String> removalsIn) {
super();
this.imc = imc;
this.contribs = contribs;
this.incomingSubs = incomingSubs;
this.removalsIn = removalsIn;
}
public synchronized IContributionItem[] getContributionItems() {
if (items == null) {
try {
items = imc.getAllContributionItems(contribs, incomingSubs,
removalsIn);
} catch (VizException e) {
statusHandler.handle(Priority.SIGNIFICANT,
"Error setting up menus", e);
}
}
return items;
}
@Override
public void fill(Menu menu, int index) {
IContributionItem[] items = getContributionItems();
if (index == -1) {
index = menu.getItemCount();
}
getContributionItems();
for (int i = 0; i < items.length; i++) {
IContributionItem item = items[i];
int oldItemCount = menu.getItemCount();
if (item.isVisible()) {
item.fill(menu, index);
}
int newItemCount = menu.getItemCount();
int numAdded = newItemCount - oldItemCount;
index += numAdded;
}
}
@Override
public void fill(ToolBar toolbar, int index) {
IContributionItem[] items = getContributionItems();
if (index == -1) {
index = toolbar.getItemCount();
}
getContributionItems();
for (int i = 0; i < items.length; i++) {
IContributionItem item = items[i];
int oldItemCount = toolbar.getItemCount();
if (item.isVisible()) {
item.fill(toolbar, index);
}
int newItemCount = toolbar.getItemCount();
int numAdded = newItemCount - oldItemCount;
index += numAdded;
}
}
@Override
public boolean isDynamic() {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.action.ContributionItem#isDirty()
*/
@Override
public boolean isDirty() {
return false;
}
@Override
public void dispose() {
super.dispose();
if (items != null) {
for (IContributionItem item : items) {
item.dispose();
}
}
}
}

View file

@ -23,7 +23,6 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Menu;
@ -79,14 +78,11 @@ public class SubmenuContributionItem extends MenuManager {
*/ */
public SubmenuContributionItem(VariableSubstitution[] includeSubstitutions, public SubmenuContributionItem(VariableSubstitution[] includeSubstitutions,
String name, CommonAbstractMenuContribution[] ci, String name, CommonAbstractMenuContribution[] ci,
Set<String> removals, IMenuListener menuListener) { Set<String> removals) {
super(processNameSubstitution(includeSubstitutions, name)); super(processNameSubstitution(includeSubstitutions, name));
this.subs = includeSubstitutions; this.subs = includeSubstitutions;
this.contribs = ci; this.contribs = ci;
this.removals = removals; this.removals = removals;
if (menuListener != null) {
this.addMenuListener(menuListener);
}
} }
private static String processNameSubstitution( private static String processNameSubstitution(

View file

@ -37,8 +37,6 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MenuItem;
import com.raytheon.uf.viz.ui.menus.xml.IVizMenuManager;
/** /**
* TODO Add Description * TODO Add Description
* *
@ -72,6 +70,7 @@ public class TearOffMenuListener implements IMenuListener2 {
*/ */
@Override @Override
public void menuAboutToShow(final IMenuManager manager) { public void menuAboutToShow(final IMenuManager manager) {
// new Exception().printStackTrace();
register(manager.getItems(), this); register(manager.getItems(), this);
if (openDialogs.contains(manager) == false) { if (openDialogs.contains(manager) == false) {
// No open dialog for this menu, add tear off button // No open dialog for this menu, add tear off button
@ -86,8 +85,8 @@ public class TearOffMenuListener implements IMenuListener2 {
*/ */
@Override @Override
public void menuAboutToHide(IMenuManager manager) { public void menuAboutToHide(IMenuManager manager) {
unregister(manager.getItems(), this);
manager.remove(ID); manager.remove(ID);
unregister(manager.getItems(), this);
} }
public static void register(IContributionItem[] items, public static void register(IContributionItem[] items,
@ -95,8 +94,6 @@ public class TearOffMenuListener implements IMenuListener2 {
for (IContributionItem item : items) { for (IContributionItem item : items) {
if (item instanceof IMenuManager) { if (item instanceof IMenuManager) {
((IMenuManager) item).addMenuListener(listener); ((IMenuManager) item).addMenuListener(listener);
} else if (item instanceof IVizMenuManager) {
((IVizMenuManager) item).addMenuListener(listener);
} }
} }
} }
@ -105,9 +102,7 @@ public class TearOffMenuListener implements IMenuListener2 {
IMenuListener listener) { IMenuListener listener) {
for (IContributionItem item : items) { for (IContributionItem item : items) {
if (item instanceof IMenuManager) { if (item instanceof IMenuManager) {
// ((IMenuManager) item).removeMenuListener(listener); ((IMenuManager) item).removeMenuListener(listener);
} else if (item instanceof IVizMenuManager) {
((IVizMenuManager) item).removeMenuListener(listener);
} }
} }
} }
@ -182,9 +177,12 @@ public class TearOffMenuListener implements IMenuListener2 {
@Override @Override
public void handleEvent(Event event) { public void handleEvent(Event event) {
openDialogs.remove(manager); openDialogs.remove(manager);
manager.remove(ID);
unregister(manager.getItems(), TearOffMenuListener.this);
} }
}); });
openDialogs.add(manager); openDialogs.add(manager);
register(manager.getItems(), TearOffMenuListener.this);
dialog.open(); dialog.open();
} }

View file

@ -1,9 +0,0 @@
package com.raytheon.uf.viz.ui.menus.xml;
import org.eclipse.jface.action.IMenuListener;
public interface IVizMenuManager {
public void addMenuListener(IMenuListener listener);
public void removeMenuListener(IMenuListener listener);
}

View file

@ -60,8 +60,6 @@ import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem;
public class IncludeMenuContribution extends public class IncludeMenuContribution extends
AbstractMenuContributionItem<CommonIncludeMenuContribution> { AbstractMenuContributionItem<CommonIncludeMenuContribution> {
private SubmenuContributionItem submenuCont = null;
@Override @Override
public IContributionItem[] getContributionItems( public IContributionItem[] getContributionItems(
CommonAbstractMenuContribution items, VariableSubstitution[] subs, CommonAbstractMenuContribution items, VariableSubstitution[] subs,
@ -73,10 +71,9 @@ public class IncludeMenuContribution extends
newItem.id = item.id; newItem.id = item.id;
newItem.substitutions = item.substitutions; newItem.substitutions = item.substitutions;
newItem.suppressErrors = item.suppressErrors; newItem.suppressErrors = item.suppressErrors;
submenuCont = new SubmenuContributionItem(subs, item.subMenuName, return new IContributionItem[] { new SubmenuContributionItem(subs,
new CommonAbstractMenuContribution[] { newItem }, removals, item.subMenuName,
null); new CommonAbstractMenuContribution[] { newItem }, removals) };
return new IContributionItem[] { submenuCont };
} }
return getContributionItemsInternal(items, subs, removals); return getContributionItemsInternal(items, subs, removals);
} }

View file

@ -31,7 +31,6 @@ import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller; import javax.xml.bind.Unmarshaller;
import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuListener;
import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.menus.MenuSerialization; import com.raytheon.uf.common.menus.MenuSerialization;
@ -45,7 +44,6 @@ import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.ui.menus.DiscoverMenuContributions; import com.raytheon.uf.viz.ui.menus.DiscoverMenuContributions;
import com.raytheon.uf.viz.ui.menus.widgets.IncludeContributionItem;
import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem; import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem;
/** /**
@ -65,14 +63,12 @@ import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem;
*/ */
public class IncludeMenuItem extends CommonIncludeMenuItem implements public class IncludeMenuItem extends CommonIncludeMenuItem implements
IContribItemProvider, ISerializableObject, IVizMenuManager { IContribItemProvider, ISerializableObject {
static final transient IUFStatusHandler statusHandler = UFStatus static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(IncludeMenuItem.class); .getHandler(IncludeMenuItem.class);
private SubmenuContributionItem submenuCont = null; private SubmenuContributionItem submenuCont = null;
private IMenuListener mListener = null;
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
@ -87,7 +83,7 @@ public class IncludeMenuItem extends CommonIncludeMenuItem implements
throws VizException { throws VizException {
if (subMenuName != null) { if (subMenuName != null) {
submenuCont = new SubmenuContributionItem(incomingSubs, submenuCont = new SubmenuContributionItem(incomingSubs,
subMenuName, null, removalsIn, mListener) { subMenuName, null, removalsIn) {
@Override @Override
protected synchronized IContributionItem[][] getContributionItems() { protected synchronized IContributionItem[][] getContributionItems() {
@ -115,9 +111,7 @@ public class IncludeMenuItem extends CommonIncludeMenuItem implements
}; };
return new IContributionItem[] { submenuCont }; return new IContributionItem[] { submenuCont };
} }
// return getAllContributionItems(items, incomingSubs, removalsIn); return getAllContributionItems(items, incomingSubs, removalsIn);
return new IContributionItem[] { new IncludeContributionItem(this,
items, incomingSubs, removalsIn) };
} }
public IContributionItem[] getAllContributionItems( public IContributionItem[] getAllContributionItems(
@ -179,20 +173,4 @@ public class IncludeMenuItem extends CommonIncludeMenuItem implements
} }
} }
@Override
public void addMenuListener(IMenuListener listener) {
mListener = listener;
// can't add it to the submenu if the submenu doesn't exist
if (submenuCont != null) {
submenuCont.addMenuListener(mListener);
}
}
@Override
public void removeMenuListener(IMenuListener listener) {
if (submenuCont != null) {
submenuCont.removeMenuListener(listener);
}
}
} }

View file

@ -23,14 +23,12 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuListener;
import com.raytheon.uf.common.menus.xml.CommonAbstractMenuContribution; import com.raytheon.uf.common.menus.xml.CommonAbstractMenuContribution;
import com.raytheon.uf.common.menus.xml.CommonSubmenuContribution; import com.raytheon.uf.common.menus.xml.CommonSubmenuContribution;
import com.raytheon.uf.common.menus.xml.VariableSubstitution; import com.raytheon.uf.common.menus.xml.VariableSubstitution;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem; import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem;
import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuListener;
/** /**
* Describes a submenu contribution * Describes a submenu contribution
@ -48,12 +46,7 @@ import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuListener;
* @version 1.0 * @version 1.0
*/ */
public class SubmenuContribution extends public class SubmenuContribution extends
AbstractMenuContributionItem<CommonSubmenuContribution> implements AbstractMenuContributionItem<CommonSubmenuContribution> {
IVizMenuManager {
private SubmenuContributionItem submenuCont = null;
private IMenuListener mListener = null;
/* /*
* (non-Javadoc) * (non-Javadoc)
@ -71,25 +64,8 @@ public class SubmenuContribution extends
if (removals.contains(item.id)) if (removals.contains(item.id))
return new IContributionItem[0]; return new IContributionItem[0];
submenuCont = new SubmenuContributionItem(subs, item.menuText, return new IContributionItem[] { new SubmenuContributionItem(subs,
item.contributions, new HashSet<String>(), mListener); item.menuText, item.contributions, new HashSet<String>()) };
// adding tear off listener, seems out of place, but must be done
if (mListener == null
&& com.raytheon.uf.viz.core.Activator.getDefault()
.getPreferenceStore().getBoolean("tearoffmenus")) {
mListener = new TearOffMenuListener(submenuCont);
submenuCont.addMenuListener(mListener);
}
return new IContributionItem[] { submenuCont };
} }
@Override
public void addMenuListener(IMenuListener listener) {
mListener = listener;
}
@Override
public void removeMenuListener(IMenuListener listener) {
submenuCont.removeMenuListener(listener);
}
} }

View file

@ -20,6 +20,7 @@
package com.raytheon.viz.volumebrowser.vbui; package com.raytheon.viz.volumebrowser.vbui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IContributionItem;
@ -33,8 +34,6 @@ import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.menus.IMenuService; import org.eclipse.ui.menus.IMenuService;
import com.raytheon.uf.viz.ui.menus.widgets.IncludeContributionItem;
/** /**
* *
* Implementation of multiline toolbars. Use add and populate to build a toolbar * Implementation of multiline toolbars. Use add and populate to build a toolbar
@ -149,21 +148,6 @@ public class MultiToolbar extends Composite {
ms.populateContributionManager(tbm, location); ms.populateContributionManager(tbm, location);
} }
private List<IContributionItem> getContributionItems(
IContributionItem[] items) {
List<IContributionItem> list = new ArrayList<IContributionItem>();
for (IContributionItem item : items) {
if (item instanceof IncludeContributionItem) {
IncludeContributionItem includeItem = (IncludeContributionItem) item;
list.addAll(getContributionItems(includeItem
.getContributionItems()));
} else {
list.add(item);
}
}
return list;
}
/** /**
* split into multiple bars, this is probably why you are using this class. * split into multiple bars, this is probably why you are using this class.
* *
@ -173,7 +157,7 @@ public class MultiToolbar extends Composite {
this.numBars = numBars; this.numBars = numBars;
List<IContributionItem> items = new ArrayList<IContributionItem>(); List<IContributionItem> items = new ArrayList<IContributionItem>();
for (ToolBarManager tbm : tbms) { for (ToolBarManager tbm : tbms) {
items.addAll(getContributionItems(tbm.getItems())); items.addAll(Arrays.asList(tbm.getItems()));
} }
disposeToolbars(); disposeToolbars();
splitContruibutionItems(items, numBars); splitContruibutionItems(items, numBars);