mit hyphen
This commit is contained in:
parent
8896edc368
commit
318d93e6c1
@ -42,7 +42,7 @@ namespace Miranda
|
||||
{
|
||||
}
|
||||
|
||||
protected override void AfterPluginInitialization()
|
||||
/*protected override void AfterPluginInitialization()
|
||||
{
|
||||
base.AfterPluginInitialization();
|
||||
}
|
||||
@ -70,6 +70,6 @@ namespace Miranda
|
||||
public override object InitializeLifetimeService()
|
||||
{
|
||||
return base.InitializeLifetimeService();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,35 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<CodeAnalysisLogFile>..\library\Managed\AutoConnect.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>..\library\Managed\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<CodeAnalysisLogFile>..\library\Managed\AutoConnect.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Hyphen">
|
||||
|
29
Hyphen/Plugins/AssemblyProbe.cs
Normal file
29
Hyphen/Plugins/AssemblyProbe.cs
Normal file
@ -0,0 +1,29 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
public abstract class AssemblyProbe : RemoteObject
|
||||
{
|
||||
public abstract string[] FindAssemblies();
|
||||
}
|
||||
}
|
31
Hyphen/Plugins/Collections/ConfigurationValues.cs
Normal file
31
Hyphen/Plugins/Collections/ConfigurationValues.cs
Normal file
@ -0,0 +1,31 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
[Serializable]
|
||||
public class ConfigurationValues : Dictionary<string, string>
|
||||
{
|
||||
public ConfigurationValues() : base(1) { }
|
||||
protected ConfigurationValues(SerializationInfo info, StreamingContext context) : base(info, context) { }
|
||||
}
|
||||
}
|
33
Hyphen/Plugins/Collections/ControlCollection.cs
Normal file
33
Hyphen/Plugins/Collections/ControlCollection.cs
Normal file
@ -0,0 +1,33 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
public sealed class ControlCollection : List<Control>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal ControlCollection() : base(1) { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Hyphen.Mini.Custom;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
internal sealed class CustomApiExportDescriptorCollection : List<CustomApiExportDescriptor>
|
||||
{
|
||||
public CustomApiExportDescriptorCollection() : base() { }
|
||||
}
|
||||
}
|
34
Hyphen/Plugins/Collections/EventHandleCollection.cs
Normal file
34
Hyphen/Plugins/Collections/EventHandleCollection.cs
Normal file
@ -0,0 +1,34 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
[CLSCompliant(false)]
|
||||
public sealed class EventHandleCollection : List<EventHandle>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal EventHandleCollection() : base(3) { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
55
Hyphen/Plugins/Collections/HookDescriptorCollection.cs
Normal file
55
Hyphen/Plugins/Collections/HookDescriptorCollection.cs
Normal file
@ -0,0 +1,55 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
internal sealed class HookDescriptorCollection : List<HookDescriptor>, ITagSearchable<HookDescriptor>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
public HookDescriptorCollection() : base(3) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Impl
|
||||
|
||||
public new void Add(HookDescriptor item)
|
||||
{
|
||||
if (Contains(item)) return;
|
||||
base.Add(item);
|
||||
}
|
||||
|
||||
public HookDescriptor Find(string name)
|
||||
{
|
||||
if (name == null)
|
||||
throw new ArgumentNullException("name");
|
||||
|
||||
foreach (HookDescriptor descriptor in this)
|
||||
if (descriptor.Name == name)
|
||||
return descriptor;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
26
Hyphen/Plugins/Collections/ITagSearchable.cs
Normal file
26
Hyphen/Plugins/Collections/ITagSearchable.cs
Normal file
@ -0,0 +1,26 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
internal interface ITagSearchable<T>
|
||||
{
|
||||
T Find(string tag);
|
||||
}
|
||||
}
|
53
Hyphen/Plugins/Collections/MenuItemDeclarationCollection.cs
Normal file
53
Hyphen/Plugins/Collections/MenuItemDeclarationCollection.cs
Normal file
@ -0,0 +1,53 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
public sealed class MenuItemDeclarationCollection : List<MenuItemDeclarationAttribute>, ITagSearchable<MenuItemDeclarationAttribute>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal MenuItemDeclarationCollection() : base(3) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Impl
|
||||
|
||||
public MenuItemDeclarationAttribute this[string tag]
|
||||
{
|
||||
get
|
||||
{
|
||||
return Find(tag);
|
||||
}
|
||||
}
|
||||
|
||||
public MenuItemDeclarationAttribute Find(string tag)
|
||||
{
|
||||
foreach (MenuItemDeclarationAttribute item in this)
|
||||
if (item.Tag.Equals(tag, StringComparison.Ordinal)) return item;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
public sealed class MenuItemDeclarationReadOnlyCollection : ReadOnlyCollection<MenuItemDeclarationAttribute>, ITagSearchable<MenuItemDeclarationAttribute>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal MenuItemDeclarationReadOnlyCollection(MenuItemDeclarationCollection list) : base(list) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Impl
|
||||
|
||||
public MenuItemDeclarationAttribute this[string tag]
|
||||
{
|
||||
get
|
||||
{
|
||||
return Find(tag);
|
||||
}
|
||||
}
|
||||
|
||||
public MenuItemDeclarationAttribute Find(string tag)
|
||||
{
|
||||
if (String.IsNullOrEmpty(tag))
|
||||
throw new ArgumentNullException("tag");
|
||||
|
||||
foreach (MenuItemDeclarationAttribute item in this)
|
||||
if (tag.Equals(item.Tag, StringComparison.Ordinal))
|
||||
return item;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
33
Hyphen/Plugins/Collections/ModuleCollection.cs
Normal file
33
Hyphen/Plugins/Collections/ModuleCollection.cs
Normal file
@ -0,0 +1,33 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Hyphen.Mini;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
public sealed class ModuleCollection : List<Module>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal ModuleCollection() : base(1) { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
35
Hyphen/Plugins/Collections/ModuleReadOnlyCollection.cs
Normal file
35
Hyphen/Plugins/Collections/ModuleReadOnlyCollection.cs
Normal file
@ -0,0 +1,35 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Collections.ObjectModel;
|
||||
using Virtuoso.Hyphen.Mini;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
public sealed class ModuleReadOnlyCollection : ReadOnlyCollection<Module>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal ModuleReadOnlyCollection(ModuleCollection list) : base(list) { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
77
Hyphen/Plugins/Collections/PluginDescriptorCollection.cs
Normal file
77
Hyphen/Plugins/Collections/PluginDescriptorCollection.cs
Normal file
@ -0,0 +1,77 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
/* DO NOT USE FIND... OR CONTAINS... METHODS THAT ACCEPT A TYPE INSTANCE FROM ANOTHER APPDOMAIN,
|
||||
* YOU MAY LEAK ITS ASSEMBLY TO THAT DOMAIN. */
|
||||
public sealed class PluginDescriptorCollection : List<PluginDescriptor>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal PluginDescriptorCollection() : base(3) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Find methods
|
||||
|
||||
public PluginDescriptor FindDescriptorOf(MirandaPlugin plugin)
|
||||
{
|
||||
if (plugin == null)
|
||||
throw new ArgumentNullException("plugin");
|
||||
|
||||
foreach (PluginDescriptor descriptor in this)
|
||||
if (descriptor.Plugin == plugin) return descriptor;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public PluginDescriptor FindDescriptorOf(Type pluginType)
|
||||
{
|
||||
if (pluginType == null)
|
||||
throw new ArgumentNullException("plugin");
|
||||
|
||||
if (!pluginType.IsSubclassOf(DefaultPluginManager.PluginType))
|
||||
return null;
|
||||
|
||||
foreach (PluginDescriptor descriptor in this)
|
||||
if (descriptor.Plugin.GetType() == pluginType) return descriptor;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Contains methods
|
||||
|
||||
public bool ContainsDescriptorOf(MirandaPlugin plugin)
|
||||
{
|
||||
return (FindDescriptorOf(plugin) != null);
|
||||
}
|
||||
|
||||
public bool ContainsDescriptorOf(Type pluginType)
|
||||
{
|
||||
return (FindDescriptorOf(pluginType) != null);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
/* DO NOT USE FIND... OR CONTAINS... METHODS THAT ACCEPT A TYPE INSTANCE FROM ANOTHER APPDOMAIN,
|
||||
* YOU MAY LEAK AN ASSEMBLY TO THAT DOMAIN. */
|
||||
public sealed class PluginDescriptorReadOnlyCollection : ReadOnlyCollection<PluginDescriptor>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal PluginDescriptorReadOnlyCollection(PluginDescriptorCollection list) : base(list) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Find methods
|
||||
|
||||
public PluginDescriptor FindDescriptorOf(MirandaPlugin plugin)
|
||||
{
|
||||
return ((PluginDescriptorCollection)Items).FindDescriptorOf(plugin);
|
||||
}
|
||||
|
||||
public PluginDescriptor FindDescriptorOf(Type pluginType)
|
||||
{
|
||||
return ((PluginDescriptorCollection)Items).FindDescriptorOf(pluginType);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Contains methods
|
||||
|
||||
public bool ContainsDescriptorOf(MirandaPlugin plugin)
|
||||
{
|
||||
return ((PluginDescriptorCollection)Items).FindDescriptorOf(plugin) != null;
|
||||
}
|
||||
|
||||
public bool ContainsDescriptorOf(Type pluginType)
|
||||
{
|
||||
return ((PluginDescriptorCollection)Items).FindDescriptorOf(pluginType) != null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
53
Hyphen/Plugins/Collections/ProtocolDictionary.cs
Normal file
53
Hyphen/Plugins/Collections/ProtocolDictionary.cs
Normal file
@ -0,0 +1,53 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Collections
|
||||
{
|
||||
public sealed class ProtocolDictionary : Dictionary<string, Protocol>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal ProtocolDictionary(int count) : base(count) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Indexers
|
||||
|
||||
public new Protocol this[string key]
|
||||
{
|
||||
get
|
||||
{
|
||||
bool notFound = (key == null || !ContainsKey(key));
|
||||
Debug.Assert(!notFound);
|
||||
|
||||
if (notFound)
|
||||
return Protocol.UnknownProtocol;
|
||||
|
||||
return base[key];
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
101
Hyphen/Plugins/ConfigurableMirandaPlugin.cs
Normal file
101
Hyphen/Plugins/ConfigurableMirandaPlugin.cs
Normal file
@ -0,0 +1,101 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms.Controls;
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Configuration;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
public abstract class ConfigurableMirandaPlugin<TConfiguration> : MirandaPlugin, IConfigurablePluginBase<TConfiguration> where TConfiguration : PluginConfiguration
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private TConfiguration pluginConfiguration;
|
||||
public TConfiguration PluginConfiguration
|
||||
{
|
||||
get { return pluginConfiguration; }
|
||||
}
|
||||
|
||||
private PluginConfiguration[] configuration;
|
||||
PluginConfiguration[] IConfigurablePlugin.Configuration
|
||||
{
|
||||
get { return configuration ?? (configuration = new PluginConfiguration[] { pluginConfiguration }); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
protected ConfigurableMirandaPlugin() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
internal override void AfterPluginInitializationInternal()
|
||||
{
|
||||
pluginConfiguration = Infrastructure.PluginConfiguration.Load<TConfiguration>();
|
||||
base.AfterPluginInitializationInternal();
|
||||
}
|
||||
|
||||
internal override void BeforePluginDisableInternal()
|
||||
{
|
||||
SaveConfiguration();
|
||||
base.BeforePluginDisableInternal();
|
||||
}
|
||||
|
||||
internal override void BeforeMirandaShutdownInternal()
|
||||
{
|
||||
SaveConfiguration();
|
||||
base.BeforeMirandaShutdownInternal();
|
||||
}
|
||||
|
||||
private void SaveConfiguration()
|
||||
{
|
||||
//if (pluginConfiguration.IsDirty)
|
||||
pluginConfiguration.Save();
|
||||
}
|
||||
|
||||
public void ResetConfiguration()
|
||||
{
|
||||
pluginConfiguration = Infrastructure.PluginConfiguration.GetDefaultConfiguration<TConfiguration>();
|
||||
}
|
||||
|
||||
public void ReloadConfiguration()
|
||||
{
|
||||
pluginConfiguration = Infrastructure.PluginConfiguration.Load<TConfiguration>();
|
||||
}
|
||||
|
||||
public abstract void PopulateConfiguration(CategoryCollection categories);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public override bool HasOptions
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
73
Hyphen/Plugins/Configuration/Category.cs
Normal file
73
Hyphen/Plugins/Configuration/Category.cs
Normal file
@ -0,0 +1,73 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class Category
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private string name, description;
|
||||
private CategoryItemCollection items;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public Category(string name, string description)
|
||||
{
|
||||
if (String.IsNullOrEmpty(name))
|
||||
throw new ArgumentNullException("name");
|
||||
|
||||
if (String.IsNullOrEmpty(description))
|
||||
throw new ArgumentNullException("description");
|
||||
|
||||
this.items = new CategoryItemCollection();
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string Description
|
||||
{
|
||||
get { return description; }
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return name; }
|
||||
}
|
||||
|
||||
public CategoryItemCollection Items
|
||||
{
|
||||
get { return items; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
33
Hyphen/Plugins/Configuration/CategoryCollection.cs
Normal file
33
Hyphen/Plugins/Configuration/CategoryCollection.cs
Normal file
@ -0,0 +1,33 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class CategoryCollection : List<Category>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
public CategoryCollection() : base(1) { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
133
Hyphen/Plugins/Configuration/CategoryItem.cs
Normal file
133
Hyphen/Plugins/Configuration/CategoryItem.cs
Normal file
@ -0,0 +1,133 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms.Controls;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class CategoryItem
|
||||
{
|
||||
#region Delegates
|
||||
|
||||
public delegate void Command(CategoryItem item);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private string name, description;
|
||||
private CategoryItemControl control;
|
||||
private Type controlType;
|
||||
private Image image;
|
||||
|
||||
private bool isExpertOption;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public CategoryItem(string name, string description, Command command)
|
||||
: this(name, description)
|
||||
{
|
||||
if (command == null)
|
||||
throw new ArgumentNullException("command");
|
||||
|
||||
control = new CategoryItemCommandControl(this, command);
|
||||
}
|
||||
|
||||
public CategoryItem(string name, string description, Type itemOptionsType)
|
||||
: this(name, description)
|
||||
{
|
||||
if (itemOptionsType == null)
|
||||
throw new ArgumentNullException("itemOptionsType");
|
||||
|
||||
if (!itemOptionsType.IsSubclassOf(typeof(CategoryItemControl)))
|
||||
throw new ArgumentException("Type must derive from the CategoryItemOptionsControl class.", "itemOptionsType");
|
||||
|
||||
this.controlType = itemOptionsType;
|
||||
}
|
||||
|
||||
private CategoryItem(string name, string description)
|
||||
{
|
||||
if (String.IsNullOrEmpty(name))
|
||||
throw new ArgumentNullException("name");
|
||||
|
||||
if (String.IsNullOrEmpty(description))
|
||||
throw new ArgumentNullException("description");
|
||||
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return name; }
|
||||
}
|
||||
|
||||
public string Description
|
||||
{
|
||||
get { return description; }
|
||||
}
|
||||
|
||||
public Image Image
|
||||
{
|
||||
get { return image; }
|
||||
set { image = value; }
|
||||
}
|
||||
|
||||
internal CategoryItemControl Control
|
||||
{
|
||||
get
|
||||
{
|
||||
if (control == null)
|
||||
{
|
||||
control = (CategoryItemControl)Activator.CreateInstance(controlType, true);
|
||||
control.Initialize(this);
|
||||
}
|
||||
|
||||
return control;
|
||||
}
|
||||
}
|
||||
|
||||
internal bool ControlInitialized
|
||||
{
|
||||
get
|
||||
{
|
||||
return control != null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsExpertOption
|
||||
{
|
||||
get { return isExpertOption; }
|
||||
set { isExpertOption = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
33
Hyphen/Plugins/Configuration/CategoryItemCollection.cs
Normal file
33
Hyphen/Plugins/Configuration/CategoryItemCollection.cs
Normal file
@ -0,0 +1,33 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class CategoryItemCollection : List<CategoryItem>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal CategoryItemCollection() : base(1) { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
55
Hyphen/Plugins/Configuration/ConfigurableEntityDescriptor.cs
Normal file
55
Hyphen/Plugins/Configuration/ConfigurableEntityDescriptor.cs
Normal file
@ -0,0 +1,55 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
internal class ConfigurableEntityDescriptor
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
public ConfigurableEntityDescriptor(IConfigurablePlugin plugin)
|
||||
{
|
||||
if (plugin == null)
|
||||
throw new ArgumentNullException("plugin");
|
||||
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
private IConfigurablePlugin plugin;
|
||||
public IConfigurablePlugin Plugin
|
||||
{
|
||||
get { return plugin; }
|
||||
}
|
||||
|
||||
private CategoryCollection categories;
|
||||
public CategoryCollection Categories
|
||||
{
|
||||
get { return categories; }
|
||||
set { categories = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
178
Hyphen/Plugins/Configuration/Forms/ConfigurationDialog.Designer.cs
generated
Normal file
178
Hyphen/Plugins/Configuration/Forms/ConfigurationDialog.Designer.cs
generated
Normal file
@ -0,0 +1,178 @@
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms
|
||||
{
|
||||
partial class ConfigurationDialog
|
||||
{
|
||||
/// <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 Windows Form 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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationDialog));
|
||||
this.TopPanel = new System.Windows.Forms.Panel();
|
||||
this.RibbonPageSwitcher = new RibbonStyle.TabPageSwitcher();
|
||||
this.RibbonStrip = new RibbonStyle.TabStrip();
|
||||
this.BottomPanel = new System.Windows.Forms.Panel();
|
||||
this.CancelBTN = new System.Windows.Forms.Button();
|
||||
this.OkBTN = new System.Windows.Forms.Button();
|
||||
this.ControlPanel = new System.Windows.Forms.Panel();
|
||||
this.WelcomePanel = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader();
|
||||
this.TopPanel.SuspendLayout();
|
||||
this.BottomPanel.SuspendLayout();
|
||||
this.ControlPanel.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// TopPanel
|
||||
//
|
||||
this.TopPanel.Controls.Add(this.RibbonPageSwitcher);
|
||||
this.TopPanel.Controls.Add(this.RibbonStrip);
|
||||
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(794, 127);
|
||||
this.TopPanel.TabIndex = 0;
|
||||
//
|
||||
// RibbonPageSwitcher
|
||||
//
|
||||
this.RibbonPageSwitcher.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(219)))), ((int)(((byte)(255)))));
|
||||
this.RibbonPageSwitcher.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.RibbonPageSwitcher.Location = new System.Drawing.Point(0, 26);
|
||||
this.RibbonPageSwitcher.Name = "RibbonPageSwitcher";
|
||||
this.RibbonPageSwitcher.SelectedTabStripPage = null;
|
||||
this.RibbonPageSwitcher.Size = new System.Drawing.Size(794, 101);
|
||||
this.RibbonPageSwitcher.TabIndex = 1;
|
||||
this.RibbonPageSwitcher.TabStrip = this.RibbonStrip;
|
||||
this.RibbonPageSwitcher.Text = "RibbonPageSwitcher";
|
||||
//
|
||||
// RibbonStrip
|
||||
//
|
||||
this.RibbonStrip.AutoSize = false;
|
||||
this.RibbonStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(219)))), ((int)(((byte)(255)))));
|
||||
this.RibbonStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||
this.RibbonStrip.Location = new System.Drawing.Point(0, 0);
|
||||
this.RibbonStrip.Name = "RibbonStrip";
|
||||
this.RibbonStrip.Padding = new System.Windows.Forms.Padding(60, 3, 30, 0);
|
||||
this.RibbonStrip.SelectedTab = null;
|
||||
this.RibbonStrip.ShowItemToolTips = false;
|
||||
this.RibbonStrip.Size = new System.Drawing.Size(794, 26);
|
||||
this.RibbonStrip.TabIndex = 0;
|
||||
this.RibbonStrip.TabOverlap = 0;
|
||||
this.RibbonStrip.Text = "tabStrip1";
|
||||
//
|
||||
// BottomPanel
|
||||
//
|
||||
this.BottomPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(219)))), ((int)(((byte)(255)))));
|
||||
this.BottomPanel.Controls.Add(this.CancelBTN);
|
||||
this.BottomPanel.Controls.Add(this.OkBTN);
|
||||
this.BottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.BottomPanel.Location = new System.Drawing.Point(0, 529);
|
||||
this.BottomPanel.Name = "BottomPanel";
|
||||
this.BottomPanel.Size = new System.Drawing.Size(794, 39);
|
||||
this.BottomPanel.TabIndex = 1;
|
||||
//
|
||||
// CancelBTN
|
||||
//
|
||||
this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.CancelBTN.Location = new System.Drawing.Point(93, 7);
|
||||
this.CancelBTN.Name = "CancelBTN";
|
||||
this.CancelBTN.Size = new System.Drawing.Size(75, 23);
|
||||
this.CancelBTN.TabIndex = 0;
|
||||
this.CancelBTN.Text = "Cancel";
|
||||
this.CancelBTN.UseVisualStyleBackColor = true;
|
||||
this.CancelBTN.Click += new System.EventHandler(this.CancelBTN_Click);
|
||||
//
|
||||
// OkBTN
|
||||
//
|
||||
this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.OkBTN.Location = new System.Drawing.Point(12, 7);
|
||||
this.OkBTN.Name = "OkBTN";
|
||||
this.OkBTN.Size = new System.Drawing.Size(75, 23);
|
||||
this.OkBTN.TabIndex = 0;
|
||||
this.OkBTN.Text = "OK";
|
||||
this.OkBTN.UseVisualStyleBackColor = true;
|
||||
this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click);
|
||||
//
|
||||
// ControlPanel
|
||||
//
|
||||
this.ControlPanel.AutoScroll = true;
|
||||
this.ControlPanel.Controls.Add(this.WelcomePanel);
|
||||
this.ControlPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ControlPanel.Location = new System.Drawing.Point(0, 127);
|
||||
this.ControlPanel.Name = "ControlPanel";
|
||||
this.ControlPanel.Size = new System.Drawing.Size(794, 402);
|
||||
this.ControlPanel.TabIndex = 2;
|
||||
//
|
||||
// WelcomePanel
|
||||
//
|
||||
this.WelcomePanel.BackColor = System.Drawing.Color.Transparent;
|
||||
this.WelcomePanel.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(219)))), ((int)(((byte)(255)))));
|
||||
this.WelcomePanel.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.WelcomePanel.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.WelcomePanel.HeaderFont = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.WelcomePanel.HeaderText = " Select a tab and pick a section to configure...";
|
||||
this.WelcomePanel.Image = ((System.Drawing.Image)(resources.GetObject("WelcomePanel.Image")));
|
||||
this.WelcomePanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.WelcomePanel.MinimumSize = new System.Drawing.Size(300, 40);
|
||||
this.WelcomePanel.Name = "WelcomePanel";
|
||||
this.WelcomePanel.Size = new System.Drawing.Size(794, 100);
|
||||
this.WelcomePanel.TabIndex = 1;
|
||||
//
|
||||
// ConfigurationDialog
|
||||
//
|
||||
this.AcceptButton = this.OkBTN;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.CancelButton = this.CancelBTN;
|
||||
this.ClientSize = new System.Drawing.Size(794, 568);
|
||||
this.Controls.Add(this.ControlPanel);
|
||||
this.Controls.Add(this.TopPanel);
|
||||
this.Controls.Add(this.BottomPanel);
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimumSize = new System.Drawing.Size(800, 600);
|
||||
this.Name = "ConfigurationDialog";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Hyphen Configuration Center";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigurationDialog_FormClosing);
|
||||
this.TopPanel.ResumeLayout(false);
|
||||
this.BottomPanel.ResumeLayout(false);
|
||||
this.ControlPanel.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Panel TopPanel;
|
||||
private RibbonStyle.TabPageSwitcher RibbonPageSwitcher;
|
||||
private RibbonStyle.TabStrip RibbonStrip;
|
||||
private System.Windows.Forms.Button CancelBTN;
|
||||
private System.Windows.Forms.Button OkBTN;
|
||||
private System.Windows.Forms.Panel ControlPanel;
|
||||
private System.Windows.Forms.Panel BottomPanel;
|
||||
private Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader WelcomePanel;
|
||||
}
|
||||
}
|
460
Hyphen/Plugins/Configuration/Forms/ConfigurationDialog.cs
Normal file
460
Hyphen/Plugins/Configuration/Forms/ConfigurationDialog.cs
Normal file
@ -0,0 +1,460 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Miranda.Plugins.Properties;
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms.Controls;
|
||||
using RibbonStyle;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Collections;
|
||||
using Virtuoso.Hyphen;
|
||||
using Virtuoso.Hyphen.Mini;
|
||||
using System.Collections.ObjectModel;
|
||||
using Virtuoso.Miranda.Plugins.Forms;
|
||||
using Virtuoso.Hyphen.Configuration;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms
|
||||
{
|
||||
/// <codename>Casablanca</codename>
|
||||
public sealed partial class ConfigurationDialog : SingletonDialog
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private bool Ok;
|
||||
private List<ConfigurableEntityDescriptor> ConfigurableEntities;
|
||||
|
||||
private const char PathSeparator = '/';
|
||||
|
||||
private string[] CurrentPath;
|
||||
private string ConfigurationParameter;
|
||||
|
||||
private CategoryCollection categories;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
private ConfigurationDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
((RibbonStyle.TabStripProfessionalRenderer)RibbonStrip.Renderer).HaloColor = Color.FromArgb(254, 209, 94);
|
||||
((RibbonStyle.TabStripProfessionalRenderer)RibbonStrip.Renderer).BaseColor = Color.FromArgb(215, 227, 242);
|
||||
|
||||
categories = new CategoryCollection();
|
||||
ConfigurableEntities = new List<ConfigurableEntityDescriptor>(5);
|
||||
}
|
||||
|
||||
public static void Present(bool modal)
|
||||
{
|
||||
Present(modal, null, null);
|
||||
}
|
||||
|
||||
public static void Present(bool modal, IConfigurablePlugin plugin)
|
||||
{
|
||||
Present(modal, plugin, null);
|
||||
}
|
||||
|
||||
public static void Present(bool modal, string path)
|
||||
{
|
||||
Present(modal, null, path);
|
||||
}
|
||||
|
||||
public static void Present(bool modal, IConfigurablePlugin plugin, string path)
|
||||
{
|
||||
ConfigurationDialog dialog = ConfigurationDialog.GetSingleton<ConfigurationDialog>(false);
|
||||
|
||||
if (dialog == null)
|
||||
{
|
||||
dialog = new ConfigurationDialog();
|
||||
|
||||
dialog.SetPath(path);
|
||||
dialog.Populate(plugin);
|
||||
}
|
||||
|
||||
dialog.ShowSingleton(modal);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI Handlers
|
||||
|
||||
private void OkBTN_Click(object sender, EventArgs e)
|
||||
{
|
||||
Ok = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void CancelBTN_Click(object sender, EventArgs e)
|
||||
{
|
||||
Ok = false;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void ConfigurationDialog_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (Ok && !CanDismissActiveControl())
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (ConfigurableEntityDescriptor descriptor in ConfigurableEntities)
|
||||
ProcessChanges(descriptor, Ok);
|
||||
|
||||
if (Ok)
|
||||
Settings.Default.Save();
|
||||
}
|
||||
|
||||
private void ProcessChanges(ConfigurableEntityDescriptor descriptor, bool save)
|
||||
{
|
||||
foreach (Category category in descriptor.Categories)
|
||||
{
|
||||
foreach (CategoryItem item in category.Items)
|
||||
{
|
||||
if (!item.ControlInitialized)
|
||||
continue;
|
||||
|
||||
CategoryItemControl control = item.Control;
|
||||
|
||||
if (save && control.IsDirty)
|
||||
control.Save();
|
||||
|
||||
control.Close();
|
||||
}
|
||||
}
|
||||
|
||||
if (save)
|
||||
{
|
||||
foreach (PluginConfiguration config in descriptor.Plugin.Configuration)
|
||||
if (config != null)
|
||||
config.Save();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
#region Create/Set path
|
||||
|
||||
public static string CreatePath(IConfigurablePlugin plugin, string category, string item)
|
||||
{
|
||||
return CreatePath(plugin, category, item, null);
|
||||
}
|
||||
|
||||
public static string CreatePath(IConfigurablePlugin plugin, string category, string item, string parameter)
|
||||
{
|
||||
if (plugin == null)
|
||||
throw new ArgumentNullException("plugin");
|
||||
|
||||
if (String.IsNullOrEmpty(category))
|
||||
throw new ArgumentNullException("category");
|
||||
|
||||
if (String.IsNullOrEmpty(item))
|
||||
throw new ArgumentNullException("item");
|
||||
|
||||
return String.Format("{1}{0}{2}{0}{3}{0}{4}", PathSeparator.ToString(), plugin.Name, category, item, (parameter ?? String.Empty));
|
||||
}
|
||||
|
||||
private void SetPath(string path)
|
||||
{
|
||||
if (String.IsNullOrEmpty(path))
|
||||
return;
|
||||
|
||||
CurrentPath = path.Split(PathSeparator);
|
||||
|
||||
if (CurrentPath.Length != 4)
|
||||
throw new ArgumentOutOfRangeException("path");
|
||||
|
||||
ConfigurationParameter = (String.IsNullOrEmpty(CurrentPath[3]) ? null : CurrentPath[3]);
|
||||
}
|
||||
|
||||
private bool CanNavigateTo(IConfigurablePlugin plugin, Category category)
|
||||
{
|
||||
if (plugin == null)
|
||||
throw new ArgumentNullException("plugin");
|
||||
|
||||
if (category == null)
|
||||
throw new ArgumentNullException("category");
|
||||
|
||||
if (CurrentPath == null)
|
||||
return false;
|
||||
|
||||
return (CurrentPath[0] == plugin.Name && CurrentPath[1] == category.Name);
|
||||
}
|
||||
|
||||
private bool CanNavigateTo(CategoryItem item)
|
||||
{
|
||||
if (item == null)
|
||||
throw new ArgumentNullException("item");
|
||||
|
||||
if (CurrentPath == null)
|
||||
return false;
|
||||
|
||||
return CurrentPath[2] == item.Name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Entity population
|
||||
|
||||
private void Populate(IConfigurablePlugin pluginToPopulate)
|
||||
{
|
||||
ConfigurableEntities.Clear();
|
||||
|
||||
RibbonPageSwitcher.SelectedTabStripPage = null;
|
||||
RibbonStrip.Items.Clear();
|
||||
|
||||
if (pluginToPopulate == null)
|
||||
{
|
||||
PopulateHyphenConfiguration();
|
||||
|
||||
if (AppDomain.CurrentDomain.IsDefaultAppDomain())
|
||||
PopulateStandalonePlugins();
|
||||
else
|
||||
PopulateIsolatedPlugins();
|
||||
}
|
||||
else
|
||||
{
|
||||
ConfigurableEntities.Add(new ConfigurableEntityDescriptor(pluginToPopulate));
|
||||
Text += String.Format(" : {0}", pluginToPopulate.Name);
|
||||
}
|
||||
|
||||
PopulateItems();
|
||||
}
|
||||
|
||||
private void PopulateItems()
|
||||
{
|
||||
CategoryCollection categories = null;
|
||||
|
||||
for (int i = 0; i < ConfigurableEntities.Count; i++)
|
||||
{
|
||||
ConfigurableEntityDescriptor descriptor = ConfigurableEntities[i];
|
||||
TabStripPage page = CreateAndRegisterEntityPage(categories, descriptor.Plugin, i);
|
||||
|
||||
descriptor.Categories = (categories = new CategoryCollection());
|
||||
descriptor.Plugin.PopulateConfiguration(categories);
|
||||
|
||||
for (int j = 0; j < categories.Count; j++)
|
||||
{
|
||||
Category category = categories[j];
|
||||
|
||||
if (category == null)
|
||||
continue;
|
||||
|
||||
PopulateCategoryPanel(page, category, descriptor.Plugin, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void PopulateIsolatedPlugins()
|
||||
{
|
||||
PluginDescriptorReadOnlyCollection plugins = MirandaContext.Current.PluginManager.Plugins;
|
||||
|
||||
try
|
||||
{
|
||||
SynchronizationHelper.BeginCollectionUpdate(plugins);
|
||||
|
||||
foreach (PluginDescriptor descriptor in plugins)
|
||||
if (descriptor.IsConfigurable)
|
||||
ConfigurableEntities.Add(new ConfigurableEntityDescriptor((IConfigurablePlugin)descriptor.Plugin));
|
||||
}
|
||||
finally
|
||||
{
|
||||
SynchronizationHelper.EndUpdate(plugins);
|
||||
}
|
||||
}
|
||||
|
||||
private void PopulateStandalonePlugins()
|
||||
{
|
||||
ModuleReadOnlyCollection modules = ModuleManager.Singleton.RegisteredModules;
|
||||
|
||||
try
|
||||
{
|
||||
SynchronizationHelper.BeginCollectionUpdate(modules);
|
||||
|
||||
foreach (Module module in modules)
|
||||
if (module.StandalonePlugin.Descriptor.IsConfigurable)
|
||||
ConfigurableEntities.Add(new ConfigurableEntityDescriptor((IConfigurablePlugin)module.StandalonePlugin));
|
||||
}
|
||||
finally
|
||||
{
|
||||
SynchronizationHelper.EndUpdate(modules);
|
||||
}
|
||||
}
|
||||
|
||||
private void PopulateHyphenConfiguration()
|
||||
{
|
||||
if (AppDomain.CurrentDomain.IsDefaultAppDomain())
|
||||
ConfigurableEntities.Add(new ConfigurableEntityDescriptor(RuntimeConfigurator.Singleton));
|
||||
else
|
||||
ConfigurableEntities.Add(new ConfigurableEntityDescriptor(PMConfigurator.Singleton));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Entity control creation
|
||||
|
||||
private void PopulateCategoryPanel(TabStripPage entityPage, Category category, IConfigurablePlugin plugin, int index)
|
||||
{
|
||||
TabPanel categoryPanel = CreateCategoryPanel(category, index);
|
||||
entityPage.Controls.Add(categoryPanel);
|
||||
|
||||
if (CanNavigateTo(plugin, category))
|
||||
RibbonPageSwitcher.SelectedTabStripPage = entityPage;
|
||||
|
||||
Point nextLocation = new Point();
|
||||
|
||||
foreach (CategoryItem item in category.Items)
|
||||
{
|
||||
RibbonButton btn = CreateButton(item, ref nextLocation);
|
||||
categoryPanel.Controls.Add(btn);
|
||||
|
||||
if (CanNavigateTo(item))
|
||||
RibbonButton_Click(btn, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
private RibbonButton CreateButton(CategoryItem item, ref Point nextLocation)
|
||||
{
|
||||
RibbonButton btn = new RibbonButton();
|
||||
btn.Text = item.Name;
|
||||
|
||||
btn.ShowInfoTips = true;
|
||||
btn.InfoTitle = item.Name;
|
||||
btn.InfoComment = item.Description;
|
||||
|
||||
if (item.Image == null)
|
||||
item.Image = VisualResources.Image_64x67_Configuration;
|
||||
|
||||
btn.img = item.Image;
|
||||
btn.Size = btn.img.Size;
|
||||
|
||||
if (nextLocation.IsEmpty)
|
||||
nextLocation = new Point(-btn.Size.Width, 6);
|
||||
|
||||
btn.img_on = Properties.Resources.RibbonHover;
|
||||
btn.img_click = Properties.Resources.RibbonClick;
|
||||
|
||||
nextLocation.Offset(btn.img.Size.Width + 5, 0);
|
||||
btn.Location = nextLocation;
|
||||
|
||||
btn.Tag = item;
|
||||
btn.Click += RibbonButton_Click;
|
||||
|
||||
return btn;
|
||||
}
|
||||
|
||||
private TabPanel CreateCategoryPanel(Category category, int index)
|
||||
{
|
||||
TabPanel categoryPanel = new TabPanel();
|
||||
|
||||
categoryPanel.BaseColor = System.Drawing.Color.FromArgb(215, 227, 242);
|
||||
categoryPanel.BaseColorOn = System.Drawing.Color.FromArgb(233, 239, 248);
|
||||
categoryPanel.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
categoryPanel.ForeColor = System.Drawing.SystemColors.Desktop;
|
||||
categoryPanel.Location = new System.Drawing.Point(101, 3);
|
||||
categoryPanel.Opacity = 255;
|
||||
categoryPanel.Padding = new System.Windows.Forms.Padding(6, 3, 6, 0);
|
||||
categoryPanel.AutoSize = true;
|
||||
categoryPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
categoryPanel.Speed = 1;
|
||||
categoryPanel.TabIndex = index;
|
||||
categoryPanel.Caption = category.Name;
|
||||
|
||||
return categoryPanel;
|
||||
}
|
||||
|
||||
private TabStripPage CreateAndRegisterEntityPage(CategoryCollection categories, IConfigurablePlugin entity, int index)
|
||||
{
|
||||
TabStripPage entityPage = new TabStripPage();
|
||||
entityPage.BaseColor = System.Drawing.Color.FromArgb(215, 227, 242);
|
||||
entityPage.BaseColorOn = System.Drawing.Color.FromArgb(215, 227, 242);
|
||||
entityPage.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
entityPage.Opacity = 255;
|
||||
entityPage.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0);
|
||||
entityPage.Size = new System.Drawing.Size(784, 99);
|
||||
entityPage.Speed = 1;
|
||||
entityPage.TabIndex = index;
|
||||
|
||||
RibbonPageSwitcher.Controls.Add(entityPage);
|
||||
|
||||
Tab entityTab = new Tab(entity.Name);
|
||||
entityTab.AutoSize = false;
|
||||
entityTab.Checked = true;
|
||||
entityTab.CheckState = CheckState.Checked;
|
||||
entityTab.ForeColor = System.Drawing.Color.FromArgb(44, 90, 154);
|
||||
entityTab.Margin = new Padding(6, 1, 0, 2);
|
||||
entityTab.Size = new Size(73, 23);
|
||||
entityTab.Text = entity.Name;
|
||||
entityTab.TabStripPage = entityPage;
|
||||
|
||||
if (entity is IInternalConfigurator)
|
||||
entityTab.Image = VisualResources.Icon_16x16_Hyphen.ToBitmap();
|
||||
|
||||
RibbonStrip.Items.Add(entityTab);
|
||||
|
||||
return entityPage;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Entity control handling
|
||||
|
||||
private bool CanDismissActiveControl()
|
||||
{
|
||||
if (ControlPanel.Controls.Count > 0 && ControlPanel.Controls[0] is CategoryItemControl)
|
||||
return !((CategoryItemControl)ControlPanel.Controls[0]).OnHide();
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
private void RibbonButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
RibbonButton btn = (RibbonButton)sender;
|
||||
CategoryItem item = (CategoryItem)btn.Tag;
|
||||
|
||||
bool firstTime = !item.ControlInitialized;
|
||||
CategoryItemControl control = item.Control;
|
||||
|
||||
control.OnSelected();
|
||||
|
||||
if (control.HasUI && !control.OnShow(firstTime))
|
||||
{
|
||||
if (!CanDismissActiveControl())
|
||||
return;
|
||||
|
||||
control.ConfigurationParameter = ConfigurationParameter;
|
||||
ControlPanel.Controls.Clear();
|
||||
|
||||
control.Dock = DockStyle.Fill;
|
||||
ControlPanel.Controls.Add(control);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
222
Hyphen/Plugins/Configuration/Forms/ConfigurationDialog.resx
Normal file
222
Hyphen/Plugins/Configuration/Forms/ConfigurationDialog.resx
Normal file
@ -0,0 +1,222 @@
|
||||
<?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="RibbonStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="WelcomePanel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACoAAAAvCAYAAACVDljoAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA
|
||||
CxMBAJqcGAAAD8hJREFUaEPFmAlQVHeex1EzW5kcNVObydbEzGyyqWQcx52Z3cTNpmYn5tgkauKYSUw0
|
||||
8YgSoxHFg1tBTjma5r6P5j7ECIrhBkHuhuZquoFumqZvupFbVPCi+7u//2s84pjAmK1dqj71f/14r/vz
|
||||
/77/+ZZc08bPLPuJzeWlS5cZlyy10S95ZJnOxmbZiI0NWmyW2ChtzDenlj6975rN//efZTITV9T5uDUQ
|
||||
/EDMxrRpsyHmpMUQ8jUMYR8Tb0AftgKG0Kf+T93NY8m4NZ6KaW0mrunP4pYy7LvCg1G4xVDwcLM/6A5z
|
||||
A0E3CZNZGSy8XZoHg9Msg/yDdG4dlb/9X60ITFGYG4mB5VI85q5k4rI+CzO6MyQcbhW+LXr78/ckb30i
|
||||
PK5CHHR8U8GbpeORmwPBfeZBfvmU2De+t8LhFw9VARgjcWskGubJeJgvJ8E8nYS5qQxc1mVTwoXf2yS+
|
||||
r6ksdH6o2f38w4kOkegwiY7HwUKSlkuJVqYo4Yk0XNFmY5ZL+L4m8YPJPri9s0pckfrj4UQNESQaBfNY
|
||||
LMwkaJ5K4CTNk3FW+dE4SjwFE4os3FALfnTC09ITcw8nqqW2aIrE3GgMSTLBeFhYM5gg0dFYEqXz1DRm
|
||||
dCT8kCnee98lid+NhxPV0CNdpKiwJOhHy06Ifa8/nKg6FDeHIqjnR8NCKXJwj9yappVozBoScDpmOySl
|
||||
jhjr8L0jTD2aereVxSQ+3unzsImSqD4MczRMsUd993FbHzmTNI9E0aOPx8nIrWg4tR/CAnv0n3fFTB+N
|
||||
q5wkNxQtSnSs3ftHJKoLxZwxghOzylkluWNWUmeb0cbhZMRW1J+y42j8Zj/JuuAGCXL0L050VOT1cKJm
|
||||
ZQhuaENwi0RZendgkhejYCFJC7XhGU0scsOtiTJRVrafO4yxzgCoGrxRlLIX0X7bwfPcjSAvOw6+z17E
|
||||
BdqiNN0O2mZfzMiCMdzq+ZCi1MZuaEh0KBxmEmMwQZYig0maaVKYUcciJ/zzO6K1J/ejIms/UkK+QFyI
|
||||
MzKzUpGQfgoxGWcRnVmEyPRCRKTmIyY1D1k52UiJ9UJ+4j70nT96Y5+z70/+7g7Fprrraj5u6Un0Xrl5
|
||||
QQtNCGYaa2dUd0Uv5NohhbcFxw5+hJzsVMRnnkZkdgXSStqRX9+Lb4X9KKjrQXpJM0LSzsEzIh28uAzk
|
||||
ncpFeuShuWd//dzKQ8f5//B3yd6Uk+gg9VhtKCyUHBPjMDCoOegZ4SQag+ywz8Ekg1w/wGG7zxAWHY/k
|
||||
/GqUdagh1o9CbhpHn3EC0qEpSI2EaRoS4zTqe7RIK6zBUX4CYlJykJ6eUfb8c8+tsXMLfGTRsjdkQbjG
|
||||
FhA0TJlJisHkzCxhXTgsujAqQzGrikZGyGcQBG3BgS83gB8WidCkPDRI1ZAZTOgzDEOqG0G3bpQYh1g3
|
||||
gS6iWz+JHuMkpFSR4sYOHPSNsoTEZlw+7uGR8fyLK59btOg1WSBoWgNIhkNDULqgdmuFkqbONkuJRhz/
|
||||
EPZfvI6oyHCEJWQi60w5pINKyPV69OgN6NEaIdFdJEhWMwaxljHOyfcax6AYHkNsfoVlm3OkPPd04fjW
|
||||
rdu2fLh175OLkp3p8QdNa1ZBFYPkGOq7mKkNzypjcMT2dTjY7UBMcgZ1nNMoLCtG76AcMp0GvToterVW
|
||||
WamO0tWaINEOk/QIYYKUElcYR1DVJbMcTqgt3+vK0yUnJ7eteXfDKqeAhCULyl6m1cyk2NcqNngPt4U1
|
||||
wTCrgnFNGY2tG1cjPIyHqPg0ZOflo6SiGH0Dcsh1g5BpVSSqQY9GA4lGS4nqCQNJGyntIWoeRgwYTRD2
|
||||
KS0RNaN5uzyTmiJj4g3r1q3dtcPe/dEFRacl/pjo8iFRPolasagYwXSOR0nzYBnkcaJbPnwdSclJiEvK
|
||||
wclvcpF/7hTapCIIu1vR0NmCBrEIdV0iXOhsQ3VnByrbO1DV0YVqsQT1kl6I5Aoq+yypbdfTXZNri7yD
|
||||
Ikw7v9iRsNvB52cLil6SnKC524vESGgeM4nNKXlgJeicWUkdThmFzz9Zi+i4eCQkpCMzh+b+s5kQy9sg
|
||||
kXdCouhGj7IXUmUfJEo5uoiO/j6IZH0Q9kipEp1cJYrq68wZ7bNJMVXabOcTUXJPD49KZ7+oXy8oOtnl
|
||||
i5F2T8zNyzFBbktBcLIkeUsRiNmBSGz79AOERcUiMy0PBQWZKCs/DZVGCqVaigFNDwa0fehXy9CvkRP9
|
||||
UGgUUOgGMEAodEqOuvY2c1bbldjs9kuJzoGJEhdn5yYH7/AXFhSd6PTBsOg4id3duN1UsMVGEGjTRgTi
|
||||
pjwAs4oIEt2A0MgY5GScItE0lJbmYVDdBaWqCwMqMRRqCckxpCTcA7mGxDUyKLQyku2HykCioiZzbsd0
|
||||
xBnpTIx7aFrnwQP2zQfdeQuL0moGxhZ32l0G0sLCynW5FXaOcV12Alfl4fjs47WIjY9Ddko2CvJTUFF+
|
||||
Elp1OzQMTQdJMzopYTElLIZS002lFIOUtkrbC5VOhpqmSvMZ8aXQs11T0byE3I69e/ZU2bmeWPjRj3Z4
|
||||
w9B8jBO71scIwDVZAMkF4AYleUPuj9leP1zpC8FfP3gdyYJEZCQJcOZUCirLc6BTi4hWEhZBrRJBpW6D
|
||||
msRVJK0iaTUJq0lYrSVhdTdqGovNJb3T/PwWQ1RsSq7sk48/zt7r6L3wzvRiuxf0TUdJjoT67nKNjhnX
|
||||
6fxMjx+me4Kx/q0/ICIyDMnx0TiTm4aqikwY1C3QMzQt88JWaS0JazUs6U6iC1ptN/r7m1HfVGS5oLga
|
||||
LChpi09MTh16dfVqx31OXk8s2EaHRZ7QNbhxkjO990ATwSx9nqXF8ZVuXxrCArD5/T9i/94dSEsTIDdF
|
||||
gKqSbJi0TRjSMJoJIYeBpBl6jYjKNhh0JEtp98tq0C4qRnO3+Nuc4vraID8/0TPLf/Wy0/Gghed8Y7MH
|
||||
NHWuuNpzgray90DD1pVePq7KQjEt9oG05BAcaGba+N4riE+IQ1ZKAirPnISJJIe1jVQ230XbAiNHK0Gi
|
||||
hEZRC6XsPFTyKog7y2jEKJvb/dm7Sev+smn5gmmyC/QN7tDUunL77cs0lTKucKU/rvaFQt/sjXPx25Do
|
||||
vwkRnhux/aNX8OWOTUhNS0bpmSyY+tswTLIjekInpFKIUX0Lla1EG4d+sBba/iroBqohExfhQm0FBJHu
|
||||
tAp7P8/DL2ThNJmopuEY1JTodPcJXKKplDE9D+tAimo3hLi9h5LUr5BFy7xAl/X4aC01ga+2orSiCPLu
|
||||
WhjkzRijRMf1zZgwCDE51IpJYyvGSPqiphamwSroFZWQdhShtOwcBLFhyE/Yhb2bXw5dVJqcKEmq61ww
|
||||
JfbDJE2ljCmCyXKiNW7gu76HUhItTLRFGn8LPA68g12fvAZPt304X1MBSXczlD11MAzUYlxbi8tDDZg2
|
||||
1GJURSn2V6BfWglRaxWKSwpRWVaGrMwMtDclYfsHv+EtWlR1wY1L9H5RTraHDzntNnnO76I07Ssu1TPx
|
||||
u5AbsQ3p/M9w2PYN7LfdiNgoPpqFzeiWtKFH0giJuAbdXdUQi2sham9CbV0tBPExCOEFITU1BU1NQtSc
|
||||
P4+dG1dGk+hP5/lh54FqFyhrXChJ6tmd3hgnJmjuZ8dTkmD0VbogyOkdlKTs5kQZ1Tn7IKtyRdNpe26N
|
||||
eth2DXZ/vgYH92yGj4czIkICEMH3h5+nC5z2b4XDnvdwaNca2G7+M9ycDyM5ORVtom4kxiRdPGTv8J9P
|
||||
PPHE02TJxlL2zvXnBFujsgrc/euvcoTivBPG2n0wSmPqaJsXxhg0Y02IgyCtcEaA4zsoFnyJYpJl1NMO
|
||||
dFjkA23DcUjLnFF70g6norcj2vsjBLm8D3+n9Qh220Ad8BN6Ajtp+7IP5el7aJ+1GV/veBfBPD6++aYA
|
||||
HW29ZkFiVu26tev/REZstf/PxLPEL+fF/5FKtrL6qU1vuQNklQ64SHJszmdcJEbaPDEmDkB3mSP8Hf4b
|
||||
RUxUsJtKJnqArmcV86PrfOl6X+gaPbn2zDofK4davGFq9eH+P0xlX6UrqrK+hs+R9TjqdgxhoWG4UNMA
|
||||
YVPXHC8gooJkVhG/I1YQLxJs/mfy1llLWnoIfRVH2H4bphYPjmHiYutxjNKeXVzqgBNH3kZR8pdWSLQu
|
||||
z5roKL3a+Q7t9HmeESrvQLImEu8udUJ+7E44ODnTdiYE/GA+Ojq6UVcjgrdnQP6K36x4m5ReJv6N+Ffi
|
||||
7hpAUnyIEnWkL/KEUejBYWK0ULLt/ugsOgy/w2/hW07SChM1tXrfFblPaoTSZonfj6beA430NBISk+F0
|
||||
+Avk5OSYo2NiLXravhQWVFx1cXRPWf7M8ndJ8DXiX77TRsVF9tQxHDEkPE6LE3eOIaG7Vbj9BDq+PQTf
|
||||
Q2/hXNKXHEyYvXzgROdlHihGibPU74U1hd5yF1RWlCEu1AFbPv1wIiszC4LkFIyNTCIv99tLRw468knw
|
||||
V9+RZB96LwRkySocSNCDFick2nSMg15hwyTyo9c2B+Fz8E0zEzxHFCbZooZ6PZfWvMjt8n4x9plV6F50
|
||||
TV5okg6hsUKAlS88JTly5IiW2qu5oOCsRa8zWk7lFlkSo5Ne/xtRdkJe4Ritb3Snxckx6OvdYGg4CkPj
|
||||
Ma4ztJ49iJ1//WN7lPfmUzkR24w06Jurc+zMi5G6LWgkWSO1UYam0RvuxbMoKC3Ba6t+Xrd8+fLC5GTB
|
||||
JR4v2NLY0GjRaoaQFJfZG86PWv1AWZIM19QfpSHnKPXgo5QuJUuiLST6yu/+SUA3vUms+a/VL6xmP0iV
|
||||
uGktrQL3pnZb6v5yqMWLQvCET+EMKhvq8f6ffsl6e8CqVasaysvKERgQSEtD2nZLBm4lxWdVBQXwn3+g
|
||||
rLr+6A41iWopTR09er3QG830LvTl3z6dzCTnhw7uXpL4vUkUcHy4LaDtdmls8Zmj5sJVgA1PTGxI+F1G
|
||||
Wj24Ge867cHe+o9nc5csWbKPvi5006ZNPXl5ebd8vH0wMT5p6WrrteRkFOQ+UJSdVNe5baceb2bbE30z
|
||||
taf8A/j3Fb9Iulfye2+2VuDt4fbgUG3jcdWQ0HvOIPSaY7JUUj/wwmCNE47sfDXzL2++4PfIsmWfkugG
|
||||
Yu+TTz4Z5eXlrUgRpJgJy/jYpKXobOnUD/2WTWXGrrWSkkNmXbMnGk7vxx9eeirgB2/4nn+S9M+IjQM1
|
||||
R1P0TZ4X6fhGqeCLUbqcDeJsmlzx6KOPvrJ06dLf0/FHy5c/myAQCMZSU1NRU10DXiCvbMHf9T/yxmZt
|
||||
k4elOd8O2zZvWLvgDYu4gESfTQn69G/a3YsvvvQY3b6SyT722GNh9vb21ba2tuH77eyfWcTX2th4Hnj7
|
||||
Rdc9f96/qIt//EVsXn+JePXxxx9fuX7d+0z+zt//AEhywl1gQKKoAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/ooVVrpFy/wAAAACZfl//g2tQ/wAAAAB+ZEb/h2xPNgAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt5x6mb6liv+9ooL/yLKa/7Wljf+qjXL/lH5j/49x
|
||||
VJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9oYAwu5173bmdevDgzbn/8OTT/+bXxP/m0cH/1cOt/8Ks
|
||||
k/+vknH8mH1f1I5zVTKTjY2ylpGR/2liYf9pYmH/fHBn/8WskP/u28v/9+nb/9S9qf+8pIf/vaWH/72h
|
||||
hP/Muqb/ybWg/6eJbf+NclRJlpGR/9zVzv/w6eD/7uXb//Ts4//Rup3/9una/8ezmv/Hspz/9O3k/+/m
|
||||
3f/Qu6H/wquQ/8q6qf+lj3TwAAAAAH9xa3+IfXr/v7Ss/1hLR//OuJ//59W///Hg0P+UeVr/TD87/4h9
|
||||
eP9kWVT/wLau/72jhf/Qvaj/tZt9/56EZv8AAAAAg3hzgYZ6dv+IfXj/xK6V/864n//14tH/l3xd/4h9
|
||||
eP9dUU3/iH14/4Z6dv/DqIj/zr2p/7qcev+Yfl7kAAAAAAAAAABxZWExdGtpnXVsas3EqIv///Xl/9fG
|
||||
sf+BaET/eG9r1HZsaqO+n4D/2Me0/9nKuf+skHH/AAAAAAAAAACelpT/j4N//5CBf/yql4P/0Lyf/+TP
|
||||
vP//+ez/28m3/7GZe/+7oYT/1cGs/9zJuv/Ot5r/rJB0/6SIbnQAAAAAkYaC/8xRMP+2OiH/tzoh/7lE
|
||||
K/++Ykf/2cGr//zu4f//9en/+OfX/9bGr//Jspn/v6GAhKqPbhMAAAAAAAAAAKCYlf7WYUL/yVA2/8hP
|
||||
Nv/JUDX/yIJl/8uxkf/Himz/1Lyk/8+5nf/Aj3D/vKSL/7OegGMAAAAAAAAAAAAAAAC0sa7/4HFW/9Vf
|
||||
R//VX0f/1V9H/9VfRv/VX0b/1V9G/8Gnhv/CqIv/0FY+/7SwrPsAAAAAAAAAAAAAAAAAAAAAwcLD/+mA
|
||||
Z//gblb/4W5V/+BuVf/hbVb/4G1V/+FtVf/hbVb/4G1W/9xkTf/Vzsf0////AQAAAAAAAAAAAAAAAMHB
|
||||
wv/uinL/6Hdg/+h3YP/od2D/6Hdg/+h3YP/od2D/6Hdg/+h3YP/lblf/187I9wAAAAAAAAAAAAAAAAAA
|
||||
AADBwsP/7opy/+6Kcv/uinL/7opy/+6Kcv/uinL/7opy/+6Kcv/uinL/7opy/9XQyvsAAAAAAAAAAAAA
|
||||
AAAAAAAAwcLD/8q+t/7Lua/0yrix7829tPTSxr362MzF/NnNxf/YzcX+2MzE+9jNxf3OzMn+AAAAAAAA
|
||||
AAAAAAAA/JMAAPwDAADwAAAAAAAAAAABAAAAAAAAgAAAAMABAACAAAAAgAEAAIADAACABwAAgAMAAIAH
|
||||
AACABwAAgAcAAA==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
@ -0,0 +1,61 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
internal sealed class CategoryItemCommandControl : CategoryItemControl
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private CategoryItem.Command Command;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public CategoryItemCommandControl(CategoryItem item, CategoryItem.Command command)
|
||||
{
|
||||
if (command == null)
|
||||
throw new ArgumentNullException("command");
|
||||
|
||||
this.Command = command;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
protected internal override void OnSelected()
|
||||
{
|
||||
Command(ParentItem);
|
||||
}
|
||||
|
||||
protected internal override bool HasUI
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,137 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Security;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
public partial class CategoryItemControl : UserControl
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
protected CategoryItemControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// CategoryItemControl
|
||||
//
|
||||
this.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.Name = "CategoryItemControl";
|
||||
this.Size = new System.Drawing.Size(792, 400);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
private bool dirty;
|
||||
protected internal bool IsDirty
|
||||
{
|
||||
get { return dirty; }
|
||||
set { dirty = value; }
|
||||
}
|
||||
|
||||
private CategoryItem parentItem;
|
||||
internal CategoryItem ParentItem
|
||||
{
|
||||
get { return parentItem; }
|
||||
}
|
||||
|
||||
private string configurationParameter;
|
||||
protected internal string ConfigurationParameter
|
||||
{
|
||||
get { return configurationParameter; }
|
||||
internal set { configurationParameter = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Virtuals
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the control has an UI to show.
|
||||
/// </summary>
|
||||
protected internal virtual bool HasUI { get { return true; } }
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a control is selected and before it is prepared to be shown.
|
||||
/// </summary>
|
||||
protected internal virtual void OnSelected() { }
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a control is about to be shown. The control is shown when the user clicks on its item.
|
||||
/// </summary>
|
||||
/// <param name="firstTime">TRUE if the control is being requested for the first time; FALSE if it is requested repeatedly.</param>
|
||||
/// <returns>TRUE to cancel the display; FALSE to continue.</returns>
|
||||
protected internal virtual bool OnShow(bool firstTime) { return false; }
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a control is about to be hidden. The control is hidden when the user clicks on another item.
|
||||
/// </summary>
|
||||
/// <returns>TRUE to cancel the dismissal; FALSE to continue.</returns>
|
||||
protected internal virtual bool OnHide() { return false; }
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the user dismisses the configuration dialog via OK button and the control is dirty. The control should save its settings now.
|
||||
/// </summary>
|
||||
protected internal virtual void Save() { }
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the user dismisses the configuration dialog via OK or CANCEL button.
|
||||
/// </summary>
|
||||
protected internal virtual void Close() { }
|
||||
|
||||
/// <summary>
|
||||
/// Marks the control dirty.
|
||||
/// </summary>
|
||||
protected virtual void SetControlDirtyHandler(object sender, EventArgs e)
|
||||
{
|
||||
IsDirty = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
internal void Initialize(CategoryItem parentItem)
|
||||
{
|
||||
this.parentItem = parentItem;
|
||||
}
|
||||
|
||||
protected void CloseDialog()
|
||||
{
|
||||
ParentForm.Close();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -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="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
94
Hyphen/Plugins/Configuration/Forms/Controls/CategoryItemHeader.Designer.cs
generated
Normal file
94
Hyphen/Plugins/Configuration/Forms/Controls/CategoryItemHeader.Designer.cs
generated
Normal file
@ -0,0 +1,94 @@
|
||||
using Virtuoso.Miranda.Plugins.Forms.Controls;
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
partial class CategoryItemHeader
|
||||
{
|
||||
/// <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.ImagePBOX = new System.Windows.Forms.PictureBox();
|
||||
this.DescriptionLABEL = new System.Windows.Forms.Label();
|
||||
this.panel1 = new Virtuoso.Miranda.Plugins.Forms.Controls.GradientPanel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ImagePBOX)).BeginInit();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// ImagePBOX
|
||||
//
|
||||
this.ImagePBOX.Image = global::Virtuoso.Miranda.Plugins.Properties.Resources.Icon_256_32x32;
|
||||
this.ImagePBOX.Location = new System.Drawing.Point(10, 4);
|
||||
this.ImagePBOX.Name = "ImagePBOX";
|
||||
this.ImagePBOX.Size = new System.Drawing.Size(32, 32);
|
||||
this.ImagePBOX.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.ImagePBOX.TabIndex = 0;
|
||||
this.ImagePBOX.TabStop = false;
|
||||
//
|
||||
// DescriptionLABEL
|
||||
//
|
||||
this.DescriptionLABEL.AutoSize = true;
|
||||
this.DescriptionLABEL.Font = new System.Drawing.Font("Tahoma", 8, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.DescriptionLABEL.ForeColor = System.Drawing.Color.Black;
|
||||
this.DescriptionLABEL.Location = new System.Drawing.Point(50, 12);
|
||||
this.DescriptionLABEL.Name = "DescriptionLABEL";
|
||||
this.DescriptionLABEL.Size = new System.Drawing.Size(0, 16);
|
||||
this.DescriptionLABEL.TabIndex = 2;
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.ImagePBOX);
|
||||
this.panel1.Controls.Add(this.DescriptionLABEL);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panel1.GradientColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Rotation = -90F;
|
||||
this.panel1.Size = new System.Drawing.Size(765, 40);
|
||||
this.panel1.TabIndex = 3;
|
||||
//
|
||||
// CategoryItemHeader
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Transparent;
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.MinimumSize = new System.Drawing.Size(300, 40);
|
||||
this.Name = "CategoryItemHeader";
|
||||
this.Size = new System.Drawing.Size(765, 40);
|
||||
((System.ComponentModel.ISupportInitialize)(this.ImagePBOX)).EndInit();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.PictureBox ImagePBOX;
|
||||
private System.Windows.Forms.Label DescriptionLABEL;
|
||||
private GradientPanel panel1;
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing.Design;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
public partial class CategoryItemHeader : UserControl
|
||||
{
|
||||
public CategoryItemHeader()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
[Browsable(true), Category("Appearance")]
|
||||
public Image Image
|
||||
{
|
||||
get { return ImagePBOX.Image; }
|
||||
set { ImagePBOX.Image = value; }
|
||||
}
|
||||
|
||||
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
|
||||
[Localizable(true), Browsable(true), Category("Appearance"), DefaultValue("Header")]
|
||||
public string HeaderText
|
||||
{
|
||||
get { return DescriptionLABEL.Text; }
|
||||
set { DescriptionLABEL.Text = value; }
|
||||
}
|
||||
|
||||
[Browsable(true), Category("Appearance")]
|
||||
public Color Color
|
||||
{
|
||||
get { return panel1.GradientColor; }
|
||||
set { panel1.GradientColor = value; }
|
||||
}
|
||||
|
||||
public override Color ForeColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return DescriptionLABEL.ForeColor;
|
||||
}
|
||||
set
|
||||
{
|
||||
DescriptionLABEL.ForeColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable(true), Category("Appearance")]
|
||||
public Font HeaderFont
|
||||
{
|
||||
get { return DescriptionLABEL.Font; }
|
||||
set { DescriptionLABEL.Font = value; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
<?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="ImagePBOX.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="DescriptionLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
79
Hyphen/Plugins/Configuration/Forms/Controls/CategoryItemSection.Designer.cs
generated
Normal file
79
Hyphen/Plugins/Configuration/Forms/Controls/CategoryItemSection.Designer.cs
generated
Normal file
@ -0,0 +1,79 @@
|
||||
using Virtuoso.Miranda.Plugins.Forms.Controls;
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
partial class CategoryItemSection
|
||||
{
|
||||
/// <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.panel1 = new Virtuoso.Miranda.Plugins.Forms.Controls.GradientPanel();
|
||||
this.SectionLABEL = new System.Windows.Forms.Label();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.SectionLABEL);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panel1.GradientColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Rotation = 90F;
|
||||
this.panel1.Size = new System.Drawing.Size(765, 20);
|
||||
this.panel1.TabIndex = 1;
|
||||
//
|
||||
// SectionLABEL
|
||||
//
|
||||
this.SectionLABEL.AutoSize = true;
|
||||
this.SectionLABEL.ForeColor = System.Drawing.SystemColors.MenuText;
|
||||
this.SectionLABEL.Location = new System.Drawing.Point(8, 4);
|
||||
this.SectionLABEL.Name = "SectionLABEL";
|
||||
this.SectionLABEL.Size = new System.Drawing.Size(0, 13);
|
||||
this.SectionLABEL.TabIndex = 0;
|
||||
//
|
||||
// CategoryItemSection
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Transparent;
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.ForeColor = System.Drawing.Color.Black;
|
||||
this.MinimumSize = new System.Drawing.Size(300, 20);
|
||||
this.Name = "CategoryItemSection";
|
||||
this.Size = new System.Drawing.Size(765, 20);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label SectionLABEL;
|
||||
private GradientPanel panel1;
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing.Design;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
public partial class CategoryItemSection : UserControl
|
||||
{
|
||||
public CategoryItemSection()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
|
||||
[Localizable(true), Browsable(true), Category("Appearance"), DefaultValue("Section")]
|
||||
public string SectionName
|
||||
{
|
||||
get { return SectionLABEL.Text; }
|
||||
set { SectionLABEL.Text = value; }
|
||||
}
|
||||
|
||||
[Browsable(true), Category("Appearance")]
|
||||
public Color Color
|
||||
{
|
||||
get { return panel1.GradientColor; }
|
||||
set { panel1.GradientColor = value; }
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
<?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="panel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="SectionLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
277
Hyphen/Plugins/Configuration/Forms/Controls/ConfigurationPanel_.Designer.cs
generated
Normal file
277
Hyphen/Plugins/Configuration/Forms/Controls/ConfigurationPanel_.Designer.cs
generated
Normal file
@ -0,0 +1,277 @@
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Configuration.Controls
|
||||
{
|
||||
partial class ConfigurationPanel
|
||||
{
|
||||
/// <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.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationPanel));
|
||||
this.CategoriesILIST = new System.Windows.Forms.ImageList(this.components);
|
||||
this.Toolbar = new System.Windows.Forms.ToolStrip();
|
||||
this.ViewsTDBTN = new System.Windows.Forms.ToolStripDropDownButton();
|
||||
this.detailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.largeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.CategoryItemsLVIEW = new System.Windows.Forms.ListView();
|
||||
this.CategoryItemNameCOLUMN = new System.Windows.Forms.ColumnHeader();
|
||||
this.CategoryItemDescriptionCOLUMN = new System.Windows.Forms.ColumnHeader();
|
||||
this.CategoryItemsILIST = new System.Windows.Forms.ImageList(this.components);
|
||||
this.SpecialItemsILIST = new System.Windows.Forms.ImageList(this.components);
|
||||
this.CategoriesLVIEW = new Virtuoso.Miranda.Plugins.Forms.Configuration.Controls.CategoryListView();
|
||||
this.NameCOLUMN = new System.Windows.Forms.ColumnHeader();
|
||||
this.panel1 = new Virtuoso.Miranda.Plugins.Forms.Controls.GradientPanel();
|
||||
this.CategoryDescriptionLABEL = new System.Windows.Forms.Label();
|
||||
this.CategoryTitleLABEL = new System.Windows.Forms.Label();
|
||||
this.CategoryIconPBOX = new System.Windows.Forms.PictureBox();
|
||||
this.Toolbar.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.CategoryIconPBOX)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// CategoriesILIST
|
||||
//
|
||||
this.CategoriesILIST.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
|
||||
this.CategoriesILIST.ImageSize = new System.Drawing.Size(16, 16);
|
||||
this.CategoriesILIST.TransparentColor = System.Drawing.Color.Transparent;
|
||||
//
|
||||
// Toolbar
|
||||
//
|
||||
this.Toolbar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.Toolbar.AutoSize = false;
|
||||
this.Toolbar.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this.Toolbar.Font = new System.Drawing.Font("Tahoma", 8F);
|
||||
this.Toolbar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||
this.Toolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.ViewsTDBTN});
|
||||
this.Toolbar.Location = new System.Drawing.Point(190, 62);
|
||||
this.Toolbar.Name = "Toolbar";
|
||||
this.Toolbar.Size = new System.Drawing.Size(510, 34);
|
||||
this.Toolbar.TabIndex = 2;
|
||||
this.Toolbar.Text = "toolStrip2";
|
||||
//
|
||||
// ViewsTDBTN
|
||||
//
|
||||
this.ViewsTDBTN.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.detailsToolStripMenuItem,
|
||||
this.largeIconsToolStripMenuItem,
|
||||
this.tilesToolStripMenuItem});
|
||||
this.ViewsTDBTN.Image = ((System.Drawing.Image)(resources.GetObject("ViewsTDBTN.Image")));
|
||||
this.ViewsTDBTN.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.ViewsTDBTN.Name = "ViewsTDBTN";
|
||||
this.ViewsTDBTN.Size = new System.Drawing.Size(58, 31);
|
||||
this.ViewsTDBTN.Text = "View";
|
||||
this.ViewsTDBTN.DropDownOpening += new System.EventHandler(this.ViewsTDBTN_DropDownOpening);
|
||||
//
|
||||
// detailsToolStripMenuItem
|
||||
//
|
||||
this.detailsToolStripMenuItem.Name = "detailsToolStripMenuItem";
|
||||
this.detailsToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
|
||||
this.detailsToolStripMenuItem.Tag = "Details";
|
||||
this.detailsToolStripMenuItem.Text = "Details";
|
||||
this.detailsToolStripMenuItem.Click += new System.EventHandler(this.ViewsItem_Click);
|
||||
//
|
||||
// largeIconsToolStripMenuItem
|
||||
//
|
||||
this.largeIconsToolStripMenuItem.Name = "largeIconsToolStripMenuItem";
|
||||
this.largeIconsToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
|
||||
this.largeIconsToolStripMenuItem.Tag = "LargeIcon";
|
||||
this.largeIconsToolStripMenuItem.Text = "Large icons";
|
||||
this.largeIconsToolStripMenuItem.Click += new System.EventHandler(this.ViewsItem_Click);
|
||||
//
|
||||
// tilesToolStripMenuItem
|
||||
//
|
||||
this.tilesToolStripMenuItem.Name = "tilesToolStripMenuItem";
|
||||
this.tilesToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
|
||||
this.tilesToolStripMenuItem.Tag = "Tile";
|
||||
this.tilesToolStripMenuItem.Text = "Tiles";
|
||||
this.tilesToolStripMenuItem.Click += new System.EventHandler(this.ViewsItem_Click);
|
||||
//
|
||||
// CategoryItemsLVIEW
|
||||
//
|
||||
this.CategoryItemsLVIEW.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.CategoryItemsLVIEW.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.CategoryItemsLVIEW.CausesValidation = false;
|
||||
this.CategoryItemsLVIEW.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.CategoryItemNameCOLUMN,
|
||||
this.CategoryItemDescriptionCOLUMN});
|
||||
this.CategoryItemsLVIEW.DataBindings.Add(new System.Windows.Forms.Binding("View", global::Virtuoso.Miranda.Plugins.Properties.Settings.Default, "ConfigurationPanel_CategoryItems_View", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.CategoryItemsLVIEW.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.CategoryItemsLVIEW.LargeImageList = this.CategoryItemsILIST;
|
||||
this.CategoryItemsLVIEW.Location = new System.Drawing.Point(184, 99);
|
||||
this.CategoryItemsLVIEW.MultiSelect = false;
|
||||
this.CategoryItemsLVIEW.Name = "CategoryItemsLVIEW";
|
||||
this.CategoryItemsLVIEW.ShowGroups = false;
|
||||
this.CategoryItemsLVIEW.Size = new System.Drawing.Size(515, 401);
|
||||
this.CategoryItemsLVIEW.SmallImageList = this.CategoryItemsILIST;
|
||||
this.CategoryItemsLVIEW.TabIndex = 4;
|
||||
this.CategoryItemsLVIEW.TileSize = new System.Drawing.Size(500, 60);
|
||||
this.CategoryItemsLVIEW.UseCompatibleStateImageBehavior = false;
|
||||
this.CategoryItemsLVIEW.View = global::Virtuoso.Miranda.Plugins.Properties.Settings.Default.ConfigurationPanel_CategoryItems_View;
|
||||
this.CategoryItemsLVIEW.ItemActivate += new System.EventHandler(this.CategoryItemsLVIEW_ItemActivate);
|
||||
//
|
||||
// CategoryItemNameCOLUMN
|
||||
//
|
||||
this.CategoryItemNameCOLUMN.Text = "Option";
|
||||
//
|
||||
// CategoryItemDescriptionCOLUMN
|
||||
//
|
||||
this.CategoryItemDescriptionCOLUMN.Text = "Description";
|
||||
//
|
||||
// CategoryItemsILIST
|
||||
//
|
||||
this.CategoryItemsILIST.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
|
||||
this.CategoryItemsILIST.ImageSize = new System.Drawing.Size(32, 32);
|
||||
this.CategoryItemsILIST.TransparentColor = System.Drawing.Color.Transparent;
|
||||
//
|
||||
// SpecialItemsILIST
|
||||
//
|
||||
this.SpecialItemsILIST.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("SpecialItemsILIST.ImageStream")));
|
||||
this.SpecialItemsILIST.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.SpecialItemsILIST.Images.SetKeyName(0, "Warning");
|
||||
//
|
||||
// CategoriesLVIEW
|
||||
//
|
||||
this.CategoriesLVIEW.Activation = System.Windows.Forms.ItemActivation.OneClick;
|
||||
this.CategoriesLVIEW.Alignment = System.Windows.Forms.ListViewAlignment.Left;
|
||||
this.CategoriesLVIEW.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.CategoriesLVIEW.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.NameCOLUMN});
|
||||
this.CategoriesLVIEW.Font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.CategoriesLVIEW.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
|
||||
this.CategoriesLVIEW.HideSelection = false;
|
||||
this.CategoriesLVIEW.LargeImageList = this.CategoriesILIST;
|
||||
this.CategoriesLVIEW.Location = new System.Drawing.Point(0, 0);
|
||||
this.CategoriesLVIEW.Margin = new System.Windows.Forms.Padding(20, 15, 5, 5);
|
||||
this.CategoriesLVIEW.MultiSelect = false;
|
||||
this.CategoriesLVIEW.Name = "CategoriesLVIEW";
|
||||
this.CategoriesLVIEW.ShowGroups = false;
|
||||
this.CategoriesLVIEW.Size = new System.Drawing.Size(185, 500);
|
||||
this.CategoriesLVIEW.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||
this.CategoriesLVIEW.TabIndex = 0;
|
||||
this.CategoriesLVIEW.TileSize = new System.Drawing.Size(180, 30);
|
||||
this.CategoriesLVIEW.UseCompatibleStateImageBehavior = false;
|
||||
this.CategoriesLVIEW.View = System.Windows.Forms.View.Tile;
|
||||
this.CategoriesLVIEW.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.CategoriesLVIEW_ItemSelectionChanged);
|
||||
//
|
||||
// NameCOLUMN
|
||||
//
|
||||
this.NameCOLUMN.Text = "Name";
|
||||
this.NameCOLUMN.Width = 170;
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.panel1.BackColor = System.Drawing.Color.White;
|
||||
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.panel1.Controls.Add(this.CategoryDescriptionLABEL);
|
||||
this.panel1.Controls.Add(this.CategoryTitleLABEL);
|
||||
this.panel1.Controls.Add(this.CategoryIconPBOX);
|
||||
this.panel1.GradientColor = System.Drawing.SystemColors.Control;
|
||||
this.panel1.Location = new System.Drawing.Point(184, 0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Rotation = 0F;
|
||||
this.panel1.Size = new System.Drawing.Size(516, 59);
|
||||
this.panel1.TabIndex = 3;
|
||||
//
|
||||
// CategoryDescriptionLABEL
|
||||
//
|
||||
this.CategoryDescriptionLABEL.AutoSize = true;
|
||||
this.CategoryDescriptionLABEL.BackColor = System.Drawing.Color.Transparent;
|
||||
this.CategoryDescriptionLABEL.Location = new System.Drawing.Point(54, 28);
|
||||
this.CategoryDescriptionLABEL.Name = "CategoryDescriptionLABEL";
|
||||
this.CategoryDescriptionLABEL.Size = new System.Drawing.Size(60, 13);
|
||||
this.CategoryDescriptionLABEL.TabIndex = 5;
|
||||
this.CategoryDescriptionLABEL.Text = "Description";
|
||||
//
|
||||
// CategoryTitleLABEL
|
||||
//
|
||||
this.CategoryTitleLABEL.AutoSize = true;
|
||||
this.CategoryTitleLABEL.BackColor = System.Drawing.Color.Transparent;
|
||||
this.CategoryTitleLABEL.Font = new System.Drawing.Font("Franklin Gothic Medium", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.CategoryTitleLABEL.Location = new System.Drawing.Point(52, 6);
|
||||
this.CategoryTitleLABEL.Name = "CategoryTitleLABEL";
|
||||
this.CategoryTitleLABEL.Size = new System.Drawing.Size(66, 20);
|
||||
this.CategoryTitleLABEL.TabIndex = 1;
|
||||
this.CategoryTitleLABEL.Text = "Category";
|
||||
//
|
||||
// CategoryIconPBOX
|
||||
//
|
||||
this.CategoryIconPBOX.BackColor = System.Drawing.Color.Transparent;
|
||||
this.CategoryIconPBOX.Location = new System.Drawing.Point(13, 12);
|
||||
this.CategoryIconPBOX.Name = "CategoryIconPBOX";
|
||||
this.CategoryIconPBOX.Size = new System.Drawing.Size(32, 32);
|
||||
this.CategoryIconPBOX.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.CategoryIconPBOX.TabIndex = 0;
|
||||
this.CategoryIconPBOX.TabStop = false;
|
||||
//
|
||||
// ConfigurationPanel
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.CategoryItemsLVIEW);
|
||||
this.Controls.Add(this.CategoriesLVIEW);
|
||||
this.Controls.Add(this.Toolbar);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8F);
|
||||
this.MinimumSize = new System.Drawing.Size(700, 500);
|
||||
this.Name = "ConfigurationPanel";
|
||||
this.Size = new System.Drawing.Size(700, 500);
|
||||
this.Toolbar.ResumeLayout(false);
|
||||
this.Toolbar.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.CategoryIconPBOX)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private CategoryListView CategoriesLVIEW;
|
||||
private System.Windows.Forms.ImageList CategoriesILIST;
|
||||
private System.Windows.Forms.ColumnHeader NameCOLUMN;
|
||||
private System.Windows.Forms.ToolStrip Toolbar;
|
||||
private Virtuoso.Miranda.Plugins.Forms.Controls.GradientPanel panel1;
|
||||
private System.Windows.Forms.Label CategoryTitleLABEL;
|
||||
private System.Windows.Forms.PictureBox CategoryIconPBOX;
|
||||
private System.Windows.Forms.ListView CategoryItemsLVIEW;
|
||||
private System.Windows.Forms.ImageList CategoryItemsILIST;
|
||||
private System.Windows.Forms.ColumnHeader CategoryItemNameCOLUMN;
|
||||
private System.Windows.Forms.ColumnHeader CategoryItemDescriptionCOLUMN;
|
||||
private System.Windows.Forms.Label CategoryDescriptionLABEL;
|
||||
private System.Windows.Forms.ToolStripDropDownButton ViewsTDBTN;
|
||||
private System.Windows.Forms.ToolStripMenuItem largeIconsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem tilesToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem detailsToolStripMenuItem;
|
||||
private System.Windows.Forms.ImageList SpecialItemsILIST;
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.ObjectModel;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Miranda.Plugins.Properties;
|
||||
using Virtuoso.Miranda.Plugins.Forms.Controls;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Configuration.Controls
|
||||
{
|
||||
internal sealed partial class ConfigurationPanel : UserControl
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,290 @@
|
||||
<?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="CategoriesILIST.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="Toolbar.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="Toolbar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>379, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="ViewsTDBTN.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAfpJREFUOE+Nkt1L
|
||||
U3EYx892ueOfEF0L/QVxzmWX1SwMeveqC0sh07Xly2pkrVRSiwwySvGimyCiWMPUmeSyJCLYmC6mdNib
|
||||
LwkpJtL2+/b8nnM8WyuqAx+e5/fj+ZzvA+c4DmjqHqfTUe0QCpSKB07FUXlfVDD/fHozzqM1mqtOLN/B
|
||||
34iHGlH8fIOR83ZGjV5V/y/53ZMzJZnmbdmtuVpE/jaYZYuds1XHhk/ZspwvT/aLTB9EziLTD/NMVUL9
|
||||
07u1LP+YD4I29ZeSdTUojB4I41YF1t2XHox07WdxO3ENbpovT+4VC934nZvmXaoL9y7vY3EzdlUm99ry
|
||||
Qc01UEgGIRHJ61wLss6ZfXeLjmcDR1hc/xRAw+Hdj9161UXrU6mDW/FOfK9gK9aJ4Pm9v4hrH/zIv21F
|
||||
Q+2uMdqgTaG3DH37eAUlAlYfYDkyUseJUlyaaUUueglZQnosr862Q/LVqquzHdR3sDw+fJrFlfftnJqd
|
||||
9iH9xleSc1EfvdEkX4aUXz06yeLSTBtyJGdITIS8wk42XnthTJmkpzx2L+XRhyeQp3WzURJpXZYj9UVb
|
||||
XpxoxuJkGRMeLESaee3wg+O0pheJl16RppXnwj4Rm/QUbDk1fgF/QsqhwWNIvmjaSIQb11Kj59aNyNlt
|
||||
FuVzSFePysN/o6n3d36Sn6D5TMF1/zamAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="CategoryItemsLVIEW.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="CategoryItemsILIST.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>476, 17</value>
|
||||
</metadata>
|
||||
<metadata name="SpecialItemsILIST.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>646, 17</value>
|
||||
</metadata>
|
||||
<data name="SpecialItemsILIST.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+
|
||||
GQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMA
|
||||
ASADAAEBAQABIAYAAUBeAAEnAgEBOAFRAgIBnQFXAgIBswFXAgIBswFRAgIBnQEnAgEBOP8A5QABQQIB
|
||||
AXABXwIDAcYBegInAfUD4QH/A+AB/wFxAg0B7AFcAgMBwQFBAgEBcP8A3QABQQIBAXABYwIDAdAB2AHb
|
||||
Ad0B/wGBAbMB1gH/AWkBpAHTAf8BYgGfAdEB/wF5AaIByAH/AdUB1gHXAf8BYwIDAdABQQIBAXD/AJUA
|
||||
AQMCAQECAQYCAQEGAQoCAQILAgEBDQELAgEBDQELAgEBDQELAgEBDQELAgEBDQELAgEBDQELAgEBDQEL
|
||||
AgEBDQELAgEBDQELAgEBDQELAgEBDQELAgEBDQELAgEBDQFEAgEBdwFjAgMB0gHVAdgB2QH/AXUBsQHi
|
||||
Af8BdwG4AfgB/wF0AbcB/AH/AXIBuwH9Af8BaAG4AfYB/wFXAZ0B0AH/Ac8B0QHSAf8BYwIDAdABQQIB
|
||||
AXD/AJEAAQYCAQEGARICAQEWARoCAQEjARwCAQEmARwCAQEmARwCAQEmARwCAQEmARwCAQEmARwCAQEm
|
||||
ARwCAQEmARwCAQEmARwCAQEmARwCAQEmARwCAQEmARwCAQEmAT8CAQFpAWACAwHTAdgC2QH/AWgBpwHd
|
||||
Af8BWgGjAfUB/wFDAZYB9QH/AT4BlgH0Af8BSAGfAfAB/wFYAbQB+QH/AVgBugH5Af8BUgGcAc8B/wPO
|
||||
Af8BXAIDAcEBMwIBAU//AI0AAUgCAgGBAXACJwH3AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGB
|
||||
Af8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGI
|
||||
AYQBgQH/AYICgQH/A4EB/wPdAf8BawGdAcwB/wFFAZgB8wH/ATUBiwHzAf8BKQGBAdoB/wFFAWgBgQH/
|
||||
AWEBgQGCAf8BTwGgAdwB/wFYAb8B+wH/AVEBvQH4Af8BWQGSAcQB/wGOAkwB+QFbAgIBuAEaAgEBIv8A
|
||||
iQABiAGEAYEB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8C+QH4Af8B+gH5
|
||||
AfgB/wL5AfgB/wH6AfkB+AH/AvkB+AH/AvkB+AH/AfoB+QH4Af8D+QH/A6gB/wPRAf8BVAGVAdYB/wE2
|
||||
AZUB8AH/ATgBjAHuAf8BJAGGAfsB/wEpAWgBjQH/AUEBMQEjAf8BdQFmAVwB/wFaAYMBpgH/AVUBwgL/
|
||||
AVsBxAH4Af8BRwG0AfMB/wFjAZEBwwH/AWQCBQHkAUoCAgGG/wCJAAGIAYQBgQH/AfsB+QH4Af8B+gH5
|
||||
AfcB/wH7AfkB+AH/AfoB+QH4Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH4Af8B+gH5AfgB/wL5AfgB/wL5
|
||||
AfgB/wL5AfgB/wP5Af8D0QH/A6YB/wHKAc0BzwH/ATcBlQHpAf8BPgGSAe8B/wEvAYcB7AH/ARoBgQHy
|
||||
Af8BIgGBAcMB/wE9AUcBUAH/AVsBZgFuAf8BTgGXAdMB/wFUAb0B/AH/AVsBwwH3Af8BVwHBAfoB/wFC
|
||||
AaAB3QH/AcUBxwHIAf8BXQICAb0BLQIBAUP/AIUAAYgBhAGBAf8B+wH5AfcB/wH6AfkB9wH/AfoB+QH3
|
||||
Af8B+gH5AfgB/wH6AfkB9wH/AfoB+QH4Af8C+QH4Af8B+gH5AfgB/wL5AfgB/wL5AfgB/wH6AfkB+AH/
|
||||
AvkB+AH/A5wB/wPXAf8BegGlAc0B/wE3AZUB8AH/AUQBkwHvAf8BJAGDAesB/wEWAYEB6wH/ARkBgQHp
|
||||
Af8BKwGBAbcB/wE1AYEBtgH/AT8BmwHoAf8BUAG0AfcB/wFXAb0B9wH/AVYBvQH3Af8BSAGxAfUB/wF6
|
||||
AZ8BwAH/AWsCBQHmAU0CAgGR/wCFAAGIAYQBgQH/AfsB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH4
|
||||
Af8B+gH5AfcB/wL5AfcB/wH6AfkB+AH/AfoB+QH4Af8B+gH5AfgB/wL5AfgB/wH6AvkB/wLlAeQB/wOb
|
||||
Af8B0gHVAdcB/wEzAZcB6QH/AUkBmwHxAf8BQQGTAe8B/wEcAYEB6gH/ARYBgQH2Af8BIwFnAY4B/wE6
|
||||
ATkBOAH/AVoBWwFdAf8BQQGBAawB/wFDAa0B/QH/AU8BswH0Af8BUQG2AfUB/wFNAbEB9gH/ATkBmAHf
|
||||
Af8CzQHOAf8BWgICAbkBGgIBASL/AIEAAYgBhAGBAf8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5
|
||||
AfcB/wH6AfkB+AH/AfoB+QH3Af8B+gH5AfcB/wL5AfgB/wL5AfcB/wH6AfkB+AH/AfoB+QH4Af8CxQHE
|
||||
Af8DvAH/AZ4BvgHMAf8BMwGaAe4B/wFUAZ4B8AH/AToBkgHuAf8BGAGBAekB/wEWAYIB9wH/ASgBXwGB
|
||||
Af8BOAEtASMB/wFfAVcBUQH/AT8BgQGlAf8BNAGeAfsB/wFCAaQB8gH/AUYBqAHzAf8BRgGlAfIB/wE4
|
||||
AZkB6wH/AbEBugG/Af8BYQIDAdEBOAIBAVr/AIEAAYgBhAGBAf8B+wH5AfYB/wH6AfkB9wH/AfoB+QH2
|
||||
Af8B+gH5AfcB/wH7AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB+AH/AfoB+QH4Af8C+QH4Af8B+gH5
|
||||
AfgB/wOyAf8D1AH/AXYBtwHZAf8BOAG1AfUB/wFZAacB8QH/ATYBjQHtAf8BFgGBAekB/wEWAYIB9gH/
|
||||
AScBWwGBAf8BLAEkAR0B/wFNAUYBQQH/ATgBeAGYAf8BJQGRAfgB/wEyAZUB8AH/ATgBlgHvAf8BOwGW
|
||||
Ae4B/wExAY4B7QH/AYsBogGzAf8BZgIFAeIBRgIBAXv/AIEAAYgBhAGBAf8B+gH5AfcB/wH6AfkB9wH/
|
||||
AfsB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfgB/wH6AfkB+AH/AfoB+QH3Af8B+gH5
|
||||
AfcB/wL5AfgB/wOmAf8D1gH/AUgBtwHmAf8BQgHBAfgB/wFcAcIB9wH/ATQBmgHvAf8BFgGBAekB/wEW
|
||||
AYEB9QH/ASUBVgGBAf8BHwEYARYB/wE3AS8BKAH/AS8BaQGHAf8BGQGGAfcB/wEiAYQB6wH/ASkBgwHq
|
||||
Af8BLwGEAekB/wEtAYEB6QH/AXIBjAGyAf8BeQIqAfYBTwICAZf/AIEAAYgBhAGBAf8B+gH5AfcB/wH7
|
||||
AfkB9wH/AfsB+QH3Af8B+gH5AfcB/wH7AfkB9wH/AfoB+QH3Af8B+gH5AfgB/wH6AfkB9wH/AfoB+QH4
|
||||
Af8B+gH5AfcB/wH6AfkB+AH/ApQBkwH/A+YB/wEzAbYB6AH/AUoBxQH5Af8BXQHGAfgB/wE0AbcB9QH/
|
||||
ARYBmQHvAf8BFgGJAfYB/wEfAU0BdgH/AxYB/wEiARoBFwH/ASgBXgGBAf8BFgGBAfQB/wEZAYEB5wH/
|
||||
AR8BgQHmAf8BJgGBAeUB/wEnAYEB5wH/AU4BgQG4Af8BkwJdAfsBWAICAbf/AIEAAYgBhAGBAf8B+wH5
|
||||
AfcB/wH6AfkB9gH/AfoB+QH2Af8B+gH5AfcB/wH6AfkB9wH/AfsB+QH3Af8B+gH5AfcB/wH7AfkB9wH/
|
||||
AfoB+QH4Af8B+gH5AfcB/wL5AfcB/wKVAZQB/wPnAf8BLwG7Ae0B/wFMAcYB+QH/AWEByAH4Af8BQgG9
|
||||
AfcB/wEjAbIB9AH/ARoBrAH8Af8BNgFoAYEB/wEpASUBIgH/ARkCFgH/ASEBUgF/Af8BFgGBAfEB/wEW
|
||||
AYEB5QH/ARwBgQHjAf8BIwGBAeMB/wEiAYAB4wH/ATkBgQG/Af8DwQH/AVgCAgG3/wCBAAGIAYQBgQH/
|
||||
AfoB+QH2Af8B+gH5AfcB/wH7AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH7AfkB9gH/AfoB+QH3Af8B+wH5
|
||||
AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfgB/wKWAZUB/wPnAf8BNAHCAfEB/wFPAckB+gH/AXQBzwH5
|
||||
Af8BbgHNAfkB/wFWAcQB9wH/AUUBvwH9Af8BZwGBAY0B/wFpAWEBXQH/AUwBRQFAAf8BMgFiAYEB/wEW
|
||||
AYMB8AH/ARgBgQHnAf8BHgGBAeQB/wEjAYEB4wH/AR4BewHiAf8BKAF6AcQB/wPCAf8BWAICAbf/AIEA
|
||||
AYgBhAGBAf8B+wH5AfcB/wH7AfkB9gH/AfoB+QH3Af8B+wH5AfcB/wH7AfkB9wH/AfsB+QH3Af8B+gH5
|
||||
AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB+AH/ApcBlgH/A+gB/wE3AcUB8QH/AVkB0AH8
|
||||
Af8BgQHaAfwB/wGOAeAB/QH/AYQB3QH8Af8BgQHXAv8BgQGSAZ4B/wOBAf8BcAFlAV4B/wFCAXABgQH/
|
||||
ARYBkwHxAf8BHQGKAeoB/wEgAYUB5wH/ASABgQHlAf8BFgF+AeQB/wElAXsBxAH/A8IB/wFYAgIBt/8A
|
||||
gQABiAGEAYEB/wH7AfkB9gH/AfsB+QH2Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH2Af8B+wH5AfcB/wH7
|
||||
AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB+AH/AfoB+QH4Af8DmAH/A+gB/wFPAcQB6wH/AVAByAHy
|
||||
Af8BgQHZAfoB/wGzAe0C/wHEAfIC/wGsAe0C/wGQAaoBsgH/AoEBggH/AXACcQH/AUIBewGDAf8BGgGa
|
||||
AfMB/wEfAY4B6wH/ARwBhAHoAf8BFgGBAeAB/wEWAYEB1gH/ATwBgQHBAf8DwAH/AVgCAgG3/wCBAAGI
|
||||
AYQBgQH/AfsB+QH2Af8B+gH5AfcB/wH6AfkB9wH/AfsB+QH2Af8B+gH5AfcB/wH7AfkB9wH/AfsB+QH3
|
||||
Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wOZAf8D+gH/AeMB5wHoAf8BtAHQAdoB/wGP
|
||||
AcsB4QH/AZoB2QHwAf8B2gH2Af0B/wHUAfgC/wGZAd8B+AH/AXQBxgHvAf8BPQGtAecB/wEhAZ8B6gH/
|
||||
ARsBlwHvAf8BFgGEAeQB/wEbAYEB1AH/AXUBnAHFAf8BlwGzAcMB/wHNAdMB1QH/AacCfQH8AVgCAgG3
|
||||
/wCBAAGIAYQBgQH/AfsB+QH3Af8B+wH5AfYB/wH7AfkB9gH/AfoB+QH3Af8B+wH5AfYB/wH7AfkB9wH/
|
||||
AfsB+QH3Af8B+wH5AfYB/wH7AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wG4ArcB/wGeAp0B/wG2ArUB/wPU
|
||||
Af8D9gH/AdMB3AHhAf8BswHYAecB/wGsAeQB9wH/AZIB5AL/AW0B0QH9Af8BNAG4AfkB/wEWAaIB8wH/
|
||||
ARYBiwHhAf8BXAGgAdcB/wG8AcgBzgH/Ad4C3QH/A8YB/wGPAo4B/wFaAgIBuQFIAgIBgv8AgQABiAGE
|
||||
AYEB/wH7AfkB9wH/AfsB+QH2Af8B+wH5AfYB/wH6AfkB9gH/AfsB+QH3Af8B+gH5AfYB/wH6AfkB9wH/
|
||||
AfsB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB+AH/AtsB2QH/AbYCtQH/
|
||||
AqIBoQH/A9IB/wHvAu4B/wG1AdYB4wH/AXYBywHxAf8BQwG/AfQB/wEWAagB7gH/ARoBmQHjAf8BiQG5
|
||||
AdMB/wHfAd0B3AH/A70B/wOPAf8DqwH/A4EB/wEcAgEBJgELAgEBDf8AgQABiAGEAYEB/wH7AfkB9gH/
|
||||
AfsB+QH2Af8B+wH5AfYB/wH7AfkB9wH/AfsB+QH2Af8B+wH5AfcB/wH7AfkB9gH/AfsB+QH3Af8B+wH5
|
||||
AfYB/wH7AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH4Af8B+gH5AfcB/wHuAe0B6wH/
|
||||
Aq4BrQH/A6wB/wHvAu4B/wHBAdAB1wH/AY0BwwHZAf8BhQG6AdEB/wG1AcUBzAH/AdoC2QH/A58B/wOn
|
||||
Af8D6wH/A/kB/wGIAYQBgQH/ARwCAQEmAQsCAQEN/wCBAAFtAiMB9gH7AfkB9gH/AfsB+QH2Af8B+gH5
|
||||
AfYB/wH7AfkB9wH/AfoB+QH2Af8B+wH5AfYB/wH6AfkB9gH/AfoB+QH3Af8B+gH5AfcB/wH7AfkB9wH/
|
||||
AfoB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfgB/wH6AfkB+AH/AfoB+QH4Af8B1ALT
|
||||
Af8DoAH/A90B/wPvAf8D7gH/A9MB/wObAf8D1wH/A/kB/wP5Af8D+QH/AYgBhAGBAf8BHAIBASYBCwIB
|
||||
AQ3/AIEAAW0CIwH2AfsB+QH2Af8B+wH5AfYB/wH6AfkB9gH/AfsB+QH2Af8B+wH5AfcB/wH7AfkB9wH/
|
||||
AfoB+QH2Af8B+wH5AfcB/wH7AfkB9gH/AfsB+QH2Af8B+wH5AfcB/wH7AfkB9wH/AfoB+QH3Af8B+gH5
|
||||
AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfgB/wL5AfgB/wLmAeUB/wKtAawB/wORAf8BkQKQAf8DqgH/
|
||||
AuUB5AH/A/kB/wP5Af8B+AL5Af8D+QH/AYgBhAGBAf8BHAIBASYBCwIBAQ3/AIEAAW0CIwH2AfsB+QH2
|
||||
Af8B+wH5AfYB/wH7AfkB9gH/AfsB+QH2Af8B+wH5AfYB/wH6AfkB9gH/AfsB+QH2Af8B+wH5AfYB/wH7
|
||||
AfkB9gH/AfoB+QH3Af8B+wH5AfcB/wH6AfkB9wH/AfsB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH4
|
||||
Af8B+gH5AfcB/wL5AfgB/wL5AfgB/wL5AfgB/wL5AfgB/wH6AfkB+AH/AfoB+QH4Af8D+QH/AvkB+AH/
|
||||
A/kB/wL5AfgB/wP5Af8BiAGEAYEB/wEcAgEBJgELAgEBDf8AgQABbQIjAfYB+wH5AfYB/wH7AfkB9gH/
|
||||
AfsB+QH2Af8B+wH5AfYB/wH7AfkB9gH/AfsB+QH2Af8B+gH5AfcB/wH6AfkB9gH/AfsB+QH2Af8B+wH5
|
||||
AfcB/wH6AfkB9wH/AfoB+QH2Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5AfcB/wH6AfkB+AH/
|
||||
AfoB+QH3Af8B+gH5AfcB/wL5AfgB/wL5AfgB/wL5AfgB/wH6AfkB+AH/AfoB+QH4Af8C+QH4Af8C+QH4
|
||||
Af8D+QH/A/kB/wGIAYQBgQH/ARwCAQEmAQsCAQEN/wCBAAFtAiMB9gH7AfkB9gH/AfsB+QH2Af8B+wH5
|
||||
AfYB/wH7AfkB9gH/AfsB+QH2Af8B+wH5AfYB/wH7AfkB9gH/AfoB+QH2Af8B+wH5AfYB/wH7AfkB9gH/
|
||||
AfoB+QH2Af8B+wH5AfcB/wH6AfkB9wH/AfsB+QH3Af8B+gH5AfcB/wH6AfkB9wH/AfoB+QH3Af8B+gH5
|
||||
AfcB/wH6AfkB+AH/AfoB+QH3Af8B+gH5AfgB/wL5AfgB/wH6AfkB+AH/AvkB+AH/AvkB+AH/AvkB+AH/
|
||||
A/kB/wP5Af8BiAGEAYEB/wEcAgEBJgELAgEBDf8AgQABbgIjAfYBywHJAccB/wHLAckBxwH/AcsByQHH
|
||||
Af8BywHJAccB/wHLAckBxwH/AcsByQHHAf8BywHJAccB/wHLAckBxwH/AcsByQHHAf8BywHJAccB/wHL
|
||||
AckBxwH/AcsByQHHAf8BywHJAccB/wHLAckBxwH/AcsByQHHAf8BywHJAccB/wHMAcoByQH/Ac0BywHK
|
||||
Af8BzQHMAcoB/wHNAcwBygH/Ac0BywHJAf8BzAHKAcgB/wHMAcoByAH/AcsByQHHAf8BywHJAccB/wHL
|
||||
AckBxwH/AcsByQHHAf8BywHJAccB/wGIAYQBgQH/ARoCAQEjAQoCAQEL/wCBAAGAAn8B/gHmAd4B2AH/
|
||||
Ad8B1wHRAf8B3gHXAdEB/wHeAdcB0QH/Ad4B1wHRAf8B3gHXAdEB/wHeAdcB0QH/Ad4B1wHRAf8B3gHX
|
||||
AdEB/wHeAdcB0QH/Ad4B1wHRAf8B3gHXAdEB/wHeAdcB0QH/Ad4B1wHRAf8B3gHXAdEB/wHeAdcB0QH/
|
||||
Ad4B1wHRAf8B3gHXAdEB/wHeAdcB0QH/Ad4B1wHRAf8B3gHXAdEB/wHeAdcB0QH/AZEBgQF+Af8B3gHX
|
||||
AdEB/wGRAYEBfgH/Ad4B1wHRAf8BkQGBAX4B/wHeAdcB0QH/AYgBhAGBAf8BEgIBARYBBgIBAQb/AIEA
|
||||
AUYCAQF8AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGB
|
||||
Af8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGI
|
||||
AYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGB
|
||||
Af8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BiAGEAYEB/wGIAYQBgQH/AYgBhAGBAf8BSAICAYEBBgIB
|
||||
AQYBAwIBAQL/AP8A/wD/AP8AhQABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEGAAECFgAD/wEA
|
||||
Av8B4AF/DAAC/wHAAT8MAAL/AYABHw8AAQ8PAAEHDwABAw8AAQMPAAEBDwABAf8AXQAE/wwABP8MAAs=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="CategoriesLVIEW.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="CategoryDescriptionLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="CategoryTitleLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="CategoryIconPBOX.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
224
Hyphen/Plugins/Configuration/Forms/Controls/PluginManagementContent.Designer.cs
generated
Normal file
224
Hyphen/Plugins/Configuration/Forms/Controls/PluginManagementContent.Designer.cs
generated
Normal file
@ -0,0 +1,224 @@
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms.Controls;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
partial class PluginManagementContent
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Enabled and running", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Disabled by the user", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
System.Windows.Forms.ListViewGroup listViewGroup3 = new System.Windows.Forms.ListViewGroup("Crashed", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PluginManagementContent));
|
||||
this.EnablePluginBTN = new System.Windows.Forms.Button();
|
||||
this.DisablePluginBTN = new System.Windows.Forms.Button();
|
||||
this.StatusColumn = new System.Windows.Forms.ColumnHeader();
|
||||
this.PluginsLVIEW = new System.Windows.Forms.ListView();
|
||||
this.NameColumn = new System.Windows.Forms.ColumnHeader();
|
||||
this.AuthorColumn = new System.Windows.Forms.ColumnHeader();
|
||||
this.VersionColumn = new System.Windows.Forms.ColumnHeader();
|
||||
this.panel1 = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.DescriptionLABEL = new System.Windows.Forms.Label();
|
||||
this.panel2 = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemSection();
|
||||
this.HomePageLBTN = new System.Windows.Forms.LinkLabel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// EnablePluginBTN
|
||||
//
|
||||
this.EnablePluginBTN.AutoSize = true;
|
||||
this.EnablePluginBTN.Enabled = false;
|
||||
this.EnablePluginBTN.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.EnablePluginBTN.Location = new System.Drawing.Point(678, 46);
|
||||
this.EnablePluginBTN.Name = "EnablePluginBTN";
|
||||
this.EnablePluginBTN.Size = new System.Drawing.Size(95, 23);
|
||||
this.EnablePluginBTN.TabIndex = 11;
|
||||
this.EnablePluginBTN.Text = "Enable plugin";
|
||||
this.EnablePluginBTN.UseVisualStyleBackColor = false;
|
||||
this.EnablePluginBTN.Click += new System.EventHandler(this.EnablePluginBTN_Click);
|
||||
//
|
||||
// DisablePluginBTN
|
||||
//
|
||||
this.DisablePluginBTN.AutoSize = true;
|
||||
this.DisablePluginBTN.Enabled = false;
|
||||
this.DisablePluginBTN.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.DisablePluginBTN.Location = new System.Drawing.Point(678, 75);
|
||||
this.DisablePluginBTN.Name = "DisablePluginBTN";
|
||||
this.DisablePluginBTN.Size = new System.Drawing.Size(95, 23);
|
||||
this.DisablePluginBTN.TabIndex = 10;
|
||||
this.DisablePluginBTN.Text = "Disable plugin";
|
||||
this.DisablePluginBTN.UseVisualStyleBackColor = false;
|
||||
this.DisablePluginBTN.Click += new System.EventHandler(this.DisablePluginBTN_Click);
|
||||
//
|
||||
// StatusColumn
|
||||
//
|
||||
this.StatusColumn.Text = "Status";
|
||||
//
|
||||
// PluginsLVIEW
|
||||
//
|
||||
this.PluginsLVIEW.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.NameColumn,
|
||||
this.AuthorColumn,
|
||||
this.VersionColumn,
|
||||
this.StatusColumn});
|
||||
this.PluginsLVIEW.FullRowSelect = true;
|
||||
listViewGroup1.Header = "Enabled and running";
|
||||
listViewGroup1.Name = "EnabledGroup";
|
||||
listViewGroup2.Header = "Disabled by the user";
|
||||
listViewGroup2.Name = "DisabledByUserGroup";
|
||||
listViewGroup3.Header = "Crashed";
|
||||
listViewGroup3.Name = "DisabledByCrashGroup";
|
||||
this.PluginsLVIEW.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
|
||||
listViewGroup1,
|
||||
listViewGroup2,
|
||||
listViewGroup3});
|
||||
this.PluginsLVIEW.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.PluginsLVIEW.HideSelection = false;
|
||||
this.PluginsLVIEW.Location = new System.Drawing.Point(12, 46);
|
||||
this.PluginsLVIEW.MultiSelect = false;
|
||||
this.PluginsLVIEW.Name = "PluginsLVIEW";
|
||||
this.PluginsLVIEW.ShowItemToolTips = true;
|
||||
this.PluginsLVIEW.Size = new System.Drawing.Size(650, 257);
|
||||
this.PluginsLVIEW.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||
this.PluginsLVIEW.TabIndex = 9;
|
||||
this.PluginsLVIEW.UseCompatibleStateImageBehavior = false;
|
||||
this.PluginsLVIEW.View = System.Windows.Forms.View.Details;
|
||||
this.PluginsLVIEW.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.PluginsLVIEW_ItemSelectionChanged);
|
||||
//
|
||||
// NameColumn
|
||||
//
|
||||
this.NameColumn.Text = "Title";
|
||||
//
|
||||
// AuthorColumn
|
||||
//
|
||||
this.AuthorColumn.Text = "Author";
|
||||
//
|
||||
// VersionColumn
|
||||
//
|
||||
this.VersionColumn.Text = "Version";
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.BackColor = System.Drawing.Color.Transparent;
|
||||
this.panel1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.panel1.Font = new System.Drawing.Font("Tahoma", 8.25F);
|
||||
this.panel1.HeaderFont = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.panel1.HeaderText = "The following list contains installed Hyphen plugins.";
|
||||
this.panel1.Image = ((System.Drawing.Image)(resources.GetObject("panel1.Image")));
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.MinimumSize = new System.Drawing.Size(300, 40);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(790, 40);
|
||||
this.panel1.TabIndex = 16;
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
|
||||
this.pictureBox1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.pictureBox1.Location = new System.Drawing.Point(625, 170);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(212, 235);
|
||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.pictureBox1.TabIndex = 15;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// DescriptionLABEL
|
||||
//
|
||||
this.DescriptionLABEL.AutoEllipsis = true;
|
||||
this.DescriptionLABEL.BackColor = System.Drawing.Color.Transparent;
|
||||
this.DescriptionLABEL.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.DescriptionLABEL.Location = new System.Drawing.Point(20, 335);
|
||||
this.DescriptionLABEL.Name = "DescriptionLABEL";
|
||||
this.DescriptionLABEL.Size = new System.Drawing.Size(586, 53);
|
||||
this.DescriptionLABEL.TabIndex = 12;
|
||||
this.DescriptionLABEL.Text = "(...)";
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.BackColor = System.Drawing.Color.Transparent;
|
||||
this.panel2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
|
||||
this.panel2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.panel2.ForeColor = System.Drawing.Color.Black;
|
||||
this.panel2.Location = new System.Drawing.Point(12, 309);
|
||||
this.panel2.MinimumSize = new System.Drawing.Size(300, 20);
|
||||
this.panel2.Name = "panel2";
|
||||
this.panel2.SectionName = "Description";
|
||||
this.panel2.Size = new System.Drawing.Size(543, 20);
|
||||
this.panel2.TabIndex = 17;
|
||||
//
|
||||
// HomePageLBTN
|
||||
//
|
||||
this.HomePageLBTN.AutoSize = true;
|
||||
this.HomePageLBTN.Enabled = false;
|
||||
this.HomePageLBTN.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.HomePageLBTN.Location = new System.Drawing.Point(561, 313);
|
||||
this.HomePageLBTN.Name = "HomePageLBTN";
|
||||
this.HomePageLBTN.Size = new System.Drawing.Size(58, 13);
|
||||
this.HomePageLBTN.TabIndex = 18;
|
||||
this.HomePageLBTN.TabStop = true;
|
||||
this.HomePageLBTN.Text = "Homepage";
|
||||
//
|
||||
// PluginManagementContent
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.Controls.Add(this.HomePageLBTN);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.EnablePluginBTN);
|
||||
this.Controls.Add(this.DisablePluginBTN);
|
||||
this.Controls.Add(this.PluginsLVIEW);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Controls.Add(this.DescriptionLABEL);
|
||||
this.Name = "PluginManagementContent";
|
||||
this.Size = new System.Drawing.Size(790, 398);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button EnablePluginBTN;
|
||||
private System.Windows.Forms.Button DisablePluginBTN;
|
||||
private System.Windows.Forms.ColumnHeader StatusColumn;
|
||||
private System.Windows.Forms.ListView PluginsLVIEW;
|
||||
private System.Windows.Forms.ColumnHeader NameColumn;
|
||||
private System.Windows.Forms.ColumnHeader AuthorColumn;
|
||||
private System.Windows.Forms.ColumnHeader VersionColumn;
|
||||
private Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader panel1;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Label DescriptionLABEL;
|
||||
private CategoryItemSection panel2;
|
||||
private System.Windows.Forms.LinkLabel HomePageLBTN;
|
||||
}
|
||||
}
|
@ -0,0 +1,189 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Collections;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration.Forms.Controls
|
||||
{
|
||||
internal sealed partial class PluginManagementContent : CategoryItemControl
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
private PluginManagementContent()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
PluginsLVIEW.Hide();
|
||||
DescriptionLABEL.Text = TextResources.UI_Label_SelectPluginToDisplayDescr;
|
||||
|
||||
MirandaContext.Current.PluginManager.PluginStateChange += PluginManager_PluginStateChange;
|
||||
}
|
||||
|
||||
private void PluginManager_PluginStateChange(object sender, PluginStateChangeEventArgs e)
|
||||
{
|
||||
if (InvokeRequired)
|
||||
Invoke(new MethodInvoker(delegate { OnShow(true); }));
|
||||
else
|
||||
OnShow(true);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI Handlers
|
||||
|
||||
protected internal override void Close()
|
||||
{
|
||||
MirandaContext.Current.PluginManager.PluginStateChange -= PluginManager_PluginStateChange;
|
||||
}
|
||||
|
||||
protected internal override bool OnShow(bool firstTime)
|
||||
{
|
||||
if (!firstTime)
|
||||
return false;
|
||||
|
||||
PluginDescriptorReadOnlyCollection plugins = MirandaContext.Current.PluginManager.Plugins;
|
||||
|
||||
try
|
||||
{
|
||||
SynchronizationHelper.BeginCollectionUpdate(plugins);
|
||||
|
||||
PluginsLVIEW.Items.Clear();
|
||||
DisablePluginBTN.Enabled = EnablePluginBTN.Enabled = HomePageLBTN.Enabled = false;
|
||||
|
||||
if (plugins.Count == 0)
|
||||
{
|
||||
PluginsLVIEW.Enabled = false;
|
||||
PluginsLVIEW.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
PublishPlugins(plugins);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
SynchronizationHelper.EndUpdate(plugins);
|
||||
}
|
||||
|
||||
CommitListViewChanges();
|
||||
return false;
|
||||
}
|
||||
|
||||
private void CommitListViewChanges()
|
||||
{
|
||||
NameColumn.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
|
||||
AuthorColumn.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
|
||||
VersionColumn.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
|
||||
StatusColumn.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
|
||||
|
||||
PluginsLVIEW.Show();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Management
|
||||
|
||||
private void PublishPlugins(PluginDescriptorReadOnlyCollection plugins)
|
||||
{
|
||||
PluginsLVIEW.BeginUpdate();
|
||||
|
||||
foreach (PluginDescriptor descriptor in plugins)
|
||||
{
|
||||
try
|
||||
{
|
||||
ListViewItem item = new ListViewItem(new string[] { descriptor.Plugin.Name, descriptor.Plugin.Author,
|
||||
descriptor.Plugin.Version.ToString(), descriptor.PluginState.ToString() });
|
||||
|
||||
switch (descriptor.PluginState)
|
||||
{
|
||||
case PluginState.Enabled:
|
||||
item.Group = PluginsLVIEW.Groups["EnabledGroup"];
|
||||
break;
|
||||
case PluginState.Disabled:
|
||||
item.Group = PluginsLVIEW.Groups["DisabledByUserGroup"];
|
||||
break;
|
||||
case PluginState.CrashDisabled:
|
||||
item.Group = PluginsLVIEW.Groups["DisabledByCrashGroup"];
|
||||
break;
|
||||
}
|
||||
|
||||
item.Tag = descriptor;
|
||||
PluginsLVIEW.Items.Add(item);
|
||||
}
|
||||
finally
|
||||
{
|
||||
PluginsLVIEW.EndUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void PluginsLVIEW_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
|
||||
{
|
||||
if (e.IsSelected)
|
||||
{
|
||||
PluginDescriptor descriptor = (PluginDescriptor)e.Item.Tag;
|
||||
PluginsLVIEW.Tag = descriptor;
|
||||
|
||||
DescriptionLABEL.Text = descriptor.Plugin.Description;
|
||||
|
||||
EnablePluginBTN.Enabled = !(descriptor.PluginState == PluginState.Enabled);
|
||||
DisablePluginBTN.Enabled = !EnablePluginBTN.Enabled;
|
||||
|
||||
HomePageLBTN.Enabled = descriptor.Plugin.HomePage != null;
|
||||
}
|
||||
else
|
||||
{
|
||||
PluginsLVIEW.Tag = null;
|
||||
|
||||
DisablePluginBTN.Enabled = EnablePluginBTN.Enabled = HomePageLBTN.Enabled = false;
|
||||
DescriptionLABEL.Text = TextResources.UI_Label_SelectPluginToDisplayDescr;
|
||||
}
|
||||
}
|
||||
|
||||
private void DisablePluginBTN_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PluginsLVIEW.Tag is PluginDescriptor)
|
||||
((PluginDescriptor)PluginsLVIEW.Tag).SetPluginState(PluginState.Disabled, true);
|
||||
}
|
||||
|
||||
private void EnablePluginBTN_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PluginsLVIEW.Tag is PluginDescriptor)
|
||||
((PluginDescriptor)PluginsLVIEW.Tag).SetPluginState(PluginState.Enabled, true);
|
||||
}
|
||||
|
||||
private void HomePageLBTN_LinkClicked(object sender, LinkLabelLinkClickedEventArgs eArgs)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (PluginsLVIEW.Tag is PluginDescriptor)
|
||||
Process.Start(((PluginDescriptor)PluginsLVIEW.Tag).Plugin.HomePage.ToString());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(TextResources.ExceptionMsg_CannotOpenHomePage + e.Message, TextResources.UI_Caption_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,483 @@
|
||||
<?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="EnablePluginBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="DisablePluginBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="PluginsLVIEW.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="panel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="panel1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
18DMAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="DescriptionLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="panel2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="HomePageLBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
29
Hyphen/Plugins/Configuration/IEncryption.cs
Normal file
29
Hyphen/Plugins/Configuration/IEncryption.cs
Normal file
@ -0,0 +1,29 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public interface IEncryption
|
||||
{
|
||||
byte[] Encrypt(byte[] data);
|
||||
byte[] Decrypt(byte[] data);
|
||||
}
|
||||
}
|
33
Hyphen/Plugins/Configuration/IStorage.cs
Normal file
33
Hyphen/Plugins/Configuration/IStorage.cs
Normal file
@ -0,0 +1,33 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public interface IStorage : IDisposable
|
||||
{
|
||||
Stream OpenRead(Type configType, ConfigurationOptionsAttribute options);
|
||||
Stream OpenWrite(Type configType, ConfigurationOptionsAttribute options);
|
||||
|
||||
bool Exists(Type configType, ConfigurationOptionsAttribute options);
|
||||
}
|
||||
}
|
78
Hyphen/Plugins/Configuration/IsolatedStorage.cs
Normal file
78
Hyphen/Plugins/Configuration/IsolatedStorage.cs
Normal file
@ -0,0 +1,78 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using FxIsolatedStorage = System.IO.IsolatedStorage.IsolatedStorage;
|
||||
using System.IO.IsolatedStorage;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public class IsolatedStorage : StorageBase
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private IsolatedStorageFile Store;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public IsolatedStorage()
|
||||
{
|
||||
Store = IsolatedStorageFile.GetUserStoreForAssembly();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public override Stream OpenRead(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
if (Store == null)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
return new IsolatedStorageFileStream(GetFileName(configType, options), FileMode.Open, Store);
|
||||
}
|
||||
|
||||
public override Stream OpenWrite(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
if (Store == null)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
return new IsolatedStorageFileStream(GetFileName(configType, options), FileMode.Create, Store);
|
||||
}
|
||||
|
||||
public override bool Exists(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
return Store.GetFileNames(GetFileName(configType, options)).Length != 0;
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
if (Store != null)
|
||||
Store.Dispose();
|
||||
|
||||
Store = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
84
Hyphen/Plugins/Configuration/PMConfigurator.cs
Normal file
84
Hyphen/Plugins/Configuration/PMConfigurator.cs
Normal file
@ -0,0 +1,84 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Configuration;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms.Controls;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
internal sealed class PMConfigurator : IInternalConfigurator
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
private PMConfigurator() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
private static IConfigurablePlugin singleton;
|
||||
public static IConfigurablePlugin Singleton
|
||||
{
|
||||
get
|
||||
{
|
||||
return singleton ?? (singleton = new PMConfigurator());
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IConfigurablePlugin Members
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Plugins"; }
|
||||
}
|
||||
|
||||
private PluginConfiguration[] configuration;
|
||||
public PluginConfiguration[] Configuration
|
||||
{
|
||||
get { return configuration ?? (configuration = new PluginConfiguration[] { PMConfiguration.Singleton }); }
|
||||
}
|
||||
|
||||
public void PopulateConfiguration(CategoryCollection categories)
|
||||
{
|
||||
Category category = new Category(TextResources.Config_Management, TextResources.Config_Management_Description);
|
||||
categories.Add(category);
|
||||
|
||||
CategoryItem item = new CategoryItem(TextResources.Config_Management_Plugins, TextResources.Config_Management_Plugins_Description, typeof(PluginManagementContent));
|
||||
item.Image = VisualResources.Image_64x67_Management;
|
||||
category.Items.Add(item);
|
||||
}
|
||||
|
||||
public void ResetConfiguration()
|
||||
{
|
||||
PMConfiguration.Reset();
|
||||
}
|
||||
|
||||
public void ReloadConfiguration()
|
||||
{
|
||||
PMConfiguration.Reload();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
120
Hyphen/Plugins/Configuration/PortableEncryption.cs
Normal file
120
Hyphen/Plugins/Configuration/PortableEncryption.cs
Normal file
@ -0,0 +1,120 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Security.Cryptography;
|
||||
using System.IO;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public abstract class PortableEncryption : IEncryption
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static readonly byte[] KeyGeneratorSalt = new byte[] { 13, 74, 64, 0, 11, 128, 32, 44, 113, 42 };
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
protected PortableEncryption() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public virtual byte[] Encrypt(byte[] data)
|
||||
{
|
||||
ICryptoTransform transform = CreateEncryptor();
|
||||
|
||||
using (MemoryStream stream = new MemoryStream(data.Length))
|
||||
{
|
||||
using (CryptoStream crypto = new CryptoStream(stream, transform, CryptoStreamMode.Write))
|
||||
crypto.Write(data, 0, data.Length);
|
||||
|
||||
return stream.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public virtual byte[] Decrypt(byte[] data)
|
||||
{
|
||||
ICryptoTransform transform = CreateDecryptor();
|
||||
|
||||
using (MemoryStream inStream = new MemoryStream(data), outStream = new MemoryStream(data.Length))
|
||||
{
|
||||
using (CryptoStream crypto = new CryptoStream(inStream, transform, CryptoStreamMode.Read))
|
||||
{
|
||||
int count = 0;
|
||||
byte[] buffer = new byte[2048];
|
||||
|
||||
while ((count = crypto.Read(buffer, 0, buffer.Length)) != 0)
|
||||
outStream.Write(buffer, 0, count);
|
||||
}
|
||||
|
||||
return outStream.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Encryption
|
||||
|
||||
protected virtual ICryptoTransform CreateEncryptor()
|
||||
{
|
||||
string key = PromptForKey(false);
|
||||
|
||||
TripleDES tripleDes = TripleDES.Create();
|
||||
byte[] keyBytes;
|
||||
byte[] ivBytes;
|
||||
GetSecretBytes(tripleDes, key, out keyBytes, out ivBytes);
|
||||
|
||||
return tripleDes.CreateEncryptor(keyBytes, ivBytes);
|
||||
}
|
||||
|
||||
protected virtual ICryptoTransform CreateDecryptor()
|
||||
{
|
||||
string key = PromptForKey(true);
|
||||
|
||||
TripleDES tripleDes = TripleDES.Create();
|
||||
byte[] keyBytes;
|
||||
byte[] ivBytes;
|
||||
GetSecretBytes(tripleDes, key, out keyBytes, out ivBytes);
|
||||
|
||||
return tripleDes.CreateDecryptor(keyBytes, ivBytes);
|
||||
}
|
||||
|
||||
protected static void GetSecretBytes(SymmetricAlgorithm algorithm, string password, out byte[] keyBytes, out byte[] ivBytes)
|
||||
{
|
||||
Rfc2898DeriveBytes keyGenerator = new Rfc2898DeriveBytes(password, KeyGeneratorSalt, 20);
|
||||
keyBytes = keyGenerator.GetBytes(algorithm.LegalKeySizes[0].MaxSize / 8);
|
||||
|
||||
keyGenerator.IterationCount = 10;
|
||||
ivBytes = keyGenerator.GetBytes(algorithm.LegalBlockSizes[0].MaxSize / 8);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Abstracts
|
||||
|
||||
protected abstract string PromptForKey(bool decrypting);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
63
Hyphen/Plugins/Configuration/PortableStorage.cs
Normal file
63
Hyphen/Plugins/Configuration/PortableStorage.cs
Normal file
@ -0,0 +1,63 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public class PortableStorage : StorageBase
|
||||
{
|
||||
#region Helpers
|
||||
|
||||
private string GetPath(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
string configDirectory = Path.Combine(MirandaEnvironment.MirandaFolderPath, "Configuration");
|
||||
|
||||
if (!Directory.Exists(configDirectory))
|
||||
Directory.CreateDirectory(configDirectory);
|
||||
|
||||
return Path.Combine(configDirectory, GetFileName(configType, options));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public override Stream OpenRead(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
return File.OpenRead(GetPath(configType, options));
|
||||
}
|
||||
|
||||
public override Stream OpenWrite(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
return File.OpenWrite(GetPath(configType, options));
|
||||
}
|
||||
|
||||
public override bool Exists(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
return File.Exists(GetPath(configType, options));
|
||||
}
|
||||
|
||||
public override void Dispose() { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
71
Hyphen/Plugins/Configuration/StorageBase.cs
Normal file
71
Hyphen/Plugins/Configuration/StorageBase.cs
Normal file
@ -0,0 +1,71 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.IO;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public abstract class StorageBase : IStorage
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
protected StorageBase() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helpers
|
||||
|
||||
protected virtual string GetFileName(Type configType, ConfigurationOptionsAttribute options)
|
||||
{
|
||||
if (configType == null)
|
||||
throw new ArgumentNullException("configType");
|
||||
|
||||
string versionSuffix = options != null && options.Version != null ?
|
||||
options.Version.ToString() : String.Empty;
|
||||
|
||||
string profileBoundSuffix = String.Empty;
|
||||
|
||||
if (options != null && options.ProfileBound)
|
||||
{
|
||||
if (!MirandaContext.Initialized)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
profileBoundSuffix = Path.GetFileNameWithoutExtension(MirandaContext.Current.MirandaDatabase.ProfileName);
|
||||
}
|
||||
|
||||
return String.Format("{0}_{1}_{2}", configType.FullName, versionSuffix, profileBoundSuffix).Replace('.', '-') + ".dat";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public abstract Stream OpenRead(Type configType, ConfigurationOptionsAttribute options);
|
||||
|
||||
public abstract Stream OpenWrite(Type configType, ConfigurationOptionsAttribute options);
|
||||
|
||||
public abstract bool Exists(Type configType, ConfigurationOptionsAttribute options);
|
||||
|
||||
public abstract void Dispose();
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
37
Hyphen/Plugins/Configuration/WindowsEncryption.cs
Normal file
37
Hyphen/Plugins/Configuration/WindowsEncryption.cs
Normal file
@ -0,0 +1,37 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Configuration
|
||||
{
|
||||
public class WindowsEncryption : IEncryption
|
||||
{
|
||||
public byte[] Encrypt(byte[] data)
|
||||
{
|
||||
return ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
|
||||
}
|
||||
|
||||
public byte[] Decrypt(byte[] data)
|
||||
{
|
||||
return ProtectedData.Unprotect(data, null, DataProtectionScope.CurrentUser);
|
||||
}
|
||||
}
|
||||
}
|
53
Hyphen/Plugins/DefaultAssemblyProbe.cs
Normal file
53
Hyphen/Plugins/DefaultAssemblyProbe.cs
Normal file
@ -0,0 +1,53 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Hyphen;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
internal sealed class DefaultAssemblyProbe : AssemblyProbe
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
public DefaultAssemblyProbe() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Impls
|
||||
|
||||
public override string[] FindAssemblies()
|
||||
{
|
||||
try
|
||||
{
|
||||
return Directory.Exists(MirandaEnvironment.ManagedPluginsFolderRelativePath) ?
|
||||
Directory.GetFiles(MirandaEnvironment.ManagedPluginsFolderRelativePath, "*.dll") : new string[0];
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.DebuggerWrite(3, Loader.LogCategory, "Unable to find plugins: " + e.Message);
|
||||
return new string[0];
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
95
Hyphen/Plugins/DefaultExceptionHandler.cs
Normal file
95
Hyphen/Plugins/DefaultExceptionHandler.cs
Normal file
@ -0,0 +1,95 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Virtuoso.Miranda.Plugins.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using System.Diagnostics;
|
||||
using Virtuoso.Hyphen.Mini;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
internal sealed class DefaultExceptionHandler : IExceptionHandler, IExceptionReporter
|
||||
{
|
||||
#region Properties
|
||||
|
||||
private MirandaPlugin plugin;
|
||||
public MirandaPlugin Plugin
|
||||
{
|
||||
get { return plugin; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
private DefaultExceptionHandler(MirandaPlugin plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public static DefaultExceptionHandler Create()
|
||||
{
|
||||
return Create(null);
|
||||
}
|
||||
|
||||
public static DefaultExceptionHandler Create(MirandaPlugin plugin)
|
||||
{
|
||||
return new DefaultExceptionHandler(plugin);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public void HandleException(Exception e, PluginDescriptor descriptor)
|
||||
{
|
||||
IExceptionReporter reporter = plugin as IExceptionReporter ?? (plugin == null ? (IExceptionReporter)null : (IExceptionReporter)this);
|
||||
ErrorDialog.PresentModal(e, reporter, String.Format(TextResources.MsgBox_Formatable1_Text_ModuleError, plugin), false);
|
||||
}
|
||||
|
||||
void IExceptionReporter.ReportException(Exception e)
|
||||
{
|
||||
try
|
||||
{
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo();
|
||||
startInfo.UseShellExecute = true;
|
||||
|
||||
if (plugin is StandalonePlugin)
|
||||
{
|
||||
startInfo.FileName = String.Format("mailto:{0}?subject={1}&body={2}", ((StandalonePlugin)plugin).AuthorEmail, String.Format(TextResources.UI_Formatable1_Text_PluginCrashed, plugin), e.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
startInfo.FileName = plugin.HomePage.ToString();
|
||||
}
|
||||
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
catch
|
||||
{
|
||||
MessageBox.Show(TextResources.MsgBox_Text_UnableToReportError, TextResources.MsgBox_Caption_Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
172
Hyphen/Plugins/DefaultPluginManager.cs
Normal file
172
Hyphen/Plugins/DefaultPluginManager.cs
Normal file
@ -0,0 +1,172 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using Virtuoso.Hyphen;
|
||||
using Virtuoso.Miranda.Plugins.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
internal sealed class DefaultPluginManager : PluginManagerBase
|
||||
{
|
||||
#region Fields & Constants
|
||||
|
||||
public new const string LogCategory = Loader.LogCategory + "::PluginManager";
|
||||
public const string InternalServiceNamePrefix = "Virtuoso.Miranda.Plugins.Services.";
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public DefaultPluginManager(FusionContext fusionContext)
|
||||
: base(fusionContext, true, true)
|
||||
{
|
||||
AssemblyName assemblyName = Assembly.GetExecutingAssembly().GetName();
|
||||
Log.DebuggerWrite(0, LogCategory, "Hyphen Plugin Manager v" + assemblyName.Version.ToString() + " is initializing, please wait...");
|
||||
|
||||
FirePrimaryPluginManagerInitializedEvent(this, EventArgs.Empty);
|
||||
Log.DebuggerWrite(0, LogCategory, "Default Plugin Manager initialized.");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fusion
|
||||
|
||||
protected internal override void FindAndLoadPlugins()
|
||||
{
|
||||
if (FusionContext.IsInvalid)
|
||||
throw new InvalidOperationException(TextResources.ExceptionMsg_InvalidFusionContext);
|
||||
|
||||
if (Initialized)
|
||||
throw new InvalidOperationException(TextResources.ExceptionMsg_PluginManagerAlreadyInitialized);
|
||||
|
||||
Assembly currentAssembly = null;
|
||||
Type currentType = null;
|
||||
MirandaPlugin currentPlugin = null;
|
||||
|
||||
try
|
||||
{
|
||||
string[] paths = FusionContext.AssemblyProbe.FindAssemblies();
|
||||
|
||||
if (paths.Length == 0)
|
||||
{
|
||||
Log.DebuggerWrite(1, LogCategory, "No managed plugins found.");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.DebuggerWrite(0, LogCategory, "Found " + paths.Length + " managed plugins...");
|
||||
|
||||
foreach (string path in paths)
|
||||
LoadAssembly(path, ref currentAssembly, ref currentType, ref currentPlugin);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FusionException fEx = null;
|
||||
Log.DebuggerWrite(0, LogCategory, e.ToString());
|
||||
|
||||
if (e is IOException)
|
||||
fEx = new FusionException(TextResources.ExceptionMsg_IOErrorOccurred, currentAssembly, null, null, e);
|
||||
if (e is FusionException)
|
||||
fEx = (FusionException)e;
|
||||
else
|
||||
fEx = new FusionException(e.Message, currentAssembly, currentType, null, e);
|
||||
|
||||
HandleException(fEx, currentPlugin != null ? currentPlugin.Descriptor : (PluginDescriptor)null);
|
||||
}
|
||||
finally
|
||||
{
|
||||
DeclareInitialized();
|
||||
RaiseFusionCompletedEvent(EventArgs.Empty);
|
||||
|
||||
Infrastructure.PluginConfiguration.FlushCaches();
|
||||
Log.DebuggerWrite(0, LogCategory, "Fusion completed.");
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadAssembly(string path, ref Assembly currentAssembly, ref Type currentType, ref MirandaPlugin currentPlugin)
|
||||
{
|
||||
Log.DebuggerWrite(0, LogCategory, "Loading assembly '" + path + "'...");
|
||||
|
||||
try
|
||||
{
|
||||
currentAssembly = Assembly.Load(Path.GetFileNameWithoutExtension(path));
|
||||
|
||||
foreach (Type type in GetExposedPlugins(currentAssembly))
|
||||
LoadPluginFromType(currentType = type);
|
||||
}
|
||||
catch (BadImageFormatException bifE)
|
||||
{
|
||||
throw new FusionException(String.Format(TextResources.ExceptionMsg_Formatable1_UnmanagedImageFound, path), bifE.FusionLog, null, null, null, bifE);
|
||||
}
|
||||
catch (FileNotFoundException fnfE)
|
||||
{
|
||||
throw new FusionException(String.Format(TextResources.ExceptionMsg_Formatable1_AssemblyLoadError, currentAssembly != null ? currentAssembly.ToString() : path), fnfE.FusionLog, currentAssembly, currentType, null, fnfE);
|
||||
}
|
||||
catch (FusionException)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new FusionException(String.Format(TextResources.ExceptionMsg_Formatable1_AssemblyLoadError, path, e.Message), currentAssembly.ToString(), null, null, null, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadPluginFromType(Type type)
|
||||
{
|
||||
if (type == null)
|
||||
throw new ArgumentNullException("type");
|
||||
|
||||
Log.DebuggerWrite(0, LogCategory, "Loading plugin '" + type.Name + "'...");
|
||||
|
||||
try
|
||||
{
|
||||
MirandaPlugin plugin = InstantiatePlugin(type, false);
|
||||
|
||||
if (plugin == null)
|
||||
return;
|
||||
|
||||
PluginDescriptor pluginDescriptor = LoadPlugin(plugin);
|
||||
|
||||
// If not disabled, enable the plugin
|
||||
if (IsEnabled(plugin))
|
||||
SetPluginState(pluginDescriptor, PluginState.Enabled);
|
||||
|
||||
Log.DebuggerWrite(0, LogCategory, "Plugin successfully loaded.");
|
||||
}
|
||||
catch (MissingMethodException mmEx)
|
||||
{
|
||||
throw new FusionException(String.Format(TextResources.ExceptionMsg_Formatable1_NoValidPluginCtorFound, type.FullName), type.Assembly, type, null, mmEx);
|
||||
}
|
||||
catch (TargetInvocationException tiEx)
|
||||
{
|
||||
throw new FusionException(String.Format(TextResources.ExceptionMsg_Formatable2_ErrorWhileInstantiatingPlugin,
|
||||
type.FullName, tiEx.InnerException != null ? tiEx.InnerException.Message : TextResources.UI_Label_Unknown),
|
||||
type.Assembly, type, null, tiEx.InnerException);
|
||||
}
|
||||
catch (MethodAccessException maEx)
|
||||
{
|
||||
throw new FusionException(String.Format(TextResources.ExceptionMsg_Formatable1_UnauthorizedToInstantiatePlugin, type.FullName), type.Assembly, type, null, maEx);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
505
Hyphen/Plugins/Docs/COPYING.LESSER.txt
Normal file
505
Hyphen/Plugins/Docs/COPYING.LESSER.txt
Normal file
@ -0,0 +1,505 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
|
||||
|
12
Hyphen/Plugins/Docs/CodingConventions.txt
Normal file
12
Hyphen/Plugins/Docs/CodingConventions.txt
Normal file
@ -0,0 +1,12 @@
|
||||
THREAD SYNCHRONIZATION ===
|
||||
=============================================================================
|
||||
- If there is a SynchronizationSupervisor::BeginXXXUpdate() method,
|
||||
then this method should be used to lock on a XXX variable type instead
|
||||
of the lock statement
|
||||
- for example, if there is a BeginDescriptorUpdate() method, then
|
||||
you should use this method to lock on a Descriptor typed variable
|
||||
- If there is no associated method in the SynchronizationSupervisor class,
|
||||
then the lock statement should be used instead
|
||||
- Previous two recomendations were introduced to ensure the coding consistency
|
||||
in the thread synchronization on types being frequently passed as arguments
|
||||
|
3
Hyphen/Plugins/Docs/Desktop.ini
Normal file
3
Hyphen/Plugins/Docs/Desktop.ini
Normal file
@ -0,0 +1,3 @@
|
||||
[.ShellClassInfo]
|
||||
IconFile=%SystemRoot%\system32\SHELL32.dll
|
||||
IconIndex=126
|
304
Hyphen/Plugins/Docs/History.txt
Normal file
304
Hyphen/Plugins/Docs/History.txt
Normal file
@ -0,0 +1,304 @@
|
||||
HYPHEN Version History
|
||||
==========================================================================================================
|
||||
|
||||
KNOWN ISSUES
|
||||
==========================================================================================================
|
||||
- ContactInfo.Read/WriteSetting & ContactInfo.WriteSettingAsBlob do not support blob values yet
|
||||
- MirandaDatabase.ContactSettingChange event does not provide data for changed blob values (see prev point)
|
||||
|
||||
v0.8.6.1931
|
||||
==========================================================================================================
|
||||
* MANY BINARY INCOMPATIBLE CHANGES
|
||||
* MirandaContext completely refactored
|
||||
- Service functions => ServiceManager
|
||||
- Events + Event hooks => EventManager
|
||||
+ MirandaContext.ServiceCallInterceptors
|
||||
- Plugin dialogs tracking rewritten to be more efficient and deadlock free :-)
|
||||
- EventHandle class refactored (see EventManager)
|
||||
- DatabaseEventInfo.Data encoding bug fixed
|
||||
- Internal text encoding mishandling fixed
|
||||
+ LoaderOptions.MinimalMirandaVersion added
|
||||
+ Hyphen tray icon moved to Hyphen's menu
|
||||
|
||||
v0.8.5.1502
|
||||
==========================================================================================================
|
||||
- MirandaDatabase.AddEvent encoding bug fixed
|
||||
- MirandaDatabase.GetContacts/FindContact methods rewritten to be more efficient
|
||||
+ ContactInfo.OpenMessageWindow()
|
||||
* MirandaContext.UnhookEvent(MirandaPlugin, string) => MirandaContext.UnhookEvent(string, MirandaPlugin)
|
||||
* IConfigurablePlugin interface undergone incompatible binary change
|
||||
|
||||
v0.8.5.1303
|
||||
==========================================================================================================
|
||||
+ Codename Casablanca - new configuration infrastructure
|
||||
+ ContactList.AddEvent method introduced
|
||||
+ AckRouter class for protocol ack processing introduced
|
||||
+ Protocol.StatusChanged event introduced
|
||||
+ Stability improvements
|
||||
+ Exception handling improvements
|
||||
- LangPack string encoding fixed
|
||||
- Other bug fiexes
|
||||
- Internal refactoring
|
||||
* MirandaContext.NetworkProtocols => MirandaContext.Protocols
|
||||
* NetworkProtocolDictionary => ProtocolDictionary
|
||||
* A few events refactored
|
||||
* A few classes renamed
|
||||
|
||||
v0.8.5.1101
|
||||
==========================================================================================================
|
||||
- 0.7+ Miranda Plugin API conformance
|
||||
|
||||
v0.8.5.1
|
||||
==========================================================================================================
|
||||
- Minor stability fix
|
||||
|
||||
v0.8.5.0
|
||||
==========================================================================================================
|
||||
* Virtuoso.Hyphen.Sandbox renamed to Virtuoso.Miranda.Plugins.Helpers.Sandbox
|
||||
* ProtocolPlugin.Descriptor renamed to ProtocolPlugin.ProtocolDescriptor
|
||||
+ MenuItemDeclarationAttribute can be now applied to methods as well without the need to specify
|
||||
the service name; the service will be created for the method automagically
|
||||
+ Virtuoso.Miranda.Plugins.Helpers.MessageQueue class introduced
|
||||
* GenericEventArgs renamed to MirandaEventArgs
|
||||
* Many *EventArgs classes renamed
|
||||
- FIXED BUG: BeforeEventAdded event now does provide valid event data
|
||||
|
||||
v0.8.4.1
|
||||
==========================================================================================================
|
||||
* Many interfaces refactored,
|
||||
- Critical interop bug fixed (thanks to MikZ)
|
||||
|
||||
v0.8.4.0
|
||||
==========================================================================================================
|
||||
- MPM bug fixes
|
||||
* Configuration class renamed to PluginConfiguration,
|
||||
|
||||
v0.8.4.0
|
||||
==========================================================================================================
|
||||
* MirandaDatabase class + several other APIs overhauled,
|
||||
+ Managed protocol support (see the MPM project on my site)
|
||||
|
||||
v0.8.3.2
|
||||
==========================================================================================================
|
||||
+ Configuration dialog revisited
|
||||
|
||||
v0.8.3.1
|
||||
==========================================================================================================
|
||||
+ Main menu popup menus support for managed plugins
|
||||
+ Updated version of CueBannerTextBox included
|
||||
+ InformationDialog introduced
|
||||
+ New 'Loading plugins' dialog introduced
|
||||
- FIXED BUG: Plugin settings not saved with LazyUnload feature enabled
|
||||
|
||||
v0.8.3.0
|
||||
==========================================================================================================
|
||||
- Incompatible binary changes, plugins must be recompiled
|
||||
+ Plugin configuration framework introduced
|
||||
+ Vista style introduced
|
||||
+ Lazy unload introduced
|
||||
+ CueBannerTextBox control included (nice work of Chili Software)
|
||||
+ GradientPanel control included
|
||||
+ Hyphen configuration revisited
|
||||
- Many internal changes
|
||||
|
||||
v0.8.2.60
|
||||
==========================================================================================================
|
||||
- Hyphen is now strong named because some plugins may need to be strong named so Hyphen must be too
|
||||
- Plugins will automatically load the newest version of Hyphen; this is done using the BindingRedirect
|
||||
to avoid multiple versions of Hyphen assemblies to be deployed
|
||||
* Incompatible binary changes, plugins must be recompiled
|
||||
|
||||
v0.8.2.25
|
||||
==========================================================================================================
|
||||
- I haven't accounted .NET Remoting object lifetime so after 5 minutes, all the remote objects
|
||||
are disconnected, which is very bad => fixed by overriding the MarshalByRefObject::InitalizeLifetimeService
|
||||
method
|
||||
- If you're designing an object accessible from another AppDomain (for example if you're using
|
||||
the Sandbox class), derive it from the Virtuoso.Miranda.Plugins.Infrastructure.RemoteObject class
|
||||
to make it connected as long as it's not collected by GC
|
||||
|
||||
v0.8.2.20
|
||||
==========================================================================================================
|
||||
- ConfigurableMirandaPlugin class introduced; provides plugins with a seamless configuration store
|
||||
|
||||
v0.8.2.0
|
||||
==========================================================================================================
|
||||
- Icons refreshed
|
||||
- Various internal changes
|
||||
- Sandbox class introduced; allows you to easily sandbox your own plugins (in plugins :-)) or scripts
|
||||
|
||||
v0.8.1.80
|
||||
==========================================================================================================
|
||||
- Langpack localization support via the LanguagePack, LanguagePackStringResolver & LocalizableForm classes
|
||||
- Hyphen's main menu items now take advantage of Langpack (I'm not going to localize dialogs using Langpack,
|
||||
(at least not now), I prefer the .NET way, i.e. satelite assemblies)
|
||||
|
||||
v0.8.1.60
|
||||
==========================================================================================================
|
||||
- Updater plugin support (Virtuoso.Miranda.Plugins.ThirdParty.Updater.UpdaterPlugin class)
|
||||
- LoaderOptionsAttribute now supports required Hyphen version specification; Hyphen refuses to load a plugin
|
||||
that requires a newer version of Hyphen
|
||||
|
||||
v0.8.1.40
|
||||
==========================================================================================================
|
||||
- Internal stability improvements
|
||||
|
||||
v0.8.1.35
|
||||
==========================================================================================================
|
||||
- Virtuoso.Miranda.Plugins.Helpers.IniStructure class added; thanks kratchkov@inbox.lv for his
|
||||
CodeProject submission!
|
||||
|
||||
v0.8.1.32
|
||||
==========================================================================================================
|
||||
- ContactInfo.Value is now translated to ANSI string by default not to Miranda's build default encoding.
|
||||
|
||||
v0.8.1.30
|
||||
==========================================================================================================
|
||||
- Internal sandboxing API changes
|
||||
|
||||
v0.8.1.10
|
||||
==========================================================================================================
|
||||
- Safe callbacks introduced; no managed plugin should now crash Miranda with an unhandled exception;
|
||||
an exception will be caught and processed by a callback stub
|
||||
|
||||
v0.8.1.4
|
||||
==========================================================================================================
|
||||
- Internal refinements
|
||||
|
||||
v0.8.1.3
|
||||
==========================================================================================================
|
||||
- Internal Loader changes
|
||||
- Internal Hyphen.Mini changes
|
||||
|
||||
v0.8.0.0
|
||||
==========================================================================================================
|
||||
- Midas is now Hyphen, the core has been re-engineered...
|
||||
- Hyphen now supports delayed plugin loading and unloading; plugins are not loaded on startup but you can load
|
||||
them using the Miranda Menu - 'Load/Unload Microsoft.net plugins' item; this saves memory and startup time
|
||||
- EventHandle class providing you with an option to create and manage your own events
|
||||
- MirandaContext now offers CreateServiceFunction and HookEvent methods
|
||||
- You can override the builtin configuration and use your own Plugin manager instead of the builtin one
|
||||
- You can override the builtin configuration and use your own Assembly probe to search for plugins
|
||||
in custom directories
|
||||
- You can manage plugins via a Hyphen manager icon in the tray
|
||||
- Plugin assemblies are now shadow copied so you can update them on the fly and Hyphen will reload them
|
||||
without the need of restarting Miranda
|
||||
- Noticable performance improvements introduced; unsafe C# pointers employed to get rid of many copying
|
||||
operations
|
||||
- Bunch of new functionality added, see for yourself; I am unable to track that amount of changes ;)
|
||||
|
||||
v0.7.2.0
|
||||
==========================================================================================================
|
||||
- Midas.dll and Virtuoso.Miranda.Plugins were merged into the Midas.dll assembly
|
||||
|
||||
v0.7.1.10
|
||||
==========================================================================================================
|
||||
- Internal tuning
|
||||
- InteropBufferPool now offers an override allowing you to set the buffer capacity
|
||||
- note that a new buffer will be allocated if you explicitly set a capacity higher than the default one,
|
||||
which is 260 bytes
|
||||
|
||||
v0.7.1.5
|
||||
==========================================================================================================
|
||||
- InteropBuffer class revamped to be more robust
|
||||
- InteropBufferPool class introduced; it manages a few shared buffers and when an additional
|
||||
buffer is requested, it allocates a one
|
||||
- to obtain an instance of a buffer, you have to call the InteropBufferPool::AcquireBuffer() method
|
||||
- you will be provided with an instance of capacity 260 bytes
|
||||
- to release a buffer and free its resources, call the InteropBufferPool::ReleaseBuffer(InteropBuffer)
|
||||
method; a buffer to be released must be unlocked!
|
||||
- MirandaContext::CreateHookableEvent method provided; returns an instance of the EventHandle class
|
||||
allowing you to manipulate with the event (fire it and set a default hook)
|
||||
|
||||
v0.7.1.1
|
||||
==========================================================================================================
|
||||
- Minor internal changes
|
||||
- IcqXStatusPlugin source code included (note it requires Unicode Miranda and the latest ICQOscarJ plugin)
|
||||
|
||||
v0.7.1.0
|
||||
==========================================================================================================
|
||||
- MirandaContext::PluginSettingsManager property now returns null; please do not use this class, it will be
|
||||
refactored in the future
|
||||
- MirandaDatabase::GetProfileName() & ::GetProfilePath() methods added
|
||||
- Translate::ToString() method now supports length and encoding options; you can now specify an encoding
|
||||
in which is a string pointed by a handle encoded in or select StringEncoding::MirandaDefault to assume
|
||||
ANSI under the non-unicode Miranda core and UNICODE under the unicode-aware Miranda core;
|
||||
using this method will simplify possible unicode transition in the future
|
||||
- MirandaEnvironment static class introduced; you can use it to obtain the information about Miranda
|
||||
(currently there is a MirandaStringEncoding property only)
|
||||
- InteropBuffer class introduced; you can pass it to a Miranda service expecting a char/byte/whatever
|
||||
buffer pointer; just don't forget to Lock() and Unlock() it before and after the use, respectively
|
||||
- to obtain a buffer pointer, you the IntPtr property;
|
||||
- WARNING: do not call the Free()/Dispose() methods (!!!) these will invalidate the buffer and prevent
|
||||
its next use; these methods are supposed to be called by internal callers only!
|
||||
- to purge the content of the buffer (if security is your concern), use the Zero() method
|
||||
- note that the Zero() operation is quite a slow one, so carefully consider its use
|
||||
- to obtain the capacity of the buffer, use either the InteropBuffer::Capacity or ::CapacityAsXX fields
|
||||
|
||||
v0.7.0.5
|
||||
==========================================================================================================
|
||||
- MirandaDatabase now supports writing and reading contact settings; reading is done via
|
||||
a "DB/Contact/GetSettingStatic" service call to improve performance
|
||||
|
||||
v0.7.0.1
|
||||
==========================================================================================================
|
||||
- Midas v1.0.0.1 included; minor internal API changes
|
||||
|
||||
v0.7.0.0
|
||||
==========================================================================================================
|
||||
- DotNetConnector is now Midas
|
||||
- Miranda-2-.net proxy is now pure IL with 3 unmanaged exports only representing the Miranda API entry
|
||||
points (previously there was an C++/CLI IJW assembly dependent on the MS VCRT v8.0 dlls; this is now gone)
|
||||
- No public API changes
|
||||
|
||||
v0.6.8.0
|
||||
==========================================================================================================
|
||||
- PluginSettings class for storing plugin specific settings
|
||||
- MirandaDatabase class extended
|
||||
- IndividualMirandaPlugin class added; you can derive your plugins from it and use a small
|
||||
IL stub to create plugins that are not managed by the PluginManager and thus can override Miranda system modules
|
||||
and are even transient
|
||||
- More documentation will code...
|
||||
|
||||
- Project <no-codename-yet> has been started; it's goal is to replace the C++/CLI loader stub with a pure
|
||||
IL stub consisting from 3 unmanaged exports only...
|
||||
|
||||
v0.6.7.0
|
||||
==========================================================================================================
|
||||
- MenuItemDeclarationAttribute API refactored
|
||||
- StandardServices & StandardEvent class removed
|
||||
- ContactList now supports adding and modifying menu items
|
||||
- Some collection changes
|
||||
- ContactList.ProtocolStatusChange event added
|
||||
|
||||
v0.6.6.0
|
||||
==========================================================================================================
|
||||
- All previous known issues resolved (probably caused by some hook-twice operation)
|
||||
- PluginContext is now MirandaContext
|
||||
- PluginContext.MirandaPInvokeBridge is not public now, it was visible due a bug
|
||||
- Miranda lazy event binding introduced (binds to Miranda's internal event only when somebody subscribes
|
||||
a one)
|
||||
- PrivatePluginAttribute introduced (makes a plugin manually loadable only, fusion will ignore it)
|
||||
|
||||
v0.6.5.0
|
||||
==========================================================================================================
|
||||
- Some optimalizations
|
||||
- KNOWN ISSUES
|
||||
- MirandaDatabase::EventAdded event fired twice. I think Miranda does this, but don't know why...
|
||||
|
||||
v0.6.3.0
|
||||
==========================================================================================================
|
||||
- Bunch of new stuff added, see for yourself...
|
||||
|
||||
v0.5.8.0
|
||||
==========================================================================================================
|
||||
- Contact info query support
|
||||
- UnmanagedStructHandle´1 struct made public for use
|
||||
(can be used for easy unmanaged memory allocation and deallocation)
|
||||
- Performance and stability tuning
|
||||
- MirandaPlugin base class expansion; some new virtual methods added
|
||||
- Threaded fusion
|
||||
|
||||
v0.5.0.0
|
||||
==========================================================================================================
|
||||
- initial alpha release
|
71
Hyphen/Plugins/Docs/README.txt
Normal file
71
Hyphen/Plugins/Docs/README.txt
Normal file
@ -0,0 +1,71 @@
|
||||
HYPHEN SRC README
|
||||
===================================================
|
||||
© 2006 - 2009, virtuoso
|
||||
deml.tomas@seznam.cz
|
||||
|
||||
v0.8.2009.0201
|
||||
|
||||
PREREQUISITES
|
||||
===================================================
|
||||
- Microsoft Visual Studio 2008 (no Express editions)
|
||||
Full MS VS 2k8 is required because the build
|
||||
solution features multilanguage projects.
|
||||
(NMAKE, C#)
|
||||
- Microsoft .NET 2.0 SDK
|
||||
|
||||
SOLUTION
|
||||
===================================================
|
||||
- In \Virtuoso.Hyphen\Virtuoso.Hyphen.sln
|
||||
- HYPHEN project should be set as START PROJECT
|
||||
|
||||
- PLUGINS project
|
||||
This is a C# project with Miranda .NET API.
|
||||
It is build with VS and then disassembled using IlDasm.exe
|
||||
into the Plugins.IL file.
|
||||
- HYPHEN project
|
||||
This is an NMAKE project containing an MSIL stub
|
||||
which acts as a bootstrapper for MS.NET.
|
||||
It merges the Plugins.il with the LoaderStub.il
|
||||
into a single Hyphen.dll assembly using IlAsm.exe.
|
||||
- HYPHEN.MINI project
|
||||
This is an NMAKE project containg custom MSIL stub
|
||||
for database and protocol plugins which cannot
|
||||
be loaded with Hyphen directly.
|
||||
|
||||
HOW TO BUILD
|
||||
===================================================
|
||||
- 1) Include
|
||||
"%WINDIR%\Microsoft.NET\Framework\v2.0.50727" and
|
||||
"%PROGRAMFILES%\Microsoft Visual Studio 8\SDK\v2.0\Bin"
|
||||
in the PATH variable.
|
||||
These paths contain IlAsm.exe and IlDasm.exe respectively
|
||||
which are needed during the build process.
|
||||
|
||||
- 2) Open the solution.
|
||||
|
||||
- 3) Switch to the release configuration.
|
||||
|
||||
- 4) Open the Hyphen project properties and change
|
||||
the Output directory to point to
|
||||
%YOUR_MIRANDA_FOLDER_GOES_HERE\Plugins directory.
|
||||
|
||||
- 5) Press F6 to build the solution. You should see
|
||||
IlAsm output in the output window and IlDasm window
|
||||
with progress bar.
|
||||
|
||||
- 6) Once it's done, you should find Hyphen.dll in your
|
||||
Miranda\Plugins directory.
|
||||
|
||||
PROBLEMS
|
||||
===================================================
|
||||
- If you are getting "Failed to define document writer"
|
||||
errors during the build, make sure the
|
||||
Hyphen\Bin\(CONFIG_NAME_HERE) folder exists.
|
||||
CONFIG_NAME_HERE stands for Debug or Release.
|
||||
- Feel free to !MAIL! me in case of problems.
|
||||
|
||||
|
||||
SOURCES
|
||||
===================================================
|
||||
Source codes are mostly undocumented (unfortunately).
|
||||
|
212
Hyphen/Plugins/Docs/SDK Docs/index.htm
Normal file
212
Hyphen/Plugins/Docs/SDK Docs/index.htm
Normal file
@ -0,0 +1,212 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Language" content="cs">
|
||||
<title>Midas SDK Docs</title>
|
||||
<style>
|
||||
<!--
|
||||
body { font-family: Tahoma; font-size: 10pt }
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>Midas SDK Documentation v1.0</h1>
|
||||
<h4>Miranda .net Association Plugin SDK, © 2006 Virtuoso</h4>
|
||||
<h3>Contents</h3>
|
||||
<ul>
|
||||
<li>Overview</li>
|
||||
<li>Architecture</li>
|
||||
<li>Namespaces<ul>
|
||||
<li>Key namespaces</li>
|
||||
<li>Native interop namespaces</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Classes<ul>
|
||||
<li>Key classes<ul>
|
||||
<li>Plugin definition/construction classes</li>
|
||||
<li>Miranda API wrapper classes</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Native interop classes</li>
|
||||
<li>Helper classes</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>A Hello World plugin Walkthrough</li>
|
||||
</ul>
|
||||
<p> </p>
|
||||
<h3>Overview</h3>
|
||||
<p>Midas (Miranda .net Assocication Plugin) is a plugin allowing Microsoft.net
|
||||
platform developers to access Miranda APIs thus allowing them to write Miranda
|
||||
targeted managed plugins.</p>
|
||||
<p>I created Midas because I'm an avid C# programmer and I wanted to extend
|
||||
Miranda in an easy, reliable and fast way - with Microsoft.net managed plugins.</p>
|
||||
<p>You can write Miranda plugins in any Ecma CLI compliant language, for example
|
||||
C#, J#, Delphi, C++/CLI or Visual Basic.net. Please note that you may not be
|
||||
able to take advantage of all Midas features from languages that do not support
|
||||
some CLS non-compliant constructs. You may have problems using Microsoft Visual
|
||||
Basic.net because it, for example, does not support unsigned data types. Miranda
|
||||
and Midas use these types (System.UIntPtr) extensively.</p>
|
||||
<p>In a nutshell, Midas represents a native-to-managed wrapper presenting core
|
||||
Miranda APIs in the OO fashion to .net. It wraps Miranda's procedural APIs to a
|
||||
neat and logical object oriented interface.</p>
|
||||
<p>Using Midas, you can write Miranda plugins that you or anybody else find
|
||||
useful. With .net plugins, you can accomplish complicated and complex tasks in
|
||||
the much faster way.</p>
|
||||
<p> </p>
|
||||
<h3>Architecture</h3>
|
||||
<p>Midas consinsts of two crucial assemblies:</p>
|
||||
<ul>
|
||||
<li><b>Midas.dll</b><ul>
|
||||
<li>this assembly was written in IL (Intermediate Language) and contains 3
|
||||
unmanaged exports exposing required unmanaged plugin API exports to Miranda</li>
|
||||
<li>previously, there was an C++/CLI assembly but it's maintentace was not
|
||||
as easy as it ought to be (and me, primarily .net programmer, concluded a
|
||||
pure IL assembly as a more transparent way to accomplish the connection with
|
||||
Miranda than the opaque IJW magic C++/CLI compiler uses)</li>
|
||||
<li>this assembly instantiates the Virtuoso.Midas.Loader class that provides
|
||||
Miranda with a PLUGININFO information and initiates the .net plugins fusion</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Virtuoso.Miranda.Plugins.dll</b><ul>
|
||||
<li>this assembly was written in safe C# and exposes unmanaged Miranda APIs
|
||||
to the .net world</li>
|
||||
<li>in this assembly, there is the Virtuoso.Miranda.Plugins.PluginManager
|
||||
type (not publicly exposed) that finds, loads and initiates all the managed
|
||||
plugins in the <mirandaFolder>\plugins\managed folder</li>
|
||||
<li>this assembly is the one you will want to reference on your plugin's
|
||||
compile time</li>
|
||||
<li>this assembly also contains the most important type for us, developers,
|
||||
the Virtuoso.Mirandas.Plugins.MirandaPlugin class representing the base
|
||||
class for all of your plugins</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p> </p>
|
||||
<h3>Namespaces</h3>
|
||||
<p>There are many publicly visible namespaces containing key classes and many
|
||||
native interop helper classes making easy to access not yet wrapped parts of the
|
||||
Miranda API.</p>
|
||||
<h5>Key namespaces:</h5>
|
||||
<ul>
|
||||
<li><b>Virtuoso.Miranda.Plugins</b><ul>
|
||||
<li>contains funtionality concerning the plugin fusion, maintentace,
|
||||
definition and construction</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Virtuoso.Miranda.Plugins.Infrastructure</b><ul>
|
||||
<li>contains all the functionality you may need to develop your plugins;
|
||||
provides Database, Contact List, Contact Information, Network Protocol and
|
||||
many other Miranda API wrappers</li>
|
||||
<li>also contains some helper classes you may find useful
|
||||
(unmanaged-to-managed data translation services and localization helpers)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Virtoso.Miranda.Plugins.Infrastructure.IndividualMirandaConnection</b><ul>
|
||||
<li>contains additional helper classes for plugins not managed by the
|
||||
Microsoft.net plugins supervisor</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Virtuoso.Miranda.Plugins.ObjectCollections</b><ul>
|
||||
<li>contains specialized object collections</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h5>Native interop namespaces:</h5>
|
||||
<ul>
|
||||
<li><b>Virtuoso.Miranda.Plugins.Native</b><ul>
|
||||
<li>contains types you may use when you need to directly interface with
|
||||
Miranda APIs; provides you with unmanaged memory, string and struct handles</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p> </p>
|
||||
<h3>Classes</h3>
|
||||
<p>There are several classes representing the Miranda API wrappers for Database,
|
||||
Contact List and many other aspects of Miranda API model.</p>
|
||||
<h5>Key classes:</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<h5>Plugin definition/construction classes</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<h5>Virtuoso.Miranda.Plugins namespace</h5>
|
||||
<ul>
|
||||
<li><b>abstract MirandaPlugin</b><ul>
|
||||
<li>represents a base class for all .net plugins</li>
|
||||
<li>to define a plugin, derive your class from this one, implement
|
||||
required abstract members and you are ready to go</li>
|
||||
<li><b>members</b><ul>
|
||||
<li><b>methods</b><ul>
|
||||
<li><b>protected</b><ul>
|
||||
<li><b>void .ctor()</b><ul>
|
||||
<li>Initializes an instance of the MirandaPlugin class</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>virtual void AfterPluginInitialization() </b>
|
||||
<ul>
|
||||
<li>executed after the first plugin initialization</li>
|
||||
<li>executed only once a Midas lifetime</li>
|
||||
<li>use this method to initialize your plugin after Miranda
|
||||
startup, for example for additional event hook-ups</li>
|
||||
<li>DO NOT EXECUTE ANY TIME CONSUMING CODE IN THIS METHOD
|
||||
NEITHER SHOW ANY WINDOWS FORMS</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>virtual void AfterMenuItemsPopulation()</b><ul>
|
||||
<li>executed after the plugin menu items detection</li>
|
||||
<li>executed only once a Midas lifetime</li>
|
||||
<li>use this method to change properties or manipulate with your
|
||||
plugin menu items</li>
|
||||
<li>DO NOT EXECUTE ANY TIME CONSUMING CODE IN THIS METHOD
|
||||
NEITHER SHOW ANY WINDOWS FORMS</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>virtual void AfterPluginEnable()</b><ul>
|
||||
<li>executed right after a plugin is enabled by the
|
||||
user/supervisor</li>
|
||||
<li>executed every time a plugin is enabled</li>
|
||||
<li>DO NOT EXECUTE ANY TIME CONSUMING CODE IN THIS METHOD
|
||||
NEITHER SHOW ANY WINDOWS FORMS</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>virtual void BeforePluginDisable()</b><ul>
|
||||
<li>executed right before a plugin is disabled by the
|
||||
user/supervisor</li>
|
||||
<li>use this method to unhook events or destroy service
|
||||
functions you created manually; events and services declared
|
||||
through attributes will be unhooked/destroyed automatically by
|
||||
the plugin supervisor</li>
|
||||
<li>DO NOT EXECUTE ANY TIME CONSUMING CODE IN THIS METHOD
|
||||
NEITHER SHOW ANY WINDOWS FORMS</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>virtual void BeforeMirandaShutdown</b><ul>
|
||||
<li>executed right before Miranda or the plugin supervisor is
|
||||
shutdown</li>
|
||||
<li>use this method to perform possible memory cleanup</li>
|
||||
<li>DO NOT ALLOCATE NEW MEMORY NEITHER INTERFACE WITH MIRANDA
|
||||
THROUGH WRAPPERS OR NATIVE INTEROP FROM THIS METHOD; MIRANDA IS
|
||||
ABOUT TO SHUTDOWN AND MANY OF ITS APIS ARE NO LONGER AVAILABLE;
|
||||
USE THE BEFOREPLUGINDISABLE() METHOD INSTEAD</li>
|
||||
<li></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
57
Hyphen/Plugins/ExposingPluginAttribute.cs
Normal file
57
Hyphen/Plugins/ExposingPluginAttribute.cs
Normal file
@ -0,0 +1,57 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
public sealed class ExposingPluginAttribute : Attribute
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private Type pluginType;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public ExposingPluginAttribute(Type pluginType)
|
||||
{
|
||||
if (pluginType == null)
|
||||
throw new ArgumentNullException("pluginType");
|
||||
|
||||
this.pluginType = pluginType;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public Type PluginType
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.pluginType;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
120
Hyphen/Plugins/Forms/ConfigurationDialog.Designer.cs
generated
Normal file
120
Hyphen/Plugins/Forms/ConfigurationDialog.Designer.cs
generated
Normal file
@ -0,0 +1,120 @@
|
||||
using Virtuoso.Miranda.Plugins.Forms.Controls;
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
partial class ConfigurationDialog
|
||||
{
|
||||
/// <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 Windows Form 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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationDialog));
|
||||
this.OkBTN = new System.Windows.Forms.Button();
|
||||
this.CancelBTN = new System.Windows.Forms.Button();
|
||||
this.MainPanel = new Virtuoso.Miranda.Plugins.Forms.Controls.ConfigurationPanel();
|
||||
this.HideExpertOptionsCHBOX = new System.Windows.Forms.CheckBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// OkBTN
|
||||
//
|
||||
this.OkBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.OkBTN.Location = new System.Drawing.Point(556, 524);
|
||||
this.OkBTN.Name = "OkBTN";
|
||||
this.OkBTN.Size = new System.Drawing.Size(75, 23);
|
||||
this.OkBTN.TabIndex = 1;
|
||||
this.OkBTN.Text = "Save";
|
||||
this.OkBTN.UseVisualStyleBackColor = true;
|
||||
this.OkBTN.Click += new System.EventHandler(this.OkBTN_Click);
|
||||
//
|
||||
// CancelBTN
|
||||
//
|
||||
this.CancelBTN.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.CancelBTN.Location = new System.Drawing.Point(637, 524);
|
||||
this.CancelBTN.Name = "CancelBTN";
|
||||
this.CancelBTN.Size = new System.Drawing.Size(75, 23);
|
||||
this.CancelBTN.TabIndex = 1;
|
||||
this.CancelBTN.Text = "Cancel";
|
||||
this.CancelBTN.UseVisualStyleBackColor = true;
|
||||
this.CancelBTN.Click += new System.EventHandler(this.CancelBTN_Click);
|
||||
//
|
||||
// MainPanel
|
||||
//
|
||||
this.MainPanel.Font = new System.Drawing.Font("Tahoma", 8F);
|
||||
this.MainPanel.HideExpertOptions = false;
|
||||
this.MainPanel.Location = new System.Drawing.Point(14, 13);
|
||||
this.MainPanel.MinimumSize = new System.Drawing.Size(700, 500);
|
||||
this.MainPanel.Name = "MainPanel";
|
||||
this.MainPanel.Size = new System.Drawing.Size(700, 500);
|
||||
this.MainPanel.TabIndex = 0;
|
||||
//
|
||||
// HideExpertOptionsCHBOX
|
||||
//
|
||||
this.HideExpertOptionsCHBOX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.HideExpertOptionsCHBOX.AutoSize = true;
|
||||
this.HideExpertOptionsCHBOX.Checked = global::Virtuoso.Miranda.Plugins.Properties.Settings.Default.ConfigurationDialog_HideExpertOptions_Checked;
|
||||
this.HideExpertOptionsCHBOX.DataBindings.Add(new System.Windows.Forms.Binding("Checked", global::Virtuoso.Miranda.Plugins.Properties.Settings.Default, "ConfigurationDialog_HideExpertOptions_Checked", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.HideExpertOptionsCHBOX.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.HideExpertOptionsCHBOX.Location = new System.Drawing.Point(12, 530);
|
||||
this.HideExpertOptionsCHBOX.Name = "HideExpertOptionsCHBOX";
|
||||
this.HideExpertOptionsCHBOX.Size = new System.Drawing.Size(137, 17);
|
||||
this.HideExpertOptionsCHBOX.TabIndex = 2;
|
||||
this.HideExpertOptionsCHBOX.Text = "Hide expert options";
|
||||
this.HideExpertOptionsCHBOX.UseVisualStyleBackColor = true;
|
||||
this.HideExpertOptionsCHBOX.CheckedChanged += new System.EventHandler(this.HideExpertOptionsCHBOX_CheckedChanged);
|
||||
//
|
||||
// ConfigurationDialog
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(724, 559);
|
||||
this.Controls.Add(this.HideExpertOptionsCHBOX);
|
||||
this.Controls.Add(this.CancelBTN);
|
||||
this.Controls.Add(this.OkBTN);
|
||||
this.Controls.Add(this.MainPanel);
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "ConfigurationDialog";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Configuration";
|
||||
this.Shown += new System.EventHandler(this.ConfigurationDialog_Shown);
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigurationDialog_FormClosing);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button OkBTN;
|
||||
private System.Windows.Forms.Button CancelBTN;
|
||||
private ConfigurationPanel MainPanel;
|
||||
private System.Windows.Forms.CheckBox HideExpertOptionsCHBOX;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
110
Hyphen/Plugins/Forms/ConfigurationDialog.cs
Normal file
110
Hyphen/Plugins/Forms/ConfigurationDialog.cs
Normal file
@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Forms.Controls;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Miranda.Plugins.Properties;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
public sealed partial class ConfigurationDialog : SingletonDialog
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private bool Ok;
|
||||
private IConfigurablePlugin ConfigurableEntity;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
private ConfigurationDialog(IConfigurablePlugin configurableEntity) : base(configurableEntity.Name)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.MainPanel.HideExpertOptions = HideExpertOptionsCHBOX.Checked;
|
||||
this.ConfigurableEntity = configurableEntity;
|
||||
this.Text = TextResources.UI_Caption_Configure_ + configurableEntity.Name;
|
||||
|
||||
configurableEntity.PopulateConfigurationPanel(MainPanel);
|
||||
}
|
||||
|
||||
public static void Present(IConfigurablePlugin configurableEntity, bool modal)
|
||||
{
|
||||
Present(configurableEntity, null, modal);
|
||||
}
|
||||
|
||||
public static void Present(IConfigurablePlugin configurableEntity, string path, bool modal)
|
||||
{
|
||||
if (configurableEntity == null)
|
||||
throw new ArgumentNullException("configurableEntity");
|
||||
|
||||
ConfigurationDialog singleton = ConfigurationDialog.GetSingleton<ConfigurationDialog>(false, configurableEntity.Name) ??
|
||||
new ConfigurationDialog(configurableEntity);
|
||||
|
||||
if (singleton.MainPanel.Categories.Count == 0)
|
||||
MessageBox.Show(TextResources.MsgBox_Text_NoOptionsAvailable, TextResources.MsgBox_Caption_NoOptionsAvailable, MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
else
|
||||
{
|
||||
singleton.MainPanel.SetPath(path);
|
||||
singleton.ShowSingleton(modal);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public static string CreatePath(string categoryName, string itemName)
|
||||
{
|
||||
return ConfigurationPanel.CreatePath(categoryName, itemName);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI Handlers
|
||||
|
||||
private void ConfigurationDialog_Shown(object sender, EventArgs e)
|
||||
{
|
||||
MainPanel.Initialize();
|
||||
}
|
||||
|
||||
private void OkBTN_Click(object sender, EventArgs e)
|
||||
{
|
||||
Ok = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void CancelBTN_Click(object sender, EventArgs e)
|
||||
{
|
||||
Ok = false;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void ConfigurationDialog_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (Ok)
|
||||
{
|
||||
ConfigurableEntity.Configuration.Save();
|
||||
Settings.Default.Save();
|
||||
}
|
||||
else
|
||||
{
|
||||
ConfigurableEntity.ReloadConfiguration();
|
||||
Settings.Default.Reload();
|
||||
}
|
||||
}
|
||||
|
||||
private void HideExpertOptionsCHBOX_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
MainPanel.HideExpertOptions = HideExpertOptionsCHBOX.Checked;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
164
Hyphen/Plugins/Forms/ConfigurationDialog.resx
Normal file
164
Hyphen/Plugins/Forms/ConfigurationDialog.resx
Normal file
@ -0,0 +1,164 @@
|
||||
<?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="OkBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="CancelBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="MainPanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="HideExpertOptionsCHBOX.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB
|
||||
AAAAAAAAnoFlAKCEZwChhmkAo4lrAKOIbQCkiW0ApoxuAKiMbwCmjHEAqI5xAKiOdACrkXYArZJ1AK+V
|
||||
dwCsk3kArpR5ALGXewCwl34Asph6ALGZfgC0m38AtZ1/ALOagAC1nYEAtZ2FALeghwC5oYYAvKKGALmh
|
||||
iAC7pIkAu6ePAL2mjgC9qI8Av6qTAMCqkQDCrJMAwKuUAMKulQDErZYAxrKbAMi2oADKuKIAyrikAMy6
|
||||
pgDOvakA0L+rANDArQDQwbAA1sm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAB8PAAAAAAAAAAAAAAAPLwAIAwAsAQAAAAAAAAAACgoKCAYDAwEAAAAAAAAAIhQd
|
||||
HxcSDwkGFwAAAAAXFBgiHxIUFA8PCgkCBgAAABIiIhQAAAAADw8JBgAAAAAUKiAAAAAAAAAPDwYAAB0U
|
||||
FiocAAAAAAAADxQKBgAsHxYuHAAAAAAAAA8XDxQAAAAYLyIAAAAAADEXHw8AAAAvGCkqIC8AACwXIx0P
|
||||
LAAAHRgiLiwiGB0fIicWDg8AAAAAACMpLy8qKigdAAAAAAAAAAAYGBgYGBYWFgAAAAAAAAAAIgAAHBgA
|
||||
ABgAAAAAAAAAAAAAACkcAAAAAAAAAP5/AADyTwAA8A8AAOAHAACAAQAAw8MAAMfjAAAH4QAAB+EAAMfD
|
||||
AACBgQAAgAEAAPAPAADwDwAA9m8AAP5/AAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
54
Hyphen/Plugins/Forms/Controls/CommandButton.cs
Normal file
54
Hyphen/Plugins/Forms/Controls/CommandButton.cs
Normal file
@ -0,0 +1,54 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
public class CommandButton : Button
|
||||
{
|
||||
public CommandButton()
|
||||
{
|
||||
FlatStyle = FlatStyle.Standard;
|
||||
ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
TextAlign = ContentAlignment.MiddleLeft;
|
||||
TextImageRelation = TextImageRelation.ImageBeforeText;
|
||||
FlatAppearance.BorderSize = 3;
|
||||
FlatAppearance.BorderColor = SystemColors.GradientActiveCaption;
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// CommandButton
|
||||
//
|
||||
this.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control;
|
||||
this.FlatAppearance.BorderSize = 2;
|
||||
this.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.ButtonShadow;
|
||||
this.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.ButtonHighlight;
|
||||
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
123
Hyphen/Plugins/Forms/Controls/CommandButton.resx
Normal file
123
Hyphen/Plugins/Forms/Controls/CommandButton.resx
Normal file
@ -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="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
</root>
|
197
Hyphen/Plugins/Forms/Controls/ContactListView.cs
Normal file
197
Hyphen/Plugins/Forms/Controls/ContactListView.cs
Normal file
@ -0,0 +1,197 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Collections.ObjectModel;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
public class ContactListView : ListView
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private ImageList ContactImages;
|
||||
private System.ComponentModel.IContainer components;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public ContactListView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ContactListView));
|
||||
this.ContactImages = new System.Windows.Forms.ImageList(this.components);
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// ContactImages
|
||||
//
|
||||
this.ContactImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ContactImages.ImageStream")));
|
||||
this.ContactImages.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.ContactImages.Images.SetKeyName(0, "Contact");
|
||||
//
|
||||
// ContactListView
|
||||
//
|
||||
this.SmallImageList = this.ContactImages;
|
||||
this.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||
this.View = System.Windows.Forms.View.List;
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
public event EventHandler<ContactFilterEventArgs> FilterContact;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handlers
|
||||
|
||||
protected virtual object CreateItemTag(ContactInfo contact)
|
||||
{
|
||||
return contact;
|
||||
}
|
||||
|
||||
protected virtual string CreateItemText(ContactInfo contact, object tag)
|
||||
{
|
||||
return contact.ToString();
|
||||
}
|
||||
|
||||
protected virtual int GetImageIndex(ContactInfo contact, object tag)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public virtual void LoadContacts()
|
||||
{
|
||||
ReadOnlyCollection<ContactInfo> contacts = MirandaContext.Current.MirandaDatabase.GetContacts(false);
|
||||
Items.Clear();
|
||||
|
||||
ContactFilterEventArgs e = new ContactFilterEventArgs();
|
||||
|
||||
for (int i = 0; i < contacts.Count; i++)
|
||||
InsertContact(contacts[i], e);
|
||||
}
|
||||
|
||||
public virtual void InsertContact(ContactInfo contact)
|
||||
{
|
||||
InsertContact(contact, null);
|
||||
}
|
||||
|
||||
private void InsertContact(ContactInfo contact, ContactFilterEventArgs e)
|
||||
{
|
||||
if (contact == null)
|
||||
throw new ArgumentNullException("contact");
|
||||
|
||||
if (e != null && FilterContact != null)
|
||||
{
|
||||
e.Contact = contact;
|
||||
e.Skip = false;
|
||||
|
||||
FilterContact(this, e);
|
||||
|
||||
if (e.Skip)
|
||||
return;
|
||||
}
|
||||
|
||||
object tag = CreateItemTag(contact);
|
||||
|
||||
if (tag != null)
|
||||
{
|
||||
ListViewItem item = new ListViewItem(CreateItemText(contact, tag), GetImageIndex(contact, tag));
|
||||
item.Tag = tag;
|
||||
|
||||
Items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool RemoveContact(ContactInfo contact)
|
||||
{
|
||||
int index = -1;
|
||||
|
||||
for (int i = 0; index == -1 && i < Items.Count; i++)
|
||||
if (Items[i].Tag.Equals(CreateItemTag(contact)))
|
||||
index = i;
|
||||
|
||||
if (index != -1)
|
||||
{
|
||||
Items.RemoveAt(index);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual ListViewItem FindContactItem(ContactInfo contact)
|
||||
{
|
||||
if (contact == null)
|
||||
throw new ArgumentNullException("contact");
|
||||
|
||||
object tag = CreateItemTag(contact);
|
||||
|
||||
ListViewItem item = null;
|
||||
|
||||
if (Items.Count > 0)
|
||||
item = FindItemWithText(CreateItemText(contact, tag), false, 0, false);
|
||||
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
if (object.ReferenceEquals(item.Tag, tag) || (tag != null && tag.Equals(item.Tag)))
|
||||
return item;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class ContactFilterEventArgs : EventArgs
|
||||
{
|
||||
public ContactFilterEventArgs() { }
|
||||
|
||||
private ContactInfo contact;
|
||||
public ContactInfo Contact
|
||||
{
|
||||
get { return contact; }
|
||||
internal set { contact = value; }
|
||||
}
|
||||
|
||||
private bool skip;
|
||||
public bool Skip
|
||||
{
|
||||
get { return skip; }
|
||||
set { skip = value; }
|
||||
}
|
||||
}
|
||||
}
|
164
Hyphen/Plugins/Forms/Controls/ContactListView.resx
Normal file
164
Hyphen/Plugins/Forms/Controls/ContactListView.resx
Normal file
@ -0,0 +1,164 @@
|
||||
<?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="ContactImages.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="ContactImages.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAq
|
||||
BwAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA
|
||||
ARADAAEBAQABIAYAARAaAAEDAgEBAgEYAgEBHwFIAgIBggFVAgIBqgFcAgIBvgFkAQkBCAHWAVYCAgGp
|
||||
ARICAQEX3AABDwIBARIBZQIIAdUBfQEwASoB7gHVAbABjgH/AegBvQGRAf8B7AHAAZcB/wHgAbYBjAH/
|
||||
AdMBqgGBAf8BawEWAREB5AEmAgEBN9QAAQ0CAQEPAXIBHAEUAeQB4AG1AYoB/wHmAcgBtwH/AeMBvgGg
|
||||
Af8B4QG3AY0B/wHlAb4BmQH/AdoBtgGRAf8B2QGwAYgB/wHQAaUBgQH/AUgCAgGB2AABYQIGAc0B4QGx
|
||||
AYgB/wHLAboBrwH/AfIB2QHGAf8B6AG+AZEB/wHsAcgBpAH/AeEBwgGkAf8B2AGyAYsB/wHFAZ0BfwH/
|
||||
AUECAQFw1AABmwGcAZMB/wFwASQBHAHsAfcBvAGVAf8BzQHAAbYB/wL9AfwC/wHQAaAB/wH1AcwBpgH/
|
||||
AeYByQGtAf8B6AG/AZYB/wGPAVcBPQH5AYgBhwGEAf8EAAFeAgYB1wFeAQYBBAHWAV0CBgHZAVUCAgGr
|
||||
wAABbgEgARwB5wHjAe4B5QH/AfMBzwGfAf8BxgGuAZ8B/wFMAXcBmQH/AZcBlQGUAf8B8QHCAZUB/wH3
|
||||
AcwBogH/Ac4BpQGBAf8BigJ/Af4BXAENAQwB5gGCAYUBgQH/AfMB6AHbAf8B7QHiAdQC/wH3AewB/wF1
|
||||
AS0BKAHtwAABbQEaARkB5QT/AesB4AHPAf8BfQF6AYEB/wEoAVYBgQH/ASIBUwGBAf8BlwGMAYEB/wHH
|
||||
AaYBhQH/AdMBxgG8Af8B9wHtAeUB/wH3Ae0B5QH/AfcB7QHlAf8B9wHtAeUB/wH3Ae0B5QH/AfcB7QHl
|
||||
Af8BcQEoASQB7MAAAW0BGgEZAeUE/wG8AbsBvQH/ATMBTwF9Af4BRgFrAYkB/wE4AWMBiAH/AWgBSAFJ
|
||||
AfgB5QHbAdMB/wH3Ae0B5QH/AfcB7QHlAf8B9wHtAeUB/wH3Ae0B5QH/AfcB7QHlAf8B9wHtAeUB/wH3
|
||||
Ae0B5QH/AXEBKAEkAezAAAFtARoBGQHlAfcB9QH2Af8BdQGKAaoB/wFWAX8BoAH/AVoBgQGgAf8BRQFw
|
||||
AZEB/wGlAasBsQH/AdIBvAGwAf8B9wHtAeUB/wH3Ae0B5QH/AfcB7QHlAf8B9wHtAeUB/wH3Ae0B5QH/
|
||||
AfcB7QHlAf8B9wHtAeUB/wFxASgBJAHswAABbQEaARkB5QHqAegB6gH/AXYBlAG6Af8BeAGZAb8B/wFu
|
||||
AY0BswH/AVMBgAGiAf8BRQFeAXQB/wHGAbQBqgH/AfcB7QHlAf8BxgGzAaQB/wHGAbMBpAH/AcYBswGk
|
||||
Af8BxgGzAaQB/wHGAbMBpAH/AfUB6QHgAf8BcQEoASQB7MAAAW0BGgEZAeUC5wHtAf8BjQGyAdcB/wGb
|
||||
Ab8B5QH/AYEBpQHPAf8BWgF+AZkB/wE2AUIBTQH/AaYBmgGTAf8B9wHtAeUB/wHSAcIBtQH/AdQBxgG4
|
||||
Af8B1AHGAbgB/wHUAcYBuAH/AdMBxAG2Af8B9wHtAeUB/wFxASkBJAHswAABbQEaARkB5QH0AfIB8wH/
|
||||
AZEBrgHKAf4BnwHGAe4B/wGBAaoB1wH/AVYBawGBAf8BNwEuAScB/wGSAYcBgQH/AfcB7QHlAf8B0QHB
|
||||
AbIB/wHUAcQBtwH/AdQBxAG3Af8B1AHGAbcB/wHTAcQBtgH/AfoB8QHpAf8BcQEpASQB7MAAAW0BGgEZ
|
||||
AeUB+QH3AfYB/wGdAaIBqQH/AYABgQGLAf8BdQF9AYEB/wJaAVsB/wFFAUMBQQH/AcgBvgG4Af8B9wHt
|
||||
AeUB/wHGAbMBpAH/AcYBswGkAf8BxgGzAaQB/wHGAbMBpAH/AcYBswGkAf8B+wH0Ae0B/wFzASYBIAHr
|
||||
wAABbQEZARcB5QT/AdgBzgHHAf8BpQGfAZoB/wGBAXsBeQH/AXMBcQFuAf8BrQGmAaIB/wHpAdwB1AP/
|
||||
Af4B/wH9AfsB9gH/AfoB9wH0Af8B9wH1AfIB/wH1AfIB7AH/AfMB7AHlAf8B/gH6AfQB/wFtAR0BHAHn
|
||||
wAABaQEXARUB4xz/AYMCQAHvAXQBHwEeAeUBcQEfAR4B5QFxAR8BHgHlAXEBHwEeAeUBcQEfAR4B5QF0
|
||||
ASIBHwHlAVACAgGYwAAB2AHbAdEB/wGRAZMBiAH/AZEBkwGIAf8BkQGTAYgB/wGRAZMBiAH/AZEBkwGI
|
||||
Af8BkQGTAYgB/wGRAZMBiAH/AdgB2wHRAf/cAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUA
|
||||
AYAXAAP/AQABwAE/BgABgAEfBwABHwYAAYABHwcAARBXAAF/BgAL
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
</root>
|
189
Hyphen/Plugins/Forms/Controls/CueBannerTextBox.cs
Normal file
189
Hyphen/Plugins/Forms/Controls/CueBannerTextBox.cs
Normal file
@ -0,0 +1,189 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws a textbox with a prompt inside of it, similar to the "Quick Search" box
|
||||
/// in Outlook 2007, IE7 or the Firefox 2.0 search box. The prompt will disappear when
|
||||
/// the focus is placed in the textbox, and will not display again if the Text property
|
||||
/// contains any value. If the Text property is empty, then the prompt will display
|
||||
/// again when the textbox loses the focus.
|
||||
/// </summary>
|
||||
public class CueBannerTextBox : System.Windows.Forms.TextBox
|
||||
{
|
||||
// Windows message constants
|
||||
const int WM_SETFOCUS = 7;
|
||||
const int WM_KILLFOCUS = 8;
|
||||
const int WM_ERASEBKGND = 14;
|
||||
const int WM_PAINT = 15;
|
||||
|
||||
// private internal variables
|
||||
private bool _focusSelect = true;
|
||||
private bool _drawPrompt = true;
|
||||
private string _bannerText = String.Empty;
|
||||
private Color _bannerColor = SystemColors.GrayText;
|
||||
private Font _bannerFont = null;
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor
|
||||
/// </summary>
|
||||
/// <remarks>Uncomment the SetStyle line to activate the OnPaint logic in place of the WndProc logic</remarks>
|
||||
public CueBannerTextBox()
|
||||
{
|
||||
//this.SetStyle(ControlStyles.UserPaint, true);
|
||||
this.BannerFont = this.Font;
|
||||
}
|
||||
|
||||
[Browsable(true)]
|
||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
||||
[Category("Appearance")]
|
||||
[Description("The prompt text to display when there is nothing in the Text property.")]
|
||||
public string BannerText
|
||||
{
|
||||
get { return _bannerText; }
|
||||
set { if (value == null) value = String.Empty; _bannerText = value.Trim(); this.Invalidate(); }
|
||||
}
|
||||
|
||||
[Browsable(true)]
|
||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
||||
[Category("Appearance")]
|
||||
[Description("The ForeColor to use when displaying the PromptText.")]
|
||||
public Color BannerForeColor
|
||||
{
|
||||
get { return _bannerColor; }
|
||||
set { _bannerColor = value; this.Invalidate(); }
|
||||
}
|
||||
|
||||
[Browsable(true)]
|
||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
||||
[Category("Appearance")]
|
||||
[Description("The Font to use when displaying the PromptText.")]
|
||||
public Font BannerFont
|
||||
{
|
||||
get { return _bannerFont; }
|
||||
set { _bannerFont = value; this.Invalidate(); }
|
||||
}
|
||||
|
||||
[Browsable(true)]
|
||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
||||
[Category("Behavior")]
|
||||
[Description("Automatically select the text when control receives the focus.")]
|
||||
public bool FocusSelect
|
||||
{
|
||||
get { return _focusSelect; }
|
||||
set { _focusSelect = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When the textbox receives an OnEnter event, select all the text if any text is present
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected override void OnEnter(EventArgs e)
|
||||
{
|
||||
if (this.Text.Length > 0 && _focusSelect)
|
||||
this.SelectAll();
|
||||
|
||||
base.OnEnter(e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Redraw the control when the text alignment changes
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected override void OnTextAlignChanged(EventArgs e)
|
||||
{
|
||||
base.OnTextAlignChanged(e);
|
||||
this.Invalidate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Redraw the control with the prompt
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
/// <remarks>This event will only fire if ControlStyles.UserPaint is set to true in the constructor</remarks>
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
|
||||
// Only draw the prompt in the OnPaint event and when the Text property is empty
|
||||
if (_drawPrompt && this.Text.Length == 0)
|
||||
DrawTextPrompt(e.Graphics);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the default WndProc for the control
|
||||
/// </summary>
|
||||
/// <param name="m">The Windows message structure</param>
|
||||
/// <remarks>
|
||||
/// This technique is necessary because the OnPaint event seems to be doing some
|
||||
/// extra processing that I haven't been able to figure out.
|
||||
/// </remarks>
|
||||
protected override void WndProc(ref System.Windows.Forms.Message m)
|
||||
{
|
||||
switch (m.Msg)
|
||||
{
|
||||
case WM_SETFOCUS:
|
||||
_drawPrompt = false;
|
||||
break;
|
||||
|
||||
case WM_KILLFOCUS:
|
||||
_drawPrompt = true;
|
||||
break;
|
||||
}
|
||||
|
||||
base.WndProc(ref m);
|
||||
|
||||
// Only draw the prompt on the WM_PAINT event and when the Text property is empty
|
||||
if (m.Msg == WM_PAINT && _drawPrompt && this.Text.Length == 0 && !this.GetStyle(ControlStyles.UserPaint))
|
||||
DrawTextPrompt();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overload to automatically create the Graphics region before drawing the text prompt
|
||||
/// </summary>
|
||||
/// <remarks>The Graphics region is disposed after drawing the prompt.</remarks>
|
||||
protected virtual void DrawTextPrompt()
|
||||
{
|
||||
using (Graphics g = this.CreateGraphics())
|
||||
{
|
||||
DrawTextPrompt(g);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the PromptText in the TextBox.ClientRectangle using the PromptFont and PromptForeColor
|
||||
/// </summary>
|
||||
/// <param name="g">The Graphics region to draw the prompt on</param>
|
||||
protected virtual void DrawTextPrompt(Graphics g)
|
||||
{
|
||||
TextFormatFlags flags = TextFormatFlags.NoPadding | TextFormatFlags.Top | TextFormatFlags.EndEllipsis;
|
||||
Rectangle rect = this.ClientRectangle;
|
||||
|
||||
// Offset the rectangle based on the HorizontalAlignment,
|
||||
// otherwise the display looks a little strange
|
||||
switch (this.TextAlign)
|
||||
{
|
||||
case HorizontalAlignment.Center:
|
||||
flags = flags | TextFormatFlags.HorizontalCenter;
|
||||
rect.Offset(0, 1);
|
||||
break;
|
||||
case HorizontalAlignment.Left:
|
||||
flags = flags | TextFormatFlags.Left;
|
||||
rect.Offset(1, 1);
|
||||
break;
|
||||
case HorizontalAlignment.Right:
|
||||
flags = flags | TextFormatFlags.Right;
|
||||
rect.Offset(0, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw the prompt text using TextRenderer
|
||||
TextRenderer.DrawText(g, _bannerText, _bannerFont, rect, _bannerColor, this.BackColor, flags);
|
||||
}
|
||||
}
|
||||
}
|
125
Hyphen/Plugins/Forms/Controls/CueBannerTextBox_old.cs
Normal file
125
Hyphen/Plugins/Forms/Controls/CueBannerTextBox_old.cs
Normal file
@ -0,0 +1,125 @@
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) Chili Software. All rights reserved.
|
||||
//
|
||||
// File: CueBannerTextBox.cs
|
||||
//
|
||||
// Description: Text box that allows to display a cue banner.
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
// Idea from: http://www.delphipraxis.net/topic13132_editgetcuebannertext+win+xp.html
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Drawing;
|
||||
using System.Diagnostics;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// This class represents a text box that is enhanced to display a little cue banner, if
|
||||
/// no text has been entered. This could be used to inform the user what should be entered
|
||||
/// in the text box.
|
||||
/// </summary>
|
||||
public class CueBannerTextBox : TextBox
|
||||
{
|
||||
#region NativeMethods
|
||||
|
||||
private const uint ECM_FIRST = 0x1500;
|
||||
private const uint EM_SETCUEBANNER = ECM_FIRST + 1;
|
||||
private const uint WM_SETFONT = 0x30;
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
|
||||
private static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, string lParam);
|
||||
|
||||
#endregion
|
||||
|
||||
private string _bannerText;
|
||||
private Font _bannerFont;
|
||||
|
||||
/// <summary>
|
||||
/// The banner text associated with the control.
|
||||
/// </summary>
|
||||
[Description("The banner text associated with the control.")]
|
||||
[Category("Appearance")]
|
||||
public string BannerText
|
||||
{
|
||||
get { return _bannerText; }
|
||||
set
|
||||
{
|
||||
_bannerText = value;
|
||||
|
||||
// If supported set the value as banner text.
|
||||
if (IsSupported)
|
||||
SendMessage(this.Handle, EM_SETCUEBANNER, IntPtr.Zero, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The banner font used to display the banner text in the control.
|
||||
/// </summary>
|
||||
[Description("The banner font used to display the banner text in the control.")]
|
||||
[Category("Appearance")]
|
||||
public Font BannerFont
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_bannerFont == null && this.Parent != null)
|
||||
return this.Parent.Font;
|
||||
|
||||
return _bannerFont;
|
||||
}
|
||||
set { _bannerFont = value; }
|
||||
}
|
||||
|
||||
#region Overridden Members
|
||||
|
||||
/// <summary>
|
||||
/// Invoked each time the focus is lost.
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected override void OnLostFocus(EventArgs e)
|
||||
{
|
||||
base.OnLostFocus(e);
|
||||
|
||||
// Notify the text box to change the font to the banner font.
|
||||
if (this.Text.Length == 0 && IsSupported)
|
||||
{
|
||||
SendMessage(this.Handle, WM_SETFONT, _bannerFont.ToHfont(), null);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked each time the focus is gotten.
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected override void OnGotFocus(EventArgs e)
|
||||
{
|
||||
base.OnGotFocus(e);
|
||||
|
||||
// Notify the text box to change the font back.
|
||||
if (IsSupported)
|
||||
SendMessage(this.Handle, WM_SETFONT, base.Font.ToHfont(), null);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether the OS supports banner texts. It is fine if the application
|
||||
/// runs on XP or higher.
|
||||
/// </summary>
|
||||
private bool IsSupported
|
||||
{
|
||||
get
|
||||
{
|
||||
Version v = Environment.OSVersion.Version;
|
||||
return ((v.Major == 5 && v.Minor == 1) || v.Major > 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
56
Hyphen/Plugins/Forms/Controls/GradientPanel.cs
Normal file
56
Hyphen/Plugins/Forms/Controls/GradientPanel.cs
Normal file
@ -0,0 +1,56 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
[ToolboxBitmap(typeof(Panel))]
|
||||
public sealed class GradientPanel : Panel
|
||||
{
|
||||
public GradientPanel() { }
|
||||
|
||||
private Color gradientColor;
|
||||
public Color GradientColor
|
||||
{
|
||||
get { return gradientColor; }
|
||||
set { gradientColor = value; Refresh(); }
|
||||
}
|
||||
|
||||
private float rotation;
|
||||
public float Rotation
|
||||
{
|
||||
get { return rotation; }
|
||||
set { rotation = value; Refresh(); }
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
if (e.ClipRectangle.IsEmpty) return;
|
||||
|
||||
using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, BackColor, GradientColor, Rotation))
|
||||
e.Graphics.FillRectangle(brush, ClientRectangle);
|
||||
|
||||
base.OnPaint(e);
|
||||
}
|
||||
}
|
||||
}
|
242
Hyphen/Plugins/Forms/Controls/ManagedMainMenu.cs
Normal file
242
Hyphen/Plugins/Forms/Controls/ManagedMainMenu.cs
Normal file
@ -0,0 +1,242 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using Virtuoso.Miranda.Plugins.Native;
|
||||
using System.Drawing;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Miranda.Plugins.Forms.Controls;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
// Impl note: must be public, remoting rejects non-public method calls.
|
||||
public sealed class ManagedMainMenu : ContextMenuStrip
|
||||
{
|
||||
#region Delegates
|
||||
|
||||
private delegate void AddMainMenuItemInvoker(ManagedMainMenu menu, ManagedMainMenuItem item);
|
||||
private delegate void ModifyMenuItemInvoker(ManagedMainMenu menu, ref CLISTMENUITEM itemData, string handle);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private static readonly Random HandleGenerator = new Random();
|
||||
|
||||
private static readonly AddMainMenuItemInvoker AddMainMenuItemDelegate = new AddMainMenuItemInvoker(AddMainMenuItem);
|
||||
private static readonly ModifyMenuItemInvoker ModifyMenuItemDelegate = new ModifyMenuItemInvoker(ModifyMenuItem);
|
||||
|
||||
private static readonly ToolStripMenuItem EmptyItem;
|
||||
private readonly int EmptyItemIndex;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors & .dctors
|
||||
|
||||
static ManagedMainMenu()
|
||||
{
|
||||
EmptyItem = new ToolStripMenuItem(TextResources.UI_Label_Empty);
|
||||
EmptyItem.Visible = false;
|
||||
}
|
||||
|
||||
internal ManagedMainMenu()
|
||||
{
|
||||
RenderMode = ToolStripRenderMode.System;
|
||||
EmptyItemIndex = Items.Add(EmptyItem);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
#region Overrides
|
||||
|
||||
public override object InitializeLifetimeService()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI
|
||||
|
||||
internal void ShowUnderCursor()
|
||||
{
|
||||
if (Items.Count == 1)
|
||||
Items[EmptyItemIndex].Visible = true;
|
||||
else
|
||||
Items[EmptyItemIndex].Visible = false;
|
||||
|
||||
Show(Cursor.Position);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Interceptors
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="menu"></param>
|
||||
/// <remarks>
|
||||
/// This method is static to not let the execution run in default AppDomain but in a domain of the menu itself.
|
||||
/// </remarks>
|
||||
internal static void RegisterInterceptors(ManagedMainMenu menu)
|
||||
{
|
||||
MirandaContext context = MirandaContext.Current;
|
||||
|
||||
context.ServiceCallInterceptors.Register(MirandaServices.MS_CLIST_ADDMAINMENUITEM, menu.AddMainMenuItemServiceInterceptor);
|
||||
context.ServiceCallInterceptors.Register(MirandaServices.MS_CLIST_MODIFYMENUITEM, menu.ModifyMenuItemInterceptor);
|
||||
}
|
||||
|
||||
internal static void UnregisterInterceptors(ManagedMainMenu menu)
|
||||
{
|
||||
MirandaContext context = MirandaContext.Current;
|
||||
|
||||
context.ServiceCallInterceptors.Unregister(MirandaServices.MS_CLIST_ADDMAINMENUITEM);
|
||||
context.ServiceCallInterceptors.Unregister(MirandaServices.MS_CLIST_MODIFYMENUITEM);
|
||||
}
|
||||
|
||||
private int AddMainMenuItemServiceInterceptor(UIntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
CLISTMENUITEM itemData = (CLISTMENUITEM)Marshal.PtrToStructure(lParam, typeof(CLISTMENUITEM));
|
||||
ManagedMainMenuItem menuItem = null;
|
||||
Image itemImage = null;
|
||||
|
||||
if (itemData.Icon != IntPtr.Zero)
|
||||
itemImage = IconImageCache.Singleton.GetIconImage(itemData.Icon);
|
||||
|
||||
menuItem = new ManagedMainMenuItem(itemData.Text, itemData.PopUpMenu, itemData.Service, itemImage);
|
||||
|
||||
if (InvokeRequired)
|
||||
Invoke(AddMainMenuItemDelegate, this, menuItem);
|
||||
else
|
||||
AddMainMenuItemDelegate(this, menuItem);
|
||||
|
||||
return menuItem.Handle;
|
||||
}
|
||||
|
||||
private static void AddMainMenuItem(ManagedMainMenu menu, ManagedMainMenuItem item)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(item.PopUpMenu))
|
||||
{
|
||||
string popupName = item.PopUpMenu;
|
||||
ToolStripMenuItem popupItem = null;
|
||||
|
||||
ToolStripItem[] popupItems = menu.Items.Find(popupName, false);
|
||||
|
||||
if (popupItems.Length > 0)
|
||||
popupItem = (ToolStripMenuItem)popupItems[0];
|
||||
else
|
||||
{
|
||||
popupItem = new ToolStripMenuItem(popupName);
|
||||
popupItem.Name = popupName;
|
||||
|
||||
menu.Items.Add(popupItem);
|
||||
}
|
||||
|
||||
popupItem.DropDownItems.Add(item);
|
||||
}
|
||||
else
|
||||
menu.Items.Add(item);
|
||||
}
|
||||
|
||||
private int ModifyMenuItemInterceptor(UIntPtr wParam, IntPtr lParam)
|
||||
{
|
||||
try
|
||||
{
|
||||
CLISTMENUITEM itemData = (CLISTMENUITEM)Marshal.PtrToStructure(lParam, typeof(CLISTMENUITEM));
|
||||
string handle = wParam.ToString();
|
||||
|
||||
if (!Items.ContainsKey(handle))
|
||||
{
|
||||
if (String.IsNullOrEmpty(itemData.PopUpMenu) ||
|
||||
!Items.ContainsKey(itemData.PopUpMenu) ||
|
||||
!((ToolStripMenuItem)Items[itemData.PopUpMenu]).DropDownItems.ContainsKey(handle))
|
||||
return MirandaContext.Current.CallService(MirandaServices.MS_CLIST_MODIFYMENUITEM, wParam, lParam, true);
|
||||
}
|
||||
|
||||
if (InvokeRequired)
|
||||
Invoke(ModifyMenuItemDelegate, this, itemData, handle);
|
||||
else
|
||||
ModifyMenuItemDelegate(this, ref itemData, handle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ModifyMenuItem(ManagedMainMenu menu, ref CLISTMENUITEM itemData, string handle)
|
||||
{
|
||||
ManagedMainMenuItem item = (ManagedMainMenuItem)menu.Items.Find(handle, itemData.PopUpMenu != null)[0];
|
||||
MenuItemModifyFlags flags = (MenuItemModifyFlags)itemData.Flags;
|
||||
|
||||
if ((flags & MenuItemModifyFlags.CMIM_NAME) == MenuItemModifyFlags.CMIM_NAME)
|
||||
item.Text = itemData.Text;
|
||||
|
||||
if ((flags & MenuItemModifyFlags.CMIM_ICON) == MenuItemModifyFlags.CMIM_ICON)
|
||||
item.Image = IconImageCache.Singleton.GetIconImage(itemData.Icon);
|
||||
|
||||
if ((flags & MenuItemModifyFlags.CMIM_HOTKEY) == MenuItemModifyFlags.CMIM_HOTKEY)
|
||||
item.ShortcutKeys = (Keys)itemData.HotKey;
|
||||
|
||||
if ((flags & MenuItemModifyFlags.CMIM_FLAGS) == MenuItemModifyFlags.CMIM_FLAGS)
|
||||
{
|
||||
MenuItemProperties itemFlags = (MenuItemProperties)(flags & ~MenuItemModifyFlags.CMIM_ALL);
|
||||
|
||||
switch (itemFlags)
|
||||
{
|
||||
case MenuItemProperties.Grayed:
|
||||
item.Enabled = false;
|
||||
break;
|
||||
case MenuItemProperties.Hidden:
|
||||
if (item.OwnerItem == null)
|
||||
menu.Items.Remove(item);
|
||||
else
|
||||
{
|
||||
ToolStripMenuItem popupItem = (ToolStripMenuItem)item.OwnerItem;
|
||||
popupItem.DropDownItems.Remove(item);
|
||||
|
||||
if (popupItem.DropDownItems.Count == 0)
|
||||
menu.Items.Remove(popupItem);
|
||||
}
|
||||
break;
|
||||
case MenuItemProperties.Checked:
|
||||
item.Checked = true;
|
||||
break;
|
||||
case MenuItemProperties.None:
|
||||
item.Enabled = true;
|
||||
item.Visible = true;
|
||||
item.Checked = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
85
Hyphen/Plugins/Forms/Controls/ManagedMainMenuItem.cs
Normal file
85
Hyphen/Plugins/Forms/Controls/ManagedMainMenuItem.cs
Normal file
@ -0,0 +1,85 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
internal class ManagedMainMenuItem : ToolStripMenuItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static readonly Random HandleGenerator = new Random();
|
||||
|
||||
private int handle;
|
||||
private string service, popUpMenu;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public ManagedMainMenuItem(string text, string popUpMenu, string service, Image image)
|
||||
{
|
||||
if (String.IsNullOrEmpty(text)) throw new ArgumentNullException("text");
|
||||
if (String.IsNullOrEmpty(service)) throw new ArgumentNullException("service");
|
||||
|
||||
this.Name = (handle = HandleGenerator.Next()).ToString();
|
||||
|
||||
this.Text = text;
|
||||
this.popUpMenu = popUpMenu;
|
||||
this.service = service;
|
||||
this.Image = image;
|
||||
|
||||
this.Click += new EventHandler(ManagedMainMenuItem_Click);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string PopUpMenu
|
||||
{
|
||||
get { return popUpMenu; }
|
||||
}
|
||||
|
||||
public string Service
|
||||
{
|
||||
get { return service; }
|
||||
}
|
||||
|
||||
public int Handle
|
||||
{
|
||||
get { return handle; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
private void ManagedMainMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
MirandaContext.Current.CallService(service);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
84
Hyphen/Plugins/Forms/Controls/TrayContextMenu.cs
Normal file
84
Hyphen/Plugins/Forms/Controls/TrayContextMenu.cs
Normal file
@ -0,0 +1,84 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Configuration;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Hyphen;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
internal sealed class TrayContextMenu : ContextMenuStrip
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private ToolStripMenuItem ManagePluginsITEM;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public TrayContextMenu()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Designer
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TrayContextMenu));
|
||||
this.ManagePluginsITEM = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// ManagePluginsITEM
|
||||
//
|
||||
this.ManagePluginsITEM.Image = ((System.Drawing.Image)(resources.GetObject("ManagePluginsITEM.Image")));
|
||||
this.ManagePluginsITEM.Name = "ManagePluginsITEM";
|
||||
this.ManagePluginsITEM.Size = new System.Drawing.Size(111, 22);
|
||||
this.ManagePluginsITEM.Text = "Options";
|
||||
this.ManagePluginsITEM.Click += new System.EventHandler(this.ManagePluginsITEM_Click);
|
||||
//
|
||||
// TrayContextMenu
|
||||
//
|
||||
this.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.ManagePluginsITEM});
|
||||
this.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
|
||||
this.Size = new System.Drawing.Size(112, 26);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI Handlers
|
||||
|
||||
private void ManagePluginsITEM_Click(object sender, EventArgs e)
|
||||
{
|
||||
Loader.GetInstance().ManagePlugins();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
143
Hyphen/Plugins/Forms/Controls/TrayContextMenu.resx
Normal file
143
Hyphen/Plugins/Forms/Controls/TrayContextMenu.resx
Normal file
@ -0,0 +1,143 @@
|
||||
<?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>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="ManagePluginsITEM.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA
|
||||
CxMBAJqcGAAAAtdJREFUOE99U0tPE1EUblgQV64MCQv3rtwZE2NMiIkbQzTEldENFmpbWvqkpVT6pC2l
|
||||
7ZS+3/Td6UyH0k6nBUt5yQKNAv4Gg0YXxMQYg6VzvDbBCGm4m3tz73e+853zncvhXLI0YXpTG6Y/X4b5
|
||||
96aJ1oZm4/VDTYR5OB2mB3RR5rsxXoepYOWm0r8imQ5UjiRu8lZPMm2UeWJINMAQr3f0MaZtiDOAdtBF
|
||||
a6wuQrO6KA1SD/X4XLAmUrutjTF3Z6LMiKuw+TtVfwvL2x+B3DwEfH0f8q8/QKD8BuZSa6zcU1aIsdI9
|
||||
kYu4w1GFqld18fqxId4ADN8AYuMACs334CG3wbjU6BgTjVNnoQXB5V0IULtgRGrUvjIoPcttjjJQ6Z+J
|
||||
1BJIIpus70EeBdqyzc50uBZWh+nr6hA9qA5WKX2UaWN4C2ypNVB5y6zIVUx05auC1QFDjGFLW4ewiDKi
|
||||
hkkuNkXpL+uNsRrYs01QeMgOkt3HUYeq5KsI/UmP5BRbB2BIrP3o1U25j7ox5S93TAgnw4ow6SoecZCX
|
||||
X3XoAtmCGrMPuhhz3CtY5qEGFW6irQtXQOIqgtiRhy5O4VsZRtkhvfoO7Lkmq/CVRy8SIH8lKi8JMz4K
|
||||
xPY8K1jAh7oYibs0rAlWOt7SDvipHdCGKqeTbvL+GQE6j8gw4pfaS4Ecw0FozZwK7PkHHKGj2C/3Ukea
|
||||
UBVMyC4fuQVYvgVoKDpyT+mbbJH8MuUmWZWHBIULB5EtAzxzEsbNqZ9d8gkX8VLgILgiZ3F9FtVkTTaQ
|
||||
JatgRtM1G1wBjbcEUlSjcD4D43OpvXFL+jnXnOaeK03gKDxVuEus1EWwUicOk84Cqi8LAmsG+HNJ4JmW
|
||||
YMySHus52xMOXCvFiBO+vWARLOSfTdjzJwJLGoT2nJhny/pe6OMdrjl1PuP/TCjwEX8+d+XvnWA+t8G3
|
||||
ZbpfkmfNXuOakrxR01LfGf4P/J24pw50qlAAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
61
Hyphen/Plugins/Forms/Controls/TrayMenuManager.cs
Normal file
61
Hyphen/Plugins/Forms/Controls/TrayMenuManager.cs
Normal file
@ -0,0 +1,61 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms.Controls
|
||||
{
|
||||
internal sealed class TrayMenuManager : IDisposable
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly NotifyIcon TrayIcon;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public TrayMenuManager()
|
||||
{
|
||||
TrayIcon = new NotifyIcon();
|
||||
|
||||
TrayIcon.Text = TextResources.UI_ToolTip_HyphenTrayIcon;
|
||||
TrayIcon.Visible = true;
|
||||
TrayIcon.Icon = VisualResources.Icon_16x16_Hyphen;
|
||||
TrayIcon.ContextMenuStrip = new TrayContextMenu();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (TrayIcon != null)
|
||||
TrayIcon.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
152
Hyphen/Plugins/Forms/ErrorDialog.Designer.cs
generated
Normal file
152
Hyphen/Plugins/Forms/ErrorDialog.Designer.cs
generated
Normal file
@ -0,0 +1,152 @@
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
internal partial class ErrorDialog
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param eventName="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 Windows Form 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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ErrorDialog));
|
||||
this.MessageLABEL = new System.Windows.Forms.Label();
|
||||
this.DetailsTBOX = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.OkBTN = new System.Windows.Forms.Button();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.Panel1 = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader();
|
||||
this.CancelBTN = new System.Windows.Forms.Button();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.SendReportLBTN = new System.Windows.Forms.LinkLabel();
|
||||
this.Panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// MessageLABEL
|
||||
//
|
||||
resources.ApplyResources(this.MessageLABEL, "MessageLABEL");
|
||||
this.MessageLABEL.Name = "MessageLABEL";
|
||||
//
|
||||
// DetailsTBOX
|
||||
//
|
||||
this.DetailsTBOX.BackColor = System.Drawing.SystemColors.Window;
|
||||
resources.ApplyResources(this.DetailsTBOX, "DetailsTBOX");
|
||||
this.DetailsTBOX.Name = "DetailsTBOX";
|
||||
this.DetailsTBOX.ReadOnly = true;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
//
|
||||
// OkBTN
|
||||
//
|
||||
resources.ApplyResources(this.OkBTN, "OkBTN");
|
||||
this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.OkBTN.Name = "OkBTN";
|
||||
this.OkBTN.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.BackColor = System.Drawing.Color.Transparent;
|
||||
this.label3.Name = "label3";
|
||||
//
|
||||
// Panel1
|
||||
//
|
||||
this.Panel1.BackColor = System.Drawing.Color.Transparent;
|
||||
this.Panel1.Color = System.Drawing.SystemColors.ActiveCaption;
|
||||
this.Panel1.Controls.Add(this.label3);
|
||||
resources.ApplyResources(this.Panel1, "Panel1");
|
||||
this.Panel1.HeaderFont = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.Panel1.Image = ((System.Drawing.Image)(resources.GetObject("Panel1.Image")));
|
||||
this.Panel1.MinimumSize = new System.Drawing.Size(300, 40);
|
||||
this.Panel1.Name = "Panel1";
|
||||
//
|
||||
// CancelBTN
|
||||
//
|
||||
this.CancelBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
resources.ApplyResources(this.CancelBTN, "CancelBTN");
|
||||
this.CancelBTN.Name = "CancelBTN";
|
||||
this.CancelBTN.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
//
|
||||
// SendReportLBTN
|
||||
//
|
||||
resources.ApplyResources(this.SendReportLBTN, "SendReportLBTN");
|
||||
this.SendReportLBTN.Name = "SendReportLBTN";
|
||||
this.SendReportLBTN.TabStop = true;
|
||||
this.SendReportLBTN.UseCompatibleTextRendering = true;
|
||||
this.SendReportLBTN.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SendReportLBTN_LinkClicked);
|
||||
//
|
||||
// ErrorDialog
|
||||
//
|
||||
this.AcceptButton = this.OkBTN;
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.CancelButton = this.CancelBTN;
|
||||
this.Controls.Add(this.SendReportLBTN);
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.CancelBTN);
|
||||
this.Controls.Add(this.MessageLABEL);
|
||||
this.Controls.Add(this.DetailsTBOX);
|
||||
this.Controls.Add(this.OkBTN);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.Panel1);
|
||||
this.Controls.Add(this.label2);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "ErrorDialog";
|
||||
this.Shown += new System.EventHandler(this.PluginErrorDialog_Shown);
|
||||
this.Panel1.ResumeLayout(false);
|
||||
this.Panel1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label MessageLABEL;
|
||||
private System.Windows.Forms.TextBox DetailsTBOX;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Button OkBTN;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader Panel1;
|
||||
private System.Windows.Forms.Button CancelBTN;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.LinkLabel SendReportLBTN;
|
||||
}
|
||||
}
|
133
Hyphen/Plugins/Forms/ErrorDialog.cs
Normal file
133
Hyphen/Plugins/Forms/ErrorDialog.cs
Normal file
@ -0,0 +1,133 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Diagnostics;
|
||||
using System.Media;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
internal sealed partial class ErrorDialog : Form
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private IExceptionReporter Reporter;
|
||||
private Exception Exception;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
private ErrorDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public static DialogResult PresentModal(Exception e)
|
||||
{
|
||||
return PresentModal(e, null, null, false);
|
||||
}
|
||||
|
||||
public static DialogResult PresentModal(Exception e, IExceptionReporter reporter)
|
||||
{
|
||||
return PresentModal(e, reporter, null, false);
|
||||
}
|
||||
|
||||
public static DialogResult PresentModal(Exception e, string message, bool canCancel)
|
||||
{
|
||||
return PresentModal(e, null, message, canCancel);
|
||||
}
|
||||
|
||||
public static DialogResult PresentModal(Exception e, IExceptionReporter reporter, string message, bool canCancel)
|
||||
{
|
||||
using (ErrorDialog dlg = new ErrorDialog())
|
||||
{
|
||||
return dlg.BindAndShow(e, reporter, message, canCancel);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
private DialogResult BindAndShow(Exception exception, IExceptionReporter reporter, string message, bool canCancel)
|
||||
{
|
||||
if (exception == null)
|
||||
throw new ArgumentNullException("exception");
|
||||
|
||||
this.Exception = exception;
|
||||
this.MessageLABEL.Text = message ?? exception.Message;
|
||||
|
||||
PrepareReportLink(exception, reporter);
|
||||
DumpException(exception);
|
||||
|
||||
CancelBTN.Visible = canCancel;
|
||||
OkBTN.Focus();
|
||||
|
||||
return ShowDialog();
|
||||
}
|
||||
|
||||
private void PrepareReportLink(Exception exception, IExceptionReporter reporter)
|
||||
{
|
||||
if (reporter == null)
|
||||
{
|
||||
SendReportLBTN.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Reporter = reporter;
|
||||
}
|
||||
}
|
||||
|
||||
private void DumpException(Exception e)
|
||||
{
|
||||
StringBuilder dump = new StringBuilder();
|
||||
|
||||
if (e is IExceptionDumpController)
|
||||
{
|
||||
((IExceptionDumpController)e).DumpException(e, dump);
|
||||
}
|
||||
|
||||
dump.AppendFormat("=== Exception dump ==={0}{1}{0}{0}", Environment.NewLine, e.ToString());
|
||||
DetailsTBOX.Text = dump.ToString();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI Handlers
|
||||
|
||||
private void PluginErrorDialog_Shown(object sender, EventArgs e)
|
||||
{
|
||||
SystemSounds.Hand.Play();
|
||||
}
|
||||
|
||||
private void SendReportLBTN_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
Reporter.ReportException(Exception);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
538
Hyphen/Plugins/Forms/ErrorDialog.resx
Normal file
538
Hyphen/Plugins/Forms/ErrorDialog.resx
Normal file
@ -0,0 +1,538 @@
|
||||
<?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="MessageLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="MessageLABEL.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 56</value>
|
||||
</data>
|
||||
<data name="MessageLABEL.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>401, 56</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="MessageLABEL.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="MessageLABEL.Text" xml:space="preserve">
|
||||
<value>(message)</value>
|
||||
</data>
|
||||
<data name=">>MessageLABEL.Name" xml:space="preserve">
|
||||
<value>MessageLABEL</value>
|
||||
</data>
|
||||
<data name=">>MessageLABEL.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>MessageLABEL.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>MessageLABEL.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<metadata name="DetailsTBOX.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="DetailsTBOX.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 186</value>
|
||||
</data>
|
||||
<data name="DetailsTBOX.Multiline" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="DetailsTBOX.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
|
||||
<value>Both</value>
|
||||
</data>
|
||||
<data name="DetailsTBOX.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>398, 171</value>
|
||||
</data>
|
||||
<data name="DetailsTBOX.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>DetailsTBOX.Name" xml:space="preserve">
|
||||
<value>DetailsTBOX</value>
|
||||
</data>
|
||||
<data name=">>DetailsTBOX.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>DetailsTBOX.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>DetailsTBOX.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Tahoma, 8pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 170</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>46, 13</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Details</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<metadata name="OkBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="OkBTN.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="OkBTN.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 363</value>
|
||||
</data>
|
||||
<data name="OkBTN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="OkBTN.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="OkBTN.Text" xml:space="preserve">
|
||||
<value>OK</value>
|
||||
</data>
|
||||
<data name=">>OkBTN.Name" xml:space="preserve">
|
||||
<value>OkBTN</value>
|
||||
</data>
|
||||
<data name=">>OkBTN.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>OkBTN.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>OkBTN.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Franklin Gothic Medium, 14pt</value>
|
||||
</data>
|
||||
<data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 12</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>273, 24</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Failed to load a managed plugin</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>Panel1</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="Panel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="Panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="Panel1.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Tahoma, 8.25pt</value>
|
||||
</data>
|
||||
<data name="Panel1.HeaderText" xml:space="preserve">
|
||||
<value>An error occured in Hyphen or one of its plugins.</value>
|
||||
</data>
|
||||
<data name="Panel1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
TkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="Panel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="Panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>422, 53</value>
|
||||
</data>
|
||||
<data name="Panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>Panel1.Name" xml:space="preserve">
|
||||
<value>Panel1</value>
|
||||
</data>
|
||||
<data name=">>Panel1.Type" xml:space="preserve">
|
||||
<value>Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader, Hyphen, Version=0.8.6.1931, Culture=neutral, PublicKeyToken=null</value>
|
||||
</data>
|
||||
<data name=">>Panel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>Panel1.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<metadata name="CancelBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="CancelBTN.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>93, 363</value>
|
||||
</data>
|
||||
<data name="CancelBTN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="CancelBTN.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="CancelBTN.Text" xml:space="preserve">
|
||||
<value>Cancel</value>
|
||||
</data>
|
||||
<data name="CancelBTN.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>CancelBTN.Name" xml:space="preserve">
|
||||
<value>CancelBTN</value>
|
||||
</data>
|
||||
<data name=">>CancelBTN.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>CancelBTN.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>CancelBTN.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label1.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Tahoma, 8pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 124</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>118, 13</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Report the problem</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<metadata name="label4.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>9, 137</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>169, 13</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>To send this report to the author,</value>
|
||||
</data>
|
||||
<data name=">>label4.Name" xml:space="preserve">
|
||||
<value>label4</value>
|
||||
</data>
|
||||
<data name=">>label4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label4.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="SendReportLBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="SendReportLBTN.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="SendReportLBTN.LinkArea" type="System.Windows.Forms.LinkArea, System.Windows.Forms">
|
||||
<value>0, 10</value>
|
||||
</data>
|
||||
<data name="SendReportLBTN.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>177, 137</value>
|
||||
</data>
|
||||
<data name="SendReportLBTN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 18</value>
|
||||
</data>
|
||||
<data name="SendReportLBTN.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="SendReportLBTN.Text" xml:space="preserve">
|
||||
<value>click here.</value>
|
||||
</data>
|
||||
<data name=">>SendReportLBTN.Name" xml:space="preserve">
|
||||
<value>SendReportLBTN</value>
|
||||
</data>
|
||||
<data name=">>SendReportLBTN.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>SendReportLBTN.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>SendReportLBTN.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>422, 397</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Tahoma, 8pt</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAABweLRgcHi40HB4vHBweL8AcHi/AHB4vHBweLjQcHi0YAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAHB4sgBweLjDAwqf5oaMj/lpbd/6qq5v+goOP/kJDb/2hoyP8wMKn+BweLjAcH
|
||||
iyAAAAAAAAAAAAAAAAAHB4sgCQmf81ZWwf+Wl+H/dnbY/0NDyv8eHr//Hh6//0NDyv92dtj/l5fh/1ZW
|
||||
wf8KCpzzBweLIAAAAAAAAAAABweLjFVWw/+UlOP/TU2s/xYWkv8WFpL/Dw+8/w8Pu/8PD7v/FhaS/01N
|
||||
rP+YmM//VlbB/wcHi4wAAAAABweLRi8vrP6VleT/RkbS///////29v3/FhaS/w4Ov/8ODr7/FhaS////
|
||||
////////TU2s/5eX4f8wMKn+BweLRgcHi41nZ83/cnLg/wwMyP/29v3//////9DQ6f9CQqf/Nzeh/7Ky
|
||||
2//9/f7//////xYWkv92ddn/aGjI/wcHi40HB4vHi4vi/zs72f8KC87/CgvM/9LS9f//////vr7h/6am
|
||||
1v//////zs7o/xYWkv8WFpL/QUHN/5OU3v8HB4vHBweL8JeY7P8WFtf/CQnT/x0d1f83N9n/qKjW////
|
||||
////////wMDi/1BQrf8bG8r/DQ3F/xscyP+pqen/BweL8AcHi/ClpfD/FRXb/wcI2P8ICNb/Nzeh/7Cw
|
||||
2v///////////8vL5/9ERKf/CwvM/wsMyf8bG8v/sbHs/wcHi/AHB4vHkpHp/zs75v8GBt3/FhaS/9nZ
|
||||
7f//////urrf/6en1v//////29vu/xYWkv8KCs//QD/Y/5WV4/8HB4vHBweLjWRl1f9wcO//BQXi//r6
|
||||
/v//////3t7w/0BApv8wMOD/xsb2///////+/v//FhaS/3Jy5v9mZ8//BweLjQcHi0YtLbL+kpLy/z8/
|
||||
7P//////+/v//xYWkv8ICOH/BQXg/wYG3v///////////01NrP+Tk+z/Li6u/gcHi0YAAAAABweLjFFR
|
||||
0/+Pj/X/Pz7t/wME6P8EBOf/BATm/wQF5P8EBOP/BQbh/0FA5/+RkfH/UlLO/wcHi4wAAAAAAAAAAAcH
|
||||
iyAHB6rzUVHT/5GR9P9vb/P/ODju/xIT6v8SEuj/OTns/29v8P+SkvL/UVLQ/wcHpvMHB4sgAAAAAAAA
|
||||
AAAAAAAABweLIAcHi4wtLbL+ZGTY/5OT7f+oqPb/n5/1/46O7P9kZNf/LS2y/gcHi4wHB4sgAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAABweLRgcHi40HB4vHBweL8AcHi/AHB4vHBweLjQcHi0YAAAAAAAAAAAAA
|
||||
AAAAAAAA8A8AAMADAACAAQAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIAB
|
||||
AADAAwAA8A8AAA==
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Plugin error</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>ErrorDialog</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
82
Hyphen/Plugins/Forms/FusionProgressDialog.Designer.cs
generated
Normal file
82
Hyphen/Plugins/Forms/FusionProgressDialog.Designer.cs
generated
Normal file
@ -0,0 +1,82 @@
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
partial class FusionProgressDialog
|
||||
{
|
||||
/// <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 Windows Form 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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FusionProgressDialog));
|
||||
this.FusionWorker = new System.ComponentModel.BackgroundWorker();
|
||||
this.BackgroundPBOX = new System.Windows.Forms.PictureBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.BackgroundPBOX)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// FusionWorker
|
||||
//
|
||||
this.FusionWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.FusionWorker_DoWork);
|
||||
this.FusionWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.FusionWorker_RunWorkerCompleted);
|
||||
//
|
||||
// BackgroundPBOX
|
||||
//
|
||||
this.BackgroundPBOX.Image = ((System.Drawing.Image)(resources.GetObject("BackgroundPBOX.Image")));
|
||||
this.BackgroundPBOX.Location = new System.Drawing.Point(0, 0);
|
||||
this.BackgroundPBOX.Name = "BackgroundPBOX";
|
||||
this.BackgroundPBOX.Size = new System.Drawing.Size(200, 100);
|
||||
this.BackgroundPBOX.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.BackgroundPBOX.TabIndex = 2;
|
||||
this.BackgroundPBOX.TabStop = false;
|
||||
//
|
||||
// FusionProgressDialog
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.LightSteelBlue;
|
||||
this.ClientSize = new System.Drawing.Size(200, 100);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.BackgroundPBOX);
|
||||
this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "FusionProgressDialog";
|
||||
this.Opacity = 0.75;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Loading plugins";
|
||||
this.TransparencyKey = System.Drawing.Color.LightSteelBlue;
|
||||
((System.ComponentModel.ISupportInitialize)(this.BackgroundPBOX)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.ComponentModel.BackgroundWorker FusionWorker;
|
||||
private System.Windows.Forms.PictureBox BackgroundPBOX;
|
||||
}
|
||||
}
|
89
Hyphen/Plugins/Forms/FusionProgressDialog.cs
Normal file
89
Hyphen/Plugins/Forms/FusionProgressDialog.cs
Normal file
@ -0,0 +1,89 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
using Virtuoso.Hyphen;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
internal sealed partial class FusionProgressDialog : Form
|
||||
{
|
||||
#region Delegates
|
||||
|
||||
public delegate void WorkerDelegate();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private WorkerDelegate Worker;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public FusionProgressDialog(WorkerDelegate del)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Worker = del;
|
||||
Shown += FusionProgressDialog_Shown;
|
||||
}
|
||||
|
||||
public static void ShowDialog(WorkerDelegate del)
|
||||
{
|
||||
if (del == null)
|
||||
throw new ArgumentNullException("del");
|
||||
|
||||
PluginDialog.ExecuteOnSTAThread(delegate(object delegateObj)
|
||||
{
|
||||
using (FusionProgressDialog dlg = new FusionProgressDialog((WorkerDelegate)delegateObj))
|
||||
dlg.ShowDialog();
|
||||
}, del);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI Handlers
|
||||
|
||||
private void FusionProgressDialog_Shown(object sender, EventArgs e)
|
||||
{
|
||||
FusionWorker.RunWorkerAsync();
|
||||
}
|
||||
|
||||
private void FusionWorker_DoWork(object sender, DoWorkEventArgs e)
|
||||
{
|
||||
if (Worker != null)
|
||||
Worker();
|
||||
}
|
||||
|
||||
private void FusionWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
611
Hyphen/Plugins/Forms/FusionProgressDialog.resx
Normal file
611
Hyphen/Plugins/Forms/FusionProgressDialog.resx
Normal file
@ -0,0 +1,611 @@
|
||||
<?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="FusionWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="BackgroundPBOX.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="BackgroundPBOX.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA
|
||||
CxMBAJqcGAAAbxhJREFUeF7tvXeYVVWWPuzkabuns9PBme7pMDP2/Hq6tducUBEzGEBBlKQgoKgokpPk
|
||||
HAUMmFEJEiRHlZwlQxWhSFVUQeUASKq7vnftvdfea597C/s3z/c93z/j8yz3OeeeulVU7fe877vW2vv+
|
||||
FX18GV3yv//972/gf38DmX8DDBBaWu//x6iL732xeACvJ+N+XMsU9+G6iiX34lwFny+5JxF34zxT3IXr
|
||||
yaiDa5niTlxPRm2ixXwNI8diNfKxiTv+grgd92SOVNr123Bv5kglrsfntdzX8Rgi5Y5l1K9luo+vhXtv
|
||||
xXtx4P0WyfGteN2GeU2uq9f5mnmdRxf+Xr7PBb/m743e7xZcl+B77HEqMSav63v81zN5eIBsH0S0fTCC
|
||||
Rznm8/+bGEQp//X2fZLn9r0HpkVq+wDcOwDXOfrjuL8fU9v74bgfrvX1QTim7X1cvIrrHL2JtnH0ohTC
|
||||
jj0xcvTAcQ83dseI2NoN17pilOhCqa02aGtnEykTnVR0xPWOlNrC4ysYEVs7YOxAhLDjyxglXsKxjvY4
|
||||
d/EVxq9exLkKPv/qhUQ8j/NktMO1muI5vFZTPIvXVGx2xzxubouQcz5W8VXi3L/WBvf9JdEa93HwvXJ8
|
||||
sfEZdR8f/38VrfDeGYIBFQMEQChY8f96pKL3XI73t5Eq+NLFFxi/wDUbqYLPMS4zkSpYaoJMLMHxEoyL
|
||||
MS7CuAjjQowLMHLMxzEifx6l8udinOMjlT8b1z4jOjaLUiZmEuXNwPl0SuW5OPYprk2jVO5UXJtKlDsF
|
||||
51NwPhnniNxPXHyM8SMTlDsJow3K/dBEKvd9Sh21QTzmvodjiXdx/E6II3L8NqWOTLRxlOMtHCfiMJ+/
|
||||
GeLwG5RyUX34dao+8jrOETLysY/xOJ6A4NFGtRnHYbSROvxajVHtXrPjWB/V/ngM3mMMrmeK0e46j3FU
|
||||
y/khdx2juXZoVIjDOObAtWoOczwyhH9tJF63wa+HcUR0rfoQn49wX89jhmDApAMET3aezBfOElWfQ8jI
|
||||
x4gLbjSvJUPfe5ZS/nW+ruMMziW+xjHHaRen8HWncHzSRRW+ZyWlEFSNuFCOsQwjRymul2BEnC/GcaEJ
|
||||
On+CUuePYyzAmI8xH2MeIpfo3FFKmTiMOITzQ5Q6exCRgziA2I/Y5yIbI+IMxx4XuzHuotTXiDM7Me5w
|
||||
sR0jxzZKnd6KcQviKxunN6vYhOONIU5toBTH6fUYOdbheC1GhBnXqFiNY8RJjlWIlWasPsUjxwr82lYi
|
||||
VphjG3gI+cDDqIoDD6CTCB51nPwc111UYURUVy0zkarCQwpR7UY5tyMeWhyV8VhdiYdYlQs55lEHv16J
|
||||
hxxHFY8L3eiO/flC/PkXmDD38FgVju11ifnRcXXlfHwdX7Ohj+WauV4xD68hMBrAACBGZqVJLAGIAYmb
|
||||
9AYYNYAmI1gEPElwyLkFSMqAQ4OEwSEAqcLrDBCOChxX4DUABOBImWCAcBTjWpELAcdxAKLAgeOYAQid
|
||||
swChc0dcABznAI5zDI4coggc+4jO7HXgyMIxA0OBwwODAeLAcRrg+JrBgTjNwNAAYWA4cJwCQAQUDIzT
|
||||
AIWAgwHC4EBUG3A4UJgRYDDAcIFzAUYAhAYFwGDAweOXmNwOEHwsAOExAgWDAcA4aYFRfdICI2VAwtfk
|
||||
XAFDgwPH1R4UOPbAWITrDgTmdTkWcPCkt8fmPgMCBosbcWxAYEDhQh1bgPDkD69bQCWAUcH3AAAmBDA4
|
||||
ZlAwOFykDlqA1MAgkD8aHBcFwMUYRb8WAyXlGYSB8rUDCrOIAsiFkxYghjmYQQAQZhATzCCWPRggKQDE
|
||||
sgeHBUcACIODg8EB9jjLABFwBPYgwyBgjzMOHGezcMxh2YM0c5zZQWRA4liDmcOAwzGHAYgwhwMHA4PZ
|
||||
QwDCoDDg0JGBNZgxDHM4QAgwDHOks0W1AoWAwzOFAYQFRbVjCQGEAQGAYYFgxyRTBIA4tsBkrzYMYpkh
|
||||
Yg3PDg4QwhIOHNUGEBoA8XFgC8sYgUEck3iAXJwdqgGKCBAODPaaA0bimpFf3yyx3KQWsETyKiG9agRR
|
||||
ZgZJGTay4IglloBEJBaPDiQGIBYkzCBWWjFIwCDnHUAunHAAYYnF0uqYBYeXVwwOK6+YPQjsYYFh5ZVh
|
||||
DcgqMtIqgMOwh5FVLK8ADAAkDRynGRwCEA0OBwojrVhSZZBTjjWCpBLmACgYEIY9nJRiYJxywJDRyykn
|
||||
o5g1WE55pmDpxAzC0klGyxYCCmGJFFgjBkJgCwsGkVJWPhlQSDigMEPwdQMCzxaWJaoNG/B1yxD23IHA
|
||||
yaZqc10kVZBOwhRBTlnmiKSSsICZ9IolGAwZwJGqmBuAUumODYO0rEligUF4AjMwJMRDMEgk/kJmsWDQ
|
||||
Eo2BEQBiZRYDQ0bHImAQ40VYYoFFjMRiqeUkVvAgFiDMHin4D7qg5NU5K69SLK/Os/c4ovyHZQ8GCMsr
|
||||
AnOkjKzaawFiGITZw0kr4zkQZ8AaHJ41HHMwQMAcFDHHRpwLQAQcgTGqtefQksr7DJFUii3SQBFklGEM
|
||||
4zOU1wAwDFuwlHKjeIvAFMweSZ+hwWCPWT7psLKIr/GEl9HJJjPpRTLFbBEmuAOHsIGWUAlPEcCR2UsY
|
||||
r+HZQsklkU8CDvYaDAo+x8jHEhYsiIPDKbXpYgC54CZxEiDRZP9LWET5GA8SAUfNRp2lVgrgsGGNupFY
|
||||
7EFg0q33EInF4GAPEgw6m3Nmj5SRVgwQgMMBhM4edubcGnMDDu8/hDmS4GDm2FmzrBLPkQCHYQzDGg4c
|
||||
LKm8rHJmPGnEvc9gprCsUa1B4Y8tMIKkYmZwrKGkVOQxnITybJEmowQkARyGNZwB9/5CMYVlDwFF8BTM
|
||||
AhYg2kuwj3DskBEMIqUymGkz+QM4vKE215Rc8scWBN5zCCgAgGoGgQOGAUUUczxALuJBMHmNtHKT2Mss
|
||||
Me3MLv9T/yHvq4GSyag7s+4YxMorBgnklclkWf/hDbphEEirCzZ7JfKK2YMBwubcZK8ka+XlFWeuWFpZ
|
||||
eWWk1dmYOSjKWLHfUNkqI62SnkN5DZ2h8n5De42EnNJSymWnaspKVYvh9oAQI66zUelSiiVUekaKGUIB
|
||||
IxMoxGBrQLCcikAghls8hUgkex5nnLSpFgCIbMLoQRGMtTfSCckkWSjLDI4lDFgcQwgoHEAMi7jXDFgq
|
||||
AQwDlDlUzQxiJNbNySwWindco2AGMewhTCLnIrucZKopHVxjGjjOYqWne2OZlTIyS3kQMEjKp3mVSRd5
|
||||
Jendc0jvQl4Z9gBz2PRu7D1CWtcBhNO5SlaxKTfAMGE9BxlZ5Qy5kVQcmdK4LnUrnsOAhNlDscbJNWCG
|
||||
dK9hM1PKZ5j0raRrXUbKZaaYMXxGymWpvPl2majYfAMYzmPEfkKMdpBS3nSLTDLZpYR8cn7CegjrI8RX
|
||||
GGNtWCSZWVKGu0KyT7GPsBkp/fQPDCHZJjupAxOYY3cujCAgsNcBAAGBB4YChQcJAHJomJFYqYwAyf/S
|
||||
AYRBIeGAId4kSv/+pUwiPiRTXcQySErVQyTdyxIrxZks9iE+i+Uklql/sEFnmcUGnVO7jkEMOGz2KvIe
|
||||
zndYeRVqHuTqHWQyVmLKXa3DeA4Ol8Y1jGHDeg5d31CSShjDyCrLGlH6luWUAYmTU8qAB1A4cFRhFH9h
|
||||
GIN9BqdktQGXWoZKy/pUrWUNyxzKXxgJZc22+ItQl5D6hEvBKkD4LJSTTCEjlTkVa+WRfc2wSMQOAhAG
|
||||
BY6VmTZ1CW+kGRQCFiWTFDAsaDDJRTYZxmAgODDwsQp5zYzuvuqDFwWIMIgCCEstn/rVE/wvKSDWnO5l
|
||||
sy4ZLTbrDBALkkSx0AAkZLDYg9g0rwWIN+guxUuSvTLySmWunLyymSslrQw4rO9gcNiUrgOH1DnAHMRZ
|
||||
KmfGM6dxpfCXTN0qcMCAV5vUrctQGbYIxT5bu7CskZ6y1RJKslFsvjk1azNSobgnadognYQ1rK/gLJRl
|
||||
jrioZ4239hW+NmGyUyKVhB1CFsoySHqhLlmks8U7m2WyTGFBYcCgmMPc4ye6AoYwgGONapn8fmRZJaCw
|
||||
wNDncsxjdQU6LHy4rzk41Jn0pMTaxhILDHIeT3Rhj/NKbons8tIqOfkvzia2uq4BpqvqkvYN9RA26V5i
|
||||
sVE3KV6b5mWTbmognOJ12avAHtagW+/BwfKKs1ZI7UpK15hzl7FS4OBULilwGFllquNbLUBMhVxYQ5hD
|
||||
VcRN8c9JqoyVcAUMkVOSpj2VqHxHNQ2pgMcVb8lEWelks1GWKXjyZ2ALqV0kq9taQhkgKDklLKGq1+l+
|
||||
QoCRKcvkQCB1B1+UE6CEVKs13CKX3LGZ4OE4SCn71GfWsMET3oaXUwYoAIFhBwuG8Lq+rl43AHk6g8Ri
|
||||
gLDE8gABUAxAMrCJAQunfbVh/6bMln49kx+J205sy4l4EAGIbTOxJt1mr1KuQBjaS2ztw7aVWAYhAw7O
|
||||
XIV2EiurOGDKv7ayKt2QSwHQpnEtc6jKuK5teGCICZcRjGHklE7b2tStbQ2JPYYt8CE968IeB2BYn5Es
|
||||
5KVnoEILiJVPtvXD1iisrNJAEDmVyDqJt/CjklC+ep3uISxrxD5CGMIDwLyuJr8whvYT5thNeknDegAE
|
||||
QBhgeCkV2KO6kkHhmALH5txcyxyGURxAEiYd7eaGQdAweAFPcQaJiQRABCy+NqKMuwfNN/mSdBax1XXJ
|
||||
ZtlayFmAoAoyqQReIf/MNso7swWx2cbXmzBuxLiBiuARKpGBOmNaR5w5960lnLlC35X3Hg4gxpRzUdBW
|
||||
yrneEUsrXR3XmSoNDin+sQEX1lCgSLSKhB4qVdcQljApWm3CnZwS6WTqGK7abdK1oe0j+Ir0FpDQ7mHr
|
||||
FAYUenRZKJFRpkjnCni21UP5hqg2oVKuKgUrfU2Rx0gr0MWZJW+4xT+Ip/Cs4FKxBijOcCsJJYzAk9se
|
||||
B6bQEorBEUsqAclnAAwHn2PMzCAOIPkAyHkHkAsOJJpBtHHXIPEG/pvAkezTiguHXDQsw5M/D5P+4Nfr
|
||||
KPv0F7T91ALafHImbTr5qYppOEZUTaXtJz+jPbgn5/Qyyv16NRVBBp3htC2ndnXd45z2HuI7GBiuGGik
|
||||
VaIIGNU4BByqvuH7qZJ1DccavrEwmZ1i0y0GXOoXrsDnq93SEpKp9UMAkp6atcW7uMKt2UKDIa3fKa2C
|
||||
rQES6hO2MGelk/gJX48QOSSG2ssjm34VSRRnohwDqHSrffIr2RTJJWEFO+qwGasMDJEBINUAhAUNjy4u
|
||||
yiAaIEZqCUiSbJIhs/UX10ZCZV23nZyFtziBp3r26eWY/DNoTdXHtLzyPVpa8QYtrBhLC8pH26hwY/ko
|
||||
nI+iJRXj6MvKN2l15bu0AV+zHV97+PSXVAbGsb4jIa+4Wm6kFQNDwGFTuTFAkrKK6xs6S8WskQEY0lzo
|
||||
GwrFiGeSU1ZKxW0gYrylQVB31TpvwXUKRGgOdBLKVbeD0RZTbavZUUpWNQCG+oRt+pNza6AFGMFYR20b
|
||||
rvbgs02SgtVMIPLISSZ7r5NCfgzsEIDhfIKRRvZ+Mdc1sUGm6zz5LQgcS/jRgkIAEhjkqYQHWcIMgoVK
|
||||
HiDMIsIkGBkohj2Ugdf1El1MzGjiz0Ut8NIObwFylqqQnj1yZivtOLWYVmOSL64YT3PLh9OsskE0vawf
|
||||
TSt71UZpekwv60szywbQnPLBtLB8JH1R8TptrPqI9p6aR8dPr6GzkFGmWs6NiGzMjSnnsOBgU04eHLp1
|
||||
pAYznij4VbsUrm9HV8AwHkOZ72olpWzreWy60/ujEobbASOkah1TJDtkvZSSGoUU6eLahG4Tt92vcRds
|
||||
aPRT7Ru+30mkjxp1ylVXqB0zGCMd1SXEXygDrc20MdgX8Qv+Xi2XmFFENsWTP/36LICDg4Eyy7KIYZCn
|
||||
koVCB5BjLLHgAUxokIgncUwSeRPnKXThMAObhDUicfbrDCrkR+ExNp+cDSZ4l+aDFWaU9aeppb1pSmkv
|
||||
RE8c96ox+PUppT3MfdPwNZ+VDaTFYJo1lW/TzqrpAAnkDnyMbmEPDYjSQmI9B0lXbqa2kagDN66G26If
|
||||
m3CdstWMIT1T1lv49nPpk1JtIFLljop5vr0j1C3sGgpnrlVTYGgAlDbxzFXsjGslRDbpNo1k1TpZnVZF
|
||||
u1BjkDpFqDt4Iy2m25tvZ57FQ/hJb32ByKdIBjk5JL5BT/w0RkiARQDBY3U5g8KCxEosHB8ckgEgnkGw
|
||||
mu8cskeZQKK9SSY2iQqJF89oabCcwFOdmYPBMbt8GH1a1scAgwEyHUBhFpmD68woNvhYYiheHwhA9TXg
|
||||
YKBMBVD4fD7uYZBkn5xD5TDzJmPlq+Wu1mFa122V3IJDZ6rYhIsR1yZcZ6d0hkoKfgwMAYdtHjQySrJS
|
||||
vnlQvIUe09dcBBnlahTGWCfBIdkn3doRZ5wsW+ieJiuZbLYp7mmKMlCqHuGr014ySfbIsYirRURZJaP9
|
||||
RR7ZrJJNvVpgBEkEQCi2kOvaJ4iZ9oAod0wRjTLxhUX0OQBg7rXAYIDIsQEOAybHAiRRSReJBYCcB0DO
|
||||
CYvoURhFZbnSJJeY7m8y65Z1ylGvyD69ErLqE0zo0R4cn2KCMyjYfywHcNZAMq2F9LLBxxyTEB/SisqJ
|
||||
tAySbEH5CEitfoZpGCgMksVgo42VH1AuDLx4DuKUrmoh8Ws5zCInLaucGU/LUK0xFfCwgCmTxxDGkOyU
|
||||
KuwZWRWv1gur9sR0S1pWme1E+3i0uEgvMMqwVsIAQbJN7CmSfU5SrTbModo2dF3CyyeRRRnYIZldSkqk
|
||||
pFxyALET3kojCQuGhD/QZhoT3T79RR4FFhBWEDBY1nCgqJjp5JScOxYpn2kAknIAoUU3qV4swyDYJCHf
|
||||
MQizSBpIFEAMMFSWy0suSfsqE19DazyndvMwUTciQ7W4YgIm9ADDHAyOBRVjMPHfp69OfWYyWQe/XkOH
|
||||
kNU69PVaxGobANahr1dQ9qlFMOYzaR2AsKziNZoNxrGSrCfNwfEqgGxP1QyqNCwC5pB1Hbp9xGerdPFP
|
||||
eqhCq4hds+HAoddm+J4pBQi/tDUsUOLVehmXrEar8ULNwq+ncAuMbH+TTsVqlpDepsw9TqFNQ1es5cmv
|
||||
QWHTsNK/ZAtwqmVDt2t4QASfEBghFN9C3SGYZQ2KCAxm4iOEFZQE0oARcESSyYHATHRhBDk2rzE4LEDs
|
||||
1wEUJphNGCAIzyCZAHIMmyWcQ3HOBIOE5VYSLA4oOsMVMUkCHH7Jbiy7TqGXah8m/iqwwRw8/VlSTYUJ
|
||||
nwMZxeDYfXopALSNTqKn6jwq5hdQOb+A4uB5FAcvoK3kArp2z+O1k/AXRchYZZ+aT1uqptCy8tdoeinL
|
||||
tO4YX6UlYJHtYKii05A9vPDJp3OlCJiUVRtQhhFJ5cCB5kK/si9a1WdTtdxZGy9SEsaIZVRy2Sr7DNMD
|
||||
Jb1QpsKtfIUsLooyUNpo6xZwkUku6yTZJdUOHqrUARCh6c+1ZST6lUKjn1SoJY2qq9NiskUySV1BrusM
|
||||
UjpLMBjChFcSKMEQRgIJYDIcW0/hJj1PdgcCmfzWiFtg8DUJAxIHkOqcwU5iRQDBvlNbwSB52D3kGwGi
|
||||
DXxNNRPXDRz1cMWyqxT1jl2QPp9DIln26Gk8xzKkbLecmmNqIRdMm7ttWIzbTFwPlmlv59aSXKo6uxsg
|
||||
mUcrK9+iuWWDAbYe8CW9IL2G0Saki/PgcwI4uIVE0rjJ+gYX/tYBJM5rZOydsh7D90v5tRi2eTBUuy1j
|
||||
xE2CQT7ZQl5oChRvIavqrG9IZp7c+mt0w3rv4NZb+3USqlkvuTBIAOEb+FTxLRTd7OQ3HsFVn62PSGcK
|
||||
a6JDujQquqVdV5JJP+UzTHqRRR4U5n6RRzy5rWew19QEd2xgJr9nDPe6Bo+8boAxwwMklTPImfRMADkm
|
||||
AEFrhweKYxNhEiO9GBjiT1huuVRwWuVdquZ6VeE5sMBJOg5zvgUTmlO6LKtYXrFJXwVvkY2n/UnuzkVF
|
||||
fXf2V9Rw5iN025yb6fbZN9EdGGvPvYVqz7uZHlhchyZ8NpRKClHkQ2HwGGTXpsqPkO4dbsDBIJkLE7+m
|
||||
4k06CLN+lrNTev248Ryy6o/7qCxj2K5bxxqeMeI6hmENvQGC2wnELGM1XbRSx3C+wrR4qAZBv5uHbGoQ
|
||||
UrICCkm9pkxruJNOfvMB3QUbt4Rbk61YwqdcQy3BNgKG+oKXVC5zlGzHMNLJV6nTvYGWSebYS6RglrVf
|
||||
8OaYn/ruaR8ySk4ORVkmJ43kye/lkWUCwwAeADM8aDxIGAQGSG4098oxA4SPEQYgLZDmTQMINmczAMFT
|
||||
+xwDREdCdkUeRaWDo+Kia1Nx2a0z58uoGG0fx/CkP4R2kezTq2g9quPzIIFYWnGwUd9wcjrlQlpxVf3U
|
||||
mWJqOOMRempbI3ps+33UaEddary7HjXJfoia7XuY2h1qSq02NqMPZ44xPVfFaD/Zjur6UrwPyyuWWbNg
|
||||
3JdDdmVVTaOcqlmUe3IeFZ5aQpWoT1RnzFJpOVVDW4hhjOTCpLigF1jDMoZdi616oPyuHaow5wy2pGDT
|
||||
t6wJQLBskahFyKIf1b7tFwIl0qu2T0kiVKRDajW0X+hqc+wDrBwyT3LnHSw4rHn2LOC9gTXC/umuJVFC
|
||||
+siE9+ygnv4BEHaCW4ApAGiwmOsOAAICjNWGNWxU63sOXgwgLLHOAiA+AJKzLrQvEX+STAlLH5eYeFdM
|
||||
LEXLx2F0w26Hod6E1pC1mMQr2FRDDglApiG9O798DEz7DCOvGCAlp/Lo5jnX0aM776Pr1/831dr8Z7p9
|
||||
y9V05/Zr6a6d11GD/bWp7d5mNPyDHqbnqgRGfCeAsAzvM0MAUtoXgBlJX5aPpdVIBmysmEjb4HGyKj+h
|
||||
Y1VzqOIUnvam+GdZw2andMrWtYTIQqVoZ5BEG4jsD+VbypkdnIxymxbU3N5hvQNnmDIBw6ZYk12t0pgX
|
||||
KtO2GBca9kJaVfcpSZo1eIX0anPmLJIurIkZFm1v06YuG+SNcJBCovXthFZeQTGAeeJnOPfXHINYQCgG
|
||||
EBBgtBOeGScGggXKdAsKjB4k7j6+dhEG6QsPsgSAwNpvEw4ozCQCkrPMJFp+uZqJz3jFma4z50qoAM2A
|
||||
WWgfWV/1KX1R+Q7aRl5DHWMknuyDjfdg38HsEQME9Qk0L5aePka3z7mJGu6+n24DOOpsu57u3nEj3b/r
|
||||
Fnpgzy3U/NAD9MK+5jTqo15mE4bSr9fTDoBvGRhEADKd6ymIWTDuc/C9FiCztRQSbCUAs6niLdoHoBRW
|
||||
zYNiZAllwWF2EfEVcJFSdoES+4t4a5w4NesXHvkWcl3NluO4JhGtmfCtG7KZGbOEBYa0dFuzHbdqhEY9
|
||||
a6bTWzL0hJeWi9g7xGlWmzaNU6QZagei/yUbJB5AZ4jcPd5Ay7no/wwT3Uxe8RDeIwgo7MTXLBCYwALA
|
||||
hgWBAYwDBYPEfp0GCh/bqK5ZYjFAFgMMaCmPQOLAwtKLgRIBRPmTtOLiaSr4eg9YYyGtgi9YhJ6pz8qG
|
||||
GiCEKjnXLGxkBkg+3TH3JmqcVY/u2HoN3WPAcTPV21OLHt1bm17IrU+d9rek0ZMYIAfAIOkAYZklMRXH
|
||||
0+BLpuP7zQVYluDnWVs+jnZVvA+QYGL5deCujiFVb1e7SPMVbqcPuzeUKt6pPZ/iXf90oS5sZOaNs6ta
|
||||
+4Y+SbFKi7djB2uc4wU/wUQne47SWy/EIxjN73S+N9qukBbSoKFeYH2DGORgggNrWFYQIITskTLBwgAy
|
||||
ic37hSe+TGCZ/Pa1IIMsO7jJLCDxEiqAI2IInvz4mszXBCwXBQh2St8KgOQuQksG1lucAUg4PFgYHBlY
|
||||
xfsUlRJmoIBRSs4cpKxTXwAckyCjRpqeKg8GPM1tlXxwFCKxcrnCjTpJ6WkGyM3UZO9DdNeO6+n+3bfQ
|
||||
g1m1qNG+O+npg/dSj4InqMeBNmAQbE6NdG8J1n3vqJoMBhmF9+0L1uDoY4JBweBgkEwp7WbGmWCWBTDx
|
||||
a+FR9lV8SOW8Is5vn2N7peJdBm1LuVS3Tet4GlPozFOiAzZaPWeXkMbLQ0OLhl/8E/kEZ7K9f5CUaQBB
|
||||
st8oNswZimm+gCYV51AXiKRQ9NR34JDUqJnAaqK7iZt8ymd64tt73MT2EogndGAJed1IJgGLYQcBikz+
|
||||
MAojWBZRDMHnDmCeNSo+xT2f4mGByBloTHoqNukMEOyUnicAYZA4oBiQaLAooHh/IrKLgVKF2kQe2s/X
|
||||
0vrKacgooS7hwMHNhjMhcfjaUmSWlsMLsBfRwR5EA6T2PEipnPp0z+4bqR7A8fj+OtTy4H304pGHaEjh
|
||||
09Qnpx0YBB4EXbolKCDuQM1jOViBjflyyCgbY2hZ2XBaCEDOxc8y3fR3WaAwSJbg+qbyCXQMP68t5sGA
|
||||
60VJLvtkslC+Y5ZNt+ztJNKppoY/Z65NwS1prlVlWgpv0r2ayBqlKpPpVJdNchmjUABzdQVfX5DCmKsT
|
||||
GFMdvEKaEU5IIMkEiW8IKVRlgBMewD75nc7nCWkmvJvQaoIGgNh7zKSNWCJM7nQPEYPET3gDCp70dhSQ
|
||||
hHMHBn8fzg1IxIM0T2axHEByFwIYWO9tQkCSAIphFgEJRiO9dOario6jILelajYq22+YXiojoQCOuSgI
|
||||
fo7+qHUw0mzYs5DO5VYTzmiFWKkAUkB3zr8VgHgUnuNmehzM8czB+6n9kYepW15DGl/8HA069CKNmtTd
|
||||
dOiW8PvA62Tj/bNRNMyunOziY9pR8R48xxvwHmMAiCE0G6zCIJkKkMwt7Ucry0bSXtxTBT8Sqt1u/bas
|
||||
0/Z7x2ba+S+kXY2ZdtvP+HSrX+vg0q9uGaheGx23ascFtXRmCJM+6ifyTXhWCnm5482zlkHB0FoZI/UE
|
||||
p9NFr0dPc5nE6qmfML8+O6SkjWj++IkuPsGBQIDj5JBmAfN050nvJrJMfHPNAC9Mevs9FCtohnDXo9fl
|
||||
vT2DXBQg2G/qawYIxggsDjRnARhmlDQJZoGSAniOIn26vnKKkVa2Qg6TjKf055xBOjmf9qPDthgSrOpc
|
||||
AeodhYgiOnkOwaM5x0ZwSA+Xni6guxbUomePPk6P7bvDgOPlI49Qr2OP0+CC5vReaQcadrgDjf6gm+m1
|
||||
qkIdowp1jCrULqpguqsg8aqQdaoCK5Tg++ZVzqDd8Buby183rMFMMrmkKwx9TzDMENpZ/hYV456wrWbY
|
||||
qMBsnoxIbowsG5TJummRTNKuEXbMCNXmsD461BO0QRZzLB7BplFDFVk6UUX7ixSSDFCU8RFZokyvfZrr
|
||||
ApnS+KL5lckVzS/G10xAzQKGIeRp7jJEarJrUJjJ7P1AeMLLpNajnfwy8S0TJK/VONEvAgT7HtPwXhz2
|
||||
WN6nOmcAJFZzSKwbdS/WffjQl1fhQRYAHKhSn0F8zUBhkAhghFkSDJOQYF+fyaf96E1aBek0G5PO9Ffh
|
||||
ab24fDzWaUwHOFbR1+cAAN+qIq0pttKuPzrhAgqK98yvRd3yW8Bz3GPA0TvPgmP08VY0pbw7jTjUkd74
|
||||
6FVXJUeFnIt/p1AdN+0iXA3XregrqBI+Y3fFu4YxmEWmlHQDu3WnRaUDAJxxVFAx2S8u8vvGRp2wuhYh
|
||||
niG5k4a0advUaliok2GBjmun0B2m5skv4bJDUSEsaYRV0UwKXlYGSfYmwQhO/vgsj9fosWG1mSGl33li
|
||||
e4PsJrdIEzV5rZRJan8tdcKk9xNTP8UVKGKA2ImcKksCRya8Yxme9LgngMmBwV2LgYH3NNfdyB5kIzNI
|
||||
RoDMBygweRkkyTBA0azigMKMwnLMjGVUfvoA7T65GAuX3jILmbiFhMfPcb775BIqP4NNFGDky4oKqNey
|
||||
rvTU0mbUamlzG8tamHjGRZMFjakePqasX0FLeunoQ9T7WGMaVvAUjT3emt4ofJ6mV/Si1w/1ovsn3Uod
|
||||
NzehjlueoI6bGiMamXhlU0PEY9R1W2Naue5NOl8JfwHjnQsQbIBHmQ9pNQ0AYZk1D4Z+XdkoOlz+AXY7
|
||||
tV5CtqbxK+j82gddZwgt3PHyz7jaHDpPQ/epL7Ip+WNbKHTrhGqliFonNAu4tKaZvHZSe4OsjoNZDdJG
|
||||
PIA2skGzy1NbSRjzfvqpHiZrcrJ7WVTjhLdfK+9nR/tUNxPWP93lSa8AoJ7+Bghlwgjpo39fvgchjGG/
|
||||
lw3PKI5BMgAEH12WywDBJmwmGCiJYGYRoBgAOYbxcqyUTpzaQVurPgNjjANzcAtJT6R3h9BKSJv9SKN+
|
||||
fRbvjQJjj9mdqeGaetRsewNquqMBNd/1KD29uyE9k9UYxb8nqf3+ZtT9YCt69dAz1PloIyOrGBzjTrSl
|
||||
twpfpPdLXqEPEDOLh9D8ygk0t2gCzTyBqvzxofTR8QH0Tn5vGp/XjUbmdqIBRzrQi2tb0LKlI4y/OA4z
|
||||
vhWmfDFY41M265BZn0EGriwbRvvK36bTlZiUxkzLzht6swALiLBeIVNNQYpjqjlOmMA97e16BPeU9/n+
|
||||
ODvkc/a+KBabXZ/b95JHwJGe3cmU1QmTU0/6GACx2dUTNAZJEgwBRO6prxjCTsYgczQr2MmrJqw6j8HE
|
||||
T/z4Pp78Mtn9hPeACPfa958aA0OAklFiLWaJJQDBHrenGSAYGSjmmEcNFgYHzo0Uc2FAUoymwI1YgzEV
|
||||
6dNRZhET+495ZSPQjj6ZDkP2VDPTID1845yrqfGeenTr5qtQALyO7t55A923+yZ6IOtWqr/vdmp28G5q
|
||||
d7Qedc5rQH2OPWHA8RrAMbG4vQHHhw4gH5R0AFA64PoLeL01DT3egvrkN6YOR9GicuhearCvFtXLrkVt
|
||||
jzxJIya1NM2BpZAFO+FDlpUOgv/AakQAZCaA/GXpYNpT/gZV8C8r0Zxnm/ecRHLZobjlOoAitD8oJnDN
|
||||
cVLhDZVg9cR3DKAnvtb9yZRl8AbpRtVMOvN+sRzJpNmDwY2lijzJZeLZMWj28PSVJ788/YUZgs5PTtzg
|
||||
ATI8+dWkTrmJ7L+XYwErieRrMdnLpppJX+1G/jp77FjDswcDw93rgGLAYl7H9Zz+8CDNEh5k8b0ACD70
|
||||
8ig+2+80AwSNgjx+jZGBYo5daPBkYJq8kxuQLRKAcI8VF+WG07qKj+gw2sYvnAWQ4FvuQPr28T11TevI
|
||||
PdtvpPtQAKy7uxbV33sHNcu5m547XI+6HH2U+uZjYhc8DeZ4lt4uam9Y48OSjohONAnxdtFLBjhDClpQ
|
||||
59xH6JlDd9Ej+26gWrv+i67c+kv6zbof0S9XfJ8e2HUbvfZxGyObSiqm0I6yCQAIViM6gMwSgJS9DoDg
|
||||
F6Z2uzBNdsnVZ7KeQGoBrh8oKnCpfh876QMYIsMb6fWQntSZmngSh6d8ukTRgAj62kwwp93TJAZrcD/Z
|
||||
wvFFJ7F54toJGO5z52lPcpmQcr+dpDwh7cS3r8uk54ltAcWT3D3t+Zq57sBgvod8vTBCuMcDRUDiv4cG
|
||||
iAKKAKxGgHzFAJkDMGDz51MIHg1QEObcHXugOOAwYAyALNvkVTFApoBBRprUrgXIsACQM8w8pXQnAPJk
|
||||
9oPoq7rOggPV8fp776TmKAA+f/hB6pL7KPVz4JgAcLxT9LIBBAPjPTDGm4XtaBTY4tX8+vTC0TvpyZxr
|
||||
6b69V9D1u35BV2y9jH6x8Tv0szX/SD/64m/ox0v/nu7dfguN+7i1adkorvgEABkHgAxwAOmCYqJjEACn
|
||||
onxyaJWWviE92VWPj9fuGfL8kcH1IPhmaSLa2z/BE1kXrZkzShJ5Wsqklyeyfvp6/S1PXpEn7qnrJq4H
|
||||
Ab+HPGWjJ7xM1DDJ/dNcJqWb3DLhzesyIc0kd09w9T0NGNJAoYEWXjeAUu8nTKJZRcBVXTbF3ovR3FeO
|
||||
0QHPjA4gsQdhBvkK1WgDEGy+ZoJBgZHBIYA55a57ACngOADlVa0DQCY7gLDEEoBMAoOsQvKKWamI6sy/
|
||||
hZrtf4Tu3nWDAcejDI6cewCOeqbG0T+/CQ0Hc0w40Y7eKX4Z8RK9XtSWRh5vhtfqU9fcu+n5IzdTi0N/
|
||||
RtPif1Gd7F/TtTt/DnD8mH616Xt0+ZpL6bIv/56+u+iv6Hvz/o7u/upmMMgzpreopPwj2l72mgVICXsQ
|
||||
Acgg2lM2HgD5xBe27CQPqcuQoYkzMbbQ5K75LEuQHEnTaTInKhsjUsAbR6Wv7RPaTST/1LRP1/AE5gkc
|
||||
nuj2jy+TXT2R9RPbTVSZSEEyuQmsJ2jiCZwGAs8IickqkkdJIP9v8SCwkzWlJq0FByYzJrAJDSg3we11
|
||||
mfD2Z7bSyl63rBQDwlw376veX58zQNAhnhkgR2YDDNi6Mxmn+RqDRUY+FiC5YweavKo1DiAjnAfp6Rjk
|
||||
QzpctQJLR/jrTtDdC25F6raB8R2Poa/qqZx76QUwR/e8RjQQadxRSOOOPfEMjTneEv6jMaTWg9Qr7z6A
|
||||
pw69fPRWeu7IjWhW/DM9AnDcmfVrum7X5YY5/m3j9+jnAMePAY7vLf5runTOJfSdGX9HdTbcDAZpaWRO
|
||||
SdkkMMhYAKR/AEhJD3iQgQDIa1QJAMXaXWtprbedhPGTWWtgnSEJUkJkRaSf3eRPPvm8pNDgEJmhns72
|
||||
6+wf3U60TE9oecLLxJB7eSK5CcNPU/+z2IlpQefuUfrevmavy+T2kzLxM8rTOrBCeN8woe1klve0/xYB
|
||||
QPgZZfLH4HA/h0x+Byx/rwNM+BrHHvLzC6AUg8R1EMMgPYiO4LPET+IjyyRO4ZiDz+XYgETO9bG9L69q
|
||||
FVrKPwaDCECYQYZCYn1AhyuxBuMUNpQGSO5eeBM9e+Qxqrf3BjDHnfTCkfthyB+GZHrUMETvYwyG2tQV
|
||||
waDobuIumO/bUDi8kZoBHA8DHLdl/YL+uOPH9Ouvvks/XQ9JtfJv6LufX0LfWnAJ/d2sS+iSqZfQX0+6
|
||||
hGqvuxktKTBfeIKWlL1PO0rRfpIGkAG0u3QsGGSSexLpJ2+gd/mj2ieWomgzUZMTUCavu8/9UfwT0r+H
|
||||
nnDh3nCfPEXDUzP8HPK17insmcFNRD8RRFLI5HfvlZyIfsLIkzhMVD+J9eTyT3l52suEFmC5p7abwB5Y
|
||||
MnHLIGmTk1tA6X62ar5HAKTuteBWvzv/nuF7W5Zx97l7Uyyjo/dx55kl1j0WIIdnYZJjAvvA5s/mGOMp
|
||||
OXbnfJ0nO1+X13CeX7kaBbdP0PekGKR0CBoC36NDqEOcP4WdDvG1Tec3oNEFPWk8slwTUbD7sLwfTap8
|
||||
lT6o6EEfVnSj9yq60PsVXcEirahH3j3ULbcOwMHZqBuo6aE/0UP7f0e3Z/0b3bPnKro761q6dfcf6fpt
|
||||
/0VXb76Crlz7W/r98l/T75b9mv59wa/pPz/7D3pow7300acv4Bc1mYrL3qXtpaNoKdLQ01EHMRILDLIc
|
||||
kisLzFKJWoinYvfHC1TPv2z+ZaKgKH9wNUHCEy78Qe396mlo/lj2681r8kfmP5r5w8kfz30PP4Ht6/ZJ
|
||||
qH4G917261T478ETSH2t/3nDzyA/ozy19ZPa/Ezma9y/yU8uPcnCz2Mno/xbwvcOjBN+xuh3aH6f+t8c
|
||||
jmUyy89hf2/8uv6Z1L9HASHcEwBvvo+5R/9OcZ7TD1mspsksFgOkOwAy04LhJIp5PhLnVXiNI7rHXcP1
|
||||
4iqs6oMeX4qJZjZPwMSbhSf18rI3KBuFtpOV6NStOkQL539Izy96mtqubErPfPEktfziCXr6i8aIx83I
|
||||
580/b0g9draiofmN0H91E8BxPTU5eBXV2/c7qpX1S7oahrz5rvpUZ/G1kGzX0V3zrqU6HHOvoTtd1J6D
|
||||
NvkFN9HY6S9QUc6b+IV8THmlb9Cm0qG0sATrUJDinQqAzC3pSWuQ9s0pHY8k20e4Dz4EISMf23P+I9iR
|
||||
X7Ph/lDump1s7mvZzyTeS75GJrNMdvtHS7yvAYSeUPb7B4DIxOT7cN3fG+7RoOGvi77W3a+/h4BU/1z6
|
||||
3yjv4d/HT1T9ewgPBQs2/XPa+/TP4ieqejjI95QHiX2oJH7+xPvo9zXH8u9TP4N/Xwf0cA9+RuNBmiY9
|
||||
iABkBiY+dkPHBPahz80xGEDHSX2eQ1UV2yirfDYAMcEAgwHCQFlWNoa2YHLmV+AjFir30fnSLNq/Ywll
|
||||
fbUAMR8xj7I2z0XMpqxNs2jf5pm0Ydlb1HDp7TSkCIA58mdkqq6kushU3brnl5BVP6X/s+1nVD/7Tur7
|
||||
dj06uB01jI39afemARgHYbSxZ9Ng2o3zssOvY9J+SFWl71I22GMl2IJBweBgkCwo6Q3QDKHc0glUXQoP
|
||||
ApCkSj82waCSSOFYgq8lj+3kt/ebiVwqwLL3yusCGrkmYPTATABLA9aDzwHPA9B/jQVZDOgYMAKyAHZ+
|
||||
kgYwh4lov85PomiSymvhe2UEUmJiy8MlE0Cih4awkPm53L/JA9p97wgECjzqoaLBJ8yWBnIBXk7fTAC5
|
||||
m2hzNzDI9AQA8FHJVS4q1bFcqzqA1xH8WiU+lAbHZyt3U075AlpTNpHm4Ik8FQCZiok4F8erwCJZZTOo
|
||||
qnwjUTn2zC3H7url2P6zDKxShnXopfhYs5JNRMVriYpW0Ne5c6npxruoe/7D9FjOf8GvXEE3AxxX7vgZ
|
||||
/WbzD+g3G39ID2XVptc/epxSJQBAyZsY38I4EeM7mOjvmDFV8h6uoVMXr2WVjKSvSobQ0pI+MOgsrzpD
|
||||
ZnWlJWCTbaXDqBDsUl36ISY2Amaej6tL4UnMMYOGwcPn9rhajg3r2DCvGTDwuR0N2PjcfE0MLDnXIBSA
|
||||
Ra95sAoIwxgAJiDkCWRBGgDlQJuBGaP7MCENwNwYJrR+L5mgbvI6cFlgOsbzXx+YOAl0O1E1wASkGuSJ
|
||||
76UZ2kkkA27PvsI09lp4GCSPhZmVCnASK5HFYoB0tQAxk12DQgDAIweAkBbY+xasYKJiL+WVL6ONMMKL
|
||||
S0dg8mHzBKRSeVxSOpI2l2I9OLI+R8vmU37pIsRCBI5L5lJ+8RzELMov+pTo+GIqO/oxPbGhNuTVvXRf
|
||||
9m8MOP6w7ScAxw/pX9Z9h/5l9T9R3V2302sfNKBU8TgqLhpFx4pHUh5AsLtgANVa8u908/zf0A3zfk03
|
||||
zP0VjVr/BK041JsWF/amOQa4XUzw8cqSfrQHP29F6URM4vcxoTk+wDEHg4WBAm9iAOPCXEMYkNjjFIMJ
|
||||
waDi6xIGHAY4DmgOYAI0CzxMbgMgAZkAzDJZeD1mNQNEB55TJe/TpLyX6c2DWCeztzUNy3qKvtz9KpUd
|
||||
mUjnit37eWZMspsAV7OgsKEFngW+AE2zooBA7rPvEUCq30eDOJagQbbWBKoAqMDCAbhaEvv3EsCrh0UA
|
||||
Mr7WvO5A5RnkBtXNu1gAgonpQaDAUIWJz8HAqOARu6RzAAwmKvFhNBUSWVRevhYgmE6rSl83zGFZpAfN
|
||||
LsEyV0zCVdD56/E031TyNm3G034zjjfj6b+5+HXEBMo78RF2eZyDP+r71Gjt7Sge3k7X7f45/Z7BsekH
|
||||
9C9rv0OXLf97+ucvvkX3ba9F4z54hFJFo6m4eARtL+6P9+1H47Kb0d9PuySKFq/fRm+ubEPT8zsbYDB7
|
||||
zAB7LIK82lAykI4ig3UBEqy61DJOCpMtgEWOLWgseBzTGJC4ax4oAUgWPA40DjgeRMJOBkACLAGSZi7L
|
||||
WsJSmq3C8ce0/8RY6nUEjZs5jej5fY9Qy6wHaNT7zWjr6oGo9eLfZUAoYLPHBpQOYBaE6nXFdgKOTOwW
|
||||
M5hmyJjJYpkZABSkZsxymv0CeDTwtCxMMmoAq/35AsgzgcvcYwDSBCY9AshdYJAuRIemOnZQjBCBASAw
|
||||
wOCRAZHlAnKpgoMl027Q2g7KL1sCtnjPAGIm5AyzCINkegn2v8IEno8JuaAEqwt9DKSFxQNoY9EYyjv+
|
||||
AbYgmkFlhyZSgzW14Duup//Y+kMjqy5f8236yfJ/oO8v/Wv6/gIuAN4CBnmIqotGgEGG0vaifrS0uCc1
|
||||
W3drGkDqtb2W+s9/kj7Kf8WDYx5+ptX4ebJLhlMJgFvNkgzSrJqBUmIjxSODJooAGGYbAxqARINHGMfI
|
||||
NcU8GY8FHErSWbZxjMQsJaxkQCXyjq8H1ll6tFcEjid33U0vtb2XVizoiW4hC5AgD5UcFN8lktDJwSAX
|
||||
hd1kcip2Ux5NS8J0f5b0c4GRtM9Lk6CRDxRAxL5Qe79q+L50KRezVmBBxaL8dRkBsggA2dTZAsSwggNA
|
||||
ghksINg7OEAYD8GBz9kwwX7CeoqKstW0v3QGrYWmX1AyGCBB24mpWrPuZ7BgAwVMTht83J3mF/ejjYWj
|
||||
KQ9POsqdRmUH36CHVt9Md+y6kv5146V0+dpL6Z9RAPzBEhQA56EAOAsFwI2okDNACocBIIMBEGzzU9yD
|
||||
blj82wggPxj5LXqg3bU0aHlzmlLUyTDHfAOOvrQDP19ByVgAAfLK+Je3MTHfNqN4GeNnDGgYKG5klnGg
|
||||
sWNgHHNsGEhkmgZPBiCJXDNsJHItSDkBmZVwzh/hPuuHAjtNPPC8Zw4Gx4PTbqJXnr+fNq/oj492FDno
|
||||
vJT2UMZfCQgtcETuWcnngOW9lWUdDyAHMPFdXlKa99XAUL4sApb4NsdqGRIjQX4GuaZZzQPLMWDMeCIH
|
||||
Q6LEs5P++ZzEihmEAbIZADk4JZJKBhDlDhQCDAZEhQKEN9kw2mAOKsOeVsZwb6Wi0qUovGFHdhjoJSX4
|
||||
yAJIrJmQM5+a7BGDBGsxXPC6jPnFfQEQeIiCt9H28gmV5Uyguqtuohu3/Bddtvpvjaz63qK/pm/PvYT+
|
||||
YfoldOnkv6M7UQB87YN6AMgQAGQQANIHAOlOP5/13Qggl/f4AT3R6zYav6kNPEc3yKqeAEcf2lk8iAqK
|
||||
R9NZyDtv8ovZ6HMAKAYkPFrDz6NlliTLJMFiZRqzDoPHehoHIABHji2oYhCF84TX4fsUeCImcjKux15k
|
||||
/CCrGBwNtt9OD4y6jgb1foz2fzXceSXtiywgDMicBDRg04mHyE8F4FhguHNhG2EyAYtiNivjVCLDAyoA
|
||||
wmcOBYQCQH2vA2oAQwBcBBA16Y2/M1JSgBokpWYrA6icPkZiUSSxDIN0AkAmB4aIWEIAoVhCA4MBIQFg
|
||||
UBmyUchIXSjFh2yWLKT9JVOMz1hVMoY+Lx5Oi4sHAwz9aS4AMbcYa8N5VV8xAILJvfHECMrLfwtV/Y8A
|
||||
kPF076rr6U8bfkvf+eIS+qdFqJDPRoX800vorz6+hP72vb+h2wGgsR/UpeoTgwGQAbSj6FWaVdAhTV79
|
||||
xys/pfajH6Cpu9rDkPemjSyr8HMcLx6FlcWQVgyQ4jdg9lErMQGAICyr2MyYgCXl2MWc4zhkyxyAwDCG
|
||||
bVxYicZSzbGMAUg6cMTvWGkmiYIYQJI4YF8jALHjB1RV/HYEjrpbbqGH+l5Pb415inL3jDWeKfgcx0Te
|
||||
R8VyLkoyeJA4WSc+KiEBbULCZfe8ZHPyT7GVv0cDTGcAHZg8CFUGUOSkzxCq5IZNdCg/5QEpGUQHEPFd
|
||||
PtsY0vkpB5AEg9RxAPnESibnJYJ8gmwS+eRZwjGFYwsq3QJQcHCqdrNN15ZsQMp2PVUULzHZqf3Iouwq
|
||||
fo+2YAKuL3qN1sJYzwNIpgIcASDDKffYGwDIh1RxYBzVW3UrXb36CvrRkm/Tj+dfSt+feSn905RL6Vsf
|
||||
YJz4Pbpn9R00fsI9AMhAAKS/AciQ7MfTAHJT63+nIe82pJX7uwMYAym3eCiVIuuVKhoHIDBAJgAcDJLX
|
||||
MSLVa8KBBQkED5hilmBWimnQePCo9HJgGwcY8TOGgYKnscCRYECEBIFOEmjWYaBYsAQA7cgf7JmDwXH3
|
||||
5huo0Qs30rT3n6fiHPy7FAOFVLZKNCTAYhMLLsHgJaBjHSfHfAJCwKIkn5nMKptnn+SSjHCM4pMUTioK
|
||||
aDxrhMSFTlB4oAgzKdaKmC1Kv7sEhAKvlpLm6w5YBskAkI5EOQwQxxIMCBNaOl0EFKUARSmDAjUOE+sN
|
||||
OGxNYzUm4kqsuVpKZYVz6EThdDpa+DFtgCFnWcUAmVrcleYV9ab1J4bS0WPjARD84Q9OpIlTXqBHNt9N
|
||||
9yNbdQ8M+V3wHHUgq+5YczPdgwxX5zlNaPf8tkR7ulF+YV9kwXpS83W3RAD5zsS/oyefvp7GTW9IbZff
|
||||
TFfN/bl//Vczvk+dltSmvbt6o0VsDF0oYqNugcIgeRPLdfuufYB6r7qfeq28j3phLD04ms4cZ0kmUkx5
|
||||
F7DK4r0vUf/1D+HrHqT+ax6iwesa0LbsPmiKfpMu4CmfdxyLyfY9T9OynqcZWe1p/4GhdKoAIARwSote
|
||||
p8+P49OyCjubtS8c0451plV7X6XCA6/R2UKWdlaqWSkm6ej36dP9HYysEnDUXng1Pft0bfp0LhaT7WxJ
|
||||
z22rZ15n+fXyrgb0yY72dGjvaGS33oU/4fcJ3kdYyae0nTfKOj6C5h7tQiNynqbO+xrQc9j1svm22tRx
|
||||
w4P0Oj6ZKWfvKCwjYnkpXip4pP15I2jgJiyAW/Mw9Vr9IH2+sytV5b9D54s/pP3HRlCrlbXot7N/7P82
|
||||
f5x1OXX+/H78uyfg341/r2EnnaBQiQrDHCrTl2CwUPx1Mk+n0zW4MkssZhAGCNKrAgxTvGNASIiMAkuU
|
||||
JdhCA8OAYp0DxhoDDipciViBwGcgnsCH9JxYQieOT6UtheNoMZ76nwIgU4q70OyinrQKTJBVMIqqct9E
|
||||
0mAiSGkEffL+U/T6Ww3ozbfq05tvPox4EFHXxM55zxHt7o7P5uxG+wCwVfAfNy3+9wggv37lx3TL8F+n
|
||||
sYpOA//HJz+ibSu7UdXRkYZNhFUYHMl08fRP21B+1jCAiVkGMsx7FguUDqvr0Len/y39aNa36PK536d/
|
||||
X/gTmjS9FR3cOoTOnphIy3O6mknFk4sn2ccLn6X9mwfTl3m96M0TL9C7aO8XcPDqST5/E4vF3v2qHe37
|
||||
aggmNH8f7W+sxxm468kAjo1ot+l7JbV4+w7DJAwaAQd7FE4Bcyp44I5mtG3NADp5jOs/wQsFsNhrh4vH
|
||||
0seorwzLxV5kh56MwNFg041099qr6KYVWI+z5Lc09fN2VHLwdTwM+GutlGP5tWhvx+h32W9yA8raOJRe
|
||||
Xn3PRf82/znln2nn+sF0sgAPB+WXLKMEzyQSTzJ/UnMS4PgCb5Qud6ASJsrBBiDsQRbqNO8iAGTjKwDI
|
||||
JFfVVkxRxp7Cmu4ADJZQIqOYLayU8sAodsAoWgWAMDiWAxQOHMex/y+KgOXHP6VdJ/C0LBqIdeVY9gqA
|
||||
TAdQlhT2oc0FQygbT5STh8Ek+EUTnpy0fyTRvuFEewcjBhBlYyfILOzEsqcXPtW5Ox3FpNt+pDM8Trc0
|
||||
g/7zYbFhT054OX9wwu9px6pudCZ/DCa+lV7vbnwy7Y/XpN91tPHzbnTuOIBUAt9iJBgzAHuWt+iuRZCE
|
||||
Chx/nv8r6t25Hm3+sicA8hZNz37Bg4MnW89RD9Gb+569KDjGYV3MiPw2NG7e0wATgMZMkpBmzbfcY8BQ
|
||||
G+CoteHPdM8H11wUHFwvGZj3NI2c25x2rh1AZ04wO4UMm/idXcgQvpbf9hvBceWyX5qHwa9n/Zhmfdbe
|
||||
gqQk1Iv6rX8k+l026n09PTDtjxcFh/xtGr9+PVqI+N/NTOdAoYqyPpPnABSnxG0qPFwT6SctRS5xwe9r
|
||||
JNaTlIoBcicYpIMDiGMKBoQJxRZGRomUch7DSymwRhHkFIOjGMAo5GDWEHAsAzCwe/xx7N54fCFy8jNR
|
||||
1HqTViH7NBdP/qkACMfsoh60DCDZUjCIsvOGUv7REVRyaDiVHoJnwNb0pVhUX4p2gNIDryJ6U8GBHnTg
|
||||
UDeAowt9eawTTc57/ht/4T8ZcSl97+2/T7vvF+O/R1PfaUGFAKEFyDjaBumWBNT1r/6S5k9pR+WHR3sp
|
||||
xkARz/KHuT/zzMGT5tZ3f0dd2t9LW1f2xlMVu71kv2iewAwOfiIP3tA8DRyDvmxOr+1pa5hDwMGTucva
|
||||
hjTjw3ZUuJ/T0uxVON6lCrCZBgeDJMkcT8ysTW3W1TXMIeBg0A1c1YymvvccpAz+zSrbxseZwPHMiruo
|
||||
wYDr6bGXr6eGvW6gu979Awk4mDH54XDv6P+mjV/0hdziBIVNIvSB3NS/y5++9Z203+1PRny7hr/ND2j6
|
||||
By9QMUDnfZH4o2TngmIt3dUgrUOSufNspLN4mFcMkEQWCwDZyAD5MMEUznQzKNh0s5QycsoxhgGHk1PG
|
||||
azBzMDBEUqExkSXVcYADsoqZg8FB+dhWJ3825RdgE7cTI2kJinszi1AjcSCZg+NlJyCXjoNN8vvR9mP9
|
||||
aEce6hV5fWhHbm9EL9pxtAeiO23O7UqrjnWhL1Adn3e8I/XIalAjQH40/h+pzmP/QW1b3EQdO99Ol334
|
||||
j9G9Px/9HRo14BFIoVdReHzNxNfHRtGPpsX3/efgy2jSG83p+N5hkFcsx9iPMEBep5zc/hE4WHbc3+9K
|
||||
GtqnPlKtA4wkG5f9lAcHP5m1rBqyvAU1bnEjPdvyDurZsR4NX/+UYQ4Gh1TIB/SvT9loxKwutkVNzpht
|
||||
ONrHM0cSHI0W3k6PNLmG2j59B/Xo8SD12N7YvJ9hJDDTANSGRg1sjIZP7PrCAHFp6AL4sSRzPPkW9kau
|
||||
fz11f6UevfNaS5r10YsGXLWmXGH+3QwOlpf/Ou779MnbzwLIDDqbUHh4yVU1/m1+Ouo7dFej3+PffSd1
|
||||
7Hof/jaXxn+bsd+lMYOb0KEdkMCcMJD2HnNsW4FCHUdag8T4q/YfKcQav6I7HFyGL6d3DQyy8WUA5P10
|
||||
xmApZUAhBjwppxxrsNcwksqxRiGDg2UVM4cDRwHAUYCthfKxOcSx2VSR/wntL5hA604MoQVgkRlF7EXQ
|
||||
BsJyq6grzS3sTgtPdKelJ8AqxzkAnOPdaFlBVxddaOFxAONEJ5pZ2JGmFXWkRutuyvhH+OG4f6AHG/wf
|
||||
6tvlblo0rRVtX9mRrpl6eXTvzwCQwb3q0YHNvQAOpEURFwrH0M2z/y2675/fuJTGDW1Eh7fzhOfslw0G
|
||||
yHvbmxmZwU9UBgdr84bPXUsfvv4UADXc+JWJ+9EjBeZIgoOr/I0fvY4G965PS2a+TDvW9KFP17WPwMHe
|
||||
od2Au2ntku6QG9KU+S69l9XGyKokOBouuJ0ebXQt9e32MC2a3oG2r+lHY3e39uBghhq8ogUNfvVRAHio
|
||||
Nf+uxWYGGFl7jqaTbqOmjW6iccOa0IbPe1N+9hgw+wTDPJ0X3u/BwSzxs9H/BNA9QYcAOm7DYZDcNv8/
|
||||
Mv5tftnnh/TEYzfSkD4NacmsTvh3D6Rrpv0y8fD6J/yMDWn/FvwOdSE1UWDVXQtxx4LNyHkW8YDSRVmA
|
||||
xjFIatH1qhdrYW0wCABygAHi0rSeLSQrBWBklFMOGIY1IKdEUhWyGXfgKGDmwK6NAg6wBx3D4qy86VSU
|
||||
/y7tPj6G1pwYRPMLexmQTAVILFA6Y9Kj27aIAcOjRCccIwo7GVBMRUxx8YcF/5r2R/ju239HdR/5HQ3o
|
||||
di+tXdQO9ZV+dB77Z906J574FiB1ofF7AhyjkXmDFwFIuiy7M+09+3Z9gLI29PZm3hr7CdQaaWkNjofx
|
||||
i27TohYtnfUSVeWBleBXxhxtlQaOkRtbUZMnb8CkakhbVvSiylyWeG/RFvysyd6qp1HwXDKzA96PPZCt
|
||||
vbT76v40cDy+vDbVf+waGtCzPq1b2gO9beORMXqHPjhkZZsx/kgADF35lAXIlqG+M+BQ4ag0z/Fo02tp
|
||||
xIDHMYEHYMsCgFOyaQDUH+ddbphDJNQVPX9CIwc0ppxtmNAu4/brmT9M+z3+cNw/Uv3Hr6axQ5rQ1lX9
|
||||
qTLvLTqP97t1bpxoYcANfhUFTwBEJFsy65Zs4bGtP8Imie4E1f5j2MdFNWS7kViRBzEAeQlGGC0eYr59
|
||||
ZsoBQ+RUEXsNllLKiEeSSjJVwhzwHJ455oE9BBxYe5L7KV3Im0wnjr1FOwtG0hps+GY6bSGxGBTTHEim
|
||||
FHcCYHQAEMUWFAwOBsl0MMhnJzrS96ene4sbmv+Cerxcm1bNe5bK0UpwAUVFbk25bEYsnf67008hsR6i
|
||||
g9gCiQEi8fb6Rml/2AbdrqQNSzvReTQHsldJwdAfyusfgYOzOw0GXEuvdn6AdqzuhawXmAZSLMkcnLF6
|
||||
uuPt1Kfrg7R+WTdklDjVbFPI2w/3T+utatbjVpo/9UUqP/Kaq/K/TXU33pTmOR55/jrItLq0elFXqjjK
|
||||
tR7bOvNmwQseHJwl6/T6wwDm43TQTGZbs5mX2yXKVjX84CZq98ydtOyzTvj5sKwAtZoVB7vSyK8a0ZXz
|
||||
Y3AwSG5vewUk2NOGZYSRMiVHbnz6t2C3+kh6IM2ODgpJX18241vR7/y/O19uGIlloO6qDh3X3GVgASGS
|
||||
Lm4odZ3YTpKZe0We6fS2A0hqYZJBNrQHQN4NUqqYpZRmDZZSCTnFRtxkqVhWiaRi5oAZ156jgNnDgSMf
|
||||
697zsHIR7EG56P06OpnO5U6iE3lv0N78UbSxYCC8B/qpTuATagvxIZyF3WhWIZbE+uiM4xBzTnSmBZBZ
|
||||
SwrAOjlt0k3f8G9RyyevoVkfNKGivZikxxkcQ2j/4c5p997y4q/ovdcaUf6evgDHKBejaeueTmn31urx
|
||||
G0i155AWxh8MXoUBMnxrfS+rGBxNUadp0vR6+JUWVJAN+QIJVoBOgWQqt8eUx+APbqO5k5EezRll0sec
|
||||
GeOq/jq050tXrrSPNH3lFlr4aXvDMtwGk1swIqMhb9n0VniEdlR0AFIR4GCmKQXLCXPI7pQvDbyf3huP
|
||||
yYyaiK34v0uDDjarMZWbNOSaORgEv+16GT3fug5YsyOAiQIlGGHjwd5pv0OWVlynmTvlJZhvfijYdPX+
|
||||
vGHpf5v2/46fsSV+Ru4I+Kb+trjvzcoudU06r93yhYhpBCBpEssA5B1rwJktknLKs4bLUHlgSJbK+Q0G
|
||||
h3gONuQeHNhS6BjAwdLqGINjmgVILtpb0FbClfPy3DcoL3cMZR1DV+6xQbQJBn1tQR9acbwXLcf69eUF
|
||||
WDfOkd8d0Q3RlVYf60YbscXotqPdaMTGB9N+sde1+hkN7nkP7V79Mp3DGhFuSakuHEyfbEuvtjdo+Qf6
|
||||
bNJTJlNWjZ4wCxIU0vAH++Wn34ve+8r+l5uMVxFnvACQI2CPu1b+wXgOBgfXORoNugHZq7tp3ZKOkCTM
|
||||
NBNoW37/tDpHi+dvpbGDG9GBr/rTOaS+bcrYpo1nH3g5rX2kNSTbF3NewXtycmAiLc3pnFbneLzrTfAy
|
||||
DWj3erxnIaefbQNm1vFh5vsLOJi92r5Qmz77+Hn4CQAOpn8f7tFFQF3nuBg4Lv3wr+mKl39KLZvWovcn
|
||||
tKRDYKTzRZw6fo8+2Zn+8Krd/HeQVk/SAUi7c4XMXLa9JtO9DVpdg5+xPZViZajvaXMtOSE1Hdbx+PU8
|
||||
Dgx6bY9mmXiND1gmM4PcQbThRQsQrmeUcGZKpW0ZHMViwsEYmjVM8U+BwzCHklXGdwAcWloxe+QxQNAc
|
||||
mYvq/RHUX46gxf0IniCH36ZKaOXiI2Po2NHhdCh3MGXnDkD0R/SlbGRrso++StlHelPWkV6Ug82r8w72
|
||||
osKcntTj81rRJOY/WIuH/0CzXmtAJfvgF+BzDEAQfVfHvoLvffapm2j5nOcAiCGmfb66aCR8CECCTNv9
|
||||
c6/w781PzN+O/xG9NaoR5e7EIn/4lAFbHo7A0WbTPfRkk+vo/fFN6dgefF9uaYHEWnmsV1QEHLu7DbVu
|
||||
cSstwoYSVUe5/oJsmEsZM4sMymoStY/cNesaeunZOqip9ADT2BWUk7KejYqAbbc+SM0b30QzJz2L1DhL
|
||||
HGm4fJs2AKAaHG8cfp6eQ3Zr+fzOAByD8h1acbiHr5B/Ezj49/bzQd+lP730C3q86XXU9eUHaPI7bVHQ
|
||||
HIxUPstErqq/ixRv/PD6LtLsrVvcTotmvAIvhe8r6WXc33ddnA6+9MO/oeda1qYV87oZGRYAotfr2ExZ
|
||||
6GGzx8mOA2nPEV8UsxHk2QF8nN/GJ+BBIonlALIPXbRpadtE0c9nqVTxz5hxxRzGczhTXqDAccxJqzws
|
||||
zGJwoGOXjlr24NYSOgyJdwg/w0E0K6LVnQ5OoPMHx9LJgyOxDH44Vv8ORQzGyt6BiAGIfvjktX4oGKJo
|
||||
iFaO2rPjzMdPIK86ocVk87Sn6PyOzgYgKQOSQXTHgl9FYOLaSOcXbqety19G5moYGAQpTw+SkdT189rm
|
||||
fl0hH9SzLu3b1JN2H+kegYMr5E2G3AL2uMuwx9fHuF5iC49zkIHjp7ZUyLtOaUA9X7kPHqUnnS+0mTDu
|
||||
CWOvUlU4Nq236u7hV1H/Hg8hzdvfsAxnxbrvfNTcJxXy1nPup44v3I06BDJdqDWFvrGJNBdZQKnSM5P0
|
||||
XfakqdFsW9UHRT3bkDkru71hQAHHzZOvoLta/57qvnQlPfTKVVT35T/SAy//gVo1qwUpdSd1AyjYw3z6
|
||||
wXPwEr2oYO8YOnucJR2zAsumd+mOhXEG6/LB36PuHerSttVImBTr3rT3ce9/Jv4236bO7e/Hz9gPUpEB
|
||||
Z/vVbKguaX8sLTiJBW9u+UHcx+bW8riWnZQDSMKDMEBeQKUaE9P7jCQwxGtwpsr5DclUeVnFzMHhPEcB
|
||||
0rnMHkZaMThgzBkceew9BCCBPegwGIwBcogBggo6dKmpoueMAbuNQoxAoJq+bwiq6YMQAwEMrqozSPrQ
|
||||
ZdMTprvDj2lYxzspZ/GzaEfpasKyyKA0g/77Tj+hob0foP2buhgDX12IbAlAYpgE46fYbS/ZPvJM95to
|
||||
8xcd6ZXN93hZxeBot/R+pEOvg/dohpaUQXjSI3vlCo8aHOwFXprwAOTVY5Aj+OAWBw7uBePjmTnt494q
|
||||
FP8ebP9nentMU8rbA09j1uC/Sa123e/BwUXAlqPqoO7SAGnbga66z+lg25H8MRIa/DOY9hW0tbww9j4a
|
||||
2pczWPi9OKaZurudBwenqq99+zf0wjO1IZueRnKgvY+ls15BUqEnqvD9kM4dhl1jxtKZAu6Clv0A3IIz
|
||||
ACSz6UbtBTJML0RjMCXv/X2nn+Pfwyle/F14kkeNnq65M+p+tl4mWg3qUtfSKR2vFFVsUyNA1gtARE5p
|
||||
SSW1DQUOKQB65tDgcLWOi0krwx4fB3l1GBk0A5CJCPRhMUDQ7k45AMgBDZBhAMhQ13ISAJKzvX26sXv2
|
||||
X+n9gXXp+Er4q93YlAJVce763X/4lQwG/d9g0BtS/i5ksAxALEhSDihHDvSM2kdYizd69Wrqt+jBCBys
|
||||
3Z9ofwMN6FEXtZYuaFuBRCvmouM4NGkO98whFfI23WubouOJvUNcLcWmiytOjKYm2+tEvVW1pl/l5Bhn
|
||||
sJiV3qB8NA/q3ipOCbfudycMLScGMPlc+wuP5Sj8aXBwNq1tvzrm3vxsMKZZLDaRPtzR2vdW8b/zv6b8
|
||||
HBm2h5CGfdVkw8qPjEOMx+aar4P1uIcrbJAhrf+SfmbTvz9vcNrv+45nr0BtqBVqQ/h3uJWbfO8ByNtk
|
||||
tusWb9AhF90yAb/OxnUTCKtYYIS1OaGxMwBJ13rC3gNOju3PKLFuB4M8j4mHiekLfswY7Dd04Q/M4esb
|
||||
Uh2H52DWYEPuax3IWB0TaaWyVkZasfeAMWeAOHMe5BUDhNnDAYQZBE8lA5ADjkG4H0sDhPuy9vanyWvS
|
||||
K+iPNvkdzR7/GJVvQJ/ZHuz7xSABi3yyrWF62rblf9NnHzZH+woyWB4gqJQ7oJwtGEZ/mvcvURHwobf+
|
||||
TI+vvSlqPHxmfG1kZm5BK0prKjnAXgYtIWj0q0bsLLAGXbePtGxyIy1ENqzyKAPJtt0zODrseigGB4qA
|
||||
9z13JQ3q9TDtXvcq0su2D2wN/II0Hkr7yDPP30affcT+A7Ucs6aF2eNN2ovajzCHVMhbtasF89sOBp1/
|
||||
RguQeVgzw8yhDXnDgVfD9/QyvWTa09hdY9zKS1lYZqr7dmEZj5/sfCbt9/1kixsME5Uf5W2WwtLmTPc2
|
||||
aHU1fsYXsAQbvx9Za5PWrGnbbuxSgbBYzXogJ8lkPU5ClllA2TU6xoNsSPMgAhDoft9gyMDQzCH1DWkd
|
||||
Yc/BBUCEl1WKOVApt8VASCusL7fSyhlz7z1EXin/YQBi/YdnkJzRCYnFDAKZtY9lFkus/tRv2R1pBv25
|
||||
xlfTyklN6cw2llcMEAuSfkvidnhr0G+AQW9Dp3MhS1DZrz4BBkHrvTDJBZw3W3ptWp1Dd+W+8sXD1AxG
|
||||
deLoRqil9EYzI2fBbEWeQbLyWM8IHH2wscSL/e+ilfM7wKeMoeMA4aJDHdKZA+C487WrALxaNG/Kc2gC
|
||||
5I5j25I/B1ku3Vs1eF9L3HcbLZ/HWS4GnG2kZCm24VhfI6sEHD12NcK9t+Ne+CRkxGSdS+7BYXQDunK5
|
||||
I0DaR34w+R+p8QfX0goszebs2QWAiYGy8WAPWpj1IvVb9yC9uqYufjbIrONsumX15Tsw3ekG/XnUVNai
|
||||
eHm2UMBlQcJLBDSDmL8Nkggr5nVBXxfA6QAS9gmw/kWDQwBi/I8CjSyPtvJKr78RAGHMbNIBkPXtMOEg
|
||||
a0zRL+E3fJs6s4YrAJ5w4PAZK6l1JH0Hew9hDpfWTQMI5NUhkVcCEGaPcYFBjAdBR6/xIADIPnT1eoAM
|
||||
gEGPq+KXD/g2dXvmZtrxWWtK7e4BBuGwMqv27Ljafvmg71DXF2+nbctfQhERWhx1EgOSQlSWldwajmY7
|
||||
aR+RVK60rHPjYeM211H/7lj//Tkm5zHIG1NstNV4BsiMYx2jxsNkhVzqHH49h+vKZXA0a3Q9vMeTlLOl
|
||||
H1LBbPgtQF7b3ypqPOw2Gx859xKbbi5M2gZKs0oSAJmJ1hHdW/XM5LvsvaaJ0qaVOXitS8+ldaPeqpo6
|
||||
oPX1P03+F/pybif0X7FsCsuVMxn0Hihg7oJ3ucB+RS1lTt7LGbKuLz1A21eB2bn3zDVn+k01ZHMNv0+A
|
||||
W8kpG21o8KRtvJFhIw5Iac5iJUy6A8heBkiSNVRl3BQAXbbKtI+IIWfm4EIgg4OZw9U7IvZgcHBal+UV
|
||||
vMdRxx7Ge3D2KuE/DIMogBxgcMCke4mljXr/DAb9MhqFvqtDyyAdGRwGJJZFLpv+D3GVFgZ9ZL8HKGdz
|
||||
J1MjsQBh9kDwyGwCoCze1iYtWyVdua1H1KbnW92C4mEbSKuByITZGkqIMf8jcNQZ+kekbG+gN0Y+DmnV
|
||||
y9RTbN+XjQGHm0WNhy9PqEcj+z9KOVu5T4yXEHPR0aaO3zj2XNQ+0mTYLWgHeQygEzNv5Rinj/OzhlO9
|
||||
yX+I2ke+CSS/HP99Gj/sSRjvwc7P2PRyukH/ucl6HdrGiQa7ZFlAkunekWhvydnKfWJhpxntW/zS5kh+
|
||||
2YKnZRCbTTNfo0Gi2UVkWY0ehBnEACRhxM0CJ2YOBkaGVC46c22VXJhDSStT75CiIGetAA6uexhzzqld
|
||||
1D4OJ+WVGHQABE1whCowHYDEEg/CDLKfjbpIrIGUs/3ldBPY8t9o0pCH6cRqdCnv6ekYpDsmw7Pp97b9
|
||||
NX0Ir1IAAEkh0cosyyIitSoPD0gz5MwcXRY+Qk0bXkMfjG9MR7b1gj+QImMAST5qL8mu3GSFXDPH7ROR
|
||||
Sm13JbVrVYveG9eE9qxncHCdBMBAPYXHYhQzdVcue5tnu9eB+bWVe790GOAoRdNlcrFT4w43mCbKAtNE
|
||||
6ZjGrcc/gyZSTiU/+vaf6J8+Dj1WFwPJb/r/iIb1ZcDhIWMYZCLth2RNfo016C3xfbHkWTbDAEj25w3K
|
||||
fO8b9t6wUQYzCU9+t3GG26ZJ2mSM/JItm/y+AHZZgNRlAmAkFe18i2GQxok6yILbILGeg5bHpDzB9Q0x
|
||||
49JwKMBQRUAx5GngkJSu1DykYu4A4tlDah8ue4UCYWTQTQarBoAYicUA4cVTSKPuxq6I81+ksT3up5ea
|
||||
30jtm95AgzvcSas/fopOfgX/kcUAsSC5sLM77Zn7DI3tdhe9hOa79k2voUE97qaVc1tT5aE+jkFstd2G
|
||||
YxIwyIJ9bSJDzuDo+9UT1OjxP+Gp/SDtWtOZzhyDsUeBMbSq2JaVTXk907pyH3ruz9R45M3UaOSNVH/4
|
||||
dfTQsGupwSvXUHPUbl5+tjaNHtjAtLMc3IJ1FW4RF+8gyWY+hYzUuePjIFN60ZhBj1H7tnfQi23uMCZ+
|
||||
5XwU346yQXdr7JE2ZlO/a21v3NsQ99bGvbXdvZ1wLxt061MkdcyA+RoeJntTP5r8NhopsUjshr6/oj/3
|
||||
/AVd1f1ffNz53BX04HN/pNbNa0EK3Yc1G22RmcK/363ZP48q/q51/dCq/jj256pD7dvUwfetTysXdEGr
|
||||
DP4dqojJGbFd6/qbe9u3vQs/o7131YKuaGK0e5bpMIBw+5gJYNL2NHOtM+mgcYziwWSZpno/ALKhcUJi
|
||||
CUD2YlJ6v6GZg4EhLetSJYfnMLJKSSupluuah24pibwHACLyyqd3xX9IilcAkqyDCINYgKSy+lM5Cnb7
|
||||
FrenbZ89ayJ7wfPolulEF3YJOCxAUrt6UPn6V2jfgja0bWZLxNOUPe8ZtIz0pHP53IoSqu2WQSAXILn2
|
||||
Yh12m213RSsBB2Y1oyfbXE+9O6L9fNGLVHWEK+aYHNKmwjLLSK1RtOBwh6grt8miO6lF4+tp/NBHafLE
|
||||
5vThhCYm+Hj+lLa0fukrAEYfZG6Gw3PYhkhOFVuAWJBcwHkpCqjZG3ujA7ibiaz1vakIDHvuhOzUYouP
|
||||
3ChZBnOfvbEv7uuBwINiQx/cOwL32iZKK8VkVxcLlrNgkuN7R2CxV0+0y7fHz9fKsI4Eg2fOJ+3oi9kd
|
||||
aCu6kHN3DwWw+P3cphZFb+FnHAugDcDr/HP2wvftj/6w0Wgv4e8R9iBj4196+DXcO9Dcy5GFe4uhIrhd
|
||||
JgKHA0vYismtjfHbMVl2McBxo5Vowjpq5xm364wx+1iAZwFynWp3NwBBMW0vJqSRVDXJKgUO00KS8B35
|
||||
3GfFWSsnrYw5d94jqnuIvHL+w7AH6h8mvSsZLPYf4kFEYjmTvt8xiM9kqYIhFw1RVTfLcbN6u+hlluZ6
|
||||
qcXZLDbsJqslBUTOXkmwUbctKexH9h3tTM9uxweLujXkshLwmf534KlYC0/5Z6hkPzZmO+GKi1xgZJCY
|
||||
sAB5M6d11JXbYOJN1LvTvfQVCo2FKHgWAOQchQB8OUBxtoA3kOAMGBcZ7eItHg1AEkCR9LAd8VR2/kR7
|
||||
FanQh9Eu8LIsY8EhXsX7FsmAYTyPHrHK3LFUuG+kkWQcx1FnKdw3Cjvnj4H8Q9cDJrxJKZstk+x2SVKg
|
||||
1NX8mo9DS4zdiywRzqsk08oCHAGL3+wvucOMbMXkd8yUzc3d7pl83QGEYoDUcgBBUc5kqRKtI7ISUNrW
|
||||
PTi4Ss71DpZVTlqZlK5tZTcVc9exS7lszNFWYsy5ai2JqudS/xCDzgzCNRBJ80oWS4qFwYfYinp/W1Xn
|
||||
9eoaJHsAFA+Q4EcMQAxQbH2EAbIt50U6i36l8+gqzsvDjo/ZLdJkFWt5Bkdb5PKnvdOE8nbCd6DBz1Tf
|
||||
izgCQFKGTUamtazXH3odjRvSgA5v49WLnOmSYFDYzJcJV0Mx4DCrHBkgtjIf2ES2LrJ1FAsSHLNXcX4l
|
||||
bGuk2lmcBAtbHVmwSNg9wmQpsewZpljGAMBtiSRgkA0s/EYWNjPGQLGbW+gtk8KxSC07xrvECFg0aLw0
|
||||
M/uSxRv8+e1j9WZ/nj2kRuPAYUAjNRsHEONBIgYBQNaBQbIZICpTpbtyfWduDaZcah7STiLSyrSUSOZK
|
||||
ACLmXKrnCf9hCoTMHlxF14VCYRAHEG/UXdsJCoYeIGg94fYTu7GDYxLjQxxADDgcQAxILJPoxU6ZUrkC
|
||||
jjbNb6BP3kSrxFfdACiWYsweOmybSgpschj1h6Qhb/jKtTTp9SZ4Cvc3G2/rbJcFhwMJA0TAwuliYRJh
|
||||
FmYXJbsMgJwEE0aRjJeMfpmwAojvAXOMYhomTdOkbErhzg0gYilmWvMdUMTHSDey7CfmQeI24tN7i2mW
|
||||
kWp+AEliDzK/JWw6w5jlx1562fZ+G1JrCR5GDL4UNL2pNwyCj9NIB0hbCxDOVPm1HJLKVc2HXlYlUrre
|
||||
d3DWSkkrqZpHqV3OXIm80v1XSQbhPiyXxTI1EOnFUgxierKkYOj6skxvFliEwZEtUkvLLAaJAogrINKe
|
||||
rhetc7DneKrbLaaoOPktLN7Z0pXOHmNw2DSwbUuRsD1c3PD4BYp/ejtQzlY9/eT1tHAqEgNHuNquU8KO
|
||||
SYoViyiAeLklbGJkl5NhRn5ZmWUjnMuy4Fh2yXp6Zo7kxnmyN5jsOOmYxXkUzy7etzimcW36fs8wqeRr
|
||||
ZkmyjGcWu5NlDB5bkAzVezmXPZTD62HzviDVYnCo/ZZV9izaGRMbC9YMkCxMxqQZj5hDKuUupetb2Nl7
|
||||
sLQS7+Eq5gwOn9aVrl025wIQAYfzH4fYf7gmRc8gCYll6iA1AMRV1WMWYYAwiwAgWeJDRGa52oi0oYBJ
|
||||
9HoO7Tk4lftE86upE9o4Zr7flA5vBTiwkyGngFMq0xUaHQNQPtr7TFrLevs2tWjDEqxRQS9VBBBs3h2W
|
||||
+wpIkqP1JlZyOYCohkjPIsImEWhEhgEQvMJRNp2Q2orfNC8AxjRPuuvGqwjLuNZ8myJ2rOIAo9PGUqi0
|
||||
CQCWWipjJuDwnsXJK7/tq3gZxySugh/kVtjhMgaSYhjFOsG/aLaxvWRGqtUMkDaYQJiMBiDSW3UR5vAF
|
||||
QU7nqjb2yJgracVrPo4max8KIKZB0Rl0XyQUicUmXQqFXCxUEov3yTIVdRh115dlAeK8iMgsY9gTAFHF
|
||||
Q/Eho7+sR23m30EtZ8FjTK1DbUbfQU+hQv58qxtp9IC6aEdpjXoJ9rfCgi4DDKmVGJBIk2NodmRG2ZLd
|
||||
mSbMepyeG3Q7PdH1OmrR8Ub4j/pYINUjMvLVHhwiubQ3CSAxvV0ZDLzsxMLehLdUNaHll7CK8SfBzItn
|
||||
icBiAOEYxm/JGnacjL2KkmOuai+A0ZJLgOIBk/AphnX0tYTR98xirieYJPIt4TXZP9kDyvgNJ78EOGZk
|
||||
b4LxQI0MwgDBRDSGXKdytecAc3CPla6Wa2klLSXGnOuqecKcY2FUXD1Helc6eDMxCFoXbKFQQJIASNT6
|
||||
ro06y6yED2GQqLqIrbKL3OpOBStepM+wwGpU5zvR/n4vjUU38MdvNDLA2I8NvisPYU37cU4Fs7RKFhOF
|
||||
TURyWePO6d/dqJEsm9GW5k9uRYs/bY0U5itIuyJrZmomIdtls14MkFh28QYSsomEjAISXrBlzLxjFGEX
|
||||
AYfZf9h7E+dRhFUMUESSBVNvJZlkucJotmWV8AzismB+sZcy+opRLINYprGGXfrEnJGPwBF2rExF7GKN
|
||||
vpViFlBBktniZACPsIgFjP0aZ+qdsQ8fc+GuZ2aQW2HSWzuAMGtIMDgcQGRtRxIcOmvlax5izN2CKJO5
|
||||
0tmrRHrXgEOneF2bO5t0sxbEZbEOOA9iKumuFmJ2WlQ+hI26MeucyWKAOC8iaV8jteLaiLSg8Hh2e2fs
|
||||
eYc9a5c8i3UkbenQlk50IqsHPhoefUMGGC796yvtaFNnoHiZFQqLwii8g8pptHxXHh5I5QBF5eFBZtXi
|
||||
+eOoYEvdxGW7AkB4V5Vg3u1xklFCn5cAxILFSS+RYcaLSObLgcEBhsERAcSDRTOMZL5sBd9ILC/FgvwK
|
||||
qyEDo9jCoz4XKebA4eUWT3Zbe/EG3/kZa+KTKWMBigZIpgyZ9iMBKNFu/VKsFIm1Mc2kC0DwlPaeQ7bp
|
||||
UW0kBhyulcQzh3TqclrXVc1N1sq1lESp3UzZK/iPqMVdd/HCEzFAojQvg0QBxFXT/QIq7UMMOMAgGesi
|
||||
GiSBQaLMFky7rY3YRVYhBCShVhL1b2WQWtI2Hy/EYubQNRNVgQeTpFwNJe7pskAxLAIjH7FJlPGS2okU
|
||||
GSVF7NjESDBn5CXrpVjFp4pVXaW6hFvsY9kVy7BQW5EqfthUTwHDM4kFjv/ICb+FqwaJkl2OYQQwkgiw
|
||||
Lf3Wqwi76HSyfS2kj+Od+VVKmSXWxRkEADGrAWVFIMDBzMG1jm+SVtp7pJlzaUzMlL1igAh7sEFXNRC/
|
||||
FiRRKGSjbkCiu3rZg4gPUdksXxNhqSWFQ10XkU5fMey249d6klAfseAQsHAB0RUTXUtKkkWscYfEUi3z
|
||||
aSDhLJdZtaiAwuvgVQXeSC3jTWzB0QIiySYMglBHMSwShQNLwsh76aVSw55NvLG3sitZdLTdxAIWxSpq
|
||||
Z/xQT5EMmKSN45SxTRGHeotuewndyAEopqaS5ldcjcXJsfCZLgE4MWiCHIuyZvu7ZcpiMYM8gwkEjW8k
|
||||
la6SSzpXunR1QZCzVpzSBXMIe5i15py94sKgrBjU5pxb29G9a6rnrv7BDMIZLHyGhQHIQS4Qsrxik56B
|
||||
QXwmiwuF3NXLMssBhAuGvh6ii4a6uq4yWkZuuW5f5UV0AVGKiKHSLsyhmMRU3tMbHK30ckXEtDqJXbFo
|
||||
QCJM4j0JbxihvIkHSrJmEoPFAshJLy+3guzylXlXkZcWlqiWIv1eSm7VVFMJtZUAmCDB2Js4Y2+WEcdA
|
||||
SRYlbT0llmDSGybSSzJgce1F5JdIMQcKv/O+Zhep8uOaM/vR5704gCQKhQDIWg0Q6bHiKrkLv2WPayfx
|
||||
68udtIqMeU3yStU+pP/KbNCg/YeTWAwQKRJ6k87yyrW8+45eAQh8SHZYQOUzWVlcE2GZ5dK9wiJRZT1Z
|
||||
POQWFI6amITZQ0muCByuVT7qBNYZrmRBUbWnqAq8VOOlEh83Pypv4jJfuhKfziAOIMabqGNXnZfiYwyW
|
||||
uI5iABJlvkLLvQWPAESuu0ZJ5VcYLKG1hX2MYxRv3FWtJQJKkGGRuVerJa1HCVX9KBvG5txnvgQYoeYS
|
||||
FSVrZBADEEw+053L4dpIjLSSVhINDtXK7sEhmStZTutSu4e192D20PWPTABJVNGNSQe7SarXt7xDYpl+
|
||||
LE71ahZhk54pm6VlVpJFki0ozpeYCruWWqpfyxt2llwJP+JNe9LA61RwemHR76aivYlhDw5hFM0iUjeJ
|
||||
mUWyXgwWDxh4FFs7kWtSYFT1FNPCYv2KMfDOp0gXcfAmLKtUTcWvUZFUsDP0BhSqpqJSxppp5AOLNKtI
|
||||
1sumjONCpTf0uk3fLS0On9ei2lx8Bd9e8xIs+mwXgMYApFGykn4LGKSVBQiDQ2esLgaOZFo3ac7Tah/J
|
||||
6rnzH7oG4tvcpYruJBaneaNFU7rdhMGRkFkGIDqblYFFTMrXZbWQqbKrDsPCqohFYNiD1IoZRLYSshku
|
||||
K7NS/thltWQBVsLAZzLvQXKJPxHznmyjt94kc7ZLmXnd2yX1E+NHVGpYGiKjwqMYewGKrtJLv5dkwZRP
|
||||
EaZxhj4CiE8RB4YJH3lnTb4Hg1vwFdpexLxbvyLmPnN9RVLJChDqM1yEYcTPiMlP7fsmgPitetymCxFA
|
||||
XCOiqZhL1kqq5npBFFfNpXKeYI+k/2B5ZSroUiSUdSAKIJLmzdRuImtDfLpXOns1g7gO37RsVobiodRF
|
||||
fPuJk1mqXyt4EbBJUmp5JmFWSXgSs86dGSRZVFRM4psd485gI7X8bo8MCgFLMPCS7UqmhIMvSTRBRmDR
|
||||
Rj6kiW1zZCg4xkyimyQlLRxqKpm7ioOx1x3GljmcBHNpYeNHnG/R/iX4j9CBHNLDIX2sWcbWS6T2olnE
|
||||
NVLKB7Xu72oYJOFBHIPsQXbIew61dNZsF8rVcgEIg0P6rdw68yhzJUtq2ZzrhVFOXkl7u0/vuhYTwx41
|
||||
NCrqQqFZly4MIq3vUgu5SCaLAeJ7s6SB0fVopRUPXQHRexHLIPH+Wg4gGhRgDsMeck3VS8LqRL3WXUCj
|
||||
jXzYj8vuzSXFRAFJYJIYKEnpFeomGUESNUFK93A6UGznsKujGIax8ks27fYGnuWYzn4ZaWVlWMiCBa9i
|
||||
C5Ghuzh80rAqTDrgeABJW750GssHF5l0sf60r7D4y69xSdRYbCZM+Rb2MQ4gqYXXqvUg8xMAMWld1cJu
|
||||
WkkADum3Ms2IzByq50rLK1MUVIVBs2uiZK/gPzIChLNXUgMRD8LySkmsNAYBSNiDmHYTaTlxRt1nssAk
|
||||
bNTTioauy9e3wl+sTytp2LuptSOqTuJBobNbikWkoCipX58CzpTlcgziNq4zncFmp0dVN/EbbNsUsLSq
|
||||
xFX4uG3FA8XIK9UxbPyJarHX3cI+Paw6h32fl63MS2tLBBZfhLQt+Mmu4nCuGyMzH1u/InWTRLrYfXx3
|
||||
2oIv/5HeNjPmvYlU8aULWbfs1wyQltDfzCBSDGSAyAIoYQ8lrXxRUBlzk9ZlaSXgEHnl1p3L1qLR8lpp
|
||||
UJRVhAkG4S1/TKGQ20xUR68vFjqjLhJL92V5o+66e73EkgZGkVjJTt9E6lfWjSiZFad+kxmtDIVEaU0R
|
||||
8y6bQbgNIWrqCJYO4QCORGFRaiauqMg1FLOfsBkBDp/lSqaHbZExblvh4mPcshKq8lKNF5BIF7HILOkc
|
||||
FnaRxVtSubdexfqRJKuE4qNhFNcHJq0uvlEyYpOwIYX2MIZF/EYVNm0sdZZkGjkuUDrZtb8LJFZDSKw0
|
||||
BmGAYLKZSrljD8McCGYOs0pQUrquYi41D1M1ryG1y+whvVc6eyUrCH0HLzOIAoe0mRhw6AVT0m7CxUKW
|
||||
VyKxVMtJNvsQllqJbJZeI+JbTxxITCOjtKG4uohpiWfTzj6Ej+O0b9jKNGS2vLwybKJaUwx7ZPIlCbkV
|
||||
1UqEWaROon2JZhInwdiw++p7cleVmuVXWguLqsiHrJeSXtLzZeolDjDSuuIkVsiAOYOvpFf4RC6dKk5P
|
||||
E9uUcGhv0dV5nTKOMl+q1uKzX+rzIy2ThO5j6Tq2TZUASWYGuRlZrCRAGBgOHGzKNUC8tEqwh9mIWuQV
|
||||
2EOkVdScKMtrdXqX2UMAIn1YvA5EFkupSnpaP5YAhKWWdPU6H+IzWcnuXikaqrUiUadvhnZ4t2WQbGEq
|
||||
qV/PJIXKsBvj7qrtUe+Wy3J5qWVTwL7qbirvFhRhbYkGiSoqSvVd/IkUFQ1A0jeN8D1eilECg2gmqWEd
|
||||
imqEtKBQKxxlPUqNDZEZ2MU3SUqDZFKCWXB4j4KMmM6GRWDxtRaVDpbUsPMmSRCFTyZWrS4syRyDJDwI
|
||||
A+RpPCUx2Uxgsu3GE5ljFyadCUy6XahSm8CTmQNb/9NO9DuZwKTbwYFJtwNP5R14GnNsx2TbjqewCTyF
|
||||
t+MpbAKGd3sXom0cnRGdiLZ2tLGFxw4YOV528RLG9ogXbXz1govnMbYj2szxnItnMWIBGMcmDnQqm0BD
|
||||
pgnUfHwgvb3JxUY8JDbi9xDFU+4c4waJFriGwKfTclRnP+viOYzJaEfVexHZLvg4LZ7HNYkXcPwCpRA8
|
||||
Vu99kar3ITCm1LG55q5X723v7uOR4yXc+5IZzfE+G9VmfBljetjrHVzoY7n2Cr7WRnXG6IjrHdXr9vzi
|
||||
0cl9Dd8nx3a05xydYZztcUpd4+vV+xHmdT7uYs/dNfP6PlyT4Nf52NwHGeWOU+66GeW1dIkFgKzBxPCB
|
||||
ibCGA5PABybDao5mKprimKMJ0SoEj6uftLHqCReNMXI8TrSSAyk0H9B6KzkeI1rB8aiKBjiur+IRHCOW
|
||||
P+ziIYwuvsT45YMu6mGUqItjjgcScT/OEV9I3IdjHffiXMc9RJ/j/HMeddyNcxupdfUuEg/iNcT6DCNf
|
||||
W/9QHPh8jHDtYRz/pfEI7v1Loj7u+0ujATQ5B+43o4v1GHUkXzPnj4ZY7471KMfmvsfwfup+c46Q1/j8
|
||||
fxwNja/4v4rYgwAg8yVuwnGmuBHXM8S8G4iiuB7nybgO13TAAM1DzNVxDc51XI3zZPwZ1xIx509EGeMq
|
||||
XM8UV+J6TfFHotku5qhjuWbGP7h7eIwjteAqiuNPOI+DEufJ1/k8vufPeI9ELMTvgK9h9K9lPL7avE4L
|
||||
eEQsDEHqWF+XY3ld3xeuXePeS498fPGgv/B1ue9i99vXrlXfk4/Tg822kUsZXtPXM71OH19Gl/D//jf+
|
||||
93fwv3Mg8xz4fwAUWcpvwH42VwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
29
Hyphen/Plugins/Forms/ISynchronizedSubscriber.cs
Normal file
29
Hyphen/Plugins/Forms/ISynchronizedSubscriber.cs
Normal file
@ -0,0 +1,29 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
public interface ISynchronizedSubscriber
|
||||
{
|
||||
SynchronizationContext SyncContext { get; }
|
||||
}
|
||||
}
|
136
Hyphen/Plugins/Forms/InformationDialog.Designer.cs
generated
Normal file
136
Hyphen/Plugins/Forms/InformationDialog.Designer.cs
generated
Normal file
@ -0,0 +1,136 @@
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
partial class InformationDialog
|
||||
{
|
||||
/// <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 Windows Form 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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InformationDialog));
|
||||
this.InformationLABEL = new System.Windows.Forms.Label();
|
||||
this.OkBTN = new System.Windows.Forms.Button();
|
||||
this.DialogHeader = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader();
|
||||
this.CaptionLABEL = new System.Windows.Forms.Label();
|
||||
this.BackgroundPBOX = new System.Windows.Forms.PictureBox();
|
||||
this.DialogHeader.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.BackgroundPBOX)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// InformationLABEL
|
||||
//
|
||||
this.InformationLABEL.BackColor = System.Drawing.Color.Transparent;
|
||||
this.InformationLABEL.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||
this.InformationLABEL.Location = new System.Drawing.Point(9, 56);
|
||||
this.InformationLABEL.Name = "InformationLABEL";
|
||||
this.InformationLABEL.Size = new System.Drawing.Size(430, 155);
|
||||
this.InformationLABEL.TabIndex = 2;
|
||||
this.InformationLABEL.Text = "Information";
|
||||
//
|
||||
// OkBTN
|
||||
//
|
||||
this.OkBTN.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.OkBTN.Location = new System.Drawing.Point(12, 220);
|
||||
this.OkBTN.Name = "OkBTN";
|
||||
this.OkBTN.Size = new System.Drawing.Size(75, 23);
|
||||
this.OkBTN.TabIndex = 0;
|
||||
this.OkBTN.Text = "OK";
|
||||
this.OkBTN.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// DialogHeader
|
||||
//
|
||||
this.DialogHeader.BackColor = System.Drawing.Color.Transparent;
|
||||
this.DialogHeader.Color = System.Drawing.SystemColors.ActiveCaption;
|
||||
this.DialogHeader.Controls.Add(this.CaptionLABEL);
|
||||
this.DialogHeader.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.DialogHeader.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.DialogHeader.HeaderFont = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.DialogHeader.HeaderText = "Caption";
|
||||
this.DialogHeader.Image = global::Virtuoso.Miranda.Plugins.Properties.Resources.Icon_232_32x32;
|
||||
this.DialogHeader.Location = new System.Drawing.Point(0, 0);
|
||||
this.DialogHeader.MinimumSize = new System.Drawing.Size(300, 40);
|
||||
this.DialogHeader.Name = "DialogHeader";
|
||||
this.DialogHeader.Size = new System.Drawing.Size(451, 53);
|
||||
this.DialogHeader.TabIndex = 1;
|
||||
//
|
||||
// CaptionLABEL
|
||||
//
|
||||
this.CaptionLABEL.AutoSize = true;
|
||||
this.CaptionLABEL.BackColor = System.Drawing.Color.Transparent;
|
||||
this.CaptionLABEL.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.CaptionLABEL.Location = new System.Drawing.Point(12, 23);
|
||||
this.CaptionLABEL.Name = "CaptionLABEL";
|
||||
this.CaptionLABEL.Size = new System.Drawing.Size(59, 13);
|
||||
this.CaptionLABEL.TabIndex = 0;
|
||||
this.CaptionLABEL.Text = "(caption)";
|
||||
//
|
||||
// BackgroundPBOX
|
||||
//
|
||||
this.BackgroundPBOX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.BackgroundPBOX.Image = ((System.Drawing.Image)(resources.GetObject("BackgroundPBOX.Image")));
|
||||
this.BackgroundPBOX.Location = new System.Drawing.Point(330, 127);
|
||||
this.BackgroundPBOX.Name = "BackgroundPBOX";
|
||||
this.BackgroundPBOX.Size = new System.Drawing.Size(120, 129);
|
||||
this.BackgroundPBOX.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.BackgroundPBOX.TabIndex = 3;
|
||||
this.BackgroundPBOX.TabStop = false;
|
||||
this.BackgroundPBOX.Visible = false;
|
||||
//
|
||||
// InformationDialog
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.ClientSize = new System.Drawing.Size(451, 255);
|
||||
this.Controls.Add(this.BackgroundPBOX);
|
||||
this.Controls.Add(this.OkBTN);
|
||||
this.Controls.Add(this.InformationLABEL);
|
||||
this.Controls.Add(this.DialogHeader);
|
||||
this.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "InformationDialog";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Information";
|
||||
this.TopMost = true;
|
||||
this.Shown += new System.EventHandler(this.InformationDialog_Shown);
|
||||
this.DialogHeader.ResumeLayout(false);
|
||||
this.DialogHeader.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.BackgroundPBOX)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader DialogHeader;
|
||||
private System.Windows.Forms.Label InformationLABEL;
|
||||
private System.Windows.Forms.Label CaptionLABEL;
|
||||
private System.Windows.Forms.Button OkBTN;
|
||||
private System.Windows.Forms.PictureBox BackgroundPBOX;
|
||||
}
|
||||
}
|
63
Hyphen/Plugins/Forms/InformationDialog.cs
Normal file
63
Hyphen/Plugins/Forms/InformationDialog.cs
Normal file
@ -0,0 +1,63 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Media;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
public partial class InformationDialog : Form
|
||||
{
|
||||
public const string NewLineToken = "[n]";
|
||||
|
||||
private InformationDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public static void PresentModal(string caption, string information, Image icon)
|
||||
{
|
||||
if (String.IsNullOrEmpty(caption))
|
||||
throw new ArgumentNullException("caption");
|
||||
|
||||
if (String.IsNullOrEmpty(information))
|
||||
throw new ArgumentNullException("information");
|
||||
|
||||
using (InformationDialog dlg = new InformationDialog())
|
||||
{
|
||||
dlg.DialogHeader.HeaderText = dlg.Text = caption;
|
||||
dlg.InformationLABEL.Text = information.Replace(NewLineToken, Environment.NewLine);
|
||||
|
||||
if (icon != null)
|
||||
dlg.DialogHeader.Image = icon;
|
||||
|
||||
dlg.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
private void InformationDialog_Shown(object sender, EventArgs e)
|
||||
{
|
||||
SystemSounds.Asterisk.Play();
|
||||
}
|
||||
}
|
||||
}
|
537
Hyphen/Plugins/Forms/InformationDialog.resx
Normal file
537
Hyphen/Plugins/Forms/InformationDialog.resx
Normal file
@ -0,0 +1,537 @@
|
||||
<?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="InformationLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="OkBTN.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="DialogHeader.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="CaptionLABEL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="BackgroundPBOX.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="BackgroundPBOX.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAB
|
||||
AAAAAAAAenl6AJQxEgCUMRQAmTIUAKg/GgCsPxoAsz8cALo/HwCqQBsArkQeALBAGwC2QBwAsEQeALpA
|
||||
HwCWRiwArkwqALBHIQC/QCAAskkhALBLKgC/WDEA3l0tAMJcNADGYDkAymI6AM9lOgDKYzwAzWU8ALxo
|
||||
TgCkZlEAsGhUALptUQC9b1MAv29UALR1XwC4dmQAzmlBAMpsRwDVbUIA1G9HANRwRwDRcU0A3XVKANp2
|
||||
TgDDaVAAx21XAMhtVwDKfV8A5XJHAO1zRQDhfFMA5X1RAOh/VwC6g3AAvYNyAO+DWQDNhmkA1ItuANeN
|
||||
bwDBjn0AyYx4AOaKZADui2UA8JFrAPSTbQD0lG4A6pp2APeceACLiYkAkJCQAJuXlwCloaAApKSkALGw
|
||||
sQC+ubcAzI+AAMmRgQDMmocAzJuJAN2cggDWppMA16qbANesmwDhoIcAzqyjAMuwpgDEsq4Az7SqANuw
|
||||
oADFtrEAyLi0ANO5sADdu7EA3by0ANDJyADR0tQA19jaAPXk3QD/+fIA+vv7AAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAD///8AAAAAAABKRgEBRkoAAAAAAAAAAEpFSEtfX0tIRUoAAAAAAEhHV00tDw8eTFdHSAAAAEpHViIM
|
||||
PV1dHwQvVUdKAABFVyEMC1JkZCQEEi1XRQBKSE8TCwtSYGQkAxISTUhKRkswFRMLUmFkNwMMBx1LRgFf
|
||||
JhsXC1JhZDwDDAkUXwEBXyomJRtSYWQ3AwsLFF8BRks7JSslU2JkIwULCh9LRkpIUysrLDUyMRYbGBdP
|
||||
SEoARVtQNTVAYmM/GiY5WkUAAEpHXFQ1RGRkQiU7WEdKAAAASEdbWUNAQD9RW0dIAAAAAABKRUhLX19L
|
||||
SEVKAAAAAAAAAABKRgEBRkoAAAAAAPgfAADgBwAAwAMAAIABAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAgAEAAIABAADAAwAA4AcAAPgfAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
103
Hyphen/Plugins/Forms/LocalizableDialog.cs
Normal file
103
Hyphen/Plugins/Forms/LocalizableDialog.cs
Normal file
@ -0,0 +1,103 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Native;
|
||||
using System.Diagnostics;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
[Flags]
|
||||
public enum FormTranslationFlags : int
|
||||
{
|
||||
None = 0,
|
||||
TranslateNonReadOnlyEditControls = 1, //translate all edit controls. By default non-read-only edit controls are not translated
|
||||
NoTitleTranslation = 2 //do not translate the title of the dialog
|
||||
}
|
||||
|
||||
public class LocalizableDialog : SingletonDialog
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private const string MS_LANGPACK_TRANSLATEDIALOG = "LangPack/TranslateDialog";
|
||||
|
||||
private FormTranslationFlags translateFlags;
|
||||
private readonly Collections.ControlCollection nonLocalizableControls;
|
||||
|
||||
[Browsable(false)]
|
||||
public Collections.ControlCollection NonLocalizableControls
|
||||
{
|
||||
get { return nonLocalizableControls; }
|
||||
}
|
||||
|
||||
public FormTranslationFlags TranslateFlags
|
||||
{
|
||||
get { return translateFlags; }
|
||||
set { translateFlags = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
protected LocalizableDialog() : this(null, FormTranslationFlags.None) { }
|
||||
|
||||
protected LocalizableDialog(FormTranslationFlags flags) : this(null, flags) { }
|
||||
|
||||
protected LocalizableDialog(string dialogName, FormTranslationFlags flags) : base(dialogName)
|
||||
{
|
||||
translateFlags = flags;
|
||||
nonLocalizableControls = new Collections.ControlCollection();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UI handlers
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
{
|
||||
if (!DesignMode)
|
||||
{
|
||||
if ((translateFlags & FormTranslationFlags.NoTitleTranslation) != FormTranslationFlags.NoTitleTranslation)
|
||||
Text = LanguagePack.TranslateString(Text);
|
||||
|
||||
foreach (Control control in Controls)
|
||||
{
|
||||
TextBoxBase editCtrl = control as TextBoxBase;
|
||||
|
||||
if (!nonLocalizableControls.Contains(control))
|
||||
{
|
||||
if (editCtrl != null && !editCtrl.ReadOnly && (translateFlags & FormTranslationFlags.TranslateNonReadOnlyEditControls) != FormTranslationFlags.TranslateNonReadOnlyEditControls)
|
||||
continue;
|
||||
|
||||
control.Text = LanguagePack.TranslateString(control.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base.OnLoad(e);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
171
Hyphen/Plugins/Forms/PluginDialog.cs
Normal file
171
Hyphen/Plugins/Forms/PluginDialog.cs
Normal file
@ -0,0 +1,171 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Threading;
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
public class PluginDialog : RemotableForm
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static readonly List<PluginDialog> ActiveDialogs = new List<PluginDialog>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
protected PluginDialog() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
protected override void OnShown(EventArgs e)
|
||||
{
|
||||
RegisterDialog();
|
||||
base.OnShown(e);
|
||||
}
|
||||
|
||||
protected override void OnClosed(EventArgs e)
|
||||
{
|
||||
UnregisterDialog();
|
||||
base.OnClosed(e);
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
UnregisterDialog();
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
protected MirandaContext Context
|
||||
{
|
||||
get { return MirandaContext.Current; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
internal virtual void RegisterDialog()
|
||||
{
|
||||
lock (ActiveDialogs)
|
||||
ActiveDialogs.Add(this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the dialog from the active dialog tracking list.
|
||||
/// </summary>
|
||||
internal virtual void UnregisterDialog()
|
||||
{
|
||||
lock (ActiveDialogs)
|
||||
ActiveDialogs.Remove(this);
|
||||
}
|
||||
|
||||
public static void CloseDialogs(PluginDescriptor owner, bool force)
|
||||
{
|
||||
foreach (PluginDialog dialog in UnregisterAndGetActiveDialogs(owner))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (dialog.InvokeRequired)
|
||||
dialog.Invoke(new MethodInvoker(delegate { dialog.Dispose(); }));
|
||||
else
|
||||
dialog.Dispose();
|
||||
}
|
||||
catch { if (!force) throw; }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gathers active dialogs of the plugin and unregisters them.
|
||||
/// </summary>
|
||||
/// <param name="plugin">Plugin.</param>
|
||||
/// <returns>Unregistered dialogs to dispose.</returns>
|
||||
private static List<PluginDialog> UnregisterAndGetActiveDialogs(PluginDescriptor plugin)
|
||||
{
|
||||
Assembly pluginAssembly = plugin.Plugin.GetType().Assembly;
|
||||
List<PluginDialog> dialogsToRemove = new List<PluginDialog>(2);
|
||||
|
||||
lock (ActiveDialogs)
|
||||
{
|
||||
foreach (PluginDialog dialog in ActiveDialogs)
|
||||
{
|
||||
// Account only undisposed dialogs from plugin's assembly
|
||||
if (dialog.IsDisposed || dialog.GetType().Assembly != pluginAssembly)
|
||||
continue;
|
||||
|
||||
dialogsToRemove.Add(dialog);
|
||||
}
|
||||
|
||||
foreach (PluginDialog dialog in dialogsToRemove)
|
||||
dialog.UnregisterDialog();
|
||||
}
|
||||
|
||||
return dialogsToRemove;
|
||||
}
|
||||
|
||||
public static void ExecuteOnSTAThread(ParameterizedThreadStart threadStart)
|
||||
{
|
||||
ExecuteOnSTAThread(threadStart, null);
|
||||
}
|
||||
|
||||
public static void ExecuteOnSTAThread(ParameterizedThreadStart threadStart, object state)
|
||||
{
|
||||
if (threadStart == null)
|
||||
throw new ArgumentNullException("threadStart");
|
||||
|
||||
Thread thread = new Thread(delegate(object _state)
|
||||
{
|
||||
try
|
||||
{
|
||||
Application.ThreadException += Application_ThreadException;
|
||||
threadStart(_state);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Application.ThreadException -= Application_ThreadException;
|
||||
}
|
||||
});
|
||||
|
||||
thread.SetApartmentState(ApartmentState.STA);
|
||||
thread.IsBackground = true;
|
||||
|
||||
thread.Start(state);
|
||||
}
|
||||
|
||||
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
|
||||
{
|
||||
DefaultExceptionHandler.Create().HandleException(e.Exception, null);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
42
Hyphen/Plugins/Forms/RemotableForm.cs
Normal file
42
Hyphen/Plugins/Forms/RemotableForm.cs
Normal file
@ -0,0 +1,42 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
public class RemotableForm : Form
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
internal RemotableForm() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
public override object InitializeLifetimeService()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
134
Hyphen/Plugins/Forms/SingletonDialog.cs
Normal file
134
Hyphen/Plugins/Forms/SingletonDialog.cs
Normal file
@ -0,0 +1,134 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Forms
|
||||
{
|
||||
public class SingletonDialog : PluginDialog
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static readonly Dictionary<string, SingletonDialog> visibleDialogs = new Dictionary<string, SingletonDialog>(1);
|
||||
protected static Dictionary<string, SingletonDialog> VisibleDialogs
|
||||
{
|
||||
get { return visibleDialogs; }
|
||||
}
|
||||
|
||||
private string singletonName;
|
||||
protected string SingletonName
|
||||
{
|
||||
get { return singletonName; }
|
||||
private set { singletonName = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
protected SingletonDialog() : this(null) { }
|
||||
|
||||
protected SingletonDialog(string name)
|
||||
{
|
||||
this.singletonName = String.IsNullOrEmpty(name) ? GetDefaultName(GetType()) : name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
internal override void RegisterDialog()
|
||||
{
|
||||
lock (visibleDialogs)
|
||||
{
|
||||
if (!visibleDialogs.ContainsKey(SingletonName))
|
||||
visibleDialogs[SingletonName] = this;
|
||||
}
|
||||
|
||||
base.RegisterDialog();
|
||||
}
|
||||
|
||||
internal override void UnregisterDialog()
|
||||
{
|
||||
lock (visibleDialogs)
|
||||
visibleDialogs.Remove(SingletonName);
|
||||
|
||||
base.UnregisterDialog();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public static TForm GetSingleton<TForm>(bool createIfNeeded) where TForm : PluginDialog
|
||||
{
|
||||
return GetSingleton<TForm>(createIfNeeded, typeof(TForm).FullName);
|
||||
}
|
||||
|
||||
public static TForm GetSingleton<TForm>(bool createIfNeeded, string name) where TForm : PluginDialog
|
||||
{
|
||||
if (String.IsNullOrEmpty(name))
|
||||
throw new ArgumentNullException("name");
|
||||
|
||||
lock (visibleDialogs)
|
||||
{
|
||||
if (!visibleDialogs.ContainsKey(name) || visibleDialogs[name].IsDisposed)
|
||||
{
|
||||
if (createIfNeeded)
|
||||
return (TForm)Activator.CreateInstance(typeof(TForm), true);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
else
|
||||
return visibleDialogs[name] as TForm;
|
||||
}
|
||||
}
|
||||
|
||||
private delegate void ShowSingletonInvoker(bool modal);
|
||||
|
||||
public void ShowSingleton(bool modal)
|
||||
{
|
||||
if (InvokeRequired)
|
||||
Invoke(new ShowSingletonInvoker(DoShowSingleton), modal);
|
||||
else
|
||||
DoShowSingleton(modal);
|
||||
}
|
||||
|
||||
private void DoShowSingleton(bool modal)
|
||||
{
|
||||
if (Visible)
|
||||
Activate();
|
||||
else if (modal)
|
||||
ShowDialog();
|
||||
else
|
||||
Show();
|
||||
}
|
||||
|
||||
public static string GetDefaultName(Type type)
|
||||
{
|
||||
if (type == null)
|
||||
throw new ArgumentNullException("type");
|
||||
|
||||
return type.FullName;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
3
Hyphen/Plugins/FriendlyStrongName/Desktop.ini
Normal file
3
Hyphen/Plugins/FriendlyStrongName/Desktop.ini
Normal file
@ -0,0 +1,3 @@
|
||||
[.ShellClassInfo]
|
||||
IconFile=%SystemRoot%\system32\SHELL32.dll
|
||||
IconIndex=19
|
BIN
Hyphen/Plugins/FriendlyStrongName/FriendlyStrongName.snk
Normal file
BIN
Hyphen/Plugins/FriendlyStrongName/FriendlyStrongName.snk
Normal file
Binary file not shown.
BIN
Hyphen/Plugins/FriendlyStrongName/PublicKey.publickey
Normal file
BIN
Hyphen/Plugins/FriendlyStrongName/PublicKey.publickey
Normal file
Binary file not shown.
96
Hyphen/Plugins/FusionException.cs
Normal file
96
Hyphen/Plugins/FusionException.cs
Normal file
@ -0,0 +1,96 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins
|
||||
{
|
||||
[Serializable]
|
||||
public class FusionException : Exception, IExceptionDumpController
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly Assembly assembly;
|
||||
private readonly Type pluginType;
|
||||
private readonly MirandaPlugin instantiatedPlugin;
|
||||
private readonly string fusionLog;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public FusionException(string message, Assembly assembly, Type type, MirandaPlugin plugin, Exception inner)
|
||||
: this(message, TextResources.UI_Label_Empty, assembly, type, plugin, inner)
|
||||
{ }
|
||||
|
||||
public FusionException(string message, string fusionLog, Assembly assembly, Type type, MirandaPlugin plugin, Exception inner) : base(message, inner)
|
||||
{
|
||||
this.assembly = assembly;
|
||||
this.pluginType = type;
|
||||
this.instantiatedPlugin = plugin;
|
||||
this.fusionLog = fusionLog;
|
||||
}
|
||||
|
||||
protected FusionException(SerializationInfo info, StreamingContext context) : base(info, context) {}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public Assembly Assembly
|
||||
{
|
||||
get { return assembly; }
|
||||
}
|
||||
|
||||
public Type PluginType
|
||||
{
|
||||
get { return pluginType; }
|
||||
}
|
||||
|
||||
public MirandaPlugin InstantiatedPlugin
|
||||
{
|
||||
get { return instantiatedPlugin; }
|
||||
}
|
||||
|
||||
public string FusionLog
|
||||
{
|
||||
get { return fusionLog; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IExceptionDumpController Members
|
||||
|
||||
void IExceptionDumpController.DumpException(Exception e, StringBuilder dump)
|
||||
{
|
||||
FusionException ex = (FusionException)e;
|
||||
|
||||
dump.AppendFormat("=== Description ==={0}{1}{0}{0}", Environment.NewLine, ex.Message);
|
||||
dump.AppendFormat("=== Assembly ==={0}{1}{0}{0}", Environment.NewLine, ex.Assembly == null ? TextResources.UI_Label_Unknown : ex.Assembly.ToString());
|
||||
dump.AppendFormat("=== Type ==={0}{1}{0}{0}", Environment.NewLine, ex.PluginType == null ? TextResources.UI_Label_Unknown : ex.PluginType.FullName);
|
||||
dump.AppendFormat("=== Fusion log ==={0}{1}{0}{0}", Environment.NewLine, ex.FusionLog);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
BIN
Hyphen/Plugins/Graphics/LoadingBanner.psd
Normal file
BIN
Hyphen/Plugins/Graphics/LoadingBanner.psd
Normal file
Binary file not shown.
BIN
Hyphen/Plugins/Graphics/Thumbs.db
Normal file
BIN
Hyphen/Plugins/Graphics/Thumbs.db
Normal file
Binary file not shown.
84
Hyphen/Plugins/Helpers/EnumValueFriendlyNameAttribute.cs
Normal file
84
Hyphen/Plugins/Helpers/EnumValueFriendlyNameAttribute.cs
Normal file
@ -0,0 +1,84 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Helpers
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
|
||||
public sealed class EnumValueFriendlyNameAttribute : Attribute
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private string friendlyName;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
public EnumValueFriendlyNameAttribute(string name)
|
||||
{
|
||||
this.friendlyName = name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string FriendlyName
|
||||
{
|
||||
get { return friendlyName; }
|
||||
set { friendlyName = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public static Dictionary<TEnum, string> GetFriendlyNames<TEnum>() where TEnum : struct
|
||||
{
|
||||
Type enumType = typeof(TEnum);
|
||||
|
||||
if (!enumType.IsEnum)
|
||||
throw new ArgumentException("TEnum is not an enumeration.", "TEnum");
|
||||
|
||||
Type thisType = typeof(EnumValueFriendlyNameAttribute);
|
||||
Dictionary<TEnum, string> results = new Dictionary<TEnum, string>(1);
|
||||
|
||||
foreach (FieldInfo field in enumType.GetFields())
|
||||
{
|
||||
if ((field.Attributes & FieldAttributes.Literal) != FieldAttributes.Literal)
|
||||
continue;
|
||||
|
||||
EnumValueFriendlyNameAttribute[] names = (EnumValueFriendlyNameAttribute[])field.GetCustomAttributes(thisType, false);
|
||||
|
||||
if (names != null && names.Length > 0)
|
||||
results.Add((TEnum)field.GetRawConstantValue(), names[0].FriendlyName);
|
||||
else
|
||||
results.Add((TEnum)field.GetRawConstantValue(), field.Name);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
652
Hyphen/Plugins/Helpers/IniStructure.cs
Normal file
652
Hyphen/Plugins/Helpers/IniStructure.cs
Normal file
@ -0,0 +1,652 @@
|
||||
/* /--==###################==--\
|
||||
* | Bram's Ini File Handler |
|
||||
* \--==###################==--/
|
||||
*
|
||||
* This handles Ini files and all their content.
|
||||
*
|
||||
* Some explanation:
|
||||
* Categories are in fact sections, but i didn't think
|
||||
* "sections" so i wrote "categories". Sorry.
|
||||
*
|
||||
* comment lines in ini files begin with #, ; or //
|
||||
* multi-line are not supported (Because I've never seen such)
|
||||
*
|
||||
* It ignores comments on reading but can write them
|
||||
*
|
||||
* How it works:
|
||||
* All data is saved in one System.Collections.SortedList which
|
||||
* contains the category names as keys, and all key-value pairs
|
||||
* as values, saved as SortedList too:
|
||||
*
|
||||
* explanation sheet
|
||||
*
|
||||
* SortedList Categories
|
||||
* {
|
||||
* {"Category1", {Key1, value1}
|
||||
* {Key2, value2}
|
||||
* ...
|
||||
* }
|
||||
* {"Category2", {Key1, value1}
|
||||
* {Key2, value2}
|
||||
* ...
|
||||
* }
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* that behaves like an array in an array (array[][]), but with dynamic bounds
|
||||
* and strings as indexers.
|
||||
*
|
||||
* I hope you did understand this, it would have been easier to explain
|
||||
* in French or German...
|
||||
*
|
||||
* You can make with it what you want, but I would be pleased to
|
||||
* hear some feedback. (Ok, I admit: I would be pleased only if it's
|
||||
* positive feedback...)
|
||||
*
|
||||
* Send me an email! kratchkov@inbox.lv
|
||||
*
|
||||
* Thanks
|
||||
*
|
||||
* DISCLAIMER:
|
||||
* THIS CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
* KIND, EITHER EXPRESSED OR IMPLIED INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THIS
|
||||
* CODE IS WITH YOU. SHOULD THIS CODE PROVE DEFECTIVE, YOU ASSUME
|
||||
* THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION .
|
||||
* You take full responsibility for the use of this code and any
|
||||
* consequences thereof. I can not accept liability for damages
|
||||
* or failures arising from the use of this code, or parts of this code.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Handles Ini categories, keys and their associated values, static methods implemented for file
|
||||
/// handling (saving and reading)
|
||||
/// </summary>
|
||||
public class IniStructure
|
||||
{
|
||||
#region Ini structure code
|
||||
private SortedList Categories = new SortedList();
|
||||
|
||||
/// <summary>
|
||||
/// Initialies a new IniStructure
|
||||
/// </summary>
|
||||
public IniStructure()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a category to the IniStructure
|
||||
/// </summary>
|
||||
/// <param name="Name">Name of the new category</param>
|
||||
public bool AddCategory(string Name)
|
||||
{
|
||||
if (Name == "" | Categories.ContainsKey(Name))
|
||||
return false;
|
||||
if (Name.IndexOf('=') != -1
|
||||
| Name.IndexOf('[') != -1
|
||||
| Name.IndexOf(']') != -1) // these characters are not allowed in a category name
|
||||
return false;
|
||||
|
||||
Categories.Add(Name, new SortedList());
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deletes a category and its contents
|
||||
/// </summary>
|
||||
/// <param name="Name">category to delete</param>
|
||||
public bool DeleteCategory(string Name)
|
||||
{
|
||||
if (Name == "" | !Categories.ContainsKey(Name))
|
||||
return false;
|
||||
Categories.Remove(Name);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Renames a category
|
||||
/// </summary>
|
||||
/// <param name="Name">Category to rename</param>
|
||||
/// <param name="NewName">New name</param>
|
||||
public bool RenameCategory(string Name, string NewName)
|
||||
{ // Or rather moves a category to a new name
|
||||
if (Name == "" | !Categories.ContainsKey(Name) | NewName == "")
|
||||
return false;
|
||||
|
||||
if (NewName.IndexOf('=') != -1
|
||||
| NewName.IndexOf('[') != -1
|
||||
| NewName.IndexOf(']') != -1) // these characters are not allowed in a category name
|
||||
return false;
|
||||
|
||||
SortedList Category = (SortedList)(Categories[Name]);
|
||||
Categories.Add(NewName, Category);
|
||||
this.DeleteCategory(Name);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the names of all categories
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string[] GetCategories()
|
||||
{
|
||||
string[] CatNames = new string[Categories.Count];
|
||||
IList KeyList = Categories.GetKeyList();
|
||||
int KeyCount = Categories.Count;
|
||||
for (int i = 0; i < KeyCount; i++)
|
||||
{
|
||||
CatNames[i] = KeyList[i].ToString();
|
||||
}
|
||||
return CatNames;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the name of a category by specifying the index.
|
||||
/// Useful to enumerate through all categories.
|
||||
/// </summary>
|
||||
/// <param name="Index">The category index</param>
|
||||
/// <returns></returns>
|
||||
public string GetCategoryName(int Index)
|
||||
{
|
||||
if (Index < 0 | Index >= Categories.Count)
|
||||
return null;
|
||||
return Categories.GetKey(Index).ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a key-value pair to a specified category
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Name of the category</param>
|
||||
/// <param name="Key">New name of the key</param>
|
||||
/// <param name="Value">Associated value</param>
|
||||
public bool AddValue(string CategoryName, string Key, string Value)
|
||||
{
|
||||
if (CategoryName == "" | Key == "")
|
||||
return false;
|
||||
if (Key.IndexOf('=') != -1
|
||||
| Key.IndexOf('[') != -1
|
||||
| Key.IndexOf(']') != -1 // these chars are not allowed for keynames
|
||||
| Key.IndexOf(';') != -1
|
||||
| Key.IndexOf('#') != -1
|
||||
)
|
||||
return false;
|
||||
if (!Categories.ContainsKey(CategoryName))
|
||||
return false;
|
||||
SortedList Category = (SortedList)(Categories[CategoryName]);
|
||||
if (Category.ContainsKey(Key))
|
||||
return false;
|
||||
Category.Add(Key, Value);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value of a key-value pair in a specified category by specifying the key
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Name of the category</param>
|
||||
/// <param name="Key">Name of the Key</param>
|
||||
/// <returns></returns>
|
||||
public string GetValue(string CategoryName, string Key)
|
||||
{
|
||||
if (CategoryName == "" | Key == "")
|
||||
return null;
|
||||
if (!Categories.ContainsKey(CategoryName))
|
||||
return null;
|
||||
SortedList Category = (SortedList)(Categories[CategoryName]);
|
||||
if (!Category.ContainsKey(Key))
|
||||
return null;
|
||||
return Category[Key].ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the key-value pair in a specified category by specifying the index
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Index of the category</param>
|
||||
/// <param name="Key">Index of the Key</param>
|
||||
/// <returns></returns>
|
||||
public string GetValue(int CatIndex, int KeyIndex)
|
||||
{
|
||||
if (CatIndex < 0 | KeyIndex < 0
|
||||
|CatIndex >= Categories.Count)
|
||||
return null;
|
||||
SortedList Category = (SortedList)(Categories.GetByIndex(CatIndex));
|
||||
if (KeyIndex >= Category.Count)
|
||||
return null;
|
||||
return Category.GetByIndex(KeyIndex).ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the name of the key in a key-value pair in a specified category by specifying the index
|
||||
/// </summary>
|
||||
/// <param name="CatIndex">Index of the category</param>
|
||||
/// <param name="KeyIndex">Index of the key</param>
|
||||
/// <returns></returns>
|
||||
public string GetKeyName(int CatIndex, int KeyIndex)
|
||||
{
|
||||
if (CatIndex < 0 | KeyIndex < 0
|
||||
|CatIndex >= Categories.Count)
|
||||
return null;
|
||||
SortedList Category = (SortedList)(Categories.GetByIndex(CatIndex));
|
||||
if (KeyIndex >= Category.Count)
|
||||
return null;
|
||||
return Category.GetKey(KeyIndex).ToString();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Deletes a key-value pair
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Name of the category</param>
|
||||
/// <param name="Key">Name of the Key</param>
|
||||
public bool DeleteValue(string CategoryName, string Key)
|
||||
{
|
||||
if (CategoryName == "" | Key == "")
|
||||
return false;
|
||||
if (!Categories.ContainsKey(CategoryName))
|
||||
return false;
|
||||
SortedList Category = (SortedList)(Categories[CategoryName]);
|
||||
if (!Category.ContainsKey(Key))
|
||||
return false;
|
||||
Category.Remove(Key);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Renames the keyname in a key-value pair
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Name of the category</param>
|
||||
/// <param name="KeyName">Name of the Key</param>
|
||||
/// <param name="NewKeyName">New name of the Key</param>
|
||||
public bool RenameKey(string CategoryName, string KeyName, string NewKeyName)
|
||||
{
|
||||
if (CategoryName == "" | KeyName == "" | NewKeyName == "")
|
||||
return false;
|
||||
if (!Categories.ContainsKey(CategoryName))
|
||||
return false;
|
||||
if (NewKeyName.IndexOf('=') != -1
|
||||
| NewKeyName.IndexOf('[') != -1
|
||||
| NewKeyName.IndexOf(']') != -1 // these chars are not allowed for keynames
|
||||
| NewKeyName.IndexOf(';') != -1
|
||||
| NewKeyName.IndexOf('#') != -1
|
||||
)
|
||||
return false;
|
||||
SortedList Category = (SortedList)(Categories[CategoryName]);
|
||||
if ( !Category.ContainsKey(KeyName))
|
||||
return false;
|
||||
|
||||
object value = Category[KeyName];
|
||||
Category.Remove(KeyName);
|
||||
Category.Add(NewKeyName, value);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Modifies the value in a key-value pair
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Name of the category</param>
|
||||
/// <param name="KeyName">Name of the Key</param>
|
||||
/// <param name="NewValue">New name of the Key</param>
|
||||
public bool ModifyValue(string CategoryName, string KeyName, string NewValue)
|
||||
{
|
||||
if (CategoryName == "" | KeyName == "")
|
||||
return false;
|
||||
if (!Categories.ContainsKey(CategoryName))
|
||||
return false;
|
||||
SortedList Category = (SortedList)(Categories[CategoryName]);
|
||||
if ( !Category.ContainsKey(KeyName))
|
||||
return false;
|
||||
|
||||
Category[KeyName] = NewValue;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all keys in a category
|
||||
/// </summary>
|
||||
/// <param name="CategoryName">Name of the category</param>
|
||||
/// <returns></returns>
|
||||
public string[] GetKeys(string CategoryName)
|
||||
{
|
||||
SortedList Category = (SortedList)(Categories[CategoryName]);
|
||||
if (Category == null)
|
||||
return new string[0];
|
||||
int KeyCount = Category.Count;
|
||||
string[] KeyNames = new string[KeyCount];
|
||||
IList KeyList = Category.GetKeyList();
|
||||
for (int i = 0; i < KeyCount; i++)
|
||||
{
|
||||
KeyNames[i] = KeyList[i].ToString();
|
||||
}
|
||||
return KeyNames;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Ini writing code
|
||||
/// <summary>
|
||||
/// Writes an IniStructure to a file with a comment.
|
||||
/// </summary>
|
||||
/// <param name="IniData">The contents to write</param>
|
||||
/// <param name="Filename">The complete path and name of the file</param>
|
||||
/// <param name="comment">Comment to add</param>
|
||||
/// <returns></returns>
|
||||
public static bool WriteIni(IniStructure IniData, string Filename, string comment)
|
||||
{
|
||||
string DataToWrite = CreateData(IniData, BuildComment(comment));
|
||||
return WriteFile(Filename, DataToWrite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes an IniStructure to a file without a comment.
|
||||
/// </summary>
|
||||
/// <param name="IniData">The contents to write</param>
|
||||
/// <param name="Filename">The complete path and name of the file</param>
|
||||
/// <returns></returns>
|
||||
public static bool WriteIni(IniStructure IniData, string Filename)
|
||||
{
|
||||
string DataToWrite = CreateData(IniData);
|
||||
return WriteFile(Filename, DataToWrite);
|
||||
}
|
||||
|
||||
private static bool WriteFile(string Filename, string Data)
|
||||
{ // Writes a string to a file
|
||||
try
|
||||
{
|
||||
FileStream IniStream = new FileStream(Filename,FileMode.Create);
|
||||
if (!IniStream.CanWrite)
|
||||
{
|
||||
IniStream.Close();
|
||||
return false;
|
||||
}
|
||||
StreamWriter writer = new StreamWriter(IniStream);
|
||||
writer.Write(Data);
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
IniStream.Close();
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static string BuildComment(string comment)
|
||||
{ // Adds a # at the beginning of each line
|
||||
if (comment == "")
|
||||
return "";
|
||||
string[] Lines = DivideToLines(comment);
|
||||
string temp = "";
|
||||
foreach (string line in Lines)
|
||||
{
|
||||
temp += "# " + line + "\r\n";
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
|
||||
private static string CreateData(IniStructure IniData)
|
||||
{
|
||||
return CreateData(IniData,"");
|
||||
}
|
||||
|
||||
private static string CreateData(IniStructure IniData, string comment)
|
||||
{ //Iterates through all categories and keys and appends all data to Data
|
||||
int CategoryCount = IniData.GetCategories().Length;
|
||||
int[] KeyCountPerCategory = new int[CategoryCount];
|
||||
string Data = comment;
|
||||
string[] temp = new string[2]; // will contain key-value pair
|
||||
|
||||
for (int i = 0; i < CategoryCount; i++) // Gets keycount per category
|
||||
{
|
||||
string CategoryName = IniData.GetCategories()[i];
|
||||
KeyCountPerCategory[i] = IniData.GetKeys(CategoryName).Length;
|
||||
}
|
||||
|
||||
for (int catcounter = 0; catcounter < CategoryCount; catcounter++)
|
||||
{
|
||||
Data += "\r\n[" + IniData.GetCategoryName(catcounter) + "]\r\n";
|
||||
// writes [Category] to Data
|
||||
for (int keycounter = 0; keycounter < KeyCountPerCategory[catcounter]; keycounter++)
|
||||
{
|
||||
temp[0] = IniData.GetKeyName(catcounter, keycounter);
|
||||
temp[1] = IniData.GetValue(catcounter, keycounter);
|
||||
Data += temp[0] + "=" + temp[1] + "\r\n";
|
||||
// writes the key-value pair to Data
|
||||
}
|
||||
}
|
||||
return Data;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Ini reading code
|
||||
|
||||
/// <summary>
|
||||
/// Reads an ini file and returns the content as an IniStructure. Returns null if an error occurred.
|
||||
/// </summary>
|
||||
/// <param name="Filename">The filename to read</param>
|
||||
/// <returns></returns>
|
||||
public static IniStructure ReadIni(string Filename)
|
||||
{
|
||||
string Data = ReadFile(Filename);
|
||||
if (Data == null)
|
||||
return null;
|
||||
|
||||
IniStructure data = InterpretIni(Data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public static IniStructure InterpretIni(string Data)
|
||||
{
|
||||
IniStructure IniData = new IniStructure();
|
||||
string[] Lines = RemoveAndVerifyIni(DivideToLines(Data));
|
||||
// Divides the Data in lines, removes comments and empty lines
|
||||
// and verifies if the ini is not corrupted
|
||||
// Returns null if it is.
|
||||
if (Lines == null)
|
||||
return null;
|
||||
|
||||
if (IsLineACategoryDef(Lines[0]) != LineType.Category)
|
||||
{
|
||||
return null;
|
||||
// Ini is faulty - does not begin with a categorydef
|
||||
}
|
||||
string CurrentCategory = "";
|
||||
foreach (string line in Lines)
|
||||
{
|
||||
switch (IsLineACategoryDef(line))
|
||||
{
|
||||
case LineType.Category: // the line is a correct category definition
|
||||
string NewCat = line.Substring(1,line.Length - 2);
|
||||
IniData.AddCategory(NewCat); // adds the category to the IniData
|
||||
CurrentCategory = NewCat;
|
||||
break;
|
||||
case LineType.NotACategory: // the line is not a category definition
|
||||
string[] keyvalue = GetDataFromLine(line);
|
||||
IniData.AddValue(CurrentCategory, keyvalue[0], keyvalue[1]);
|
||||
// Adds the key-value to the current category
|
||||
break;
|
||||
case LineType.Faulty: // the line is faulty
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return IniData;
|
||||
}
|
||||
|
||||
private static string ReadFile(string filename)
|
||||
{ // Reads a file to a string.
|
||||
if (!File.Exists(filename))
|
||||
return null;
|
||||
StringBuilder IniData;
|
||||
try
|
||||
{
|
||||
using (FileStream IniStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
if (!IniStream.CanRead)
|
||||
return null;
|
||||
|
||||
using (StreamReader reader = new StreamReader(IniStream))
|
||||
{
|
||||
IniData = new StringBuilder();
|
||||
IniData.Append(reader.ReadToEnd());
|
||||
return IniData.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static string[] GetDataFromLine(string Line)
|
||||
{
|
||||
// returns the key and the value of a key-value pair in "key=value" format.
|
||||
int EqualPos = 0;
|
||||
EqualPos = Line.IndexOf("=", 0);
|
||||
if (EqualPos < 1)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
string LeftKey = Line.Substring(0, EqualPos);
|
||||
string RightValue = Line.Substring(EqualPos + 1);
|
||||
|
||||
string[] ToReturn = {LeftKey, RightValue};
|
||||
return ToReturn;
|
||||
}
|
||||
|
||||
private enum LineType // return type for IsLineACategoryDef and LineVerify
|
||||
{
|
||||
NotACategory,
|
||||
Category,
|
||||
Faulty,
|
||||
Comment,
|
||||
Empty,
|
||||
Ok
|
||||
}
|
||||
|
||||
private static LineType IsLineACategoryDef(string Line)
|
||||
{
|
||||
if (Line.Length < 3)
|
||||
return LineType.NotACategory; // must be a short keyname like "k="
|
||||
|
||||
if (Line.Substring(0,1) == "[" & Line.Substring(Line.Length - 1, 1) == "]")
|
||||
// seems to be a categorydef
|
||||
{
|
||||
if (Line.IndexOf("=") != -1)
|
||||
// '=' found -> is incorrect for category def
|
||||
return LineType.Faulty;
|
||||
if (ContainsMoreThanOne(Line,'[') | ContainsMoreThanOne(Line, ']'))
|
||||
// two or more '[' or ']' found -> incorrect
|
||||
return LineType.Faulty;
|
||||
return LineType.Category;
|
||||
}
|
||||
return LineType.NotACategory;
|
||||
}
|
||||
|
||||
private static string[] DivideToLines(string Data)
|
||||
{ // Divides a string into lines
|
||||
string[] Lines = new string[Data.Length];
|
||||
int oldnewlinepos = 0;
|
||||
int LineCounter = 0;
|
||||
for (int i = 0; i < Data.Length; i++)
|
||||
{
|
||||
if (Data.ToCharArray(i,1)[0] == '\n')
|
||||
{
|
||||
Lines[LineCounter] = Data.Substring(oldnewlinepos, i - oldnewlinepos - 1);
|
||||
oldnewlinepos = i + 1;
|
||||
LineCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
// Lines[] array is too big: needs to be trimmed
|
||||
|
||||
Lines[LineCounter] = Data.Substring(oldnewlinepos, Data.Length - oldnewlinepos);
|
||||
string[] LinesTrimmed = new string[LineCounter + 1];
|
||||
for (int i = 0; i < LineCounter + 1; i++)
|
||||
{
|
||||
LinesTrimmed[i] = Lines[i];
|
||||
}
|
||||
return LinesTrimmed;
|
||||
}
|
||||
|
||||
private static bool ContainsMoreThanOne(string Data, char verify)
|
||||
{ // returns true if Data contains verify more than once
|
||||
char[] data = Data.ToCharArray();
|
||||
int count = 0;
|
||||
foreach (char c in data)
|
||||
{
|
||||
if (c == verify)
|
||||
count++;
|
||||
}
|
||||
if (count > 1)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
private static LineType LineVerify(string line)
|
||||
{ // Verifies a line of an ini
|
||||
if (line == "")
|
||||
return LineType.Empty;
|
||||
|
||||
if (line.IndexOf(";") == 0 | line.IndexOf("#") == 0 | line.IndexOf("//") == 0)
|
||||
{
|
||||
return LineType.Comment; // line is a comment: ignore
|
||||
}
|
||||
|
||||
int equalindex = line.IndexOf('=');
|
||||
if (equalindex == 0)
|
||||
return LineType.Faulty; // an '=' cannot be on first place
|
||||
|
||||
if (equalindex != -1) // if = is found in line
|
||||
{
|
||||
// Verify: no '[' , ']' ,';' or '#' before the '='
|
||||
if (line.IndexOf('[', 0, equalindex) != -1
|
||||
| line.IndexOf(']', 0, equalindex) != -1
|
||||
| line.IndexOf(';', 0, equalindex) != -1
|
||||
| line.IndexOf('#', 0, equalindex) != -1)
|
||||
return LineType.Faulty;
|
||||
}
|
||||
|
||||
return LineType.Ok;
|
||||
}
|
||||
|
||||
private static string[] RemoveAndVerifyIni(string[] Lines)
|
||||
{
|
||||
// removes empty lines and comments, and verifies every line
|
||||
string[] temp = new string[Lines.Length];
|
||||
int TempCounter = 0; // number of lines to return
|
||||
foreach (string line in Lines)
|
||||
{
|
||||
switch (LineVerify(line))
|
||||
{
|
||||
case LineType.Faulty: // line is faulty
|
||||
return null;
|
||||
case LineType.Comment: // line is a comment
|
||||
continue;
|
||||
case LineType.Ok: // line is ok
|
||||
temp[TempCounter] = line;
|
||||
TempCounter++;
|
||||
break;
|
||||
case LineType.Empty: // line is empty
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// the temp[] array is too big: needs to be trimmed.
|
||||
string[] OKLines = new string[TempCounter];
|
||||
for (int i = 0; i < TempCounter; i++)
|
||||
{
|
||||
OKLines[i] = temp[i];
|
||||
}
|
||||
return OKLines;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
261
Hyphen/Plugins/Helpers/MessageQueue.cs
Normal file
261
Hyphen/Plugins/Helpers/MessageQueue.cs
Normal file
@ -0,0 +1,261 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Threading;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Helpers
|
||||
{
|
||||
/* CLASS ORIGIN: Spearhead project */
|
||||
public class MessageQueue
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private volatile bool enabled, suspended;
|
||||
|
||||
private readonly Queue<KeyValuePair<ContactInfo, string>> queue = new Queue<KeyValuePair<ContactInfo, string>>(5);
|
||||
private Thread QueueThread;
|
||||
|
||||
private readonly ManualResetEvent waitHandle = new ManualResetEvent(true);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Enums
|
||||
|
||||
protected enum CommonWaitTime : int
|
||||
{
|
||||
QueueSuspension = 50,
|
||||
QueueItemProcessed = 1000,
|
||||
QueueProcessed = 1000,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
public event EventHandler MessageSending;
|
||||
public event EventHandler MessageSent;
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors & .dctors
|
||||
|
||||
public MessageQueue()
|
||||
{
|
||||
QueueThread = InitializeQueueThread();
|
||||
}
|
||||
|
||||
protected virtual Thread InitializeQueueThread()
|
||||
{
|
||||
Thread thread = new Thread(ProcessQueue);
|
||||
thread.IsBackground = true;
|
||||
|
||||
return thread;
|
||||
}
|
||||
|
||||
~MessageQueue()
|
||||
{
|
||||
SetState(false);
|
||||
waitHandle.Close();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public bool Suspended
|
||||
{
|
||||
get
|
||||
{
|
||||
return suspended;
|
||||
}
|
||||
}
|
||||
|
||||
public ManualResetEvent WaitHandle
|
||||
{
|
||||
get
|
||||
{
|
||||
return waitHandle;
|
||||
}
|
||||
}
|
||||
|
||||
protected Queue<KeyValuePair<ContactInfo, string>> Queue
|
||||
{
|
||||
get { return queue; }
|
||||
}
|
||||
|
||||
public bool Enabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return enabled;
|
||||
}
|
||||
}
|
||||
|
||||
public bool QueueHasItems
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (Queue)
|
||||
return Queue.Count > 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual bool ClearQueueWhenDisabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Virtuals
|
||||
|
||||
protected virtual void ProcessQueue()
|
||||
{
|
||||
while (Enabled)
|
||||
{
|
||||
while (suspended)
|
||||
Wait(CommonWaitTime.QueueSuspension);
|
||||
|
||||
lock (Queue)
|
||||
{
|
||||
while (QueueHasItems)
|
||||
{
|
||||
waitHandle.Reset();
|
||||
RaiseMessageForwardingEvent();
|
||||
|
||||
DequeueAndSendMessage();
|
||||
Wait(QueueItemProcessedWaitTime);
|
||||
|
||||
RaiseMessageForwardedEvent();
|
||||
}
|
||||
|
||||
waitHandle.Set();
|
||||
}
|
||||
|
||||
Wait(QueueProcessedWaitTime);
|
||||
}
|
||||
|
||||
waitHandle.Set();
|
||||
}
|
||||
|
||||
protected void DequeueAndSendMessage()
|
||||
{
|
||||
lock (Queue)
|
||||
{
|
||||
KeyValuePair<ContactInfo, string> data = Queue.Dequeue();
|
||||
SendMessage(data.Key, data.Value);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void SendMessage(ContactInfo recipient, string message)
|
||||
{
|
||||
recipient.SendMessage(message);
|
||||
}
|
||||
|
||||
protected virtual int QueueItemProcessedWaitTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int)CommonWaitTime.QueueItemProcessed;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual int QueueProcessedWaitTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int)CommonWaitTime.QueueProcessed;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public void SuspendQueue()
|
||||
{
|
||||
suspended = true;
|
||||
}
|
||||
|
||||
public void ResumeQueue()
|
||||
{
|
||||
suspended = false;
|
||||
}
|
||||
|
||||
public void EnqueueMessage(ContactInfo to, string message)
|
||||
{
|
||||
lock (queue)
|
||||
queue.Enqueue(new KeyValuePair<ContactInfo, string>(to, message));
|
||||
|
||||
SetState(true);
|
||||
}
|
||||
|
||||
public void SetState(bool enabled)
|
||||
{
|
||||
// Queue is used as a sync object here...
|
||||
lock (Queue)
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
if ((QueueThread.ThreadState & ThreadState.Stopped) == ThreadState.Stopped)
|
||||
QueueThread = InitializeQueueThread();
|
||||
|
||||
if ((QueueThread.ThreadState & ThreadState.Unstarted) == ThreadState.Unstarted)
|
||||
QueueThread.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
Queue.Clear();
|
||||
}
|
||||
|
||||
this.enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
protected void RaiseMessageForwardingEvent()
|
||||
{
|
||||
if (MessageSending != null)
|
||||
MessageSending(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
protected void RaiseMessageForwardedEvent()
|
||||
{
|
||||
if (MessageSent != null)
|
||||
MessageSent(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
protected void Wait(CommonWaitTime miliseconds)
|
||||
{
|
||||
Wait((int)miliseconds);
|
||||
}
|
||||
|
||||
protected void Wait(int miliseconds)
|
||||
{
|
||||
Thread.Sleep(miliseconds);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
185
Hyphen/Plugins/Helpers/Sandbox.cs
Normal file
185
Hyphen/Plugins/Helpers/Sandbox.cs
Normal file
@ -0,0 +1,185 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
using Virtuoso.Miranda.Plugins.Resources;
|
||||
using System.Security;
|
||||
using System.Security.Policy;
|
||||
using System.IO;
|
||||
using Virtuoso.Miranda.Plugins.Infrastructure;
|
||||
using System.Diagnostics;
|
||||
using System.Security.Permissions;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Helpers
|
||||
{
|
||||
/* CLASS ORIGIN: Loki project */
|
||||
public abstract class Sandbox : RemoteObject
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private AppDomain hostingAppDomain;
|
||||
protected AppDomain HostingAppDomain
|
||||
{
|
||||
get { return hostingAppDomain; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Nested classes
|
||||
|
||||
private sealed class MirandaContextInitHelper : RemoteObject
|
||||
{
|
||||
public MirandaContextInitHelper(MirandaContext context)
|
||||
{
|
||||
if (context == null)
|
||||
throw new ArgumentNullException("context");
|
||||
|
||||
MirandaContext.InvalidateCurrent();
|
||||
MirandaContext.InitializeCurrent(context);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region .ctors
|
||||
|
||||
protected Sandbox() { }
|
||||
|
||||
public static void Unload(Sandbox sandbox)
|
||||
{
|
||||
if (sandbox == null)
|
||||
throw new ArgumentNullException("sandbox");
|
||||
|
||||
if (sandbox.hostingAppDomain == null)
|
||||
throw new ArgumentException();
|
||||
|
||||
if (sandbox.hostingAppDomain == AppDomain.CurrentDomain)
|
||||
throw new InvalidOperationException(TextResources.ExceptionMsg_UnableToUnloadPluginMangerFromCurrentAppDomain);
|
||||
|
||||
sandbox.OnSandboxUnload();
|
||||
sandbox.UnloadHostingAppDomain();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Virtuals
|
||||
|
||||
protected virtual void InitializeAppDomainSetup(AppDomainSetup domainSetup) { }
|
||||
|
||||
protected virtual void OnSandboxUnload() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helpers
|
||||
|
||||
protected static StrongName GetStrongName(Assembly assembly)
|
||||
{
|
||||
if (assembly == null)
|
||||
throw new ArgumentNullException("assembly");
|
||||
|
||||
AssemblyName assemblyName = assembly.GetName();
|
||||
Debug.Assert(assemblyName != null, "Could not get assembly name");
|
||||
|
||||
byte[] publicKey = assemblyName.GetPublicKey();
|
||||
if (publicKey == null || publicKey.Length == 0)
|
||||
throw new InvalidOperationException(String.Format("{0} is not strongly named", assembly));
|
||||
|
||||
StrongNamePublicKeyBlob keyBlob = new StrongNamePublicKeyBlob(publicKey);
|
||||
return new StrongName(keyBlob, assemblyName.Name, assemblyName.Version);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
protected void SetUpHostingAppDomain(string name)
|
||||
{
|
||||
SetUpHostingAppDomain(name, null, null);
|
||||
}
|
||||
|
||||
protected void SetUpHostingAppDomain(string name, Evidence evidence, PermissionSet permissions, params StrongName[] fullTrust)
|
||||
{
|
||||
if (String.IsNullOrEmpty(name))
|
||||
throw new ArgumentNullException("name");
|
||||
|
||||
if (hostingAppDomain != null)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
AppDomainSetup currentSetup = AppDomain.CurrentDomain.SetupInformation;
|
||||
AppDomainSetup domainSetup = new AppDomainSetup();
|
||||
|
||||
domainSetup.ApplicationName = name;
|
||||
domainSetup.ApplicationBase = currentSetup.ApplicationBase;
|
||||
domainSetup.PrivateBinPath = String.Format("{0};{1};", MirandaEnvironment.MirandaPluginsFolderRelativePath, MirandaEnvironment.ManagedPluginsFolderRelativePath);
|
||||
domainSetup.ConfigurationFile = currentSetup.ConfigurationFile;
|
||||
|
||||
InitializeAppDomainSetup(domainSetup);
|
||||
|
||||
if (permissions == null)
|
||||
hostingAppDomain = AppDomain.CreateDomain(name, null, domainSetup);
|
||||
else
|
||||
hostingAppDomain = AppDomain.CreateDomain(name, evidence, domainSetup, permissions, fullTrust);
|
||||
}
|
||||
|
||||
protected void UnloadHostingAppDomain()
|
||||
{
|
||||
if (hostingAppDomain == null)
|
||||
throw new InvalidOperationException();
|
||||
else
|
||||
{
|
||||
AppDomain.Unload(hostingAppDomain);
|
||||
hostingAppDomain = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected T InstantiateRemoteObject<T>(string assemblyName, string typeName, params object[] args) where T : class
|
||||
{
|
||||
return Activator.CreateInstance(hostingAppDomain, assemblyName, typeName, true, BindingFlags.Instance | BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.Public, null, args, null, null, null).Unwrap() as T;
|
||||
}
|
||||
|
||||
protected T InstantiateRemoteObjectFrom<T>(string assemblyFile, string typeName, params object[] args) where T : class
|
||||
{
|
||||
return Activator.CreateInstanceFrom(hostingAppDomain, assemblyFile, typeName, true, BindingFlags.Instance | BindingFlags.CreateInstance | BindingFlags.NonPublic | BindingFlags.Public, null, args, null, null, null).Unwrap() as T;
|
||||
}
|
||||
|
||||
protected void InitializeRemoteContext(MirandaContext context)
|
||||
{
|
||||
if (context == null)
|
||||
throw new ArgumentNullException("context");
|
||||
|
||||
if (hostingAppDomain == null)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
InstantiateRemoteObject<MirandaContextInitHelper>(Assembly.GetExecutingAssembly().FullName, typeof(MirandaContextInitHelper).FullName, context);
|
||||
}
|
||||
|
||||
public void SetUnhandledExceptionHandler(UnhandledExceptionEventHandler handler)
|
||||
{
|
||||
hostingAppDomain.UnhandledException += handler;
|
||||
}
|
||||
|
||||
public void RemoveUnhandledExceptionHandler(UnhandledExceptionEventHandler handler)
|
||||
{
|
||||
hostingAppDomain.UnhandledException -= handler;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
52
Hyphen/Plugins/Helpers/TypeInstanceCache.cs
Normal file
52
Hyphen/Plugins/Helpers/TypeInstanceCache.cs
Normal file
@ -0,0 +1,52 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Helpers
|
||||
{
|
||||
internal class TypeInstanceCache<T> : Dictionary<Type, T>
|
||||
{
|
||||
#region .ctors
|
||||
|
||||
public TypeInstanceCache() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public T Instantiate(Type type)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
if (ContainsKey(type))
|
||||
return this[type];
|
||||
else
|
||||
{
|
||||
T instance = (T)Activator.CreateInstance(type);
|
||||
this[type] = instance;
|
||||
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
38
Hyphen/Plugins/Helpers/Utilities.cs
Normal file
38
Hyphen/Plugins/Helpers/Utilities.cs
Normal file
@ -0,0 +1,38 @@
|
||||
/***********************************************************************\
|
||||
* Virtuoso.Miranda.Plugins (Hyphen) *
|
||||
* Provides a managed wrapper for API of IM client Miranda. *
|
||||
* Copyright (C) 2006-2009 virtuoso *
|
||||
* deml.tomas@seznam.cz *
|
||||
* *
|
||||
* 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. *
|
||||
\***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Virtuoso.Miranda.Plugins.Helpers
|
||||
{
|
||||
public static class Utilities
|
||||
{
|
||||
[CLSCompliant(false)]
|
||||
public static uint GetTimestamp()
|
||||
{
|
||||
return GetTimestamp(DateTime.Now);
|
||||
}
|
||||
|
||||
[CLSCompliant(false)]
|
||||
public static uint GetTimestamp(DateTime dateTime)
|
||||
{
|
||||
return (uint)(dateTime.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
}
|
||||
}
|
||||
}
|
169
Hyphen/Plugins/Hyphen/Configuration/Controls/AboutContent.Designer.cs
generated
Normal file
169
Hyphen/Plugins/Hyphen/Configuration/Controls/AboutContent.Designer.cs
generated
Normal file
@ -0,0 +1,169 @@
|
||||
using Virtuoso.Miranda.Plugins.Configuration.Forms.Controls;
|
||||
namespace Virtuoso.Hyphen.Configuration.Controls
|
||||
{
|
||||
partial class AboutContent
|
||||
{
|
||||
/// <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()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutContent));
|
||||
this.panel1 = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemHeader();
|
||||
this.panel2 = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemSection();
|
||||
this.VersionLABEL = new System.Windows.Forms.Label();
|
||||
this.HomepageLINK = new System.Windows.Forms.LinkLabel();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.categoryItemSection1 = new Virtuoso.Miranda.Plugins.Configuration.Forms.Controls.CategoryItemSection();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.listBox1 = new System.Windows.Forms.ListBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.BackColor = System.Drawing.Color.Transparent;
|
||||
this.panel1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.panel1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.panel1.HeaderFont = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.panel1.HeaderText = "About Hyphen";
|
||||
this.panel1.Image = global::Virtuoso.Miranda.Plugins.Properties.Resources.Icon_232_32x32;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.MinimumSize = new System.Drawing.Size(300, 40);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(792, 40);
|
||||
this.panel1.TabIndex = 0;
|
||||
//
|
||||
// panel2
|
||||
//
|
||||
this.panel2.BackColor = System.Drawing.Color.Transparent;
|
||||
this.panel2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
|
||||
this.panel2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.panel2.ForeColor = System.Drawing.Color.Black;
|
||||
this.panel2.Location = new System.Drawing.Point(10, 46);
|
||||
this.panel2.MinimumSize = new System.Drawing.Size(300, 20);
|
||||
this.panel2.Name = "panel2";
|
||||
this.panel2.SectionName = "Hyphen";
|
||||
this.panel2.Size = new System.Drawing.Size(765, 20);
|
||||
this.panel2.TabIndex = 1;
|
||||
//
|
||||
// VersionLABEL
|
||||
//
|
||||
this.VersionLABEL.AutoSize = true;
|
||||
this.VersionLABEL.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.VersionLABEL.Location = new System.Drawing.Point(127, 72);
|
||||
this.VersionLABEL.Name = "VersionLABEL";
|
||||
this.VersionLABEL.Size = new System.Drawing.Size(51, 13);
|
||||
this.VersionLABEL.TabIndex = 2;
|
||||
this.VersionLABEL.Text = "v0.0.0.0";
|
||||
//
|
||||
// HomepageLINK
|
||||
//
|
||||
this.HomepageLINK.AutoSize = true;
|
||||
this.HomepageLINK.Location = new System.Drawing.Point(130, 85);
|
||||
this.HomepageLINK.Name = "HomepageLINK";
|
||||
this.HomepageLINK.Size = new System.Drawing.Size(121, 13);
|
||||
this.HomepageLINK.TabIndex = 3;
|
||||
this.HomepageLINK.TabStop = true;
|
||||
this.HomepageLINK.Text = "© (Assembly copyright)";
|
||||
this.HomepageLINK.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.HomepageLINK_LinkClicked);
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
|
||||
this.pictureBox1.Location = new System.Drawing.Point(21, 72);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(100, 50);
|
||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||
this.pictureBox1.TabIndex = 5;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// categoryItemSection1
|
||||
//
|
||||
this.categoryItemSection1.BackColor = System.Drawing.Color.Transparent;
|
||||
this.categoryItemSection1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
|
||||
this.categoryItemSection1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.categoryItemSection1.ForeColor = System.Drawing.Color.Black;
|
||||
this.categoryItemSection1.Location = new System.Drawing.Point(10, 149);
|
||||
this.categoryItemSection1.MinimumSize = new System.Drawing.Size(300, 20);
|
||||
this.categoryItemSection1.Name = "categoryItemSection1";
|
||||
this.categoryItemSection1.SectionName = "Components";
|
||||
this.categoryItemSection1.Size = new System.Drawing.Size(765, 20);
|
||||
this.categoryItemSection1.TabIndex = 4;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Font = new System.Drawing.Font("Tahoma", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
||||
this.label1.Location = new System.Drawing.Point(18, 172);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(239, 13);
|
||||
this.label1.TabIndex = 5;
|
||||
this.label1.Text = "Hyphen uses these 3rd party assemblies:";
|
||||
//
|
||||
// listBox1
|
||||
//
|
||||
this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.listBox1.FormattingEnabled = true;
|
||||
this.listBox1.Items.AddRange(new object[] {
|
||||
"RibbonPanel, © Juan Pablo G.C."});
|
||||
this.listBox1.Location = new System.Drawing.Point(33, 188);
|
||||
this.listBox1.Name = "listBox1";
|
||||
this.listBox1.SelectionMode = System.Windows.Forms.SelectionMode.None;
|
||||
this.listBox1.Size = new System.Drawing.Size(224, 104);
|
||||
this.listBox1.Sorted = true;
|
||||
this.listBox1.TabIndex = 6;
|
||||
//
|
||||
// AboutContent
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.listBox1);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Controls.Add(this.HomepageLINK);
|
||||
this.Controls.Add(this.VersionLABEL);
|
||||
this.Controls.Add(this.categoryItemSection1);
|
||||
this.Controls.Add(this.panel2);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Name = "AboutContent";
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private CategoryItemHeader panel1;
|
||||
private CategoryItemSection panel2;
|
||||
private System.Windows.Forms.Label VersionLABEL;
|
||||
private System.Windows.Forms.LinkLabel HomepageLINK;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private CategoryItemSection categoryItemSection1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.ListBox listBox1;
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user