summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2024-05-19 17:56:33 -0400
committerBenjamin Culkin <scorpress@gmail.com>2024-05-19 17:56:33 -0400
commitaedc34d55462a75e329bbf342251ff6504cd117e (patch)
treebcc8f1f2352582717b484df302aeea6696b8f000 /projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java
Initial import from SVN
Diffstat (limited to 'projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java')
-rw-r--r--projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java285
1 files changed, 285 insertions, 0 deletions
diff --git a/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java b/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java
new file mode 100644
index 0000000..d61d8ff
--- /dev/null
+++ b/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/TreeController.java
@@ -0,0 +1,285 @@
+package net.wotonomy.test;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.AbstractButton;
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+
+import net.wotonomy.control.EODataSource;
+import net.wotonomy.control.EOEditingContext;
+import net.wotonomy.foundation.NSArray;
+import net.wotonomy.ui.EOAssociation;
+import net.wotonomy.ui.EODisplayGroup;
+import net.wotonomy.ui.MasterDetailAssociation;
+import net.wotonomy.ui.swing.ListAssociation;
+import net.wotonomy.ui.swing.RadioPanelAssociation;
+import net.wotonomy.ui.swing.TextAssociation;
+import net.wotonomy.ui.swing.TreeAssociation;
+import net.wotonomy.ui.swing.components.ButtonPanel;
+import net.wotonomy.ui.swing.util.ObjectInspector;
+import net.wotonomy.ui.swing.util.WindowUtilities;
+
+/**
+* A simple editor panel with a few textfields.
+*/
+public class TreeController implements ActionListener
+{
+ final EODisplayGroup group;
+ final EODisplayGroup titlesGroup;
+ final EODisplayGroup detailGroup;
+ final EOEditingContext editingContext;
+
+ public TreeController( EODataSource aDataSource )
+ {
+ titlesGroup = new EODisplayGroup();
+ group = new EODisplayGroup();
+ detailGroup = new EODisplayGroup();
+ titlesGroup.setDataSource( aDataSource );
+ editingContext = aDataSource.editingContext();
+ init();
+ }
+
+ public TreeController( EOEditingContext aContext,
+ EODisplayGroup aTitlesGroup, EODisplayGroup aChildGroup )
+ {
+ titlesGroup = aTitlesGroup;
+ group = aChildGroup;
+ detailGroup = new EODisplayGroup();
+ editingContext = aContext;
+ init();
+ }
+
+ public void init()
+ {
+ final TreePanel treePanel = new TreePanel();
+ treePanel.panel.setBorder(
+ BorderFactory.createCompoundBorder(
+ BorderFactory.createRaisedBevelBorder(),
+ BorderFactory.createEmptyBorder( 10, 10, 10, 10 ) ) );
+ treePanel.setBorder(
+ BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
+ ButtonPanel okPanel = new ButtonPanel(
+ new String[] { "Refresh", "Commit" } );
+ treePanel.add( okPanel, BorderLayout.SOUTH );
+/*
+
+ // set up renderer
+ IconCellRenderer iconRenderer = new IconCellRenderer()
+ {
+ private Icon icon = UIManager.getIcon("FileChooser.homeFolderIcon");
+ public Icon getIconForContext(
+ JComponent container, Object value,
+ int row, int col,
+ boolean isSelected, boolean hasFocus,
+ boolean isExpanded, boolean isLeaf )
+ {
+ return icon;
+ }
+ };
+ treePanel.tree.setCellRenderer( iconRenderer );
+
+ // enable icon clicking
+ treePanel.tree.setCellEditor( iconRenderer );
+ iconRenderer.addActionListener( this );
+*/
+
+ treePanel.tree.setEditable( true );
+
+ // set up display groups
+
+ titlesGroup.fetch();
+
+ // text associations
+ EOAssociation ta;
+
+ ta = new TreeAssociation( treePanel.tree, "People" );
+ ta.bindAspect( EOAssociation.TitlesAspect, titlesGroup, "fullName" );
+ ta.bindAspect( EOAssociation.ChildrenAspect, group, "childList" );
+ ta.bindAspect( EOAssociation.IsLeafAspect, titlesGroup, "childCount" );
+// ta.bindAspect( EOAssociation.IsLeafAspect, null, "false" );
+ ta.establishConnection();
+ treePanel.tree.setEditable( true );
+
+ ta = new TextAssociation( treePanel.editPanel.firstNameField );
+ ta.bindAspect( EOAssociation.ValueAspect, group, "firstName" );
+ ta.establishConnection();
+
+ ta = new TextAssociation( treePanel.editPanel.middleNameField );
+ ta.bindAspect( EOAssociation.ValueAspect, group, "middleName" );
+ ta.establishConnection();
+
+ ta = new TextAssociation( treePanel.editPanel.lastNameField );
+ ta.bindAspect( EOAssociation.ValueAspect, group, "lastName" );
+ ta.establishConnection();
+
+ ta = new RadioPanelAssociation( treePanel.editPanel.yearRadioPanel );
+ ta.bindAspect( EOAssociation.ValueAspect, group, "createDate.year" );
+
+ EODisplayGroup yearTitles = new EODisplayGroup();
+ yearTitles.setObjectArray( new NSArray(
+ new Object[] { "1999", "2000", "2001" } ) );
+ ta.bindAspect( EOAssociation.TitlesAspect, yearTitles, "" );
+
+ EODisplayGroup yearObjects = new EODisplayGroup();
+ yearObjects.setObjectArray( new NSArray(
+ new Object[] { new Integer( 99 ), new Integer( 100 ), new Integer( 101 ) } ) );
+ ta.bindAspect( EOAssociation.ObjectsAspect, yearObjects, "" );
+
+ ta.establishConnection();
+
+ // detail group
+
+ ta = new MasterDetailAssociation( detailGroup );
+ ta.bindAspect( EOAssociation.ParentAspect, group, "childList" );
+ ta.establishConnection();
+
+ ta = new ListAssociation( treePanel.editPanel.list );
+ ta.bindAspect( EOAssociation.TitlesAspect, detailGroup, "fullName" );
+ ta.establishConnection();
+
+ // display group action associations
+
+ AbstractButton addButton = (AbstractButton)
+ treePanel.editPanel.addPanel.getButton( "Add" );
+ addButton.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ Object testObject = new TestObject();
+ editingContext.insertObject( testObject );
+ detailGroup.insertObjectAtIndex( testObject, 0 );
+ }
+ } );
+
+ AbstractButton removeButton = (AbstractButton)
+ treePanel.editPanel.addPanel.getButton( "Remove" );
+ removeButton.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ if ( detailGroup.selectedObject() != null )
+ detailGroup.deleteSelection();
+ }
+ } );
+
+ // ok / cancel buttons
+
+ AbstractButton button;
+
+ button = (AbstractButton)
+ okPanel.getButton( "Commit" );
+ button.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ editingContext.saveChanges();
+ }
+ } );
+
+ button = (AbstractButton)
+ okPanel.getButton( "Refresh" );
+ button.addActionListener( new ActionListener()
+ {
+ public void actionPerformed( ActionEvent evt )
+ {
+ editingContext.revert();
+// editingContext.invalidateAllObjects();
+ }
+ } );
+
+
+/*
+ AbstractButton refreshButton = (AbstractButton)
+ treePanel.editPanel.addPanel.getButton( "Refresh" );
+ refreshButton.addActionListener( new ActionListener()
+ {
+ int count = 0;
+ public void actionPerformed( ActionEvent evt )
+ {
+ EODisplayGroup displayGroup = (EODisplayGroup)
+ treePanel.tree.getSelectionPath().getLastPathComponent();
+// displayGroup.insertObjectAtIndex( new TestObject(), 0 );
+// displayGroup.deleteObjectAtIndex( 0 );
+ List sortOrderings = new LinkedList();
+ if ( count++ % 2 == 0 )
+ {
+ sortOrderings.add( new EOSortOrdering(
+ "lastName", EOSortOrdering.CompareAscending ) );
+ }
+ else
+ {
+ sortOrderings.add( new EOSortOrdering(
+ "lastName", EOSortOrdering.CompareDescending ) );
+ }
+ displayGroup.setSortOrderings( sortOrderings );
+ displayGroup.updateDisplayedObjects();
+ }
+ } );
+*/
+/*
+ ta = new DisplayGroupActionAssociation(
+ treePanel.editPanel.addPanel.getButton( "Remove" ) );
+ ta.bindAspect( EOAssociation.ActionAspect, detailGroup, "deleteSelection" );
+ ta.establishConnection();
+
+ ta = new DisplayGroupActionAssociation(
+ treePanel.editPanel.addPanel.getButton( "Refresh" ) );
+ ta.bindAspect( EOAssociation.ActionAspect, group, "updateDisplayedObjects" );
+ ta.establishConnection();
+*/
+
+ // add mouse listener for list
+
+ treePanel.editPanel.list.addMouseListener( new MouseAdapter()
+ {
+ public void mouseClicked(MouseEvent e)
+ {
+ if ( e.getClickCount() == 2 )
+ {
+ Object item = detailGroup.selectedObject();
+ if ( item != null )
+ {
+ new InspectorController( item );
+ }
+ }
+ }
+ });
+
+ // launch
+
+ JDialog d = new JDialog();
+ d.getContentPane().add( treePanel );
+ d.setTitle( "Tree Panel" );
+ d.pack();
+ WindowUtilities.cascade( d );
+ d.show();
+
+ // workaround for memory issues on jdk1.2.2
+ d.addWindowListener( new WindowAdapter()
+ {
+ // exit on close
+ public void windowClosing(WindowEvent e)
+ {
+ ((JDialog)e.getWindow()).getContentPane().removeAll();
+ }
+ });
+ }
+
+ public void actionPerformed( ActionEvent evt )
+ {
+ Object item = group.selectedObject();
+ if ( item != null )
+ {
+// new InspectorController( item );
+ new ObjectInspector( item );
+ }
+ }
+
+}