예제 #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="mapView">Must not be null</param>
 /// <param name="tree"></param>
 public Tab(MapView mapView, PersistentTree tree) : base(mapView.Canvas)
 {
     Tree               = tree;
     MapView            = mapView;
     tree.DirtyChanged += Tree_DirtyChanged;
     AutoScroll         = true;
 }
예제 #2
0
        /// <summary>
        /// Changes all image source to mm protocol, downloads and saves the locally
        /// </summary>
        public static void ProcessImages(HtmlDocument document, PersistentTree tree)
        {
            using (var web = new WebClient())
            {
                var elemCol = document.GetElementsByTagName("img");

                for (int i = 0; i < elemCol.Count; i++)
                {
                    var elem        = elemCol[i];
                    var originalSrc = elem.GetAttribute("src");
                    if (originalSrc.Length > 4 && originalSrc.Substring(0, 4).Equals("http", StringComparison.OrdinalIgnoreCase))
                    {
                        byte[] data = null;
                        string extension;
                        try
                        {
                            data      = web.DownloadData(originalSrc);
                            extension = MimeTypes.GetExtension(web.ResponseHeaders["Content-Type"]);
                        }
                        catch (WebException) //resource not found (404) and no connection
                        {
                            extension = "png";
                        }

                        var newInternalSrc = ImageLocalPath.CreateNewLocalPath(extension);
                        tree.SetLargeObject(newInternalSrc.FileName, new BytesLob(data));

                        elem.SetAttribute("srcOrig", originalSrc);
                        elem.SetAttribute("src", newInternalSrc.Url);
                    }
                }
            }
        }
예제 #3
0
        public Tab FindTab(PersistentTree tree)
        {
            if (tree == null)
            {
                return(null);
            }

            Tab tab = SelectedTab as Tab;

            if (tab != null && tab.Tree == tree)
            {
                return(tab);
            }

            foreach (TabPage page in TabPages)
            {
                tab = page as Tab;
                if (tab.MapView.Tree == tree.Tree)
                {
                    return(tab);
                }
            }

            return(null);
        }
예제 #4
0
        public void CloseTab(PersistentTree tree)
        {
            Tab tab = FindTab(tree);

            if (tab != null)
            {
                CloseTab(tab);
            }
        }
예제 #5
0
        /// <summary>
        /// Open MapView tab
        /// </summary>
        /// <param name="tree"></param>
        /// <returns></returns>
        public Tab OpenTab(PersistentTree tree)
        {
            MapView mapView = new MapView(tree.Tree);
            Tab     tab     = new Tab(mapView, tree);

            tab.UpdateTitle();
            OpenTabInternal(tab);
            mapView.CenterOnForm();

            return(tab);
        }
예제 #6
0
 private void Manager_CurrentTreeChanged(PersistenceManager manager, PersistentTree oldTree, PersistentTree newTree)
 {
     if (oldTree != null)
     {
         Unregister(oldTree);
     }
     if (newTree != null)
     {
         Register(newTree);
     }
 }
예제 #7
0
파일: MainCtrl.cs 프로젝트: xtuzy/MindMate
 public void SaveMap(PersistentTree tree)
 {
     if (tree != null)
     {
         if (tree.IsNewMap)
         {
             SaveAsMap(tree);
         }
         else
         {
             SaveMapInternal(tree);
         }
     }
 }
예제 #8
0
        /// <summary>
        /// Changes all image source to mm protocol, downloads and saves the locally
        /// </summary>
        public static void ProcessImages(HtmlDocument document, PersistentTree tree)
        {
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol  = SecurityProtocolType.Tls
                                                    | SecurityProtocolType.Tls11
                                                    | SecurityProtocolType.Tls12
                                                    | SecurityProtocolType.Ssl3;

            using (var web = new WebClient())
            {
                var elemCol = document.GetElementsByTagName("img");

                for (int i = 0; i < elemCol.Count; i++)
                {
                    var elem        = elemCol[i];
                    var originalSrc = elem.GetAttribute("src");
                    if (originalSrc.Length > 4 && originalSrc.Substring(0, 4).Equals("http", StringComparison.OrdinalIgnoreCase))
                    {
                        byte[] data = null;
                        string extension;
                        try
                        {
                            data = web.DownloadData(originalSrc);
                        }
                        catch (Exception exp)
                        {
                            Log.Write("[ImageLocalSaver] Cannot download the image: " + exp.Message);
                        }
                        if (data != null)
                        {
                            try
                            {
                                extension = MimeTypes.GetExtension(web.ResponseHeaders["Content-Type"]);
                            }
                            catch (WebException exp) //resource not found (404) and no connection
                            {
                                Log.Write("[ImageLocalSaver] Cannot get the content type of image: " + exp.Message);
                                extension = "png";
                            }

                            var newInternalSrc = ImageLocalPath.CreateNewLocalPath(extension);
                            tree.SetLargeObject(newInternalSrc.FileName, new BytesLob(data));

                            elem.SetAttribute("srcOrig", originalSrc);
                            elem.SetAttribute("src", newInternalSrc.Url);
                        }
                    }
                }
            }
        }
