Click here to Skip to main content
15,885,141 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 321.4K   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 System.Data;

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

namespace LumiSoft.MailServer.UI
{
    /// <summary>
    /// Routing routes window.
    /// </summary>
    public class wfrm_Routing_Routes : Form
    {
        private ToolStrip m_pToolbar      = null;
        private ImageList m_pRoutesImages = null;
        private ListView  m_pRoutes       = null;

        private VirtualServer m_pVirtualServer = null;

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

            InitUI();

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

            LoadRoutes("");
        }

        #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);
            // Separator
            m_pToolbar.Items.Add(new ToolStripSeparator());
            // Refresh button
            ToolStripButton button_Refresh = new ToolStripButton();
            button_Refresh.Image = ResManager.GetIcon("refresh.ico").ToBitmap();
            button_Refresh.Tag = "refresh";
            button_Refresh.ToolTipText  = "Refresh";
            m_pToolbar.Items.Add(button_Refresh);
            // Separator
            m_pToolbar.Items.Add(new ToolStripSeparator());
            // Up button
            ToolStripButton button_Up = new ToolStripButton();
            button_Up.Enabled = false;
            button_Up.Image = ResManager.GetIcon("up.ico").ToBitmap();
            button_Up.Tag = "up";
            m_pToolbar.Items.Add(button_Up);
            // Down button
            ToolStripButton button_down = new ToolStripButton();
            button_down.Enabled = false;
            button_down.Image = ResManager.GetIcon("down.ico").ToBitmap();
            button_down.Tag = "down";
            m_pToolbar.Items.Add(button_down);

            m_pRoutesImages = new ImageList();
            m_pRoutesImages.Images.Add(ResManager.GetIcon("filter.ico"));
            m_pRoutesImages.Images.Add(ResManager.GetIcon("filter_disabled.ico"));
            
            m_pRoutes = new ListView();
            m_pRoutes.Size = new Size(445,290);
            m_pRoutes.Location = new Point(10,20);
            m_pRoutes.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
            m_pRoutes.View = View.Details;
            m_pRoutes.FullRowSelect = true;
            m_pRoutes.HideSelection = false;
            m_pRoutes.SmallImageList = m_pRoutesImages;
            m_pRoutes.HeaderStyle = ColumnHeaderStyle.Nonclickable;
            m_pRoutes.DoubleClick += new EventHandler(m_pRoutes_DoubleClick);
            m_pRoutes.SelectedIndexChanged += new EventHandler(m_pRoutes_SelectedIndexChanged);
            m_pRoutes.MouseUp += new MouseEventHandler(m_pRoutes_MouseUp);
            m_pRoutes.Columns.Add("Pattern",190,HorizontalAlignment.Left);
            m_pRoutes.Columns.Add("Description",280,HorizontalAlignment.Left);

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


        #region Events Handling

        #region method m_pToolbar_ItemClicked

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

