Issue #29 Fixed issue with radar menu dispose
Former-commit-id:8f0fbbf4e8
[formerly 279c4037f9f6fbefe53bc12cbf82017daa3399d2] Former-commit-id:f131667c9e
This commit is contained in:
parent
eead5c9a7e
commit
56897ee0df
8 changed files with 18 additions and 251 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,7 +23,6 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.jface.action.IContributionItem;
|
||||
import org.eclipse.jface.action.IMenuListener;
|
||||
import org.eclipse.jface.action.MenuManager;
|
||||
import org.eclipse.swt.widgets.Menu;
|
||||
|
||||
|
@ -79,14 +78,11 @@ public class SubmenuContributionItem extends MenuManager {
|
|||
*/
|
||||
public SubmenuContributionItem(VariableSubstitution[] includeSubstitutions,
|
||||
String name, CommonAbstractMenuContribution[] ci,
|
||||
Set<String> removals, IMenuListener menuListener) {
|
||||
Set<String> removals) {
|
||||
super(processNameSubstitution(includeSubstitutions, name));
|
||||
this.subs = includeSubstitutions;
|
||||
this.contribs = ci;
|
||||
this.removals = removals;
|
||||
if (menuListener != null) {
|
||||
this.addMenuListener(menuListener);
|
||||
}
|
||||
}
|
||||
|
||||
private static String processNameSubstitution(
|
||||
|
|
|
@ -37,8 +37,6 @@ import org.eclipse.swt.widgets.Listener;
|
|||
import org.eclipse.swt.widgets.Menu;
|
||||
import org.eclipse.swt.widgets.MenuItem;
|
||||
|
||||
import com.raytheon.uf.viz.ui.menus.xml.IVizMenuManager;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
*
|
||||
|
@ -72,6 +70,7 @@ public class TearOffMenuListener implements IMenuListener2 {
|
|||
*/
|
||||
@Override
|
||||
public void menuAboutToShow(final IMenuManager manager) {
|
||||
// new Exception().printStackTrace();
|
||||
register(manager.getItems(), this);
|
||||
if (openDialogs.contains(manager) == false) {
|
||||
// No open dialog for this menu, add tear off button
|
||||
|
@ -86,8 +85,8 @@ public class TearOffMenuListener implements IMenuListener2 {
|
|||
*/
|
||||
@Override
|
||||
public void menuAboutToHide(IMenuManager manager) {
|
||||
unregister(manager.getItems(), this);
|
||||
manager.remove(ID);
|
||||
unregister(manager.getItems(), this);
|
||||
}
|
||||
|
||||
public static void register(IContributionItem[] items,
|
||||
|
@ -95,8 +94,6 @@ public class TearOffMenuListener implements IMenuListener2 {
|
|||
for (IContributionItem item : items) {
|
||||
if (item instanceof IMenuManager) {
|
||||
((IMenuManager) item).addMenuListener(listener);
|
||||
} else if (item instanceof IVizMenuManager) {
|
||||
((IVizMenuManager) item).addMenuListener(listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -105,9 +102,7 @@ public class TearOffMenuListener implements IMenuListener2 {
|
|||
IMenuListener listener) {
|
||||
for (IContributionItem item : items) {
|
||||
if (item instanceof IMenuManager) {
|
||||
// ((IMenuManager) item).removeMenuListener(listener);
|
||||
} else if (item instanceof IVizMenuManager) {
|
||||
((IVizMenuManager) item).removeMenuListener(listener);
|
||||
((IMenuManager) item).removeMenuListener(listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -182,9 +177,12 @@ public class TearOffMenuListener implements IMenuListener2 {
|
|||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
openDialogs.remove(manager);
|
||||
manager.remove(ID);
|
||||
unregister(manager.getItems(), TearOffMenuListener.this);
|
||||
}
|
||||
});
|
||||
openDialogs.add(manager);
|
||||
register(manager.getItems(), TearOffMenuListener.this);
|
||||
dialog.open();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -60,8 +60,6 @@ import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem;
|
|||
public class IncludeMenuContribution extends
|
||||
AbstractMenuContributionItem<CommonIncludeMenuContribution> {
|
||||
|
||||
private SubmenuContributionItem submenuCont = null;
|
||||
|
||||
@Override
|
||||
public IContributionItem[] getContributionItems(
|
||||
CommonAbstractMenuContribution items, VariableSubstitution[] subs,
|
||||
|
@ -73,10 +71,9 @@ public class IncludeMenuContribution extends
|
|||
newItem.id = item.id;
|
||||
newItem.substitutions = item.substitutions;
|
||||
newItem.suppressErrors = item.suppressErrors;
|
||||
submenuCont = new SubmenuContributionItem(subs, item.subMenuName,
|
||||
new CommonAbstractMenuContribution[] { newItem }, removals,
|
||||
null);
|
||||
return new IContributionItem[] { submenuCont };
|
||||
return new IContributionItem[] { new SubmenuContributionItem(subs,
|
||||
item.subMenuName,
|
||||
new CommonAbstractMenuContribution[] { newItem }, removals) };
|
||||
}
|
||||
return getContributionItemsInternal(items, subs, removals);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ import javax.xml.bind.JAXBException;
|
|||
import javax.xml.bind.Unmarshaller;
|
||||
|
||||
import org.eclipse.jface.action.IContributionItem;
|
||||
import org.eclipse.jface.action.IMenuListener;
|
||||
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
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.viz.core.exception.VizException;
|
||||
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;
|
||||
|
||||
/**
|
||||
|
@ -65,14 +63,12 @@ import com.raytheon.uf.viz.ui.menus.widgets.SubmenuContributionItem;
|
|||
*/
|
||||
|
||||
public class IncludeMenuItem extends CommonIncludeMenuItem implements
|
||||
IContribItemProvider, ISerializableObject, IVizMenuManager {
|
||||
IContribItemProvider, ISerializableObject {
|
||||
static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(IncludeMenuItem.class);
|
||||
|
||||
private SubmenuContributionItem submenuCont = null;
|
||||
|
||||
private IMenuListener mListener = null;
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -87,7 +83,7 @@ public class IncludeMenuItem extends CommonIncludeMenuItem implements
|
|||
throws VizException {
|
||||
if (subMenuName != null) {
|
||||
submenuCont = new SubmenuContributionItem(incomingSubs,
|
||||
subMenuName, null, removalsIn, mListener) {
|
||||
subMenuName, null, removalsIn) {
|
||||
|
||||
@Override
|
||||
protected synchronized IContributionItem[][] getContributionItems() {
|
||||
|
@ -115,9 +111,7 @@ public class IncludeMenuItem extends CommonIncludeMenuItem implements
|
|||
};
|
||||
return new IContributionItem[] { submenuCont };
|
||||
}
|
||||
// return getAllContributionItems(items, incomingSubs, removalsIn);
|
||||
return new IContributionItem[] { new IncludeContributionItem(this,
|
||||
items, incomingSubs, removalsIn) };
|
||||
return getAllContributionItems(items, incomingSubs, removalsIn);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,14 +23,12 @@ import java.util.HashSet;
|
|||
import java.util.Set;
|
||||
|
||||
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.CommonSubmenuContribution;
|
||||
import com.raytheon.uf.common.menus.xml.VariableSubstitution;
|
||||
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.tearoff.TearOffMenuListener;
|
||||
|
||||
/**
|
||||
* Describes a submenu contribution
|
||||
|
@ -48,12 +46,7 @@ import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuListener;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class SubmenuContribution extends
|
||||
AbstractMenuContributionItem<CommonSubmenuContribution> implements
|
||||
IVizMenuManager {
|
||||
|
||||
private SubmenuContributionItem submenuCont = null;
|
||||
|
||||
private IMenuListener mListener = null;
|
||||
AbstractMenuContributionItem<CommonSubmenuContribution> {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
|
@ -71,25 +64,8 @@ public class SubmenuContribution extends
|
|||
if (removals.contains(item.id))
|
||||
return new IContributionItem[0];
|
||||
|
||||
submenuCont = new SubmenuContributionItem(subs, item.menuText,
|
||||
item.contributions, new HashSet<String>(), mListener);
|
||||
// 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 };
|
||||
return new IContributionItem[] { new SubmenuContributionItem(subs,
|
||||
item.menuText, item.contributions, new HashSet<String>()) };
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMenuListener(IMenuListener listener) {
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMenuListener(IMenuListener listener) {
|
||||
submenuCont.removeMenuListener(listener);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package com.raytheon.viz.volumebrowser.vbui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
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.menus.IMenuService;
|
||||
|
||||
import com.raytheon.uf.viz.ui.menus.widgets.IncludeContributionItem;
|
||||
|
||||
/**
|
||||
*
|
||||
* 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);
|
||||
}
|
||||
|
||||
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.
|
||||
*
|
||||
|
@ -173,7 +157,7 @@ public class MultiToolbar extends Composite {
|
|||
this.numBars = numBars;
|
||||
List<IContributionItem> items = new ArrayList<IContributionItem>();
|
||||
for (ToolBarManager tbm : tbms) {
|
||||
items.addAll(getContributionItems(tbm.getItems()));
|
||||
items.addAll(Arrays.asList(tbm.getItems()));
|
||||
}
|
||||
disposeToolbars();
|
||||
splitContruibutionItems(items, numBars);
|
||||
|
|
Loading…
Add table
Reference in a new issue