using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; using Softelvdm.SftTabsNET; namespace Scribble { public partial class MainWindow : Form { public static MainWindow parentWindow; public static int documentCount; // static var which keeps track of the document count public MainWindow() { parentWindow = this; InitializeComponent(); documentCount = 0; CreateDocument(""); } private void menuFileNew_Click(object sender, EventArgs e) { New(); } private void menuFileOpen_Click(object sender, EventArgs e) { Open(); } private void menuFileClose_Click(object sender, EventArgs e) { CloseView(); } private void menuFileSave_Click(object sender, EventArgs e) { Save(); } private void menuFileSaveAs_Click(object sender, EventArgs e) { Save(); } private void menuFilePrint_Click(object sender, EventArgs e) { Print(); } private void menuFilePrintPreview_Click(object sender, EventArgs e) { PrintPreview(); } private void menuFileExit_Click(object sender, EventArgs e) { Exit(); } private void menuEditClearAll_Click(object sender, EventArgs e) { Clear(); } private void menuPenThickline_Click(object sender, EventArgs e) { ThickPen(); } private void menuPenWidths_Click(object sender, EventArgs e) { PenWidthsDlg(); } private void menuViewToolbar_Click(object sender, EventArgs e) { toolBar1.Visible = menuViewToolbar.Checked = !toolBar1.Visible; } private void menuViewStatusbar_Click(object sender, EventArgs e) { statusBar1.Visible = menuViewStatusbar.Checked = !statusBar1.Visible; } private void menuWindowNew_Click(object sender, EventArgs e) { New(); } private void menuWindowCascade_Click(object sender, EventArgs e) { Cascade(); } private void menuWindowTile_Click(object sender, EventArgs e) { Tile(); } private void menuHelpTopics_Click(object sender, EventArgs e) { ShowHelpTopics(); } private void menuHelpAbout_Click(object sender, EventArgs e) { AboutHelp(); } //About Help private void AboutHelp() { MessageBox.Show("Scribble Version 1.0+\n\nAdapted to use SftTabs/NET for document selection.", "About Scribble", MessageBoxButtons.OK, MessageBoxIcon.Information); } //Help Topics private void ShowHelpTopics() { Help.ShowHelp(this, "..\\..\\help\\scribble.chm"); } //Print private void Print() { try { printDoc.Print(); } catch (Exception e) { MessageBox.Show(e.ToString()); } } //PrintPage event handler private void ScribblePrintPage(object sender, PrintPageEventArgs ev) { try { ScribbleView activeView = (ScribbleView)this.ActiveMdiChild; ScribbleDoc activeDoc = activeView.GetDocument(); for (int i = 0; i < activeDoc.strokeList.Count; i++) { Stroke st = (Stroke)activeDoc.strokeList[i]; st.DrawStroke(ev.Graphics); } ev.HasMorePages = false; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } //PrintPreview private void PrintPreview() { try { PrintPreviewDialog prevDlg = new PrintPreviewDialog(); prevDlg.Document = printDoc; prevDlg.Size = new System.Drawing.Size(600, 329); prevDlg.ShowDialog(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } //Exit private void Exit() { Form[] childForm = this.MdiChildren; //Make sure to ask for saving the doc before exiting the app for (int i = 0; i < childForm.Length; i++) childForm[i].Close(); Application.Exit(); } //Close the View private void CloseView() { ScribbleView activeView = (ScribbleView)this.ActiveMdiChild; activeView.Close(); } //Tile private void Tile() { this.LayoutMdi(MdiLayout.TileHorizontal); } //Cascade private void Cascade() { this.LayoutMdi(MdiLayout.Cascade); } //Clear the contents of the active document private void Clear() { ScribbleView activeView = (ScribbleView)this.ActiveMdiChild; if (activeView != null) { ScribbleDoc activeDoc = activeView.GetDocument(); activeDoc.DeleteContents(); } } //Open an existing document private void Open() { OpenFileDialog openDlg = new OpenFileDialog(); openDlg.Filter = "Scribble Files (*.scb)|*.scb|All Files (*.*)|*.*"; openDlg.FileName = ""; openDlg.DefaultExt = ".scb"; openDlg.CheckFileExists = true; openDlg.CheckPathExists = true; DialogResult res = openDlg.ShowDialog(); if (res == DialogResult.OK) { if (!(openDlg.FileName).EndsWith(".scb") && !(openDlg.FileName).EndsWith(".SCB")) MessageBox.Show("Unexpected file format", "Scribble", MessageBoxButtons.OK); else { if (this.ActiveMdiChild == null) EnableItems(); ScribbleDoc newDoc = CreateDocument(openDlg.FileName); newDoc.OpenDocument(openDlg.FileName); } } } //Save the document private void Save() { ScribbleView selectedView = (ScribbleView)this.ActiveMdiChild; SaveFileDialog saveDlg = new SaveFileDialog(); saveDlg.Filter = "Scribble Files (*.scb)|*.scb|All Files (*.*)|*.*"; saveDlg.DefaultExt = ".scb"; if (selectedView.GetDocument().docFileName == "") saveDlg.FileName = "Untitled"; else saveDlg.FileName = selectedView.GetDocument().docFileName; DialogResult res = saveDlg.ShowDialog(); if (res == DialogResult.OK) selectedView.GetDocument().SaveDocument(saveDlg.FileName); } //Open new document private void New() { //If this is the first child window, enable the Menu and Toolbar items if (this.ActiveMdiChild == null) EnableItems(); CreateDocument(""); } //NewWindow private void NewWindow() { ScribbleView activeView = (ScribbleView)this.ActiveMdiChild; ScribbleView newView = new ScribbleView(activeView.GetDocument(), parentWindow); newView.GetDocument().viewList.Add(newView); newView.SetTitle(activeView.GetDocument().docFileName); newView.Show(); } //Creates a new document private ScribbleDoc CreateDocument(String docName) { ScribbleDoc newDoc = new ScribbleDoc(parentWindow, docName); documentCount++; return newDoc; } private void PenWidthsDlg() { Form f = new Form(); //Get the document of active view ScribbleView activeView = (ScribbleView)this.ActiveMdiChild; ScribbleDoc activeDoc = activeView.GetDocument(); f.AutoScaleBaseSize = new System.Drawing.Size(5, 13); f.Text = "Pen Widths"; f.ClientSize = new System.Drawing.Size(352, 125); Button button1 = new Button(); button1.Location = new System.Drawing.Point(264, 20); button1.Size = new System.Drawing.Size(75, 23); button1.TabIndex = 1; button1.Text = "OK"; button1.DialogResult = System.Windows.Forms.DialogResult.OK;//Make this "OK" button Button button2 = new Button(); button2.Location = new System.Drawing.Point(264, 52); button2.Size = new System.Drawing.Size(75, 23); button2.TabIndex = 6; button2.Text = "Cancel"; TextBox textBox1 = new TextBox(); textBox1.Location = new System.Drawing.Point(120, 36); textBox1.Text = activeDoc.thinWidth.ToString(); textBox1.TabIndex = 1; textBox1.Size = new System.Drawing.Size(64, 20); TextBox textBox2 = new TextBox(); textBox2.Location = new System.Drawing.Point(120, 76); textBox2.Text = activeDoc.thickWidth.ToString(); textBox2.TabIndex = 2; textBox2.Size = new System.Drawing.Size(64, 20); Label label1 = new Label(); label1.Location = new System.Drawing.Point(16, 36); label1.Text = "Thin Pen Width:"; label1.Size = new System.Drawing.Size(88, 16); label1.TabIndex = 3; Label label2 = new Label(); label2.Location = new System.Drawing.Point(16, 76); label2.Text = "Thick Pen Width:"; label2.Size = new System.Drawing.Size(88, 16); label2.TabIndex = 4; f.FormBorderStyle = FormBorderStyle.FixedDialog; // Set the MaximizeBox to false to remove the maximize box. f.MaximizeBox = false; // Set the MinimizeBox to false to remove the minimize box. f.MinimizeBox = false; // Set the accept button of the form to button1. f.AcceptButton = button1; // Set the cancel button of the form to button2. f.CancelButton = button2; f.StartPosition = FormStartPosition.CenterScreen; f.Controls.Add(button1); f.Controls.Add(button2); f.Controls.Add(label1); f.Controls.Add(label2); f.Controls.Add(textBox1); f.Controls.Add(textBox2); DialogResult res = f.ShowDialog(); if (res == System.Windows.Forms.DialogResult.OK) { activeDoc.thinWidth = UInt32.Parse(textBox1.Text); activeDoc.thickWidth = UInt32.Parse(textBox2.Text); activeDoc.ReplacePen(); f.Close(); } } private void ThickPen() { ScribbleView activeView = (ScribbleView)this.ActiveMdiChild; ScribbleDoc activeDoc = activeView.GetDocument(); activeDoc.thickPen = !activeDoc.thickPen; activeDoc.ReplacePen(); this.menuPenThick.Checked = activeDoc.thickPen; } //Disable the menu and toolbar items when there is no active child form public void DisableItems() { this.menuItemEdit.Visible = false; this.menuItemPen.Visible = false; this.menuItemWindow.Visible = false; this.menuFileClose.Visible = false; this.menuFileSave.Visible = false; this.menuFileSaveAs.Visible = false; this.menuFilePrint.Visible = false; this.menuFilePrintPreview.Visible = false; this.saveButton.Enabled = false; this.previewButton.Enabled = false; this.printButton.Enabled = false; } //Enable the menu and toolbar items when the first child form is created public void EnableItems() { this.menuItemEdit.Visible = true; this.menuItemPen.Visible = true; this.menuItemWindow.Visible = true; this.menuFileClose.Visible = true; this.menuFileSave.Visible = true; this.menuFileSaveAs.Visible = true; this.menuFilePrint.Visible = true; this.menuFilePrintPreview.Visible = true; this.saveButton.Enabled = true; this.previewButton.Enabled = true; this.printButton.Enabled = true; } private void toolBar1_ButtonClick(object sender, ToolBarButtonClickEventArgs e) { if (e.Button == newButton) { New(); } else if (e.Button == openButton) { Open(); } else if (e.Button == saveButton) { Save(); } else if (e.Button == previewButton) { PrintPreview(); } else if (e.Button == printButton) { Print(); } else if (e.Button == helpButton) { ShowHelpTopics(); } } //App closing handler public void ClosingMainAppHander(Object sender, CancelEventArgs e) { this.Exit(); } private void MainWindow_Load(object sender, EventArgs e) { // resize the tab control and its container (panel) to use the tab control's optimal height // leave a small gap above the tab control sftTabs1.MakeNaturalSize(); panelTabControl.Height = sftTabs1.Height + 4; panelTabControl.Top = 4; MessageBox.Show("This example is based on the \"Scribble\" sample application included with Visual Studio.NET. It has been modified to use SftTabs/NET for document selection.", "SftTabs/NET Sample", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void sftTabs1_Switched(object sender, System.EventArgs e) { // A new tab has become active, activate the appropriate child window if (sftTabs1.Current >= 0) { Form f = sftTabs1.TabCollection[sftTabs1.Current].Tag1 as Form; if (f != null) f.Activate(); } } private void MainWindow_MdiChildActivate(object sender, System.EventArgs e) { // An MDI child window is being activated, make the appropriate tab active int iTab = -1; foreach (TabClass t in sftTabs1.TabCollection) { if (t.Tag1 == ActiveMdiChild) { iTab = t.Index; break; } } sftTabs1.Current = iTab; } } }