⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newfiledialog.cs

📁 c#精彩编程百例(源代码)
💻 CS
字号:
//  NewFileDialog.cs
//  Copyright (C) 2001 Mike Krueger
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Reflection;
using System.Resources;
using System.Windows.Forms;
using System.Xml;
using System.IO;


using SharpDevelop.Gui.Components;
using SharpDevelop.Gui;
using SharpDevelop.Gui.Window;
using SharpDevelop.Tool.Data;
using SharpDevelop.Tool.Function;
using SharpDevelop.Tool.Text;
using SharpDevelop.Internal.Templates;

namespace SharpDevelop.Gui.Dialogs {
	
	/// <summary>
	///  This class is for creating a new "empty" file
	/// </summary>
	public class NewFileDialog : Form
	{
		Container components = new Container();
		
		MainWindow window;
		
		ToolTip     tooltip;
		
		RadioButton smalliconbutton = new RadioButton();
		RadioButton largeiconbutton = new RadioButton();
		
		Label label1            =  new Label();
		Label label2            =  new Label();
		Label label3            =  new Label();
		Label descriptionlabel  =  new Label();
		
		TreeView categorytree   = new TreeView();
		ListView templateview   = new ListView();
		
		Button helpbutton   = new Button();
		Button cancelbutton = new Button();
		Button openbutton   = new Button();
		
		ArrayList alltemplates = new ArrayList();
		ArrayList categories   = new ArrayList();
		Hashtable icons        = new Hashtable();
		
		
		public NewFileDialog(MainWindow window)
		{
			try {
				InitializeComponent();
				this.window = window;
				this.Owner  = window;
				InitializeTemplates();
				
				InitializeView();
				categorytree.Select();
				
				StartPosition = FormStartPosition.CenterParent;
				Icon = null;
			} catch (Exception e) {
				Console.WriteLine(e.ToString());
			}
		}
		
		void InitializeView()
		{
			ImageList smalllist = new ImageList();
			ImageList imglist = new ImageList();
			
			imglist.ImageSize    = new Size(32, 32);
			smalllist.ImageSize  = new Size(16, 16);
			
			smalllist.Images.Add(Resource.GetBitmap("Icons.32x32.EmptyFileIcon"));
			imglist.Images.Add(Resource.GetBitmap("Icons.32x32.EmptyFileIcon"));
			
			int i = 0;
			Hashtable tmp = new Hashtable(icons);
			foreach (DictionaryEntry entry in icons) {
				Bitmap bitmap = FileUtility.GetBitmap(entry.Key.ToString());
				if (bitmap != null) {
					smalllist.Images.Add(bitmap);
					imglist.Images.Add(bitmap);
					tmp[entry.Key] = ++i;
				} else 
					Console.WriteLine("can't load bitmap " + entry.Key.ToString() + " using default");
			}
			
			icons = tmp;
			foreach (TemplateItem item in alltemplates) {
				if (item.Template.Icon == null)
					item.ImageIndex = 0;
				else
					item.ImageIndex = (int)icons[item.Template.Icon];
			}
			
			templateview.LargeImageList = imglist;
			templateview.SmallImageList = smalllist;
			
			InsertCategories(null, categories);
			if (categories.Count > 0)
				categorytree.SelectedNode = (TreeNode)categorytree.Nodes[0];
			
		}
		
		void InsertCategories(TreeNode node, ArrayList catarray)
		{
			foreach (Category cat in catarray) {
				if (node == null) {
					categorytree.Nodes.Add(cat);
				} else {
					node.Nodes.Add(cat);
				}
				InsertCategories(cat, cat.Categories);
			}
		}
		
		// TODO : insert sub categories
		Category GetCategory(string categoryname)
		{
			foreach (Category category in categories) {
				if (category.Text == categoryname)
					return category;
			}
			Category newcategory = new Category(categoryname);
			categories.Add(newcategory);
			return newcategory;
		}
		
		void InitializeTemplates()
		{
			foreach (FileTemplate template in FileTemplate.FileTemplates) {
				TemplateItem titem = new TemplateItem(template);
				if (titem.Template.Icon != null)
					icons[titem.Template.Icon] = 0; // "create template icon"
				Category cat = GetCategory(titem.Template.Category);
				cat.Templates.Add(titem);
				if (cat.Templates.Count == 1)
					titem.Selected = true;
				alltemplates.Add(titem);
			}
		}
		
