//(c) Copyright 2006, Scott Vorthmann
package org.vorthmann.ui;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import org.vorthmann.j3d.MouseTool;
/**
* Controller portion of model-view-controller architecture.
*
* MVC principles in vZome:
*
* - UI code can know other UI classes, preferably top-down only (no knowledge of parent context)
* - UI code only knows this generic Controller interface
* - UI code gets Controllers using Controller .getSubController()
* - UI code cannot know of any specific Controller subclasses or any model classes
* - Controller code cannot know any UI classes; ActionListeners let the controller trigger UI effects
* - Controller code can know other Controller subclasses, and Model classes
* - Model classes can only know other Model classes, preferably top-down only (no knowledge of parent context)
* - Model classes can trigger PropertyChangeEvents, but usually the Controllers do it
*
* @author vorth
*
*/
public interface Controller extends ActionListener
{
// TODO replace ErrorChannel with JDK logging
public interface ErrorChannel
{
// TODO: DJH: Use varargs or better yet, typesafe overloads.
void reportError( String errorCode, Object[] arguments );
void clearError();
}
String USER_ERROR_CODE = "user.command.error";
String UNKNOWN_ERROR_CODE = "unknown.exception";
String UNKNOWN_ACTION = "unknown.action";
String UNKNOWN_PROPERTY = "unknown.property";
void setErrorChannel( ErrorChannel errors );
void setNextController( Controller controller );
String[] getCommandList( String listName );
boolean[] enableContextualCommands( String[] menu, MouseEvent e );
@Override
void actionPerformed( ActionEvent e );
void doAction( String action, ActionEvent e ) throws Exception;
boolean[] getCommandListDefaultStates( String string );
void doFileAction( String command, File file );
void doScriptAction( String command, String script );
void repaintGraphics( String panelName, Graphics graphics, Dimension size );
String getProperty(String string);
void setProperty( String cmd, Object value );
boolean propertyIsTrue( String propName );
boolean userHasEntitlement( String propName );
void addPropertyListener( PropertyChangeListener listener );
void removePropertyListener( PropertyChangeListener listener );
Controller getSubController( String string );
MouseTool getMouseTool();
}