Поделиться через


Настройка элементов и панели элементов

Необходимо определить элементы панели инструментов для элементов, которые нужно разрешить пользователям добавлять к их моделей.2 Типа средств: средства элемента и средства подключения.В созданном конструкторе, пользователь может выбрать средство элемента для перетаскивания фигуры на схеме и может выбрать инструмент рисования подключения к ссылкам между фигурами.Как правило, средства элемента позволяют пользователям добавлять экземпляры классов к их доменных моделей и средства подключения позволяют им экземпляры доменных добавление ссылки.

Содержание раздела

  • Изменение вкладки панели элементов

  • Средства элемента

  • Создание группы в составе элементы из средства

  • Средства соединения

  • Изменение порядка элементов панели инструментов

Определяется как область элементов

В обозревателе DSL, разверните узел редактор и узлы под ним.Обычно вы увидите иерархию, которая выглядит следующим образом:

Editor
     Toobox Tabs
        MyDsl          //a tab
           Tools
               ExampleElement      // an element tool
               ExampleRelationship // a connection tool

В этой части обозревателя DSL, можно:

  • Создание новых вкладок.Вкладки указывают заголовок раздела в области элементов.

  • Создайте новые средства.

  • Скопируйте и вставьте средства.

  • Средства перемещения вверх или вниз в списке.

  • Удаление вкладки и средства.

Важное примечаниеВажно

Добавить или вставить элементы в обозревателе DSL, щелкните правой кнопкой мыши прародителем нового узла.Например, добавление средства, щелкните правой кнопкой мыши вкладку, а не как Сервис узел.Добавление вкладки, щелкните правой кнопкой мыши Редактор узел.

Значок панели элементов свойство каждого средства ссылается на файл растрового изображения 16x16.Эти файлы обычно располагаются в Dsl\Resources папка.

Класс свойство средства элемента относится к конкретному доменному классу.По умолчанию средство создает экземпляры этого класса.Однако можно написать код, чтобы получить средство создания групп в составе элементы или элементы различных типов.

Построитель подключения свойство средства подключения относится к конструктору connection, который определяет, какие типы элементов средство может подключиться, и оно создает связи между ними.Построители соединения определяются в виде узлов в обозревателе DSL.Построители подключения создаются автоматически при определении доменных ссылки, но можно написать код настраивать их.

Добавить средство в область элементов

  1. Обычно создается средство элемента после создания класса формы и доменному, подключенные к классу.

    Обычно создается средство соединителя после создания класса и его соединителя, подключенные к отношению.

  2. Разверните в обозревателе DSL Редактор узел и Вкладки панели элементов узел.

    Щелкните правой кнопкой мыши узел вкладки области элементов и выберите команду Добавьте новое средство элемента OR Добавьте новое средство соединения.

  3. Установка Значок панели элементов свойство, которое нужно ссылаться в растровое изображение 16x16.

    Если требуется определить новый значок, создайте файл растрового изображения в обозревателе решений в Dsl\Resources папка.Файл должен содержать следующие значения свойств: Действие при построении = Содержимое; Копировать в выходной каталог = Не копировать.

  4. Для синтаксического элемента: Установка Класс свойство средства для обращения к конкретному доменному класс, который сопоставляется к фигуре.

    Для средства соединителя. Установка Построитель подключения свойство средства на один из элементов, предложены в раскрывающемся списке.Построители подключения создаются автоматически при сопоставлении соединитель к доменной ссылки.Если недавно создан соединитель, обычно выбрать соответствующий построитель подключения.

  5. Чтобы проверить DSL, нажмите клавишу F5 или сочетание клавиш CTRL+F5, и в экспериментальном экземпляре Visual Studioоткрыть файл образца модели.Новый инструмент должен появляться в области элементов.Перетащите его на схему для проверки того, что она создает новый элемент.

    Если инструмент не отображается, остановите экспериментальном Visual Studio.в окнах Запуск меню выберите команду запуск Сбросить экземпляр Microsoft Visual Studio 2010 экспериментальном.На Visual StudioПостроение меню выберите команду Перестроить решение.Затем проверьте DSL попытку.

