public void SaveFile(MDFile md, bool saveAs = false)
        {
            // check exists
            // open file
            // write all lines
            // subscribe to file changes?
            string path = md.file;

            if (saveAs || path == null)
            {
                using (var sfd = new SaveFileDialog()) {
                    sfd.InitialDirectory = path ?? Environment.CurrentDirectory;
                    sfd.Filter           = "Markdown *.md|*.md|All Files|*.*";
                    var res = sfd.ShowDialog();
                    if (res == DialogResult.OK)
                    {
                        path = sfd.FileName;
                    }
                    else
                    {
                        return;
                    }
                }
            }

            md.Save();

            // reload the file, enabling the watcher
            LoadFile(path, md);
        }
        public void AddTab(string name = "new")
        {
            var md = new MDFile(OnFileChange, OnFileEdit, OnFileSave, OnFileLoad);

            md.name = name;
            files.Add(md);
            AddTab(md);
        }
        public void AddTab(MDFile md)
        {
            files.Add(md);
            TabPage tp = new TabPage(md.name);

            tp.Tag = md;
            tabsPages.Controls.Add(tp);
            tabsPages.SelectTab(tabsPages.TabCount - 1);
        }
 public void DisplayFile(MDFile file)
 {
     this.Invoke((MethodInvoker) delegate {
         tabsPages.SelectedTab    = tabsPages.Controls.Cast <TabPage>().Where(t => file == t.Tag as MDFile).FirstOrDefault();
         textBox_raw.TextChanged -= textBox_raw_TextChanged;
         textBox_raw.Lines        = file.Lines;
         textBox_raw.TextChanged += textBox_raw_TextChanged;
         RenderMD(file.Lines);
     });
 }
 public void ChangeTab(TabPage tab)
 {
     // get MDFile from tag
     // load into lines
     current = tab.Tag as MDFile;
     if (current != null)
     {
         DisplayFile(current);
     }
 }
 private void MarkdownWikier_Load(object sender, EventArgs e)
 {
     current = new MDFile(OnFileChange, OnFileEdit, OnFileSave, OnFileLoad);
     files.Add(current);
     tabPage1.Tag = current;
     DisplayFile(current);
     if (openFiles != null)
     {
         foreach (var f in openFiles)
         {
             LoadFile(f);
         }
     }
     if (!openFiles.Any())
     {
         LoadFile("test.md");
     }
 }
        public void LoadFile(string file, MDFile md = null)
        {
            // read file
            // create tab
            // subscribe to file changes?
            if (md == null)
            {
                if (current != null && !current.Changed && current.file == null)
                {
                    md = current;
                }
                else
                {
                    md = new MDFile(OnFileChange, OnFileEdit, OnFileSave, OnFileLoad);
                }
            }

            var emd = files.Where(f => f.file == file).FirstOrDefault();

            if (emd != null)
            {
                md = emd;
            }

            md.Load(file);

            var tab = tabsPages.Controls.Cast <TabPage>().Where(t => t.Tag as MDFile == md).FirstOrDefault();

            if (tab == null)
            {
                AddTab(md);
            }
            else
            {
                tab.Text = md.name;
            }
            DisplayFile(md);
        }