
org.appdapter.gui.demo.BaseDemoNavigatorCtrl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.appdapter.lib.gui Show documentation
Show all versions of org.appdapter.lib.gui Show documentation
Appdapter Maven project including Java and Scala, produces jar, not bundle. Excludes concrete SLF4J binding.
The newest version!
/*
* Copyright 2011 by The Appdapter Project (www.appdapter.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.appdapter.gui.demo;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.beans.PropertyVetoException;
import java.util.Collection;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import org.appdapter.api.trigger.Box;
import org.appdapter.api.trigger.BoxContext;
import org.appdapter.api.trigger.MutableBox;
import org.appdapter.api.trigger.UserResult;
import org.appdapter.core.log.Debuggable;
import org.appdapter.gui.api.BT;
import org.appdapter.gui.api.BoxPanelSwitchableView;
import org.appdapter.gui.api.BrowserPanelGUI;
import org.appdapter.gui.api.DisplayContext;
import org.appdapter.gui.api.DisplayContextProvider;
import org.appdapter.gui.api.DisplayType;
import org.appdapter.gui.api.NamedObjectCollection;
import org.appdapter.gui.api.POJOCollectionListener;
import org.appdapter.gui.api.ScreenBoxTreeNode;
import org.appdapter.gui.box.ScreenBoxContextImpl;
import org.appdapter.gui.box.ScreenBoxTreeNodeImpl;
import org.appdapter.gui.browse.BrowsePanel;
import org.appdapter.gui.browse.Utility;
import org.appdapter.gui.trigger.TriggerMenuFactory;
/**
* @author Stu B.
*/
abstract public class BaseDemoNavigatorCtrl implements BrowserPanelGUI, org.appdapter.demo.DemoBrowserCtrl {
public BrowserPanelGUI getLocalTreeAPI() {
return this;
}
private TreeModel myTM;
private BoxContext myBoxCtx;
private ScreenBoxTreeNodeImpl myRootBTN;
private DisplayContextProvider myDCP;
private BrowsePanel myBP;
private JFrame myJFrame;
public DisplayContext getDisplayContext() {
if (myBP != null)
return myBP.getDisplayContext();
return this;
}
public BrowsePanel getBrowsePanel() {
return myBP;
}
public BoxContext getBoxContext() {
return myBoxCtx;
}
public BaseDemoNavigatorCtrl() {
myRootBTN = new ScreenBoxTreeNodeImpl(null, null, true, null);
myBoxCtx = new ScreenBoxContextImpl(myRootBTN);
myTM = ((ScreenBoxContextImpl) myBoxCtx).ensureTreeModel();
myDCP = myRootBTN;
setupBrowsePanel();
}
public BaseDemoNavigatorCtrl(BoxContext bc, TreeModel tm, ScreenBoxTreeNode rootBTN, DisplayContextProvider dcp) {
myRootBTN = (ScreenBoxTreeNodeImpl) rootBTN;
myBoxCtx = bc;
myTM = tm;
myDCP = dcp;
setupBrowsePanel();
}
private void setupBrowsePanel() {
Utility.initGUIInThread();
myBP = new BrowsePanel(myTM, myBoxCtx);
DisplayContext dc = myBP.getDisplayContext();
myRootBTN.setDisplayContext(dc);
myBP.addTreeMouseAdapter();
}
public void launchFrameBlocking(final String title) {
Utility.invokeAndWait(new Runnable() {
@Override public void run() {
launchFrameBlockingInSwing(title);
}
});
}
public void launchFrameBlockingInSwing(String title) {
myJFrame = Utility.appFrame;
boolean firstTime = false;
if (myJFrame == null) {
Utility.appFrame = myJFrame = new JFrame();
///if (title == null) title = getClass().getCanonicalName();
firstTime = true;
} else {
//was: throw new RuntimeException("Frame already launched!");
}
if (title != null)
myJFrame.setTitle(title);
if (firstTime) {
// we dont need to "myJFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);" do this.. main methods can
myJFrame.getContentPane().add(myBP, BorderLayout.CENTER);
myBP.checkParent();
myJFrame.pack();
}
show();
}
public void addBoxToRoot(MutableBox childBox, boolean reload) {
Box rootBox = myBoxCtx.getRootBox();
myBoxCtx.contextualizeAndAttachChildBox(rootBox, childBox);
if (reload) {
try {
Utility.invokeLater(new Runnable() {
@Override public void run() {
((DefaultTreeModel) myTM).reload();
}
});
} catch (Throwable e) {
}
}
}
@Override public UserResult showScreenBox(Object anyObject) {
return showScreenBox(null, anyObject);
}
@Override public UserResult showScreenBox(String title, Object anyObject) {
try {
return myBP.showScreenBox(title, anyObject);
} catch (Exception e) {
return myBP.showError(e.getMessage(), e);
}
}
public JFrame getFrame() {
return myJFrame;
}
public UserResult addObject(String title, Object object, DisplayType displayType) throws UnsatisfiedLinkError {
return addObject(title, object, displayType, true);
}
public Component getComponent() {
return myBP;
}
@Override public NamedObjectCollection getLocalBoxedChildren() {
return getNOC();
}
@Override public UserResult showMessage(String message, Class extraInfo) {
return myBP.showMessage(message, extraInfo);
}
@Override public BoxPanelSwitchableView getBoxPanelTabPane() {
return myBP.getBoxPanelTabPane();
}
public UserResult addObject(String title, Object child, DisplayType attachType, boolean showASAP) throws UnsatisfiedLinkError {
return myBP.addObject(title, child, attachType, showASAP, false);
}
public void addRepo(String title, Object anyObject) {
addObject(title, anyObject, DisplayType.TREE, true);
}
@Override public Collection getTriggersFromUI(Object object) {
return myBP.getTriggersFromUI(object);
}
@Override public UserResult showError(String msg, Throwable error) {
return myBP.showError(msg, error);
}
@Override public UserResult addObject(String title, Object anyObject, boolean showASAP) {
return myBP.addObject(title, anyObject, DisplayType.ANY, showASAP, false);
}
@Override public UserResult addObject(String title, Object anyObject, boolean showASAP, boolean expandChildren) {
return myBP.addObject(title, anyObject, DisplayType.ANY, showASAP, expandChildren);
}
private NamedObjectCollection getNOC() {
return myBP.getTreeBoxCollection();
}
@Override public String getTitleOf(Object anyObject) {
return getNOC().getTitleOf(anyObject);
}
public void addListener(POJOCollectionListener objectChoice, boolean catchup) {
getNOC().addListener(objectChoice, catchup);
}
@Override public Iterator
© 2015 - 2025 Weber Informatics LLC | Privacy Policy