void ShowConfig ()
		{
			if (config == null)
				config = new NPRConfigDialog ();
			config.Show ();	
		}
		protected override MenuList OnGetMenuItems ()
		{
			MenuList list = base.OnGetMenuItems ();
			
			if (WeatherController.Weather.Condition != null)
			{
				list[MenuListContainer.Header].Add (new MenuItem (Catalog.GetString ("Radar _Map"),
						WeatherController.Weather.Image, (o, a) => WeatherController.Weather.ShowRadar ()));
			}
			
			
			list.SetContainerTitle (MenuListContainer.Actions, Mono.Unix.Catalog.GetString ("Forecasts"));
			for (int i = 0; i < WeatherController.Weather.ForecastDays; i++)
				if (WeatherController.Weather.Forecasts [i].dow != null)
				{
					list[MenuListContainer.Actions].Add (new ForecastMenuItem (i,
							string.Format ("{0}", WeatherForecast.DayName (WeatherController.Weather.Forecasts [i].dow)), WeatherController.Weather.Forecasts [i].image));
				}
			
			list[MenuListContainer.CustomOne].Add (new MenuItem (Catalog.GetString ("_Settings"), Gtk.Stock.Preferences, 
					delegate {
						if (Config == null)
							Config = new WeatherConfigDialog ();
						Config.Show ();
					}));
			
			if (WeatherController.CurrentLocation != "")
				list[MenuListContainer.CustomOne].Add (new MenuItem (Catalog.GetString ("Check _Weather"), Gtk.Stock.Refresh,
						delegate {
							Status = WeatherDockletStatus.ManualReload;
							State |= ItemState.Wait;
							QueueRedraw ();
							WeatherController.ResetTimer ();
						}));
			
			return list;
		}
		protected override MenuList OnGetMenuItems ()
		{
			MenuList list = base.OnGetMenuItems ();;
			
			UpdateAttention (false);
			
			List<MenuItem> items = new List<MenuItem> ();
			
			if (!string.IsNullOrEmpty (GMailPreferences.User) && !string.IsNullOrEmpty (GMailPreferences.Password)) {
				items.Add (new MenuItem (Catalog.GetString ("_View ") + Atom.CurrentLabel,
					"gmail",
					delegate {
						Clicked (1, Gdk.ModifierType.None, 0, 0);
					}));
				items.Add (new MenuItem (Catalog.GetString ("_Compose Mail"),
					"mail-message-new",
					delegate {
						DockServices.System.Open (BaseUrl + "/#compose");
					}));
				items.Add (new MenuItem (Catalog.GetString ("View C_ontacts"),
					"addressbook",
					delegate {
						DockServices.System.Open (BaseUrl + "/#contacts");
					}));
				
				if (Atom.HasUnread) {
					items.Add (new SeparatorMenuItem (Catalog.GetString ("New Mail")));
					
					foreach (UnreadMessage message in Atom.Messages.Take (10))
						items.Add (new GMailMenuItem (message, "gmail"));
				}
				
				items.Add (new SeparatorMenuItem ());
			}
			
			items.Add (new MenuItem (Catalog.GetString ("_Settings"),
					Gtk.Stock.Preferences,
					delegate {
						if (config == null)
							config = new GMailConfigDialog ();
						config.Show ();
					}));
			
			if (!string.IsNullOrEmpty (GMailPreferences.User) && !string.IsNullOrEmpty (GMailPreferences.Password))
				items.Add (new MenuItem (Catalog.GetString ("Check _Mail"),
						Gtk.Stock.Refresh,
						delegate {
							Atom.ResetTimer (true);
						}));
			
			list[MenuListContainer.Actions].InsertRange (0, items);
			
			return list;
		}
		protected override ClickAnimation OnClicked (uint button, Gdk.ModifierType mod, double xPercent, double yPercent)
		{
			if (button == 1) {
				if (WeatherPreferences.Locations.Length == 0) {
					if (Config == null)
						Config = new WeatherConfigDialog ();
					Config.Show ();
				} else {
					ShowPainter (painter);
				}
			}
			return ClickAnimation.None;
		}
		protected override ClickAnimation OnClicked (uint button, Gdk.ModifierType mod, double xPercent, double yPercent)
		{
			if (button == 1) {
				if (string.IsNullOrEmpty (GMailPreferences.User) || string.IsNullOrEmpty (GMailPreferences.Password)) {
					if (config == null)
						config = new GMailConfigDialog ();
					config.Show ();
				} else {
					UpdateAttention (false);
					
					OpenInbox ();
					return ClickAnimation.Bounce;
				}
			}
			
			return ClickAnimation.None;
		}