Click here to Skip to main content
15,896,118 members
Articles / Programming Languages / C#

LumiSoft MailServer

Rate me:
Please Sign up or sign in to vote.
3.79/5 (22 votes)
17 Nov 2006CPOL1 min read 323.3K   4.9K   74  
Full featured SMTP/POP3/IMAP server
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

using LumiSoft.MailServer.API.UserAPI;
using LumiSoft.UI.Controls;
using LumiSoft.MailServer.UI.Resources;

namespace LumiSoft.MailServer.UI
{
    /// <summary>
    /// Users shared folders window.
    /// </summary>
    public class wfrm_SharedFolders_UserFolders : Form
    {
        private ToolStrip m_pToolbar       = null;
        private Label     mt_User          = null;
        private TextBox   m_pUser          = null;
        private Button    m_pGetUser       = null;
        private ImageList m_pFoldersImages = null;
        private TreeView  m_pFolders       = null;

        private VirtualServer m_pVirtualServer = null;

        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="virtualServer">Virtual server.</param>
        /// <param name="frame"></param>
        public wfrm_SharedFolders_UserFolders(VirtualServer virtualServer,WFrame frame)
        {   
            m_pVirtualServer = virtualServer;
        
            InitUI();

            // Move toolbar to Frame
            frame.Frame_ToolStrip = m_pToolbar;
        }

        #region method InitUI

        /// <summary>
        /// Creates and initializes window UI.
        /// </summary>
        private void InitUI()
        {
            this.Size = new Size(300,300);

            ImageList toobarImageList = new ImageList();
            toobarImageList.Images.Add(ResManager.GetIcon("add.ico"));
            toobarImageList.Images.Add(ResManager.GetIcon("edit.ico"));
            toobarImageList.Images.Add(ResManager.GetIcon("delete.ico"));
            toobarImageList.Images.Add(ResManager.GetIcon("properties.ico"));

            m_pToolbar = new WToolBar();
            m_pToolbar.Appearance = ToolBarAppearance.Flat;
            m_pToolbar.Divider = false;
            m_pToolbar.ImageList = toobarImageList;
            m_pToolbar.ButtonClick += new ToolBarButtonClickEventHandler(m_pToolbar_ButtonClick);
            ToolBarButton button_Add = new ToolBarButton();
            button_Add.Enabled  = false;
            button_Add.ImageIndex = 0;
            button_Add.Tag = "add";
            m_pToolbar.Buttons.Add(button_Add);
            ToolBarButton button_Edit = new ToolBarButton();
            button_Edit.Enabled = false;
            button_Edit.ImageIndex = 1;
            button_Edit.Tag = "edit";
            m_pToolbar.Buttons.Add(button_Edit);
            ToolBarButton button_Delete = new ToolBarButton();
            button_Delete.Enabled = false;
            button_Delete.ImageIndex = 2;
            button_Delete.Tag = "delete";
            m_pToolbar.Buttons.Add(button_Delete);
            ToolBarButton button_separator = new ToolBarButton();
            button_separator.Style = ToolBarButtonStyle.Separator;
            m_pToolbar.Buttons.Add(button_separator);
            ToolBarButton button_Properties = new ToolBarButton();
            button_Properties.Enabled = false;
            button_Properties.ImageIndex = 3;
            button_Properties.Tag = "properties";
            m_pToolbar.Buttons.Add(button_Properties);

            mt_User = new Label();
            mt_User.Size = new Size(100,20);
            mt_User.Location = new Point(9,20);
            mt_User.TextAlign = ContentAlignment.MiddleRight;
            mt_User.Text = "User:";
  
            m_pUser = new TextBox();
            m_pUser.Size = new Size(150,20);
            m_pUser.Location = new Point(115,20);
            m_pUser.ReadOnly = true;
        
            m_pGetUser = new Button();
            m_pGetUser.Size = new Size(70,20);
            m_pGetUser.Location = new Point(280,20);
            m_pGetUser.Text = "Get";            
            m_pGetUser.Click += new EventHandler(m_pGetUser_Click);

            m_pFoldersImages = new ImageList();
            m_pFoldersImages.Images.Add(ResManager.GetIcon("folder.ico"));

            m_pFolders = new TreeView();
            m_pFolders.Size = new Size(270,200);
            m_pFolders.Location = new Point(10,50);
            m_pFolders.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
            m_pFolders.HideSelection = false;
            m_pFolders.FullRowSelect = true;
            m_pFolders.PathSeparator = "/";
            m_pFolders.ImageList = m_pFoldersImages;
            m_pFolders.AfterSelect += new TreeViewEventHandler(m_pFolders_AfterSelect);
        //  m_pFolders.DoubleClick += new EventHandler(m_pFolders_DoubleClick);

            this.Controls.Add(mt_User);
            this.Controls.Add(m_pUser);
            this.Controls.Add(m_pGetUser);
            this.Controls.Add(m_pFolders);
        }
                                                                                
