3
// Copyright (C) 2008 GNOME-Do
5
// This program is free software: you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation, either version 3 of the License, or
8
// (at your option) any later version.
10
// This program is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
// GNU General Public License for more details.
15
// You should have received a copy of the GNU General Public License
16
// along with this program. If not, see <http://www.gnu.org/licenses/>.
20
using System.Collections.Generic;
31
namespace Do.Interface.AnimationBase
35
public abstract class AbstractAnimatedInterface : Gtk.Window, IDoWindow
37
BezelDrawingArea bezel_drawing_area;
38
BezelGlassResults bezel_glass_results;
39
BezelGlassWindow bezel_glass_window;
40
IDoController controller;
43
public Pane CurrentPane {
44
get { return bezel_drawing_area.Focus; }
45
set { bezel_drawing_area.Focus = value; }
48
public new string Name {
49
get { return RenderTheme.Name; }
52
protected abstract IRenderTheme RenderTheme { get; }
54
public AbstractAnimatedInterface () : base (Gtk.WindowType.Toplevel)
58
public void Initialize (IDoController controller)
60
this.controller = controller;
70
TypeHint = WindowTypeHint.Splashscreen;
73
bezel_drawing_area = new BezelDrawingArea (controller, RenderTheme, false);
74
bezel_drawing_area.Show ();
76
bezel_glass_results = bezel_drawing_area.Results;
77
bezel_glass_window = new BezelGlassWindow (bezel_glass_results);
79
Add (bezel_drawing_area);
81
pw = new PositionWindow (this, bezel_glass_window);
84
protected override void OnDestroyed ()
87
bezel_drawing_area.Destroy ();
88
bezel_drawing_area = null;
89
bezel_glass_results.Destroy ();
90
bezel_glass_results = null;
93
protected override bool OnButtonPressEvent (EventButton evnt)
95
Gdk.Point global_point = new Gdk.Point ((int) evnt.XRoot, (int) evnt.YRoot);
96
Gdk.Point local_point = new Gdk.Point ((int) evnt.X, (int) evnt.Y);
98
switch (bezel_drawing_area.GetPointLocation (local_point)) {
99
case PointLocation.Close:
100
case PointLocation.Outside:
101
controller.ButtonPressOffWindow ();
103
case PointLocation.Preferences:
104
Services.Windowing.ShowMainMenu (global_point.X, global_point.Y);
105
// Have to re-grab the pane from the menu.
106
Interface.Windowing.PresentWindow (this);
110
return base.OnButtonPressEvent (evnt);
113
protected override bool OnKeyPressEvent (EventKey evnt)
115
KeyPressEvent (evnt);
117
return base.OnKeyPressEvent (evnt);
120
protected override bool OnExposeEvent (EventExpose evnt)
123
Cairo.Context cr = Gdk.CairoHelper.Create (GdkWindow);
124
cr.Operator = Cairo.Operator.Source;
126
(cr as IDisposable).Dispose ();
128
return base.OnExposeEvent (evnt);
132
protected virtual void SetColormap ()
134
Gdk.Colormap colormap;
136
colormap = Screen.RgbaColormap;
137
if (colormap == null) {
138
colormap = Screen.RgbColormap;
139
Console.Error.WriteLine ("No alpha support.");
146
public void Summon ()
149
GetSize (out width, out height);
151
pw.UpdatePosition (0, Pane.First, new Gdk.Rectangle (((int)(bezel_drawing_area.WindowWidth-bezel_glass_results.WidthRequest)/2), -10, 0, 0));
153
bezel_glass_window.Show ();
154
Interface.Windowing.PresentWindow (this);
157
public void Vanish ()
159
Interface.Windowing.UnpresentWindow (this);
161
bezel_glass_window.Hide ();
166
bezel_drawing_area.Clear ();
167
bezel_glass_results.Clear ();
172
bezel_drawing_area.ThirdPaneVisible = true;
175
public void Shrink ()
177
bezel_drawing_area.ThirdPaneVisible = false;
180
public void GrowResults ()
182
bezel_glass_results.SlideIn ();
185
public void ShrinkResults ()
187
bezel_glass_results.SlideOut ();
190
public void SetPaneContext (Pane pane, IUIContext context)
192
// This prevents the odd situation of nothing drawing in the third pane. Ultimately what has
193
// happened is the universe has "nulled" the pane by fluke. We detect this and replace the
194
// query with an invisible space.
196
if (pane == Pane.Third && context.Selection == null && string.IsNullOrEmpty (context.Query) && !context.Results.Any ()) {
199
query = context.Query;
201
bezel_drawing_area.BezelSetPaneObject (pane, context.Selection);
202
bezel_drawing_area.BezelSetQuery (pane, query);
203
bezel_drawing_area.BezelSetTextMode (pane, context.LargeTextDisplay);
204
bezel_drawing_area.BezelSetEntryMode (pane, context.LargeTextModeType == TextModeType.Explicit);
206
if (CurrentPane == pane) {
207
bezel_glass_results.Context = context;
211
public void ClearPane (Pane pane)
213
bezel_drawing_area.BezelSetPaneObject (pane, null);
214
bezel_drawing_area.BezelSetQuery (pane, "");
215
bezel_drawing_area.BezelSetEntryMode (pane, false);
217
if (pane == CurrentPane) {
218
bezel_glass_results.Clear ();
222
public bool ResultsCanHide { get { return true; } }
224
public new event DoEventKeyDelegate KeyPressEvent;