Настройка средства элемента

По умолчанию средство создает единственный экземпляр заданного класса, но можно изменять это в 2 случаях:

  • Указание директивы слияния элемента в других классах, позволяющий им принимать новые экземпляры этого класса и включение их для создания дополнительных связей, когда создается новый элемент.Например, можно разрешить пользователю возможность удаления комментария на другой элемент, и, таким образом, создать связь ссылки между 2.

    Эти параметры также затрагивают, что происходит, когда пользователь перетаскивает и вставляет или удаляет элемент.

    Дополнительные сведения см. в разделе Настройка создания и перемещения элементов.

  • Написание кода для настройки средство для правильного создания групп в составе элементы.Средство инициализируется методами в ToolboxHelper.cs, можно переопределить.Дополнительные сведения см. в разделе Создание группы в составе элементы из средства.

Bb126279.collapse_all(ru-ru,VS.110).gifСоздание группы в составе элементы из средства

Каждое средство элемента содержит заполнитель элементов, он должен создать.По умолчанию каждое средство элемента создает отдельный элемент, но также можно создать группу в составе объекты, связанные с одним средством.Для этого необходимо инициализировать средство с ElementGroupPrototype содержит связанные элементы.

Следующий пример взят из DSL, в котором транзистор типа.Каждый транзистор имеет 3 Стержнем.Средство элемента для транзисторов хранит заполнитель, содержащий 4 3 элементов модели и ссылки на связи.Когда пользователь перетаскивает средство на схему заполнитель создается и связывается с корневого элемента модели.

Данный код переопределяет метод, определенный внутри Dsl\GeneratedCode\ToolboxHelper.cs.

Дополнительные сведения о настройке модели с помощью программного кода, см. в разделе Перемещение по модели и обновление модели в коде программы.

using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;

  public partial class CircuitsToolboxHelper
  {
    /// <summary>
    /// Toolbox initialization, called for each element tool on the toolbox.
    /// This version deals with each Component subtype separately.
    /// </summary>
    /// <param name="store"></param>
    /// <param name="domainClassId">Identifies the domain class this tool should instantiate.</param>
    /// <returns>prototype of the object or group of objects to be created by tool</returns>
    protected override ElementGroupPrototype CreateElementToolPrototype(Store store, Guid domainClassId)
    {
        if (domainClassId == Transistor.DomainClassId)
        {
            Transistor transistor = new Transistor(store);

            transistor.Base = new ComponentTerminal(store);
            transistor.Collector = new ComponentTerminal(store);
            transistor.Emitter = new ComponentTerminal(store);

            transistor.Base.Name = "base";
            transistor.Collector.Name = "collector";
            transistor.Emitter.Name = "emitter";

            // Create an ElementGroup for the Toolbox.
            ElementGroup elementGroup = new ElementGroup(store.DefaultPartition);
            elementGroup.AddGraph(transistor, true);
            // AddGraph includes the embedded parts

            return elementGroup.CreatePrototype();
        }
        else
        {
            return base.CreateElementToolPrototype(store, domainClassId);
}  }    }

Настройка средства соединения

Обычно создается средство элемента при создании нового класса соединителя.Кроме того, можно перегружать одно средство, позволяя типы 2 концов, чтобы указать тип связи.Например, можно определить одно средство подключения, которое может создать и связей Продажа-Продажи и связей Продажа-Городка.

Средства подключения вызывают построители соединения.Используйте построители соединения, чтобы определить, как пользователи связывают элементы в конструкторе.Построители соединения определяют элементы, которые можно связывать и тип связи, которая создается между ними.

При создании связи ссылки между доменными классами, построитель подключения создается автоматически.Можно использовать этот построитель подключения при сопоставлении средство соединения.Дополнительные сведения о создании, см. в разделе средства подключения Настройка элементов и панели элементов.

Можно изменять по умолчанию построитель подключения, чтобы оно могло работать с разным диапазоном типов источника и целевого объекта и создать различные типы связей.

