Updated MultiNotepad

This commit is contained in:
Tig
2024-06-16 22:03:00 -07:00
parent e38f95e641
commit 8d2378386b
3 changed files with 63 additions and 85 deletions

View File

@@ -126,7 +126,7 @@ public class Shortcut : View
SetHelpViewDefaultLayout ();
SetKeyViewDefaultLayout ();
SetColorScheme ();
SetColors ();
}
// Helper to set Width consistently
@@ -312,22 +312,10 @@ public class Shortcut : View
// When the Shortcut is clicked, we want to invoke the Command and Set focus
var view = sender as View;
if (view != CommandView)
{
CommandView.InvokeCommand (Command.Accept);
e.Handled = true;
}
if (!e.Handled)
{
// If the subview (likely CommandView) didn't handle the mouse click, invoke the command.
bool? handled = false;
handled = InvokeCommand (Command.Accept);
if (handled.HasValue)
{
e.Handled = handled.Value;
}
e.Handled = InvokeCommand (Command.Accept) == true;
}
if (CanFocus)
@@ -335,7 +323,6 @@ public class Shortcut : View
SetFocus ();
}
e.Handled = true;
}
#region Command
@@ -426,12 +413,6 @@ public class Shortcut : View
return;
void CommandViewTextChanged (object sender, StateEventArgs<string> e)
{
Title = _commandView.Text;
ShowHide ();
}
void CommandViewAccept (object sender, CancelEventArgs e)
{
// When the CommandView fires its Accept event, we want to act as though the
@@ -440,8 +421,6 @@ public class Shortcut : View
{
e.Cancel = true;
}
//e.Cancel = true;
}
}
}
@@ -643,7 +622,7 @@ public class Shortcut : View
break;
case KeyBindingScope.HotKey:
handled = _commandView.InvokeCommand (Command.HotKey) == true;
_commandView.InvokeCommand (Command.HotKey);
handled = false;
break;
@@ -655,6 +634,8 @@ public class Shortcut : View
if (base.OnAccept () is false)
{
Action?.Invoke ();
return true;
}
}
@@ -681,11 +662,14 @@ public class Shortcut : View
set
{
base.ColorScheme = value;
SetColorScheme ();
SetColors ();
}
}
public void SetColorScheme ()
/// <summary>
///
/// </summary>
internal void SetColors ()
{
// Border should match superview.
Border.ColorScheme = SuperView?.ColorScheme;
@@ -721,14 +705,14 @@ public class Shortcut : View
/// <inheritdoc/>
public override bool OnEnter (View view)
{
SetColorScheme ();
SetColors ();
return base.OnEnter (view);
}
/// <inheritdoc/>
public override bool OnLeave (View view)
{
SetColorScheme ();
SetColors ();
return base.OnLeave (view);
}

View File

@@ -11,9 +11,7 @@ namespace UICatalog.Scenarios;
public class Notepad : Scenario
{
private TabView _focusedTabView;
#if V2_STATUSBAR
private StatusItem _lenStatusItem;
#endif
public Shortcut LenShortcut { get; private set; }
private int _numNewTabs = 1;
private TabView _tabView;
@@ -41,11 +39,11 @@ public class Notepad : Scenario
| KeyCode.CtrlMask
| KeyCode.AltMask
),
new ("_Open", "", () => Open ()),
new ("_Save", "", () => Save ()),
new ("_Open", "", Open),
new ("_Save", "", Save),
new ("Save _As", "", () => SaveAs ()),
new ("_Close", "", () => Close ()),
new ("_Quit", "", () => Quit ())
new ("_Close", "", Close),
new ("_Quit", "", Quit)
}
),
new (
@@ -68,35 +66,31 @@ public class Notepad : Scenario
split.LineStyle = LineStyle.None;
top.Add (split);
#if V2_STATUSBAR
_lenStatusItem = new (KeyCode.CharMask, "Len: ", null);
LenShortcut = new (Key.Empty, "Len: ", null);
var statusBar = new StatusBar (
new []
{
new (
Application.QuitKey,
$"{Application.QuitKey} to Quit",
() => Quit ()
),
// These shortcut keys don't seem to work correctly in linux
//new StatusItem(Key.CtrlMask | Key.N, "~^O~ Open", () => Open()),
//new StatusItem(Key.CtrlMask | Key.N, "~^N~ New", () => New()),
new (KeyCode.CtrlMask | KeyCode.S, "~^S~ Save", () => Save ()),
new (KeyCode.CtrlMask | KeyCode.W, "~^W~ Close", () => Close ()),
_lenStatusItem
var statusBar = new StatusBar (new [] {
new (Application.QuitKey, $"Quit", Quit),
new Shortcut(Key.F2, "Open", Open),
new Shortcut(Key.F1, "New", New),
new (Key.F3, "Save", Save),
new (Key.F6, "Close", Close),
LenShortcut
}
);
)
{
AlignmentModes = AlignmentModes.IgnoreFirstOrLast
};
top.Add (statusBar);
#endif
_focusedTabView = _tabView;
_tabView.SelectedTabChanged += TabView_SelectedTabChanged;
_tabView.Enter += (s, e) => _focusedTabView = _tabView;
top.Ready += (s, e) => New ();
top.Ready += (s, e) =>
{
New ();
LenShortcut.Title = $"Len:{_focusedTabView.Text?.Length ?? 0}";
};
Application.Run (top);
top.Dispose ();
@@ -283,7 +277,7 @@ public class Notepad : Scenario
/// <param name="fileInfo">File that was read or null if a new blank document</param>
private void Open (FileInfo fileInfo, string tabName)
{
var tab = new OpenedFile { DisplayText = tabName, File = fileInfo };
var tab = new OpenedFile (this) { DisplayText = tabName, File = fileInfo };
tab.View = tab.CreateTextView (fileInfo);
tab.SavedText = tab.View.Text;
tab.RegisterTextViewEvents (_focusedTabView);
@@ -327,9 +321,8 @@ public class Notepad : Scenario
private void TabView_SelectedTabChanged (object sender, TabChangedEventArgs e)
{
#if V2_STATUSBAR
_lenStatusItem.Title = $"Len:{e.NewTab?.View?.Text?.Length ?? 0}";
#endif
LenShortcut.Title = $"Len:{e.NewTab?.View?.Text?.Length ?? 0}";
e.NewTab?.View?.SetFocus ();
}
@@ -376,11 +369,13 @@ public class Notepad : Scenario
e.MouseEvent.Handled = true;
}
private class OpenedFile : Tab
private class OpenedFile (Notepad notepad) : Tab
{
private Notepad _notepad = notepad;
public OpenedFile CloneTo (TabView other)
{
var newTab = new OpenedFile { DisplayText = base.Text, File = File };
var newTab = new OpenedFile (_notepad) { DisplayText = base.Text, File = File };
newTab.View = newTab.CreateTextView (newTab.File);
newTab.SavedText = newTab.View.Text;
newTab.RegisterTextViewEvents (other);
@@ -416,28 +411,27 @@ public class Notepad : Scenario
var textView = (TextView)View;
// when user makes changes rename tab to indicate unsaved
textView.KeyUp += (s, k) =>
{
// if current text doesn't match saved text
bool areDiff = UnsavedChanges;
textView.ContentsChanged += (s, k) =>
{
// if current text doesn't match saved text
bool areDiff = UnsavedChanges;
if (areDiff)
{
if (!Text.EndsWith ('*'))
{
Text = Text + '*';
parent.SetNeedsDisplay ();
}
}
else
{
if (Text.EndsWith ('*'))
{
Text = Text.TrimEnd ('*');
parent.SetNeedsDisplay ();
}
}
};
if (areDiff)
{
if (!DisplayText.EndsWith ('*'))
{
DisplayText = Text + '*';
}
}
else
{
if (DisplayText.EndsWith ('*'))
{
DisplayText = Text.TrimEnd ('*');
}
}
_notepad.LenShortcut.Title = $"Len:{textView.Text.Length}";
};
}
/// <summary>The text of the tab the last time it was saved</summary>
@@ -458,7 +452,7 @@ public class Notepad : Scenario
System.IO.File.WriteAllText (File.FullName, newText);
SavedText = newText;
Text = Text.TrimEnd ('*');
DisplayText = DisplayText.TrimEnd ('*');
}
}
}

View File

@@ -182,7 +182,7 @@ public class Shortcuts : Scenario
if (peer.CanFocus)
{
peer.CommandView.CanFocus = e.NewValue == true;
peer.SetColorScheme ();
//peer.SetColors ();
}
}
}