Přizpůsobení nástrojů a panelu nástrojů
Je nutné definovat položky nástrojů pro elementy, které chcete uživatelům umožnit přidávat k jejich modelů.Existují dva typy nástrojů: element nástroje a nástroje pro připojení.V Návrháři generovaného uživatel může vybrat nástroj element přetažení tvary do diagramu a připojení nástroj pro kreslení propojení mezi tvary můžete vybrat.Obecně platí element nástroje umožňují uživatelům přidávat instance třídy domény jejich modely a nástroje připojení nechat je přidat instancí vztahů mezi doménami.
V tomto tématu:
Jak je definován v panelu nástrojů
Přizpůsobení nástrojů elementu
Vytváření skupin elementů z nástroje
Vlastní nastavení nástroje připojení
Jak je definován v panelu nástrojů
V Průzkumníku DSL rozbalte uzel editoru a jeho podřízené uzly.Obvykle se zobrazí hierarchii, která vypadá takto:
Editor
Toobox Tabs
MyDsl //a tab
Tools
ExampleElement // an element tool
ExampleRelationship // a connection tool
V této části DSL Explorer můžete provádět následující akce:
Vytvořte nové karty.Karty definovat nadpisy oddílů v panelu nástrojů.
Vytvořte nové nástroje.
Zkopírujte a vložte nástroje.
Přesuňte nástroje nahoru nebo dolů v seznamu.
Odstraníte karty a nástroje.
Důležité |
---|
Chcete-li přidat nebo vložit položky v DSL Explorer, klikněte pravým tlačítkem myši nadřazený nový uzel.Například, chcete-li přidat nástroj, klikněte pravým tlačítkem myši na kartu a ne nástroje uzlu.Chcete-li přidat na kartu, klikněte pravým tlačítkem myši Editor uzlu. |
Ikonu panelu nástrojů vlastnost každých nástroje odkazuje na rastrového obrázku velikosti 16 x 16.Tyto soubory jsou obvykle uchovány Dsl\Resources složky.
Třídy vlastnost nástroj pro element odkazuje na třídu konkrétní domény.Ve výchozím nastavení nástroj vytvoří instance této třídy.Však může zapisovat kód k dispozici nástroj pro vytváření skupin prvky nebo prvky různých typů.
Připojení Tvůrce vlastnosti připojení nástroje, který odkazuje na připojení tvůrce, který definuje, jaké typy elementů nástroj může připojit, a jaká relace vytvoří mezi nimi.Tvůrce připojení jsou definovány jako uzly v Průzkumníku DSL.Tvůrce připojení jsou vytvářeny automaticky, pokud definujete vztahy domény, ale můžete napsat kód, který má je možné dále přizpůsobit.
Chcete-li přidat nástroj na panelu nástrojů
Obvykle vytvoříte nástroj pro element poté, co jste vytvořili třídu shape a je mapován na třídu domény.
Obvykle vytvoříte konektor nástroje, poté, co jste vytvořili třídu konektor a jeho namapovány na referenčního vztahu.
V Průzkumníku DSL rozbalte Editor uzel a panel nástrojů záložky uzlu.
Klikněte pravým tlačítkem na uzel kartu nástrojů a potom klikněte na tlačítko přidat nový nástroj pro Element nebo přidat nový nástroj pro připojení.
Nastavte ikonu panelu nástrojů vlastnost, která má odkazovat na rastrový obrázek velikosti 16 x 16.
Pokud chcete definovat novou ikonu, vytvořit v Průzkumníku řešení v souboru bitové mapy Dsl\Resources složky.Soubor musí mít následující hodnoty vlastností: proces sestavení = obsahu; Zkopírovat do výstupního adresáře = nekopírujte.
Pro nástroj elementu: nastavena třídy vlastnost nástroje odkazovat na konkrétní domény třídu, která je mapován na tvar.
Pro nástroj konektor: nastavena připojení Tvůrce vlastnost nástroj na jeden z položky, které jsou nabízeny v rozevíracím seznamu.Tvůrce připojení jsou automaticky vytvářeny při mapování konektoru na vztah domény.Pokud jste nedávno vytvořili konektoru, byste měli obvykle Vybrat tvůrce přidružené připojení.
Chcete-li otestovat DSL, stiskněte klávesu F5 nebo CTRL + F5 a v pokusné instanci Visual Studio, otevřít soubor ukázky modelu.Nový nástroj se mají zobrazit na panelu nástrojů.Přetáhněte ji do diagramu na zkontrolujte, že vytváří nový prvek.
Je-li tento nástroj nezobrazí, zastavte pokusné Visual Studio.V systému Windows Start nabídce Spustit resetovat Instance Microsoft Visual Studio 2010 pokusné.On the Visual Studio Build menu, click Rebuild Solution.Zkuste DSL se znovu připojit.
Přizpůsobení nástrojů elementu
Ve výchozím nastavení nástroj vytvoří jedna instance pro zadanou třídu, ale může to měnit dvěma způsoby:
Definujte direktivy sloučit prvek na jiné třídy navštěvují přijímat nové instance této třídy a umožňuje jim chcete-li vytvořit další odkazy při vytvoření nového elementu.Můžete například uživateli umožní drop komentář do jiného elementu a tak vytvářet kliknutí na odkaz mezi těmito dvěma.
Tyto úpravy také ovlivnit, co se stane, když uživatel vloží nebo nastavuje tažením a zahodí elementu.
Další informace naleznete v tématu Přizpůsobení vytvoření a přesunutí elementu.
Psaní kódu, chcete-li přizpůsobit nástroj tak, aby mohl vytvořit skupiny prvků.Tento nástroj je inicializován metodami v ToolboxHelper.cs, které můžete přepsat.Další informace naleznete v tématu vytváření skupin z elementů v nástroji.
Vytváření skupin elementů z nástroje
Nástroj pro každý element obsahuje prototyp prvků, které by měl být vytvořen.Ve výchozím nastavení nástroj pro každý element vytvoří jeden element, ale je také možné vytvořit skupinu objekty v relaci pomocí jednoho nástroje.To lze provést inicializaci nástroj s ElementGroupPrototype obsahující související položky.
V následujícím příkladu je získaných z DSL, ve kterém je typ tranzistor.Každý tranzistor má tři pojmenované terminálech.Element nástroj pro tranzistory ukládá prototyp obsahující čtyři prvky modelu a tři odkazy relace.Když uživatel nastavuje tažením nástroj do diagramu, prototypu je vytvořena instance a propojena do kořenového adresáře modelu.
Tento kód přepíše metodu, která je definována v Dsl\GeneratedCode\ToolboxHelper.cs.
Další informace o přizpůsobení modelu s použitím programového kódu, naleznete v části Navigace v modelu a aktualizace modelu v kódu programu.
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);
} } }
Vlastní nastavení nástroje připojení
Obvykle vytvoříte nástroj elementu, když vytvoříte novou třídu konektor.Alternativně můžete použít přetížení jeden nástroj tím, že typy oba konce k určení typu relace.Můžete například definovat jeden nástroj pro připojení, který by mohl vytvořit vztahy osoby osoby a osoby městě relace.
Nástroje připojení k vyvolání Tvůrce připojení.Chcete-li určit, jak uživatelé přejít elementy v Návrháři generované pomocí Tvůrce připojení.Tvůrce připojení zadejte elementy, které lze propojit a druh odkaz, který je vytvořen mezi nimi.
Při vytváření referenčního vztahu mezi třídami domény, se automaticky vytvoří Tvůrce připojení.Pomocí tohoto připojení Tvůrce při mapování nástroje připojení.Další informace o tom, jak vytvořit připojení nástroje naleznete v tématu Přizpůsobení nástrojů a panelu nástrojů.
Tvůrce připojení výchozí můžete upravit tak, aby ho řešit jiný rozsah typů zdrojová a cílová a vytvoření různých typů vztahů.
Také můžete napsat vlastního kódu pro Tvůrce připojení zadat zdrojovou a cílovou třídy pro připojení, definovat typ připojení, které má být provedeno a také další akce přidružené k vytvoření připojení.
Struktury tvůrci připojení
Tvůrce připojení obsahovat jednu nebo více propojení připojit direktivy, které zadejte vztah domény a zdrojová a cílová elementy.Například v šabloně řešení tok úloha se zobrazí CommentReferencesSubjectsBuilder v DSL Explorer.Toto připojení tvůrce obsahuje jeden odkaz připojit direktiva s názvem CommentReferencesSubjects – odkazová, které je mapován na CommentReferencesSubjects – odkazová relace domény.Tento odkaz připojit direktiva obsahuje direktivu role zdroj, který odkazuje na Comment třída domény a direktivu role cíl, který odkazuje na FlowElement třídy domény.
Pomocí Tvůrce připojení k omezení zdroj a cíl rolí
Tvůrce připojení slouží k omezení výskytu určité třídy v zdrojovou roli nebo role cíl daného domény v relaci.Například můžete mít domény základní třídu, která má vztah domény do jiné domény třídy, ale nebudete chtít všechny odvozené třídy mají stejné role v tomto vztahu základní třídy.V řešení úloha tok existují čtyři třídy konkrétní domény (StartPoint, koncový bod, MergeBranch a synchronizace), které dědí přímo z domény abstraktní třídy FlowElement a dvě třídy konkrétní domény (úloh a ObjectInState), které z něj nepřímo dědí.Je zde také referenčního vztahu toku, který přebírá FlowElement domény třídy v jeho zdrojovou roli a cílovou roli.Však instance třídy domény koncový bod by neměl být zdroj instance vztahu toku, ani by měla být instancí třídy StartPoint cíl instance vztahu toku.Tvůrce připojení FlowBuilder má odkaz připojit direktiva s názvem toku, který určuje, které domény můžete přehrát třídy zdrojovou roli (úkol, MergeBranch, StartPoint a synchronizace) a které mohou hrát roli cíl (MergeBranch, koncový bod a synchronizaci).
Připojení počítačů s více propojení připojit direktivy
Můžete přidat více než jeden odkaz připojit direktiva k připojení Tvůrce.Díky tomu máte skrýt některé složitosti model domény od uživatelů a udržovat nástrojů z nepřehledný.Můžete přidat odkaz do jediného připojení Tvůrce připojit direktivy několik vztahů jinou doménu.Při pokusu přibližně má stejnou funkci, však by měl kombinovat vztahů mezi doménami.
V řešení úloha tok nástroj toku připojení slouží ke kreslení instancí toku a vztahů Tok_objektů domény.FlowBuilder Tvůrce připojení má, kromě odkaz toku připojit direktivu popsané výše, dvě propojení připojit s názvem Tok_objektů direktivy.Tyto direktivy určují, že instance vztahu mezi Tok_objektů může být stanoven mezi instancí třídy ObjectInState domény, nebo z instance ObjectInState do instance úlohy, ale není mezi dvěma instancemi úlohu nebo z instance úlohy pro instanci ObjectInState.Instance relace toku však může být stanoven mezi dvě instance úlohy.Pokud zkompilovat a spustit úlohu tok řešení, uvidíte, že kreslení tok z instance ObjectInState do instance úlohy vytvoří instanci Tok_objektů, ale kreslení tok mezi dvěma instancemi úloha vytvoří instanci toku.
Vlastní kód pro Tvůrce připojení
Existují čtyři políček v uživatelském rozhraní, které definují různé typy přizpůsobení Tvůrce připojení:
vlastní přijmout v roli direktivu zdroj nebo cíl zaškrtávací políčko
vlastní připojení v roli direktivu zdroj nebo cíl zaškrtávací políčko
používá vlastní připojení v direktivu připojit zaškrtávací políčko
je vlastní vlastnost daného Tvůrce připojení
Je třeba zadat některé programový kód k provedení těchto úprav.Chcete-li zjistit, jaký kód, je třeba zadat, zkontrolujte jeden z těchto polí, klepněte transformace všechny šablony a začnete vytvářet vaše řešení.Zprávy o chybách povede.Dvakrát klikněte na zprávy o chybě zobrazíte komentář s vysvětlením, jaký kód že byste měli přidat.
[!POZNÁMKA]
Chcete-li přidat vlastní kód, vytvořte definici částečné třídy v souboru kódu odděleně od kódu soubory ve složce GeneratedCode.Chcete-li předejít ztrátě vaši práci, byste neměli upravovat soubory generovaného kódu.Další informace naleznete v tématu Přepisování a rozšiřování vygenerovaných tříd.
Vytvoření připojení vlastní kód
V každé vazby připojit směrnice, zdroje role direktivy kartu definuje z co typů lze přetáhnout.Podobně cílové role direktivy kartu definuje pro co typů lze přetáhnout.Pro každý typ, můžete dále určit, zda chcete, aby připojení (pro tento odkaz připojení přes direktivu) nastavením vlastní přijmout příznak a potom poskytnutí další kód.
Můžete také upravit, co se stane, když se připojení.Například můžete upravit pouze v případě, kde dojde k přetahování nebo z dané třídy, připojit tento jeden odkaz všech případů direktivu se řídí, nebo celý Tvůrce FlowBuilder připojení.Pro každé z těchto možností můžete nastavit vlastní příznaky na odpovídající úrovni.Při transformaci všechny šablony a pokusíte vytvářet řešení, chybové zprávy můžete přímo poznámky, které jsou v generovaného kódu.Tyto poznámky zjistit, co je třeba zadat.
Ve vzorku součásti diagramu je přizpůsobit Tvůrce připojení pro daný vztah domény připojení k omezení připojení, která může být proveden mezi porty.Následující obrázek ukazuje, že je možné navázat spojení pouze z OutPort prvků, které mají InPort elementů, ale můžete vnořit součásti v rámci sebe navzájem.
Připojení OutPort vnořené komponenty přichází do
Proto můžete určit, že připojení může pocházet z vnořené komponenty na OutPort.Toto připojení určíte, že nastavíte používá vlastní přijmout na InPort typu jako zdrojovou roli a OutPort typu jako cíl role v DSL podrobnosti okna, jak je znázorněno na následujícím obrázku:
Odkaz připojit direktivu v Průzkumníku DSL
Odkaz připojit direktivu v okně Podrobnosti DSL
Pak je nutné zadat metody ve třídě 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…
Další informace o přizpůsobení modelu s použitím programového kódu, naleznete v části Navigace v modelu a aktualizace modelu v kódu programu.
Můžete podobné kódu, například zabránit uživatelům ve vytváření cykly s odkazy typu nadřazený podřízený.Tato omezení jsou považovány za "pevný" omezení, protože uživatelé nemohou porušení kdykoli znovu.Můžete také vytvořit 'flexibilní' ověřovacích kontrol, které uživatelé mohou obejít dočasně vytvořením neplatná konfigurace, které jsou nelze uložit.
Osvědčených postupů při definování připojení počítačů
Je třeba definovat jeden Tvůrce připojení k vytvoření různých typů vztahů pouze v případě, že jsou související entity.V příkladu toku úloha se použijete k vytvoření toků mezi úkoly a také mezi objekty a úlohy stejné Tvůrce.Však by být matoucí pro stejný Tvůrce slouží k vytvoření relací mezi komentáře a úlohy.
Pokud definujete připojení tvůrce pro více typů vztahů, je třeba zajistit, že neodpovídá více než jeden typ z stejnou dvojici zdrojové a cílové objekty.Jinak budou výsledky nepředvídatelné.
Použít vlastní kód pro aplikaci "pevný" omezení, ale měli byste zvážit, zda má být uživatelům dočasně připojení moci vytvořit neplatný.Pokud by se měly, můžete upravit omezení, aby bylo připojení nejsou ověřit, dokud se uživatelé pokusí uložit změny.
Viz také
Koncepty
Přizpůsobení vytvoření a přesunutí elementu
Přizpůsobení chování kopírování
Postupy: Přidání obslužné rutiny operace přetažení myší
Navigace v modelu a aktualizace modelu v kódu programu