[Gtk-sharp-list] Re: [Mono-devel-list] A larger patch for the monodoc-browser
Philip Van Hoof
spamfrommailing@freax.org
21 May 2003 14:16:07 +0200
--=-RNfmzhQ9eC7LfnVEvYsw
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
On Tue, 2003-05-20 at 23:23, Miguel de Icaza wrote:
> So could you rework your patch a bit to cope with this?
I've attached a new patch. I removed the linear searching from the
previous patch.
--
Philip Van Hoof a.k.a. freax
me at freax dot org
http://www.freax.be -- http://www.freax.eu.org -- http://www.freax.org
--=-RNfmzhQ9eC7LfnVEvYsw
Content-Disposition: attachment; filename=monodoc.f.diff
Content-Type: text/plain; name=monodoc.f.diff; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
? Makefile.in
? autom4te.cache
? file.zip
? mod
? browser/Makefile.in
? browser/browser.cs.freax
? browser/browser.gladep
? browser/tree.zip
? class/Makefile.in
? class/tmp
? extras/Makefile.in
? extras/filesource
? extras/filetree
? extras/filezip
Index: ChangeLog
===================================================================
RCS file: /mono/monodoc/ChangeLog,v
retrieving revision 1.3
diff -u -r1.3 ChangeLog
--- ChangeLog 14 Apr 2003 22:34:48 -0000 1.3
+++ ChangeLog 21 May 2003 12:15:17 -0000
@@ -1,3 +1,8 @@
+2003-04-14 Philip Van Hoof <me@freax.org>
+ * Added some menus
+ * Finished the "Look For"-tabpage
+ * Cleanup
+
2003-04-14 Miguel de Icaza <miguel@ximian.com>
* Makefile.am (bin_SCRIPTS): Install a script `mod' that can be
Index: browser/Makefile.am
===================================================================
RCS file: /mono/monodoc/browser/Makefile.am,v
retrieving revision 1.8
diff -u -r1.8 Makefile.am
--- browser/Makefile.am 19 Apr 2003 22:52:22 -0000 1.8
+++ browser/Makefile.am 21 May 2003 12:15:18 -0000
@@ -6,7 +6,7 @@
assembler_sources = $(srcdir)/assembler.cs $(shared_sources)
dump_sources = $(srcdir)/dump.cs $(shared_sources)
browser_sources = $(srcdir)/browser.cs $(srcdir)/history.cs $(shared_sources)
-browser_assemblies = -r:gtk-sharp.dll -r:glade-sharp.dll -r:glib-sharp.dll -r:ICSharpCode.SharpZipLib.dll
+browser_assemblies = -r:gtk-sharp.dll -r:gdk-sharp.dll -r:glade-sharp.dll -r:glib-sharp.dll -r:gnome-sharp.dll -r:ICSharpCode.SharpZipLib.dll
EXTRA_DIST = $(assembler_sources) $(dump_sources) $(browser_sources) browser.glade monodoc.xml mono-ecma.xsl
Index: browser/browser.cs
===================================================================
RCS file: /mono/monodoc/browser/browser.cs,v
retrieving revision 1.21
diff -u -r1.21 browser.cs
--- browser/browser.cs 15 Apr 2003 05:23:52 -0000 1.21
+++ browser/browser.cs 21 May 2003 12:15:18 -0000
@@ -14,10 +14,15 @@
//
using GLib;
using Gtk;
+using Gnome;
+using Gdk;
using GtkSharp;
using Glade;
using System;
+using System.IO;
using System.Collections;
+using System.Text.RegularExpressions;
+using System.Text;
class Browser {
Glade.XML ui;
@@ -67,6 +72,21 @@
TreeView reference_tree;
[Glade.Widget]
+ Label lookfor_label;
+
+ [Glade.Widget]
+ Label searchfor_label;
+
+ [Glade.Widget]
+ Gtk.Entry search_entry;
+
+ [Glade.Widget]
+ TreeView searchfor_tree;
+
+ [Glade.Widget]
+ TreeView lookfor_tree;
+
+ [Glade.Widget]
Box help_container;
[Glade.Widget]
@@ -81,6 +101,9 @@
[Glade.Widget]
Button forward_button;
+ [Glade.Widget]
+ Gtk.Entry index_entry;
+
public History history;
HTML html;
@@ -105,7 +128,7 @@
//html_container = (ScrolledWindow) ui ["html_container"];
help_tree = RootTree.LoadTree ();
- tree_browser = new TreeBrowser (help_tree, reference_tree, this);
+ tree_browser = new TreeBrowser (help_tree, reference_tree, lookfor_tree, searchfor_tree, this);
html = new HTML ();
html.Show ();
@@ -136,7 +159,7 @@
}
}
- void LinkClicked (object o, LinkClickedArgs args)
+ void LinkClicked (object o, LinkClickedArgs args)
{
LoadUrl (args.Url);
}
@@ -207,54 +230,121 @@
{
Application.Quit ();
}
+
+ public void on_quit_activate (object o, EventArgs e)
+ {
+ Application.Quit ();
+ }
+
+ public void on_copy_activate (object o, EventArgs e)
+ {
+ this.html.Copy ();
+ }
+
+ public void on_about_activate (object o, EventArgs e)
+ {
+ string[] authors = {
+ "Miguel De Icaza <miguel@ximian.com>",
+ "Duncan Mak <duncan@ximian.com>"
+ };
+ string[] documenters = {};
+ Pixbuf logo = new Pixbuf ("/usr/share/pixmaps/gnome-about-logo.png");
+ // Pixbuf logo = new Pixbuf ("pixmaps" + Path.DirectorySeparatorChar + "monodoc-logo.png");
+ About about = new About("MonoDoc-browser", "CVS", "Copyright (C) 2003",
+ "This tool displays documentation in the format used by the ECMA specification",
+ authors, documenters, "", logo);
+ about.Show ();
+ }
+
+ public void on_select_all_activate (object o, EventArgs e)
+ {
+ this.html.SelectAll ();
+ }
+
+ public void on_index_entry_activate (object o, EventArgs e)
+ {
+ tree_browser.LookFor(index_entry.Text);
+ }
+
+ public void on_search_entry_activate (object o, EventArgs e)
+ {
+ tree_browser.SearchFor(search_entry.Text);
+ }
}
-//
-// This class implements the tree browser
-//
-class TreeBrowser {
- Browser browser;
- TreeView tree_view;
-
- TreeStore store;
- RootTree help_tree;
- TreeIter root_iter;
- //
+// This class implements the tree browser
+class TreeBrowser {
+ private Browser browser;
+ private TreeView tree_view;
+ private TreeView lookfor_tree;
+ private TreeView searchfor_tree;
+ private TreeStore store;
+ private RootTree help_tree;
+ private TreeIter root_iter;
+ public bool all_expanded=false;
// This hashtable maps an iter to its node.
- //
- Hashtable iter_to_node;
+ private Hashtable iter_to_node;
- //
// This hashtable maps the node to its iter
- //
- Hashtable node_to_iter;
+ private Hashtable node_to_iter;
- //
// Maps a node to its TreeIter parent
- //
- Hashtable node_parent;
+ private Hashtable node_parent;
+
+ // This hashtable maps an iter to its node (for the lookfor-treeview).
+ private Hashtable iter_to_lookfornode;
+
+ // This hashtable maps an iter to its node (for the searchfor-treeview).
+ private Hashtable iter_to_searchfornode;
+
+ private Hashtable populated = new Hashtable ();
+ private bool IgnoreRowActivated = false;
- public TreeBrowser (RootTree help_tree, TreeView reference_tree, Browser browser)
+ public TreeBrowser (RootTree help_tree, TreeView reference_tree, TreeView lookfor_tree, TreeView searchfor_tree, Browser browser)
{
this.browser = browser;
- tree_view = reference_tree;
+ this.tree_view = reference_tree;
+ this.lookfor_tree = lookfor_tree;
+ this.searchfor_tree = searchfor_tree;
iter_to_node = new Hashtable ();
node_to_iter = new Hashtable ();
node_parent = new Hashtable ();
+ iter_to_lookfornode = new Hashtable ();
+ iter_to_searchfornode = new Hashtable ();
- // Setup the TreeView
+ // Setup the normal TreeView
TreeViewColumn name_col = new TreeViewColumn ();
CellRenderer name_render = new CellRendererText ();
name_col.PackStart (name_render, true);
name_col.AddAttribute (name_render, "text", 0);
tree_view.AppendColumn (name_col);
- // Bind events
+ // Setup the LookFor-TreeView
+ TreeViewColumn lname_col = new TreeViewColumn ();
+ CellRenderer lname_render = new CellRendererText ();
+ lname_col.PackStart (lname_render, true);
+ lname_col.AddAttribute (lname_render, "text", 0);
+ lookfor_tree.AppendColumn (lname_col);
+
+ // Setup the SearchFor-TreeView
+ TreeViewColumn sname_col = new TreeViewColumn ();
+ CellRenderer sname_render = new CellRendererText ();
+ sname_col.PackStart (sname_render, true);
+ sname_col.AddAttribute (sname_render, "text", 0);
+ searchfor_tree.AppendColumn (sname_col);
+
+ // Bind events for the normal TreeView
tree_view.RowExpanded += new GtkSharp.RowExpandedHandler (RowExpanded);
tree_view.Selection.Changed += new EventHandler (RowActivated);
+ // Bind events for the LookFor-TreeView
+ // This TreeView will be a simple ListBox, so a RowExpanded-handler is not needed
+ // lookfor_tree.RowExpanded += new GtkSharp.RowExpandedHandler (RowExpanded);
+ lookfor_tree.Selection.Changed += new EventHandler (LookForRowActivated);
+ searchfor_tree.Selection.Changed += new EventHandler (SearchForRowActivated);
+
// Setup the model
this.help_tree = help_tree;
store = new TreeStore ((int) TypeFundamentals.TypeString);
@@ -283,12 +373,9 @@
}
}
- Hashtable populated = new Hashtable ();
-
void RowExpanded (object o, GtkSharp.RowExpandedArgs args)
{
Node result = iter_to_node [args.Iter] as Node;
-
Open (result);
}
@@ -301,10 +388,8 @@
if (populated.Contains (node))
return;
-
- //
+
// We need to populate data on a second level
- //
if (node.Nodes == null)
return;
@@ -313,7 +398,7 @@
}
populated [node] = true;
}
-
+
void PopulateTreeFor (Node n)
{
if (populated [n] == null){
@@ -331,7 +416,7 @@
TreeIter iter = (TreeIter) node_to_iter [n];
TreePath path = store.GetPath (iter);
}
-
+
public void ShowNode (Node n)
{
if (node_to_iter [n] == null){
@@ -345,9 +430,7 @@
TreeIter iter = (TreeIter) node_to_iter [n];
TreePath path = store.GetPath (iter);
- //
// HACK until we upgrade Gtk# to Gtk 2.2
- //
int depth = path.Depth;
for (int i = 0; i < depth; i++){
TreePath p = store.GetPath (iter);
@@ -364,7 +447,8 @@
tree_view.ScrollToCell (path, null, true, 0.5f, 0.5f);
}
- class NodePageVisit : PageVisit {
+ class NodePageVisit : PageVisit
+ {
Browser browser;
Node n;
string url;
@@ -388,53 +472,93 @@
}
}
- bool IgnoreRowActivated = false;
-
- //
// This has to handle two kinds of urls: those encoded in the tree
// file, which are used to quickly lookup information precisely
// (things like "ecma:0"), and if that fails, it uses the more expensive
// mechanism that walks trees to find matches
- //
- void RowActivated (object sender, EventArgs a)
+ void LoadNode (Node n)
+ {
+ Console.Error.WriteLine ("Loading url: " + n.URL);
+ if (n.tree.HelpSource == null)
+ return;
+
+ string url = n.URL;
+
+ // Try the tree-based urls first.
+ Node match;
+ string s = n.tree.HelpSource.GetText (url, out match);
+ if (s != null){
+ ((Browser)browser).Render (s, match, url);
+ browser.history.AppendHistory (new NodePageVisit (browser, n, url));
+ return;
+ }
+
+ // Try the url resolver next
+ s = help_tree.RenderUrl (url, out match);
+ if (s != null){
+ ((Browser)browser).Render (s, match, url);
+ browser.history.AppendHistory (new Browser.LinkPageVisit (browser, url));
+ return;
+ }
+
+ ((Browser)browser).Render ("<b>Unhandled URL</b> " + n.URL, null, url);
+ }
+
+ void RowActivated (object sender, EventArgs a)
{
if (IgnoreRowActivated)
return;
-
+
Gtk.TreeIter iter = new Gtk.TreeIter ();
Gtk.TreeModel model;
- if (tree_view.Selection.GetSelected (out model, ref iter)){
+ if (tree_view.Selection.GetSelected (out model, ref iter)) {
Node n = (Node) iter_to_node [iter];
+ if (n != null)
+ this.LoadNode(n);
+ }
+ }
- Console.Error.WriteLine ("Loading url: " + n.URL);
- if (n.tree.HelpSource == null)
- return;
+ void LookForRowActivated (object sender, EventArgs a)
+ {
+ if (IgnoreRowActivated)
+ return;
- string url = n.URL;
-
- //
- // Try the tree-based urls first.
- //
- Node match;
- string s = n.tree.HelpSource.GetText (url, out match);
- if (s != null){
- ((Browser)browser).Render (s, match, url);
- browser.history.AppendHistory (new NodePageVisit (browser, n, url));
- return;
- }
+ Gtk.TreeIter iter = new Gtk.TreeIter ();
+ Gtk.TreeModel model;
- //
- // Try the url resolver next
- //
- s = help_tree.RenderUrl (url, out match);
- if (s != null){
- ((Browser)browser).Render (s, match, url);
- browser.history.AppendHistory (new Browser.LinkPageVisit (browser, url));
- return;
- }
+ if (lookfor_tree.Selection.GetSelected (out model, ref iter)) {
+ Node n = (Node) iter_to_lookfornode [iter];
+ if (n != null)
+ this.LoadNode(n);
+ }
+ }
- ((Browser)browser).Render ("<b>Unhandled URL</b> " + n.URL, null, url);
+ void SearchForRowActivated (object sender, EventArgs a)
+ {
+ if (IgnoreRowActivated)
+ return;
+
+ Gtk.TreeIter iter = new Gtk.TreeIter ();
+ Gtk.TreeModel model;
+
+ if (searchfor_tree.Selection.GetSelected (out model, ref iter)) {
+ Node n = (Node) iter_to_searchfornode [iter];
+ if (n != null)
+ this.LoadNode(n);
}
}
+
+ public void SearchFor (string searchfor)
+ {
+ // Use the hastable iter_to_searchfornode[TreeIter] = Node
+ Console.WriteLine("Searching for: {0}", searchfor);
+ }
+
+ public void LookFor (string searchfor)
+ {
+ // Use the hashtable iter_to_lookfornode[TreeIter] = Node
+ Console.WriteLine("Looking for: {0}", searchfor);
+ }
+
}
Index: browser/browser.glade
===================================================================
RCS file: /mono/monodoc/browser/browser.glade,v
retrieving revision 1.9
diff -u -r1.9 browser.glade
--- browser/browser.glade 4 Apr 2003 23:49:39 -0000 1.9
+++ browser/browser.glade 21 May 2003 12:15:19 -0000
@@ -2,6 +2,7 @@
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
+<requires lib="gnome"/>
<widget class="GtkWindow" id="window1">
<property name="visible">True</property>
@@ -29,6 +30,19 @@
<property name="visible">True</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menuitem4_menu">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="quit">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_EXIT_ITEM</property>
+ <signal name="activate" handler="on_quit_activate" last_modification_time="Wed, 14 May 2003 11:12:29 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
@@ -37,6 +51,27 @@
<property name="visible">True</property>
<property name="label" translatable="yes">_Edit</property>
<property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menuitem5_menu">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="copy">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_COPY_ITEM</property>
+ <signal name="activate" handler="on_copy_activate" last_modification_time="Wed, 14 May 2003 11:12:29 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="select_all">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_SELECT_ALL_ITEM</property>
+ <signal name="activate" handler="on_select_all_activate" last_modification_time="Wed, 14 May 2003 11:12:29 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
@@ -53,6 +88,19 @@
<property name="visible">True</property>
<property name="label" translatable="yes">_Help</property>
<property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menuitem7_menu">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="about">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_ABOUT_ITEM</property>
+ <signal name="activate" handler="on_about_activate" last_modification_time="Wed, 14 May 2003 11:12:29 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
</widget>
@@ -165,7 +213,7 @@
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="label">
+ <widget class="GtkLabel" id="lookfor_label">
<property name="visible">True</property>
<property name="label" translatable="yes">_Look for:</property>
<property name="use_underline">True</property>
@@ -197,6 +245,7 @@
<property name="has_frame">True</property>
<property name="invisible_char" translatable="yes">*</property>
<property name="activates_default">False</property>
+ <signal name="activate" handler="on_index_entry_activate" last_modification_time="Wed, 14 May 2003 16:16:12 GMT"/>
</widget>
<packing>
<property name="padding">4</property>
@@ -215,7 +264,7 @@
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
- <widget class="GtkTreeView" id="treeview1">
+ <widget class="GtkTreeView" id="lookfor_tree">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="headers_visible">False</property>
@@ -258,18 +307,79 @@
</child>
<child>
- <widget class="GtkLabel" id="label5">
+ <widget class="GtkVBox" id="vbox3">
<property name="visible">True</property>
- <property name="label" translatable="yes">label5</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="searchfor_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Search for:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">index_entry</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="search_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char" translatable="yes">*</property>
+ <property name="activates_default">False</property>
+ <signal name="activate" handler="on_search_entry_activate" last_modification_time="Fri, 16 May 2003 01:27:20 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">4</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="searchfor_tree">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="tab_expand">False</property>
--=-RNfmzhQ9eC7LfnVEvYsw--