[skycastle-commits] SF.net SVN: skycastle:[596] trunk/skycastle/modules

  • From: zzorn@xxxxxxxxxxxxxxxxxxxxx
  • To: skycastle-commits@xxxxxxxxxxxxx
  • Date: Thu, 18 Sep 2008 23:13:11 +0000

Revision: 596
          http://skycastle.svn.sourceforge.net/skycastle/?rev=596&view=rev
Author:   zzorn
Date:     2008-09-18 23:13:09 +0000 (Thu, 18 Sep 2008)

Log Message:
-----------
Working on multi-sketch support

Modified Paths:
--------------
    
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchController.java
    
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchView.java
    
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/model/SketchImpl.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryNodeRenderer.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryViewModel.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultShelfRenderer.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultTomeRenderer.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibraryViewModel.java
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/ListLibraryView.java

Added Paths:
-----------
    
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibrarySelectionListener.java

Modified: 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchController.java
===================================================================
--- 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchController.java
      2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchController.java
      2008-09-18 23:13:09 UTC (rev 596)
@@ -21,13 +21,9 @@
 import org.skycastle.util.command.AbstractCommand;
 import org.skycastle.util.command.Command;
 import org.skycastle.util.command.CommandAction;
-import org.skycastle.util.library.Library;
-import org.skycastle.util.library.LibraryImpl;
-import org.skycastle.util.library.LibraryLocationImpl;
-import org.skycastle.util.library.Tome;
+import org.skycastle.util.library.*;
 import org.skycastle.util.library.tomesources.MemoryTomeSource;
-import org.skycastle.util.library.view.DefaultTomeRenderer;
-import org.skycastle.util.library.view.ListLibraryView;
+import org.skycastle.util.library.view.*;
 import org.skycastle.util.sample.DataSample;
 
 import javax.swing.*;
@@ -168,7 +164,7 @@
 
     private SidebarImpl createSketchViews()
     {
-        final SidebarImpl sidebar = new SidebarImpl( SidebarEdge.LEFT, 300 );
+        final SidebarImpl sidebar = new SidebarImpl( SidebarEdge.LEFT, 88 );
 
         sidebar.addSidebarComponent( new AbstractSidebarComponent()
         {
@@ -178,7 +174,7 @@
 
             protected JComponent createUi()
             {
-                final DefaultTomeRenderer<Sketch> sketchTomeRenderer = new 
DefaultTomeRenderer<Sketch>()
+                final DefaultTomeRenderer<Sketch> sketchTomeRenderer = new 
DefaultTomeRenderer<Sketch>( false )
                 {
                     @Override
                     protected Icon getPreviewIcon( final Tome<Sketch> node )
@@ -188,9 +184,22 @@
                     }
                 };
 
-                final ListLibraryView listLibraryView = new 
ListLibraryView<Sketch>( mySketchLibrary,
-                                                                               
      new LibraryLocationImpl(),
-                                                                               
      sketchTomeRenderer );
+                LibraryViewModel<Sketch> model = new 
DefaultLibraryViewModel<Sketch>( mySketchLibrary, new LibraryLocationImpl() );
+                final ListLibraryView listLibraryView = new 
ListLibraryView<Sketch>( model,
+                                                                               
      sketchTomeRenderer,
+                                                                               
      new DefaultShelfRenderer() );
+                model.addLibrarySelectionListener( new 
LibrarySelectionListener<Sketch>()
+                {
+                    public void onTomeActivated( final Tome<Sketch> 
activatedTome )
+                    {
+                        setSketch( activatedTome.getContent() );
+                    }
+
+                    public void onLocationNaviagtedTo( final LibraryLocation 
location )
+                    {
+                        // Nothing to do
+                    }
+                } );
                 return listLibraryView.getUi();
             }
         } );
