mit hyphen

This commit is contained in:
2013-06-25 22:53:41 +00:00
parent 8896edc368
commit 318d93e6c1
424 changed files with 161843 additions and 2 deletions
+73
View 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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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;
}
}
@@ -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
}
}
@@ -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>
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
</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>
@@ -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>
@@ -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>
@@ -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>
@@ -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>
@@ -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
View 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);
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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);
}
}
}