📄 combine.cs
字号:
// Combine.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.Xml;
using System.IO;
using System.Collections;
using System.Reflection;
using System.Diagnostics;
using System.CodeDom.Compiler;
using System.Windows.Forms;
using SharpDevelop.Tool.Function;
using SharpDevelop.Internal.Text;
using SharpDevelop.Internal.Project;
using SharpDevelop.Internal.Modules;
namespace SharpDevelop.Internal.Project {
public class Combine
{
string name = null;
string description = null;
string masterproject = null;
ArrayList projects = new ArrayList();
ArrayList filenames = new ArrayList();
public string Name {
get {
return name;
}
set {
name = value;
}
}
public string Description {
get {
return description;
}
set {
description = value;
}
}
public ISdProject MasterProject {
get {
foreach (ISdProject project in projects)
if (project.Name == masterproject)
return project;
Debug.Assert(false, "didn't find master project " + masterproject);
return null;
}
}
public string MasterProjectName {
get {
return masterproject;
}
set {
masterproject = value;
}
}
public ArrayList Projects {
get {
return projects;
}
}
public Combine()
{
}
ISdProject LoadProject(string filename)
{
SharpDevelop.Internal.Modules.Module module = ModuleManager.GetModulePerProjectFile(filename);
if (module == null) {
MessageBox.Show("Can't find language module for " + filename, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
ISdLanguageModule info = module.LanguageModule;
if (info.ProjectCreator == null) {
MessageBox.Show("Language Information module "+module.Name+" doesn't contain a projectcreator. ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
ISdProject project = info.ProjectCreator.EmptyProject;
project.LoadProject(filename);
return project;
}
public void LoadCombine(string filename)
{
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlElement root = doc.DocumentElement;
name = root.Attributes["NAME"].InnerText;
description = root.Attributes["DESCRIPTION"].InnerText;
masterproject = root["SETTINGS"]["MASTERPROJECT"].Attributes["NAME"].InnerText;
XmlNodeList nodes = root["PROJECTS"].ChildNodes;
foreach (XmlElement el in nodes)
AddProject(el.InnerText, 1);
}
public void SaveCombine(string filename)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\"?>\n<COMBINE NAME = \"" + name + "\" DESCRIPTION = \""+ description +"\">\n<SETTINGS><MASTERPROJECT NAME =\""+masterproject+"\"/></SETTINGS></COMBINE>");
XmlElement projectsnode = doc.CreateElement("PROJECTS");
foreach (string fname in filenames) {
XmlElement el = doc.CreateElement("PROJECT");
el.InnerText = fname;
projectsnode.AppendChild(el);
}
doc.DocumentElement.AppendChild(projectsnode);
doc.Save(filename);
}
public ISdProject AddProject(string filename, int ranking)
{
ISdProject project = LoadProject(filename);
projects.Add(project);
filenames.Add(filename);
return project;
}
public void SaveAllProjects()
{
for (int i = 0; i < projects.Count; ++i) {
ISdProject project = (ISdProject)projects[i];
project.SaveProject(filenames[i].ToString());
}
}
public void SaveProject(string projectname)
{
for (int i = 0; i < projects.Count; ++i) {
ISdProject project = (ISdProject)projects[i];
if (project.Name == projectname) {
project.SaveProject(filenames[i].ToString());
return;
}
}
Debug.Assert(false, "didn't find projectname, can't save project " + projectname);
}
public void SaveProject(string projectname, string filename)
{
for (int i = 0; i < projects.Count; ++i) {
ISdProject project = (ISdProject)projects[i];
if (project.Name == projectname) {
project.SaveProject(filename);
filenames[i] = filename;
return;
}
}
Debug.Assert(false, "didn't find projectname, can't save project " + projectname);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -