Back to index

lightning-sunbird  0.9+nobinonly
WindowMediator.cs
Go to the documentation of this file.
00001 /* -*- Mode: C#; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
00002  *
00003  * ***** BEGIN LICENSE BLOCK *****
00004  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00005  *
00006  * The contents of this file are subject to the Mozilla Public License Version
00007  * 1.1 (the "License"); you may not use this file except in compliance with
00008  * the License. You may obtain a copy of the License at
00009  * http://www.mozilla.org/MPL/
00010  *
00011  * Software distributed under the License is distributed on an "AS IS" basis,
00012  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00013  * for the specific language governing rights and limitations under the
00014  * License.
00015  *
00016  * The Original Code is Manticore.
00017  *
00018  * The Initial Developer of the Original Code is
00019  * Silverstone Interactive.
00020  * Portions created by the Initial Developer are Copyright (C) 2001
00021  * the Initial Developer. All Rights Reserved.
00022  *
00023  * Contributor(s):
00024  *   Ben Goodger <ben@netscape.com> (Original Author)
00025  *
00026  * Alternatively, the contents of this file may be used under the terms of
00027  * either the GNU General Public License Version 2 or later (the "GPL"), or
00028  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00029  * in which case the provisions of the GPL or the LGPL are applicable instead
00030  * of those above. If you wish to allow use of your version of this file only
00031  * under the terms of either the GPL or the LGPL, and not to allow others to
00032  * use your version of this file under the terms of the MPL, indicate your
00033  * decision by deleting the provisions above and replace them with the notice
00034  * and other provisions required by the GPL or the LGPL. If you do not delete
00035  * the provisions above, a recipient may use your version of this file under
00036  * the terms of any one of the MPL, the GPL or the LGPL.
00037  *
00038  * ***** END LICENSE BLOCK ***** */
00039 
00040 namespace Silverstone.Manticore.Core
00041 {
00042   using System;
00043   using System.Collections;
00044 
00045   using Silverstone.Manticore.App;
00046   using Silverstone.Manticore.Toolkit;
00047   using Silverstone.Manticore.Browser;
00048 
00049   // XXX - TODO: need to add logic to quit application when there are 
00050   //             no more windows
00051 
00055        public class WindowMediator
00056        {
00057               public WindowMediator()
00058               {
00059       mWindows = new Hashtable();
00060       mRecentWindows = new Hashtable();
00061               }
00062 
00067     public IEnumerator GetEnumerator()
00068     {
00069       return mWindows.GetEnumerator();
00070     }
00071 
00072     public IEnumerator GetEnumeratorForType(String aType)
00073     {
00074       return (mWindows[aType] as Hashtable).GetEnumerator();
00075     }
00076 
00077     protected Hashtable mWindows;
00078     protected Hashtable mRecentWindows;
00079 
00080     public ManticoreWindow GetMostRecentWindow(String aType)
00081     {
00082       if (mRecentWindows.ContainsKey(aType)) 
00083         return mRecentWindows[aType] as ManticoreWindow;
00084       return null;
00085     }
00086 
00087     public void SetMostRecentWindow(ManticoreWindow aWindow)
00088     {
00089       if (!mRecentWindows.ContainsKey(aWindow.Type))
00090         mRecentWindows.Add(aWindow.Type, aWindow);
00091       else
00092         mRecentWindows[aWindow.Type] = aWindow;
00093     }
00094 
00095     public void RegisterWindow(ManticoreWindow aWindow)
00096     {
00097       if (!mWindows.ContainsKey(aWindow.Type))
00098         mWindows[aWindow.Type] = new Hashtable();
00099       Hashtable windowList = mWindows[aWindow.Type] as Hashtable;
00100       windowList.Add(aWindow.GetHashCode(), aWindow);
00101     }
00102 
00103     public void UnregisterWindow(ManticoreWindow aWindow)
00104     {
00105       mWindows.Remove(aWindow.GetHashCode());
00106       
00107       // If this is the last window of a specific type, remove it from the window list
00108       Hashtable windowsForType = mWindows[aWindow.Type] as Hashtable;
00109       IEnumerator e = windowsForType.GetEnumerator();
00110       e.MoveNext();
00111       ManticoreWindow window = e.Current as ManticoreWindow;
00112       if (window == null)
00113         mWindows.Remove(aWindow.Type);
00114       
00115       ManticoreWindow mostRecentWindow = GetMostRecentWindow(aWindow.Type);
00116       if (mostRecentWindow == window) 
00117       {
00118         if (window != null) 
00119           SetMostRecentWindow(window);
00120         else
00121           mRecentWindows.Remove(aWindow.Type);
00122       }
00123     }
00124   }
00125 }