/***************************************************************************************** ** ***************************************** ** ** **********File name:Ge.cs, Version 1.0, 8 November 2004** ** ** *************************Authors: MingZhang and Mayank Bansal******************** ** ** ***************************************** ** ** ** ** This class provides an interface between user and functions. The form gets loaded ** ** when software is opened. It captures various actions performed by user and it calls ** ** corresponding functions to be implemented for the actions. ** ** The following classes are defined here: ** ** 1.GE: This class loads the form and it is the main entry point of software. ** ** 2.Canvas: All the drawing in Graphical Editor is done on the canvas. ** ** Canvas class is used to define the drawing area ** ** 3.GraEditStackMgr: This class is used to perform Redo and Undo operations ** ** ** ******************************************************************************************/ using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Imaging; using System.IO; using System.Drawing.Printing; using System.Diagnostics; using DockToolbar; using GraEditor.DrawTools; using GraEditor.Elements; namespace GraEditor { /// ///Main windows of Graphic Editor /// public class GE : System.Windows.Forms.Form { private MainView mainView; //Inherit from System.Windows.Forms.Panel private System.Windows.Forms.ContextMenu contextMenu1; private System.Windows.Forms.ToolBarButton tlBtnLine; private System.Windows.Forms.ToolBarButton tlBtnFrameRect; private System.Windows.Forms.ToolBarButton tlBtnFillRect; private System.Windows.Forms.ToolBarButton tlBtnZoomIn; private System.Windows.Forms.ToolBarButton tlBtnZoomOut; private System.Windows.Forms.ToolBarButton tlBtnZoomResume; private System.Windows.Forms.MenuItem pasteMenuItem; private System.Windows.Forms.ToolBarButton tlBtnFrameEllipse; private System.Windows.Forms.ToolBarButton tlBtnFillEllipse; private System.Windows.Forms.ToolBarButton tlBtnImage; private System.Windows.Forms.ToolBarButton tlBtnText; private System.Windows.Forms.ToolBarButton tlBtnLines; private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem menuItem12; private System.Windows.Forms.MenuItem menuNew; private System.Windows.Forms.MenuItem menuFile; private System.Windows.Forms.MenuItem menuOpen; private System.Windows.Forms.MenuItem menuSave; private System.Windows.Forms.MenuItem menuSaveAs; private System.Windows.Forms.MenuItem menuExit; private System.Windows.Forms.MenuItem menuUndo; private System.Windows.Forms.MenuItem menuRedo; private System.Windows.Forms.MenuItem menuCopy; private System.Windows.Forms.MenuItem menuCut; private System.Windows.Forms.MenuItem menuView; private System.Windows.Forms.MenuItem menuImgSetting; private System.Windows.Forms.MenuItem menuHelp; private System.Windows.Forms.ToolBarButton tlBtnErase; private System.Windows.Forms.MenuItem menuItemCanvasBackColor; private System.Windows.Forms.ToolBarButton sep2; private System.Windows.Forms.ToolBarButton sep3; private System.Windows.Forms.ToolBarButton sep4; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem5; private System.Windows.Forms.MenuItem menuItem4; private System.Windows.Forms.MenuItem menuItem24; private System.Windows.Forms.MenuItem menuPrint; private System.Windows.Forms.MenuItem menuRecentFiles; private System.Windows.Forms.MenuItem menuEdit; private System.Windows.Forms.MenuItem menuZoom; private System.Windows.Forms.MenuItem menuZoomIn; private System.Windows.Forms.MenuItem menuZoomOut; private System.Windows.Forms.MenuItem menuResume; private System.Windows.Forms.MenuItem menuColorSettings; private System.Windows.Forms.MenuItem menuHelpIndex; private System.Windows.Forms.MenuItem menuAboutGE; private System.Windows.Forms.MenuItem menuStatusBar; private System.Windows.Forms.ImageList GE_imageList; private System.Windows.Forms.ToolBar GE_toolBar; private System.Windows.Forms.StatusBar GE_statusBar; private System.ComponentModel.IContainer components; private Chris.Beckett.MenuImageLib.MenuImage _menuImages; private System.Windows.Forms.MenuItem menuToolbar; private System.Windows.Forms.ToolBar GE_toolBar1; private System.Windows.Forms.ToolBarButton tlBtnNew; private System.Windows.Forms.ToolBarButton tlBtnOpen; private System.Windows.Forms.ToolBarButton tlBtnSave; private System.Windows.Forms.ToolBarButton sp1; private System.Windows.Forms.ToolBarButton tlBtnSelect; private System.Windows.Forms.ToolBarButton tlBtnCopy; private System.Windows.Forms.ToolBarButton tlBtnCut; private System.Windows.Forms.ToolBarButton sp2; private System.Windows.Forms.ToolBarButton sp5; private System.Windows.Forms.ToolBarButton tlBtnUndo; private System.Windows.Forms.ToolBarButton tlBtnRedo; private System.Windows.Forms.ToolBarButton tlBtnFont; private System.Windows.Forms.ToolBarButton tlBtnColor; private System.Drawing.Printing.PrintDocument printDocument1; private System.Windows.Forms.PrintPreviewDialog printPreviewDialog1; private System.Windows.Forms.PageSetupDialog pageSetupDialog1; private System.Windows.Forms.MenuItem menuPrintPreview; private System.Windows.Forms.MenuItem menuPageSetting; private System.Windows.Forms.ToolBarButton tlBtnPenWidth; private System.Windows.Forms.ContextMenu muPenWidth; private System.Windows.Forms.StatusBarPanel sbPanelTip; private System.Windows.Forms.StatusBarPanel sbPanelViewScale; private System.Windows.Forms.StatusBarPanel sbPanelMousePos; private System.Windows.Forms.MenuItem menuItemCanvasSize; private System.Windows.Forms.ToolBarButton tlBtnFreehand; private System.Windows.Forms.StatusBarPanel sbPanelFont; ToolBarManager _toolBarManager; public GE() { // // Required for Windows Form Designer support. // InitializeComponent(); InitPenWidthToolBarButton(); // // TODO: InitializeComponent // this.sbPanelViewScale.Text ="100%"; Canvas canvas = Canvas.Instance; canvas.MainView = this.mainView; canvas.Modified +=new EventHandler(canvas_Modified); canvas.Init(null,new Size(600,600),Color.White); // The parameter to the constructor sets the form where the toolbars can be docked. // This would be your application main form _toolBarManager = new ToolBarManager(this, this); // The control Text property is used to draw the bar name while floating // and on view/hide menu. //_toolBar1.Text = "Bar #1"; GE_toolBar.Text = "Drawing Toolbar"; GE_toolBar1.Text = "File Operations"; _toolBarManager.AddControl(GE_toolBar, DockStyle.Left); _toolBarManager.AddControl(GE_toolBar1,DockStyle.Top); InitGraDrawTool(); UpdateColorBtnImage(DrawEnvMgr.Instance.Color); InitRecentFilesMgr(); GraDrawTool.ActiveStateChanged +=new EventHandler(GraDrawTool_ActiveStateChanged); this.mainView.MouseMove += new MouseEventHandler(mainView_MouseMove); InitEditStackMgr(); UpdateFontPanel(); //Set Freehand draw tool as default GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Freehand); this.tlBtnFreehand.Pushed = true; } /// /// Clean up any resources being used /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(GE)); this.GE_toolBar = new System.Windows.Forms.ToolBar(); this.tlBtnErase = new System.Windows.Forms.ToolBarButton(); this.sep2 = new System.Windows.Forms.ToolBarButton(); this.tlBtnLine = new System.Windows.Forms.ToolBarButton(); this.tlBtnLines = new System.Windows.Forms.ToolBarButton(); this.tlBtnFreehand = new System.Windows.Forms.ToolBarButton(); this.tlBtnFrameRect = new System.Windows.Forms.ToolBarButton(); this.tlBtnFillRect = new System.Windows.Forms.ToolBarButton(); this.tlBtnFrameEllipse = new System.Windows.Forms.ToolBarButton(); this.tlBtnFillEllipse = new System.Windows.Forms.ToolBarButton(); this.tlBtnImage = new System.Windows.Forms.ToolBarButton(); this.tlBtnText = new System.Windows.Forms.ToolBarButton(); this.sep3 = new System.Windows.Forms.ToolBarButton(); this.tlBtnZoomIn = new System.Windows.Forms.ToolBarButton(); this.tlBtnZoomOut = new System.Windows.Forms.ToolBarButton(); this.tlBtnZoomResume = new System.Windows.Forms.ToolBarButton(); this.sep4 = new System.Windows.Forms.ToolBarButton(); this.GE_imageList = new System.Windows.Forms.ImageList(this.components); this.mainView = new GraEditor.MainView(); this.contextMenu1 = new System.Windows.Forms.ContextMenu(); this.pasteMenuItem = new System.Windows.Forms.MenuItem(); this.menuItemCanvasBackColor = new System.Windows.Forms.MenuItem(); this.menuItemCanvasSize = new System.Windows.Forms.MenuItem(); this.GE_statusBar = new System.Windows.Forms.StatusBar(); this.sbPanelTip = new System.Windows.Forms.StatusBarPanel(); this.sbPanelFont = new System.Windows.Forms.StatusBarPanel(); this.sbPanelViewScale = new System.Windows.Forms.StatusBarPanel(); this.sbPanelMousePos = new System.Windows.Forms.StatusBarPanel(); this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.menuFile = new System.Windows.Forms.MenuItem(); this.menuNew = new System.Windows.Forms.MenuItem(); this.menuOpen = new System.Windows.Forms.MenuItem(); this.menuSave = new System.Windows.Forms.MenuItem(); this.menuSaveAs = new System.Windows.Forms.MenuItem(); this.menuItem5 = new System.Windows.Forms.MenuItem(); this.menuPrint = new System.Windows.Forms.MenuItem(); this.menuPrintPreview = new System.Windows.Forms.MenuItem(); this.menuPageSetting = new System.Windows.Forms.MenuItem(); this.menuItem4 = new System.Windows.Forms.MenuItem(); this.menuRecentFiles = new System.Windows.Forms.MenuItem(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.menuExit = new System.Windows.Forms.MenuItem(); this.menuEdit = new System.Windows.Forms.MenuItem(); this.menuUndo = new System.Windows.Forms.MenuItem(); this.menuRedo = new System.Windows.Forms.MenuItem(); this.menuItem12 = new System.Windows.Forms.MenuItem(); this.menuCut = new System.Windows.Forms.MenuItem(); this.menuCopy = new System.Windows.Forms.MenuItem(); this.menuView = new System.Windows.Forms.MenuItem(); this.menuToolbar = new System.Windows.Forms.MenuItem(); this.menuStatusBar = new System.Windows.Forms.MenuItem(); this.menuItem24 = new System.Windows.Forms.MenuItem(); this.menuZoom = new System.Windows.Forms.MenuItem(); this.menuZoomIn = new System.Windows.Forms.MenuItem(); this.menuZoomOut = new System.Windows.Forms.MenuItem(); this.menuResume = new System.Windows.Forms.MenuItem(); this.menuImgSetting = new System.Windows.Forms.MenuItem(); this.menuColorSettings = new System.Windows.Forms.MenuItem(); this.menuHelp = new System.Windows.Forms.MenuItem(); this.menuHelpIndex = new System.Windows.Forms.MenuItem(); this.menuAboutGE = new System.Windows.Forms.MenuItem(); this._menuImages = new Chris.Beckett.MenuImageLib.MenuImage(this.components); this.GE_toolBar1 = new System.Windows.Forms.ToolBar(); this.tlBtnNew = new System.Windows.Forms.ToolBarButton(); this.tlBtnOpen = new System.Windows.Forms.ToolBarButton(); this.tlBtnSave = new System.Windows.Forms.ToolBarButton(); this.sp1 = new System.Windows.Forms.ToolBarButton(); this.tlBtnSelect = new System.Windows.Forms.ToolBarButton(); this.tlBtnCopy = new System.Windows.Forms.ToolBarButton(); this.tlBtnCut = new System.Windows.Forms.ToolBarButton(); this.sp2 = new System.Windows.Forms.ToolBarButton(); this.sp5 = new System.Windows.Forms.ToolBarButton(); this.tlBtnUndo = new System.Windows.Forms.ToolBarButton(); this.tlBtnRedo = new System.Windows.Forms.ToolBarButton(); this.tlBtnFont = new System.Windows.Forms.ToolBarButton(); this.tlBtnColor = new System.Windows.Forms.ToolBarButton(); this.tlBtnPenWidth = new System.Windows.Forms.ToolBarButton(); this.muPenWidth = new System.Windows.Forms.ContextMenu(); this.printDocument1 = new System.Drawing.Printing.PrintDocument(); this.printPreviewDialog1 = new System.Windows.Forms.PrintPreviewDialog(); this.pageSetupDialog1 = new System.Windows.Forms.PageSetupDialog(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelTip)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelFont)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelViewScale)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelMousePos)).BeginInit(); this.SuspendLayout(); // // GE_toolBar // this.GE_toolBar.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { this.tlBtnErase, this.sep2, this.tlBtnLine, this.tlBtnLines, this.tlBtnFreehand, this.tlBtnFrameRect, this.tlBtnFillRect, this.tlBtnFrameEllipse, this.tlBtnFillEllipse, this.tlBtnImage, this.tlBtnText, this.sep3, this.tlBtnZoomIn, this.tlBtnZoomOut, this.tlBtnZoomResume, this.sep4}); this.GE_toolBar.DropDownArrows = true; this.GE_toolBar.ImageList = this.GE_imageList; this.GE_toolBar.Location = new System.Drawing.Point(0, 0); this.GE_toolBar.Name = "GE_toolBar"; this.GE_toolBar.ShowToolTips = true; this.GE_toolBar.Size = new System.Drawing.Size(591, 28); this.GE_toolBar.TabIndex = 0; this.GE_toolBar.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.GE_toolBar_ButtonClick); // // tlBtnErase // this.tlBtnErase.ImageIndex = 23; this.tlBtnErase.ToolTipText = "Erase"; // // sep2 // this.sep2.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // tlBtnLine // this.tlBtnLine.ImageIndex = 6; this.tlBtnLine.ToolTipText = "Draw Line"; // // tlBtnLines // this.tlBtnLines.ImageIndex = 19; this.tlBtnLines.ToolTipText = "Draw Multiple Lines, double click to stop"; // // tlBtnFreehand // this.tlBtnFreehand.ImageIndex = 32; this.tlBtnFreehand.ToolTipText = "Free Hand Drawing"; // // tlBtnFrameRect // this.tlBtnFrameRect.ImageIndex = 4; this.tlBtnFrameRect.ToolTipText = "Draw Rectangle"; // // tlBtnFillRect // this.tlBtnFillRect.ImageIndex = 3; this.tlBtnFillRect.ToolTipText = "Draw Filled Rectangle"; // // tlBtnFrameEllipse // this.tlBtnFrameEllipse.ImageIndex = 15; this.tlBtnFrameEllipse.ToolTipText = "Draw Ellipse"; // // tlBtnFillEllipse // this.tlBtnFillEllipse.ImageIndex = 16; this.tlBtnFillEllipse.ToolTipText = "Draw Filled Ellipse"; // // tlBtnImage // this.tlBtnImage.ImageIndex = 17; this.tlBtnImage.ToolTipText = "Insert Image"; // // tlBtnText // this.tlBtnText.ImageIndex = 18; this.tlBtnText.ToolTipText = "Insert Text"; // // sep3 // this.sep3.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // tlBtnZoomIn // this.tlBtnZoomIn.ImageIndex = 12; this.tlBtnZoomIn.ToolTipText = "ZoomIn"; // // tlBtnZoomOut // this.tlBtnZoomOut.ImageIndex = 13; this.tlBtnZoomOut.ToolTipText = "ZoomOut"; // // tlBtnZoomResume // this.tlBtnZoomResume.ImageIndex = 14; this.tlBtnZoomResume.ToolTipText = "Resume"; // // sep4 // this.sep4.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // GE_imageList // this.GE_imageList.ImageSize = new System.Drawing.Size(16, 16); this.GE_imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("GE_imageList.ImageStream"))); this.GE_imageList.TransparentColor = System.Drawing.Color.Transparent; // // mainView // this.mainView.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(192)), ((System.Byte)(192))); this.mainView.ContextMenu = this.contextMenu1; this.mainView.Dock = System.Windows.Forms.DockStyle.Fill; this.mainView.Location = new System.Drawing.Point(0, 56); this.mainView.Name = "mainView"; this.mainView.Size = new System.Drawing.Size(591, 353); this.mainView.TabIndex = 3; this.mainView.Paint += new System.Windows.Forms.PaintEventHandler(this.mainView_Paint); // // contextMenu1 // this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.pasteMenuItem, this.menuItemCanvasBackColor, this.menuItemCanvasSize}); this.contextMenu1.Popup += new System.EventHandler(this.contextMenu1_Popup); // // pasteMenuItem // this.pasteMenuItem.Index = 0; this._menuImages.SetMenuImage(this.pasteMenuItem, null); this.pasteMenuItem.OwnerDraw = true; this.pasteMenuItem.Text = "Paste"; this.pasteMenuItem.Click += new System.EventHandler(this.pasteMenuItem_Click); // // menuItemCanvasBackColor // this.menuItemCanvasBackColor.Index = 1; this._menuImages.SetMenuImage(this.menuItemCanvasBackColor, null); this.menuItemCanvasBackColor.OwnerDraw = true; this.menuItemCanvasBackColor.Text = "CanvasBackColor"; this.menuItemCanvasBackColor.Click += new System.EventHandler(this.menuItemCanvasBackColor_Click); // // menuItemCanvasSize // this.menuItemCanvasSize.Index = 2; this._menuImages.SetMenuImage(this.menuItemCanvasSize, null); this.menuItemCanvasSize.OwnerDraw = true; this.menuItemCanvasSize.Text = "CanvasSize"; this.menuItemCanvasSize.Click += new System.EventHandler(this.menuItemCanvasSize_Click); // // GE_statusBar // this.GE_statusBar.Location = new System.Drawing.Point(0, 409); this.GE_statusBar.Name = "GE_statusBar"; this.GE_statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { this.sbPanelTip, this.sbPanelFont, this.sbPanelViewScale, this.sbPanelMousePos}); this.GE_statusBar.ShowPanels = true; this.GE_statusBar.Size = new System.Drawing.Size(591, 23); this.GE_statusBar.TabIndex = 2; // // sbPanelTip // this.sbPanelTip.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring; this.sbPanelTip.Width = 265; // // sbPanelFont // this.sbPanelFont.Width = 150; // // sbPanelViewScale // this.sbPanelViewScale.Width = 60; // // mainMenu1 // this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuFile, this.menuEdit, this.menuView, this.menuImgSetting, this.menuHelp}); // // menuFile // this.menuFile.Index = 0; this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuNew, this.menuOpen, this.menuSave, this.menuSaveAs, this.menuItem5, this.menuPrint, this.menuPrintPreview, this.menuPageSetting, this.menuItem4, this.menuRecentFiles, this.menuItem1, this.menuExit}); this.menuFile.Text = "File"; // // menuNew // this.menuNew.Index = 0; this._menuImages.SetMenuImage(this.menuNew, "36"); this.menuNew.OwnerDraw = true; this.menuNew.Shortcut = System.Windows.Forms.Shortcut.CtrlN; this.menuNew.Text = "New"; this.menuNew.Click += new System.EventHandler(this.menuNew_Click); // // menuOpen // this.menuOpen.Index = 1; this._menuImages.SetMenuImage(this.menuOpen, "33"); this.menuOpen.OwnerDraw = true; this.menuOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO; this.menuOpen.Text = "Open"; this.menuOpen.Click += new System.EventHandler(this.menuOpen_Click); // // menuSave // this.menuSave.Index = 2; this._menuImages.SetMenuImage(this.menuSave, "35"); this.menuSave.OwnerDraw = true; this.menuSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS; this.menuSave.Text = "Save"; this.menuSave.Click += new System.EventHandler(this.menuSave_Click); // // menuSaveAs // this.menuSaveAs.Index = 3; this._menuImages.SetMenuImage(this.menuSaveAs, "35"); this.menuSaveAs.OwnerDraw = true; this.menuSaveAs.Text = "Save as..."; this.menuSaveAs.Click += new System.EventHandler(this.menuSaveAs_Click); // // menuItem5 // this.menuItem5.Index = 4; this._menuImages.SetMenuImage(this.menuItem5, null); this.menuItem5.OwnerDraw = true; this.menuItem5.Text = "-"; // // menuPrint // this.menuPrint.Index = 5; this._menuImages.SetMenuImage(this.menuPrint, "31"); this.menuPrint.OwnerDraw = true; this.menuPrint.Shortcut = System.Windows.Forms.Shortcut.CtrlP; this.menuPrint.Text = "Print"; this.menuPrint.Click += new System.EventHandler(this.menuPrint_Click); // // menuPrintPreview // this.menuPrintPreview.Index = 6; this._menuImages.SetMenuImage(this.menuPrintPreview, null); this.menuPrintPreview.OwnerDraw = true; this.menuPrintPreview.Text = "PrintPreview"; this.menuPrintPreview.Click += new System.EventHandler(this.menuPrintPreview_Click); // // menuPageSetting // this.menuPageSetting.Index = 7; this._menuImages.SetMenuImage(this.menuPageSetting, null); this.menuPageSetting.OwnerDraw = true; this.menuPageSetting.Text = "PageSetting"; this.menuPageSetting.Click += new System.EventHandler(this.menuPageSetting_Click); // // menuItem4 // this.menuItem4.Index = 8; this._menuImages.SetMenuImage(this.menuItem4, null); this.menuItem4.OwnerDraw = true; this.menuItem4.Text = "-"; // // menuRecentFiles // this.menuRecentFiles.Index = 9; this._menuImages.SetMenuImage(this.menuRecentFiles, null); this.menuRecentFiles.OwnerDraw = true; this.menuRecentFiles.Text = "Recent Files"; // // menuItem1 // this.menuItem1.Index = 10; this._menuImages.SetMenuImage(this.menuItem1, null); this.menuItem1.OwnerDraw = true; this.menuItem1.Text = "-"; // // menuExit // this.menuExit.Index = 11; this._menuImages.SetMenuImage(this.menuExit, "34"); this.menuExit.OwnerDraw = true; this.menuExit.Text = "Exit"; this.menuExit.Click += new System.EventHandler(this.menuExit_Click); // // menuEdit // this.menuEdit.Index = 1; this.menuEdit.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuUndo, this.menuRedo, this.menuItem12, this.menuCut, this.menuCopy}); this.menuEdit.Text = "Edit"; // // menuUndo // this.menuUndo.Index = 0; this._menuImages.SetMenuImage(this.menuUndo, "11"); this.menuUndo.OwnerDraw = true; this.menuUndo.Shortcut = System.Windows.Forms.Shortcut.CtrlZ; this.menuUndo.Text = "Undo"; this.menuUndo.Click += new System.EventHandler(this.menuUndo_Click); // // menuRedo // this.menuRedo.Index = 1; this._menuImages.SetMenuImage(this.menuRedo, "9"); this.menuRedo.OwnerDraw = true; this.menuRedo.Shortcut = System.Windows.Forms.Shortcut.CtrlY; this.menuRedo.Text = "Redo"; this.menuRedo.Click += new System.EventHandler(this.menuRedo_Click); // // menuItem12 // this.menuItem12.Index = 2; this._menuImages.SetMenuImage(this.menuItem12, null); this.menuItem12.OwnerDraw = true; this.menuItem12.Text = "-"; // // menuCut // this.menuCut.Index = 3; this._menuImages.SetMenuImage(this.menuCut, "1"); this.menuCut.OwnerDraw = true; this.menuCut.Shortcut = System.Windows.Forms.Shortcut.CtrlX; this.menuCut.Text = "Cut"; this.menuCut.Click += new System.EventHandler(this.menuCut_Click); // // menuCopy // this.menuCopy.Index = 4; this._menuImages.SetMenuImage(this.menuCopy, "0"); this.menuCopy.OwnerDraw = true; this.menuCopy.Shortcut = System.Windows.Forms.Shortcut.CtrlC; this.menuCopy.Text = "Copy"; this.menuCopy.Click += new System.EventHandler(this.menuCopy_Click); // // menuView // this.menuView.Index = 2; this.menuView.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuToolbar, this.menuStatusBar, this.menuItem24, this.menuZoom, this.menuResume}); this.menuView.Text = "View"; this.menuView.Popup += new System.EventHandler(this.menuView_Popup); // // menuToolbar // this.menuToolbar.Index = 0; this._menuImages.SetMenuImage(this.menuToolbar, null); this.menuToolbar.OwnerDraw = true; this.menuToolbar.Text = "Toolbar"; this.menuToolbar.Click += new System.EventHandler(this.menuToolbar_Click_1); // // menuStatusBar // this.menuStatusBar.Checked = true; this.menuStatusBar.Index = 1; this._menuImages.SetMenuImage(this.menuStatusBar, null); this.menuStatusBar.OwnerDraw = true; this.menuStatusBar.Text = "Status Bar"; this.menuStatusBar.Click += new System.EventHandler(this.menuStatusBar_Click); // // menuItem24 // this.menuItem24.Index = 2; this._menuImages.SetMenuImage(this.menuItem24, null); this.menuItem24.OwnerDraw = true; this.menuItem24.Text = "-"; // // menuZoom // this.menuZoom.Index = 3; this._menuImages.SetMenuImage(this.menuZoom, null); this.menuZoom.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuZoomIn, this.menuZoomOut}); this.menuZoom.OwnerDraw = true; this.menuZoom.Text = "Zoom"; // // menuZoomIn // this.menuZoomIn.Index = 0; this._menuImages.SetMenuImage(this.menuZoomIn, "12"); this.menuZoomIn.OwnerDraw = true; this.menuZoomIn.Text = "Zoom In"; this.menuZoomIn.Click += new System.EventHandler(this.menuZoomIn_Click); // // menuZoomOut // this.menuZoomOut.Index = 1; this._menuImages.SetMenuImage(this.menuZoomOut, "13"); this.menuZoomOut.OwnerDraw = true; this.menuZoomOut.Text = "Zoom Out"; this.menuZoomOut.Click += new System.EventHandler(this.menuZoomOut_Click); // // menuResume // this.menuResume.Index = 4; this._menuImages.SetMenuImage(this.menuResume, "14"); this.menuResume.OwnerDraw = true; this.menuResume.Text = "Resume"; this.menuResume.Click += new System.EventHandler(this.menuResume_Click); // // menuImgSetting // this.menuImgSetting.Index = 3; this.menuImgSetting.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuColorSettings}); this.menuImgSetting.Text = "Image Settings"; // // menuColorSettings // this.menuColorSettings.Index = 0; this._menuImages.SetMenuImage(this.menuColorSettings, "27"); this.menuColorSettings.OwnerDraw = true; this.menuColorSettings.Text = "Color Settings"; this.menuColorSettings.Click += new System.EventHandler(this.menuColorSettings_Click); // // menuHelp // this.menuHelp.Index = 4; this.menuHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuHelpIndex, this.menuAboutGE}); this.menuHelp.Text = "Help"; // // menuHelpIndex // this.menuHelpIndex.Index = 0; this._menuImages.SetMenuImage(this.menuHelpIndex, "29"); this.menuHelpIndex.OwnerDraw = true; this.menuHelpIndex.Shortcut = System.Windows.Forms.Shortcut.F1; this.menuHelpIndex.Text = "Help Index"; this.menuHelpIndex.Click += new System.EventHandler(this.menuHelpIndex_Click); // // menuAboutGE // this.menuAboutGE.Index = 1; this._menuImages.SetMenuImage(this.menuAboutGE, "30"); this.menuAboutGE.OwnerDraw = true; this.menuAboutGE.Text = "About Graphical Editor"; this.menuAboutGE.Click += new System.EventHandler(this.menuAboutGE_Click); // // _menuImages // this._menuImages.ImageList = this.GE_imageList; // // GE_toolBar1 // this.GE_toolBar1.AutoSize = false; this.GE_toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { this.tlBtnNew, this.tlBtnOpen, this.tlBtnSave, this.sp1, this.tlBtnSelect, this.tlBtnCopy, this.tlBtnCut, this.sp2, this.sp5, this.tlBtnUndo, this.tlBtnRedo, this.tlBtnFont, this.tlBtnColor, this.tlBtnPenWidth}); this.GE_toolBar1.DropDownArrows = true; this.GE_toolBar1.ImageList = this.GE_imageList; this.GE_toolBar1.Location = new System.Drawing.Point(0, 28); this.GE_toolBar1.Name = "GE_toolBar1"; this.GE_toolBar1.ShowToolTips = true; this.GE_toolBar1.Size = new System.Drawing.Size(591, 28); this.GE_toolBar1.TabIndex = 4; this.GE_toolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.GE_toolBar1_ButtonClick); // // tlBtnNew // this.tlBtnNew.ImageIndex = 36; this.tlBtnNew.ToolTipText = "New"; // // tlBtnOpen // this.tlBtnOpen.ImageIndex = 33; this.tlBtnOpen.ToolTipText = "Open"; // // tlBtnSave // this.tlBtnSave.ImageIndex = 35; this.tlBtnSave.ToolTipText = "Save"; // // sp1 // this.sp1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // tlBtnSelect // this.tlBtnSelect.ImageIndex = 10; this.tlBtnSelect.ToolTipText = "Select"; // // tlBtnCopy // this.tlBtnCopy.ImageIndex = 0; this.tlBtnCopy.ToolTipText = "Copy"; // // tlBtnCut // this.tlBtnCut.ImageIndex = 1; this.tlBtnCut.ToolTipText = "Cut"; // // sp2 // this.sp2.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // sp5 // this.sp5.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; // // tlBtnUndo // this.tlBtnUndo.ImageIndex = 11; this.tlBtnUndo.ToolTipText = "Undo"; // // tlBtnRedo // this.tlBtnRedo.ImageIndex = 9; this.tlBtnRedo.ToolTipText = "Redo"; // // tlBtnFont // this.tlBtnFont.ImageIndex = 25; this.tlBtnFont.ToolTipText = "Font"; // // tlBtnColor // this.tlBtnColor.ImageIndex = 24; this.tlBtnColor.ToolTipText = "Color"; // // tlBtnPenWidth // this.tlBtnPenWidth.DropDownMenu = this.muPenWidth; this.tlBtnPenWidth.ImageIndex = 37; this.tlBtnPenWidth.Style = System.Windows.Forms.ToolBarButtonStyle.DropDownButton; this.tlBtnPenWidth.ToolTipText = "Line Width "; // // printDocument1 // this.printDocument1.OriginAtMargins = true; this.printDocument1.BeginPrint += new System.Drawing.Printing.PrintEventHandler(this.printDocument1_BeginPrint); this.printDocument1.EndPrint += new System.Drawing.Printing.PrintEventHandler(this.printDocument1_EndPrint); this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage); // // printPreviewDialog1 // this.printPreviewDialog1.AutoScrollMargin = new System.Drawing.Size(0, 0); this.printPreviewDialog1.AutoScrollMinSize = new System.Drawing.Size(0, 0); this.printPreviewDialog1.ClientSize = new System.Drawing.Size(400, 300); this.printPreviewDialog1.Document = this.printDocument1; this.printPreviewDialog1.Enabled = true; this.printPreviewDialog1.Icon = ((System.Drawing.Icon)(resources.GetObject("printPreviewDialog1.Icon"))); this.printPreviewDialog1.Location = new System.Drawing.Point(22, 22); this.printPreviewDialog1.MinimumSize = new System.Drawing.Size(375, 250); this.printPreviewDialog1.Name = "printPreviewDialog1"; this.printPreviewDialog1.TransparencyKey = System.Drawing.Color.Empty; this.printPreviewDialog1.Visible = false; this.printPreviewDialog1.Paint += new System.Windows.Forms.PaintEventHandler(this.printPreviewDialog1_Paint); // // pageSetupDialog1 // this.pageSetupDialog1.Document = this.printDocument1; this.pageSetupDialog1.MinMargins = new System.Drawing.Printing.Margins(0, 20, 0, 20); // // GE // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(591, 432); this.Controls.Add(this.mainView); this.Controls.Add(this.GE_toolBar1); this.Controls.Add(this.GE_statusBar); this.Controls.Add(this.GE_toolBar); this.Menu = this.mainMenu1; this.Name = "GE"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Graphic Editor"; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.Closing += new System.ComponentModel.CancelEventHandler(this.GE_Closing); this.Load += new System.EventHandler(this.GE_Load); ((System.ComponentModel.ISupportInitialize)(this.sbPanelTip)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelFont)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelViewScale)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.sbPanelMousePos)).EndInit(); this.ResumeLayout(false); } #endregion /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.Run(new GE()); } /// /// Initial draw tool types /// private void InitGraDrawTool() { //Get the instance of GraDrawToolMgr GraDrawToolMgr drawToolMgr = GraDrawToolMgr.Instance; //Add Select draw tool type into GraDrawToolMgr SelectDrawTool selectTool = SelectDrawTool.Instance; selectTool.TblBtn = this.tlBtnSelect; selectTool.StateChanged +=new EventHandler(selectTool_StateChanged); this.selectTool_StateChanged(selectTool,EventArgs.Empty); GraDrawToolMgr.Instance.AddDrawTool(selectTool); //Add line draw tool type into GraDrawToolMgr LineDrawTool lineTool = new LineDrawTool(); lineTool.TblBtn = this.tlBtnLine; GraDrawToolMgr.Instance.AddDrawTool(lineTool); //Add lines draw tool type into GraDrawToolMgr LinesDrawTool linesTool = new LinesDrawTool(); linesTool.TblBtn = this.tlBtnLines; GraDrawToolMgr.Instance.AddDrawTool(linesTool); //Add freehand draw tool type into GraDrawToolMgr FreehandDrawTool freehandTool = new FreehandDrawTool(); freehandTool.TblBtn = this.tlBtnFreehand; GraDrawToolMgr.Instance.AddDrawTool(freehandTool); //Add erase draw tool type into GraDrawToolMgr EraseDrawTool eraseTool = new EraseDrawTool(); eraseTool.TblBtn = this.tlBtnErase; GraDrawToolMgr.Instance.AddDrawTool(eraseTool); //Add frame rectangle draw tool type into GraDrawToolMgr FrameRectDrawTool frameRectTool = new FrameRectDrawTool(); frameRectTool.TblBtn = this.tlBtnFrameRect; GraDrawToolMgr.Instance.AddDrawTool(frameRectTool); //Add solid rectangle draw tool type into GraDrawToolMgr FillRectDrawTool fillRectTool = new FillRectDrawTool(); fillRectTool.TblBtn = this.tlBtnFillRect; GraDrawToolMgr.Instance.AddDrawTool(fillRectTool); //Add frame ellipse draw tool type into GraDrawToolMgr FrameEllipseDrawTool frameEllipseTool = new FrameEllipseDrawTool(); frameEllipseTool.TblBtn = this.tlBtnFrameEllipse; GraDrawToolMgr.Instance.AddDrawTool(frameEllipseTool); //Add solid ellipse draw tool type into GraDrawToolMgr FillEllipseDrawTool fillEllipseTool = new FillEllipseDrawTool(); fillEllipseTool.TblBtn = this.tlBtnFillEllipse; GraDrawToolMgr.Instance.AddDrawTool(fillEllipseTool); //Add insert image draw tool type into GraDrawToolMgr ImageDrawTool imageDrawTool = new ImageDrawTool(); imageDrawTool.TblBtn = this.tlBtnImage; GraDrawToolMgr.Instance.AddDrawTool(imageDrawTool); //Add insert text draw tool type into GraDrawToolMgr TextDrawTool textDrawTool = TextDrawTool.Instance; textDrawTool.TblBtn = this.tlBtnText; GraDrawToolMgr.Instance.AddDrawTool(textDrawTool); } private void GE_toolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)//Toolbar button click events { ToolBarButton b = e.Button;//clicked Toolbar button if(b != this.tlBtnText) TextDrawTool.Instance.EndTextEditing(true); if(b == this.tlBtnLine)//Line button is clicked tlBtnLine_Click(); else if(b == this.tlBtnLines)//Lines button is clicked tlBtnLines_Click(); else if(b == this.tlBtnFreehand)//Freehand button is clicked tlBtnFreehand_Click(); else if(b == this.tlBtnFrameRect)//Frame rectangle button is clicked tlBtnFrameRect_Click(); else if(b == this.tlBtnFillRect)//Solid rectangle button is clicked tlBtnFillRect_Click(); else if(b == this.tlBtnFrameEllipse)//Frame ellipse button is clicked tlBtnFrameEllipse_Click(); else if(b == this.tlBtnFillEllipse)//Solid ellipse button is clicked tlBtnFillEllipse_Click(); else if(b == this.tlBtnZoomIn)//Zoom in button is clicked tlBtnZoomIn_Click(); else if(b == this.tlBtnZoomOut)//Zoom out button is clicked tlBtnZoomOut_Click(); else if(b == this.tlBtnZoomResume)//Zoom resume button is clicked tlBtnZoomResume_Click(); else if(b == this.tlBtnImage)//Zoom resume button is clicked tlBtnImage_Click(); else if(b == this.tlBtnText)//Zoom resume button is clicked tlBtnText_Click(); else if(b == this.tlBtnErase) // erase button is clicked tlBtnErase_Click(); } private void tlBtnFont_Click() { FontDialog dlg = new FontDialog(); //instantiating a new fontdialog box dlg.Font = DrawEnvMgr.Instance.Font; if(DialogResult.OK == dlg.ShowDialog(this)) { DrawEnvMgr.Instance.Font = dlg.Font; // assigning the font selected by the user to DrawEnvMgr.Instance.Font UpdateFontPanel(); } } private void UpdateFontPanel() { Font f = DrawEnvMgr.Instance.Font; string info = string.Format("{0} -- {1}",f.Name,f.Size); this.sbPanelFont.Text = info; } private MenuItem selectedPenWidthMenuItem; private void InitPenWidthToolBarButton() { MenuItem[] items = new MenuItem[16];//6 for(int i=0; i< items.Length; i++) { items[i] = new MenuItem(i.ToString());// items[i].MeasureItem += new MeasureItemEventHandler(GE_MeasureItem); items[i].DrawItem +=new DrawItemEventHandler(PenWidthMenu_DrawItem); items[i].Click +=new EventHandler(PenWidthMenu_Click); items[i].OwnerDraw = true; } this.muPenWidth.MenuItems.AddRange(items); this.selectedPenWidthMenuItem = items[0]; this.selectedPenWidthMenuItem.Checked = true; } private void GE_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 20; e.ItemWidth = 80;//(int)stringSize.Width; } /// /// OwnerDraw PenWidth toolBar button menu /// /// /// private void PenWidthMenu_DrawItem(object sender, DrawItemEventArgs e) { Point pt1 = new Point(e.Bounds.X+6,e.Bounds.Y+e.Bounds.Height/2); Point pt2 = new Point(e.Bounds.Right-6,pt1.Y); MenuItem item = sender as MenuItem; using(Pen p = new Pen(Color.Black,item.Index+1)) { e.Graphics.DrawLine(p,pt1,pt2); } if(item.Checked) { Rectangle r = e.Bounds; r.Inflate(-4,0); e.Graphics.DrawRectangle(Pens.Red,r); } } private void PenWidthMenu_Click(object sender, EventArgs e) { MenuItem item = sender as MenuItem; if(item == this.selectedPenWidthMenuItem) return; this.selectedPenWidthMenuItem.Checked = false; this.selectedPenWidthMenuItem = item; this.selectedPenWidthMenuItem.Checked = true; DrawEnvMgr.Instance.PenWidth = item.Index +1; } //Assigns an image to the button from the image list private void UpdateColorBtnImage(Color color) { int imageIndex = tlBtnColor.ImageIndex; Image image = this.GE_imageList.Images[imageIndex]; using(Graphics g = Graphics.FromImage(image)) { using(SolidBrush b = new SolidBrush(color)) { g.FillRectangle(b,new Rectangle(2,11,12,4)); } } this.GE_imageList.Images[imageIndex]=image; tlBtnColor.ImageIndex = 0; tlBtnColor.ImageIndex = imageIndex; } // Shows the color dialog box and gets the color selection of the user private void tlBtnColor_Click() { ColorDialog dlg = new ColorDialog(); // instantiating new color dialog box dlg.Color = DrawEnvMgr.Instance.Color; //assigning the DrawEnvMgr.Instance.Color to the dialog if(DialogResult.OK == dlg.ShowDialog()) { DrawEnvMgr.Instance.Color = dlg.Color; UpdateColorBtnImage(dlg.Color); //updating the image with the color selected by user in the dialog box } } // select button is clicked private void tlBtnSelect_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Select);//Set SelectDrawTool as active } // line button is clicked private void tlBtnLine_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Line);//Set LineDrawTool as active } // lines button is clicked private void tlBtnLines_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Lines);//Set LineDrawTool as active } // freehand button is clicked private void tlBtnFreehand_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Freehand);//Set FreehandDrawTool as active } // erase button is clicked private void tlBtnErase_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Erase);//Set SelectDrawTool as active } // frame rectangle button is clicked private void tlBtnFrameRect_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FrameRect);//Set FrameRectDrawTool as active } // solid button is clicked private void tlBtnFillRect_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FillRect);//Set FillRectDrawTool as active } // frame ellipse button is clicked private void tlBtnFrameEllipse_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FrameEllipse);//Set FrameEllipseDrawTool as active } // solid ellipse button is clicked private void tlBtnFillEllipse_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.FillEllipse);//Set FillEllipseDrawTool as active } // sets the insert image as the active tool private void tlBtnImage_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Image);//Set FillEllipseDrawTool as active } // sets the insert text as the active tool private void tlBtnText_Click() { GraDrawToolMgr.Instance.SetActiveTool(GraDrawType.Text);//Set FillEllipseDrawTool as active } // cut button is clicked private void tlBtnCut_Click( ) { SelectDrawTool.Instance.Cut();//cut operation } // move button is clicked private void tlBtnMove_Click( ) { // to be added } // zoom in button is clicked private void tlBtnZoomIn_Click() { this.mainView.ScaleView(1.2f);//Zoom in 1.2 times OnViewZoomChanged(); } // zoom out button is clicked private void tlBtnZoomOut_Click() { this.mainView.ScaleView(0.8f);//Zoom out 0.8 time OnViewZoomChanged(); } private void OnViewZoomChanged() { float scale = this.mainView.ViewMatrix.Elements[0]; string text = scale.ToString("p0"); this.sbPanelViewScale.Text = text; } // zoom resume button is clicked private void tlBtnZoomResume_Click() { this.mainView.ResetScale();//Resume to original size OnViewZoomChanged(); } // copy button is clicked private void tlBtnCopy_Click( ) { SelectDrawTool.Instance.Copy(); } // paste button is clicked // private void tlBtnPaste_Click( ) // { // // } // undo button is clicked private void tlBtnUndo_Click( ) { GraEditStackMgr.Instance.Undo();//Undo operation if(Canvas.Instance.GraList.Count == 0) { this.tlBtnUndo.Enabled = false; this.menuUndo.Enabled = false; } if(GraEditStackMgr.Instance.GraRedoList.Count > 0) { this.tlBtnRedo.Enabled = true; this.menuRedo.Enabled = true; } } // redo button is clicked private void tlBtnRedo_Click( ) { GraEditStackMgr.Instance.Redo();//Redo operation if(GraEditStackMgr.Instance.GraRedoList.Count == 0) { this.tlBtnRedo.Enabled = false; this.menuRedo.Enabled = false; } if(Canvas.Instance.GraList.Count > 0) { this.tlBtnUndo.Enabled = true; this.menuUndo.Enabled = true; } } private void InitEditStackMgr() { this.tlBtnUndo.Enabled = false; this.tlBtnRedo.Enabled = false; this.menuRedo.Enabled = false; this.menuUndo.Enabled = false; GraEditStackMgr.Instance.Clear(); GraDrawTool tool = GraDrawToolMgr.Instance.ActiveDrawTool; if(tool != null) tool.IsActive = false; } // new file button is clicked private void tlBtnNew_Click() { if(!this.SaveFile(true)) return; Canvas.Instance.Close(); NewCanvasCfg dlg = new NewCanvasCfg(); dlg.Text ="Create New Canvas"; if(DialogResult.OK != dlg.ShowDialog()) return; SelectDrawTool.Instance.IsActive = false; Canvas.Instance.Init(null,dlg.CanvasSize,dlg.CanvasBackColor); InitEditStackMgr(); Canvas.Instance.Update(); } // open file button is clicked private void tlBtnOpen_Click() { if(!Canvas.Instance.Open()) return; SelectDrawTool.Instance.IsActive = false; InitEditStackMgr(); } // save file button is clicked private void tlBtnSave_Click() { this.SaveFile(false); } private bool SaveFile(bool isNeedWarning) { if(!Canvas.Instance.IsModified) return true; if(isNeedWarning) { DialogResult r = MessageBox.Show(this,"The file has been modified,do you need save it?","Warning", MessageBoxButtons.YesNoCancel); if( r == DialogResult.Cancel) return false; if(r == DialogResult.No) return true; } SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = this.fileFilter; dlg.RestoreDirectory = true ; if(Canvas.Instance.Name == null || Canvas.Instance.Name.Length == 0) { dlg.FilterIndex = 1 ; if(dlg.ShowDialog() == DialogResult.OK) { Canvas.Instance.Name = dlg.FileName; this.recentFilesMgr.FilesList.Insert(0,Canvas.Instance.Name); } else return false; } else if(!Canvas.Instance.IsSavedOnce) { dlg.FileName = Canvas.Instance.Name; dlg.FilterIndex = GetFilterIndexByFileName(dlg.FileName); if(dlg.ShowDialog() == DialogResult.OK) { Canvas.Instance.Name = dlg.FileName; this.recentFilesMgr.FilesList.Insert(0,Canvas.Instance.Name); } else return false; } Canvas.Instance.Save(); return true; } private string fileFilter ="Bitmap files (*.bmp)|*.bmp|Jpg files (*.jpg)|*.jpg|Gif files (*.gif)|*.gif" ; private int GetFilterIndexByFileName(string fileName) { string ext = Path.GetExtension(fileName); if(ext == ".bmp") return 1; else if(ext ==".jpg") return 2; else if(ext ==".5gif") return 3; else return 1; } // pop-up menu is clicked private void pasteMenuItem_Click(object sender, System.EventArgs e) { //Console.WriteLine("{0} {1}",pt.X,pt.Y); SelectDrawTool.Instance.Paste();//paste operation } //Pop-up menu private void contextMenu1_Popup(object sender, System.EventArgs e) { this.mainView.contextMenu1_Popup(sender,e);//Get the click item in pop-up menu // Point pt = Cursor.Position; // pt = this.PointToClient(pt); // SelectDrawTool.Instance.ContextMenuMousePos = pt; } //Main menu items //Exit private void menuExit_Click(object sender, System.EventArgs e) { //Application.Exit(); this.Close(); } //Undo private void menuUndo_Click(object sender, System.EventArgs e) { this.tlBtnUndo_Click(); } //Open private void menuOpen_Click(object sender, System.EventArgs e) { this.tlBtnOpen_Click(); } //New private void menuNew_Click(object sender, System.EventArgs e) { this.tlBtnNew_Click(); } //Save as private void menuSaveAs_Click(object sender, System.EventArgs e) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = this.fileFilter; //dlg.FilterIndex = 1 ; dlg.RestoreDirectory = true ; dlg.FileName = Canvas.Instance.Name; dlg.FilterIndex = GetFilterIndexByFileName(dlg.FileName); if(dlg.ShowDialog() == DialogResult.OK) { Canvas.Instance.Name = dlg.FileName; this.recentFilesMgr.FilesList.Insert(0,Canvas.Instance.Name); Canvas.Instance.Save(); } } //Save private void menuSave_Click(object sender, System.EventArgs e) { this.tlBtnSave_Click(); } //Redo private void menuRedo_Click(object sender, System.EventArgs e) { this.tlBtnRedo_Click(); } //Copy private void menuCopy_Click(object sender, System.EventArgs e) { this.tlBtnCopy_Click(); } //Cut private void menuCut_Click(object sender, System.EventArgs e) { this.tlBtnCut_Click(); } // Paste private void menuPaste_Click(object sender, System.EventArgs e) { // this.tlBtnPaste_Click(); } // Zoom In private void menuZoomIn_Click(object sender, System.EventArgs e) { this.tlBtnZoomIn_Click(); } //ZoomOut private void menuZoomOut_Click(object sender, System.EventArgs e) { this.tlBtnZoomOut_Click(); } //Resume private void menuResume_Click(object sender, System.EventArgs e) { this.tlBtnZoomResume_Click(); } // Assigns the pen width to the DrawEnvMgr.Instance.PenWidth from the selection in the combo box // private void cboPenWidth_SelectedIndexChanged(object sender, EventArgs e) // { // int penWidth = (int)this.cboPenWidth.SelectedItem; // DrawEnvMgr.Instance.PenWidth = penWidth; // } //Gets the background color for the image from the user using Color DialogBox private void menuItemCanvasBackColor_Click(object sender, System.EventArgs e) { ColorDialog dlg = new ColorDialog(); dlg.Color = Canvas.Instance.BackColor; if(DialogResult.OK == dlg.ShowDialog()) { foreach(GraElement gra in Canvas.Instance.GraList) { if(gra is EraseLinesGra) { gra.PenExt.Color = dlg.Color; } if(gra is EraseRectGra) { gra.PenExt.Color = dlg.Color; gra.BrushExt.Color = dlg.Color; } } Canvas.Instance.BackColor = dlg.Color; } } // Shows the help Dialog box // private void menuHelp_Click(object sender, System.EventArgs e) // { // // // } private void GE_toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { ToolBarButton b = e.Button;//clicked Toolbar button if(b != this.tlBtnText) TextDrawTool.Instance.EndTextEditing(true); if(b == this.tlBtnNew) // new image button is clicked tlBtnNew_Click(); else if(b == this.tlBtnOpen) // open an existing image button is clicked tlBtnOpen_Click(); else if(b == this.tlBtnSave) // save the current image button is clicked tlBtnSave_Click(); else if(b == this.tlBtnUndo)//Undo button is clicked tlBtnUndo_Click(); else if(b == this.tlBtnRedo)//Redo button is clicked tlBtnRedo_Click(); else if(b == this.tlBtnColor) tlBtnColor_Click(); else if(b == this.tlBtnFont) tlBtnFont_Click(); else if(b == this.tlBtnCut)//Cut button is clicked tlBtnCut_Click( ); // else if(b == this.tlBtnMove)//Move button is clicked // tlBtnMove_Click( ); else if(b == this.tlBtnCopy)//Copy button is clicked tlBtnCopy_Click( ); // else if(b == this.tlBtnPaste)//Paste button is clicked // tlBtnPaste_Click( ); else if(b == this.tlBtnSelect)//Select button is clicked tlBtnSelect_Click(); } private void menuView_Popup(object sender, System.EventArgs e) { menuToolbar.MenuItems.Clear(); foreach (Control c in _toolBarManager.GetControls()) { ToolBarDockHolder holder = _toolBarManager.GetHolder(c); MenuItem mi = new MenuItem(holder.ToolbarTitle, new EventHandler(this.menuToolbar_Click)); mi.Checked = holder.Visible; menuToolbar.MenuItems.Add(mi); } } private void GE_Load(object sender, System.EventArgs e) { } private void menuToolbar_Click(object sender, System.EventArgs e) { MenuItem mi = sender as MenuItem; ToolBarDockHolder holder = _toolBarManager.GetHolder(mi.Text); _toolBarManager.ShowControl(holder.Control, !holder.Control.Visible); } private void menuColorToolbox_Click(object sender, System.EventArgs e) { tlBtnColor_Click(); } private void menuColorSettings_Click(object sender, System.EventArgs e) { tlBtnColor_Click(); } private void menuToolbar_Click_1(object sender, System.EventArgs e) { MenuItem mi = sender as MenuItem; ToolBarDockHolder holder = _toolBarManager.GetHolder(mi.Text); _toolBarManager.ShowControl(holder.Control, !holder.Control.Visible); } private void menuAboutGE_Click(object sender, System.EventArgs e) { AboutDialog dlg = new AboutDialog(); dlg.ShowDialog(); } private void printPreviewDialog1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { } private void menuPrintPreview_Click(object sender, System.EventArgs e) { this.printPreviewDialog1.ShowDialog(); } private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { } private void printDocument1_EndPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { //e.p try { Graphics g = e.Graphics; Region r = new Region(new Rectangle(new Point(0,0),Canvas.Instance.Size)); Region old = g.Clip; g.Clip = r; ArrayList list = Canvas.Instance.GraList; foreach(GraElement gra in list) { if(gra is EraseLinesGra) { gra.PenExt.Color = Color.White; gra.Draw(g); gra.PenExt.Color = Canvas.Instance.BackColor; } else if(gra is EraseRectGra) { gra.PenExt.Color = Color.White; gra.BrushExt.Color = Color.White; gra.Draw(g); gra.PenExt.Color = Canvas.Instance.BackColor; gra.BrushExt.Color = Canvas.Instance.BackColor; } else gra.Draw(g); } g.Clip = old; } catch(Exception ex) { MessageBox.Show("Error when print document - " + ex.Message); } } private void menuPageSetting_Click(object sender, System.EventArgs e) { try { this.pageSetupDialog1.ShowDialog(); } catch(Exception ex) { MessageBox.Show("Error - " + ex.Message); } } private void menuItem2_Click(object sender, System.EventArgs e) { } private RecentFilesMgr recentFilesMgr; private void InitRecentFilesMgr() { string path = Application.StartupPath; string logFileName = path +"/RecentFiles.txt"; this.recentFilesMgr = new RecentFilesMgr(logFileName); this.recentFilesMgr.ReadRecentFiles(); if(this.recentFilesMgr.FilesList.Count == 0) return; MenuItem[] items = new MenuItem[this.recentFilesMgr.FilesList.Count]; for(int i=0; i< items.Length; i++) { items[i] = new MenuItem(this.recentFilesMgr.FilesList[i] as string); items[i].Click +=new EventHandler(RecentFileMenuItem_Click); } this.menuRecentFiles.MenuItems.AddRange(items); } private void RecentFileMenuItem_Click(object sender, EventArgs e) { MenuItem item = sender as MenuItem; if(!Canvas.Instance.OpenFile(item.Text)) return; InitEditStackMgr(); } private void GE_Closing(object sender, System.ComponentModel.CancelEventArgs e) { DialogResult r = MessageBox.Show(this,"Do you want exit?","Warning",MessageBoxButtons.OKCancel); if(r == DialogResult.Cancel) { e.Cancel = true; return; } this.tlBtnSave_Click(); Canvas.Instance.Close(); this.recentFilesMgr.SaveRecentFiles(); } private void menuStatusBar_Click(object sender, System.EventArgs e) { MenuItem item = sender as MenuItem; item.Checked = !item.Checked; this.GE_statusBar.Visible = item.Checked; } private class RecentFilesMgr { public RecentFilesMgr(string logFileName) { this.filesList = new ArrayList(); this.logFileName = logFileName; } private ArrayList filesList; public ArrayList FilesList { get { return filesList; } } private string logFileName; public void ReadRecentFiles() { FileInfo fi = new FileInfo(logFileName); if(!fi.Exists) return; StreamReader s = fi.OpenText(); string line = null; while(( line = s.ReadLine()) != null) { FileInfo f = new FileInfo(line); if(!f.Exists) continue; filesList.Add(line); if(filesList.Count == 10) break; } } public void SaveRecentFiles( ) { using (StreamWriter sw = new StreamWriter(this.logFileName,false)) { foreach(string line in this.filesList) { sw.WriteLine(line); } } } } private void GraDrawTool_ActiveStateChanged(object sender, EventArgs e) { GraDrawTool drawTool = sender as GraDrawTool; this.sbPanelTip.Text = drawTool.Tip; } private void mainView_MouseMove(object sender, MouseEventArgs e) { Point pos = new Point(e.X,e.Y);//Temporary end point pos = GraDrawTool.GetRoundPoint(pos);//Round the end point. The min mouse movement distance is 6. string text =string.Format("X= {0} Y= {1}",pos.X,pos.Y); this.sbPanelMousePos.Text = text; } private void canvas_Modified(object sender, EventArgs e) { Canvas c = Canvas.Instance; string title = "Graphic Editor -- "; if(c.Name != null && c.Name.Length >0) title += c.Name; else title += "Unnamed.bmp"; if(c.IsModified) title +="*"; this.Text = title; if(Canvas.Instance.GraList.Count > 0) { this.tlBtnUndo.Enabled = true; this.menuUndo.Enabled = true; } } private void selectTool_StateChanged(object sender, EventArgs e) { SelectDrawTool tool = sender as SelectDrawTool; if(tool.SelectRectGra != null) { this.tlBtnCut.Enabled = true; this.tlBtnCopy.Enabled = true; this.menuCopy.Enabled = true; this.menuCut.Enabled = true; } else { this.tlBtnCut.Enabled = false; this.tlBtnCopy.Enabled = false; this.menuCopy.Enabled = false; this.menuCut.Enabled = false; } if(tool.CopyImage != null) { this.pasteMenuItem.Enabled = true; //this.menuPaste.Enabled = true; } else { this.pasteMenuItem.Enabled = false; //this.menuPaste.Enabled = false; } } private void menuItemCanvasSize_Click(object sender, System.EventArgs e) { NewCanvasCfg dlg = new NewCanvasCfg(); dlg.Text ="Change Canvas Size"; dlg.CanvasSize = Canvas.Instance.Size; if(DialogResult.OK == dlg.ShowDialog()) { Canvas.Instance.Size = dlg.CanvasSize; Canvas.Instance.Update(); } } private void menuPrint_Click(object sender, System.EventArgs e) { try { this.printDocument1.Print(); } catch(Exception ex) { MessageBox.Show("Print file error - " + ex.Message); } } private void menuHelpIndex_Click(object sender, System.EventArgs e) { try { string s = Application.ExecutablePath; s = s.Replace("GE.exe","help.chm"); Process.Start(s); } catch(Exception e1) { MessageBox.Show(e1.Message); } } private void mainView_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { } } /// /// All the drawing in Graphical Editor is done on the canvas. /// Canvas class is used to define the drawing area. /// public class Canvas { //Construct graList to save the drawing actions protected Canvas() { this.graList = new ArrayList(); // define an arraylist with name gralist for saving all the drawing actions } //Initialize the canvas. Set name,size and background color of canvas public void Init(string name, Size size,Color backColor) { this.name = name;//Set name of canvas this.Size = size;//Set size of canvas this.backColor = backColor;//Set background color of canvas this.graList.Clear();//Clear all the elements in graList //this.mainView.AutoScrollMinSize = this.Size;//this.Size;//Set the size of mainView as canvas size this.isSavedOnce = false; this.IsModified = false; } private static Canvas _single; public static Canvas Instance { //Get canvas instance get { if( _single == null) _single = new Canvas(); return _single; } } public event EventHandler Modified; protected void OnModified() { if(Modified != null) Modified(this,EventArgs.Empty); } //Dirty flag private bool isModified; public bool IsModified { get { return this.isModified; } set { this.isModified = value; OnModified(); } } private bool isSavedOnce; public bool IsSavedOnce { get { return this.isSavedOnce; } set { this.isSavedOnce = value;} } private MainView mainView;//private Mainview variable of canvas public MainView MainView { get { return mainView; } set { mainView = value;} } public void Update()//Refresh canvas { this.mainView.UpdateView(); } private string name;//canvas name public string Name { get { return name; } set { name = value; } } private Size size;//canvas size public Size Size { get { return size; } set { size = value; this.mainView.AutoScrollMinSize = this.size;//this.Size;//Set the size of mainView as canvas size } } private Color backColor;//canvas color i.e. background color of the image public Color BackColor { get { return backColor; } set { backColor = value; this.Update(); } } private ArrayList graList;//Save drawing action on canvas public ArrayList GraList { get { return graList; } } public void AddGra(GraElement gra) { this.graList.Add(gra); this.IsModified = true; this.Update(); } public void DelGra(GraElement gra) { this.graList.Remove(gra); this.IsModified = true; this.Update(); } //Draw function of canvas public void Draw(Graphics g) { foreach(GraElement gra in graList)//Draw all the element in the graList gra.Draw(g); } public bool Open() { OpenFileDialog dlg = new OpenFileDialog(); // new open dialog box is instantiated dlg.Filter = "Image files (*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif" ; dlg.FilterIndex = 1 ; dlg.RestoreDirectory = true ; bool bRtn = false; if(dlg.ShowDialog() == DialogResult.OK) { try { bRtn = this.OpenFile(dlg.FileName); } catch(Exception ex) { MessageBox.Show("Open file error - " + ex.Message); } } return bRtn; } private FileStream canvasStream; public bool OpenFile(string fileName) { FileInfo fi = new FileInfo(fileName); if(!fi.Exists) { MessageBox.Show("Can't find this file!","Open File"); return false; } try { canvasStream = File.Open(fileName,FileMode.Open,FileAccess.ReadWrite,FileShare.None); } catch(Exception ex) { MessageBox.Show("Open File Error - " + ex.Message); } Bitmap bmp = new Bitmap(canvasStream); //fs.Close(); if(bmp != null) { Canvas.Instance.Init(fileName,bmp.Size,Color.White); ImageGra imageGra = new ImageGra(bmp,new Rectangle(new Point(0,0),bmp.Size)); Canvas.Instance.GraList.Add(imageGra);//Add to GraList Canvas.Instance.Update();//Update canvas } return true; } private ImageFormat GetImageFormatByFileName(string fileName) { string ext = Path.GetExtension(fileName); ImageFormat format = ImageFormat.Bmp; switch(ext) { case ".jpg": format =ImageFormat.Jpeg; break; case ".gif": format = ImageFormat.Gif; break; default: format = ImageFormat.Bmp; break; } return format; } public void Save() { //if(this.canvasStream == null) // return; if(this.name == null || this.name.Length == 0) { MessageBox.Show("Invalid file name!","Warning"); return; } Size s = Canvas.Instance.Size; Bitmap bmp = new Bitmap(s.Width,s.Height); Graphics gBmp = Graphics.FromImage(bmp); gBmp.Clear(Canvas.Instance.BackColor); this.Draw(gBmp); try { if(this.canvasStream != null) this.canvasStream.Close(); ImageFormat format = GetImageFormatByFileName(Canvas.Instance.Name); bmp.Save(Canvas.Instance.Name,format); bmp.Dispose(); this.IsModified = false; this.IsSavedOnce = true; this.canvasStream = File.Open(this.name,FileMode.Open,FileAccess.ReadWrite,FileShare.None); } catch(Exception ex) { MessageBox.Show("Save file error - " + ex.Message); } } public bool Close() { if(canvasStream != null) { canvasStream.Close(); canvasStream = null; } return true; } } //Redo & Undo operation public class GraEditStackMgr { private GraEditStackMgr()//construct a redo list { this.graRedoList = new ArrayList(); } private static GraEditStackMgr instance; public static GraEditStackMgr Instance { get { if(instance == null) instance = new GraEditStackMgr(); return instance; } } private ArrayList graRedoList;//Redo list public ArrayList GraRedoList { get { return graRedoList;} } public void Clear() { this.graRedoList.Clear(); } //Redo operation public void Redo() { if(this.graRedoList.Count == 0)//no undo happen return; int lastIndex = this.graRedoList.Count -1;//Get the last undo action //Save last undo action to graLast GraElement graLast = this.graRedoList[lastIndex] as GraElement; this.graRedoList.RemoveAt(lastIndex);//Remove the last undo action from redo list //Canvas.Instance.GraList.Add(graLast);//Save the last undo action to GraList //Canvas.Instance.Update();//Update canvas Canvas.Instance.AddGra(graLast); } //Undo operation public void Undo() { ArrayList graList = Canvas.Instance.GraList;//Get the GraList of Canvas if(graList.Count == 0)//No drawing action happen return; int lastIndex = graList.Count -1;//Last drawing action position in graList //Save the last drawing action to graLast GraElement graLast = graList[lastIndex] as GraElement; graList.RemoveAt(lastIndex);//Remove the last drawing action this.graRedoList.Add(graLast);//Add the last drawing action to redo list Canvas.Instance.Update();//Update canvas Canvas.Instance.IsModified = true; } } }