		// tree view event handlers
		void CategoryChange(object sender, TreeViewEventArgs e)
		{
			templateview.Items.Clear();
			if (categorytree.SelectedNode != null) {
				foreach (TemplateItem item in ((Category)categorytree.SelectedNode).Templates) {
					templateview.Items.Add(item);
				}
			}
		}
		
		void OnBeforeExpand(object sender, TreeViewCancelEventArgs e)
		{
			e.Node.ImageIndex = 1;
		}
		
		void OnBeforeCollapse(object sender, TreeViewCancelEventArgs e)
		{
			e.Node.ImageIndex = 0;
		}
		
		// list view event handlers
		void SelectedIndexChange(object sender, EventArgs e)
		{
			if (templateview.SelectedItems.Count == 1) {
				descriptionlabel.Text = ((TemplateItem)templateview.SelectedItems[0]).Template.Description;
				openbutton.Enabled = true;
			} else {
				descriptionlabel.Text = "";
				openbutton.Enabled = false;
			}
		}
		
		// button events
		
		void CheckedChange(object sender, EventArgs e)
		{
			templateview.View = smalliconbutton.Checked ? View.List : View.LargeIcon;
		}
		
		void OpenEvent(object sender, EventArgs e)
		{
			if (templateview.SelectedItems.Count == 1) {
				TemplateItem item = (TemplateItem)templateview.SelectedItems[0];
				
				WindowContent content = WindowContent.Text;
				
				if (item.Template.LanguageName != null) 
					content = WindowContent.CSFile;
				
				foreach (FileDescriptionTemplate newfile in item.Template.Files) {
					ContentWindow twindow = new ContentWindow(window, content, null, item.Template.LanguageName);
					twindow.DefaultName   = newfile.Name;
					twindow.Closing += new CancelEventHandler(window.WindowClosingEvt);
					twindow.Show();
					
					window.OpenFileTab.SelectedTab = twindow.TabItem; // may be unnecessary in future versions
					
					twindow.Dirty = false;
					if (twindow.HasTextArea) {
	//					if (item.Syntax != null)
	//						twindow.TextArea.TextAreaPainter.Buffer.SetHighlightingTo(item.Syntax);
						
						if (newfile.Content != null) {
							twindow.TextArea.TextAreaPainter.Buffer.Text = StringParser.Parse(newfile.Content, new string[,] {});
							twindow.TextArea.TextAreaPainter.Refresh();
						}
					}
					DialogResult = DialogResult.OK;
				}
			}
		}
		
		/// <summary>
		///  Represents a category
		/// </summary>
		internal class Category : TreeNode
		{
			ArrayList categories = new ArrayList();
			ArrayList templates  = new ArrayList();
			string name;
			
			public Category(string name) : base(name)
			{
				this.name = name;
				ImageIndex = 1;
			}
			
			public string Name {
				get {
					return name;
				}
			}
			public ArrayList Categories {
				get {
					return categories;
				}
			}
			public ArrayList Templates {
				get {
					return templates;
				}
			}
		}
		
		/// <summary>
		///  Represents a new file template
		/// </summary>
		internal class TemplateItem : ListViewItem
		{
			FileTemplate template;

			public TemplateItem(FileTemplate template) : base(template.Name)
			{
				this.template = template;
				ImageIndex    = 0;
			}
			
			public FileTemplate Template {
				get {
					return template;
				}
			}
		}
		
