annotate FBGUI.cs @ 26:7f0b7a53a000

FBGUI: Allow derived classes to access some internals
author Ivo Smits <Ivo@UCIS.nl>
date Mon, 15 Apr 2013 20:29:02 +0200
parents 644a923bca98
children 5bfc6c68591e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1 ???using System;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
2 using System.Collections.Generic;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
3 using System.Drawing;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
4 using System.Drawing.Drawing2D;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
5 using System.Drawing.Imaging;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
6 using System.IO;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
7 using System.Threading;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
8 using System.Windows.Forms;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
9 using UCIS.VNCServer;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
10 using ThreadingTimer = System.Threading.Timer;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
11
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
12 namespace UCIS.FBGUI {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
13 public interface IFBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
14 Rectangle Bounds { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
15 Boolean Visible { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
16 void Paint(Graphics g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
17 void MouseMove(Point position, MouseButtons buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
18 void MouseDown(Point position, MouseButtons buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
19 void MouseUp(Point position, MouseButtons buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
20 void KeyDown(Keys key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
21 void KeyPress(Char keyChar);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
22 void KeyUp(Keys key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
23 void LostKeyboardCapture();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
24 void Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
25 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
26 public interface IFBGContainerControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
27 Size Size { get; } //Todo: really necessary? Probably not.
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
28 void Invalidate(IFBGControl control, Rectangle rect);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
29 void AddControl(IFBGControl control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
30 void RemoveControl(IFBGControl control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
31 Boolean CaptureMouse(IFBGControl control, Boolean capture);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
32 Boolean CaptureKeyboard(IFBGControl control, Boolean capture);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
33 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
34 public class FBGControl : IFBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
35 private Rectangle bounds = new Rectangle(0, 0, 100, 100);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
36 private Color backColor = Color.Transparent;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
37 private Boolean visible = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
38 public virtual IFBGContainerControl Parent { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
39 public event MouseEventHandler OnMouseDown;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
40 public event MouseEventHandler OnMouseMove;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
41 public event MouseEventHandler OnMouseUp;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
42 public event PaintEventHandler OnPaint;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
43 public event EventHandler OnResize;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
44 public event EventHandler OnMove;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
45 public FBGControl(IFBGContainerControl parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
46 this.Parent = parent;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
47 if (Parent != null) Parent.AddControl(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
48 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
49 public virtual Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
50 get { return bounds; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
51 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
52 if (bounds == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
53 Rectangle old = bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
54 bounds = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
55 Parent.Invalidate(this, Rectangle.Union(new Rectangle(Point.Empty, value.Size), new Rectangle(old.X - value.X, old.Y - value.Y, old.Width, old.Height)));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
56 if (value.Location != old.Location) RaiseEvent(OnMove);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
57 if (value.Size != old.Size) RaiseEvent(OnResize);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
58 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
59 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
60 public virtual Boolean Visible {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
61 get { return visible; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
62 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
63 visible = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
64 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
65 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
66 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
67 public Size Size { get { return Bounds.Size; } set { Rectangle r = Bounds; r.Size = value; Bounds = r; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
68 public Point Location { get { return Bounds.Location; } set { Rectangle r = Bounds; r.Location = value; Bounds = r; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
69 public int Left { get { return Bounds.Left; } set { Rectangle r = Bounds; r.X = value; Bounds = r; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
70 public int Top { get { return Bounds.Top; } set { Rectangle r = Bounds; r.Y = value; Bounds = r; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
71 public int Width { get { return Bounds.Width; } set { Rectangle r = Bounds; r.Width = value; Bounds = r; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
72 public int Height { get { return Bounds.Height; } set { Rectangle r = Bounds; r.Height = value; Bounds = r; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
73 public virtual Color BackColor { get { return backColor; } set { if (backColor == value) return; backColor = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
74 public virtual void Invalidate() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
75 Invalidate(new Rectangle(Point.Empty, Bounds.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
76 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
77 public virtual void Invalidate(Rectangle rect) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
78 Parent.Invalidate(this, rect);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
79 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
80 void IFBGControl.Paint(Graphics g) { Paint(g); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
81 void IFBGControl.MouseMove(Point position, MouseButtons buttons) { MouseMove(position, buttons); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
82 void IFBGControl.MouseDown(Point position, MouseButtons buttons) { MouseDown(position, buttons); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
83 void IFBGControl.MouseUp(Point position, MouseButtons buttons) { MouseUp(position, buttons); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
84 void IFBGControl.KeyDown(Keys g) { KeyDown(g); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
85 void IFBGControl.KeyPress(Char g) { KeyPress(g); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
86 void IFBGControl.KeyUp(Keys g) { KeyUp(g); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
87 void IFBGControl.LostKeyboardCapture() { LostKeyboardCapture(); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
88 void IFBGControl.Orphaned() { Orphaned(); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
89 protected virtual void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
90 if (!visible) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
91 if (backColor.A != 0) g.Clear(backColor);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
92 RaiseEvent(OnPaint, new PaintEventArgs(g, Rectangle.Round(g.ClipBounds)));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
93 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
94 protected virtual void MouseMove(Point position, MouseButtons buttons) { RaiseEvent(OnMouseMove, new MouseEventArgs(buttons, 0, position.X, position.Y, 0)); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
95 protected virtual void MouseDown(Point position, MouseButtons buttons) { RaiseEvent(OnMouseDown, new MouseEventArgs(buttons, 1, position.X, position.Y, 0)); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
96 protected virtual void MouseUp(Point position, MouseButtons buttons) { RaiseEvent(OnMouseUp, new MouseEventArgs(buttons, 1, position.X, position.Y, 0)); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
97 protected virtual Boolean CaptureMouse(Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
98 return Parent.CaptureMouse(this, capture);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
99 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
100 protected virtual void KeyDown(Keys key) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
101 protected virtual void KeyPress(Char keyChar) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
102 protected virtual void KeyUp(Keys key) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
103 protected virtual Boolean CaptureKeyboard(Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
104 return Parent.CaptureKeyboard(this, capture);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
105 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
106 protected virtual void LostKeyboardCapture() { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
107 protected virtual void Orphaned() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
108 //IDisposable disp = this as IDisposable;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
109 //if (!ReferenceEquals(disp, null)) disp.Dispose();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
110 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
111 protected void RaiseEvent(KeyEventHandler eh, KeyEventArgs ea) { if (eh != null) eh(this, ea); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
112 protected void RaiseEvent(KeyPressEventHandler eh, KeyPressEventArgs ea) { if (eh != null) eh(this, ea); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
113 protected void RaiseEvent(MouseEventHandler eh, MouseEventArgs ea) { if (eh != null) eh(this, ea); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
114 protected void RaiseEvent(PaintEventHandler eh, PaintEventArgs ea) { if (eh != null) eh(this, ea); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
115 protected void RaiseEvent<T>(EventHandler<T> eh, T ea) where T : EventArgs { if (eh != null) eh(this, ea); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
116 protected void RaiseEvent(EventHandler eh, EventArgs ea) { if (eh != null) eh(this, ea); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
117 protected void RaiseEvent(EventHandler eh) { if (eh != null) eh(this, new EventArgs()); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
118 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
119 public class FBGContainerControl : FBGControl, IFBGContainerControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
120 protected List<IFBGControl> controls = new List<IFBGControl>();
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
121 protected IFBGControl mouseCaptureControl = null;
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
122 protected IFBGControl keyboardCaptureControl = null;
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
123 private Rectangle childarea = Rectangle.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
124 public Rectangle ClientRectangle { get { return childarea; } protected set { childarea = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
125 public FBGContainerControl(IFBGContainerControl parent) : base(parent) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
126 Size IFBGContainerControl.Size { get { return childarea.IsEmpty ? Bounds.Size : childarea.Size; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
127 void IFBGContainerControl.AddControl(IFBGControl control) { AddControl(control); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
128 protected virtual void AddControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
129 controls.Add(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
130 if (control.Visible) Invalidate(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
131 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
132 public virtual void RemoveControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
133 if (controls.Remove(control)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
134 if (control.Visible) Invalidate(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
135 CaptureMouse(control, false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
136 CaptureKeyboard(control, false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
137 control.Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
138 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
139 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
140 public virtual Point PointToChild(IFBGControl child, Point point) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
141 return point - (Size)child.Bounds.Location - (Size)ClientRectangle.Location;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
142 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
143 public virtual Point PointFromChild(IFBGControl child, Point point) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
144 return point + (Size)child.Bounds.Location + (Size)ClientRectangle.Location;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
145 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
146 public virtual void BringControlToFront(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
147 if (controls.Count == 0) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
148 if (ReferenceEquals(controls[controls.Count - 1], control)) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
149 if (!controls.Remove(control)) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
150 controls.Add(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
151 if (control.Visible) Invalidate(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
152 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
153 public virtual void Invalidate(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
154 Invalidate(new Rectangle(PointFromChild(control, Point.Empty), control.Bounds.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
155 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
156 public virtual void Invalidate(IFBGControl control, Rectangle rect) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
157 Invalidate(new Rectangle(PointFromChild(control, rect.Location), rect.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
158 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
159 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
160 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
161 if (controls == null) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
162 GraphicsState state2 = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
163 if (!childarea.IsEmpty) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
164 state2 = g.Save();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
165 g.TranslateTransform(childarea.X, childarea.Y, MatrixOrder.Append);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
166 g.IntersectClip(new Rectangle(Point.Empty, childarea.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
167 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
168 foreach (IFBGControl control in controls) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
169 if (!control.Visible) continue;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
170 if (control.Bounds.Width <= 0 || control.Bounds.Height <= 0) continue;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
171 if (!g.ClipBounds.IntersectsWith((RectangleF)control.Bounds)) continue;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
172 GraphicsState state = g.Save();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
173 g.TranslateTransform(control.Bounds.X, control.Bounds.Y, MatrixOrder.Append);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
174 g.IntersectClip(new Rectangle(Point.Empty, control.Bounds.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
175 control.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
176 g.Restore(state);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
177 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
178 if (state2 != null) g.Restore(state2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
179 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
180 public IFBGControl FindControlAtPosition(Point p) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
181 if (!childarea.IsEmpty && !childarea.Contains(p)) return null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
182 p.Offset(-childarea.X, -childarea.Y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
183 return ((List<IFBGControl>)controls).FindLast(delegate(IFBGControl control) { return control.Visible && control.Bounds.Contains(p); });
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
184 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
185 protected override void MouseMove(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
186 IFBGControl control = mouseCaptureControl != null ? mouseCaptureControl : FindControlAtPosition(position);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
187 if (control == null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
188 base.MouseMove(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
189 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
190 control.MouseMove(PointToChild(control, position), buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
191 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
192 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
193 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
194 IFBGControl control = mouseCaptureControl != null ? mouseCaptureControl : FindControlAtPosition(position);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
195 if (control == null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
196 base.MouseDown(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
197 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
198 control.MouseDown(PointToChild(control, position), buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
199 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
200 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
201 protected override void MouseUp(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
202 IFBGControl control = mouseCaptureControl != null ? mouseCaptureControl : FindControlAtPosition(position);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
203 if (control == null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
204 base.MouseUp(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
205 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
206 control.MouseUp(PointToChild(control, position), buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
207 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
208 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
209 Boolean IFBGContainerControl.CaptureMouse(IFBGControl control, Boolean capture) { return CaptureMouse(control, capture); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
210 protected Boolean CaptureMouse(IFBGControl control, Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
211 if (capture && !ReferenceEquals(mouseCaptureControl, null)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
212 if (!capture && !ReferenceEquals(mouseCaptureControl, control)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
213 if (!CaptureMouse(capture)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
214 mouseCaptureControl = capture ? control : null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
215 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
216 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
217 protected override void KeyDown(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
218 if (ReferenceEquals(keyboardCaptureControl, null)) base.KeyDown(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
219 else keyboardCaptureControl.KeyDown(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
220 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
221 protected override void KeyPress(Char keyChar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
222 if (ReferenceEquals(keyboardCaptureControl, null)) base.KeyPress(keyChar);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
223 else keyboardCaptureControl.KeyPress(keyChar);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
224 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
225 protected override void KeyUp(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
226 if (ReferenceEquals(keyboardCaptureControl, null)) base.KeyUp(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
227 else keyboardCaptureControl.KeyUp(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
228 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
229 Boolean IFBGContainerControl.CaptureKeyboard(IFBGControl control, Boolean capture) { return CaptureKeyboard(control, capture); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
230 protected Boolean CaptureKeyboard(IFBGControl control, Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
231 if (!capture && !ReferenceEquals(keyboardCaptureControl, control)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
232 if (!CaptureKeyboard(capture)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
233 IFBGControl prev = keyboardCaptureControl;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
234 keyboardCaptureControl = capture ? control : null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
235 if (prev != null) LostKeyboardCapture();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
236 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
237 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
238 protected override void LostKeyboardCapture() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
239 base.LostKeyboardCapture();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
240 if (keyboardCaptureControl != null) keyboardCaptureControl.LostKeyboardCapture();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
241 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
242 protected override void Orphaned() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
243 base.Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
244 IFBGControl[] c = controls.ToArray();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
245 controls.Clear();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
246 foreach (IFBGControl control in c) control.Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
247 mouseCaptureControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
248 keyboardCaptureControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
249 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
250 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
251 public class FBGDockContainer : FBGContainerControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
252 private Dictionary<IFBGControl, DockStyle> dockStyles = new Dictionary<IFBGControl, DockStyle>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
253 private Dictionary<IFBGControl, AnchorStyles> anchorStyles = new Dictionary<IFBGControl, AnchorStyles>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
254 private Rectangle oldBounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
255 public FBGDockContainer(IFBGContainerControl parent)
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
256 : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
257 oldBounds = ClientRectangle.IsEmpty ? Bounds : new Rectangle(Bounds.Location + (Size)ClientRectangle.Location, ClientRectangle.Size);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
258 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
259 protected override void AddControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
260 base.AddControl(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
261 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
262 public override void BringControlToFront(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
263 base.BringControlToFront(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
264 if (dockStyles.ContainsKey(control)) DoLayout();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
265 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
266 public override void RemoveControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
267 base.RemoveControl(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
268 if (dockStyles.Remove(control)) DoLayout();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
269 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
270 public override Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
271 get { return base.Bounds; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
272 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
273 base.Bounds = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
274 DoLayout();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
275 Rectangle newBounds = ClientRectangle.IsEmpty ? Bounds : new Rectangle(Bounds.Location + (Size)ClientRectangle.Location, ClientRectangle.Size);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
276 foreach (KeyValuePair<IFBGControl, AnchorStyles> c in anchorStyles) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
277 Rectangle b = c.Key.Bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
278 if ((c.Value & AnchorStyles.Right) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
279 if ((c.Value & AnchorStyles.Left) == 0) b.X += newBounds.Width - oldBounds.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
280 else b.Width += newBounds.Width - oldBounds.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
281 } else if ((c.Value & AnchorStyles.Left) == 0) b.X += newBounds.X - oldBounds.X;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
282 if ((c.Value & AnchorStyles.Bottom) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
283 if ((c.Value & AnchorStyles.Top) == 0) b.Y += newBounds.Height - oldBounds.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
284 else b.Height += newBounds.Height - oldBounds.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
285 } else if ((c.Value & AnchorStyles.Top) == 0) b.Y += newBounds.Y - oldBounds.Y;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
286 c.Key.Bounds = b;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
287 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
288 oldBounds = newBounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
289 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
290 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
291 public DockStyle GetDockStyle(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
292 DockStyle ds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
293 if (!dockStyles.TryGetValue(control, out ds)) ds = DockStyle.None;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
294 return ds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
295 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
296 public void SetDockStyle(IFBGControl control, DockStyle style) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
297 if (style == DockStyle.None) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
298 if (dockStyles.Remove(control)) DoLayout();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
299 } else if (controls.Contains(control)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
300 anchorStyles.Remove(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
301 dockStyles[control] = style;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
302 DoLayout();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
303 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
304 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
305 public AnchorStyles GetAnchorStyle(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
306 AnchorStyles ds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
307 if (!anchorStyles.TryGetValue(control, out ds)) ds = AnchorStyles.Left | AnchorStyles.Top;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
308 return ds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
309 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
310 public void SetAnchorStyle(IFBGControl control, AnchorStyles style) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
311 if (style == (AnchorStyles.Left | AnchorStyles.Top)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
312 anchorStyles.Remove(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
313 } else if (controls.Contains(control)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
314 dockStyles.Remove(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
315 anchorStyles[control] = style;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
316 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
317 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
318 public void SetAnchor(IFBGControl control, AnchorStyles style, int value) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
319 if (controls.Contains(control)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
320 AnchorStyles oldstyle;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
321 if (!anchorStyles.TryGetValue(control, out oldstyle)) oldstyle = AnchorStyles.Left | AnchorStyles.Top;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
322 Rectangle b = control.Bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
323 switch (style) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
324 case AnchorStyles.None: throw new ArgumentException("style", "Anchor style can not be None");
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
325 case AnchorStyles.Left: b.X = value; break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
326 case AnchorStyles.Top: b.Y = value; break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
327 case AnchorStyles.Right:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
328 if ((oldstyle & AnchorStyles.Left) == 0) b.X = ClientRectangle.Width - b.Width - value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
329 else b.Width = ClientRectangle.Width - b.X - value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
330 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
331 case AnchorStyles.Bottom:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
332 if ((oldstyle & AnchorStyles.Top) == 0) b.Y = ClientRectangle.Height - b.Height - value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
333 else b.Height = ClientRectangle.Height - b.Y - value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
334 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
335 default: throw new ArgumentOutOfRangeException("style", "The value vor the style argument is invalid");
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
336 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
337 control.Bounds = b;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
338 dockStyles.Remove(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
339 anchorStyles[control] = oldstyle | style;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
340 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
341 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
342 private void DoLayout() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
343 Rectangle a = new Rectangle(Point.Empty, ClientRectangle.IsEmpty ? Bounds.Size : ClientRectangle.Size);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
344 foreach (KeyValuePair<IFBGControl, DockStyle> c in dockStyles) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
345 Rectangle b = c.Key.Bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
346 if (c.Value == DockStyle.Left) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
347 b.Location = a.Location;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
348 b.Height = a.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
349 a.X += b.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
350 a.Width -= b.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
351 } else if (c.Value == DockStyle.Top) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
352 b.Location = a.Location;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
353 b.Width = a.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
354 a.Y += b.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
355 a.Height -= b.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
356 } else if (c.Value == DockStyle.Right) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
357 b.X = a.X + a.Width - b.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
358 b.Y = a.Y;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
359 b.Height = a.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
360 a.Width -= b.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
361 } else if (c.Value == DockStyle.Bottom) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
362 b.X = a.X;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
363 b.Y = a.Y + a.Height - b.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
364 b.Width = a.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
365 a.Height -= b.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
366 } else if (c.Value == DockStyle.Fill) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
367 b = a;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
368 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
369 c.Key.Bounds = b;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
370 if (a.Width < 0) a.Width = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
371 if (a.Height < 0) a.Height = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
372 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
373 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
374 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
375 public class FBGGroupBox : FBGDockContainer {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
376 private String text = String.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
377 public FBGGroupBox(IFBGContainerControl parent)
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
378 : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
379 ClientRectangle = new Rectangle(1, 15, Bounds.Width - 2, Bounds.Height - 17);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
380 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
381 public override Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
382 get { return base.Bounds; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
383 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
384 ClientRectangle = new Rectangle(1, 15, value.Width - 2, value.Height - 17);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
385 base.Bounds = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
386 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
387 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
388 public String Text { get { return text; } set { if (text == value) return; text = value; Invalidate(new Rectangle(0, 0, Bounds.Width, 15)); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
389 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
390 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
391 g.DrawRectangle(Pens.Gray, 0, 6, Bounds.Width - 1, Bounds.Height - 7);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
392 SizeF ss = g.MeasureString(Text, SystemFonts.DefaultFont, new Size(Bounds.Width - 10 - 9, 15));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
393 g.FillRectangle(SystemBrushes.Control, 9, 0, ss.Width, ss.Height);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
394 g.DrawString(Text, SystemFonts.DefaultFont, Brushes.DarkBlue, new Rectangle(9, 0, Bounds.Width - 10 - 9, 15));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
395 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
396 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
397 public class WinFormsFBGHost : Control, IFBGContainerControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
398 private IFBGControl childControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
399 private IFBGControl mouseCaptureControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
400 private IFBGControl keyboardCaptureControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
401 public IFBGControl ChildControl { get { return childControl; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
402
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
403 public WinFormsFBGHost() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
404 DoubleBuffered = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
405 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
406
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
407 public virtual Point PointToChild(IFBGControl child, Point point) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
408 return point - (Size)child.Bounds.Location;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
409 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
410 public virtual Point PointFromChild(IFBGControl child, Point point) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
411 return point + (Size)child.Bounds.Location;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
412 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
413
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
414 Size IFBGContainerControl.Size { get { return ClientSize; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
415 void IFBGContainerControl.Invalidate(IFBGControl control, Rectangle rect) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
416 Invalidate(new Rectangle(PointFromChild(control, rect.Location), rect.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
417 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
418 void IFBGContainerControl.AddControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
419 if (!ReferenceEquals(childControl, null)) throw new InvalidOperationException("This container can have only one child control");
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
420 childControl = control;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
421 control.Bounds = new Rectangle(Point.Empty, ClientSize);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
422 Invalidate(control.Bounds);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
423 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
424 void IFBGContainerControl.RemoveControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
425 if (!ReferenceEquals(childControl, control)) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
426 childControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
427 Invalidate(control.Bounds);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
428 if (mouseCaptureControl == control) mouseCaptureControl = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
429 if (keyboardCaptureControl == control) control = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
430 control.Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
431 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
432 Boolean IFBGContainerControl.CaptureMouse(IFBGControl control, Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
433 if (capture && !ReferenceEquals(mouseCaptureControl, null)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
434 if (!capture && !ReferenceEquals(mouseCaptureControl, control)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
435 mouseCaptureControl = capture ? control : null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
436 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
437 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
438 Boolean IFBGContainerControl.CaptureKeyboard(IFBGControl control, Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
439 if (!capture && !ReferenceEquals(keyboardCaptureControl, control)) return false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
440 keyboardCaptureControl = capture ? control : null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
441 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
442 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
443
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
444 protected override void OnPaint(PaintEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
445 base.OnPaint(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
446 Graphics g = e.Graphics;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
447 GraphicsState state = g.Save();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
448 g.SetClip(e.ClipRectangle);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
449 if (ReferenceEquals(childControl, null)) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
450 if (childControl.Bounds.Width <= 0 || childControl.Bounds.Height <= 0) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
451 if (!g.ClipBounds.IntersectsWith((RectangleF)childControl.Bounds)) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
452 g.TranslateTransform(childControl.Bounds.X, childControl.Bounds.Y, MatrixOrder.Append);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
453 g.IntersectClip(new Rectangle(Point.Empty, childControl.Bounds.Size));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
454 childControl.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
455 g.Restore(state);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
456 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
457 protected override void OnResize(EventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
458 if (!ReferenceEquals(childControl, null)) childControl.Bounds = new Rectangle(Point.Empty, ClientSize);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
459 base.OnResize(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
460 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
461 protected override void OnMouseDown(MouseEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
462 base.OnMouseDown(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
463 IFBGControl control = mouseCaptureControl != null ? mouseCaptureControl : childControl;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
464 if (control != null) control.MouseDown(PointToChild(control, e.Location), e.Button);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
465 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
466 protected override void OnMouseUp(MouseEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
467 base.OnMouseUp(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
468 IFBGControl control = mouseCaptureControl != null ? mouseCaptureControl : childControl;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
469 if (control != null) control.MouseUp(PointToChild(control, e.Location), e.Button);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
470 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
471 protected override void OnMouseMove(MouseEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
472 IFBGControl control = mouseCaptureControl != null ? mouseCaptureControl : childControl;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
473 if (control != null) control.MouseMove(PointToChild(control, e.Location), e.Button);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
474 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
475 protected override bool IsInputChar(char charCode) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
476 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
477 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
478 protected override bool IsInputKey(Keys keyData) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
479 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
480 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
481 protected override void OnKeyDown(KeyEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
482 //base.OnKeyDown(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
483 if (!ReferenceEquals(keyboardCaptureControl, null)) keyboardCaptureControl.KeyDown(e.KeyData);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
484 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
485 protected override void OnKeyPress(KeyPressEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
486 //base.OnKeyPress(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
487 if (!ReferenceEquals(keyboardCaptureControl, null)) keyboardCaptureControl.KeyPress(e.KeyChar);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
488 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
489 protected override void OnKeyUp(KeyEventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
490 //base.OnKeyUp(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
491 if (!ReferenceEquals(keyboardCaptureControl, null)) keyboardCaptureControl.KeyUp(e.KeyData);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
492 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
493 protected override void OnHandleDestroyed(EventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
494 if (!ReferenceEquals(childControl, null)) childControl.Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
495 base.OnHandleDestroyed(e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
496 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
497 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
498 public class FBGCursor {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
499 public Image Image { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
500 public Point Hotspot { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
501 public Size Size { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
502 public FBGCursor(Image image, Point hotspot) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
503 this.Image = image;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
504 this.Hotspot = hotspot;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
505 this.Size = image.Size;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
506 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
507
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
508 private const String ArrowCursorImageData = "iVBORw0KGgoAAAANSUhEUgAAAAwAAAAVCAYAAAByrA+0AAAAkUlEQVR42pWTORbEMAhDJb3cYNqUuf+JUk6bM2iKLM9DvGAqG/MFxpgAfKwbkTQBwOe7ewqwnYZ0L7KQyk0GUnSMINWcPUgtpRakXr01SKOuREiZ3pcQz329KeR7YpZaUCkQ50wjxWYGko8aSduGbZD8m2bF4NQsxeBj3XiX92rrzOfpvkMrizBpS+/wyuLynj9U+GDtLEEVuQAAAABJRU5ErkJggg==";
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
509 public static readonly FBGCursor ArrowCursor = new FBGCursor(Image.FromStream(new MemoryStream(Convert.FromBase64String(ArrowCursorImageData))), Point.Empty);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
510 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
511 public class FBGRenderer : FBGContainerControl, IDisposable {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
512 private FBGCursor cursor = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
513 private Point cursorposition = Point.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
514 public IFramebuffer Framebuffer { get; private set; }
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
515 private Bitmap Frontbuffer = null;
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
516 protected Object RenderLock = new object();
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
517 public event EventHandler<InvalidateEventArgs> Painted;
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
518 protected Size size = Size.Empty;
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
519 private ThreadingTimer PaintTimer = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
520 private Boolean PaintScheduled = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
521 private int PaintDelay = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
522 public Boolean SuspendDrawing {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
523 get { return suspenddrawing; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
524 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
525 lock (RenderLock) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
526 suspenddrawing = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
527 if (!value) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
528 Refresh(DirtyRectangle);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
529 DirtyRectangle = Rectangle.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
530 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
531 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
532 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
533 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
534 public int RedrawDelay {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
535 get { return PaintDelay; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
536 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
537 lock (RenderLock) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
538 if (value < 0) throw new ArgumentOutOfRangeException("value");
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
539 PaintDelay = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
540 if (PaintDelay == 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
541 if (PaintTimer != null) PaintTimer.Dispose();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
542 PaintTimer = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
543 if (PaintScheduled) PaintTimerCallback(null);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
544 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
545 PaintTimer = new ThreadingTimer(PaintTimerCallback);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
546 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
547 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
548 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
549 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
550 private Boolean suspenddrawing = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
551 private Rectangle DirtyRectangle;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
552
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
553 public FBGCursor Cursor {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
554 get { return cursor; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
555 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
556 cursor = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
557 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
558 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
559 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
560 public Point CursorPosition {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
561 get { return cursorposition; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
562 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
563 if (cursorposition == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
564 Point oldposition = cursorposition;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
565 cursorposition = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
566 if (cursor == null) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
567 Size s = cursor.Size;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
568 if (s.Width == 0 && s.Height == 0) s = new Size(32, 32);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
569 Rectangle r = Rectangle.Union(new Rectangle(oldposition, s), new Rectangle(cursorposition, s));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
570 r.Offset(-cursor.Hotspot.X, -cursor.Hotspot.Y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
571 if (Environment.OSVersion.Platform == PlatformID.Unix) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
572 r = Rectangle.Union(r, Rectangle.Union(new Rectangle(oldposition.X - 2, oldposition.Y - 2, 4, 4), new Rectangle(cursorposition.X - 2, cursorposition.Y - 2, 4, 4)));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
573 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
574 Invalidate(r);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
575 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
576 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
577 public override Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
578 get { return new Rectangle(Point.Empty, size); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
579 set { throw new NotSupportedException("Can not change the top control bounds"); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
580 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
581 public FBGRenderer(IFramebuffer fb) : this(fb.Width, fb.Height) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
582 Framebuffer = fb;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
583 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
584 public FBGRenderer(Size fbsize) : this(fbsize.Width, fbsize.Height) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
585 public FBGRenderer(int width, int height) : this(new Bitmap(width, height, PixelFormat.Format32bppRgb)) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
586 public FBGRenderer(Bitmap bmp) : base(null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
587 Frontbuffer = bmp;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
588 BackColor = SystemColors.Control;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
589 size = Frontbuffer.Size;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
590 }
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
591 protected FBGRenderer() : base(null) {
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
592 BackColor = SystemColors.Control;
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
593 }
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
594 public override void Invalidate(Rectangle rect) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
595 if (rect.Width == 0 || rect.Height == 0) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
596 lock (RenderLock) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
597 if (SuspendDrawing || PaintTimer != null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
598 DirtyRectangle = DirtyRectangle.IsEmpty ? rect : Rectangle.Union(DirtyRectangle, rect);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
599 if (!SuspendDrawing && !PaintScheduled) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
600 PaintScheduled = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
601 PaintTimer.Change(PaintDelay, Timeout.Infinite);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
602 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
603 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
604 Refresh(rect);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
605 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
606 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
607 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
608 private void PaintTimerCallback(Object state) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
609 try {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
610 lock (RenderLock) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
611 PaintScheduled = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
612 Refresh(DirtyRectangle);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
613 DirtyRectangle = Rectangle.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
614 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
615 } catch { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
616 }
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
617 protected virtual void Refresh(Rectangle rect) {
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
618 lock (RenderLock) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
619 rect.Intersect(Bounds);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
620 if (rect.Width == 0 || rect.Height == 0) return;
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
621 if (Frontbuffer != null) {
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
622 using (Graphics g = Graphics.FromImage(Frontbuffer)) {
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
623 g.SetClip(rect);
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
624 Paint(g);
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
625 }
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
626 if (Framebuffer != null) Framebuffer.DrawImage(Frontbuffer, rect, rect.Location);
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
627 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
628 RaiseEvent(Painted, new InvalidateEventArgs(rect));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
629 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
630 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
631 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
632 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
633 if (Cursor != null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
634 Point r = CursorPosition;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
635 r.Offset(-cursor.Hotspot.X, -cursor.Hotspot.Y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
636 g.DrawImageUnscaled(Cursor.Image, r);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
637 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
638 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
639 protected override Boolean CaptureMouse(Boolean capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
640 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
641 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
642 protected override Boolean CaptureKeyboard(bool capture) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
643 return true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
644 }
26
7f0b7a53a000 FBGUI: Allow derived classes to access some internals
Ivo Smits <Ivo@UCIS.nl>
parents: 23
diff changeset
645 public virtual void Dispose() {
23
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
646 lock (RenderLock) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
647 if (PaintTimer != null) PaintTimer.Dispose();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
648 PaintTimer = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
649 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
650 Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
651 if (Frontbuffer != null) Frontbuffer.Dispose();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
652 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
653 public Bitmap LockBitmapBuffer() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
654 Monitor.Enter(RenderLock);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
655 return Frontbuffer;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
656 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
657 public void UnlockBitmapBuffer() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
658 Monitor.Exit(RenderLock);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
659 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
660 public new void MouseMove(Point position, MouseButtons buttons) { base.MouseMove(position, buttons); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
661 public new void MouseDown(Point position, MouseButtons buttons) { base.MouseDown(position, buttons); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
662 public new void MouseUp(Point position, MouseButtons buttons) { base.MouseUp(position, buttons); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
663 public new void KeyDown(Keys key) { base.KeyDown(key); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
664 public new void KeyPress(Char key) { base.KeyPress(key); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
665 public new void KeyUp(Keys key) { base.KeyUp(key); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
666 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
667 public class FBGForm : FBGDockContainer {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
668 private Point prevPosition = Point.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
669 private NonClientOps moveresize = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
670 private String text = String.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
671 public event EventHandler TextChanged;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
672 public Boolean Sizable { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
673 public Boolean Movable { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
674 public Boolean Closable { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
675 [Flags]
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
676 private enum NonClientOps : int {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
677 None = 0,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
678 Move = 1,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
679 ResizeLeft = 2,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
680 ResizeRight = 4,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
681 ResizeTop = 8,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
682 ResizeBottom = 16,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
683 ButtonClose = 32,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
684 MoveResize = ResizeLeft | ResizeRight | ResizeBottom | ResizeTop | Move,
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
685 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
686 public FBGForm(IFBGContainerControl parent) : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
687 BackColor = SystemColors.Control;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
688 ClientRectangle = new Rectangle(4, 22, Bounds.Width - 8, Bounds.Height - 26);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
689 Sizable = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
690 Movable = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
691 Closable = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
692 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
693 public override Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
694 get { return base.Bounds; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
695 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
696 ClientRectangle = new Rectangle(4, 22, value.Width - 8, value.Height - 26);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
697 base.Bounds = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
698 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
699 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
700 public String Text { get { return text; } set { if (text == value) return; text = value; Invalidate(new Rectangle(0, 0, Bounds.Width, 20)); RaiseEvent(TextChanged); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
701 protected override void MouseDown(Point p, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
702 NonClientOps mr = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
703 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
704 if ((new Rectangle(Bounds.Width - 5 - 14, 4, 14, 14)).Contains(p)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
705 mr = NonClientOps.ButtonClose;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
706 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
707 if (Sizable) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
708 if (Movable) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
709 if (p.X < 4) mr |= NonClientOps.ResizeLeft;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
710 if (p.Y < 4) mr |= NonClientOps.ResizeTop;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
711 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
712 if (p.X >= Bounds.Width - 4) mr |= NonClientOps.ResizeRight;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
713 if (p.Y >= Bounds.Height - 4) mr |= NonClientOps.ResizeBottom;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
714 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
715 if (mr == 0 && Movable && p.Y < 20) mr = NonClientOps.Move;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
716 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
717 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
718 if (mr != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
719 moveresize = mr;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
720 prevPosition = p;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
721 CaptureMouse(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
722 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
723 base.MouseDown(p, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
724 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
725 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
726 protected override void MouseMove(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
727 if (moveresize == 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
728 base.MouseMove(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
729 } else if ((moveresize & NonClientOps.MoveResize) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
730 Rectangle b = Bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
731 int dx = position.X - prevPosition.X;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
732 int dy = position.Y - prevPosition.Y;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
733 if (moveresize == NonClientOps.Move) b.Offset(dx, dy);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
734 if ((moveresize & NonClientOps.ResizeLeft) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
735 b.X += dx;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
736 b.Width -= dx;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
737 } else if ((moveresize & NonClientOps.ResizeRight) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
738 b.Width += dx;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
739 prevPosition.X = position.X;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
740 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
741 if ((moveresize & NonClientOps.ResizeTop) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
742 b.Y += dy;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
743 b.Height -= dy;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
744 } else if ((moveresize & NonClientOps.ResizeBottom) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
745 b.Height += dy;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
746 prevPosition.Y = position.Y;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
747 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
748 if (b.Width < 55) b.Width = 55;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
749 if (b.Height < 25) b.Height = 25;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
750 Bounds = b;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
751 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
752 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
753 protected override void MouseUp(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
754 if (moveresize == 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
755 base.MouseUp(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
756 } else if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
757 MouseMove(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
758 CaptureMouse(false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
759 if (moveresize == NonClientOps.ButtonClose && (new Rectangle(Bounds.Width - 5 - 14, 4, 14, 14)).Contains(position) && Closable) Close();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
760 moveresize = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
761 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
762 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
763 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
764 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
765 g.DrawRectangle(Pens.Gray, 0, 0, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
766 g.DrawRectangle(Pens.LightGray, 1, 1, Bounds.Width - 3, Bounds.Height - 3);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
767 g.DrawRectangle(Pens.DarkGray, 2, 20, Bounds.Width - 5, Bounds.Height - 23);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
768 g.DrawRectangle(Pens.Gray, 3, 21, Bounds.Width - 7, Bounds.Height - 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
769 using (Brush b = new LinearGradientBrush(new Rectangle(0, 1, 1, 18), Color.Gray, Color.LightGray, LinearGradientMode.Vertical))
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
770 g.FillRectangle(b, 2, 2, Bounds.Width - 4, 18);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
771
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
772 g.DrawString(Text, SystemFonts.CaptionFont, Brushes.Black, 4, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
773
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
774 g.DrawRectangle(Pens.Gray, Bounds.Width - 5 - 14, 4, 14, 14);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
775 g.DrawRectangle(Pens.Gray, Bounds.Width - 5 - 14 - 16, 4, 14, 14);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
776 g.DrawRectangle(Pens.Gray, Bounds.Width - 5 - 14 - 32, 4, 14, 14);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
777 using (Brush b = new LinearGradientBrush(new Rectangle(0, 5, 1, 13), Color.LightGray, Color.DarkGray, LinearGradientMode.Vertical)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
778 g.FillRectangle(b, Bounds.Width - 5 - 14 + 1, 5, 13, 13);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
779 g.FillRectangle(b, Bounds.Width - 5 - 14 + 1 - 16, 5, 13, 13);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
780 g.FillRectangle(b, Bounds.Width - 5 - 14 + 1 - 32, 5, 13, 13);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
781 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
782 if (Closable) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
783 g.DrawLine(Pens.Black, Bounds.Width - 5 - 14 + 3, 4 + 3, Bounds.Width - 5 - 14 + 14 - 3, 4 + 14 - 3);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
784 g.DrawLine(Pens.Black, Bounds.Width - 5 - 14 + 3, 4 + 14 - 3, Bounds.Width - 5 - 14 + 14 - 3, 4 + 3);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
785 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
786 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
787 public void Close() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
788 Parent.RemoveControl(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
789 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
790 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
791 public class FBGDesktop : FBGContainerControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
792 FBGContainerControl windowcontainer;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
793 FBGContainerControl menucontainer;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
794 Boolean startup = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
795 class FBGWindowState {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
796 public IFBGControl Control;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
797 public FBGButton MenuButton;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
798 public Boolean Visible;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
799 public Rectangle OldBounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
800 public FBGWindowState(IFBGControl cntrl, FBGButton btn) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
801 Control = cntrl;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
802 MenuButton = btn;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
803 Visible = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
804 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
805 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
806 Dictionary<IFBGControl, FBGWindowState> windowstates = new Dictionary<IFBGControl, FBGWindowState>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
807 public FBGDesktop(IFBGContainerControl parent) : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
808 menucontainer = new FBGContainerControl(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
809 menucontainer.Bounds = new Rectangle(0, Bounds.Height - 25, Bounds.Width, 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
810 windowcontainer = new FBGContainerControl(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
811 windowcontainer.Bounds = new Rectangle(0, 0, Bounds.Width, Bounds.Height - 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
812 startup = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
813 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
814 public override Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
815 get { return base.Bounds; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
816 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
817 if (Bounds == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
818 base.Bounds = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
819 if (startup) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
820 menucontainer.Bounds = new Rectangle(0, value.Height - 25, value.Width, 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
821 windowcontainer.Bounds = new Rectangle(0, 0, value.Width, value.Height - 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
822 ScaleMenuButtons();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
823 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
824 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
825 protected override void AddControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
826 if (startup) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
827 base.AddControl(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
828 return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
829 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
830 ((IFBGContainerControl)windowcontainer).AddControl(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
831 FBGButton btn = new FBGButton(menucontainer);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
832 FBGForm formcontrol = control as FBGForm;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
833 if (formcontrol == null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
834 btn.Text = "Untitled";
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
835 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
836 formcontrol.TextChanged += delegate(Object sender, EventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
837 btn.Text = formcontrol.Text;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
838 };
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
839 btn.Text = formcontrol.Text;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
840 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
841 FBGWindowState ws = new FBGWindowState(control, btn);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
842 windowstates.Add(control, ws);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
843 ScaleMenuButtons();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
844 btn.Click += delegate(Object sender, EventArgs e) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
845 if (ws.Visible) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
846 if (ws.MenuButton.BackColor == Color.DarkGray) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
847 ws.OldBounds = ws.Control.Bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
848 ws.Visible = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
849 ws.Control.Bounds = Rectangle.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
850 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
851 windowcontainer.BringControlToFront(ws.Control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
852 foreach (FBGWindowState wsa in windowstates.Values) if (!ReferenceEquals(ws, wsa)) wsa.MenuButton.BackColor = SystemColors.ButtonFace;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
853 ws.MenuButton.BackColor = Color.DarkGray;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
854 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
855 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
856 ws.Control.Bounds = ws.OldBounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
857 ws.Visible = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
858 windowcontainer.BringControlToFront(ws.Control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
859 foreach (FBGWindowState wsa in windowstates.Values) if (!ReferenceEquals(ws, wsa)) wsa.MenuButton.BackColor = SystemColors.ButtonFace;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
860 ws.MenuButton.BackColor = Color.DarkGray;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
861 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
862 };
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
863 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
864 public override void RemoveControl(IFBGControl control) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
865 windowcontainer.RemoveControl(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
866 windowstates.Remove(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
867 ScaleMenuButtons();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
868 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
869 private void ScaleMenuButtons() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
870 int bcount = windowstates.Count;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
871 int bwidth = 200;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
872 int twidth = bwidth * bcount;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
873 if (twidth > Bounds.Width) bwidth = menucontainer.Bounds.Width / bcount;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
874 int i = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
875 foreach (FBGWindowState ws in windowstates.Values) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
876 ws.MenuButton.Bounds = new Rectangle(i * bwidth, 0, bwidth, 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
877 i++;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
878 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
879 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
880 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
881 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
882 g.DrawLine(Pens.Black, 0, Bounds.Height - 25, Bounds.Width, Bounds.Height - 25);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
883 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
884 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
885 IFBGControl control = FindControlAtPosition(position);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
886 if (ReferenceEquals(control, windowcontainer)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
887 control = windowcontainer.FindControlAtPosition(PointToChild(windowcontainer, position));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
888 if (!ReferenceEquals(control, null)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
889 windowcontainer.BringControlToFront(control);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
890 foreach (FBGWindowState ws in windowstates.Values)
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
891 ws.MenuButton.BackColor = ReferenceEquals(ws.Control, control) ? Color.DarkGray : SystemColors.ButtonFace;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
892 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
893 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
894 base.MouseDown(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
895 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
896 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
897
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
898 public class FBGLabel : FBGControl, IDisposable {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
899 public FBGLabel(IFBGContainerControl parent) : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
900 Size = new Size(200, 16);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
901 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
902 private String text = String.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
903 private Font font = SystemFonts.DefaultFont;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
904 private Brush brush = SystemBrushes.ControlText;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
905 private StringFormat stringformat = new StringFormat();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
906 public String Text { get { return text; } set { text = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
907 public Font Font { get { return font; } set { font = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
908 public Brush Brush { get { return brush; } set { brush = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
909 public Color Color { set { Brush = new SolidBrush(value); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
910 public StringAlignment Alignment { get { return stringformat.Alignment; } set { stringformat.Alignment = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
911 public StringFormatFlags FormatFlags { get { return stringformat.FormatFlags; } set { stringformat.FormatFlags = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
912 public StringAlignment LineAlignment { get { return stringformat.LineAlignment; } set { stringformat.LineAlignment = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
913 public StringTrimming Trimming { get { return stringformat.Trimming; } set { stringformat.Trimming = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
914 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
915 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
916 g.DrawString(text, font, brush, new Rectangle(Point.Empty, Bounds.Size), stringformat);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
917 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
918 public void Dispose() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
919 stringformat.Dispose();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
920 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
921 protected override void Orphaned() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
922 base.Orphaned();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
923 Dispose();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
924 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
925 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
926 public class FBGTextBox : FBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
927 public FBGTextBox(IFBGContainerControl parent) : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
928 BackColor = Color.White;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
929 Size = new Size(200, 20);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
930 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
931 private String text = String.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
932 private Char passwordChar = (Char)0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
933 private Font font = new Font(FontFamily.GenericMonospace, 10);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
934 private Brush brush = SystemBrushes.ControlText;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
935 private Boolean hasKeyboardFocus = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
936 public String Text { get { return text; } set { text = value; if (CaretPosition > text.Length) CaretPosition = text.Length; Invalidate(); RaiseEvent(TextChanged); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
937 public Font Font { get { return font; } set { font = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
938 public Brush Brush { get { return brush; } set { brush = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
939 public Color Color { set { Brush = new SolidBrush(value); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
940 public Int32 CaretPosition { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
941 public Char PasswordChar { get { return passwordChar; } set { passwordChar = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
942 public event EventHandler TextChanged;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
943 public event KeyPressEventHandler OnKeyPress;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
944 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
945 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
946 g.DrawRectangle(Pens.Gray, 0, 0, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
947 using (StringFormat sf_nonprinting = new StringFormat(StringFormat.GenericTypographic)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
948 sf_nonprinting.Trimming = StringTrimming.None;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
949 sf_nonprinting.FormatFlags = StringFormatFlags.DisplayFormatControl | StringFormatFlags.MeasureTrailingSpaces;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
950 sf_nonprinting.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.None;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
951
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
952 float x = 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
953 float y = 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
954 float w = Width - 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
955 if (hasKeyboardFocus && CaretPosition == 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
956 g.DrawLine(Pens.Black, x + 2, 2, x + 2, Height - 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
957 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
958 String c = passwordChar == 0 ? null : new String(passwordChar, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
959 for (int i = 0; i < text.Length; i++) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
960 if (passwordChar == 0) c = text.Substring(i, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
961 SizeF s = g.MeasureString(c, font, (int)Math.Ceiling(w), sf_nonprinting);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
962 g.DrawString(c, font, brush, x, y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
963 x += (float)Math.Ceiling(s.Width);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
964 w -= (float)Math.Ceiling(s.Width);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
965
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
966 if (hasKeyboardFocus && i == CaretPosition - 1) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
967 g.DrawLine(Pens.Black, x + 2, 2, x + 2, Height - 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
968 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
969 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
970 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
971 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
972 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
973 hasKeyboardFocus = CaptureKeyboard(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
974 CaretPosition = text.Length;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
975 float x = 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
976 String c = passwordChar == 0 ? null : new String(passwordChar, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
977 for (int i = 0; i < text.Length; i++) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
978 if (passwordChar == 0) c = text.Substring(i, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
979 Size s;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
980 try {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
981 s = TextRenderer.MeasureText(c, font, Size.Empty, TextFormatFlags.NoPadding | TextFormatFlags.NoPrefix);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
982 } catch (Exception) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
983 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
984 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
985 x += s.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
986 if (position.X < x) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
987 CaretPosition = i;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
988 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
989 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
990 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
991 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
992 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
993 protected override void KeyDown(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
994 if ((key & Keys.KeyCode) == Keys.Left) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
995 CaretPosition--;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
996 if (CaretPosition < 0) CaretPosition = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
997 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
998 } else if ((key & Keys.KeyCode) == Keys.Right) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
999 CaretPosition++;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1000 if (CaretPosition > text.Length) CaretPosition = text.Length;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1001 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1002 } else if ((key & Keys.KeyCode) == Keys.Home) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1003 CaretPosition = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1004 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1005 } else if ((key & Keys.KeyCode) == Keys.End) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1006 CaretPosition = text.Length;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1007 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1008 } else if ((key & Keys.Control) != 0 && (key & Keys.KeyCode) == Keys.V) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1009 String cbtext = Clipboard.GetText(TextDataFormat.UnicodeText);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1010 CaretPosition += cbtext.Length;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1011 Text = Text.Insert(CaretPosition - cbtext.Length, cbtext);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1012 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1013 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1014 protected override void KeyPress(char keyChar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1015 KeyPressEventArgs e = new KeyPressEventArgs(keyChar);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1016 RaiseEvent(OnKeyPress, e);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1017 if (e.Handled) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1018 hasKeyboardFocus = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1019 if (keyChar == 8) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1020 if (CaretPosition > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1021 CaretPosition--;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1022 Text = Text.Remove(CaretPosition, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1023 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1024 } else if (keyChar == 127) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1025 if (CaretPosition < Text.Length) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1026 Text = Text.Remove(CaretPosition, 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1027 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1028 } else if (keyChar < 32) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1029 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1030 CaretPosition++;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1031 Text = Text.Insert(CaretPosition - 1, new String(keyChar, 1));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1032 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1033 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1034 public void Focus() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1035 hasKeyboardFocus = CaptureKeyboard(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1036 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1037 protected override void LostKeyboardCapture() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1038 base.LostKeyboardCapture();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1039 hasKeyboardFocus = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1040 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1041 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1042 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1043 public class FBGButton : FBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1044 public FBGButton(IFBGContainerControl parent) : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1045 BackColor = SystemColors.ButtonFace;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1046 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1047 private String text = String.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1048 private Font font = SystemFonts.DefaultFont;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1049 private Color color = SystemColors.ControlText;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1050 private Boolean pressed = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1051 private Boolean enabled = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1052 public String Text { get { return text; } set { text = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1053 public Font Font { get { return font; } set { font = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1054 public Color Color { get { return color; } set { color = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1055 public Boolean Enabled { get { return enabled; } set { enabled = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1056 public event EventHandler Click;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1057 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1058 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1059 if (Bounds.Width == 0 || Bounds.Height == 0) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1060 if (BackColor == SystemColors.ButtonFace) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1061 ControlPaint.DrawButton(g, new Rectangle(0, 0, Bounds.Width, Bounds.Height), enabled ? (pressed ? ButtonState.Pushed : ButtonState.Normal) : ButtonState.Inactive);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1062 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1063 //Hackish and not completely right...
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1064 //Todo: borrowed from mono... possible licencing issues!?
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1065 g.DrawLine(new Pen(ControlPaint.LightLight(BackColor)), 0, 0, Bounds.Width, 0);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1066 g.DrawLine(new Pen(ControlPaint.LightLight(BackColor)), 0, 0, 0, Bounds.Height);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1067 g.DrawLine(new Pen(ControlPaint.Dark(BackColor)), 1, Bounds.Height - 2, Bounds.Width - 1, Bounds.Height - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1068 g.DrawLine(new Pen(ControlPaint.Dark(BackColor)), Bounds.Width - 2, 1, Bounds.Width - 2, Bounds.Height - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1069 g.DrawLine(new Pen(ControlPaint.DarkDark(BackColor)), 0, Bounds.Height - 1, Bounds.Width, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1070 g.DrawLine(new Pen(ControlPaint.DarkDark(BackColor)), Bounds.Width - 1, 1, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1071 Graphics dc = g;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1072 Rectangle rectangle = new Rectangle(0, 0, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1073 Color ColorControl = BackColor;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1074 Color ColorControlLight = ControlPaint.Light(ColorControl);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1075 ButtonState state = pressed ? ButtonState.Pushed : ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1076 using (Pen NormalPen = new Pen(BackColor), LightPen = new Pen(ControlPaint.Light(BackColor)), DarkPen = new Pen(ControlPaint.Dark(BackColor))) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1077 // sadly enough, the rectangle gets always filled with a hatchbrush
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1078 using (HatchBrush hb = new HatchBrush(HatchStyle.Percent50, Color.FromArgb(Math.Min(255, ColorControl.R + 3), ColorControl.G, ColorControl.B), ColorControl)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1079 dc.FillRectangle(hb, rectangle.X + 1, rectangle.Y + 1, rectangle.Width - 2, rectangle.Height - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1080 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1081 if ((state & ButtonState.All) == ButtonState.All || ((state & ButtonState.Checked) == ButtonState.Checked && (state & ButtonState.Flat) == ButtonState.Flat)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1082 using (HatchBrush hb = new HatchBrush(HatchStyle.Percent50, ColorControlLight, ColorControl)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1083 dc.FillRectangle(hb, rectangle.X + 2, rectangle.Y + 2, rectangle.Width - 4, rectangle.Height - 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1084 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1085 dc.DrawRectangle(SystemPens.ControlDark, rectangle.X, rectangle.Y, rectangle.Width - 1, rectangle.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1086 } else if ((state & ButtonState.Flat) == ButtonState.Flat) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1087 dc.DrawRectangle(SystemPens.ControlDark, rectangle.X, rectangle.Y, rectangle.Width - 1, rectangle.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1088 } else if ((state & ButtonState.Checked) == ButtonState.Checked) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1089 using (HatchBrush hb = new HatchBrush(HatchStyle.Percent50, ColorControlLight, ColorControl)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1090 dc.FillRectangle(hb, rectangle.X + 2, rectangle.Y + 2, rectangle.Width - 4, rectangle.Height - 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1091 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1092 Pen pen = DarkPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1093 dc.DrawLine(pen, rectangle.X, rectangle.Y, rectangle.X, rectangle.Bottom - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1094 dc.DrawLine(pen, rectangle.X + 1, rectangle.Y, rectangle.Right - 2, rectangle.Y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1095
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1096 pen = NormalPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1097 dc.DrawLine(pen, rectangle.X + 1, rectangle.Y + 1, rectangle.X + 1, rectangle.Bottom - 3);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1098 dc.DrawLine(pen, rectangle.X + 2, rectangle.Y + 1, rectangle.Right - 3, rectangle.Y + 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1099
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1100 pen = LightPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1101 dc.DrawLine(pen, rectangle.X, rectangle.Bottom - 1, rectangle.Right - 2, rectangle.Bottom - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1102 dc.DrawLine(pen, rectangle.Right - 1, rectangle.Y, rectangle.Right - 1, rectangle.Bottom - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1103 } else if (((state & ButtonState.Pushed) == ButtonState.Pushed) && ((state & ButtonState.Normal) == ButtonState.Normal)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1104 Pen pen = DarkPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1105 dc.DrawLine(pen, rectangle.X, rectangle.Y, rectangle.X, rectangle.Bottom - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1106 dc.DrawLine(pen, rectangle.X + 1, rectangle.Y, rectangle.Right - 2, rectangle.Y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1107
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1108 pen = NormalPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1109 dc.DrawLine(pen, rectangle.X + 1, rectangle.Y + 1, rectangle.X + 1, rectangle.Bottom - 3);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1110 dc.DrawLine(pen, rectangle.X + 2, rectangle.Y + 1, rectangle.Right - 3, rectangle.Y + 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1111
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1112 pen = LightPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1113 dc.DrawLine(pen, rectangle.X, rectangle.Bottom - 1, rectangle.Right - 2, rectangle.Bottom - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1114 dc.DrawLine(pen, rectangle.Right - 1, rectangle.Y, rectangle.Right - 1, rectangle.Bottom - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1115 } else if (((state & ButtonState.Inactive) == ButtonState.Inactive) || ((state & ButtonState.Normal) == ButtonState.Normal)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1116 Pen pen = LightPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1117 dc.DrawLine(pen, rectangle.X, rectangle.Y, rectangle.Right - 2, rectangle.Y);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1118 dc.DrawLine(pen, rectangle.X, rectangle.Y, rectangle.X, rectangle.Bottom - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1119
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1120 pen = NormalPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1121 dc.DrawLine(pen, rectangle.X + 1, rectangle.Bottom - 2, rectangle.Right - 2, rectangle.Bottom - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1122 dc.DrawLine(pen, rectangle.Right - 2, rectangle.Y + 1, rectangle.Right - 2, rectangle.Bottom - 3);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1123
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1124 pen = DarkPen;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1125 dc.DrawLine(pen, rectangle.X, rectangle.Bottom - 1, rectangle.Right - 1, rectangle.Bottom - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1126 dc.DrawLine(pen, rectangle.Right - 1, rectangle.Y, rectangle.Right - 1, rectangle.Bottom - 2);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1127 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1128 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1129 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1130 Rectangle frect = new Rectangle(Point.Empty, Bounds.Size);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1131 SizeF textsize = g.MeasureString(Text, Font);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1132 using (Brush b = new SolidBrush(enabled ? Color : Color.DarkGray)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1133 g.DrawString(Text, Font, b, new PointF(Bounds.Width / 2.0f - textsize.Width / 2.0f, Bounds.Height / 2.0f - textsize.Height / 2.0f));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1134 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1135 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1136 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1137 pressed = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1138 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1139 CaptureMouse(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1140 base.MouseDown(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1141 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1142 protected override void MouseUp(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1143 pressed = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1144 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1145 CaptureMouse(false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1146 if (position.X >= 0 && position.X <= Bounds.Width && position.Y >= 0 && position.Y <= Bounds.Height && enabled) RaiseEvent(Click);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1147 base.MouseUp(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1148 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1149 protected override void KeyDown(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1150 if (key == Keys.Return || key == Keys.Space) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1151 pressed = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1152 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1153 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1154 base.KeyDown(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1155 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1156 protected override void KeyUp(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1157 if (key == Keys.Return || key == Keys.Space) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1158 if (pressed) RaiseEvent(Click);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1159 pressed = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1160 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1161 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1162 base.KeyUp(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1163 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1164 public void Focus() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1165 CaptureKeyboard(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1166 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1167 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1168 public class FBGCheckBox : FBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1169 public FBGCheckBox(IFBGContainerControl parent) : base(parent) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1170 private String text = String.Empty;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1171 private Font font = SystemFonts.DefaultFont;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1172 private Color color = SystemColors.ControlText;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1173 private Boolean _checked = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1174 public String Text { get { return text; } set { text = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1175 public Font Font { get { return font; } set { font = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1176 public Color Color { get { return color; } set { color = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1177 public Boolean Checked { get { return _checked; } set { _checked = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1178 public event EventHandler CheckedChanged;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1179 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1180 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1181 ControlPaint.DrawCheckBox(g, 0, 0, 13, 13, _checked ? ButtonState.Checked : ButtonState.Normal);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1182 g.DrawString(Text, Font, new SolidBrush(Color), 15, 0);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1183 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1184 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1185 Checked = !Checked;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1186 RaiseEvent(CheckedChanged);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1187 base.MouseDown(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1188 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1189 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1190 public class FBGImageBox : FBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1191 Image image = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1192 PictureBoxSizeMode sizeMode = PictureBoxSizeMode.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1193 Rectangle imageRect;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1194 public Image Image { get { return image; } set { image = value; UpdateImageRect(false); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1195 public FBGImageBox(IFBGContainerControl parent) : base(parent) { }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1196 public PictureBoxSizeMode SizeMode { get { return sizeMode; } set { sizeMode = value; UpdateImageRect(false); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1197 public override Rectangle Bounds {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1198 get {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1199 return base.Bounds;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1200 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1201 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1202 UpdateImageRect(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1203 base.Bounds = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1204 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1205 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1206 private void UpdateImageRect(Boolean boundsset) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1207 if (image == null) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1208 if (!boundsset && sizeMode == PictureBoxSizeMode.AutoSize) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1209 Size = Image.Size;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1210 return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1211 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1212 switch (sizeMode) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1213 case PictureBoxSizeMode.AutoSize:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1214 case PictureBoxSizeMode.Normal:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1215 imageRect = new Rectangle(Point.Empty, image.Size);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1216 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1217 case PictureBoxSizeMode.CenterImage:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1218 imageRect = new Rectangle(Width / 2 - image.Width / 2, Height / 2 - Image.Height / 2, Width, Height);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1219 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1220 case PictureBoxSizeMode.StretchImage:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1221 imageRect = new Rectangle(Point.Empty, Size);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1222 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1223 case PictureBoxSizeMode.Zoom:
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1224 float xrat = (float)Width / (float)image.Width;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1225 float yrat = (float)Height / (float)image.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1226 float rat = Math.Min(xrat, yrat);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1227 SizeF dispsize = new SizeF(image.Width * rat, image.Height * rat);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1228 imageRect = Rectangle.Round(new RectangleF(Width / 2f - dispsize.Width / 2f, Height / 2f - dispsize.Height / 2f, dispsize.Width, dispsize.Height));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1229 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1230 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1231 if (!boundsset) Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1232 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1233 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1234 if (!Visible) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1235 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1236 if (image != null) g.DrawImage(image, imageRect);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1237 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1238 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1239 public class FBGListBox : FBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1240 private List<Object> items = new List<object>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1241 private Object selected = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1242 private Object highlighted = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1243 private Boolean hasScrollBar = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1244 private Boolean hitScrollBar = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1245 private int offset = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1246 private ButtonState buttonUpState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1247 private ButtonState buttonDownState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1248 private Converter<Object, String> itemFormatter = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1249 public Converter<Object, String> ItemFormatter { get { return itemFormatter; } set { itemFormatter = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1250 public FBGListBox(IFBGContainerControl parent)
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1251 : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1252 BackColor = Color.White;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1253 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1254 public void AddItem(Object item) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1255 items.Add(item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1256 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1257 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1258 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1259 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1260 g.DrawRectangle(Pens.DarkBlue, 0, 0, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1261 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight());
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1262 int th = lh * items.Count;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1263 int y = 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1264 using (Pen dottedpen = new Pen(Brushes.Black)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1265 dottedpen.DashStyle = DashStyle.Dot;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1266 using (StringFormat sf = new StringFormat(StringFormatFlags.NoWrap)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1267 for (int i = offset; i < items.Count; i++) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1268 Object item = items[i];
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1269 String text = itemFormatter == null ? (item == null ? String.Empty : item.ToString()) : itemFormatter(item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1270 if (item == selected) g.FillRectangle(Brushes.DarkGray, 2, y, Bounds.Width - 4, lh);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1271 if (item == highlighted) g.DrawRectangle(dottedpen, 2, y, Bounds.Width - 5, lh - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1272 g.DrawString(text, SystemFonts.DefaultFont, SystemBrushes.WindowText, new Rectangle(3, y, Bounds.Width - 6, lh), sf);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1273 y += lh;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1274 if (y + lh + 2 >= Bounds.Height) break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1275 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1276 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1277 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1278 if (y < th) hasScrollBar = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1279 if (hasScrollBar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1280 int xoff = Bounds.Width - 17;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1281 using (Brush b = new LinearGradientBrush(new Rectangle(xoff, 0, 17, 1), Color.LightGray, Color.White, LinearGradientMode.Horizontal))
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1282 g.FillRectangle(b, xoff, 17, 16, Bounds.Height - 17 - 17);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1283 ControlPaint.DrawScrollButton(g, xoff, 1, 16, 16, ScrollButton.Up, buttonUpState);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1284 ControlPaint.DrawScrollButton(g, xoff, Bounds.Height - 17, 16, 16, ScrollButton.Down, buttonDownState);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1285 g.DrawRectangle(Pens.Black, new Rectangle(xoff, 17 + offset * (Bounds.Height - 17 - 17 - 20) / (items.Count - 1), 15, 20));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1286 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1287 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1288 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1289 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1290 CaptureMouse(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1291 if (hasScrollBar && position.X > Bounds.Width - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1292 hitScrollBar = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1293 if (position.Y < 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1294 offset--;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1295 buttonUpState = ButtonState.Pushed;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1296 } else if (position.Y > Bounds.Height - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1297 offset++;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1298 buttonDownState = ButtonState.Pushed;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1299 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1300 offset = (int)Math.Round((position.Y - 17) * (items.Count - 1) / (double)(Bounds.Height - 17 - 17 - 10));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1301 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1302 if (offset < 0) offset = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1303 if (offset >= items.Count) offset = items.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1304 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1305 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1306 MouseHandler(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1307 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1308 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1309 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1310 protected override void MouseMove(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1311 if (hitScrollBar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1312 if (position.Y < 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1313 } else if (position.Y > Bounds.Height - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1314 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1315 offset = (int)Math.Round((position.Y - 17) * (items.Count - 1) / (double)(Bounds.Height - 17 - 17 - 10));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1316 if (offset < 0) offset = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1317 if (offset >= items.Count) offset = items.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1318 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1319 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1320 return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1321 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1322 MouseHandler(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1323 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1324 protected override void MouseUp(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1325 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1326 CaptureMouse(false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1327 buttonUpState = buttonDownState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1328 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1329 if (hitScrollBar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1330 hitScrollBar = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1331 return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1332 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1333 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1334 if (hitScrollBar) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1335 MouseHandler(position, buttons);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1336 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1337 private void MouseHandler(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1338 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1339 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight());
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1340 int i = (position.Y - 2) / lh + offset;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1341 if (i < 0) i = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1342 if (i >= items.Count) i = items.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1343 Boolean changed = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1344 Object current = items[i];
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1345 if (!ReferenceEquals(highlighted, current)) changed = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1346 highlighted = current;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1347 if ((new Rectangle(Point.Empty, Bounds.Size)).Contains(position)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1348 if (!ReferenceEquals(selected, current)) changed = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1349 selected = current;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1350 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1351 if (changed) Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1352 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1353 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1354 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1355 public class FBGDomainUpDown : FBGControl {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1356 private List<Object> items = new List<object>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1357 private int selectedIndex = -1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1358 private ButtonState buttonUpState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1359 private ButtonState buttonDownState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1360 private Converter<Object, String> itemFormatter = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1361 public Boolean AllowSelectEmpty { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1362 public Converter<Object, String> ItemFormatter { get { return itemFormatter; } set { itemFormatter = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1363 public event EventHandler SelectedIndexChanged;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1364 public FBGDomainUpDown(IFBGContainerControl parent)
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1365 : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1366 BackColor = Color.White;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1367 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1368 public void AddItem(Object item) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1369 items.Add(item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1370 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1371 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1372 public void RemoveItem(Object item) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1373 items.Remove(item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1374 FixSelectedIndex(0);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1375 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1376 public void RemoveItem(int index) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1377 items.RemoveAt(index);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1378 FixSelectedIndex(0);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1379 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1380 public int SelectedIndex {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1381 get { return selectedIndex; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1382 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1383 if (value < -2 || value >= items.Count) throw new ArgumentOutOfRangeException("value", "Value must be between -1 and the number of items minus one");
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1384 if (selectedIndex == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1385 selectedIndex = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1386 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1387 RaiseEvent(SelectedIndexChanged);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1388 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1389 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1390 public Object SelectedItem {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1391 get { return selectedIndex == -1 ? null : items[selectedIndex]; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1392 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1393 if (value == null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1394 SelectedIndex = -1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1395 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1396 for (int i = 0; i < items.Count; i++) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1397 if (items[i] == value) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1398 SelectedIndex = i;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1399 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1400 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1401 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1402 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1403 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1404 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1405 private void FixSelectedIndex(int change) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1406 int value = selectedIndex;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1407 if (value == 0 && change == -1 && !AllowSelectEmpty) change = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1408 value += change;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1409 if (value < -1) value = -1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1410 if (value >= items.Count) value = items.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1411 SelectedIndex = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1412 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1413 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1414 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1415 g.DrawRectangle(Pens.DarkBlue, 0, 0, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1416 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight());
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1417 if (selectedIndex == -1) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1418 g.FillRectangle(Brushes.DarkGray, 2, 2, Bounds.Width - 4 - 16, Bounds.Height - 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1419 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1420 using (StringFormat sf = new StringFormat(StringFormatFlags.NoWrap)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1421 sf.LineAlignment = StringAlignment.Center;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1422 Object item = items[selectedIndex];
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1423 String text = itemFormatter == null ? (item == null ? String.Empty : item.ToString()) : itemFormatter(item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1424 g.FillRectangle(Brushes.LightGray, 2, 2, Bounds.Width - 4 - 16, Bounds.Height - 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1425 g.DrawString(text, SystemFonts.DefaultFont, SystemBrushes.WindowText, new Rectangle(3, 2, Bounds.Width - 6 - 16, Bounds.Height - 4), sf);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1426 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1427 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1428 int xoff = Bounds.Width - 17;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1429 int he = (Bounds.Height - 2) / 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1430 ControlPaint.DrawScrollButton(g, xoff, 1, 16, he, ScrollButton.Up, buttonUpState);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1431 ControlPaint.DrawScrollButton(g, xoff, Bounds.Height - he - 1, 16, he, ScrollButton.Down, buttonDownState);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1432 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1433 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1434 CaptureKeyboard(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1435 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1436 CaptureMouse(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1437 if (position.X > Bounds.Width - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1438 if (position.Y < Bounds.Height / 2) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1439 buttonUpState = ButtonState.Pushed;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1440 FixSelectedIndex(-1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1441 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1442 buttonDownState = ButtonState.Pushed;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1443 FixSelectedIndex(1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1444 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1445 Invalidate(new Rectangle(Bounds.Width - 16, 0, 16, Bounds.Height));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1446 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1447 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1448 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1449 protected override void MouseUp(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1450 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1451 CaptureMouse(false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1452 buttonUpState = buttonDownState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1453 Invalidate(new Rectangle(Bounds.Width - 16, 0, 16, Bounds.Height));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1454 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1455 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1456 protected override void KeyDown(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1457 base.KeyDown(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1458 if (key == Keys.Down) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1459 FixSelectedIndex(1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1460 } else if (key == Keys.Up) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1461 FixSelectedIndex(-1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1462 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1463 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1464 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1465 public interface IFBGTreeParent {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1466 FBGTreeView TreeView { get; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1467 int Depth { get; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1468 void AddChild(FBGTreeNode node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1469 void RemoveChild(FBGTreeNode node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1470 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1471 public class FBGTreeNode : IFBGTreeParent {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1472 private List<FBGTreeNode> children = new List<FBGTreeNode>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1473 private Boolean expanded = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1474 private Boolean hasCheckBox = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1475 private Boolean isChecked = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1476 private Object item;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1477
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1478 public FBGTreeView TreeView { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1479 public int Depth { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1480 public Object Tag { get; set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1481 public IFBGTreeParent Parent { get; private set; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1482
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1483 public IList<FBGTreeNode> Children { get { return children.AsReadOnly(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1484
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1485 public Object Item {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1486 get { return item; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1487 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1488 item = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1489 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1490 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1491 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1492 public Boolean Expanded {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1493 get { return expanded; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1494 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1495 if (expanded == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1496 expanded = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1497 UpdateTree();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1498 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1499 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1500 public Boolean HasCheckBox {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1501 get { return hasCheckBox; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1502 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1503 if (hasCheckBox == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1504 hasCheckBox = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1505 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1506 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1507 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1508 public Boolean Checked {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1509 get { return isChecked; }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1510 set {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1511 if (isChecked == value) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1512 isChecked = value;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1513 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1514 if (TreeView != null) TreeView.RaiseNodeCheckedChanged(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1515 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1516 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1517
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1518 public FBGTreeNode(IFBGTreeParent parent, Object item) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1519 this.TreeView = parent.TreeView;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1520 this.Depth = parent.Depth + 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1521 this.Parent = parent;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1522 this.item = item;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1523 parent.AddChild(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1524 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1525
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1526 public void Remove() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1527 Parent.RemoveChild(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1528 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1529 void IFBGTreeParent.AddChild(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1530 children.Add(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1531 if (Expanded) UpdateTree();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1532 else Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1533 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1534 void IFBGTreeParent.RemoveChild(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1535 children.Remove(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1536 TreeView.ReleaseNodeFromTree(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1537 if (Expanded) UpdateTree();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1538 else Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1539 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1540 public void Invalidate() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1541 if (TreeView != null) TreeView.Invalidate(this);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1542 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1543 private void UpdateTree() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1544 if (TreeView != null) TreeView.UpdateView();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1545 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1546 public FBGTreeNode AddNode(Object item) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1547 return new FBGTreeNode(this, item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1548 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1549 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1550 public class FBGTreeView : FBGControl, IFBGTreeParent {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1551 private List<FBGTreeNode> items = new List<FBGTreeNode>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1552 private List<FBGTreeNode> itemsView = new List<FBGTreeNode>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1553 private FBGTreeNode selected = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1554 private FBGTreeNode highlighted = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1555 private Boolean hasScrollBar = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1556 private Boolean hitScrollBar = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1557 private int offset = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1558 private ButtonState buttonUpState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1559 private ButtonState buttonDownState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1560 private Converter<Object, String> itemFormatter = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1561
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1562 public Converter<Object, String> ItemFormatter { get { return itemFormatter; } set { itemFormatter = value; Invalidate(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1563 public FBGTreeNode SelectedNode { get { return selected; } set { if (selected != value) { selected = value; Invalidate(); RaiseEvent(SelectedNodeChanged); } } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1564 public IList<FBGTreeNode> Nodes { get { return items.AsReadOnly(); } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1565
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1566 public event EventHandler SelectedNodeChanged;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1567 public event EventHandler NodeCheckedChanged;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1568
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1569 public FBGTreeView(IFBGContainerControl parent) : base(parent) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1570 BackColor = Color.White;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1571 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1572 FBGTreeView IFBGTreeParent.TreeView { get { return this; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1573 int IFBGTreeParent.Depth { get { return -1; } }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1574 void IFBGTreeParent.AddChild(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1575 items.Add(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1576 UpdateView();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1577 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1578 void IFBGTreeParent.RemoveChild(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1579 items.Remove(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1580 ReleaseNodeFromTree(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1581 UpdateView();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1582 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1583 public FBGTreeNode AddNode(Object item) { return new FBGTreeNode(this, item); }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1584 internal void ReleaseNodeFromTree(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1585 if (highlighted == node) highlighted = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1586 if (selected == node) SelectedNode = null;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1587 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1588 internal void RaiseNodeCheckedChanged(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1589 RaiseEvent(NodeCheckedChanged);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1590 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1591 internal void UpdateView() {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1592 List<FBGTreeNode> newView = new List<FBGTreeNode>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1593 Stack<Queue<FBGTreeNode>> stack = new Stack<Queue<FBGTreeNode>>();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1594 stack.Push(new Queue<FBGTreeNode>(items));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1595 while (stack.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1596 Queue<FBGTreeNode> list = stack.Peek();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1597 if (list.Count == 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1598 stack.Pop();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1599 continue;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1600 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1601 FBGTreeNode item = list.Dequeue();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1602 newView.Add(item);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1603 if (item.Expanded) stack.Push(new Queue<FBGTreeNode>(item.Children));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1604 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1605 itemsView = newView;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1606 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1607 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1608 internal void Invalidate(FBGTreeNode node) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1609 int i = itemsView.IndexOf(node);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1610 if (i == -1) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1611 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight() / 2.0) * 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1612 Invalidate(new Rectangle(1, i * lh, Bounds.Width - 1, lh));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1613 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1614 protected override void Paint(Graphics g) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1615 base.Paint(g);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1616
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1617 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight() / 2.0) * 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1618 int th = lh * itemsView.Count;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1619 hasScrollBar = offset > 0 || th + 2 > Bounds.Height;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1620 int y = 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1621 using (Pen dottedpen = new Pen(Brushes.Black)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1622 dottedpen.DashStyle = DashStyle.Dot;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1623 using (StringFormat sf = new StringFormat(StringFormatFlags.NoWrap)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1624 int lw = Bounds.Width - 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1625 if (hasScrollBar) lw -= 17;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1626 for (int i = offset; i < itemsView.Count; i++) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1627 FBGTreeNode item = itemsView[i];
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1628 if (y + 2 < Bounds.Height) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1629 Object obj = item.Item;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1630 String text = itemFormatter == null ? (obj == null ? String.Empty : obj.ToString()) : itemFormatter(obj);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1631 if (item == selected) g.FillRectangle(Brushes.DarkGray, 2, y, lw - 2, lh);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1632 if (item == highlighted) g.DrawRectangle(dottedpen, 2, y, lw - 3, lh - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1633 int x = 3 + 19 * item.Depth + 14;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1634 if (item.HasCheckBox) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1635 x += 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1636 ControlPaint.DrawCheckBox(g, x, y, lh, lh, item.Checked ? ButtonState.Checked : ButtonState.Normal);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1637 x += lh + 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1638 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1639 g.DrawString(text, SystemFonts.DefaultFont, SystemBrushes.WindowText, new Rectangle(x, y, lw - x, lh), sf);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1640 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1641 int upto = y + 2 + 4 - 8;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1642 for (int j = i - 1; j >= 0; j--) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1643 if (itemsView[j].Depth < item.Depth) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1644 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1645 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1646 if (itemsView[j].Depth == item.Depth) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1647 if (itemsView[j].Children.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1648 upto = 2 + lh * (j - offset) + 10;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1649 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1650 upto = 2 + lh * (j - offset) + 6;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1651 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1652 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1653 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1654 if (j <= offset) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1655 upto = 2 + 2 + 4 - 8;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1656 break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1657 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1658 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1659 if (item.Children.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1660 g.DrawRectangle(Pens.Black, 3 + 19 * item.Depth, y + 2, 8, 8);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1661 g.DrawLine(Pens.Black, 3 + 19 * item.Depth + 2, y + 2 + 4, 3 + 19 * item.Depth + 6, y + 2 + 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1662 if (!item.Expanded) g.DrawLine(Pens.Black, 3 + 19 * item.Depth + 4, y + 4, 3 + 19 * item.Depth + 4, y + 2 + 6);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1663
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1664 g.DrawLine(dottedpen, 3 + 19 * item.Depth + 8, y + 2 + 4, 3 + 19 * item.Depth + 14, y + 2 + 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1665 g.DrawLine(dottedpen, 3 + 19 * item.Depth + 4, y + 2 + 4 - 6, 3 + 19 * item.Depth + 4, upto);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1666 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1667 g.DrawLine(dottedpen, 3 + 19 * item.Depth + 4, y + 2 + 4, 3 + 19 * item.Depth + 14, y + 2 + 4);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1668 g.DrawLine(dottedpen, 3 + 19 * item.Depth + 4, y + 2 + 4 - 2, 3 + 19 * item.Depth + 4, upto);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1669 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1670 y += lh;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1671 //if (y + lh + 2 >= Bounds.Height && item.Depth == 0) break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1672 if (y + 2 >= Bounds.Height && item.Depth == 0) break;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1673 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1674 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1675 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1676 //if (y < th) hasScrollBar = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1677 //hasScrollBar = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1678 if (hasScrollBar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1679 int xoff = Bounds.Width - 17;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1680 using (Brush b = new LinearGradientBrush(new Rectangle(xoff, 0, 17, 1), Color.LightGray, Color.White, LinearGradientMode.Horizontal))
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1681 g.FillRectangle(b, xoff, 17, 16, Bounds.Height - 17 - 17);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1682 ControlPaint.DrawScrollButton(g, xoff, 1, 16, 16, ScrollButton.Up, buttonUpState);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1683 ControlPaint.DrawScrollButton(g, xoff, Bounds.Height - 17, 16, 16, ScrollButton.Down, buttonDownState);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1684 g.DrawRectangle(Pens.Black, new Rectangle(xoff, 17 + offset * (Bounds.Height - 17 - 17 - 20) / (itemsView.Count - 1), 15, 20));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1685 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1686
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1687 g.DrawRectangle(Pens.DarkBlue, 0, 0, Bounds.Width - 1, Bounds.Height - 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1688 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1689 protected override void MouseDown(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1690 CaptureKeyboard(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1691 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1692 CaptureMouse(true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1693 if (hasScrollBar && position.X > Bounds.Width - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1694 hitScrollBar = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1695 if (position.Y < 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1696 offset--;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1697 buttonUpState = ButtonState.Pushed;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1698 } else if (position.Y > Bounds.Height - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1699 offset++;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1700 buttonDownState = ButtonState.Pushed;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1701 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1702 offset = (int)Math.Round((position.Y - 17) * (itemsView.Count - 1) / (double)(Bounds.Height - 17 - 17 - 10));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1703 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1704 if (offset < 0) offset = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1705 if (offset >= itemsView.Count) offset = itemsView.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1706 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1707 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1708 MouseHandler(position, buttons, true);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1709 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1710 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1711 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1712 protected override void MouseMove(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1713 if (hitScrollBar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1714 if (position.Y < 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1715 } else if (position.Y > Bounds.Height - 17) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1716 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1717 offset = (int)Math.Round((position.Y - 17) * (itemsView.Count - 1) / (double)(Bounds.Height - 17 - 17 - 10));
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1718 if (offset < 0) offset = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1719 if (offset >= itemsView.Count) offset = itemsView.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1720 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1721 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1722 return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1723 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1724 MouseHandler(position, buttons, false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1725 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1726 protected override void MouseUp(Point position, MouseButtons buttons) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1727 if ((buttons & MouseButtons.Left) != 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1728 CaptureMouse(false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1729 buttonUpState = buttonDownState = ButtonState.Normal;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1730 Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1731 if (hitScrollBar) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1732 hitScrollBar = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1733 return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1734 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1735 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1736 if (hitScrollBar) return;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1737 MouseHandler(position, buttons, false);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1738 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1739 private void MouseHandler(Point position, MouseButtons buttons, Boolean down) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1740 if ((buttons & MouseButtons.Left) != 0 && itemsView.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1741 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight() / 2.0) * 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1742 int i = (position.Y - 2) / lh + offset;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1743 if (i < 0) i = 0;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1744 if (i >= itemsView.Count) i = itemsView.Count - 1;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1745 Boolean changed = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1746 FBGTreeNode current = itemsView[i];
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1747 if (!ReferenceEquals(highlighted, current)) changed = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1748 highlighted = current;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1749 if (current.Children.Count > 0 && (new Rectangle(3 + 19 * current.Depth, 2 + lh * (i - offset) + 2, 8, 8)).Contains(position)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1750 if (down) current.Expanded = !current.Expanded;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1751 } else if (current.HasCheckBox && (new Rectangle(3 + 19 * current.Depth + 14 + 2, 2 + lh * (i - offset), lh, lh)).Contains(position)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1752 if (down) current.Checked = !current.Checked;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1753 } else if ((new Rectangle(Point.Empty, Bounds.Size)).Contains(position)) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1754 SelectedNode = current;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1755 changed = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1756 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1757 if (changed) Invalidate();
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1758 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1759 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1760 protected override void KeyDown(Keys key) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1761 base.KeyDown(key);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1762 if (key == Keys.Up) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1763 int i = itemsView.IndexOf(selected);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1764 i--;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1765 if (i >= 0) SelectAndScrollIntoView(itemsView[i]);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1766 } else if (key == Keys.Down) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1767 int i = itemsView.IndexOf(selected);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1768 i++;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1769 if (i < itemsView.Count) SelectAndScrollIntoView(itemsView[i]);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1770 } else if (key == Keys.Left && selected != null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1771 if (selected.Expanded && selected.Children.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1772 selected.Expanded = false;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1773 } else {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1774 FBGTreeNode tn = selected.Parent as FBGTreeNode;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1775 if (tn != null) SelectAndScrollIntoView(tn);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1776 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1777 } else if (key == Keys.Right && selected != null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1778 if (!selected.Expanded && selected.Children.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1779 selected.Expanded = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1780 } else if (selected.Children.Count > 0) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1781 SelectAndScrollIntoView(selected.Children[0]);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1782 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1783 } else if (key == Keys.Space && selected != null) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1784 if (selected.HasCheckBox) selected.Checked = !selected.Checked;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1785 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1786 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1787 private void SelectAndScrollIntoView(FBGTreeNode tn) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1788 int i = itemsView.IndexOf(tn);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1789 if (i == -1) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1790 for (FBGTreeNode tp = tn.Parent as FBGTreeNode; tp != null; tp = tp.Parent as FBGTreeNode) if (!tp.Expanded) tp.Expanded = true;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1791 i = itemsView.IndexOf(tn);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1792 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1793 if (i != -1) {
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1794 int lh = (int)Math.Ceiling(SystemFonts.DefaultFont.GetHeight() / 2.0) * 2;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1795 if (i < offset) offset = i;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1796 offset = Math.Max(offset, i - Bounds.Height / lh + 1);
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1797 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1798 highlighted = tn;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1799 SelectedNode = tn;
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1800 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1801 }
644a923bca98 Added FBGUI and VNCServer
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1802 }