[Nmailserver-commits] SF.net SVN: nmailserver: [221] NMail/trunk
Brought to you by:
dframpton-oss,
tmyroadctfig
|
From: <tmy...@us...> - 2007-06-16 14:54:29
|
Revision: 221
http://svn.sourceforge.net/nmailserver/?rev=221&view=rev
Author: tmyroadctfig
Date: 2007-06-16 07:54:29 -0700 (Sat, 16 Jun 2007)
Log Message:
-----------
Work on user/group administration.
Modified Paths:
--------------
NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.Designer.cs
NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.cs
NMail/trunk/NMail.Administration.WinForms/MailDomain/MailDomainManager.cs
NMail/trunk/NMail.Administration.WinForms/MainForm.cs
NMail/trunk/NMail.Administration.WinForms/ManagementTree/ManagementTree.cs
NMail/trunk/NMail.Administration.WinForms/NMail.Administration.WinForms.csproj
NMail/trunk/NMail.Administration.WinForms/Resources/Connected.html
NMail/trunk/NMail.Icons/NMail.Icons.csproj
Added Paths:
-----------
NMail/trunk/NMail.Administration.WinForms/Groups/
NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.Designer.cs
NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.cs
NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.resx
NMail/trunk/NMail.Administration.WinForms/Resources/LGPL/edit_user.png
NMail/trunk/NMail.Administration.WinForms/Users/
NMail/trunk/NMail.Administration.WinForms/Users/UserManager.Designer.cs
NMail/trunk/NMail.Administration.WinForms/Users/UserManager.cs
NMail/trunk/NMail.Administration.WinForms/Users/UserManager.resx
NMail/trunk/NMail.Icons/Resources/16x16/actions/edit_group.png
NMail/trunk/NMail.Icons/Resources/16x16/actions/edit_user.png
NMail/trunk/NMail.Icons/Resources/22x22/actions/edit_user.png
Modified: NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.Designer.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.Designer.cs 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.Designer.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -27,6 +27,7 @@
this.exceptionDetailBox = new System.Windows.Forms.TextBox();
this.errorIcon = new System.Windows.Forms.PictureBox();
this.exitButton = new System.Windows.Forms.Button();
+ this.reportButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize) (this.errorIcon)).BeginInit();
this.SuspendLayout();
//
@@ -66,10 +67,21 @@
this.exitButton.Name = "exitButton";
this.exitButton.Size = new System.Drawing.Size(75, 23);
this.exitButton.TabIndex = 3;
- this.exitButton.Text = "Exit";
+ this.exitButton.Text = "Quit";
this.exitButton.UseVisualStyleBackColor = true;
this.exitButton.Click += new System.EventHandler(this.exitButton_Click);
//
+ // reportButton
+ //
+ this.reportButton.Location = new System.Drawing.Point(140, 125);
+ this.reportButton.Name = "reportButton";
+ this.reportButton.Size = new System.Drawing.Size(75, 23);
+ this.reportButton.TabIndex = 4;
+ this.reportButton.Text = "Send Report";
+ this.reportButton.UseVisualStyleBackColor = true;
+ this.reportButton.Visible = false;
+ this.reportButton.Click += new System.EventHandler(this.reportButton_Click);
+ //
// ExceptionDialog
//
this.AcceptButton = this.okButton;
@@ -77,6 +89,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.okButton;
this.ClientSize = new System.Drawing.Size(391, 159);
+ this.Controls.Add(this.reportButton);
this.Controls.Add(this.exitButton);
this.Controls.Add(this.errorIcon);
this.Controls.Add(this.exceptionDetailBox);
@@ -100,5 +113,6 @@
private System.Windows.Forms.TextBox exceptionDetailBox;
private System.Windows.Forms.PictureBox errorIcon;
private System.Windows.Forms.Button exitButton;
+ private System.Windows.Forms.Button reportButton;
}
}
\ No newline at end of file
Modified: NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.cs 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/ExceptionDialog.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -20,6 +20,7 @@
using System.ComponentModel;
using System.Data;
using System.Drawing;
+using System.Net.Mail;
using System.Text;
using System.Windows.Forms;
@@ -41,11 +42,37 @@
/// </summary>
/// <param name="ex">The exception to display.</param>
public void SetException(Exception ex) {
+ this.exceptionDetailBox.Text = GetExceptionMessage(ex);
+ }
+
+ private void okButton_Click(object sender, EventArgs e) {
+ this.Close();
+ }
+
+ private void exitButton_Click(object sender, EventArgs e) {
+ Application.Exit();
+ }
+
+ private void reportButton_Click(object sender, EventArgs e) {
+ //MailMessage message = new MailMessage("tmy...@us...", "tmy...@us...");
+ //message.Subject = "[NMail Admin Exception]";
+ //message.Body = this.exceptionDetailBox.Text;
+
+ //SmtpClient client = new SmtpClient("mail.sourceforge.net");
+ //client.Send(message);
+ }
+
+ /// <summary>
+ /// Gets the exception as a string.
+ /// </summary>
+ /// <param name="ex">The exception to process.</param>
+ /// <returns>The string.</returns>
+ public static string GetExceptionMessage(Exception ex) {
Exception inner = ex.InnerException;
StringBuilder message = new StringBuilder();
message.Append(string.Format(
- "Unhandled exception:\r\n" +
+ "Unhandled exception:\r\n" +
"{0}\r\n" +
"----------------------------------------\r\n" +
"{1}",
@@ -65,15 +92,7 @@
inner = inner.InnerException;
}
- this.exceptionDetailBox.Text = message.ToString();
+ return message.ToString();
}
-
- private void okButton_Click(object sender, EventArgs e) {
- this.Close();
- }
-
- private void exitButton_Click(object sender, EventArgs e) {
- Application.Exit();
- }
}
}
\ No newline at end of file
Added: NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.Designer.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.Designer.cs (rev 0)
+++ NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.Designer.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -0,0 +1,132 @@
+namespace NMail.Administration.WinForms.Groups {
+ partial class GroupManager {
+ /// <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();
+ this.bottomPanel = new System.Windows.Forms.Panel();
+ this.refreshButton = new System.Windows.Forms.Button();
+ this.groupsSplitContainer = new System.Windows.Forms.SplitContainer();
+ this.groupListView = new System.Windows.Forms.ListView();
+ this.groupIdColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.groupNameColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.imageList = new System.Windows.Forms.ImageList(this.components);
+ this.bottomPanel.SuspendLayout();
+ this.groupsSplitContainer.Panel1.SuspendLayout();
+ this.groupsSplitContainer.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // bottomPanel
+ //
+ this.bottomPanel.Controls.Add(this.refreshButton);
+ this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.bottomPanel.Location = new System.Drawing.Point(0, 290);
+ this.bottomPanel.Name = "bottomPanel";
+ this.bottomPanel.Size = new System.Drawing.Size(416, 40);
+ this.bottomPanel.TabIndex = 1;
+ //
+ // refreshButton
+ //
+ this.refreshButton.Location = new System.Drawing.Point(4, 7);
+ this.refreshButton.Name = "refreshButton";
+ this.refreshButton.Size = new System.Drawing.Size(75, 23);
+ this.refreshButton.TabIndex = 0;
+ this.refreshButton.Text = "Refresh";
+ this.refreshButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+ this.refreshButton.UseVisualStyleBackColor = true;
+ this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+ //
+ // groupsSplitContainer
+ //
+ this.groupsSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupsSplitContainer.Location = new System.Drawing.Point(0, 0);
+ this.groupsSplitContainer.Name = "groupsSplitContainer";
+ this.groupsSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // groupsSplitContainer.Panel1
+ //
+ this.groupsSplitContainer.Panel1.Controls.Add(this.groupListView);
+ this.groupsSplitContainer.Size = new System.Drawing.Size(416, 290);
+ this.groupsSplitContainer.SplitterDistance = 139;
+ this.groupsSplitContainer.TabIndex = 0;
+ //
+ // groupListView
+ //
+ this.groupListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.groupIdColumnHeader,
+ this.groupNameColumnHeader});
+ this.groupListView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupListView.FullRowSelect = true;
+ this.groupListView.GridLines = true;
+ this.groupListView.HideSelection = false;
+ this.groupListView.Location = new System.Drawing.Point(0, 0);
+ this.groupListView.MultiSelect = false;
+ this.groupListView.Name = "groupListView";
+ this.groupListView.Size = new System.Drawing.Size(416, 139);
+ this.groupListView.SmallImageList = this.imageList;
+ this.groupListView.TabIndex = 0;
+ this.groupListView.UseCompatibleStateImageBehavior = false;
+ this.groupListView.View = System.Windows.Forms.View.Details;
+ //
+ // groupIdColumnHeader
+ //
+ this.groupIdColumnHeader.Text = "Group Id";
+ this.groupIdColumnHeader.Width = 59;
+ //
+ // groupNameColumnHeader
+ //
+ this.groupNameColumnHeader.Text = "Group Name";
+ this.groupNameColumnHeader.Width = 93;
+ //
+ // imageList
+ //
+ this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+ this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+ this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+ //
+ // GroupManager
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.groupsSplitContainer);
+ this.Controls.Add(this.bottomPanel);
+ this.Name = "GroupManager";
+ this.Size = new System.Drawing.Size(416, 330);
+ this.bottomPanel.ResumeLayout(false);
+ this.groupsSplitContainer.Panel1.ResumeLayout(false);
+ this.groupsSplitContainer.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Panel bottomPanel;
+ private System.Windows.Forms.Button refreshButton;
+ private System.Windows.Forms.SplitContainer groupsSplitContainer;
+ private System.Windows.Forms.ListView groupListView;
+ private System.Windows.Forms.ColumnHeader groupIdColumnHeader;
+ private System.Windows.Forms.ColumnHeader groupNameColumnHeader;
+ private System.Windows.Forms.ImageList imageList;
+ }
+}
Added: NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.cs (rev 0)
+++ NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+using NMail.DataTypes.LocalStore;
+using NMail.Icons;
+
+namespace NMail.Administration.WinForms.Groups {
+ public partial class GroupManager : UserControl {
+
+ private MainForm mainForm;
+
+ public GroupManager(MainForm mainForm) {
+ InitializeComponent();
+
+ this.mainForm = mainForm;
+
+ this.imageList.Images.Add(IconHelper.GetImage("edit_group", "actions", IconSize.s16x16));
+ this.refreshButton.Image = IconHelper.GetImage("recur", "actions", IconSize.s16x16);
+ }
+
+ private void refreshButton_Click(object sender, EventArgs e) {
+ try {
+ // Get a list of users and groups
+ ILocalStore localStore = this.mainForm.RemoteAdministration.NMailServer.LocalStore;
+ IList<LocalStoreGroup> groups = localStore.GetGroups(this.mainForm.AuthenticationToken);
+
+ this.groupListView.Items.Clear();
+
+ // Add them to the list view
+ foreach (LocalStoreGroup group in groups) {
+ ListViewItem item = new GroupListViewItem(group);
+ this.groupListView.Items.Add(item);
+ }
+
+ } catch (Exception ex) {
+ // Something bad :(
+ Program.ShowExceptionDialog(ex);
+ }
+ }
+ }
+
+ /// <summary>
+ /// A list view item for displaying group.
+ /// </summary>
+ public class GroupListViewItem : ListViewItem {
+
+ public GroupListViewItem(LocalStoreGroup group) {
+ this.group = group;
+
+ this.SubItems[0] = new ListViewSubItem(this, group.GroupId.ToString());
+ this.SubItems.Add(new ListViewSubItem(this, group.Name));
+
+ this.ImageIndex = 0;
+ }
+
+ private LocalStoreGroup group;
+
+ public LocalStoreGroup LocalStorejGroup {
+ get { return group; }
+ }
+ }
+}
Added: NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.resx
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.resx (rev 0)
+++ NMail/trunk/NMail.Administration.WinForms/Groups/GroupManager.resx 2007-06-16 14:54:29 UTC (rev 221)
@@ -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="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+</root>
\ No newline at end of file
Modified: NMail/trunk/NMail.Administration.WinForms/MailDomain/MailDomainManager.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/MailDomain/MailDomainManager.cs 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/MailDomain/MailDomainManager.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -30,7 +30,9 @@
using NMail.Icons;
namespace NMail.Administration.WinForms.MailDomain {
-
+ /// <summary>
+ /// A control for managing mail domains.
+ /// </summary>
public partial class MailDomainManager : UserControl {
public MailDomainManager(MainForm mainForm) {
InitializeComponent();
Modified: NMail/trunk/NMail.Administration.WinForms/MainForm.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/MainForm.cs 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/MainForm.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -39,22 +39,32 @@
using NMail.Server;
namespace NMail.Administration.WinForms {
+ /// <summary>
+ /// The main form for the administration tool.
+ /// </summary>
public partial class MainForm : Form {
/// <summary>
/// Logging support for this class
/// </summary>
private static ILog log = LogManager.GetLogger(typeof(MainForm));
+ /// <summary>
+ /// Creates a new instance of the main form.
+ /// </summary>
public MainForm() {
+ // Init this form
InitializeComponent();
InitialiseRemoting();
+ // Init each control
InitialiseStatusBrowser();
InitialiseManagementTree();
InitialiseServicesViewer();
InitialiseMailDomainManager();
InitialiseSpoolManager();
+ InitialiseUserManager();
+ InitialiseGroupManager();
this.connectionStatusLbl.Image = IconHelper.GetImage("connect_no", "actions", IconSize.s16x16);
this.connectMenuItem.Image = IconHelper.GetImage("connect_no", "actions", IconSize.s16x16);
@@ -170,6 +180,8 @@
}
private void connectMenuItem_Click(object sender, EventArgs e) {
+
+ throw new Exception("Testing 123");
// Prompt if already connected
if (this.remoteAdministration != null) {
DialogResult result = MessageBox.Show(
@@ -314,6 +326,10 @@
this.ShowUsersControl();
e.Cancel = true;
+ } else if (urlString == "groups:") {
+ this.ShowGroupsControl();
+ e.Cancel = true;
+
} else if (urlString == "folders:") {
this.ShowFoldersControl();
e.Cancel = true;
@@ -470,9 +486,88 @@
}
#endregion
+ #region User Manager
+ /// <summary>
+ /// The user manager.
+ /// </summary>
+ Users.UserManager userManager;
+
+ DockContent userManagerDock;
+
+ protected void InitialiseUserManager() {
+ this.userManager = new Users.UserManager(this);
+ this.userManager.Dock = DockStyle.Fill;
+
+ userManagerDock = new DockContent();
+ userManagerDock.Controls.Add(this.userManager);
+ userManagerDock.Text = "Users";
+ userManagerDock.DockPanel = this.dockPanel;
+ userManagerDock.DockState = DockState.Hidden;
+ userManagerDock.Icon = IconHelper.GetIcon("edit_user", "actions", IconSize.s16x16);
+ userManagerDock.FormClosing += new FormClosingEventHandler(userManagerDock_FormClosing);
+ }
+
+ void userManagerDock_FormClosing(object sender, FormClosingEventArgs e) {
+ if (e.CloseReason == CloseReason.UserClosing) {
+ e.Cancel = true;
+
+ this.userManagerDock.DockState = DockState.Hidden;
+ }
+ }
+
public void ShowUsersControl() {
+ if (!Connected) {
+ ShowStatusBrowser();
+
+ } else {
+ this.userManagerDock.DockState = DockState.Document;
+ this.userManagerDock.DockHandler.DockTo(this.dockPanel.DockWindows[DockState.Document].NestedPanes[0], DockStyle.Fill, 0);
+ this.userManagerDock.DockHandler.Show();
+ }
}
+ #endregion
+ #region Group Manager
+ /// <summary>
+ /// The group manager.
+ /// </summary>
+ Groups.GroupManager groupManager;
+
+ DockContent groupManagerDock;
+
+ protected void InitialiseGroupManager() {
+ this.groupManager = new Groups.GroupManager(this);
+ this.groupManager.Dock = DockStyle.Fill;
+
+ groupManagerDock = new DockContent();
+ groupManagerDock.Controls.Add(this.groupManager);
+ groupManagerDock.Text = "Groups";
+ groupManagerDock.DockPanel = this.dockPanel;
+ groupManagerDock.DockState = DockState.Hidden;
+ groupManagerDock.Icon = IconHelper.GetIcon("edit_group", "actions", IconSize.s16x16);
+ groupManagerDock.FormClosing += new FormClosingEventHandler(groupManagerDock_FormClosing);
+ }
+
+ void groupManagerDock_FormClosing(object sender, FormClosingEventArgs e) {
+ if (e.CloseReason == CloseReason.UserClosing) {
+ e.Cancel = true;
+
+ this.groupManagerDock.DockState = DockState.Hidden;
+ }
+ }
+
+ public void ShowGroupsControl() {
+ if (!Connected) {
+ ShowStatusBrowser();
+
+ } else {
+ this.groupManagerDock.DockState = DockState.Document;
+ this.groupManagerDock.DockHandler.DockTo(this.dockPanel.DockWindows[DockState.Document].NestedPanes[0], DockStyle.Fill, 0);
+ this.groupManagerDock.DockHandler.Show();
+ }
+ }
+ #endregion
+
public void ShowFoldersControl() {
}
Modified: NMail/trunk/NMail.Administration.WinForms/ManagementTree/ManagementTree.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/ManagementTree/ManagementTree.cs 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/ManagementTree/ManagementTree.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -42,6 +42,7 @@
this.imageList.Images.Add(IconHelper.GetImage("edit_group", "actions", IconSize.s22x22));
this.imageList.Images.Add(IconHelper.GetImage("folder", "actions", IconSize.s22x22));
this.imageList.Images.Add(IconHelper.GetImage("queue", "actions", IconSize.s22x22));
+ this.imageList.Images.Add(IconHelper.GetImage("edit_user", "actions", IconSize.s22x22));
this.nmailNode = new TreeNode("NMail", 0, 0);
this.treeView.Nodes.Add(this.nmailNode);
@@ -55,9 +56,12 @@
this.mailDomainNode = new TreeNode("Mail Domains", 2, 2);
this.nmailNode.Nodes.Add(this.mailDomainNode);
- this.usersNode = new TreeNode("Users", 3, 3);
+ this.usersNode = new TreeNode("Users", 6, 6);
this.nmailNode.Nodes.Add(this.usersNode);
+ this.groupsNode = new TreeNode("Groups", 3, 3);
+ this.nmailNode.Nodes.Add(this.groupsNode);
+
this.foldersNode = new TreeNode("Folders", 4, 4);
this.nmailNode.Nodes.Add(this.foldersNode);
@@ -76,6 +80,8 @@
TreeNode usersNode;
+ TreeNode groupsNode;
+
TreeNode foldersNode;
private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
@@ -94,6 +100,9 @@
} else if (e.Node == usersNode) {
this.mainForm.ShowUsersControl();
+ } else if (e.Node == groupsNode) {
+ this.mainForm.ShowGroupsControl();
+
} else if (e.Node == foldersNode) {
this.mainForm.ShowFoldersControl();
Modified: NMail/trunk/NMail.Administration.WinForms/NMail.Administration.WinForms.csproj
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/NMail.Administration.WinForms.csproj 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/NMail.Administration.WinForms.csproj 2007-06-16 14:54:29 UTC (rev 221)
@@ -67,6 +67,12 @@
<Compile Include="ExceptionDialog.Designer.cs">
<DependentUpon>ExceptionDialog.cs</DependentUpon>
</Compile>
+ <Compile Include="Groups\GroupManager.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Groups\GroupManager.Designer.cs">
+ <DependentUpon>GroupManager.cs</DependentUpon>
+ </Compile>
<Compile Include="MailDomain\MailDomainEditor.cs">
<SubType>Form</SubType>
</Compile>
@@ -105,6 +111,10 @@
<SubType>Designer</SubType>
<DependentUpon>ExceptionDialog.cs</DependentUpon>
</EmbeddedResource>
+ <EmbeddedResource Include="Groups\GroupManager.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>GroupManager.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="MailDomain\MailDomainEditor.resx">
<SubType>Designer</SubType>
<DependentUpon>MailDomainEditor.cs</DependentUpon>
@@ -138,6 +148,10 @@
<SubType>Designer</SubType>
<DependentUpon>SpoolMessageViewer.cs</DependentUpon>
</EmbeddedResource>
+ <EmbeddedResource Include="Users\UserManager.resx">
+ <SubType>Designer</SubType>
+ <DependentUpon>UserManager.cs</DependentUpon>
+ </EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
@@ -169,6 +183,12 @@
<Compile Include="Spool\SmtpSpoolManager.Designer.cs">
<DependentUpon>SmtpSpoolManager.cs</DependentUpon>
</Compile>
+ <Compile Include="Users\UserManager.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Users\UserManager.Designer.cs">
+ <DependentUpon>UserManager.cs</DependentUpon>
+ </Compile>
</ItemGroup>
<ItemGroup>
<Content Include="Resources\ConnectFailed.html">
@@ -186,6 +206,9 @@
<Content Include="Resources\LGPL\edit_group.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="Resources\LGPL\edit_user.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="Resources\LGPL\exec.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Modified: NMail/trunk/NMail.Administration.WinForms/Resources/Connected.html
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Resources/Connected.html 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Administration.WinForms/Resources/Connected.html 2007-06-16 14:54:29 UTC (rev 221)
@@ -30,12 +30,18 @@
</a>
</p>
- <p>
+ <p>
<a href="users:">
- <img src="LGPL/edit_group.png"/> Manage users and groups.
+ <img src="LGPL/edit_user.png"/> Manage users.
</a>
</p>
+ <p>
+ <a href="groups:">
+ <img src="LGPL/edit_group.png"/> Manage groups.
+ </a>
+ </p>
+
<p>
<a href="folders:">
<img src="LGPL/folder.png"/> Manage folders.
Added: NMail/trunk/NMail.Administration.WinForms/Resources/LGPL/edit_user.png
===================================================================
(Binary files differ)
Property changes on: NMail/trunk/NMail.Administration.WinForms/Resources/LGPL/edit_user.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: NMail/trunk/NMail.Administration.WinForms/Users/UserManager.Designer.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Users/UserManager.Designer.cs (rev 0)
+++ NMail/trunk/NMail.Administration.WinForms/Users/UserManager.Designer.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -0,0 +1,153 @@
+namespace NMail.Administration.WinForms.Users {
+ partial class UserManager {
+ /// <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();
+ this.bottomPanel = new System.Windows.Forms.Panel();
+ this.refreshButton = new System.Windows.Forms.Button();
+ this.userSplitContainer = new System.Windows.Forms.SplitContainer();
+ this.userListView = new System.Windows.Forms.ListView();
+ this.userIdColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.usernameColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.warnQuotaColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.hardQuotaColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.userFolderIdColumnHeader = new System.Windows.Forms.ColumnHeader();
+ this.imageList = new System.Windows.Forms.ImageList(this.components);
+ this.bottomPanel.SuspendLayout();
+ this.userSplitContainer.Panel1.SuspendLayout();
+ this.userSplitContainer.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // bottomPanel
+ //
+ this.bottomPanel.Controls.Add(this.refreshButton);
+ this.bottomPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.bottomPanel.Location = new System.Drawing.Point(0, 305);
+ this.bottomPanel.Name = "bottomPanel";
+ this.bottomPanel.Size = new System.Drawing.Size(633, 40);
+ this.bottomPanel.TabIndex = 0;
+ //
+ // refreshButton
+ //
+ this.refreshButton.Location = new System.Drawing.Point(4, 7);
+ this.refreshButton.Name = "refreshButton";
+ this.refreshButton.Size = new System.Drawing.Size(75, 23);
+ this.refreshButton.TabIndex = 0;
+ this.refreshButton.Text = "Refresh";
+ this.refreshButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+ this.refreshButton.UseVisualStyleBackColor = true;
+ this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+ //
+ // userSplitContainer
+ //
+ this.userSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.userSplitContainer.Location = new System.Drawing.Point(0, 0);
+ this.userSplitContainer.Name = "userSplitContainer";
+ this.userSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // userSplitContainer.Panel1
+ //
+ this.userSplitContainer.Panel1.Controls.Add(this.userListView);
+ this.userSplitContainer.Size = new System.Drawing.Size(633, 305);
+ this.userSplitContainer.SplitterDistance = 146;
+ this.userSplitContainer.TabIndex = 0;
+ //
+ // userListView
+ //
+ this.userListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.userIdColumnHeader,
+ this.usernameColumnHeader,
+ this.warnQuotaColumnHeader,
+ this.hardQuotaColumnHeader,
+ this.userFolderIdColumnHeader});
+ this.userListView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.userListView.FullRowSelect = true;
+ this.userListView.GridLines = true;
+ this.userListView.HideSelection = false;
+ this.userListView.Location = new System.Drawing.Point(0, 0);
+ this.userListView.MultiSelect = false;
+ this.userListView.Name = "userListView";
+ this.userListView.Size = new System.Drawing.Size(633, 146);
+ this.userListView.SmallImageList = this.imageList;
+ this.userListView.TabIndex = 0;
+ this.userListView.UseCompatibleStateImageBehavior = false;
+ this.userListView.View = System.Windows.Forms.View.Details;
+ //
+ // userIdColumnHeader
+ //
+ this.userIdColumnHeader.Text = "User Id";
+ this.userIdColumnHeader.Width = 44;
+ //
+ // usernameColumnHeader
+ //
+ this.usernameColumnHeader.Text = "Username";
+ this.usernameColumnHeader.Width = 106;
+ //
+ // warnQuotaColumnHeader
+ //
+ this.warnQuotaColumnHeader.Text = "Warning Quota";
+ //
+ // hardQuotaColumnHeader
+ //
+ this.hardQuotaColumnHeader.Text = "Hard Quota";
+ //
+ // userFolderIdColumnHeader
+ //
+ this.userFolderIdColumnHeader.Text = "User Folder Id";
+ //
+ // imageList
+ //
+ this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+ this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+ this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+ //
+ // UserManager
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.userSplitContainer);
+ this.Controls.Add(this.bottomPanel);
+ this.Name = "UserManager";
+ this.Size = new System.Drawing.Size(633, 345);
+ this.bottomPanel.ResumeLayout(false);
+ this.userSplitContainer.Panel1.ResumeLayout(false);
+ this.userSplitContainer.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Panel bottomPanel;
+ private System.Windows.Forms.SplitContainer userSplitContainer;
+ private System.Windows.Forms.ListView userListView;
+ private System.Windows.Forms.Button refreshButton;
+ private System.Windows.Forms.ColumnHeader userIdColumnHeader;
+ private System.Windows.Forms.ColumnHeader usernameColumnHeader;
+ private System.Windows.Forms.ColumnHeader warnQuotaColumnHeader;
+ private System.Windows.Forms.ColumnHeader hardQuotaColumnHeader;
+ private System.Windows.Forms.ColumnHeader userFolderIdColumnHeader;
+ private System.Windows.Forms.ImageList imageList;
+ }
+}
Added: NMail/trunk/NMail.Administration.WinForms/Users/UserManager.cs
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Users/UserManager.cs (rev 0)
+++ NMail/trunk/NMail.Administration.WinForms/Users/UserManager.cs 2007-06-16 14:54:29 UTC (rev 221)
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2004-2007 Luke Quinane
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+using NMail.DataTypes.LocalStore;
+using NMail.Icons;
+
+namespace NMail.Administration.WinForms.Users {
+ /// <summary>
+ /// A control for managing users and groups.
+ /// </summary>
+ public partial class UserManager : UserControl {
+
+ private MainForm mainForm;
+
+ public UserManager(MainForm mainForm) {
+ InitializeComponent();
+
+ this.mainForm = mainForm;
+
+ this.imageList.Images.Add(IconHelper.GetImage("edit_user", "actions", IconSize.s16x16));
+ this.refreshButton.Image = IconHelper.GetImage("recur", "actions", IconSize.s16x16);
+ }
+
+ private void refreshButton_Click(object sender, EventArgs e) {
+ try {
+ // Get a list of users and groups
+ ILocalStore localStore = this.mainForm.RemoteAdministration.NMailServer.LocalStore;
+ IList<LocalStoreUser> users = localStore.GetUsers(this.mainForm.AuthenticationToken);
+
+ this.userListView.Items.Clear();
+
+ // Add them to the list view
+ foreach (LocalStoreUser user in users) {
+ ListViewItem item = new UserListViewItem(user);
+ this.userListView.Items.Add(item);
+ }
+
+ } catch (Exception ex) {
+ // Something bad :(
+ Program.ShowExceptionDialog(ex);
+ }
+ }
+ }
+
+ /// <summary>
+ /// A list view item for displaying users.
+ /// </summary>
+ public class UserListViewItem : ListViewItem {
+
+ public UserListViewItem(LocalStoreUser user) {
+ this.user = user;
+
+ this.SubItems[0] = new ListViewSubItem(this, user.UserId.ToString());
+ this.SubItems.Add(new ListViewSubItem(this, user.Username));
+ this.SubItems.Add(new ListViewSubItem(this, user.QuotaWarnLimit.ToString()));
+ this.SubItems.Add(new ListViewSubItem(this, user.QuotaHardLimit.ToString()));
+ this.SubItems.Add(new ListViewSubItem(this, user.UserFolderId.ToString()));
+
+ this.ImageIndex = 0;
+ }
+
+ private LocalStoreUser user;
+
+ public LocalStoreUser User {
+ get { return user; }
+ }
+ }
+}
Added: NMail/trunk/NMail.Administration.WinForms/Users/UserManager.resx
===================================================================
--- NMail/trunk/NMail.Administration.WinForms/Users/UserManager.resx (rev 0)
+++ NMail/trunk/NMail.Administration.WinForms/Users/UserManager.resx 2007-06-16 14:54:29 UTC (rev 221)
@@ -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="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+</root>
\ No newline at end of file
Modified: NMail/trunk/NMail.Icons/NMail.Icons.csproj
===================================================================
--- NMail/trunk/NMail.Icons/NMail.Icons.csproj 2007-06-11 05:34:02 UTC (rev 220)
+++ NMail/trunk/NMail.Icons/NMail.Icons.csproj 2007-06-16 14:54:29 UTC (rev 221)
@@ -61,6 +61,8 @@
<EmbeddedResource Include="Resources\16x16\actions\edit.png" />
<EmbeddedResource Include="Resources\16x16\actions\recur.png" />
<EmbeddedResource Include="Resources\16x16\actions\mail_generic.png" />
+ <EmbeddedResource Include="Resources\16x16\actions\edit_user.png" />
+ <EmbeddedResource Include="Resources\22x22\actions\edit_user.png" />
<Content Include="Resources\LGPL.txt" />
</ItemGroup>
<ItemGroup>
Added: NMail/trunk/NMail.Icons/Resources/16x16/actions/edit_group.png
===================================================================
(Binary files differ)
Property changes on: NMail/trunk/NMail.Icons/Resources/16x16/actions/edit_group.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: NMail/trunk/NMail.Icons/Resources/16x16/actions/edit_user.png
===================================================================
(Binary files differ)
Property changes on: NMail/trunk/NMail.Icons/Resources/16x16/actions/edit_user.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: NMail/trunk/NMail.Icons/Resources/22x22/actions/edit_user.png
===================================================================
(Binary files differ)
Property changes on: NMail/trunk/NMail.Icons/Resources/22x22/actions/edit_user.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|