Также можно написать пользовательский код для построителей соединения, чтобы определять классы источника и целевого объекта для соединения, определить тип соединения, которое необходимо выполнить, и выполнять другие действия, связанные с созданием соединения.

Bb126279.collapse_all(ru-ru,VS.110).gifСтруктура построителей соединения

Построители соединений содержат один или несколько соединение для подключения правила, определяющие доменную ссылку и элементы источника и целевого объекта.Например, в шаблоне решения потока задач можно просмотреть в CommentReferencesSubjectsBuilder Обозреватель DSL.Этот построитель подключения содержит одну ссылку соединяется с именем директива CommentReferencesSubjects, который сопоставляется с доменной связь CommentReferencesSubjects.Это соединение подключается директива содержит роль источника, указывающей на директивы Comment доменный класс и роль целевых объектов, указывающей на директивы FlowElement доменный класс.

Bb126279.collapse_all(ru-ru,VS.110).gifИспользование построители соединения, чтобы ограничить роль источника и целевого объекта

Можно использовать построители соединения, чтобы ограничить вхождение некоторых классов в роли источника или роль целевых объектов данной ссылки доменной.Например, можно иметь базовый доменный класс, имеющий доменную ссылку на другой доменному класс, но может потребоваться не все производные классы базового класса иметь одни и те же роли в этом отношении.В решении потока задачи, 4 конкретных доменного класса (StartPoint конечная точка, MergeBranch и синхронизация), который наследуется непосредственно от абстрактного FlowElement доменного класса и 2 конкретных доменного класса (задача и ObjectInState), наследующие косвенно от него.Также связи ссылки потока, в котором используются классы доменных FlowElement как в своей роли источника, так и в роли целевого объекта.Однако экземпляр доменного класса конечной точки не должен быть источником экземпляра связи потока, ни экземпляр класса StartPoint должен быть целевым объектом экземпляра связи потока.Построитель подключения FlowBuilder имеет связь подключиться с именем директивой поток, который определяет, какие доменных классы могут воспроизведения роль источника (задачу, MergeBranch, StartPoint и синхронизацию) и может воспроизводить роль целевых объектов (MergeBranch, конечную точку и синхронизацию).

Bb126279.collapse_all(ru-ru,VS.110).gifПостроители ссылкой соединения с множественной другие рекомендации

Можно добавить несколько соединение подключается к конструктору директива соединения.Это может помочь скрывать некоторых сложностей модели домена из пользователей и сохранить Панель элементов получение слишком созданы из суматоху.Можно добавить связь подключении правил для разных доменных ссылок к одному построитель подключения.Однако следует объединять доменных связи, когда они выполняют примерно ту же функцию.

В решении потока задачи, соединения потока используется для рисования экземпляров в виде потока, так и доменных ссылок ObjectFlow.Построитель подключения FlowBuilder содержит, помимо ссылки на подключения, описанную выше директивы потока, соединение подключается именованные директивы ObjectFlow 2.Эти правила определяют, что экземпляр связи ObjectFlow может быть отрисовывается между экземплярами доменного класса ObjectInState или из экземпляра ObjectInState к экземпляру задачи, но не от 2 экземплярами задачи или из экземпляра задачи к экземпляру ObjectInState.Однако экземпляр связи потока может быть отрисовывается между 2 экземплярами задачи.При компилировании и запустите решение потока задачи, можно увидеть, что для выпишущ поток из экземпляра ObjectInState к экземпляру задачи создает экземпляр ObjectFlow, но выпишущ поток между 2 экземплярами задачи создает экземпляр потока.

Bb126279.collapse_all(ru-ru,VS.110).gifПользовательский код для построителей соединения

4 " Флажок " в пользовательском интерфейсе, задающие различные типы настройки построителей соединения:

  • Пользовательский принимает флажок для роли директивы источника или целевого объекта

  • Пользовательские подключения флажок для роли директивы источника или целевого объекта

  • Пользовательский интерфейс использует подключение флажок в директиве подключения

  • Изготовлена custom свойство построитель подключения

