/// <summary> /// Exposes the commands which can be consumed. /// </summary> public void ExposeCommands() { WorkCommand ExposedWorkCommand = null; // ========================================================================================================= SimpleElement ExposedArea = new SimpleElement("Domain", "Domain"); SimpleElement ExposedGroup = new SimpleElement("Definition", "Definition"); this.CommandAreas_.Add(ExposedArea); this.CommandGroups_.PutIntoSublist(ExposedArea.TechName, ExposedGroup); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("EditDomain"); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DomainEdit(Doc.TargetComposition.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Edit Domain...", ExposedWorkCommand.Name, "Edit the Domain of the current Composition", "book_edit.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- /* this would confuse the user? */ ExposedWorkCommand = new GenericCommand("NewDomain"); ExposedWorkCommand.Apply = (par => ProductDirector.CompositionDirector.CreateComposition(true)); ExposedWorkCommand.CanApply = (par => true); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("New Domain", ExposedWorkCommand.Name, "Creates a new Domain (and its empty template Composition).", "book_star.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); ExposedWorkCommand = new GenericCommand("OpenDomain"); ExposedWorkCommand.Apply = (par => ProductDirector.CompositionDirector.OpenDomainAndCreateCompositionOfIt(true)); ExposedWorkCommand.CanApply = (par => true); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Open Domain", ExposedWorkCommand.Name, "Opens a Domain for editing (and creates its emtpy template Composition).", "folder_book.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("SaveDomainAs"); ExposedWorkCommand.Apply = (par => { var Engine = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Engine == null) { return; } var Confirmation = Display.DialogMessage("Confirmation", "Save also the current Composition as Domain's Template for create new ones?\n" + "(Note: Later, it can be used or just start empty Compositions)", EMessageType.Question, MessageBoxButton.YesNoCancel, MessageBoxResult.Yes); if (Confirmation == MessageBoxResult.Cancel || Confirmation == MessageBoxResult.None) { return; } var SaveTemplate = (Confirmation == MessageBoxResult.Yes); //T Console.WriteLine("Saving Domain as..."); var InitialRoute = (Engine.DomainLocation != null ? Engine.DomainLocation.LocalPath : (Engine.FullLocation == null ? Path.Combine(AppExec.UserDataDirectory, Engine.TargetComposition.CompositeContentDomain.TechName) : Path.Combine(Path.GetDirectoryName(Engine.FullLocation.LocalPath), Engine.TargetComposition.CompositeContentDomain.TechName))); var TargetRoute = Display.DialogGetSaveFile("Save Domain as", FileDataType.FileTypeDomain.Extension, FileDataType.FileTypeDomain.FilterForSave, InitialRoute); if (TargetRoute == null) { return; } var CurrentWindow = Display.GetCurrentWindow(); CurrentWindow.Cursor = Cursors.Wait; var TargetDomain = Engine.TargetComposition.CompositeContentDomain; Visual Snapshot = null; if (SaveTemplate && TargetDomain.OwnerComposition.ActiveView != null) { Snapshot = TargetDomain.OwnerComposition.ActiveView .ToVisualSnapshot(DocumentEngine.PART_SNAPSHOT_WIDTH, DocumentEngine.PART_SNAPSHOT_HEIGHT); } TargetDomain.SetTemplateSaving(SaveTemplate); var Result = DocumentEngine.StoreToLocation <Domain>(TargetDomain, Domain.__ClassDefinitor.Name, TargetDomain.Classification.ContentTypeCode, TargetRoute, DomainDocumentUri, true, false, TargetDomain, Snapshot); if (!Result.IsAbsent()) { CurrentWindow.Cursor = Cursors.Arrow; Display.DialogMessage("Error!", "Cannot save Domain.\n\nProblem: " + Result, EMessageType.Warning); return; } Engine.DomainLocation = TargetRoute; this.WorkspaceDirector.ShellProvider.RefreshSelection(); CurrentWindow.Cursor = Cursors.Arrow; }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Save Domain As", ExposedWorkCommand.Name, "Saves the current Domain to the specified file.", "book_saveas.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- // Ordered list of quick access commands this.QuickExposedCommands.Add(this.CommandExpositors["NewDomain"]); this.QuickExposedCommands.Add(this.CommandExpositors["OpenDomain"]); this.QuickExposedCommands.Add(this.CommandExpositors["EditDomain"]); this.QuickExposedCommands.Add(this.CommandExpositors["SaveDomainAs"]); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("Concept Definitions..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DefineDomainConcepts(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Concept Defs...", ExposedWorkCommand.Name, "Edit the Concept Definitions of the Domain", "imtc_concept.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("Relationship Definitions..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DefineDomainRelationships(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Relationship Defs...", ExposedWorkCommand.Name, "Edit the Relationship Definitions of the Domain", "imtc_relationship.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("Link-Role Variant Definitions..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DefineDomainLinkRoleVariants(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Link-Role Variant Defs...", ExposedWorkCommand.Name, "Edit the Link-Role Variant Definitions of the Domain", "link_role_variants.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("Marker Definitions..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DefineDomainMarkers(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Marker Defs...", ExposedWorkCommand.Name, "Edit the Marker Definitions of the Domain", "award_star_edit.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("Table-Structure Definitions..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.EditDomainTableDefinitions(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Table-Structure Defs...", ExposedWorkCommand.Name, "Edit the Table-Structure Definitions of the Domain", "table_alter.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); ExposedWorkCommand = new GenericCommand("Base Tables..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.EditDomainBaseTables(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Base Tables...", ExposedWorkCommand.Name, "Edit the Base Tables of the Domain", "table_multiple.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("External Languages..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DefineDomainExternalLanguages(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("External Languages...", ExposedWorkCommand.Name, "Edit the External Languages declared for the Domain", "page_white_code_red.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- ExposedWorkCommand = new GenericCommand("Idea-Def Clusters..."); ExposedWorkCommand.Apply = (par => { var Doc = (CompositionEngine)this.WorkspaceDirector.ActiveDocumentEngine; if (Doc == null) { return; } DomainServices.DefineDomainIdeaDefClusters(Doc.CurrentView.OwnerCompositeContainer.CompositeContentDomain); }); ExposedWorkCommand.CanApply = (par => (this.WorkspaceDirector.ActiveDocument != null)); this.CommandExpositors.Add(ExposedWorkCommand.Name, new WorkCommandExpositor("Idea-Def Clusters...", ExposedWorkCommand.Name, "Edit the Idea-Definition Clusters of the Domain", "def_clusters.png", EShellCommandCategory.Document, ExposedArea.TechName, ExposedGroup.TechName, ExposedWorkCommand)); // ------------------------------------------------------------------------------------- }
// --------------------------------------------------------------------------------------------------------------------------------------------------------- /// <summary> /// Goes to the specified object either in a diagram View and/or its maintenance editor. /// Returns indication of successful goto. /// </summary> public bool GoToObject(object Target) { if (Target is Idea) { var TargetIdea = Target as Idea; var Representator = TargetIdea.VisualRepresentators.FirstOrDefault(); if (Representator == null) { return(false); } Representator.DisplayingView.Engine.ShowView(Representator.DisplayingView); Representator.DisplayingView.Presenter.PostCall( vpres => { vpres.OwnerView.Manipulator.ApplySelection(Representator.MainSymbol); vpres.OwnerView.Presenter.BringIntoView(Representator.MainSymbol.BaseArea); }); return(true); } if (Target is VisualComplement) { var TargetComplement = Target as VisualComplement; var TargetView = TargetComplement.GetDisplayingView(); TargetView.Engine.ShowView(TargetView); TargetView.Presenter.PostCall( vpres => { vpres.OwnerView.Manipulator.ApplySelection(TargetComplement); vpres.OwnerView.Presenter.BringIntoView(TargetComplement.BaseArea); }); return(true); } if (Target is View) { var TargetView = Target as View; CompositionEngine.EditViewProperties(TargetView); return(true); } if (Target is Composition) { var TargetCompo = Target as Composition; TargetCompo.Engine.EditCompositionProperties(); return(true); } if (Target is Domain) { var TargetDomain = Target as Domain; DomainServices.DomainEdit(TargetDomain); return(true); } if (Target is ConceptDefinition) { var TargetDef = Target as ConceptDefinition; DomainServices.DefineDomainConcepts(TargetDef.OwnerDomain, TargetDef); return(true); } if (Target is RelationshipDefinition) { var TargetDef = Target as RelationshipDefinition; DomainServices.DefineDomainRelationships(TargetDef.OwnerDomain, TargetDef); return(true); } if (Target is MarkerDefinition) { var TargetDef = Target as MarkerDefinition; DomainServices.DefineDomainMarkers(this.TargetComposition.CompositeContentDomain, TargetDef); return(true); } if (Target is TableDefinition) { var TargetDef = Target as TableDefinition; DomainServices.EditDomainTableDefinitions(TargetDef.OwnerDomain, TargetDef); return(true); } if (Target is SimplePresentationElement) // Link-Role Variant { var TargetDef = Target as SimplePresentationElement; if (this.TargetComposition.CompositeContentDomain.LinkRoleVariants.Contains(TargetDef)) { DomainServices.DefineDomainLinkRoleVariants(this.TargetComposition.CompositeContentDomain, TargetDef); return(true); } } // PENDING: Find "Base Tables" and "Descriptors" // (would require to have two target objects in the finding operation, one for the owner, other for the descriptor). return(false); }