2005-04-19 Gabor Kelemen <kelemeng@gnome.hu>
[beagle.git] / Tiles / SimpleRootTile.cs
blob3a90d64cf8b715f9105be076bbf0e4707c064032
1 //
2 // SimpleRootTile.cs
3 //
4 // Copyright (C) 2004 Novell, Inc.
5 //
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a
9 // copy of this software and associated documentation files (the "Software"),
10 // to deal in the Software without restriction, including without limitation
11 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 // and/or sell copies of the Software, and to permit persons to whom the
13 // Software is furnished to do so, subject to the following conditions:
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 // DEALINGS IN THE SOFTWARE.
27 using System;
28 using System.Collections;
29 using System.Diagnostics;
31 using Beagle.Tile;
32 using Beagle;
34 namespace Beagle.Tile {
36 public class SimpleRootTile : Tile {
37 private TileHitCollection hit_collection = new TileHitCollection ();
38 string errorString;
39 bool offerDaemonRestart;
41 public void Start ()
43 hit_collection.Clear ();
44 Changed ();
47 public TileHitCollection HitCollection {
48 get { return hit_collection; }
51 public bool OfferDaemonRestart {
52 get { return offerDaemonRestart; }
53 set { offerDaemonRestart = value; }
56 public void Add (ICollection hits)
58 foreach (Hit hit in hits)
59 Add (hit);
62 public void Add (Hit hit)
64 HitFlavor flavor = HitToHitFlavor.Get (hit);
65 if (flavor == null)
66 return;
68 object[] args = new object [1];
69 args[0] = hit;
70 Tile tile = (Tile) Activator.CreateInstance (flavor.TileType, args);
71 tile.Uri = hit.Uri;
72 tile.Query = this.Query;
74 if (hit_collection.Add (hit, tile))
75 Changed ();
77 //Console.WriteLine ("+ {0}", hit.Uri);
80 public void Subtract (ICollection uris)
82 foreach (Uri uri in uris)
83 Subtract (uri);
86 public void Subtract (Uri uri)
88 bool changed = false;
90 if (hit_collection.Subtract (uri))
91 changed = true;
93 if (changed) {
94 Console.WriteLine ("- {0}", uri);
95 Changed ();
99 public void Error (string errorString)
101 this.errorString = errorString;
102 Changed ();
105 public void StartDaemon ()
107 // If we're running uninstalled (in the source tree), then run
108 // the uninstalled daemon. Otherwise run the installed daemon.
110 string bestpath = System.Environment.GetCommandLineArgs () [0];
111 string bestdir = System.IO.Path.GetDirectoryName (bestpath);
113 string beagled_filename;
114 if (bestdir.EndsWith ("lib/beagle")) {
115 Console.WriteLine ("Running installed daemon...");
116 beagled_filename = "beagled"; // Running installed
117 } else {
118 Console.WriteLine ("Running uninstalled daemon...");
119 beagled_filename = System.IO.Path.Combine (bestdir, "../beagled/beagled");
123 Process daemon = new Process ();
124 daemon.StartInfo.FileName = beagled_filename;
125 daemon.StartInfo.UseShellExecute = false;
127 try {
128 daemon.Start ();
129 } catch (System.ComponentModel.Win32Exception e) {
130 Console.WriteLine ("Unable to start daemon: {0}", e.Message);
134 public void SetSource (string querySource)
136 hit_collection.SetSource (querySource);
137 Changed ();
140 override public void Render (TileRenderContext ctx)
142 if (errorString != null) {
143 ctx.Write (errorString);
144 if (offerDaemonRestart) {
145 ctx.Write ("<hr noshade>");
146 ctx.Link ("Click to start the Beagle daemon...", new TileActionHandler (StartDaemon));
147 offerDaemonRestart = false;
149 errorString = null;
150 return;
153 if (hit_collection != null)
154 ctx.Tile (hit_collection);