Issue #29 Fixed issue with radar menu dispose

Former-commit-id: 1cde213e67 [formerly 56897ee0df] [formerly f131667c9e] [formerly 8f0fbbf4e8 [formerly f131667c9e [formerly 279c4037f9f6fbefe53bc12cbf82017daa3399d2]]]
Former-commit-id: 8f0fbbf4e8
Former-commit-id: 1b6d9389ac6e57e2c133f2575ba2dbdfc9896c98 [formerly f33039a269]
Former-commit-id: f5b7ebc249
This commit is contained in:
Max Schenkelberg 2012-02-02 16:52:38 -06:00
parent 3daca6067d
commit d26d122c56
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 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(

View file

@ -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();
}

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
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);
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}

View file

@ -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);