private Hashtable tabs;                 // [TabLabel.Button] = UserInfo

        // ============================================
        // PUBLIC Constructors
        // ============================================
        public NotebookViewer()
        {
            // Initialize Notebook
            this.ShowTabs   = true;
            this.Scrollable = true;

            // Initialize Notebook Members
            this.pages       = Hashtable.Synchronized(new Hashtable());
            this.tabs        = Hashtable.Synchronized(new Hashtable());
            this.tabsCustom  = Hashtable.Synchronized(new Hashtable());
            this.pagesCustom = ArrayList.Synchronized(new ArrayList());

            // Initialize Network Viewer
            // =========================================================
            networkViewer = new NetworkViewer();
            networkViewer.ItemActivated += new PeerSelectedHandler(OnNetItemActivated);

            // Initialize Network Viewer Tab Label
            TabLabel tabLabel = new TabLabel("<b>Network</b>");

            tabLabel.Button.Sensitive = false;

            // Add Network Viewer (Default Fixed Page)
            AppendPage(this.networkViewer, tabLabel);
        }
        // ============================================
        // PUBLIC Constructors
        // ============================================
        public ProtocolManager(GUI.Window window)
        {
            // Initialize Components
            this.notebookViewer = window.NotebookViewer;
            this.networkViewer = this.notebookViewer.NetworkViewer;

            // Add Events Handler
            CmdManager.AddProtocolEvent += new SetProtocolEventHandler(OnAddProtocolEvent);
            CmdManager.DelProtocolEvent += new SetProtocolEventHandler(OnDelProtocolEvent);
        }
        // ============================================
        // PUBLIC Constructors
        // ============================================
        public NetworkManager(GUI.Window window)
        {
            // Initialize Events (None)
            UserAccept = null;

            // Initialize Components
            this.menuManager = window.Menu;
            this.userPanel = window.UserPanel;
            this.notebookViewer = window.NotebookViewer;
            this.networkViewer = this.notebookViewer.NetworkViewer;

            // Initialize P2PManager & CMD Manager
            this.p2pManager = P2PManager.GetInstance();

            // Network
            SetSensitiveNetworkMenu(P2PManager.IsListening());

            // Add Event Handlers
            menuManager.Activated += new EventHandler(OnMenuActivated);
            networkViewer.ItemRemoved += new PeerSelectedHandler(OnPeerRemove);
            CmdManager.AddProtocolEvent += new SetProtocolEventHandler(OnAddProtocolEvent);
            CmdManager.DelProtocolEvent += new SetProtocolEventHandler(OnDelProtocolEvent);
        }
        private Hashtable tabsCustom; // [TabLabel.Button] = Gtk.Widget

        #endregion Fields

        #region Constructors

        // ============================================
        // PUBLIC Constructors
        // ============================================
        public NotebookViewer()
        {
            // Initialize Notebook
            this.ShowTabs = true;
            this.Scrollable = true;

            // Initialize Notebook Members
            this.pages = Hashtable.Synchronized(new Hashtable());
            this.tabs = Hashtable.Synchronized(new Hashtable());
            this.tabsCustom = Hashtable.Synchronized(new Hashtable());
            this.pagesCustom = ArrayList.Synchronized(new ArrayList());

            // Initialize Network Viewer
            // =========================================================
            networkViewer = new NetworkViewer();
            networkViewer.ItemActivated += new PeerSelectedHandler(OnNetItemActivated);

            // Initialize Network Viewer Tab Label
            TabLabel tabLabel = new TabLabel("<b>Network</b>");
            tabLabel.Button.Sensitive = false;

            // Add Network Viewer (Default Fixed Page)
            AppendPage(this.networkViewer, tabLabel);
        }
        /// Run Remove Peer Dialog
        public static UserInfo RemovePeer(NetworkViewer networkViewer)
        {
            GUI.Dialogs.RemovePeer dialog = new GUI.Dialogs.RemovePeer();
            ResponseType response = dialog.Run();
            string peerName = dialog.GetPeerSelected();
            dialog.Destroy();

            if (response == ResponseType.Ok && peerName != null) {
                return(networkViewer.GetUserInfo(peerName));
            }
            return(null);
        }