            SwitchToolBarTask(e.ClickedItem.Tag.ToString());
        }

        #endregion


        #region method m_pRoutes_DoubleClick

        private void m_pRoutes_DoubleClick(object sender, EventArgs e)
        {
            if(m_pRoutes.SelectedItems.Count > 0){
                Route route = (Route)m_pRoutes.SelectedItems[0].Tag;
                wfrm_Routing_Route frm = new wfrm_Routing_Route(m_pVirtualServer,route);
                if(frm.ShowDialog(this) == DialogResult.OK){
                    LoadRoutes(route.ID);
                }
            }
        }

        #endregion

        #region method m_pRoutes_SelectedIndexChanged

        private void m_pRoutes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(m_pRoutes.SelectedItems.Count > 0){
                m_pToolbar.Items[1].Enabled = true;
                m_pToolbar.Items[2].Enabled = true;
                if(m_pRoutes.SelectedItems[0].Index > 0){
                    m_pToolbar.Items[6].Enabled = true;
                }
                if(m_pRoutes.SelectedItems[0].Index < (m_pRoutes.Items.Count - 1)){
                    m_pToolbar.Items[7].Enabled = true;
                }
            }
            else{
                m_pToolbar.Items[1].Enabled = false;
                m_pToolbar.Items[2].Enabled = false;
                m_pToolbar.Items[6].Enabled = false;
                m_pToolbar.Items[7].Enabled = false;
            }
        }

        #endregion

        #region method m_pRoutes_MouseUp

        private void m_pRoutes_MouseUp(object sender,MouseEventArgs e)
        {
            // We want right click only.
            if(e.Button != MouseButtons.Right){
                return;
            }

            ContextMenuStrip menu = new ContextMenuStrip();
            menu.ItemClicked += new ToolStripItemClickedEventHandler(m_pRoutes_ContextMenuItem_Clicked);                       
            //--- MenuItem Add 
            ToolStripMenuItem menuItem_Add = new ToolStripMenuItem("Add");
            menuItem_Add.Image = ResManager.GetIcon("add.ico").ToBitmap();
            menuItem_Add.Tag = "add";
            menu.Items.Add(menuItem_Add);
            //--- MenuItem Edit
            ToolStripMenuItem menuItem_Edit = new ToolStripMenuItem("Edit");
            menuItem_Edit.Enabled = m_pRoutes.SelectedItems.Count > 0;
            menuItem_Edit.Tag = "edit";
            menuItem_Edit.Image = ResManager.GetIcon("edit.ico").ToBitmap();
            menu.Items.Add(menuItem_Edit);
            //--- MenuItem Delete
            ToolStripMenuItem menuItem_Delete = new ToolStripMenuItem("Delete");
            menuItem_Delete.Enabled = m_pRoutes.SelectedItems.Count > 0;
            menuItem_Delete.Tag = "delete";
            menuItem_Delete.Image = ResManager.GetIcon("delete.ico").ToBitmap();
            menu.Items.Add(menuItem_Delete);
            //--- Separator
            menu.Items.Add(new ToolStripSeparator());
            //--- MenuItem Refresh
            ToolStripMenuItem menuItem_Refresh = new ToolStripMenuItem("Refresh");
            menuItem_Refresh.Image = ResManager.GetIcon("refresh.ico").ToBitmap();
            menuItem_Refresh.Tag = "refresh";
            menu.Items.Add(menuItem_Refresh); 
            //--- Separator
            menu.Items.Add(new ToolStripSeparator());
            //--- MenuItem Up
            ToolStripMenuItem menuItem_Up = new ToolStripMenuItem("Move Up");
            if(!(m_pRoutes.SelectedItems.Count > 0 && m_pRoutes.SelectedItems[0].Index > 0)){
                menuItem_Up.Enabled = false;
            }
            menuItem_Up.Image = ResManager.GetIcon("up.ico").ToBitmap();
            menuItem_Up.Tag = "up";
            menu.Items.Add(menuItem_Up);
            //--- MenuItem Down
            ToolStripMenuItem menuItem_Down = new ToolStripMenuItem("Move Down");
            if(!(m_pRoutes.SelectedItems.Count > 0 && m_pRoutes.SelectedItems[0].Index < (m_pRoutes.Items.Count - 1))){
                menuItem_Down.Enabled = false;
            }
            menuItem_Down.Image = ResManager.GetIcon("down.ico").ToBitmap();
            menuItem_Down.Tag = "down";
            menu.Items.Add(menuItem_Down);
            //---
            menu.Show(Control.MousePosition);
        }

        #endregion

        #region method m_pRoutes_ContextMenuItem_Clicked

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

            SwitchToolBarTask(e.ClickedItem.Tag.ToString());
        }

        #endregion

        #endregion


        #region method SwitchToolBarTask

        /// <summary>
        /// Executes specified tool bar task.
        /// </summary>
        /// <param name="taskID">Task ID.</param>
        private void SwitchToolBarTask(string taskID)
        {
            if(taskID == "add"){
                wfrm_Routing_Route frm = new wfrm_Routing_Route(m_pVirtualServer);
                if(frm.ShowDialog(this) == DialogResult.OK){
                    LoadRoutes(frm.RouteID);
                }
            }
            else if(taskID == "edit"){
                Route route = (Route)m_pRoutes.SelectedItems[0].Tag;
                wfrm_Routing_Route frm = new wfrm_Routing_Route(m_pVirtualServer,route);
                if(frm.ShowDialog(this) == DialogResult.OK){
                    LoadRoutes(route.ID);
                }
            }
            else if(taskID == "delete"){
                Route route = (Route)m_pRoutes.SelectedItems[0].Tag;
                if(MessageBox.Show(this,"Are you sure you want to delete Route '" + route.Pattern + "' !","Confirm Delete",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2) == DialogResult.Yes){
                    route.Owner.Remove(route);
                    m_pRoutes.SelectedItems[0].Remove();
                }
            }
            else if(taskID == "refresh"){                
                LoadRoutes("");
            }
            else if(taskID == "up"){
                if(m_pRoutes.SelectedItems.Count > 0 && m_pRoutes.SelectedItems[0].Index > 0){
                    SwapRoutes(m_pRoutes.SelectedItems[0],m_pRoutes.Items[m_pRoutes.SelectedItems[0].Index - 1]);
                }
            }
            else if(taskID == "down"){
                if(m_pRoutes.SelectedItems.Count > 0 && m_pRoutes.SelectedItems[0].Index < m_pRoutes.Items.Count - 1){
                    SwapRoutes(m_pRoutes.SelectedItems[0],m_pRoutes.Items[m_pRoutes.SelectedItems[0].Index + 1]);
                }
            }
        }

        #endregion


        #region method LoadRoutes

        /// <summary>
        /// Loads routes to UI.
        /// </summary>
        /// <param name="selectedRouteID">Selects specified route, if route exists.</param>
        private void LoadRoutes(string selectedRouteID)
        {
            m_pRoutes.Items.Clear();
            m_pVirtualServer.Routes.Refresh();
            foreach(Route route in m_pVirtualServer.Routes){
                ListViewItem it = new ListViewItem();
                // Make disabled rules red and striked out
                if(!route.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 = route;
                it.Text = route.Pattern;
                it.SubItems.Add(route.Description);
                m_pRoutes.Items.Add(it);
                
                if(route.ID == selectedRouteID){
                    it.Selected = true;
                }
            }

            m_pRoutes_SelectedIndexChanged(this,new EventArgs());
        }

        #endregion

        #region method SwapRules

        /// <summary>
        /// Swaps specified routes.
        /// </summary>
        /// <param name="item1">Item 1.</param>
        /// <param name="item2">Item 2.</param>
        private void SwapRoutes(ListViewItem item1,ListViewItem item2)
        {/*
            DataRowView drV_Down = (DataRowView)item1.Tag;
            DataRowView drV_Up   = (DataRowView)item2.Tag;
                        
            m_pServerAPI.UpdateRoute(                    
                drV_Down["RouteID"].ToString(),
                (long)drV_Up["Cost"],
                (bool)drV_Down["Enabled"],
                drV_Down["Description"].ToString(),
                drV_Down["Pattern"].ToString(),
                (RouteAction_enum)Convert.ToInt32(drV_Down["Action"]),
                (byte[])drV_Down["ActionData"]
            );

            m_pServerAPI.UpdateRoute(                    
                drV_Up["RouteID"].ToString(),
                (long)drV_Down["Cost"],
                (bool)drV_Up["Enabled"],
                drV_Up["Description"].ToString(),
                drV_Up["Pattern"].ToString(),
                (RouteAction_enum)Convert.ToInt32(drV_Up["Action"]),
                (byte[])drV_Up["ActionData"]
            );

            string selectedRouteID = "";
            if(item1.Selected){
                selectedRouteID = drV_Up["RouteID"].ToString();
            }
            else if(item2.Selected){
                selectedRouteID = drV_Down["RouteID"].ToString();
            }
            LoadRoutes(selectedRouteID);*/
        }

        #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