diff --git a/Example/demo.cs b/Example/demo.cs
index 0331615c1..272810f4b 100644
--- a/Example/demo.cs
+++ b/Example/demo.cs
@@ -375,6 +375,17 @@ static class Demo {
MessageBox.Query (50, 7, "Help", "This is a small help\nBe kind.", "Ok");
}
+ static void Load ()
+ {
+ MessageBox.Query (50, 7, "Load", "This is a small load\nBe kind.", "Ok");
+ }
+
+ static void Save ()
+ {
+ MessageBox.Query (50, 7, "Save", "This is a small save\nBe kind.", "Ok");
+ }
+
+
#region Selection Demo
static void ListSelectionDemo (bool multiple)
@@ -611,8 +622,8 @@ static class Demo {
var statusBar = new StatusBar (new StatusItem [] {
new StatusItem(Key.F1, "~F1~ Help", () => Help()),
- new StatusItem(Key.F2, "~F2~ Load", null),
- new StatusItem(Key.F3, "~F3~ Save", null),
+ new StatusItem(Key.F2, "~F2~ Load", Load),
+ new StatusItem(Key.F3, "~F3~ Save", Save),
new StatusItem(Key.ControlQ, "~^Q~ Quit", () => { if (Quit ()) top.Running = false; }),
}) {
Parent = null,
diff --git a/FSharpExample/Program.fs b/FSharpExample/Program.fs
index 4824df648..62202bd22 100644
--- a/FSharpExample/Program.fs
+++ b/FSharpExample/Program.fs
@@ -333,9 +333,9 @@ type Demo() = class end
X = Pos.At(0),
Y = Pos.At(0),
Width = Dim.Fill () - Dim.op_Implicit(1),
- Height = Dim.Fill () - Dim.op_Implicit(2)
+ Height = Dim.Fill () - Dim.op_Implicit(2),
+ ColorScheme = Colors.TopLevel
)
- listView.ColorScheme <- Colors.TopLevel
container.Add (listView)
let KeyDownPressUp(keyEvent : KeyEvent, updown : string) =
@@ -344,25 +344,7 @@ type Demo() = class end
| "Down"
| "Up"
| "Press" ->
- let mutable (msg : string) = sprintf "Key %5s : " updown
- if (keyEvent.Key &&& Key.ShiftMask) <> Key.Unknown
- then msg <- msg + "Shift "
- if (keyEvent.Key &&& Key.CtrlMask) <> Key.Unknown
- then msg <- msg + "Ctrl "
- if (keyEvent.Key &&& Key.AltMask) <> Key.Unknown
- then msg <- msg + "Alt "
- msg <- msg + if (keyEvent.KeyValue &&& (int)Key.CharMask) > 26 then (string)keyEvent.KeyValue else (string)keyEvent.Key
- list.Add (msg)
- | _ ->
- if (keyEvent.Key &&& Key.ShiftMask) <> Key.Unknown
- then list.Add (sprintf "Key %s : Shift " updown)
- else if (keyEvent.Key &&& Key.CtrlMask) <> Key.Unknown
- then list.Add (sprintf "Key %s : Ctrl " updown)
- else if (keyEvent.Key &&& Key.AltMask) <> Key.Unknown
- then list.Add (sprintf "Key %s : Alt " updown)
- else if ((int)keyEvent.KeyValue &&& (int)Key.CharMask) > 26
- then list.Add (sprintf "Key %s : %s" updown (keyEvent.KeyValue.ToString()))
- else list.Add (sprintf "Key %s : %s" updown (keyEvent.Key.ToString()))
+ list.Add (keyEvent.ToString ())
listView.MoveDown ();
container.KeyDown.Add(fun (e : View.KeyEventEventArgs) -> KeyDownPressUp (e.KeyEvent, "Down") |> ignore)
diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs
index f2fb62796..2e9c8e74d 100644
--- a/Terminal.Gui/Views/ScrollView.cs
+++ b/Terminal.Gui/Views/ScrollView.cs
@@ -90,6 +90,9 @@ namespace Terminal.Gui {
/// Region to be redrawn.
public override void Redraw(Rect region)
{
+ if (ColorScheme == null)
+ return;
+
Driver.SetAttribute (ColorScheme.Normal);
if (vertical) {
@@ -408,7 +411,8 @@ namespace Terminal.Gui {
Driver.Clip = savedClip;
vertical.Redraw (vertical.Bounds);
- horizontal.Redraw (vertical.Bounds);
+ horizontal.Redraw (horizontal.Bounds);
+ Driver.Clip = savedClip;
Driver.SetAttribute (ColorScheme.Normal);
}
diff --git a/Terminal.Gui/Views/StatusBar.cs b/Terminal.Gui/Views/StatusBar.cs
index 70e4dca2b..bf298816d 100644
--- a/Terminal.Gui/Views/StatusBar.cs
+++ b/Terminal.Gui/Views/StatusBar.cs
@@ -185,11 +185,50 @@ namespace Terminal.Gui {
{
foreach (var item in Items) {
if (kb.Key == item.Shortcut) {
- if (item.Action != null) item.Action ();
+ item.Action?.Invoke ();
return true;
}
}
return false;
}
+
+ ///
+ public override bool MouseEvent (MouseEvent me)
+ {
+ if (me.Flags != MouseFlags.Button1Clicked)
+ return false;
+
+ int pos = 1;
+ for (int i = 0; i < Items.Length; i++) {
+ if (me.X >= pos && me.X < pos + GetItemTitleLength (Items [i].Title)) {
+ Run (Items [i].Action);
+ }
+ pos += GetItemTitleLength (Items [i].Title) + 1;
+ }
+ return true;
+ }
+
+ int GetItemTitleLength (ustring title)
+ {
+ int len = 0;
+ foreach (var ch in title) {
+ if (ch == '~')
+ continue;
+ len++;
+ }
+
+ return len;
+ }
+
+ void Run (Action action)
+ {
+ if (action == null)
+ return;
+
+ Application.MainLoop.AddIdle (() => {
+ action ();
+ return false;
+ });
+ }
}
}
\ No newline at end of file