        #endregion


        #region Events Handling

        #region method m_pToolbar_ButtonClick

        private void m_pToolbar_ButtonClick(object sender,ToolBarButtonClickEventArgs e)
        {
            if(e.Button.Tag.ToString() == "add"){
                if(m_pFolders.SelectedNode == null){
                    wfrm_sys_Folder frm = new wfrm_sys_Folder(true,"",false);
                    if(frm.ShowDialog(this) == DialogResult.OK){
                        m_pVirtualServer.Users.GetUserByName(m_pUser.Text).Folders.Add(frm.Folder);
                        LoadFolders(frm.Folder);
                    }
                }
                else{
                    wfrm_sys_Folder frm = new wfrm_sys_Folder(true,"",false);
                    if(frm.ShowDialog(this) == DialogResult.OK){
                        UserFolder folder = (UserFolder)m_pFolders.SelectedNode.Tag;
                        folder.ChildFolders.Add(frm.Folder);
                        LoadFolders(frm.Folder);
                    }
                }
            }
            else if(e.Button.Tag.ToString() == "edit" && m_pFolders.SelectedNode != null){
                wfrm_sys_Folder frm = new wfrm_sys_Folder(false,m_pFolders.SelectedNode.FullPath,true);
                if(frm.ShowDialog(this) == DialogResult.OK && m_pFolders.SelectedNode.FullPath != frm.Folder){
                    UserFolder folder = (UserFolder)m_pFolders.SelectedNode.Tag;
                    folder.Rename(frm.Folder);
                    LoadFolders(frm.Folder);
                }
            }
            else if(e.Button.Tag.ToString() == "delete" && m_pFolders.SelectedNode != null){
                UserFolder folder = (UserFolder)m_pFolders.SelectedNode.Tag;
                if(MessageBox.Show(this,"Are you sure you want to delete Folder '" + folder.FolderFullPath + "' ?","Confirm delete",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes){
                    folder.Owner.Remove(folder);
                    LoadFolders("");
                }
            }
            else if(e.Button.Tag.ToString() == "properties" && m_pFolders.SelectedNode != null){
                UserFolder folder = (UserFolder)m_pFolders.SelectedNode.Tag;
                wfrm_User_FolderProperties frm = new wfrm_User_FolderProperties(m_pVirtualServer,folder);
                frm.ShowDialog(this);             
            }
        }

        #endregion


        #region method m_pGetUser_Click

        private void m_pGetUser_Click(object sender, EventArgs e)
        {
            wfrm_se_UserOrGroup frm = new wfrm_se_UserOrGroup(m_pVirtualServer,false,false);
            if(frm.ShowDialog(this) == DialogResult.OK){
                m_pToolbar.Buttons[0].Enabled = true;
                m_pUser.Text = frm.SelectedUserOrGroup;

                LoadFolders("");
            }
        }

        #endregion

        #region method m_pFolders_AfterSelect

        private void m_pFolders_AfterSelect(object sender,TreeViewEventArgs e)
        {
            if(e.Node != null){
                m_pToolbar.Buttons[1].Enabled = true;
                m_pToolbar.Buttons[2].Enabled = true;
                m_pToolbar.Buttons[4].Enabled = true;
            }
            else{
                m_pToolbar.Buttons[1].Enabled = false;
                m_pToolbar.Buttons[2].Enabled = false;
                m_pToolbar.Buttons[4].Enabled = false;
            }
        }

        #endregion

        #endregion


        #region method LoadFolders

        /// <summary>
        /// Load user folder to UI.
        /// </summary>
        /// <param name="selectedFolder">Selects specified folder, it it exists.</param>
        private void LoadFolders(string selectedFolder)
        {
            m_pFolders.Nodes.Clear();
                        
            Queue<object> folders = new Queue<object>();
            foreach(UserFolder folder in m_pVirtualServer.Users.GetUserByName(m_pUser.Text).Folders){                
                TreeNode n = new TreeNode(folder.FolderName);
                n.ImageIndex = 0;
                n.Tag = folder;
                m_pFolders.Nodes.Add(n);

                folders.Enqueue(new object[]{folder,n});
            }

            while(folders.Count > 0){
                object[]   param  = (object[])folders.Dequeue();
                UserFolder folder = (UserFolder)param[0];
                TreeNode   node   = (TreeNode)param[1];
                foreach(UserFolder childFolder in folder.ChildFolders){                                        
                    TreeNode n = new TreeNode(childFolder.FolderName);
                    n.ImageIndex = 0;
                    n.Tag = childFolder;
                    node.Nodes.Add(n);

                    folders.Enqueue(new object[]{childFolder,n});
                }                
            }

            m_pFolders_AfterSelect(this,new TreeViewEventArgs(m_pFolders.SelectedNode));
        }

        #endregion

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Estonia Estonia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions