コード例 #1
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void AddNewEntitiesToSubModel(string submodelName)
        {
            Submodel subModel = Model.Submodels.Submodel.FirstOrDefault(submodel => submodel.Name == submodelName);

            if (subModel == null)
            {
                throw new ArgumentNullException($"Submodel '{submodelName}' does not exist in the current model.");
            }

            IEnumerable <string> mainModelNodeLabels = subModel.Node.Select(node => node.Label).OrderBy(label => label);
            IEnumerable <string> entityLabels        = Model.Entities.Entity.Select(entity => entity.Label).OrderBy(label => label);

            List <Entity> entitiesToAddToMainModel = new List <Entity>();

            foreach (var entityLabel in entityLabels.Except(mainModelNodeLabels))
            {
                entitiesToAddToMainModel.Add(Model.Entities.Entity.FirstOrDefault(label => label.Label == entityLabel));
            }

            subModel.AddEntities(entitiesToAddToMainModel, 0, 0);

            Model.CaptureCoordinates();

            if (this.entityEditor.IsEditable)
            {
                entityEditor.Reload();
            }
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void GraphEditor_InsertNode(object sender, NodeEventArgs e)
        {
            Submodel.NodeLocalType model = e.Node?.UserData as Submodel.NodeLocalType;
            if (model == null)
            {
                Entity entity = new Schemas.Entity(Model);
                entity.Label = GetNewId(newNodeTypeEntity);
                entity.Name  = entity.Label;
                Model.Entities.Entity.Add(entity);

                model             = new Submodel.NodeLocalType(Model);
                model.Label       = entity.Label;
                model.Xcoordinate = e.Center.X;
                model.Ycoordinate = e.Center.Y;
                model.EntityGuid  = entity.Guid;

                if (Model.DisplayedSubmodel != mainSubmodel)
                {
                    mainSubmodel.Node.Add(model.Clone());
                }

                Model.DisplayedSubmodel.Node.Add(model);
                RefreshNodeCombobox();
                //ResetLayout();
                Model.RebindControl();
            }

            // Auto select newly created entity
            selectedNode = model;
            selectedNode.Select();
            entityEditor.Show(model.Entity, Model);

            EnableDisableButtons();
        }
コード例 #3
0
 public EntityTreeNode(Model model, Entity entity) : base(entity.Label)
 {
     Model        = model;
     Entity       = entity;
     Guid         = Guid.Parse(entity.Guid);
     relationship = new Lazy <List <Relationship> >(() => entity.GetRelationships(RelationshipDirection.In, true).ToList());
 }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void GraphEditor_EdgeAdded(object sender, EdgeEventArgs e)
        {
            if (tsbEdgeInsertion.Checked == false || removingEdge == true)
            {
                return;
            }

            using (EdgeEditor editor = new EdgeEditor())
            {
                editor.Model      = Model;
                editor.SourceName = e.Edge.Source;
                editor.TargetName = e.Edge.Target;

                if (editor.ShowDialog() == DialogResult.OK)
                {
                    Model.InsertRelationship(editor.SourceName, editor.TargetName, editor.Relationship, e.Edge);
                    entityEditor.CloseEditor();
                    graphEditor.ClearSelection();
                }
                else
                {
                    Model.GraphEditor.Viewer.Undo();
                }
            }

            Model.Invalidate();
        }
コード例 #5
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void GraphEditor_EdgeRemoved(object sender, EdgeEventArgs e)
        {
            removingEdge = true;

            if (e?.Edge?.UserData is Relationship rel && rel.ContainsDrawingEdge && rel.DeleteIncludeRelationshipModel)
            {
                DialogResult dialogResult = MessageBox.Show($@"Are you sure you want to delete the relationship ""{rel.Source.Label}->[{rel.Name}]->{rel.Target.Label}"" from storage?", "WARNING!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (dialogResult == DialogResult.Yes)
                {
                    Model.RemoveRelationship(rel);
                }
                else
                {
                    Model.GraphEditor.Viewer.Undo();
                }
            }

            if (entityEditor.IsEditable)
            {
                entityEditor.UpdateRelationshipGridView();
            }

            removingEdge = false;
            Model.Invalidate();
        }
コード例 #6
0
        public ManageEntityStaticDataForm(Model model, Entity entity)
        {
            InitializeComponent();

            Model  = model;
            Entity = entity;
        }
コード例 #7
0
        public RelationshipTreeNode(Model model, Relationship rel) : base(rel.Name)
        {
            inEntity  = new Lazy <Entity>(() => model.Entities.Entity.Where(x => x.Label == rel.Source.Label).FirstOrDefault());
            outEntity = new Lazy <Entity>(() => model.Entities.Entity.Where(x => x.Label == rel.Target?.Label).FirstOrDefault());

            Checked      = true;
            Relationship = rel;
            Guid         = Guid.Parse(rel.Guid);
        }
コード例 #8
0
 public ManageSubmodelForm(Model modeller, Submodel submodel)
 {
     InitializeComponent();
     Model       = modeller;
     Submodel    = submodel;
     IsMainModel = submodel.Name == Constants.MainModel;
     IsNewModel  = submodel.Name == null;
     AssignToUi();
     Text = "Edit Submodel";
 }
コード例 #9
0
        public ManageFunctionalId(Model model)
        {
            InitializeComponent();
            this.Model = model;
            cmbType.Items.Clear();
            cmbType.Items.AddRange(Enum.GetNames(typeof(IdFormat)));
            cmbType.SelectedIndex = 0;

            InitializeDataBindings();
            SetupForSelection();
        }
コード例 #10
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void GraphEditor_EditSubmodelClick(object sender, EventArgs e)
        {
            ManageSubmodelForm form = new Modeller.ManageSubmodelForm(Model, Model.DisplayedSubmodel);

            if (form.ShowDialog() == DialogResult.OK)
            {
                Model.CaptureCoordinates();
                Model.RebindControl();
                RefreshNodeCombobox();
                FillSubmodelComboBox(form.Submodel);
            }
        }
コード例 #11
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        private void SugiyamaToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
        {
            AddOrClearViewModeCheckEvents(false);
            sugiyamaToolStripMenuItem.Checked = sugiyamaToolStripMenuItem.Checked;

            mdsToolStripMenuItem.Checked = false;
            originalSettingsToolStripMenuItem.Checked = sugiyamaToolStripMenuItem.Checked == false;

            AddOrClearViewModeCheckEvents(true);
            SetGraphViewModel(originalSettingsToolStripMenuItem.Checked ? LayoutMethod.UseSettingsOfTheGraph : LayoutMethod.SugiyamaScheme);
            Model.RebindControl();
        }
コード例 #12
0
        public UpdateFunctionalIdForm(Model model, EntityEditor parentControl)
        {
            InitializeComponent();
            this.Model         = model;
            this.ParentControl = parentControl;

            cmbType.Items.Clear();
            cmbType.Items.AddRange(Enum.GetNames(typeof(IdFormat)));
            cmbType.SelectedIndex = 0;

            txtName.Text = parentControl.Entity.Label;
        }
コード例 #13
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        private void OriginalSettingsToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
        {
            AddOrClearViewModeCheckEvents(false);
            originalSettingsToolStripMenuItem.Checked = true;

            mdsToolStripMenuItem.Checked      = false;
            sugiyamaToolStripMenuItem.Checked = false;

            AddOrClearViewModeCheckEvents(true);

            Model.ViewMode = LayoutMethod.UseSettingsOfTheGraph;
            Model.RebindControl();
        }
コード例 #14
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void GraphEditor_ExcludeEntity(object sender, NodeEventArgs e)
        {
            if (e.Node.UserData is Submodel.NodeLocalType model)
            {
                Model.ExcludeFromCurrentModel(model);
            }

            ReloadGraph();
            Model.Invalidate();
            RefreshNodeCombobox();
            CloseNodeEditor();
            EnableDisableButtons();
        }
コード例 #15
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            string type   = cmbType.SelectedItem.ToString();
            string prefix = txtPrefix.Text.Trim();
            string name   = txtName.Text.Trim();

            if (string.IsNullOrEmpty(name))
            {
                MessageBox.Show("Name cannot be empty.", "Cannot Save Functiond Id", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtName.Focus();
                return;
            }

            if (string.IsNullOrEmpty(prefix))
            {
                MessageBox.Show("Prefix cannot be empty.", "Cannot Save Functiond Id", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtPrefix.Focus();
                return;
            }

            if (this.Model.FunctionalIds.FunctionalId.Any(functionalId => functionalId.Name == name))
            {
                MessageBox.Show($"Name \"{name}\" already exists.", "Cannot Save Functiond Id", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtName.Focus();
                return;
            }

            if (this.Model.FunctionalIds.FunctionalId.Any(functionalId => functionalId.Value == prefix))
            {
                MessageBox.Show($"Prefix \"{prefix}\" already exists.", "Cannot Save Functiond Id", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtPrefix.Focus();
                return;
            }

            FunctionalId funcId = new FunctionalId(Model);

            funcId.Type  = type;
            funcId.Value = prefix;
            funcId.Name  = name;
            funcId.Guid  = Model.GenerateGuid(name).ToString();

            this.Model.FunctionalIds.FunctionalId.Add(funcId);
            string displayName = string.Concat(string.Concat(name, " - "), prefix);

            ParentControl.RefreshEntity();
            ParentControl.FunctionalIdComboBox.SelectedIndex = ParentControl.FunctionalIdComboBox.FindStringExact(displayName);
            this.Close();

            MessageBox.Show("Functional Id saved in memory.", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
コード例 #16
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        private void BtnSave_Click(object sender, EventArgs e)
        {
            if (File.Exists(StoragePath) == false && SaveAs() == DialogResult.Cancel)
            {
                return;
            }

            Model.HasChanges = false;
            Model.CaptureCoordinates();
            Model.Save(StoragePath);
            MessageBox.Show("Diagram saved successfully.", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information);
            if (this.entityEditor.IsEditable)
            {
                entityEditor.Reload();
            }
        }
コード例 #17
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void GraphEditor_DeleteEntity(object sender, NodeEventArgs e)
        {
            if (e.Node.UserData is Submodel.NodeLocalType node)
            {
                DialogResult dialogResult = MessageBox.Show($@"Are you sure you want to delete the {EntityNodeName.ToLower()} ""{node.Label}"" from storage?", "WARNING!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (dialogResult == DialogResult.Yes)
                {
                    Model.DeleteEntity(node);
                    ReloadGraph();

                    Model.Invalidate();
                    RefreshNodeCombobox();
                    CloseNodeEditor();
                    EnableDisableButtons();
                }
            }
        }
コード例 #18
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        void InitializeModel(ModellerType modellerType)
        {
            if ((object)Model != null)
            {
                Model.UnRegisterEvents();
            }

            Model = new Model();

            try
            {
                if (File.Exists(StoragePath))
                {
                    Model = new Model(StoragePath);
                }
            }
            catch (XmlException)
            {
                MessageBox.Show($"The path {StoragePath} is an invalid xml file", "Invalid Xml File", MessageBoxButtons.OK, MessageBoxIcon.Error);
                RegistryHandler.LastOpenedFile = string.Empty;

                if (Model == null)
                {
                    Model = new Model();
                }
            }

            Model.Type         = Model.Type ?? modellerType.ToString();
            Model.HasChanges   = false;
            Model.BeforeReBind = ClearEvents;
            Model.AfterReBind  = AddEvents;

            Model.ShowRelationshipLabels     = showLabels;
            Model.ShowInheritedRelationships = showInherited;

            string editorName = Model.ModellerType == ModellerType.Blueprint41 ? B41_EDITOR : NEO4J_EDITOR;

            this.Text = $"{FORMNAME} - ({editorName})";
            graphEditor.ModellerType = Model.ModellerType;

            //CheckGuidDiscrepancies();
        }
コード例 #19
0
ファイル: Recovery.cs プロジェクト: j-prox/blueprint41
        private async void Timer_ElapsedAsync(object sender, ElapsedEventArgs e)
        {
            //Run on background
            await Task.Run(() =>
            {
                if (form.Model != null)
                {
                    try
                    {
                        Model newModel = new Model(null, (modeller)form.Model.Xml.Clone());
                        newModel.Save(RecoveryFile);
                        newModel = null;
                        Console.WriteLine($"Saved to {RecoveryFile}");
                    }
                    catch { }
                }
            });

            saveComplete?.Invoke();
        }
コード例 #20
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        DialogResult CheckForChangesAndSaveIfPossible()
        {
            if (Model == null || Model.HasChanges == false)
            {
                return(DialogResult.No);
            }

            string fileName = Path.GetFileName(StoragePath);

            DialogResult result = MessageBox.Show($@"Do you want to save changes to ""{fileName}"" ?", "Save Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                Model.HasChanges = false;
                Model.CaptureCoordinates();
                Model.Save(StoragePath);
            }

            return(result);
        }
コード例 #21
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        private void CmbNodes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbNodes.SelectedItem == null)
            {
                return;
            }

            RemoveHighlightNodes();

            if (cmbNodes.SelectedIndex == 0)
            {
                entityEditor.CloseEditor();
                Model.GraphReset();
                return;
            }

            selectedNode = cmbNodes.SelectedItem as Submodel.NodeLocalType;

            entityEditor.Show(selectedNode.Entity, Model);
            selectedNode.Highlight();
        }
コード例 #22
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
        private void GenerateUpdateScriptToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ModuleLoader module = ModuleLoader.GetModule("Compare");

            if (module == null)
            {
                MessageBox.Show("The comparer is not available.", "Info", System.Windows.Forms.MessageBoxButtons.OK);
                return;
            }
            else
            {
                // Save it before generating update script
                Model.CaptureCoordinates();
                Model.Save(StoragePath);

                module.RunModule(Model.Xml, StoragePath);

                // Re initalize model after generating update script
                // this will reload the xml
                InitializeXmlModeller();
            }
        }
コード例 #23
0
 public ManageSubmodelForm(Model modeller) : this(modeller, new Submodel(modeller))
 {
     Text = "Add Submodel";
 }
コード例 #24
0
 public InheritedEntityTreeNode(Model model, Entity entity) : base(entity.Label)
 {
     Model   = model;
     Entity  = entity;
     Checked = true;
 }
コード例 #25
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
 private void TsbHome_Click(object sender, EventArgs e)
 {
     Model.GraphReset();
 }
コード例 #26
0
ファイル: MainForm.cs プロジェクト: j-prox/blueprint41
 void SetGraphViewModel(LayoutMethod method)
 {
     Model.ViewMode = method;
     Model.RedoLayout();
 }