		void InitializeComponent()
		{
			tooltip = new ToolTip(components);
			tooltip.SetToolTip(largeiconbutton, Resource.GetString("Global.LargeIconToolTip"));
			tooltip.SetToolTip(smalliconbutton, Resource.GetString("Global.SmallIconToolTip"));
			tooltip.Active = true;
			
			descriptionlabel.Location    = new Point(8, 262);
			descriptionlabel.Text        = "";
			descriptionlabel.Size        = new Size(496, 18);
			descriptionlabel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
			descriptionlabel.TabIndex    = 9;
			
			label1.Location = new Point(8, 12);
			label1.Text     = Resource.GetString("Dialog.NewFile.CategoryText"); 
			label1.Size     = new Size(152, 16);
			label1.TabIndex = 4;
			
			label2.Location = new Point(224, 12);
			label2.Text     = Resource.GetString("Dialog.NewFile.TemplateText");
			label2.Size     = new Size(96, 16);
			label2.TabIndex = 6;
			
			// this is my "boguslabel" (for the single line in the dialog)
			label3.Location    = new Point(8, 290);
			label3.Size        = new Size(496, 2);
			label3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
			label3.TabIndex    = 10;
			
			openbutton.Location     = new Point(253, 300);
			openbutton.DialogResult = DialogResult.OK;
			openbutton.Size         = new Size(75, 23);
			openbutton.TabIndex     = 0;
			openbutton.Text         = Resource.GetString("Global.CreateButtonText");
			openbutton.Click       += new EventHandler(OpenEvent);
			
			cancelbutton.Location     = new Point(341, 300);
			cancelbutton.DialogResult = DialogResult.Cancel;
			cancelbutton.Size         = new Size(75, 23);
			cancelbutton.TabIndex     = 1;
			cancelbutton.Text         = Resource.GetString("Global.CancelButtonText");
			
			helpbutton.Location = new Point(429, 300);
			helpbutton.Size     = new Size(75, 23);
			helpbutton.TabIndex = 2;
			helpbutton.Text     = Resource.GetString("Global.HelpButtonText");
			
			largeiconbutton.Location   = new Point(455, 2);
			largeiconbutton.Size       = new Size(24, 24);
			largeiconbutton.Appearance = Appearance.Button;
			largeiconbutton.TabIndex   = 11;
			largeiconbutton.Checked    = true;
			largeiconbutton.CheckedChanged += new EventHandler(CheckedChange);
			
			smalliconbutton.Location   = new Point(480, 2);
			smalliconbutton.Size       = new Size(24, 24);
			smalliconbutton.Appearance = Appearance.Button;
			smalliconbutton.TabIndex   = 12;
			smalliconbutton.CheckedChanged += new EventHandler(CheckedChange);
			
			categorytree.Location = new Point(8, 28);
			categorytree.Size     = new Size(215, 232);
			categorytree.HideSelection  = false;
			categorytree.TabIndex = 3;
			categorytree.Sorted = true;
			categorytree.AfterSelect    += new TreeViewEventHandler(CategoryChange);
			categorytree.BeforeSelect   += new TreeViewCancelEventHandler(OnBeforeExpand);
			categorytree.BeforeExpand   += new TreeViewCancelEventHandler(OnBeforeExpand);
			categorytree.BeforeCollapse += new TreeViewCancelEventHandler(OnBeforeCollapse);
			
			ImageList imglist = new ImageList();
			imglist.Images.Add(Resource.GetBitmap("Icons.16x16.OpenFolderBitmap"));
			imglist.Images.Add(Resource.GetBitmap("Icons.16x16.ClosedFolderBitmap"));
			
			categorytree.ImageList = imglist;
			
			templateview.Location     = new Point(224, 28);
			templateview.Size         = new Size(280, 232);
			templateview.ForeColor    = SystemColors.WindowText;
			templateview.HideSelection  = false;
			templateview.TabIndex     = 5;
			templateview.MultiSelect  = false;
			templateview.SelectedIndexChanged += new EventHandler(SelectedIndexChange);
			templateview.DoubleClick          += new EventHandler(OpenEvent);
				
			this.Text              = Resource.GetString("Dialog.NewFile.DialogName");
			this.MaximizeBox       = false;
			this.StartPosition     = FormStartPosition.CenterParent;
			this.AutoScaleBaseSize = new Size(5, 13);
			this.cancelbutton      = cancelbutton;
			this.FormBorderStyle       = FormBorderStyle.FixedDialog;
			this.ShowInTaskbar     = false;
			this.AcceptButton      = openbutton;
			this.MinimizeBox       = false;
			this.ClientSize        = new Size(514, 327);
			
			this.Controls.Add(label1);
			this.Controls.Add(label2);
			this.Controls.Add(label3);
			this.Controls.Add(descriptionlabel);
			
			this.Controls.Add(templateview);
			this.Controls.Add(categorytree);
			
			this.Controls.Add(smalliconbutton);
			this.Controls.Add(largeiconbutton);
			
			this.Controls.Add(openbutton);
			this.Controls.Add(cancelbutton);
			this.Controls.Add(helpbutton);
		}
		
		public override void Dispose() 
		{
			base.Dispose();
			components.Dispose();
		}
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -