Ejemplo n.º 1
0
        public void CreateComposition(bool IsForDomainCreation = false)
        {
            var CurrentWindow = Display.GetCurrentWindow();

            CurrentWindow.Cursor = Cursors.Wait;

            var PreviousActiveDoc = this.WorkspaceDirector.ActiveDocument;

            this.WorkspaceDirector.ActiveDocument = null;   // Must deactive previous to create+activate the opening Composition.

            CompositionEngine.CreateActiveCompositionEngine(this, this.Visualizer, IsForDomainCreation);
            var Result = CompositionEngine.Materialize();

            if (Result.Item1 == null)
            {
                CurrentWindow.Cursor = Cursors.Arrow;
                Display.DialogMessage("Error!", "Cannot create new Composition.\n\nProblem: " + Result.Item2, EMessageType.Warning);
                this.WorkspaceDirector.ActiveDocument = PreviousActiveDoc;
                return;
            }

            // Start visual interactive editing and show document view.
            this.WorkspaceDirector.LoadDocument(Result.Item1.TargetComposition);
            Result.Item1.Start();

            if (IsForDomainCreation)
            {
                Display.DialogMessage("Attention!",
                                      "Domains are created with a base Composition.\n" +
                                      "So, later it can be saved as the Domain's template.");

                DomainServices.DomainEdit(Result.Item1.TargetComposition.CompositeContentDomain);
            }
            else
            {
                var EditOnNewComposition = AppExec.GetConfiguration <bool>("Composition", "EditOnNewComposition", true);
                if (EditOnNewComposition)
                {
                    Result.Item1.EditCompositionProperties();
                }
            }

            CurrentWindow.Cursor = Cursors.Arrow;
        }
Ejemplo n.º 2
0
        /// <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));

            // -------------------------------------------------------------------------------------
        }
Ejemplo n.º 3
0
        // ---------------------------------------------------------------------------------------------------------------------------------------------------------
        /// <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);
        }
Ejemplo n.º 4
0
        public void OpenDomainAndCreateCompositionOfIt(bool IsForOpenDomain, Uri Location = null, bool CanEditPropertiesOfNewCompo = true)
        {
            bool OpenCompositionStoredWithDomain = true;

            if (IsForOpenDomain)
            {
                Console.WriteLine("Opening Domain (and creating its Composition)...");
            }
            else
            {
                Console.WriteLine("Creating new Composition of Domain...");
            }

            if (Location == null)
            {
                var Selection = DomainSelector.SelectDomain(AppExec.ApplicationSpecificDefinitionsDirectory,
                                                            (IsForOpenDomain ? null :
                                                             "Select Domain file to create Composition..."),
                                                            !IsForOpenDomain);
                if (Selection == null)
                {
                    return;
                }

                Location = Selection.Item1;
                OpenCompositionStoredWithDomain = (IsForOpenDomain || Selection.Item2);

                // If 'Basic Domain' was selected...
                if (Location == null)
                {
                    this.CreateComposition();
                    return;
                }

                /* Previously...
                 * Location = Display.DialogGetOpenFile("Select Domain",
                 *                                   FileDataType.FileTypeDomain.Extension,
                 *                                   FileDataType.FileTypeDomain.FilterForOpen); */
            }
            if (Location == null)
            {
                return;
            }

            /* NOT APPLICABLE FOR DOMAINS
             * // Switch to document if already opened
             * var CurrentlyOpenedDoc = this.WorkspaceDirector.Documents
             *  .FirstOrDefault(doc => doc.DocumentEditEngine.Location != null && !doc.DocumentEditEngine.Location.LocalPath.IsAbsent()
             *                         && doc.DocumentEditEngine.Location.LocalPath == Location.LocalPath);
             *
             * if (CurrentlyOpenedDoc != null)
             * {
             *  this.WorkspaceDirector.ActivateDocument(CurrentlyOpenedDoc);
             *  return;
             * }
             */

            /* unnecessary
             * if (IsForOpenDomain)
             *  Application.Current.MainWindow.PostCall(mainwin =>
             *      Display.DialogMessage("Attention!",
             *                            "Domains must are created with a base Composition.\n" +
             *                            "So, later it can be saved as the Domain's template."); */

            var CurrentWindow = Display.GetCurrentWindow();

            CurrentWindow.Cursor = Cursors.Wait;

            var PreviousActiveDoc = this.WorkspaceDirector.ActiveDocument;

            this.WorkspaceDirector.ActiveDocument = null;   // Must deactive previous to create+activate the opening Composition.

            CompositionEngine.CreateActiveCompositionEngine(this, this.Visualizer, IsForOpenDomain);
            var DomainLoad = CompositionEngine.MaterializeDomain(Location);

            if (DomainLoad.Item1 == null)
            {
                CurrentWindow.Cursor = Cursors.Arrow;
                Display.DialogMessage("Error!", "Cannot open Domain.\n\nProblem: " + DomainLoad.Item2, EMessageType.Warning);
                this.WorkspaceDirector.ActiveDocument = PreviousActiveDoc;
                return;
            }

            var Result = CompositionEngine.Materialize(null, DomainLoad.Item1, OpenCompositionStoredWithDomain);

            if (Result.Item1 == null)
            {
                CurrentWindow.Cursor = Cursors.Arrow;
                Display.DialogMessage("Error!", "Cannot create Composition of Domain.\n\nProblem: " + Result.Item2, EMessageType.Warning);
                this.WorkspaceDirector.ActiveDocument = PreviousActiveDoc;
                return;
            }

            // Start visual interactive editing and show document view.
            Result.Item1.DomainLocation = Location;
            this.WorkspaceDirector.LoadDocument(Result.Item1.TargetDocument);

            Result.Item1.Start();

            if (IsForOpenDomain)
            {
                DomainServices.DomainEdit(Result.Item1.TargetComposition.CompositeContentDomain);
            }
            else
            if (CanEditPropertiesOfNewCompo)
            {
                var EditOnNewComposition = AppExec.GetConfiguration <bool>("Composition", "EditOnNewComposition", true);
                if (EditOnNewComposition)
                {
                    Result.Item1.EditCompositionProperties();
                }
            }

            CurrentWindow.Cursor = Cursors.Arrow;
        }