예제 #9
0
        public void FindTab()
        {
            MetaModel.MetaModel.Initialize();
            var  sut = new EditorTabs();
            Form f   = CreateForm();

            f.Controls.Add(sut);
            f.Show();
            PersistenceManager pManager = new PersistenceManager();
            PersistentTree     tree     = pManager.NewTree();
            Tab tab = sut.OpenTab(tree);

            Assert.IsNotNull(sut.FindTab(tree));
        }
예제 #10
0
 private void Manager_CurrentTreeChanged(PersistenceManager manager, PersistentTree oldTree, PersistentTree newTree)
 {
     if (oldTree != null)
     {
         UpdateNodeFromEditor();
         Unregister(oldTree);
     }
     if (newTree != null)
     {
         Register(newTree);
         editor.BackColor = newTree.NoteBackColor;
         editor.ForeColor = newTree.NoteForeColor;
     }
 }
예제 #11
0
파일: MainCtrl.cs 프로젝트: xtuzy/MindMate
        /// <summary>
        ///
        /// </summary>
        /// <param name="tree">should not be null</param>
        public void SaveAsMap(PersistentTree tree)
        {
            SaveFileDialog file = new SaveFileDialog();

            file.AddExtension     = true;
            file.DefaultExt       = "mm";
            file.Filter           = "MindMap files (*.mm)|*.mm|All files (*.*)|*.*|Text (*.txt)|*.txt";
            file.InitialDirectory = Path.GetDirectoryName(PersistenceManager.CurrentTree.FileName);
            file.FileName         = tree.IsNewMap? CurrentMapCtrl.MapView.Tree.RootNode.Text : PersistenceManager.CurrentTree.FileName;
            if (file.ShowDialog() == DialogResult.OK)
            {
                SaveMapInternal(tree, file.FileName);
            }
            mainForm.EditorTabs.UpdateAppTitle();
        }
예제 #12
0
        public void UpdateAppTitle()
        {
            MetaModel.MetaModel.Initialize();
            var  sut = new EditorTabs();
            Form f   = CreateForm();

            f.Controls.Add(sut);
            f.Show();
            PersistenceManager pManager = new PersistenceManager();
            PersistentTree     tree     = pManager.NewTree();

            tree.RootNode.Text = "UpdateTitle";
            Tab tab = sut.OpenTab(tree);

            Assert.IsTrue(f.Text.Contains("UpdateTitle"));
        }