@@ -277,7 +286,7 @@
                                      final LoadAction loadAction )
     {
         // TODO: One undo stack per sketch
-        view.addMenuAction( "File", new CommandAction( getCommandStack(), "New 
Sketch", "Create a new Sketch" )
+        final CommandAction newSketchAction = new CommandAction( 
getCommandStack(), "New Sketch", "Create a new Sketch" )
         {
             protected Command createCommand()
             {
@@ -291,12 +300,15 @@
                     }
                 };
             }
-        } );
+        };
+
+        view.addMenuAction( "File", newSketchAction );
         view.addMenuAction( "File", saveAsAction );
         view.addMenuAction( "File", loadAction );
         view.addMenuAction( "File", getExitAction() );
         view.addMenuAction( "Edit", getCommandStack().getUndoAction() );
         view.addMenuAction( "Edit", getCommandStack().getRedoAction() );
+        view.addToolbarAction( newSketchAction );
         view.addToolbarAction( saveAsAction );
         view.addToolbarAction( getCommandStack().getUndoAction() );
         view.addToolbarAction( getCommandStack().getRedoAction() );

Modified: 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchView.java
===================================================================
--- 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchView.java
    2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/SketchView.java
    2008-09-18 23:13:09 UTC (rev 596)
@@ -16,7 +16,8 @@
  * @author Hans Häggström
  */
 // TODO: Have both a navigation stack and an undo stack, that are independent  
