[mapguide-commits] r6707 - in trunk/Tools/Maestro: . Maestro Maestro.AddIn.ExtendedObjectModels Maestro.AddIn.FdoToolbox Maestro.AddIn.GeoRest Maestro.AddIn.Local Maestro.AddIn.Scripting Maestro.AddIn.Scripting/Commands Maestro.AddIn.Scripting/UI Maestro.AddInManager Maestro.AddInManager/Properties Maestro.Base Maestro.Base/UI/Preferences Thirdparty/SharpDevelop/ICSharpCode.Core.WinForms Thirdparty/SharpDevelop/ICSharpCode.TextEditor
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Tue May 29 06:59:30 PDT 2012
Author: jng
Date: 2012-05-29 06:59:28 -0700 (Tue, 29 May 2012)
New Revision: 6707
Added:
trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.Designer.cs
trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.cs
trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.resx
trunk/Tools/Maestro/Maestro.AddInManager/
trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.cs
trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.resx
trunk/Tools/Maestro/Maestro.AddInManager/AddInControl.cs
trunk/Tools/Maestro/Maestro.AddInManager/AddInManger.addin
trunk/Tools/Maestro/Maestro.AddInManager/Commands.cs
trunk/Tools/Maestro/Maestro.AddInManager/InstallableAddIn.cs
trunk/Tools/Maestro/Maestro.AddInManager/Maestro.AddInManager.csproj
trunk/Tools/Maestro/Maestro.AddInManager/ManagerForm.cs
trunk/Tools/Maestro/Maestro.AddInManager/Properties/
trunk/Tools/Maestro/Maestro.AddInManager/Properties/AssemblyInfo.cs
trunk/Tools/Maestro/Maestro.AddInManager/Strings.Designer.cs
trunk/Tools/Maestro/Maestro.AddInManager/Strings.resx
Modified:
trunk/Tools/Maestro/Maestro.AddIn.ExtendedObjectModels/Manifest.addin
trunk/Tools/Maestro/Maestro.AddIn.FdoToolbox/Manifest.addin
trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin
trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj
trunk/Tools/Maestro/Maestro.AddIn.Local/Manifest.addin
trunk/Tools/Maestro/Maestro.AddIn.Scripting/Commands/StartupCommand.cs
trunk/Tools/Maestro/Maestro.AddIn.Scripting/Maestro.AddIn.Scripting.csproj
trunk/Tools/Maestro/Maestro.AddIn.Scripting/Manifest.addin
trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin
trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs
trunk/Tools/Maestro/Maestro/Maestro_All.sln
trunk/Tools/Maestro/Maestro/changelog.txt
trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj
trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj
Log:
#2012: Incorporate an AddIn Manager into Maestro. This is to facilitate installation and management of 3rd party or out-of-band Maestro AddIns. This is a verbatim copy of the one from FDO Toolbox, which in turn is a verbatim copy of the SharpDevelop one.
#2010: Expose preference to toggle visibility of the IronPython console
Modified: trunk/Tools/Maestro/Maestro/Maestro_All.sln
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro_All.sln 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro/Maestro_All.sln 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,7 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
-# SharpDevelop 4.2.0.8783
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro", "Maestro.csproj", "{E0C36475-2B70-4F6D-ACE0-8943167806DC}"
ProjectSection(ProjectDependencies) = postProject
{B3A2B816-9F41-4857-A111-09D2DF2550D6} = {B3A2B816-9F41-4857-A111-09D2DF2550D6}
@@ -138,6 +137,8 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "..\Thirdparty\SharpDevelop\ICSharpCode.TextEditor\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro.AddInManager", "..\Maestro.AddInManager\Maestro.AddInManager.csproj", "{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -316,10 +317,14 @@
{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C75532C4-765B-418E-B09B-46D36B2ABDB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.Build.0 = Release|Any CPU
- {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Debug|Any CPU.Build.0 = Debug|x86
+ {9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Release|Any CPU.ActiveCfg = Release|x86
+ {9CC51643-37D6-4B8F-A0EA-E7606AA561EB}.Release|Any CPU.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Modified: trunk/Tools/Maestro/Maestro/changelog.txt
===================================================================
--- trunk/Tools/Maestro/Maestro/changelog.txt 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro/changelog.txt 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,5 +1,6 @@
5.0 Beta 2
----------
+ - New AddIn Manager to manage and install thirdparty add-ins for Maestro
- Upgrade SharpDevelop Core to 4.2
- Revamped XML editor with ICSharpCode.TextEditor control
- MgCooker tiling classes now part of the MaestroAPI
Modified: trunk/Tools/Maestro/Maestro.AddIn.ExtendedObjectModels/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.ExtendedObjectModels/Manifest.addin 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.ExtendedObjectModels/Manifest.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,7 +1,7 @@
<AddIn name="Maestro.AddIn.ExtendedObjectModels"
author="Jackie Ng"
url="http://trac.osgeo.org/mapguide/wiki/maestro"
- description="MapGuide Maestro AddIn to support extended versions of the core MapGuide resource schemas"
+ description="MapGuide Maestro AddIn to support additional versions of the core MapGuide resource schemas"
addInManagerHidden="preinstalled">
<Manifest>
Modified: trunk/Tools/Maestro/Maestro.AddIn.FdoToolbox/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.FdoToolbox/Manifest.addin 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.FdoToolbox/Manifest.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,7 +1,7 @@
<AddIn name="Maestro.AddIn.FdoToolbox"
author="Jackie Ng"
url="http://trac.osgeo.org/mapguide/wiki/maestro"
- description="FDO Toolbox AddIn for MapGuide Maestro"
+ description="AddIn for MapGuide Maestro for performing feature manipulation operations"
addInManagerHidden="preinstalled">
<Manifest>
Modified: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,7 +1,7 @@
<AddIn name="Maestro.AddIn.GeoRest"
author="Jackie Ng"
url="http://trac.osgeo.org/mapguide/wiki/maestro"
- description="GeoRest AddIn for MapGuide Maestro"
+ description="MapGuide Maestro AddIn for communicating with and configuring a GeoRest server"
addInManagerHidden="preinstalled">
<Manifest>
Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.Local/Maestro.AddIn.Local.csproj 2012-05-29 13:59:28 UTC (rev 6707)
@@ -333,6 +333,7 @@
</Content>
<Content Include="Manifest.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ <SubType>Designer</SubType>
</Content>
<Content Include="MapGuideDesktopUnmanagedApi.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Local/Manifest.addin 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.Local/Manifest.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,7 +1,7 @@
<AddIn name="Maestro.AddIn.Local"
author="Jackie Ng"
url="http://trac.osgeo.org/mapguide/wiki/maestro"
- description="MapGuide Maestro AddIn to support local repository"
+ description="MapGuide Maestro AddIn to support authoring resources in a local mg-desktop repository"
addInManagerHidden="preinstalled">
<Manifest>
Modified: trunk/Tools/Maestro/Maestro.AddIn.Scripting/Commands/StartupCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Scripting/Commands/StartupCommand.cs 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.Scripting/Commands/StartupCommand.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -7,6 +7,8 @@
using Maestro.AddIn.Scripting.UI;
using Maestro.Shared.UI;
using Maestro.Base.Services;
+using Props = ICSharpCode.Core.PropertyService;
+using Maestro.Base.UI.Preferences;
namespace Maestro.AddIn.Scripting.Commands
{
@@ -20,7 +22,8 @@
Workbench.WorkbenchInitialized += (sender, e) =>
{
var mgr = ServiceRegistry.GetService<ViewContentManager>();
- mgr.OpenContent<IronPythonRepl>(ViewRegion.Bottom);
+ if (Props.Get(IronPythonPreferences.ShowIronPythonConsole, true))
+ mgr.OpenContent<IronPythonRepl>(ViewRegion.Bottom);
};
}
}
Modified: trunk/Tools/Maestro/Maestro.AddIn.Scripting/Maestro.AddIn.Scripting.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Scripting/Maestro.AddIn.Scripting.csproj 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.Scripting/Maestro.AddIn.Scripting.csproj 2012-05-29 13:59:28 UTC (rev 6707)
@@ -78,6 +78,12 @@
<Compile Include="Services\ScriptingService.cs" />
<Compile Include="Services\ScriptingClasses.cs" />
<Compile Include="UI\IPEWrapper.cs" />
+ <Compile Include="UI\IronPythonPreferences.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="UI\IronPythonPreferences.Designer.cs">
+ <DependentUpon>IronPythonPreferences.cs</DependentUpon>
+ </Compile>
<Compile Include="UI\IronPythonRepl.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -126,6 +132,9 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
+ <EmbeddedResource Include="UI\IronPythonPreferences.resx">
+ <DependentUpon>IronPythonPreferences.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="UI\IronPythonRepl.resx">
<DependentUpon>IronPythonRepl.cs</DependentUpon>
</EmbeddedResource>
Modified: trunk/Tools/Maestro/Maestro.AddIn.Scripting/Manifest.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Scripting/Manifest.addin 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.AddIn.Scripting/Manifest.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -1,7 +1,7 @@
<AddIn name="Maestro.AddIn.Scripting"
author="Jackie Ng"
url="http://trac.osgeo.org/mapguide/wiki/maestro"
- description="Scripting AddIn for MapGuide Maestro"
+ description="MapGuide Maestro AddIn for providing scripting/automation capabilities via the IronPython scripting language"
addInManagerHidden="preinstalled">
<Manifest>
@@ -18,6 +18,11 @@
<Class id="Startup" class="Maestro.AddIn.Scripting.Commands.StartupCommand" />
</Path>
+ <!-- Registered preference tabs -->
+ <Path name="/Maestro/Preferences">
+ <Class id="IPyPrefs" class="Maestro.AddIn.Scripting.UI.IronPythonPreferences" />
+ </Path>
+
<!-- Application-level services -->
<Path name="/Maestro/ApplicationServices">
<Class id="ScriptingService" class="Maestro.AddIn.Scripting.Services.ScriptingService" />
Added: trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.Designer.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.Designer.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,60 @@
+namespace Maestro.AddIn.Scripting.UI
+{
+ partial class IronPythonPreferences
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.chkShowOnStartup = new System.Windows.Forms.CheckBox();
+ this.SuspendLayout();
+ //
+ // chkShowOnStartup
+ //
+ this.chkShowOnStartup.AutoSize = true;
+ this.chkShowOnStartup.Location = new System.Drawing.Point(22, 21);
+ this.chkShowOnStartup.Name = "chkShowOnStartup";
+ this.chkShowOnStartup.Size = new System.Drawing.Size(105, 17);
+ this.chkShowOnStartup.TabIndex = 0;
+ this.chkShowOnStartup.Text = "Show on Startup";
+ this.chkShowOnStartup.UseVisualStyleBackColor = true;
+ //
+ // IronPythonPreferences
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.chkShowOnStartup);
+ this.Name = "IronPythonPreferences";
+ this.Size = new System.Drawing.Size(193, 66);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.CheckBox chkShowOnStartup;
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,84 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Props = ICSharpCode.Core.PropertyService;
+using Maestro.Base.UI.Preferences;
+
+namespace Maestro.AddIn.Scripting.UI
+{
+ public partial class IronPythonPreferences : UserControl, IPreferenceSheet
+ {
+ public IronPythonPreferences()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+
+ var bShow = Props.Get(ShowIronPythonConsole, true);
+ chkShowOnStartup.Checked = bShow;
+ }
+
+ public string Title
+ {
+ get { return Properties.Resources.Title_IronPython_Console; }
+ }
+
+ public Control ContentControl
+ {
+ get { return this; }
+ }
+
+ public const string ShowIronPythonConsole = "Scripting.ShowIronPythonConsole";
+
+ public bool ApplyChanges()
+ {
+ bool restart = false;
+
+ if (Apply(ShowIronPythonConsole, chkShowOnStartup.Checked))
+ restart = true;
+
+ return restart;
+ }
+
+ private bool Apply<T>(string key, T newValue)
+ {
+ if (Props.Get(key).Equals((object)newValue))
+ return false;
+
+ Props.Set(key, newValue);
+ return true;
+ }
+
+ public void ApplyDefaults()
+ {
+ Props.Set(ShowIronPythonConsole, true);
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.resx (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.Scripting/UI/IronPythonPreferences.resx 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
Property changes on: trunk/Tools/Maestro/Maestro.AddInManager
___________________________________________________________________
Added: svn:ignore
+ bin
obj
*.user
Added: trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,216 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Windows.Forms;
+
+using ICSharpCode.Core;
+
+namespace ICSharpCode.AddInManager
+{
+ public class AboutForm : System.Windows.Forms.Form
+ {
+ Font boldFont;
+
+ public AboutForm(AddIn addIn)
+ {
+ //
+ // The InitializeComponent() call is required for Windows Forms designer support.
+ //
+ InitializeComponent();
+
+ boldFont = new Font(Font, FontStyle.Bold);
+
+ List<string> titles = new List<string>();
+ List<string> values = new List<string>();
+
+ this.Text = addIn.Name;
+ closeButton.Text = ResourceService.GetString("Global.CloseButtonText");
+
+ titles.Add("AddIn name");
+ values.Add(addIn.Name);
+
+ if (addIn.Manifest.PrimaryVersion != null && addIn.Manifest.PrimaryVersion.ToString() != "0.0.0.0") {
+ titles.Add("Version");
+ values.Add(addIn.Manifest.PrimaryVersion.ToString());
+ }
+
+ if (addIn.Properties["author"].Length > 0) {
+ titles.Add("Author");
+ values.Add(addIn.Properties["author"]);
+ }
+
+ if (addIn.Properties["copyright"].Length > 0) {
+ if (!addIn.Properties["copyright"].StartsWith("prj:")) {
+ titles.Add("Copyright");
+ values.Add(addIn.Properties["copyright"]);
+ }
+ }
+
+ if (addIn.Properties["license"].Length > 0) {
+ titles.Add("License");
+ values.Add(addIn.Properties["license"]);
+ }
+
+ if (addIn.Properties["url"].Length > 0) {
+ titles.Add("Website");
+ values.Add(addIn.Properties["url"]);
+ }
+
+ if (addIn.Properties["description"].Length > 0) {
+ titles.Add("Description");
+ values.Add(addIn.Properties["description"]);
+ }
+
+ titles.Add("AddIn file");
+ values.Add(FileUtility.NormalizePath(addIn.FileName));
+
+ titles.Add("Internal name");
+ values.Add(addIn.Manifest.PrimaryIdentity);
+
+ table.RowCount = titles.Count + 1;
+ table.RowStyles.Clear();
+ for (int i = 0; i < titles.Count; i++) {
+ table.RowStyles.Add(new RowStyle(SizeType.AutoSize));
+ AddRow(titles[i], values[i], i);
+ }
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ if (disposing) {
+ if (boldFont != null)
+ boldFont.Dispose();
+ }
+ }
+
+ void AddRow(string desc, string val, int rowIndex)
+ {
+ Label descLabel = new Label();
+ descLabel.AutoSize = true;
+ descLabel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+ descLabel.Font = boldFont;
+ descLabel.Text = StringParser.Parse(desc) + ":";
+ table.Controls.Add(descLabel, 0, rowIndex);
+
+ Label valLabel;
+ string link = GetLink(val);
+ if (link != null) {
+ LinkLabel linkLabel = new LinkLabel();
+ linkLabel.LinkClicked += delegate {
+ try {
+ System.Diagnostics.Process.Start(link);
+ } catch (Exception ex) {
+ MessageService.ShowMessage(ex.ToString());
+ }
+ };
+ valLabel = linkLabel;
+ } else {
+ valLabel = new Label();
+ }
+ valLabel.AutoSize = true;
+ valLabel.Text = val;
+ table.Controls.Add(valLabel, 1, rowIndex);
+ }
+
+ string GetLink(string text)
+ {
+ if (text == null)
+ return null;
+ switch (text) {
+ case "GNU General Public License":
+ case "GPL":
+ return "http://www.gnu.org/licenses/gpl.html";
+ case "LGPL":
+ case "GNU Lesser General Public License":
+ return "http://www.gnu.org/licenses/lgpl.html";
+ default:
+ if (text.StartsWith("http://"))
+ return text;
+ if (text.StartsWith("www."))
+ return "http://" + text;
+ return null;
+ }
+ }
+
+ #region Windows Forms Designer generated code
+ /// <summary>
+ /// This method is required for Windows Forms designer support.
+ /// Do not change the method contents inside the source code editor. The Forms designer might
+ /// not be able to load this method if it was changed manually.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.Panel bottomPanel;
+ this.closeButton = new System.Windows.Forms.Button();
+ this.table = new System.Windows.Forms.TableLayoutPanel();
+ bottomPanel = new System.Windows.Forms.Panel();
+ bottomPanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // bottomPanel
+ //
+ bottomPanel.Controls.Add(this.closeButton);
+ bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ bottomPanel.Location = new System.Drawing.Point(0, 233);
+ bottomPanel.Name = "bottomPanel";
+ bottomPanel.Size = new System.Drawing.Size(351, 35);
+ bottomPanel.TabIndex = 0;
+ //
+ // closeButton
+ //
+ this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.closeButton.Location = new System.Drawing.Point(264, 6);
+ this.closeButton.Name = "closeButton";
+ this.closeButton.Size = new System.Drawing.Size(75, 23);
+ this.closeButton.TabIndex = 0;
+ this.closeButton.Text = "Close";
+ this.closeButton.UseCompatibleTextRendering = true;
+ this.closeButton.UseVisualStyleBackColor = true;
+ this.closeButton.Click += new System.EventHandler(this.CloseButtonClick);
+ //
+ // table
+ //
+ this.table.ColumnCount = 2;
+ this.table.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.table.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.table.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.table.Location = new System.Drawing.Point(0, 8);
+ this.table.Name = "table";
+ this.table.RowCount = 2;
+ this.table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.table.Size = new System.Drawing.Size(351, 225);
+ this.table.TabIndex = 1;
+ //
+ // AboutForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.Info;
+ this.ClientSize = new System.Drawing.Size(351, 268);
+ this.Controls.Add(this.table);
+ this.Controls.Add(bottomPanel);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AboutForm";
+ this.Padding = new System.Windows.Forms.Padding(0, 8, 0, 0);
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "AboutForm";
+ bottomPanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+ }
+ private System.Windows.Forms.Button closeButton;
+ private System.Windows.Forms.TableLayoutPanel table;
+ #endregion
+
+ void CloseButtonClick(object sender, EventArgs e)
+ {
+ Close();
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.resx (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/AboutForm.resx 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="bottomPanel.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <value>False</value>
+ </metadata>
+</root>
\ No newline at end of file
Added: trunk/Tools/Maestro/Maestro.AddInManager/AddInControl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/AddInControl.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/AddInControl.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,227 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+using System.ComponentModel;
+using ICSharpCode.Core.WinForms;
+
+namespace Maestro.AddInManager
+{
+ [ToolboxItem(false)]
+ public class AddInControl : Control
+ {
+ AddIn addIn;
+ bool isExternal;
+
+ public AddIn AddIn
+ {
+ get
+ {
+ return addIn;
+ }
+ }
+
+ public AddInControl(AddIn addIn)
+ {
+ this.addIn = addIn;
+ this.BackColor = SystemColors.Window;
+ this.ContextMenuStrip = MenuService.CreateContextMenu(this, "/AddIns/AddInManager/ContextMenu");
+
+ isExternal = !FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, addIn.FileName)
+ && !FileUtility.IsBaseDirectory(PropertyService.ConfigDirectory, addIn.FileName);
+
+ this.ClientSize = new Size(100, isExternal ? 35 + pathHeight : 35);
+ this.SetStyle(ControlStyles.Selectable, true);
+ this.SetStyle(ControlStyles.UserPaint, true);
+ this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
+ this.SetStyle(ControlStyles.ResizeRedraw, true);
+ this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ }
+
+ bool selected;
+
+ public bool Selected
+ {
+ get
+ {
+ return selected;
+ }
+ set
+ {
+ if (selected != value)
+ {
+ selected = value;
+ Invalidate();
+ }
+ }
+ }
+
+ protected override void OnClick(EventArgs e)
+ {
+ base.OnClick(e);
+ Focus();
+ }
+
+ Color Mix(Color c1, Color c2, double perc)
+ {
+ double p1 = 1 - perc;
+ double p2 = perc;
+ return Color.FromArgb((int)(c1.R * p1 + c2.R * p2),
+ (int)(c1.G * p1 + c2.G * p2),
+ (int)(c1.B * p1 + c2.B * p2));
+ }
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ Graphics g = e.Graphics;
+ Rectangle bounds = this.ClientRectangle;
+ bounds.Offset(1, 1);
+ bounds.Inflate(-2, -2);
+ Color startColor = SystemColors.ControlLightLight;
+ Color endColor = SystemColors.Control;
+ if (selected)
+ {
+ startColor = Mix(SystemColors.ControlLightLight, SystemColors.Highlight, 0.1);
+ endColor = Mix(SystemColors.ControlLightLight, SystemColors.Highlight, 0.65);
+ }
+ Brush gradient = new LinearGradientBrush(bounds,
+ startColor,
+ endColor,
+ LinearGradientMode.ForwardDiagonal);
+
+ GraphicsPath path = new GraphicsPath();
+
+ const int egdeRadius = 3;
+ const int innerMargin = egdeRadius + 2;
+
+ RectangleF arcRect = new RectangleF(bounds.Location, new SizeF(egdeRadius * 2, egdeRadius * 2));
+ //top left Arc
+ path.AddArc(arcRect, 180, 90);
+ path.AddLine(bounds.X + egdeRadius, bounds.Y, bounds.Right - egdeRadius, bounds.Y);
+ // top right arc
+ arcRect.X = bounds.Right - egdeRadius * 2;
+ path.AddArc(arcRect, 270, 90);
+ path.AddLine(bounds.Right, bounds.Left + egdeRadius, bounds.Right, bounds.Bottom - egdeRadius);
+ // bottom right arc
+ arcRect.Y = bounds.Bottom - egdeRadius * 2;
+ path.AddArc(arcRect, 0, 90);
+ path.AddLine(bounds.X + egdeRadius, bounds.Bottom, bounds.Right - egdeRadius, bounds.Bottom);
+ // bottom left arc
+ arcRect.X = bounds.Left;
+ path.AddArc(arcRect, 90, 90);
+ path.AddLine(bounds.X, bounds.Left + egdeRadius, bounds.X, bounds.Bottom - egdeRadius);
+
+ g.FillPath(gradient, path);
+ g.DrawPath(SystemPens.ControlText, path);
+ path.Dispose();
+ gradient.Dispose();
+ Brush textBrush;
+ string description = GetText(out textBrush);
+ int titleWidth;
+ using (Font boldFont = new Font("Arial", 8, FontStyle.Bold))
+ {
+ g.DrawString(addIn.Name, boldFont, textBrush, innerMargin, innerMargin);
+ titleWidth = (int)g.MeasureString(addIn.Name, boldFont).Width + 1;
+ }
+ if (addIn.Version != null && addIn.Version.ToString() != "0.0.0.0")
+ {
+ g.DrawString(addIn.Version.ToString(), Font, textBrush, innerMargin + titleWidth + 4, innerMargin);
+ }
+ RectangleF textBounds = bounds;
+ textBounds.Offset(innerMargin, innerMargin);
+ textBounds.Inflate(-innerMargin * 2, -innerMargin * 2 + 2);
+ if (isExternal)
+ textBounds.Height -= pathHeight;
+ using (StringFormat sf = new StringFormat(StringFormatFlags.LineLimit))
+ {
+ sf.Trimming = StringTrimming.EllipsisWord;
+ g.DrawString(description, Font, textBrush, textBounds, sf);
+ }
+ if (isExternal)
+ {
+ textBounds.Y = textBounds.Bottom + 2;
+ textBounds.Height = pathHeight + 2;
+ using (Font font = new Font(Font.Name, 7, FontStyle.Italic))
+ {
+ using (StringFormat sf = new StringFormat(StringFormatFlags.NoWrap))
+ {
+ sf.Trimming = StringTrimming.EllipsisPath;
+ sf.Alignment = StringAlignment.Far;
+ g.DrawString(addIn.FileName, font,
+ selected ? SystemBrushes.HighlightText : SystemBrushes.ControlText,
+ textBounds, sf);
+ }
+ }
+ }
+ }
+
+ const int pathHeight = 10;
+
+ string GetText(out Brush textBrush)
+ {
+ switch (addIn.Action)
+ {
+ case AddInAction.Enable:
+ if (addIn.Enabled)
+ {
+ textBrush = SystemBrushes.ControlText;
+ return addIn.Properties["description"];
+ }
+ else
+ {
+ textBrush = SystemBrushes.ActiveCaption;
+ return ResourceService.GetString("AddInManager.AddInEnabled");
+ }
+ case AddInAction.Disable:
+ textBrush = SystemBrushes.GrayText;
+ if (addIn.Enabled)
+ return ResourceService.GetString("AddInManager.AddInWillBeDisabled");
+ else
+ return ResourceService.GetString("AddInManager.AddInDisabled");
+ case AddInAction.Install:
+ textBrush = SystemBrushes.ActiveCaption;
+ return ResourceService.GetString("AddInManager.AddInInstalled");
+ case AddInAction.Uninstall:
+ textBrush = SystemBrushes.GrayText;
+ return ResourceService.GetString("AddInManager.AddInRemoved");
+ case AddInAction.Update:
+ textBrush = SystemBrushes.ActiveCaption;
+ return ResourceService.GetString("AddInManager.AddInUpdated");
+ case AddInAction.InstalledTwice:
+ textBrush = Brushes.Red;
+ return ResourceService.GetString("AddInManager.AddInInstalledTwice");
+ case AddInAction.DependencyError:
+ textBrush = Brushes.Red;
+ return ResourceService.GetString("AddInManager.AddInDependencyFailed");
+ case AddInAction.CustomError:
+ textBrush = Brushes.Red;
+ return StringParser.Parse(addIn.CustomErrorMessage);
+ default:
+ textBrush = Brushes.Yellow;
+ return addIn.Action.ToString();
+ }
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddInManager/AddInManger.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/AddInManger.addin (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/AddInManger.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,75 @@
+<AddIn name="Add-In Manager"
+ author="Jackie Ng"
+ url="http://trac.osgeo.org/mapguide/wiki/maestro"
+ description="Add-In Manager"
+ addInManagerHidden="true">
+
+ <Manifest>
+ <Identity name="Maestro.AddInManager" />
+ </Manifest>
+
+ <Runtime>
+ <Import assembly="Maestro.AddInManager.dll">
+ <ConditionEvaluator name="AddInManagerAddInState" class="Maestro.AddInManager.AddInManagerAddInStateConditionEvaluator"/>
+ </Import>
+ </Runtime>
+
+ <Path name = "/Workspace/Tools">
+ <MenuItem id = "ShowAddInManager"
+ label = "${res:CMD_AddInManager}"
+ icon = "plugin"
+ insertbefore="PrefSeparator"
+ class = "Maestro.AddInManager.ShowCommand"/>
+ </Path>
+
+ <Path name="/Workbench/Toolbar">
+ <MenuItem id = "ShowAddInManager"
+ icon = "plugin"
+ tooltip="${res:CMD_AddInManager}"
+ class = "Maestro.AddInManager.ShowCommand"/>
+ </Path>
+
+ <Path name = "/AddIns/AddInManager/ContextMenu">
+ <Condition name="AddInManagerAddInState" states="Enable">
+ <MenuItem id="Disable"
+ label="${res:AddInManager.ActionDisable}"
+ class="Maestro.AddInManager.DisableCommand"/>
+ </Condition>
+ <Condition name="AddInManagerAddInState" states="Disable">
+ <MenuItem id="Enable"
+ label="${res:AddInManager.ActionEnable}"
+ class="Maestro.AddInManager.EnableCommand"/>
+ </Condition>
+ <Condition name="AddInManagerAddInState" states="Enable,Disable,InstalledTwice,DependencyError">
+ <MenuItem id="Uninstall"
+ label="${res:AddInManager.ActionUninstall}"
+ class="Maestro.AddInManager.UninstallCommand"/>
+ </Condition>
+ <Condition name="AddInManagerAddInState" states="Install">
+ <MenuItem id="AbortInstall"
+ label="${res:AddInManager.ActionCancelInstallation}"
+ class="Maestro.AddInManager.AbortInstallCommand"/>
+ </Condition>
+ <Condition name="AddInManagerAddInState" states="Uninstall">
+ <MenuItem id="AbortUninstall"
+ label="${res:AddInManager.ActionCancelDeinstallation}"
+ class="Maestro.AddInManager.EnableCommand"/>
+ </Condition>
+ <Condition name="AddInManagerAddInState" states="Update">
+ <MenuItem id="AbortUpdate"
+ label="${res:AddInManager.ActionCancelUpdate}"
+ class="Maestro.AddInManager.AbortUpdateCommand"/>
+ </Condition>
+ <MenuItem id="Separator1" type="Separator"/>
+ <MenuItem id="GoToHomepage"
+ label="${res:AddInManager.OpenWebsite}"
+ class="Maestro.AddInManager.OpenHomepageCommand"
+ loadclasslazy="false"/>
+ </Path>
+
+ <!-- Auto-start commands -->
+ <Path name="/Workspace/Autostart">
+ <Class id="Startup" class="Maestro.AddInManager.StartupCommand" />
+ </Path>
+
+</AddIn>
Added: trunk/Tools/Maestro/Maestro.AddInManager/Commands.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/Commands.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/Commands.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,116 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+
+namespace Maestro.AddInManager
+{
+ public class ShowCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ManagerForm.ShowForm();
+ }
+ }
+
+ public class StartupCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ResourceService.RegisterNeutralStrings(Strings.ResourceManager);
+ }
+ }
+
+ public class AddInManagerAddInStateConditionEvaluator : IConditionEvaluator
+ {
+ public bool IsValid(object caller, Condition condition)
+ {
+ string states = condition.Properties["states"];
+ string action = ((AddInControl)caller).AddIn.Action.ToString();
+ foreach (string state in states.Split(','))
+ {
+ if (state == action)
+ return true;
+ }
+ return false;
+ }
+ }
+
+ public class DisableCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.Disable);
+ }
+ }
+
+ public class EnableCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.Enable);
+ }
+ }
+
+ public class AbortInstallCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.Uninstall);
+ }
+ }
+
+ public class AbortUpdateCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ManagerForm.Instance.TryRunAction(((AddInControl)Owner).AddIn, AddInAction.InstalledTwice);
+ }
+ }
+
+ public class UninstallCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ ManagerForm.Instance.TryUninstall(((AddInControl)Owner).AddIn);
+ }
+ }
+
+ public class OpenHomepageCommand : AbstractMenuCommand
+ {
+ public override bool IsEnabled
+ {
+ get
+ {
+ return ((AddInControl)Owner).AddIn.Properties["url"].Length > 0;
+ }
+ }
+
+ public override void Run()
+ {
+ try {
+ System.Diagnostics.Process.Start(((AddInControl)Owner).AddIn.Properties["url"]);
+ } catch {}
+ ManagerForm.Instance.Close();
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddInManager/InstallableAddIn.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/InstallableAddIn.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/InstallableAddIn.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,162 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+using ICSharpCode.SharpZipLib.Zip;
+using System.IO;
+
+namespace Maestro.AddInManager
+{
+ public class InstallableAddIn
+ {
+ string fileName;
+ bool isPackage;
+ AddIn addIn;
+
+ public AddIn AddIn
+ {
+ get
+ {
+ return addIn;
+ }
+ }
+
+ public InstallableAddIn(string fileName, bool isPackage)
+ {
+ this.fileName = fileName;
+ this.isPackage = isPackage;
+ if (isPackage)
+ {
+ ZipFile file = new ZipFile(fileName);
+ try
+ {
+ LoadAddInFromZip(file);
+ }
+ finally
+ {
+ file.Close();
+ }
+ }
+ else
+ {
+ addIn = AddIn.Load(fileName);
+ }
+ if (addIn.Manifest.PrimaryIdentity == null)
+ throw new AddInLoadException(ResourceService.GetString("AddInManager.AddInMustHaveIdentity"));
+ }
+
+ void LoadAddInFromZip(ZipFile file)
+ {
+ ZipEntry addInEntry = null;
+ foreach (ZipEntry entry in file)
+ {
+ if (entry.Name.EndsWith(".addin"))
+ {
+ if (addInEntry != null)
+ throw new AddInLoadException("The package may only contain one .addin file.");
+ addInEntry = entry;
+ }
+ }
+ if (addInEntry == null)
+ throw new AddInLoadException("The package must contain one .addin file.");
+ using (Stream s = file.GetInputStream(addInEntry))
+ {
+ using (StreamReader r = new StreamReader(s))
+ {
+ addIn = AddIn.Load(r);
+ }
+ }
+ }
+
+ public void Install(bool isUpdate)
+ {
+ foreach (string identity in addIn.Manifest.Identities.Keys)
+ {
+ ICSharpCode.Core.AddInManager.AbortRemoveUserAddInOnNextStart(identity);
+ }
+ if (isPackage)
+ {
+ string targetDir = Path.Combine(ICSharpCode.Core.AddInManager.AddInInstallTemp,
+ addIn.Manifest.PrimaryIdentity);
+ if (Directory.Exists(targetDir))
+ Directory.Delete(targetDir, true);
+ Directory.CreateDirectory(targetDir);
+ FastZip fastZip = new FastZip();
+ fastZip.CreateEmptyDirectories = true;
+ fastZip.ExtractZip(fileName, targetDir, null);
+
+ addIn.Action = AddInAction.Install;
+ if (!isUpdate)
+ {
+ AddInTree.InsertAddIn(addIn);
+ }
+ }
+ else
+ {
+ ICSharpCode.Core.AddInManager.AddExternalAddIns(new AddIn[] { addIn });
+ }
+ }
+
+ public static void CancelUpdate(IList<AddIn> addIns)
+ {
+ foreach (AddIn addIn in addIns)
+ {
+ foreach (string identity in addIn.Manifest.Identities.Keys)
+ {
+ // delete from installation temp (if installation or update is pending)
+ string targetDir = Path.Combine(ICSharpCode.Core.AddInManager.AddInInstallTemp,
+ identity);
+ if (Directory.Exists(targetDir))
+ Directory.Delete(targetDir, true);
+ }
+ }
+ }
+
+ public static void Uninstall(IList<AddIn> addIns)
+ {
+ CancelUpdate(addIns);
+ foreach (AddIn addIn in addIns)
+ {
+ foreach (string identity in addIn.Manifest.Identities.Keys)
+ {
+ // remove the user AddIn
+ string targetDir = Path.Combine(ICSharpCode.Core.AddInManager.UserAddInPath, identity);
+ if (Directory.Exists(targetDir))
+ {
+ if (!addIn.Enabled)
+ {
+ try
+ {
+ Directory.Delete(targetDir, true);
+ continue;
+ }
+ catch
+ {
+ }
+ }
+ ICSharpCode.Core.AddInManager.RemoveUserAddInOnNextStart(identity);
+ }
+ }
+ }
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddInManager/Maestro.AddInManager.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/Maestro.AddInManager.csproj (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/Maestro.AddInManager.csproj 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
+ <PropertyGroup>
+ <ProjectGuid>{9CC51643-37D6-4B8F-A0EA-E7606AA561EB}</ProjectGuid>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <OutputType>Library</OutputType>
+ <RootNamespace>Maestro.AddInManager</RootNamespace>
+ <AssemblyName>Maestro.AddInManager</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+ <OutputPath>bin\Debug\</OutputPath>
+ <DebugSymbols>True</DebugSymbols>
+ <DebugType>Full</DebugType>
+ <Optimize>False</Optimize>
+ <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+ <OutputPath>bin\Release\</OutputPath>
+ <DebugSymbols>False</DebugSymbols>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
+ <DefineConstants>TRACE</DefineConstants>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
+ <PlatformTarget>x86</PlatformTarget>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <OutputPath>..\out\Debug\AddIns\AddInManager\</OutputPath>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <OutputPath>..\out\Release\AddIns\AddInManager\</OutputPath>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="ICSharpCode.SharpZipLib">
+ <HintPath>..\Thirdparty\SharpZipLib\ICSharpCode.SharpZipLib.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data" />
+ <Reference Include="System.Data.DataSetExtensions">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ <Reference Include="System.Xml.Linq">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\Properties\GlobalAssemblyInfo.cs">
+ <Link>GlobalAssemblyInfo.cs</Link>
+ </Compile>
+ <Compile Include="..\Properties\SignedAssemblyInfo2.cs">
+ <Link>SignedAssemblyInfo2.cs</Link>
+ </Compile>
+ <Compile Include="AboutForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="AddInControl.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Commands.cs" />
+ <Compile Include="InstallableAddIn.cs" />
+ <Compile Include="ManagerForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Strings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Strings.resx</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="AboutForm.resx">
+ <DependentUpon>AboutForm.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Strings.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Strings.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
+ <Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
+ <Name>ICSharpCode.Core.WinForms</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core\ICSharpCode.Core.csproj">
+ <Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
+ <Name>ICSharpCode.Core</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="AddInManger.addin">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
+</Project>
\ No newline at end of file
Added: trunk/Tools/Maestro/Maestro.AddInManager/ManagerForm.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/ManagerForm.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/ManagerForm.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,1053 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using ICSharpCode.Core;
+using System.Drawing;
+using System.IO;
+using ICSharpCode.Core.WinForms;
+
+namespace Maestro.AddInManager
+{
+ public class ManagerForm : System.Windows.Forms.Form
+ {
+ #region Form Initialization
+ static ManagerForm instance;
+
+ public static ManagerForm Instance
+ {
+ get
+ {
+ return instance;
+ }
+ }
+
+ public static void ShowForm()
+ {
+ if (instance == null)
+ {
+ instance = new ManagerForm();
+ instance.Show();
+ }
+ else
+ {
+ instance.Activate();
+ }
+ }
+
+ public ManagerForm()
+ {
+ //
+ // The InitializeComponent() call is required for Windows Forms designer support.
+ //
+ InitializeComponent();
+
+ installButton.Text = ResourceService.GetString("AddInManager.InstallButton");
+ uninstallButton.Text = ResourceService.GetString("AddInManager.ActionUninstall");
+ closeButton.Text = ResourceService.GetString("TextClose");
+ showPreinstalledAddInsCheckBox.Text = ResourceService.GetString("AddInManager.ShowPreinstalledAddIns");
+ this.Text = ResourceService.GetString("AddInManager.Title");
+ RightToLeftConverter.ConvertRecursive(this);
+
+ CreateAddInList();
+ }
+
+ void OnSplitContainerPanel1Paint(object sender, PaintEventArgs e)
+ {
+ if (visibleAddInCount == 0)
+ {
+ Rectangle rect = splitContainer.Panel1.ClientRectangle;
+ rect.Offset(16, 16);
+ rect.Inflate(-32, -32);
+ e.Graphics.DrawString(ResourceService.GetString("AddInManager.NoAddInsInstalled"),
+ Font, SystemBrushes.WindowText, rect);
+ }
+ }
+
+ void CreateAddInList()
+ {
+ Stack<AddInControl> stack = new Stack<AddInControl>();
+ int index = 0;
+ AddInControl addInControl;
+
+ List<AddIn> addInList = new List<AddIn>(AddInTree.AddIns);
+ addInList.Sort(delegate(AddIn a, AddIn b)
+ {
+ return a.Name.CompareTo(b.Name);
+ });
+ foreach (AddIn addIn in addInList)
+ {
+ string identity = addIn.Manifest.PrimaryIdentity;
+ if (addIn.Properties["addInManagerHidden"] == "true")
+ continue;
+ addInControl = new AddInControl(addIn);
+ addInControl.Dock = DockStyle.Top;
+ addInControl.TabIndex = index++;
+ stack.Push(addInControl);
+ addInControl.Enter += OnControlEnter;
+ addInControl.Click += OnControlClick;
+ }
+ while (stack.Count > 0)
+ {
+ splitContainer.Panel1.Controls.Add(stack.Pop());
+ }
+ ShowPreinstalledAddInsCheckBoxCheckedChanged(null, null);
+
+ showPreinstalledAddInsCheckBox.Checked = true;
+
+ splitContainer.Panel2Collapsed = true;
+ }
+
+ void RefreshAddInList()
+ {
+ List<AddIn> oldSelected = selected;
+ foreach (Control ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Dispose();
+ }
+ splitContainer.Panel1.Controls.Clear();
+ CreateAddInList();
+ if (oldSelected != null)
+ {
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ if (oldSelected.Contains(ctl.AddIn))
+ ctl.Selected = true;
+ }
+ }
+ UpdateActionBox();
+ }
+ #endregion
+
+ #region AddInList-Management
+ int visibleAddInCount = 0;
+
+ void ShowPreinstalledAddInsCheckBoxCheckedChanged(object sender, EventArgs e)
+ {
+ visibleAddInCount = 0;
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Selected = false;
+ bool visible;
+ if (showPreinstalledAddInsCheckBox.Checked)
+ {
+ visible = true;
+ }
+ else
+ {
+ if (ctl == oldFocus)
+ oldFocus = null;
+ visible = !FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, ctl.AddIn.FileName);
+ }
+ if (visible)
+ visibleAddInCount += 1;
+ ctl.Visible = visible;
+ }
+ UpdateActionBox();
+ }
+
+ void OnControlClick(object sender, EventArgs e)
+ {
+ // clicking again on already focused item:
+ // remove selection of other items / or with Ctrl: toggle selection
+ if (((Control)sender).Focused)
+ OnControlEnter(sender, e);
+ }
+
+ AddInControl oldFocus;
+ bool ignoreFocusChange;
+
+ void OnControlEnter(object sender, EventArgs e)
+ {
+ if (ignoreFocusChange)
+ return;
+ bool ctrl = (ModifierKeys & Keys.Control) == Keys.Control;
+ if ((ModifierKeys & Keys.Shift) == Keys.Shift && sender != oldFocus)
+ {
+ bool sel = false;
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ if (!ctl.Visible) continue;
+ if (ctl == sender || ctl == oldFocus)
+ {
+ sel = !sel;
+ ctl.Selected = true;
+ }
+ else
+ {
+ if (sel || !ctrl)
+ {
+ ctl.Selected = sel;
+ }
+ }
+ }
+ }
+ else if (ctrl)
+ {
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ if (ctl == sender)
+ ctl.Selected = !ctl.Selected;
+ }
+ oldFocus = (AddInControl)sender;
+ }
+ else
+ {
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Selected = ctl == sender;
+ }
+ oldFocus = (AddInControl)sender;
+ }
+ UpdateActionBox();
+ }
+ #endregion
+
+ #region UpdateActionBox
+ List<AddIn> selected;
+ AddInAction selectedAction;
+
+ static bool IsErrorAction(AddInAction action)
+ {
+ return action == AddInAction.DependencyError
+ || action == AddInAction.InstalledTwice
+ || action == AddInAction.CustomError;
+ }
+
+ void UpdateActionBox()
+ {
+ ignoreFocusChange = true;
+ selected = new List<AddIn>();
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ if (ctl.Selected)
+ selected.Add(ctl.AddIn);
+ }
+ splitContainer.Panel2Collapsed = selected.Count == 0;
+ if (selected.Count > 0)
+ {
+ dependencyTable.Visible = false;
+ runActionButton.Visible = true;
+ uninstallButton.Visible = true;
+
+ bool allHaveIdentity = true;
+ bool allEnabled = true;
+ bool allDisabled = true;
+ bool allInstalling = true;
+ bool allUninstalling = true;
+ bool allUpdating = true;
+ bool allUninstallable = true;
+ bool hasErrors = false;
+ foreach (AddIn addIn in selected)
+ {
+ if (addIn.Manifest.PrimaryIdentity == null)
+ {
+ allHaveIdentity = false;
+ break;
+ }
+ allEnabled &= addIn.Action == AddInAction.Enable;
+ if (IsErrorAction(addIn.Action))
+ hasErrors = true;
+ else
+ allDisabled &= addIn.Action == AddInAction.Disable;
+ allUpdating &= addIn.Action == AddInAction.Update;
+ allInstalling &= addIn.Action == AddInAction.Install;
+ allUninstalling &= addIn.Action == AddInAction.Uninstall;
+ if (allUninstallable)
+ {
+ if (FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, addIn.FileName))
+ {
+ allUninstallable = false;
+ }
+ }
+ }
+ if (allEnabled == true || allHaveIdentity == false)
+ {
+ selectedAction = AddInAction.Disable;
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionDisable");
+ actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionDisable");
+ if (allHaveIdentity)
+ runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Disable);
+ else
+ runActionButton.Enabled = false;
+ uninstallButton.Enabled = allUninstallable && runActionButton.Enabled;
+ }
+ else if (allDisabled)
+ {
+ selectedAction = AddInAction.Enable;
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionEnable");
+ actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionEnable");
+ runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Enable);
+ if (hasErrors)
+ runActionButton.Enabled = false;
+ uninstallButton.Enabled = allUninstallable;
+ }
+ else if (allInstalling)
+ {
+ selectedAction = AddInAction.Uninstall;
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionCancelInstallation");
+ actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionCancelInstall");
+ runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Disable);
+ uninstallButton.Visible = false;
+ }
+ else if (allUninstalling)
+ {
+ selectedAction = AddInAction.Enable;
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionCancelDeinstallation");
+ actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionCancelDeinstallation");
+ runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.Enable);
+ uninstallButton.Visible = false;
+ }
+ else if (allUpdating)
+ {
+ selectedAction = AddInAction.InstalledTwice;
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionCancelUpdate");
+ actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionCancelUpdate");
+ runActionButton.Enabled = ShowDependencies(selected, ShowDependencyMode.CancelUpdate);
+ uninstallButton.Visible = false;
+ }
+ else
+ {
+ actionGroupBox.Text = "";
+ actionDescription.Text = ResourceService.GetString("AddInManager.DescriptionInconsistentSelection");
+ runActionButton.Visible = false;
+ uninstallButton.Visible = false;
+ }
+ }
+ ignoreFocusChange = false;
+ }
+
+ enum ShowDependencyMode
+ {
+ Disable,
+ Enable,
+ CancelUpdate
+ }
+
+ bool ShowDependencies(IList<AddIn> addIns, ShowDependencyMode mode)
+ {
+ List<AddInReference> dependencies = new List<AddInReference>(); // only used with enable=true
+ List<KeyValuePair<AddIn, AddInReference>> dependenciesToSel = new List<KeyValuePair<AddIn, AddInReference>>();
+ Dictionary<string, Version> addInDict = new Dictionary<string, Version>();
+ Dictionary<string, Version> modifiedAddIns = new Dictionary<string, Version>();
+
+ // add available addins
+ foreach (AddIn addIn in AddInTree.AddIns)
+ {
+ if (addIn.Action != AddInAction.Enable && addIn.Action != AddInAction.Install)
+ continue;
+ if (addIns.Contains(addIn))
+ continue;
+ foreach (KeyValuePair<string, Version> pair in addIn.Manifest.Identities)
+ {
+ addInDict[pair.Key] = pair.Value;
+ }
+ }
+
+ // create list of modified addin names
+ foreach (AddIn addIn in addIns)
+ {
+ foreach (KeyValuePair<string, Version> pair in addIn.Manifest.Identities)
+ {
+ modifiedAddIns[pair.Key] = pair.Value;
+ }
+ }
+
+ // add new addins
+ if (mode != ShowDependencyMode.Disable)
+ {
+ foreach (AddIn addIn in addIns)
+ {
+ if (mode == ShowDependencyMode.CancelUpdate && !addIn.Enabled)
+ {
+ continue;
+ }
+ foreach (KeyValuePair<string, Version> pair in addIn.Manifest.Identities)
+ {
+ addInDict[pair.Key] = pair.Value;
+ }
+ foreach (AddInReference dep in addIn.Manifest.Dependencies)
+ {
+ if (!dependencies.Contains(dep))
+ dependencies.Add(dep);
+ }
+ }
+ }
+
+ // add dependencies to the to-be-changed addins
+ foreach (AddIn addIn in AddInTree.AddIns)
+ {
+ if (addIn.Action != AddInAction.Enable && addIn.Action != AddInAction.Install)
+ continue;
+ if (addIns.Contains(addIn))
+ continue;
+ foreach (AddInReference dep in addIn.Manifest.Dependencies)
+ {
+ if (modifiedAddIns.ContainsKey(dep.Name))
+ {
+ dependenciesToSel.Add(new KeyValuePair<AddIn, AddInReference>(addIn, dep));
+ }
+ }
+ }
+
+ foreach (Control ctl in dependencyTable.Controls)
+ {
+ ctl.Dispose();
+ }
+ dependencyTable.Controls.Clear();
+ bool allDepenciesOK = true;
+ if (dependencies.Count > 0 || dependenciesToSel.Count > 0)
+ {
+ if (dependencies.Count == 0)
+ {
+ dependencyTable.RowCount = 1 + dependenciesToSel.Count;
+ }
+ else if (dependenciesToSel.Count == 0)
+ {
+ dependencyTable.RowCount = 1 + dependencies.Count;
+ }
+ else
+ {
+ dependencyTable.RowCount = 2 + dependencies.Count + dependenciesToSel.Count;
+ }
+ while (dependencyTable.RowStyles.Count < dependencyTable.RowCount)
+ {
+ dependencyTable.RowStyles.Add(new RowStyle(SizeType.AutoSize));
+ }
+ int rowIndex = 0;
+ if (dependencies.Count > 0)
+ {
+ AddLabelRow(rowIndex++, ResourceService.GetString("AddInManager.RequiredDependencies"));
+ foreach (AddInReference dep in dependencies)
+ {
+ if (!AddDependencyRow(addInDict, dep, rowIndex++, null))
+ allDepenciesOK = false;
+ }
+ }
+ if (dependenciesToSel.Count > 0)
+ {
+ AddLabelRow(rowIndex++, ResourceService.GetString("AddInManager.RequiredBy"));
+ foreach (KeyValuePair<AddIn, AddInReference> pair in dependenciesToSel)
+ {
+ if (!AddDependencyRow(addInDict, pair.Value, rowIndex++, pair.Key.Name))
+ allDepenciesOK = false;
+ }
+ }
+ dependencyTable.Visible = true;
+ }
+ return allDepenciesOK;
+ }
+
+ bool AddDependencyRow(Dictionary<string, Version> addInDict, AddInReference dep, int rowIndex, string requiredByName)
+ {
+ string text = requiredByName ?? GetDisplayName(dep.Name);
+ Version versionFound;
+ Label label = new Label();
+ label.AutoSize = true;
+ label.Text = text;
+ PictureBox box = new PictureBox();
+ box.BorderStyle = BorderStyle.None;
+ box.Size = new Size(16, 16);
+ bool isOK = dep.Check(addInDict, out versionFound);
+ box.SizeMode = PictureBoxSizeMode.CenterImage;
+ //box.Image = isOK ? ResourceService.GetBitmap("Icons.16x16.OK") : ResourceService.GetBitmap("Icons.16x16.DeleteIcon");
+ dependencyTable.Controls.Add(label, 1, rowIndex);
+ dependencyTable.Controls.Add(box, 0, rowIndex);
+ return isOK;
+ }
+
+ void AddLabelRow(int rowIndex, string text)
+ {
+ Label label = new Label();
+ label.AutoSize = true;
+ label.Text = text;
+ dependencyTable.Controls.Add(label, 0, rowIndex);
+ dependencyTable.SetColumnSpan(label, 2);
+ }
+
+ string GetDisplayName(string identity)
+ {
+ foreach (AddIn addIn in AddInTree.AddIns)
+ {
+ if (addIn.Manifest.Identities.ContainsKey(identity))
+ return addIn.Name;
+ }
+ return identity;
+ }
+ #endregion
+
+ #region Install new AddIns
+ void InstallButtonClick(object sender, EventArgs e)
+ {
+ using (OpenFileDialog dlg = new OpenFileDialog())
+ {
+ dlg.Filter = ResourceService.GetString("AddInManager.FileFilter");
+ dlg.Multiselect = true;
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ if (ShowInstallableAddIns(dlg.FileNames))
+ {
+ if (runActionButton.Visible && runActionButton.Enabled)
+ runActionButton.PerformClick();
+ }
+ }
+ }
+ }
+
+ public bool ShowInstallableAddIns(IEnumerable<string> fileNames)
+ {
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Selected = false;
+ }
+ UpdateActionBox();
+ List<InstallableAddIn> list = new List<InstallableAddIn>();
+ foreach (string file in fileNames)
+ {
+ try
+ {
+ // Same file-extension check is in Panel1DragEnter
+ switch (Path.GetExtension(file).ToLowerInvariant())
+ {
+ case ".addin":
+ if (FileUtility.IsBaseDirectory(FileUtility.ApplicationRootPath, file))
+ {
+ MessageService.ShowMessage("${res:AddInManager.CannotInstallIntoApplicationDirectory}");
+ return false;
+ }
+ list.Add(new InstallableAddIn(file, false));
+ break;
+ case ".sdaddin":
+ case ".zip":
+ list.Add(new InstallableAddIn(file, true));
+ break;
+ default:
+ MessageService.ShowMessage("${res:AddInManager.UnknownFileFormat} " + Path.GetExtension(file));
+ return false;
+ }
+ }
+ catch (AddInLoadException ex)
+ {
+ MessageService.ShowMessage("Error loading " + file + ":\n" + ex.Message);
+ return false;
+ }
+ }
+ ShowInstallableAddIns(list);
+ return true;
+ }
+
+ IList<InstallableAddIn> shownAddInPackages;
+
+ void ShowInstallableAddIns(IList<InstallableAddIn> addInPackages)
+ {
+ shownAddInPackages = addInPackages;
+ ignoreFocusChange = true;
+ splitContainer.Panel2Collapsed = false;
+ dependencyTable.Visible = false;
+ runActionButton.Visible = true;
+ uninstallButton.Visible = false;
+
+ selectedAction = AddInAction.Install;
+ List<string> installAddIns = new List<string>();
+ List<string> updateAddIns = new List<string>();
+ foreach (InstallableAddIn addInPackage in addInPackages)
+ {
+ string identity = addInPackage.AddIn.Manifest.PrimaryIdentity;
+ AddIn foundAddIn = null;
+ foreach (AddIn addIn in AddInTree.AddIns)
+ {
+ if (addIn.Action != AddInAction.Install
+ && addIn.Manifest.Identities.ContainsKey(identity))
+ {
+ foundAddIn = addIn;
+ break;
+ }
+ }
+ if (foundAddIn != null)
+ {
+ updateAddIns.Add(addInPackage.AddIn.Name);
+ }
+ else
+ {
+ installAddIns.Add(addInPackage.AddIn.Name);
+ }
+ }
+
+ if (updateAddIns.Count == 0)
+ {
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionInstall");
+ }
+ else if (installAddIns.Count == 0)
+ {
+ actionGroupBox.Text = runActionButton.Text = ResourceService.GetString("AddInManager.ActionUpdate");
+ }
+ else
+ {
+ actionGroupBox.Text = runActionButton.Text =
+ ResourceService.GetString("AddInManager.ActionInstall")
+ + " + " +
+ ResourceService.GetString("AddInManager.ActionUpdate");
+ }
+ List<AddIn> addInList = new List<AddIn>();
+ StringBuilder b = new StringBuilder();
+ if (installAddIns.Count == 1)
+ {
+ b.Append("Installs the AddIn " + installAddIns[0]);
+ }
+ else if (installAddIns.Count > 1)
+ {
+ b.Append("Installs the AddIns " + string.Join(",", installAddIns.ToArray()));
+ }
+ if (updateAddIns.Count > 0 && installAddIns.Count > 0)
+ b.Append("; ");
+ if (updateAddIns.Count == 1)
+ {
+ b.Append("Updates the AddIn " + updateAddIns[0]);
+ }
+ else if (updateAddIns.Count > 1)
+ {
+ b.Append("Updates the AddIns " + string.Join(",", updateAddIns.ToArray()));
+ }
+ actionDescription.Text = b.ToString();
+ runActionButton.Enabled = ShowDependencies(addInList, ShowDependencyMode.Enable);
+ }
+
+ void RunInstallation()
+ {
+ // install new AddIns
+ foreach (InstallableAddIn addInPackage in shownAddInPackages)
+ {
+ string identity = addInPackage.AddIn.Manifest.PrimaryIdentity;
+ AddIn foundAddIn = null;
+ foreach (AddIn addIn in AddInTree.AddIns)
+ {
+ if (addIn.Manifest.Identities.ContainsKey(identity))
+ {
+ foundAddIn = addIn;
+ break;
+ }
+ }
+ if (foundAddIn != null)
+ {
+ addInPackage.Install(true);
+ if (foundAddIn.Action != AddInAction.Enable)
+ {
+ ICSharpCode.Core.AddInManager.Enable(new AddIn[] { foundAddIn });
+ }
+ if (foundAddIn.Action != AddInAction.Install)
+ {
+ foundAddIn.Action = AddInAction.Update;
+ }
+ }
+ else
+ {
+ addInPackage.Install(false);
+ }
+ }
+ RefreshAddInList();
+ }
+ #endregion
+
+ #region Uninstall AddIns
+ void UninstallButtonClick(object sender, EventArgs e)
+ {
+ ICSharpCode.Core.AddInManager.RemoveExternalAddIns(selected);
+ InstallableAddIn.Uninstall(selected);
+ RefreshAddInList();
+ }
+ #endregion
+
+ #region Drag'N'Drop
+ void Panel1DragEnter(object sender, DragEventArgs e)
+ {
+ if (!e.Data.GetDataPresent(DataFormats.FileDrop))
+ {
+ e.Effect = DragDropEffects.None;
+ return;
+ }
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+ int addInCount = 0;
+ int packageCount = 0;
+ foreach (string file in files)
+ {
+ switch (Path.GetExtension(file).ToLowerInvariant())
+ {
+ case ".addin":
+ addInCount += 1;
+ break;
+ case ".sdaddin":
+ case ".zip":
+ packageCount += 1;
+ break;
+ default:
+ e.Effect = DragDropEffects.None;
+ return;
+ }
+ }
+ if (addInCount == 0 && packageCount == 0)
+ {
+ e.Effect = DragDropEffects.None;
+ }
+ else if (addInCount == 0)
+ {
+ e.Effect = DragDropEffects.Copy;
+ }
+ else
+ {
+ e.Effect = DragDropEffects.Link;
+ }
+ }
+
+ void Panel1DragDrop(object sender, DragEventArgs e)
+ {
+ if (!e.Data.GetDataPresent(DataFormats.FileDrop))
+ return;
+ ShowInstallableAddIns((string[])e.Data.GetData(DataFormats.FileDrop));
+ }
+ #endregion
+
+ void CloseButtonClick(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ protected override void OnClosed(EventArgs e)
+ {
+ base.OnClosed(e);
+ instance = null;
+ }
+
+ public void TryRunAction(AddIn addIn, AddInAction action)
+ {
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Selected = ctl.AddIn == addIn;
+ }
+ UpdateActionBox();
+ if (selectedAction == action && runActionButton.Visible && runActionButton.Enabled)
+ runActionButton.PerformClick();
+ }
+
+ public void TryUninstall(AddIn addIn)
+ {
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Selected = ctl.AddIn == addIn;
+ }
+ UpdateActionBox();
+ if (uninstallButton.Visible && uninstallButton.Enabled)
+ uninstallButton.PerformClick();
+ }
+
+ void RunActionButtonClick(object sender, EventArgs e)
+ {
+ switch (selectedAction)
+ {
+ case AddInAction.Disable:
+ for (int i = 0; i < selected.Count; i++)
+ {
+ if (selected[i].Manifest.PrimaryIdentity == "ICSharpCode.AddInManager")
+ {
+ MessageService.ShowMessage("${res:AddInManager.CannotDisableAddInManager}");
+ selected.RemoveAt(i--);
+ }
+ }
+ ICSharpCode.Core.AddInManager.Disable(selected);
+ break;
+ case AddInAction.Enable:
+ ICSharpCode.Core.AddInManager.Enable(selected);
+ break;
+ case AddInAction.Install:
+ RunInstallation();
+ return;
+ case AddInAction.Uninstall:
+ UninstallButtonClick(sender, e);
+ return;
+ case AddInAction.InstalledTwice: // used to cancel installation of update
+ InstallableAddIn.CancelUpdate(selected);
+ foreach (AddIn addIn in selected)
+ {
+ addIn.Action = addIn.Enabled ? AddInAction.Enable : AddInAction.Disable;
+ }
+ break;
+ default:
+ throw new NotImplementedException();
+ }
+ foreach (AddInControl ctl in splitContainer.Panel1.Controls)
+ {
+ ctl.Invalidate();
+ }
+ UpdateActionBox();
+ }
+
+ #region Windows Forms Designer generated code
+ /// <summary>
+ /// This method is required for Windows Forms designer support.
+ /// Do not change the method contents inside the source code editor. The Forms designer might
+ /// not be able to load this method if it was changed manually.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.topPanel = new System.Windows.Forms.Panel();
+ this.bottomPanel = new System.Windows.Forms.Panel();
+ this.installButton = new System.Windows.Forms.Button();
+ this.closeButton = new System.Windows.Forms.Button();
+ this.showPreinstalledAddInsCheckBox = new System.Windows.Forms.CheckBox();
+ this.splitContainer = new System.Windows.Forms.SplitContainer();
+ this.actionGroupBox = new System.Windows.Forms.GroupBox();
+ this.actionFlowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
+ this.actionDescription = new System.Windows.Forms.Label();
+ this.dependencyTable = new System.Windows.Forms.TableLayoutPanel();
+ this.dummyLabel1 = new System.Windows.Forms.Label();
+ this.dummyLabel2 = new System.Windows.Forms.Label();
+ this.runActionButton = new System.Windows.Forms.Button();
+ this.uninstallButton = new System.Windows.Forms.Button();
+ this.bottomPanel.SuspendLayout();
+ this.splitContainer.Panel2.SuspendLayout();
+ this.splitContainer.SuspendLayout();
+ this.actionGroupBox.SuspendLayout();
+ this.actionFlowLayoutPanel.SuspendLayout();
+ this.dependencyTable.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // topPanel
+ //
+ this.topPanel.Dock = System.Windows.Forms.DockStyle.Top;
+ this.topPanel.Location = new System.Drawing.Point(0, 0);
+ this.topPanel.Name = "topPanel";
+ this.topPanel.Size = new System.Drawing.Size(460, 33);
+ this.topPanel.TabIndex = 1;
+ this.topPanel.Visible = false;
+ //
+ // bottomPanel
+ //
+ this.bottomPanel.Controls.Add(this.installButton);
+ this.bottomPanel.Controls.Add(this.closeButton);
+ this.bottomPanel.Controls.Add(this.showPreinstalledAddInsCheckBox);
+ this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.bottomPanel.Location = new System.Drawing.Point(0, 355);
+ this.bottomPanel.Name = "bottomPanel";
+ this.bottomPanel.Size = new System.Drawing.Size(460, 35);
+ this.bottomPanel.TabIndex = 0;
+ //
+ // installButton
+ //
+ this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.installButton.Location = new System.Drawing.Point(274, 6);
+ this.installButton.Name = "installButton";
+ this.installButton.Size = new System.Drawing.Size(93, 23);
+ this.installButton.TabIndex = 1;
+ this.installButton.Text = "Install AddIn";
+ this.installButton.UseCompatibleTextRendering = true;
+ this.installButton.UseVisualStyleBackColor = true;
+ this.installButton.Click += new System.EventHandler(this.InstallButtonClick);
+ //
+ // closeButton
+ //
+ this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.closeButton.Location = new System.Drawing.Point(373, 6);
+ this.closeButton.Name = "closeButton";
+ this.closeButton.Size = new System.Drawing.Size(75, 23);
+ this.closeButton.TabIndex = 2;
+ this.closeButton.Text = "Close";
+ this.closeButton.UseCompatibleTextRendering = true;
+ this.closeButton.UseVisualStyleBackColor = true;
+ this.closeButton.Click += new System.EventHandler(this.CloseButtonClick);
+ //
+ // showPreinstalledAddInsCheckBox
+ //
+ this.showPreinstalledAddInsCheckBox.Location = new System.Drawing.Point(3, 6);
+ this.showPreinstalledAddInsCheckBox.Name = "showPreinstalledAddInsCheckBox";
+ this.showPreinstalledAddInsCheckBox.Size = new System.Drawing.Size(169, 24);
+ this.showPreinstalledAddInsCheckBox.TabIndex = 0;
+ this.showPreinstalledAddInsCheckBox.Text = "Show preinstalled AddIns";
+ this.showPreinstalledAddInsCheckBox.UseCompatibleTextRendering = true;
+ this.showPreinstalledAddInsCheckBox.UseVisualStyleBackColor = true;
+ this.showPreinstalledAddInsCheckBox.CheckedChanged += new System.EventHandler(this.ShowPreinstalledAddInsCheckBoxCheckedChanged);
+ //
+ // splitContainer
+ //
+ this.splitContainer.BackColor = System.Drawing.SystemColors.Window;
+ this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+ this.splitContainer.Location = new System.Drawing.Point(0, 33);
+ this.splitContainer.Name = "splitContainer";
+ //
+ // splitContainer.Panel1
+ //
+ this.splitContainer.Panel1.AllowDrop = true;
+ this.splitContainer.Panel1.AutoScroll = true;
+ this.splitContainer.Panel1.DragDrop += new System.Windows.Forms.DragEventHandler(this.Panel1DragDrop);
+ this.splitContainer.Panel1.DragEnter += new System.Windows.Forms.DragEventHandler(this.Panel1DragEnter);
+ this.splitContainer.Panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.OnSplitContainerPanel1Paint);
+ this.splitContainer.Panel1MinSize = 100;
+ //
+ // splitContainer.Panel2
+ //
+ this.splitContainer.Panel2.Controls.Add(this.actionGroupBox);
+ this.splitContainer.Panel2MinSize = 100;
+ this.splitContainer.Size = new System.Drawing.Size(460, 322);
+ this.splitContainer.SplitterDistance = 248;
+ this.splitContainer.TabIndex = 2;
+ //
+ // actionGroupBox
+ //
+ this.actionGroupBox.Controls.Add(this.actionFlowLayoutPanel);
+ this.actionGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.actionGroupBox.Location = new System.Drawing.Point(0, 0);
+ this.actionGroupBox.Name = "actionGroupBox";
+ this.actionGroupBox.Size = new System.Drawing.Size(208, 322);
+ this.actionGroupBox.TabIndex = 0;
+ this.actionGroupBox.TabStop = false;
+ this.actionGroupBox.Text = "actionGroupBox";
+ this.actionGroupBox.UseCompatibleTextRendering = true;
+ //
+ // actionFlowLayoutPanel
+ //
+ this.actionFlowLayoutPanel.AutoScroll = true;
+ this.actionFlowLayoutPanel.Controls.Add(this.actionDescription);
+ this.actionFlowLayoutPanel.Controls.Add(this.dependencyTable);
+ this.actionFlowLayoutPanel.Controls.Add(this.runActionButton);
+ this.actionFlowLayoutPanel.Controls.Add(this.uninstallButton);
+ this.actionFlowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.actionFlowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
+ this.actionFlowLayoutPanel.ForeColor = System.Drawing.SystemColors.WindowText;
+ this.actionFlowLayoutPanel.Location = new System.Drawing.Point(3, 17);
+ this.actionFlowLayoutPanel.Name = "actionFlowLayoutPanel";
+ this.actionFlowLayoutPanel.Size = new System.Drawing.Size(202, 302);
+ this.actionFlowLayoutPanel.TabIndex = 0;
+ this.actionFlowLayoutPanel.WrapContents = false;
+ //
+ // actionDescription
+ //
+ this.actionDescription.AutoSize = true;
+ this.actionDescription.Location = new System.Drawing.Point(3, 0);
+ this.actionDescription.Name = "actionDescription";
+ this.actionDescription.Size = new System.Drawing.Size(90, 18);
+ this.actionDescription.TabIndex = 0;
+ this.actionDescription.Text = "actionDescription";
+ this.actionDescription.UseCompatibleTextRendering = true;
+ //
+ // dependencyTable
+ //
+ this.dependencyTable.AutoSize = true;
+ this.dependencyTable.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.dependencyTable.ColumnCount = 2;
+ this.dependencyTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.dependencyTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.dependencyTable.Controls.Add(this.dummyLabel1, 1, 0);
+ this.dependencyTable.Controls.Add(this.dummyLabel2, 1, 1);
+ this.dependencyTable.Location = new System.Drawing.Point(3, 21);
+ this.dependencyTable.Name = "dependencyTable";
+ this.dependencyTable.RowCount = 2;
+ this.dependencyTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.dependencyTable.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.dependencyTable.Size = new System.Drawing.Size(55, 36);
+ this.dependencyTable.TabIndex = 1;
+ //
+ // dummyLabel1
+ //
+ this.dummyLabel1.AutoSize = true;
+ this.dummyLabel1.Location = new System.Drawing.Point(23, 0);
+ this.dummyLabel1.Name = "dummyLabel1";
+ this.dummyLabel1.Size = new System.Drawing.Size(29, 18);
+ this.dummyLabel1.TabIndex = 0;
+ this.dummyLabel1.Text = "dep1";
+ this.dummyLabel1.UseCompatibleTextRendering = true;
+ //
+ // dummyLabel2
+ //
+ this.dummyLabel2.AutoSize = true;
+ this.dummyLabel2.Location = new System.Drawing.Point(23, 18);
+ this.dummyLabel2.Name = "dummyLabel2";
+ this.dummyLabel2.Size = new System.Drawing.Size(29, 18);
+ this.dummyLabel2.TabIndex = 1;
+ this.dummyLabel2.Text = "dep2";
+ this.dummyLabel2.UseCompatibleTextRendering = true;
+ //
+ // runActionButton
+ //
+ this.runActionButton.AutoSize = true;
+ this.runActionButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.runActionButton.Location = new System.Drawing.Point(3, 63);
+ this.runActionButton.MinimumSize = new System.Drawing.Size(91, 25);
+ this.runActionButton.Name = "runActionButton";
+ this.runActionButton.Size = new System.Drawing.Size(91, 25);
+ this.runActionButton.TabIndex = 2;
+ this.runActionButton.Text = "runAction";
+ this.runActionButton.UseCompatibleTextRendering = true;
+ this.runActionButton.UseVisualStyleBackColor = true;
+ this.runActionButton.Click += new System.EventHandler(this.RunActionButtonClick);
+ //
+ // uninstallButton
+ //
+ this.uninstallButton.AutoSize = true;
+ this.uninstallButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.uninstallButton.Location = new System.Drawing.Point(3, 94);
+ this.uninstallButton.MinimumSize = new System.Drawing.Size(91, 25);
+ this.uninstallButton.Name = "uninstallButton";
+ this.uninstallButton.Size = new System.Drawing.Size(91, 25);
+ this.uninstallButton.TabIndex = 3;
+ this.uninstallButton.Text = "Uninstall";
+ this.uninstallButton.UseCompatibleTextRendering = true;
+ this.uninstallButton.UseVisualStyleBackColor = true;
+ this.uninstallButton.Click += new System.EventHandler(this.UninstallButtonClick);
+ //
+ // ManagerForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(460, 390);
+ this.Controls.Add(this.splitContainer);
+ this.Controls.Add(this.bottomPanel);
+ this.Controls.Add(this.topPanel);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+ this.MinimumSize = new System.Drawing.Size(250, 200);
+ this.Name = "ManagerForm";
+ this.Text = "AddIn Manager";
+ this.bottomPanel.ResumeLayout(false);
+ this.splitContainer.Panel2.ResumeLayout(false);
+ this.splitContainer.ResumeLayout(false);
+ this.actionGroupBox.ResumeLayout(false);
+ this.actionFlowLayoutPanel.ResumeLayout(false);
+ this.actionFlowLayoutPanel.PerformLayout();
+ this.dependencyTable.ResumeLayout(false);
+ this.dependencyTable.PerformLayout();
+ this.ResumeLayout(false);
+ }
+ private System.Windows.Forms.Label dummyLabel2;
+ private System.Windows.Forms.Label dummyLabel1;
+ private System.Windows.Forms.CheckBox showPreinstalledAddInsCheckBox;
+ private System.Windows.Forms.Button installButton;
+ private System.Windows.Forms.Button uninstallButton;
+ private System.Windows.Forms.Button runActionButton;
+ private System.Windows.Forms.TableLayoutPanel dependencyTable;
+ private System.Windows.Forms.Label actionDescription;
+ private System.Windows.Forms.FlowLayoutPanel actionFlowLayoutPanel;
+ private System.Windows.Forms.GroupBox actionGroupBox;
+ private System.Windows.Forms.Button closeButton;
+ private System.Windows.Forms.SplitContainer splitContainer;
+ private System.Windows.Forms.Panel bottomPanel;
+ private System.Windows.Forms.Panel topPanel;
+ #endregion
+ }
+}
Property changes on: trunk/Tools/Maestro/Maestro.AddInManager/Properties
___________________________________________________________________
Added: bugtraq:number
+ true
Added: trunk/Tools/Maestro/Maestro.AddInManager/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/Properties/AssemblyInfo.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/Properties/AssemblyInfo.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,20 @@
+#region Using directives
+
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+#endregion
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Maestro.AddInManager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyProduct("Maestro.AddInManager")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// This sets the default COM visibility of types in the assembly to invisible.
+// If you need to expose a type to COM, use [ComVisible(true)] on that type.
+[assembly: ComVisible(false)]
Added: trunk/Tools/Maestro/Maestro.AddInManager/Strings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/Strings.Designer.cs (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/Strings.Designer.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,379 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.225
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Maestro.AddInManager {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Strings {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Strings() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Maestro.AddInManager.Strings", typeof(Strings).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to About.
+ /// </summary>
+ internal static string AddInManager_About {
+ get {
+ return ResourceManager.GetString("AddInManager.About", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Cancel deinstallation.
+ /// </summary>
+ internal static string AddInManager_ActionCancelDeinstallation {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionCancelDeinstallation", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Cancel installation.
+ /// </summary>
+ internal static string AddInManager_ActionCancelInstallation {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionCancelInstallation", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Cancel update.
+ /// </summary>
+ internal static string AddInManager_ActionCancelUpdate {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionCancelUpdate", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Disable.
+ /// </summary>
+ internal static string AddInManager_ActionDisable {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionDisable", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Enable.
+ /// </summary>
+ internal static string AddInManager_ActionEnable {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionEnable", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Install.
+ /// </summary>
+ internal static string AddInManager_ActionInstall {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionInstall", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Uninstall.
+ /// </summary>
+ internal static string AddInManager_ActionUninstall {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionUninstall", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Update.
+ /// </summary>
+ internal static string AddInManager_ActionUpdate {
+ get {
+ return ResourceManager.GetString("AddInManager.ActionUpdate", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to A dependency for this AddIn was not found. Install it to enable this AddIn..
+ /// </summary>
+ internal static string AddInManager_AddInDependencyFailed {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInDependencyFailed", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Disabled.
+ /// </summary>
+ internal static string AddInManager_AddInDisabled {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInDisabled", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn will be enabled after restarting Maestro.
+ /// </summary>
+ internal static string AddInManager_AddInEnabled {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInEnabled", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn will be installed after restarting Maestro.
+ /// </summary>
+ internal static string AddInManager_AddInInstalled {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInInstalled", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to This AddIns is installed twice. Please uninstall one copy..
+ /// </summary>
+ internal static string AddInManager_AddInInstalledTwice {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInInstalledTwice", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn will be removed after restarting Maestro.
+ /// </summary>
+ internal static string AddInManager_AddInRemoved {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInRemoved", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn will be updated after restarting Maestro.
+ /// </summary>
+ internal static string AddInManager_AddInUpdated {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInUpdated", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn will be disabled after restarting Maestro.
+ /// </summary>
+ internal static string AddInManager_AddInWillBeDisabled {
+ get {
+ return ResourceManager.GetString("AddInManager.AddInWillBeDisabled", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Aborts the deinstallation of the selected AddIn(s)..
+ /// </summary>
+ internal static string AddInManager_DescriptionCancelDeinstallation {
+ get {
+ return ResourceManager.GetString("AddInManager.DescriptionCancelDeinstallation", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Aborts the installation of the selected AddIn(s)..
+ /// </summary>
+ internal static string AddInManager_DescriptionCancelInstall {
+ get {
+ return ResourceManager.GetString("AddInManager.DescriptionCancelInstall", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Aborts the update of the selected AddIn(s)..
+ /// </summary>
+ internal static string AddInManager_DescriptionCancelUpdate {
+ get {
+ return ResourceManager.GetString("AddInManager.DescriptionCancelUpdate", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Disables the selected AddIn(s)..
+ /// </summary>
+ internal static string AddInManager_DescriptionDisable {
+ get {
+ return ResourceManager.GetString("AddInManager.DescriptionDisable", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Enables the selected AddIn(s)..
+ /// </summary>
+ internal static string AddInManager_DescriptionEnable {
+ get {
+ return ResourceManager.GetString("AddInManager.DescriptionEnable", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to The selection is inconsistent, please select only AddIns with the same status..
+ /// </summary>
+ internal static string AddInManager_DescriptionInconsistentSelection {
+ get {
+ return ResourceManager.GetString("AddInManager.DescriptionInconsistentSelection", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn Installation Package.
+ /// </summary>
+ internal static string AddInManager_FileAssociation {
+ get {
+ return ResourceManager.GetString("AddInManager.FileAssociation", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIn Files|*.addin;*.sdaddin|All files|*.*.
+ /// </summary>
+ internal static string AddInManager_FileFilter {
+ get {
+ return ResourceManager.GetString("AddInManager.FileFilter", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to &Install AddIn.
+ /// </summary>
+ internal static string AddInManager_InstallButton {
+ get {
+ return ResourceManager.GetString("AddInManager.InstallButton", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to You don't have any AddIns installed.
+ ///Download an AddIn from the Internet, then click 'Install AddIn' and choose the downloaded file to install it..
+ /// </summary>
+ internal static string AddInManager_NoAddInsInstalled {
+ get {
+ return ResourceManager.GetString("AddInManager.NoAddInsInstalled", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Open Website.
+ /// </summary>
+ internal static string AddInManager_OpenWebsite {
+ get {
+ return ResourceManager.GetString("AddInManager.OpenWebsite", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Options.
+ /// </summary>
+ internal static string AddInManager_Options {
+ get {
+ return ResourceManager.GetString("AddInManager.Options", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to AddIns are required by:.
+ /// </summary>
+ internal static string AddInManager_RequiredBy {
+ get {
+ return ResourceManager.GetString("AddInManager.RequiredBy", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Required dependencies:.
+ /// </summary>
+ internal static string AddInManager_RequiredDependencies {
+ get {
+ return ResourceManager.GetString("AddInManager.RequiredDependencies", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Show preinstalled AddIns.
+ /// </summary>
+ internal static string AddInManager_ShowPreinstalledAddIns {
+ get {
+ return ResourceManager.GetString("AddInManager.ShowPreinstalledAddIns", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Add-In Manager.
+ /// </summary>
+ internal static string AddInManager_Title {
+ get {
+ return ResourceManager.GetString("AddInManager.Title", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Add-In Manager.
+ /// </summary>
+ internal static string CMD_AddInManager {
+ get {
+ return ResourceManager.GetString("CMD_AddInManager", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Close.
+ /// </summary>
+ internal static string TextClose {
+ get {
+ return ResourceManager.GetString("TextClose", resourceCulture);
+ }
+ }
+ }
+}
Added: trunk/Tools/Maestro/Maestro.AddInManager/Strings.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddInManager/Strings.resx (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddInManager/Strings.resx 2012-05-29 13:59:28 UTC (rev 6707)
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="AddInManager.About" xml:space="preserve">
+ <value>About</value>
+ </data>
+ <data name="AddInManager.ActionCancelDeinstallation" xml:space="preserve">
+ <value>Cancel deinstallation</value>
+ </data>
+ <data name="AddInManager.ActionCancelInstallation" xml:space="preserve">
+ <value>Cancel installation</value>
+ </data>
+ <data name="AddInManager.ActionCancelUpdate" xml:space="preserve">
+ <value>Cancel update</value>
+ </data>
+ <data name="AddInManager.ActionDisable" xml:space="preserve">
+ <value>Disable</value>
+ </data>
+ <data name="AddInManager.ActionEnable" xml:space="preserve">
+ <value>Enable</value>
+ </data>
+ <data name="AddInManager.ActionInstall" xml:space="preserve">
+ <value>Install</value>
+ </data>
+ <data name="AddInManager.ActionUninstall" xml:space="preserve">
+ <value>Uninstall</value>
+ </data>
+ <data name="AddInManager.ActionUpdate" xml:space="preserve">
+ <value>Update</value>
+ </data>
+ <data name="AddInManager.AddInDependencyFailed" xml:space="preserve">
+ <value>A dependency for this AddIn was not found. Install it to enable this AddIn.</value>
+ </data>
+ <data name="AddInManager.AddInDisabled" xml:space="preserve">
+ <value>Disabled</value>
+ </data>
+ <data name="AddInManager.AddInEnabled" xml:space="preserve">
+ <value>AddIn will be enabled after restarting Maestro</value>
+ </data>
+ <data name="AddInManager.AddInInstalled" xml:space="preserve">
+ <value>AddIn will be installed after restarting Maestro</value>
+ </data>
+ <data name="AddInManager.AddInInstalledTwice" xml:space="preserve">
+ <value>This AddIns is installed twice. Please uninstall one copy.</value>
+ </data>
+ <data name="AddInManager.AddInRemoved" xml:space="preserve">
+ <value>AddIn will be removed after restarting Maestro</value>
+ </data>
+ <data name="AddInManager.AddInUpdated" xml:space="preserve">
+ <value>AddIn will be updated after restarting Maestro</value>
+ </data>
+ <data name="AddInManager.AddInWillBeDisabled" xml:space="preserve">
+ <value>AddIn will be disabled after restarting Maestro</value>
+ </data>
+ <data name="AddInManager.DescriptionCancelDeinstallation" xml:space="preserve">
+ <value>Aborts the deinstallation of the selected AddIn(s).</value>
+ </data>
+ <data name="AddInManager.DescriptionCancelInstall" xml:space="preserve">
+ <value>Aborts the installation of the selected AddIn(s).</value>
+ </data>
+ <data name="AddInManager.DescriptionCancelUpdate" xml:space="preserve">
+ <value>Aborts the update of the selected AddIn(s).</value>
+ </data>
+ <data name="AddInManager.DescriptionDisable" xml:space="preserve">
+ <value>Disables the selected AddIn(s).</value>
+ </data>
+ <data name="AddInManager.DescriptionEnable" xml:space="preserve">
+ <value>Enables the selected AddIn(s).</value>
+ </data>
+ <data name="AddInManager.DescriptionInconsistentSelection" xml:space="preserve">
+ <value>The selection is inconsistent, please select only AddIns with the same status.</value>
+ </data>
+ <data name="AddInManager.FileAssociation" xml:space="preserve">
+ <value>AddIn Installation Package</value>
+ </data>
+ <data name="AddInManager.FileFilter" xml:space="preserve">
+ <value>AddIn Files|*.addin;*.sdaddin|All files|*.*</value>
+ </data>
+ <data name="AddInManager.InstallButton" xml:space="preserve">
+ <value>&Install AddIn</value>
+ </data>
+ <data name="AddInManager.NoAddInsInstalled" xml:space="preserve">
+ <value>You don't have any AddIns installed.
+Download an AddIn from the Internet, then click 'Install AddIn' and choose the downloaded file to install it.</value>
+ </data>
+ <data name="AddInManager.OpenWebsite" xml:space="preserve">
+ <value>Open Website</value>
+ </data>
+ <data name="AddInManager.Options" xml:space="preserve">
+ <value>Options</value>
+ </data>
+ <data name="AddInManager.RequiredBy" xml:space="preserve">
+ <value>AddIns are required by:</value>
+ </data>
+ <data name="AddInManager.RequiredDependencies" xml:space="preserve">
+ <value>Required dependencies:</value>
+ </data>
+ <data name="AddInManager.ShowPreinstalledAddIns" xml:space="preserve">
+ <value>Show preinstalled AddIns</value>
+ </data>
+ <data name="AddInManager.Title" xml:space="preserve">
+ <value>Add-In Manager</value>
+ </data>
+ <data name="CMD_AddInManager" xml:space="preserve">
+ <value>Add-In Manager</value>
+ </data>
+ <data name="TextClose" xml:space="preserve">
+ <value>Close</value>
+ </data>
+</root>
\ No newline at end of file
Modified: trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin 2012-05-29 13:59:28 UTC (rev 6707)
@@ -2,7 +2,7 @@
author="Jackie Ng"
url="http://trac.osgeo.org/mapguide/wiki/maestro"
description="Base Component for MapGuide Maestro"
- addInManagerHidden="preinstalled">
+ addInManagerHidden="true">
<Manifest>
<Identity name="Maestro.Base" />
@@ -193,6 +193,11 @@
type="Menu"
label="${res:Menu_Tools}">
<Include id="ToolList" path="/Workspace/Tools" />
+ <MenuItem type="Separator" />
+ <MenuItem id="Menu_Tools_Options"
+ label="${res:Menu_Tools_Options}"
+ icon="application_task"
+ class="Maestro.Base.Commands.OptionsCommand"/>
</MenuItem>
<MenuItem id="Menu_Window"
type="Menu"
@@ -690,11 +695,6 @@
<MenuItem id="CacheView"
label="${res:CacheView}"
class="Maestro.Base.Commands.CacheViewerCommand"/>
- <MenuItem type="Separator" />
- <MenuItem id="Menu_Tools_Options"
- label="${res:Menu_Tools_Options}"
- icon="application_task"
- class="Maestro.Base.Commands.OptionsCommand"/>
</Path>
</AddIn>
Modified: trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Preferences/ConfigProperties.cs 2012-05-29 13:59:28 UTC (rev 6707)
@@ -75,7 +75,7 @@
public static string DefaultLocalFsPreviewPath { get { return Path.Combine(FileUtility.ApplicationRootPath, "MaestroFsPreview.exe"); } }
public static string DefaultRtMapInspectorPath { get { return Path.Combine(FileUtility.ApplicationRootPath, "RtMapInspector.exe"); } }
-
+
public static Color DefaultOpenColor { get { return Color.LightGreen; } }
public static Color DefaultDirtyColor { get { return Color.Pink; } }
@@ -83,7 +83,7 @@
public static bool DefaultShowMessages { get { return true; } }
public static bool DefaultShowOutboundRequests { get { return true; } }
-
+
public static bool DefaultValidateOnSave { get { return true; } }
public static string DefaultXsdSchemaPath { get { return Path.Combine(FileUtility.ApplicationRootPath, "Schemas"); } }
Modified: trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj
===================================================================
--- trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj 2012-05-29 13:59:28 UTC (rev 6707)
@@ -55,39 +55,66 @@
</Compile>
<Compile Include="Menu\IStatusUpdate.cs" />
<Compile Include="Menu\ISubmenuBuilder.cs" />
- <Compile Include="Menu\Menu.cs" />
- <Compile Include="Menu\MenuCheckBox.cs" />
- <Compile Include="Menu\MenuCommand.cs" />
- <Compile Include="Menu\MenuSeparator.cs" />
+ <Compile Include="Menu\Menu.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Menu\MenuCheckBox.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Menu\MenuCommand.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="Menu\MenuSeparator.cs">
+ <SubType>Component</SubType>
+ </Compile>
<Compile Include="Menu\MenuService.cs" />
- <Compile Include="MessageService\CustomDialog.cs" />
+ <Compile Include="MessageService\CustomDialog.cs">
+ <SubType>Form</SubType>
+ </Compile>
<Compile Include="MessageService\IDialogMessageService.cs" />
- <Compile Include="MessageService\InputBox.cs" />
- <Compile Include="MessageService\SaveErrorChooseDialog.cs" />
- <Compile Include="MessageService\SaveErrorInformDialog.cs" />
+ <Compile Include="MessageService\InputBox.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="MessageService\SaveErrorChooseDialog.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="MessageService\SaveErrorInformDialog.cs">
+ <SubType>Form</SubType>
+ </Compile>
<Compile Include="MessageService\WinFormsMessageService.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="ToolBar\ToolBarCheckBox.cs" />
- <Compile Include="ToolBar\ToolBarComboBox.cs" />
- <Compile Include="ToolBar\ToolBarCommand.cs" />
- <Compile Include="ToolBar\ToolBarDropDownButton.cs" />
- <Compile Include="ToolBar\ToolBarLabel.cs" />
- <Compile Include="ToolBar\ToolBarSeparator.cs" />
+ <Compile Include="ToolBar\ToolBarCheckBox.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="ToolBar\ToolBarComboBox.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="ToolBar\ToolBarCommand.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="ToolBar\ToolBarDropDownButton.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="ToolBar\ToolBarLabel.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="ToolBar\ToolBarSeparator.cs">
+ <SubType>Component</SubType>
+ </Compile>
<Compile Include="ToolBar\ToolBarService.cs" />
- <Compile Include="ToolBar\ToolBarSplitButton.cs" />
- <Compile Include="ToolBar\ToolBarTextBox.cs" />
+ <Compile Include="ToolBar\ToolBarSplitButton.cs">
+ <SubType>Component</SubType>
+ </Compile>
+ <Compile Include="ToolBar\ToolBarTextBox.cs">
+ <SubType>Component</SubType>
+ </Compile>
<Compile Include="Util\ClipboardWrapper.cs" />
<Compile Include="Util\NativeMethods.cs" />
<Compile Include="Util\RightToLeftConverter.cs" />
<Compile Include="WinFormsResourceService.cs" />
</ItemGroup>
+ <ItemGroup />
<ItemGroup>
- <Folder Include="Menu" />
- <Folder Include="MessageService" />
- <Folder Include="ToolBar" />
- <Folder Include="Util" />
- </ItemGroup>
- <ItemGroup>
<ProjectReference Include="..\ICSharpCode.Core\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
Modified: trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj
===================================================================
--- trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj 2012-05-29 12:27:02 UTC (rev 6706)
+++ trunk/Tools/Maestro/Thirdparty/SharpDevelop/ICSharpCode.TextEditor/ICSharpCode.TextEditor.csproj 2012-05-29 13:59:28 UTC (rev 6707)
@@ -147,7 +147,7 @@
<Compile Include="Src\Document\ITextEditorProperties.cs" />
<Compile Include="Src\Gui\Caret.cs" />
<Compile Include="Src\Gui\TextArea.cs">
- <SubType>UserControl</SubType>
+ <SubType>Component</SubType>
</Compile>
<Compile Include="Src\Gui\TextEditorControl.cs">
<SubType>UserControl</SubType>
@@ -189,7 +189,7 @@
</Compile>
<Compile Include="Src\Gui\BrushRegistry.cs" />
<Compile Include="Src\Gui\HRuler.cs">
- <SubType>UserControl</SubType>
+ <SubType>Component</SubType>
</Compile>
<Compile Include="Src\Document\BookmarkManager\Bookmark.cs" />
<Compile Include="Src\Document\BookmarkManager\BookmarkEventHandler.cs" />
More information about the mapguide-commits
mailing list