예제 #13
0
파일: MainCtrl.cs 프로젝트: xtuzy/MindMate
        public void OpenMap(string fileName = null)
        {
            if (fileName == null)
            {
                OpenFileDialog file = new OpenFileDialog();
                file.Filter = "MindMap files (*.mm)|*.mm|All files (*.*)|*.*|Text (*.txt)|*.txt";
                if (file.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                else
                {
                    fileName = file.FileName;
                }
            }

            //file already open
            PersistentTree persistentTree = PersistenceManager.Find(t => t.FileName == fileName);

            if (persistentTree != null)
            {
                PersistenceManager.CurrentTree = persistentTree;
                return;
            }

            MapTree tree;

            try
            {
                tree = PersistenceManager.OpenTree(fileName);
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("File not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            catch (DirectoryNotFoundException)
            {
                MessageBox.Show("File not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            MetaModel.MetaModel.Instance.RecentFiles.Add(fileName);
            mainForm.RefreshRecentFilesMenuItems();
        }
예제 #14
0
        public void ControlGotFocus()
        {
            MetaModel.MetaModel.Initialize();
            var  sut = new EditorTabs();
            Form f   = CreateForm();

            f.Controls.Add(sut);
            int gotFocus = 0;

            sut.ControlGotFocus += (a, b) => gotFocus++;
            f.Show();
            PersistenceManager pManager = new PersistenceManager();
            PersistentTree     tree     = pManager.NewTree();
            Tab tab = sut.OpenTab(tree);

            sut.Focus();

            Assert.AreEqual(1, gotFocus);
        }
예제 #15
0
파일: MainCtrl.cs 프로젝트: xtuzy/MindMate
        private ContinueOperation PromptForUnsavedChanges(PersistentTree tree)
        {
            if (tree.IsDirty)
            {
                DialogResult result = MessageBox.Show("Do you want to save changes?", "Unsaved Changes",
                                                      MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
                switch (result)
                {
                case DialogResult.Yes:
                    SaveMap(tree);
                    break;

                case DialogResult.Cancel:
                    return(ContinueOperation.Cancel);
                }
            }

            return(ContinueOperation.Continue);
        }
예제 #16
0
        public void UpdateAppTitle()
        {
            Debug.Assert(TopLevelControl != null, "TopLevelControl != null");

            PersistentTree tree = (SelectedTab as Tab)?.Tree;

            if (tree != null)
            {
                TopLevelControl.Text = tree.Tree.RootNode.Text + " - " + Controller.MainCtrl.APPLICATION_NAME + " - " + tree.FileName;
                if (tree.IsDirty)
                {
                    TopLevelControl.Text += "*";
                }
            }
            else
            {
                TopLevelControl.Text = Controller.MainCtrl.APPLICATION_NAME + " - " + SelectedTab.Text;
            }
        }
예제 #17
0
        public static bool PasteFromClipboard(NoteEditor editor, PersistentTree tree)
        {
            if (Clipboard.ContainsImage())
            {
                Image image = Clipboard.GetImage();

                var imagePath = ImageLocalPath.CreateNewLocalPath("png");

                MemoryStream ms = new MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                tree.SetByteArray(imagePath.FileName, ms.ToArray());

                var htmlImage = new HtmlImageCreator(editor);
                htmlImage.InsertImage(imagePath.Url, "");

                return(true);
            }
            else if (Clipboard.ContainsFileDropList())
            {
                var fileList  = Clipboard.GetFileDropList();
                var imageList = FilterImageFiles(fileList);
                if (imageList.Any())
                {
                    imageList.ForEach(i =>
                    {
                        var localPath = ImageLocalPath.CreateNewLocalPath(Path.GetExtension(i).Substring(1));
                        tree.SetByteArray(localPath.FileName, File.ReadAllBytes(i));

                        var htmlImage = new HtmlImageCreator(editor);
                        htmlImage.InsertImage(localPath.Url, "");
                    });
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
예제 #18
0
파일: MainCtrl.cs 프로젝트: xtuzy/MindMate
        /// <summary>
        /// Method which actually saves the file to disk. Other methods like SaveAsMap and SaveMap invoke this.
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="fileName"></param>
        private void SaveMapInternal(PersistentTree tree, string fileName = null)
        {
            Debug.Assert(tree.FileName != null || fileName != null, "Saving: Missing file name.");

            noteCrtl.UpdateNodeFromEditor();

            if (tree != null)
            {
                if (fileName == null)
                {
                    tree.Save();
                }
                else
                {
                    tree.Save(fileName);
                }

                MetaModel.MetaModel.Instance.RecentFiles.Add(tree.FileName);
            }
        }
예제 #19
0
        public static bool PasteFromClipboard(NoteEditor editor, PersistentTree tree)
        {
            if (Clipboard.ContainsImage())
            {
                Image image = Clipboard.GetImage();

                var imagePath = ImageLocalPath.CreateNewLocalPath("png");

                MemoryStream ms = new MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                tree.SetLargeObject(imagePath.FileName, new BytesLob(ms.ToArray()));

                var htmlImage = new HtmlImageCreator(editor);
                htmlImage.InsertImage(imagePath.Url, "");

                return(true);
            }
            else if (Clipboard.ContainsFileDropList())
            {
                var fileList  = Clipboard.GetFileDropList();
                var imageList = FilterImageFiles(fileList);
                if (imageList.Any())
                {
                    imageList.ForEach(i =>
                    {
                        InsertFormFile(editor, i, tree);
                    });
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
예제 #20
0
 private void Tree_DirtyChanged(PersistentTree tree)
 {
     UpdateTitle();
 }