设计通用工具管理器



我想在UI组件上处理多个操作(按钮,文本字段,swfs,自定义对象等)

像缩放,倾斜,颜色,旋转等,并保存它们。之前的动作已经完成

使用单个工具和单个MXML文件,但现在该工具被分成不同的工具。

想知道我如何设计/使用工具管理器类来处理动作等?

还有一个棘手的部分是,一些对象可以为它们定义更多的操作。就像'object1'有3个操作可以在它上面执行,'object2'有5个操作定义在它上面。

我们正在使用MVC设计模式,但没有框架。

有哪些不同的设计模式可以用来做到这一点?

编辑:


更准确地说,我想在as300方式实现这一点。该应用程序类似于绘图应用程序,支持添加各种图像,文本,音频,swfs等。添加的用户可以对对象执行各种操作,例如添加颜色,缩放歪斜,旋转等和自定义效果,之后导出绘图为PNG。同样,一些适用于文本的效果不适用于图像反之亦然。有些影响可能是常见的。

任何想法?

也许你可以有一个工具栏,工具(从公共基继承),和某种类型的属性面板,这些对象可以从一个管理器类,包装在一起,使一些变量对所有类访问。可能需要在管理器类中使用选择数组或向量,并使用选择工具来操作该集合

like (in the manager)

protected var _selection:Vector.<EditableBase> = new Vector.<EditableBase>();
public function get selection() { return _selection;}

和一个关于编辑库扩展及其可用工具的集合。每次选择工具更新选择集合时(可能从选择工具的onMouseUp方法调用manager上的方法),您都可以更新工具栏以显示当前选择的适当工具

(经理)

protected var _ToolsByType:Object (or Dictionary) = {"EditableAudio": ["toolA", "toolB", etc]};
protected var _defaultSet:Array = ["toolA", "toolB"];

public function onSelectionChangedCallback():void
{
  var toolsToDisplay:Array = _defaultSet;
  if(_selection.length == 1)
  {
   //not actual syntax
   var type:String = getQualifiedClassName(_selection[0]);
   if(type in _ToolsByType) toolsToDisplay = _ToolsByType[type];
  }
  myToolBar.showSet(toolsToDisplay);
}

工具的祖先应该看起来像这样:

public class ToolBase
{
  protected var _manager:ToolManager;
  function ToolBase(manager:ToolManager)//and probably a bunch of other params as well
  {
     _manager = manager;
  }
  function onSelect()
  {
    //you can manipulate the properties panel here
  }
  function onDeSelect()...
  function onMouseDown(mouseData:event/whateverWrapperYouHaveCreated)...
  function onMouseMove...
  function onMouseUp...
}

等等:)有点直截了当。查看photoshop插件教程,或者谷歌"扩展{任何adobe的东西,比如flash之类的}"这就是javascript,但是这个概念也可以应用到这里

也许你可以通过在MVC实现中创建一些额外的类来使用策略设计模式

http://en.wikipedia.org/wiki/Strategy_pattern

算法,检查这个工具的图像:http://www.senocular.com/demo/TransformToolAS3/TransformTool.html

再见!:)

最新更新