blob: 48f071ee10c18f8c74665cb76a9551435f7f15c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
//
//
// GtkHtmlHtmlRender.cs: Implementation of IHtmlRender that uses Gtk.HTML
//
// Author: Mario Sopena
// Author: Rafael Ferreira <raf@ophion.org>
//
using System;
using Gtk;
using Gnome;
using System.IO;
using System.Reflection;
namespace Monodoc {
class GtkHtmlHtmlRender : IHtmlRender {
HTML html_panel;
public Widget HtmlPanel {
get { return (Widget) html_panel; }
}
string url;
public string Url {
get { return url; }
}
RootTree help_tree;
public event EventHandler OnUrl;
public event EventHandler UrlClicked;
public GtkHtmlHtmlRender (RootTree help_tree)
{
html_panel = new HTML();
html_panel.Show();
html_panel.LinkClicked += new LinkClickedHandler (LinkClicked);
html_panel.OnUrl += new OnUrlHandler (OnUrlMouseOver);
html_panel.UrlRequested += new UrlRequestedHandler (UrlRequested);
this.help_tree = help_tree;
}
protected void LinkClicked (object o, LinkClickedArgs args)
{
url = args.Url;
if (UrlClicked != null)
UrlClicked (this, new EventArgs());
}
protected void OnUrlMouseOver (object o, OnUrlArgs args)
{
url = args.Url;
if (OnUrl != null)
OnUrl (this, args);
}
public void JumpToAnchor (string anchor)
{
html_panel.JumpToAnchor(anchor);
}
public void Copy ()
{
html_panel.Copy();
}
public void SelectAll ()
{
html_panel.SelectAll();
}
public void Render (string html_code)
{
Gtk.HTMLStream stream = html_panel.Begin ("text/html");
stream.Write(html_code);
html_panel.End (stream, HTMLStreamStatus.Ok);
}
static Stream GetBrowserResourceImage (string name)
{
Assembly assembly = typeof (RootTree).Assembly;
System.IO.Stream s = assembly.GetManifestResourceStream (name);
return s;
}
protected void UrlRequested (object sender, UrlRequestedArgs args)
{
Stream s = help_tree.GetImage (args.Url);
if (s == null)
s = GetBrowserResourceImage ("monodoc.png");
byte [] buffer = new byte [8192];
int n, m;
m=0;
while ((n = s.Read (buffer, 0, 8192)) != 0) {
args.Handle.Write (buffer, n);
m += n;
}
args.Handle.Close (HTMLStreamStatus.Ok);
}
public void Print (string Html) {
if (Html == null) {
Console.WriteLine ("empty print");
return;
}
PrintManager.Print (Html);
}
}
}
|