Click here to Skip to main content
15,894,343 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.1K   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>
    /// Public Folders window.
    /// </summary>
    public class wfrm_SharedFolders_RootFolders : Form
    {
        private ToolStrip m_pToolbar           = null;
        private ImageList m_pRootFoldersImages = null;
        private ListView  m_pRootFolders       = null;

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

            InitUI();
            
            // Move toolbar to Frame
            frame.Frame_ToolStrip = m_pToolbar;

            LoadRoots("");
        }

        #region method InitUI

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

            m_pToolbar = new ToolStrip();            
            m_pToolbar.GripStyle = ToolStripGripStyle.Hidden;
            m_pToolbar.BackColor = this.BackColor;
            m_pToolbar.Renderer = new ToolBarRendererEx();
            m_pToolbar.ItemClicked += new ToolStripItemClickedEventHandler(m_pToolbar_ItemClicked);
            // Add button
            ToolStripButton button_Add = new ToolStripButton();
            button_Add.Image = ResManager.GetIcon("add.ico").ToBitmap();
            button_Add.Tag = "add";
            m_pToolbar.Items.Add(button_Add);
            // Edit button
            ToolStripButton button_Edit = new ToolStripButton();
            button_Edit.Enabled = false;
            button_Edit.Image = ResManager.GetIcon("edit.ico").ToBitmap();
            button_Edit.Tag = "edit";
            m_pToolbar.Items.Add(button_Edit);
            // Delete button
            ToolStripButton button_Delete = new ToolStripButton();
            button_Delete.Enabled = false;
            button_Delete.Image = ResManager.GetIcon("delete.ico").ToBitmap();
            button_Delete.Tag = "delete";
            m_pToolbar.Items.Add(button_Delete);

            m_pRootFoldersImages = new ImageList();
            m_pRootFoldersImages.Images.Add(ResManager.GetIcon("rootfolder.ico"));
            m_pRootFoldersImages.Images.Add(ResManager.GetIcon("rootfolder_disabled.ico"));

            m_pRootFolders = new ListView();
            m_pRootFolders.Size = new Size(445,265);
            m_pRootFolders.Location = new Point(10,50);
            m_pRootFolders.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
            m_pRootFolders.View = View.Details;
      //    m_pRootFolders.CheckBoxes = true;
            m_pRootFolders.HideSelection = false;
            m_pRootFolders.FullRowSelect = true;
            m_pRootFolders.SmallImageList = m_pRootFoldersImages;
            m_pRootFolders.SelectedIndexChanged += new EventHandler(m_pRootFolders_SelectedIndexChanged);
            m_pRootFolders.DoubleClick += new EventHandler(m_pRootFolders_DoubleClick);
            m_pRootFolders.Columns.Add("Folder Name",170,HorizontalAlignment.Left);
            m_pRootFolders.Columns.Add("Description",180,HorizontalAlignment.Left);
            m_pRootFolders.Columns.Add("Root Type",120,HorizontalAlignment.Left);

            this.Controls.Add(m_pRootFolders);
        }
                                                
        #endregion


        #region Events Handling

        #region method m_pToolbar_ItemClicked

        private void m_pToolbar_ItemClicked(object sender,ToolStripItemClickedEventArgs e)
        {
            if(e.ClickedItem.Tag == null){
                return;
            }

            if(e.ClickedItem.Tag.ToString() == "add"){
                wfrm_SharedFolders_RootFolder frm = new wfrm_SharedFolders_RootFolder(m_pVirtualServer);
                if(frm.ShowDialog(this) == DialogResult.OK){
                    LoadRoots(frm.RootID);
                }
            }
            else if(e.ClickedItem.Tag.ToString() == "edit"){
                SharedRootFolder root = (SharedRootFolder)m_pRootFolders.SelectedItems[0].Tag;
                wfrm_SharedFolders_RootFolder frm = new wfrm_SharedFolders_RootFolder(m_pVirtualServer,root);
                if(frm.ShowDialog(this) == DialogResult.OK){
                    LoadRoots(root.ID);
                }
            }
            else if(e.ClickedItem.Tag.ToString() == "delete"){
                SharedRootFolder root = (SharedRootFolder)m_pRootFolders.SelectedItems[0].Tag;
                if(MessageBox.Show(this,"Are you sure you want to delete Root folder '" + root.Name + "' !","Confirm Delete",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2) == DialogResult.Yes){
                    root.Owner.Remove(root);
                    LoadRoots("");
                }
            }
        }

        #endregion


        #region method m_pRootFolders_SelectedIndexChanged

        private void m_pRootFolders_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(m_pRootFolders.Items.Count > 0 && m_pRootFolders.SelectedItems.Count > 0){
                m_pToolbar.Items[1].Enabled = true;
                m_pToolbar.Items[2].Enabled = true;
            }
            else{
                m_pToolbar.Items[1].Enabled = false;
                m_pToolbar.Items[2].Enabled = false;
            }
        }

        #endregion

        #region method m_pRootFolders_DoubleClick

        private void m_pRootFolders_DoubleClick(object sender, EventArgs e)
        {
            if(m_pRootFolders.SelectedItems.Count > 0){
                SharedRootFolder root = (SharedRootFolder)m_pRootFolders.SelectedItems[0].Tag;
                wfrm_SharedFolders_RootFolder frm = new wfrm_SharedFolders_RootFolder(m_pVirtualServer,root);
                if(frm.ShowDialog(this) == DialogResult.OK){
                    LoadRoots(root.ID);
                }
            }
        }

        #endregion

        #endregion


        #region method LoadRoots

        /// <summary>
        /// Loads root folders to UI.
        /// </summary>
        /// <param name="selectedRootID">Selects specified rule if exists.</param>
        private void LoadRoots(string selectedRootID)
        {
            m_pRootFolders.Items.Clear();

            foreach(SharedRootFolder rootFolder in  m_pVirtualServer.RootFolders){
                ListViewItem it = new ListViewItem();
                it.Text = rootFolder.Enabled.ToString();
                // Make disabled rules red and striked out
                if(!rootFolder.Enabled){
                    it.ForeColor = Color.Purple;
                    it.Font = new Font(it.Font.FontFamily,it.Font.Size,FontStyle.Strikeout);
                    it.ImageIndex = 1;
                }
                else{
                    it.ImageIndex = 0;
                }
                it.Tag = rootFolder;
                it.Text = rootFolder.Name;
                it.SubItems.Add(rootFolder.Description);
                it.SubItems.Add(rootFolder.Type.ToString());
                m_pRootFolders.Items.Add(it);

                if(rootFolder.ID == selectedRootID){
                    it.Selected = true;
                }
            }

            m_pRootFolders_SelectedIndexChanged(this,new EventArgs());
        }

        #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