Created iso scene view model listener to handle modifications to the

scene view model more elegantly.  Updated editor and scene view panel
to make use of said listener.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@499 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Walter Korman
2001-10-18 21:01:44 +00:00
parent 35a0671430
commit 69dd36f101
3 changed files with 87 additions and 43 deletions
@@ -1,10 +1,11 @@
// //
// $Id: IsoSceneViewModel.java,v 1.14 2001/10/17 22:21:22 shaper Exp $ // $Id: IsoSceneViewModel.java,v 1.15 2001/10/18 21:01:44 shaper Exp $
package com.threerings.miso.scene; package com.threerings.miso.scene;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
import java.util.ArrayList;
import com.samskivert.util.Config; import com.samskivert.util.Config;
@@ -109,6 +110,31 @@ public class IsoSceneViewModel
showPaths = config.getValue(SHOW_PATHS_KEY, DEF_SHOW_PATHS); showPaths = config.getValue(SHOW_PATHS_KEY, DEF_SHOW_PATHS);
} }
/**
* Add an iso scene view model listener.
*
* @param l the listener.
*/
public void addListener (IsoSceneViewModelListener l)
{
if (!_listeners.contains(l)) {
_listeners.add(l);
}
}
/**
* Notify all model listeners that the iso scene view model has
* changed.
*/
protected void notifyListeners (int event)
{
int size = _listeners.size();
for (int ii = 0; ii < size; ii++) {
((IsoSceneViewModelListener)_listeners.get(ii)).
viewChanged(event);
}
}
/** /**
* Returns whether the given tile coordinate is a valid coordinate * Returns whether the given tile coordinate is a valid coordinate
* within the scene. * within the scene.
@@ -133,49 +159,21 @@ public class IsoSceneViewModel
} }
/** /**
* Return whether locations in the scene are currently drawn. * Toggle whether locations in the scene should be drawn.
*/ */
public boolean getShowLocations () public void toggleShowLocations ()
{ {
return showLocs; showLocs = !showLocs;
notifyListeners(IsoSceneViewModelListener.SHOW_LOCATIONS_CHANGED);
} }
/** /**
* Set whether locations in the scene should be drawn. * Toggle whether coordinates should be drawn for each tile.
*
* @param show whether to show locations.
*/ */
public void setShowLocations (boolean show) public void toggleShowCoordinates ()
{ {
showLocs = show; showCoords = !showCoords;
} notifyListeners(IsoSceneViewModelListener.SHOW_COORDINATES_CHANGED);
/**
* Return whether coordinates are currently drawn for each tile.
*/
public boolean getShowCoordinates ()
{
return showCoords;
}
/**
* Set whether coordinates should be drawn for each tile.
*
* @param show whether to show coordinates.
*/
public void setShowCoordinates (boolean show)
{
showCoords = show;
}
/**
* Set whether sprite paths should be drawn.
*
* @param show whether to show paths.
*/
public void setShowSpritePaths (boolean show)
{
showPaths = show;
} }
/** /**
@@ -297,4 +295,7 @@ public class IsoSceneViewModel
protected static final boolean DEF_SHOW_COORDS = false; protected static final boolean DEF_SHOW_COORDS = false;
protected static final boolean DEF_SHOW_LOCS = false; protected static final boolean DEF_SHOW_LOCS = false;
protected static final boolean DEF_SHOW_PATHS = false; protected static final boolean DEF_SHOW_PATHS = false;
/** The model listeners. */
protected ArrayList _listeners = new ArrayList();
} }
@@ -0,0 +1,23 @@
//
// $Id: IsoSceneViewModelListener.java,v 1.1 2001/10/18 21:01:44 shaper Exp $
package com.threerings.miso.scene;
/**
* The iso scene view model listener interface should be implemented
* by classes that would like to be notified when the iso scene view
* model is changed.
*
* @see IsoSceneViewModel
*/
public interface IsoSceneViewModelListener
{
/**
* Called by the {@link IsoSceneView} when the model is changed.
*/
public void viewChanged (int event);
/** Notification event constants. */
public static final int SHOW_LOCATIONS_CHANGED = 0;
public static final int SHOW_COORDINATES_CHANGED = 1;
}
@@ -1,5 +1,5 @@
// //
// $Id: SceneViewPanel.java,v 1.16 2001/10/17 22:21:22 shaper Exp $ // $Id: SceneViewPanel.java,v 1.17 2001/10/18 21:01:44 shaper Exp $
package com.threerings.miso.scene; package com.threerings.miso.scene;
@@ -18,6 +18,7 @@ import com.threerings.miso.util.MisoUtil;
* UI events. * UI events.
*/ */
public class SceneViewPanel extends AnimatedPanel public class SceneViewPanel extends AnimatedPanel
implements IsoSceneViewModelListener
{ {
/** /**
* Constructs the scene view panel. * Constructs the scene view panel.
@@ -25,10 +26,22 @@ public class SceneViewPanel extends AnimatedPanel
public SceneViewPanel (Config config, SpriteManager spritemgr) public SceneViewPanel (Config config, SpriteManager spritemgr)
{ {
// create the data model for the scene view // create the data model for the scene view
_smodel = new IsoSceneViewModel(config); _scenemodel = new IsoSceneViewModel(config);
// listen to the iso scene view model to receive notice when
// location or coordinate display is toggled
_scenemodel.addListener(this);
// create the scene view // create the scene view
_view = newSceneView(spritemgr, _smodel); _view = newSceneView(spritemgr, _scenemodel);
}
/**
* Gets the iso scene view model associated with this panel.
*/
public IsoSceneViewModel getModel ()
{
return _scenemodel;
} }
/** /**
@@ -75,13 +88,20 @@ public class SceneViewPanel extends AnimatedPanel
*/ */
public Dimension getPreferredSize () public Dimension getPreferredSize ()
{ {
Dimension psize = (_smodel == null) ? Dimension psize = (_scenemodel == null) ?
super.getPreferredSize() : _smodel.bounds; super.getPreferredSize() : _scenemodel.bounds;
return psize; return psize;
} }
// documentation inherited
public void viewChanged (int event)
{
// update the scene view display
repaint();
}
/** The scene view data model. */ /** The scene view data model. */
protected IsoSceneViewModel _smodel; protected IsoSceneViewModel _scenemodel;
/** The scene view we're managing. */ /** The scene view we're managing. */
protected SceneView _view; protected SceneView _view;