Необходимо задать определенный идентификатор программы, чтобы сделать эти настройки.Чтобы выяснить, какой код следует предоставить установите одно из таких окон, нажмите кнопку преобразовать все шаблоны, а затем создает решение.Отчет об ошибке.Дважды щелкните отчет об ошибках, чтобы увидеть, какой код комментарий, который объясняет необходимо добавить.

ПримечаниеПримечание

Чтобы добавить пользовательский код, создайте определение разделяемого класса в файле кода отдельно от файлов в папках GeneratedCode.Чтобы избежать результаты работы потеряны не требуется редактирование созданные файлы кода.Дополнительные сведения см. в разделе Переопределение и расширение созданных классов.

Bb126279.collapse_all(ru-ru,VS.110).gifСоздать пользовательский код соединения

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

Можно также настраивать, что происходит, когда устанавливается соединение.Например, можно настраивать только случай, когда перетаскивание происходит в или из указанного класса, все варианты, что одна связь подключается директива управляет или весь построитель подключения FlowBuilder.Для каждого из этих параметров можно задавать пользовательские флаги на соответствующий уровень.При преобразовании все шаблоны и попытка для построения решения, сообщения об ошибках рассматривается в комментарии, которые находятся в сгенерированном коде.Эти примечания указывают, что необходимо передать.

В образце схемы компонентов, настраивают, чтобы ограничить построитель подключения для доменной ссылки на подключения, которые можно устанавливать связи между портам.На следующем рисунке показано, что можно подключаться только из OutPort элементы InPort элементы, но можно вкладывать компоненты в друга.

Соединение, поступающих в OutPort из вложенных компонентов

Мастер подключения

Таким образом, можно указать, что соединение может исходить из вложенных компонента OutPort.Для определения того, задается соединение Принять вариант использует пользовательский интерфейс на InPort тип как роль источника, и OutPort тип как роль целевого объекта в Сведения DSL окна, как показано на следующих иллюстрациях:

Директива соединения ссылки в обозревателе DSL

Изображение мастера подключения

Директива соединения связи в окне подробности DSL

Bb126279.ConnectionBuilder_4b(ru-ru,VS.110).png

Затем необходимо предоставить методы в классе ConnectionBuilder:

  public partial class ConnectionBuilder
  {
    /// <summary>
    /// OK if this component has children
    /// </summary>
    private static bool CanAcceptInPortAsSource(InPort candidate)
    {
       return candidate.Component.Children.Count > 0;
    }

    /// <summary>
    /// Only if source is on parent of target.
    /// </summary>
    private static bool CanAcceptInPortAndInPortAsSourceAndTarget                (InPort sourceInPort, InPort targetInPort)
    {
      return sourceInPort.Component == targetInPort.Component.Parent;
    }
// And similar for OutPorts…

Дополнительные сведения о настройке модели с помощью программного кода, см. в разделе Перемещение по модели и обновление модели в коде программы.

Можно использовать аналогичный код, например, чтобы запретить пользователям создавать циклы with ties " родители-потомки ".Эти ограничения, считаются "трудными" ограничениями поскольку пользователи не могут нарушить их в любое время.Можно также создать проверка "нежности" проверьте, что пользователи могут временно исключить создание недопустимых конфигурации, которые они не может сохранить.

Bb126279.collapse_all(ru-ru,VS.110).gifРекомендуется при определении построители соединения

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

При указании построитель подключения для нескольких типов связей, то необходимо убедиться, что оно не может совпадать с более чем одному типу из одних и тех же пары источников и целевых объектов.В противном случае результаты будут становятся непредсказуемыми.

Используется пользовательский код для применения сложных" ограничения ", однако необходимо учитывать, должны ли пользователи возможность временно установить недопустимые связи.Если они, можно изменить ограничения, поэтому соединения не проверяются до тех пор, пока пользователь не попробуют сохранить изменения.

См. также

Основные понятия

Настройка создания и перемещения элементов

Настройка функции копирования

Практическое руководство. Добавление обработчика перетаскивания

Перемещение по модели и обновление модели в коде программы

Другие ресурсы

Образец DSL принципиальных схем