Проектирование универсального менеджера инструментов - PullRequest
0 голосов
/ 14 августа 2011

Я хочу обработать несколько операций над компонентом пользовательского интерфейса (кнопка, текстовое поле, swfs, пользовательские объекты и т. Д.)

, такие как масштабирование, перекос, цвет, повороты и т. Д. И т. Д. И сохраняйте их тоже. Ранее были выполнены действия

с использованием одного инструмента и одного файла mxml, но теперь инструмент разделен на разные инструменты.

Интересно, как я могу спроектировать / использовать что-то вроде класса Toolmanager для обработки действий и т. Д.?

Кроме того, сложность заключается в том, что для некоторых объектов может быть определено больше операций для них. Подобно тому, как «object1» имеет 3 операции, которые могут быть выполнены над ним, а «object2» имеет 5 определенных операций над ним.

Мы используем шаблон проектирования MVC, но никаких фреймворков как таковых.

Каковы различные шаблоны проектирования, которые можно использовать для этого?

Edit:
Чтобы быть более точным, я хочу реализовать это в AS3 OO. Приложение похоже на приложение для рисования, которое поддерживает добавление различных изображений, текста, аудио, SWF-файлов и т. Д. Один добавленный пользователь может выполнять различные операции с объектами. добавление цвета, масштабирование, наклон, поворот и т. д. и т. д. и пользовательских эффектов, а затем экспортируйте чертеж в формате PNG. Аналогично, некоторые эффекты, применимые к тексту, не применимы к изображениям и наоборот. и некоторые эффекты могут быть общими.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Возможно, у вас могут быть панель инструментов, инструменты (наследующие от общей базы) и какая-то панель свойств, эти объекты доступны из класса менеджера, который объединяет их вместе и делает некоторые переменные доступными для всех классов. Возможно, вам нужен массив выбора или вектор в классе менеджера и инструмент выбора для управления этой коллекцией

лайк (в диспетчере)

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

и сборник о расширениях editbase и доступных для них инструментах. каждый раз, когда инструмент выбора обновляет коллекцию выбора (возможно, вызывая метод на менеджере из метода onMouseUp инструмента выбора), вы можете обновлять панель инструментов для отображения соответствующих инструментов для текущего выбора

(в менеджере)

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...
}

и тд и тп :) вроде прямо вперед. просмотрите учебные пособия по плагинам для фотошопа или изучите гугл по теме "расширяя {любой материал Adobe, например, flash или что-то} вот и яваскрипт, но концепция может быть применена и здесь

0 голосов
/ 20 августа 2011

возможно, вы могли бы использовать шаблон проектирования стратегии, создав несколько дополнительных классов в вашей реализации MVC

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

algo, проверьте этот инструмент для изображений: http://www.senocular.com/demo/TransformToolAS3/TransformTool.html

до свидания! :)

...