-public final class SketchView
+public final class
+        SketchView
         extends Canvas3DApplicationView
 {
 

Modified: 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/model/SketchImpl.java
===================================================================
--- 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/model/SketchImpl.java
      2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/scratchpad/src/main/java/org/skycastle/scratchpad/sketch/model/SketchImpl.java
      2008-09-18 23:13:09 UTC (rev 596)
@@ -3,6 +3,7 @@
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.skycastle.scratchpad.sketch.model.group.Group;
 import org.skycastle.scratchpad.sketch.model.group.GroupImpl;
+import org.skycastle.util.ImageUtils;
 
 import java.awt.image.BufferedImage;
 
@@ -22,7 +23,7 @@
     @XStreamAlias( "root" )
     private final Group myRootGroup = new GroupImpl();
 
-    private transient BufferedImage myPreview = null;
+    private transient BufferedImage myPreview = 
ImageUtils.createPlaceholderPicture( 100, 100 );
 
     //======================================================================
     // Public Methods

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryNodeRenderer.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryNodeRenderer.java
 2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryNodeRenderer.java
 2008-09-18 23:13:09 UTC (rev 596)
@@ -15,6 +15,7 @@
 {
     private final Color myBackgroundColor;
     private final Icon myIcon;
+    private final boolean myShowLabel;
 
     public DefaultLibraryNodeRenderer()
     {
@@ -28,10 +29,16 @@
 
     public DefaultLibraryNodeRenderer( final Color backgroundColor, final Icon 
icon )
     {
+        this( backgroundColor, icon, true );
+    }
+
+    public DefaultLibraryNodeRenderer( final Color backgroundColor, final Icon 
icon, final boolean showLabel )
+    {
         ParameterChecker.checkNotNull( backgroundColor, "backgroundColor" );
 
         myBackgroundColor = backgroundColor;
         myIcon = icon;
+        myShowLabel = showLabel;
     }
 
     @Override
@@ -50,13 +57,30 @@
             label.setBackground( getNodeBackgroundColor( node ) );
         }
 
-        label.setText( getNodeName( node ) );
-        label.setToolTipText( getNodeDescription( node ) );
+        label.setText( getLabelText( node ) );
+        label.setToolTipText( getTooltip( node ) );
         label.setIcon( getPreviewIcon( node ) );
 
         return label;
     }
 
+    private String getLabelText( final T node )
+    {
+        String labelText = null;
+        if ( myShowLabel )
+        {
+            labelText = getNodeName( node );
+        }
+        return labelText;
+    }
+
+    private String getTooltip( final T node )
+    {
+        final String description = getNodeDescription( node );
+        final String tooltip = description == null || description.length() == 
0 ? getNodeName( node ) : description;
+        return tooltip;
+    }
+
     protected Color getNodeBackgroundColor( final T node )
     {
         return myBackgroundColor;

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryViewModel.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryViewModel.java
    2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultLibraryViewModel.java
    2008-09-18 23:13:09 UTC (rev 596)
@@ -21,6 +21,8 @@
 
     private final List<LibraryNode<T>> myCurrentlyVisibleNodes = new 
ArrayList<LibraryNode<T>>();
 
+    private final List<LibrarySelectionListener<T>> myListeners = new 
ArrayList<LibrarySelectionListener<T>>();
+
     public DefaultListModel getListModel()
     {
         return myListModel;
@@ -41,6 +43,26 @@
         return myViewedLocation;
     }
 
+    public void addLibrarySelectionListener( LibrarySelectionListener<T> 
addedLibrarySelectionListener )
+
+    {
+        ParameterChecker.checkNotNull( addedLibrarySelectionListener, 
"addedLibrarySelectionListener" );
+        ParameterChecker.checkNotAlreadyContained( 
addedLibrarySelectionListener, myListeners, "myListeners" );
+
+        myListeners.add( addedLibrarySelectionListener );
+    }
+
+    public void removeLibrarySelectionListener(
+            LibrarySelectionListener<T> removedLibrarySelectionListener )
+
+    {
+        ParameterChecker.checkNotNull( removedLibrarySelectionListener, 
"removedLibrarySelectionListener" );
+        ParameterChecker.checkContained( removedLibrarySelectionListener, 
myListeners, "myListeners" );
+
+        myListeners.remove( removedLibrarySelectionListener );
+    }
+
+
     public void setViewedLocation( final LibraryLocation viewedLocation )
     {
         ParameterChecker.checkNotNull( viewedLocation, "viewedLocation" );
@@ -51,8 +73,14 @@
         myListModel.clear();
 
         updateListModel();
+
+        for ( LibrarySelectionListener<T> listener : myListeners )
+        {
+            listener.onLocationNaviagtedTo( myViewedLocation );
+        }
     }
 
+
     public void onItemActivated( final LibraryNode<T> selectedValue )
     {
         if ( selectedValue instanceof Shelf )
@@ -65,8 +93,10 @@
         {
             Tome<T> tome = (Tome<T>) selectedValue;
 
-            // TODO: Notify listener about tome activation
-            throw new UnsupportedOperationException( "This method has not yet 
been implemented." ); // IMPLEMENT
+            for ( LibrarySelectionListener<T> listener : myListeners )
+            {
+                listener.onTomeActivated( tome );
+            }
         }
     }
 

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultShelfRenderer.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultShelfRenderer.java
       2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultShelfRenderer.java
       2008-09-18 23:13:09 UTC (rev 596)
@@ -2,6 +2,7 @@
 
 import org.skycastle.util.library.Shelf;
 
+import javax.swing.*;
 import java.awt.Color;
 
 /**
@@ -17,4 +18,13 @@
         super( BACKGROUND_COLOR );
     }
 
+    public DefaultShelfRenderer( final boolean showLabel )
+    {
+        super( BACKGROUND_COLOR, null, showLabel );
+    }
+
+    public DefaultShelfRenderer( final Color backgroundColor, final Icon icon, 
final boolean showLabel )
+    {
+        super( backgroundColor, icon, showLabel );
+    }
 }

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultTomeRenderer.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultTomeRenderer.java
        2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/DefaultTomeRenderer.java
        2008-09-18 23:13:09 UTC (rev 596)
@@ -2,6 +2,7 @@
 
 import org.skycastle.util.library.Tome;
 
+import javax.swing.*;
 import java.awt.Color;
 
 /**
@@ -16,4 +17,14 @@
     {
         super( BACKGROUND_COLOR );
     }
+
+    public DefaultTomeRenderer( final boolean showLabel )
+    {
+        super( BACKGROUND_COLOR, null, showLabel );
+    }
+
+    public DefaultTomeRenderer( final Color backgroundColor, final Icon icon, 
final boolean showLabel )
+    {
+        super( backgroundColor, icon, showLabel );
+    }
 }

Added: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibrarySelectionListener.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibrarySelectionListener.java
                           (rev 0)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibrarySelectionListener.java
   2008-09-18 23:13:09 UTC (rev 596)
@@ -0,0 +1,37 @@
+package org.skycastle.util.library.view;
+
+import org.skycastle.util.library.LibraryLocation;
+import org.skycastle.util.library.LibraryNode;
+import org.skycastle.util.library.Tome;
+
+/**
+ * A listener that is notified when a {@link Tome} is selected from the {@link 
Library}.
+ *
+ * @author Hans Haggstrom
+ */
+public interface LibrarySelectionListener<T>
+{
+/*
+    */
+/**
+ * Called when the currently focused {@link LibraryNode} changes during 
navigation of the library.
+ * @param focusedLibraryNode
+ */
+/*
+    void onLibraryNodeFocused( LibraryNode<T> focusedLibraryNode );
+*/
+
+    /**
+     * Called when a Tome is activated (double clicked, etc).
+     *
+     * @param activatedTome
+     */
+    void onTomeActivated( Tome<T> activatedTome );
+
+    /**
+     * Called when the specified shelf is navigated to.
+     *
+     * @param location the navigated to shelf, which is now shown.
+     */
+    void onLocationNaviagtedTo( LibraryLocation location );
+}

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibraryViewModel.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibraryViewModel.java
   2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/LibraryViewModel.java
   2008-09-18 23:13:09 UTC (rev 596)
@@ -19,4 +19,21 @@
     void setViewedLocation( LibraryLocation viewedLocation );
 
     void onItemActivated( final LibraryNode<T> selectedValue );
+
+
+    /**
+     * Adds the specified LibrarySelectionListener.
+     *
+     * @param addedLibrarySelectionListener should not be null or already 
added.
+     */
+    void addLibrarySelectionListener( LibrarySelectionListener<T> 
addedLibrarySelectionListener );
+
+    /**
+     * Removes the specified LibrarySelectionListener.
+     *
+     * @param removedLibrarySelectionListener
+     *         should not be null, and should be present.
+     */
+    void removeLibrarySelectionListener(
+            LibrarySelectionListener<T> removedLibrarySelectionListener );
 }

Modified: 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/ListLibraryView.java
===================================================================
--- 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/ListLibraryView.java
    2008-09-17 17:02:07 UTC (rev 595)
+++ 
trunk/skycastle/modules/utils/src/main/java/org/skycastle/util/library/view/ListLibraryView.java
    2008-09-18 23:13:09 UTC (rev 596)
@@ -54,18 +54,32 @@
      * @param tomeRenderer   used to render the {@link Tome}s in the list.
      * @param shelfRenderer  used to render the {@link Shelf}s in the list.
      */
-    public ListLibraryView( final Library library,
+    public ListLibraryView( final Library<T> library,
                             final LibraryLocation viewedLocation,
                             final ListCellRenderer tomeRenderer,
                             final ListCellRenderer shelfRenderer )
     {
+        this( new DefaultLibraryViewModel<T>( library, viewedLocation ), 
tomeRenderer, shelfRenderer );
+
         ParameterChecker.checkNotNull( library, "library" );
         ParameterChecker.checkNotNull( viewedLocation, "viewedLocation" );
+    }
+
+    /**
+     * @param libraryViewModel the  {@link LibraryViewModel} to visualize.
+     * @param tomeRenderer     used to render the {@link Tome}s in the list.
+     * @param shelfRenderer    used to render the {@link Shelf}s in the list.
+     */
+    public ListLibraryView( final LibraryViewModel<T> libraryViewModel,
+                            final ListCellRenderer tomeRenderer,
+                            final ListCellRenderer shelfRenderer )
+    {
+        ParameterChecker.checkNotNull( libraryViewModel, "libraryViewModel" );
         ParameterChecker.checkNotNull( tomeRenderer, "tomeRenderer" );
         ParameterChecker.checkNotNull( shelfRenderer, "shelfRenderer" );
 
         myCellRenderer = new LibraryNodeRenderer( tomeRenderer, shelfRenderer 
);
-        myLibraryViewModel = new DefaultLibraryViewModel( library, 
viewedLocation );
+        myLibraryViewModel = libraryViewModel;
     }
 
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

Other related posts:

  • » [skycastle-commits] SF.net SVN: skycastle:[596] trunk/skycastle/modules