📄 newfiledialog.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 + -