Rebuildling TabView - WIP

This commit is contained in:
Tig
2024-11-05 17:40:51 -07:00
parent b48bc2b06e
commit 77ae7ae7df
7 changed files with 475 additions and 1094 deletions

View File

@@ -1,4 +1,6 @@
#nullable enable
using System.Net.Security;
namespace Terminal.Gui;
/// <summary>A single tab in a <see cref="TabView"/>.</summary>
@@ -11,7 +13,9 @@ public class Tab : View
{
BorderStyle = LineStyle.Rounded;
CanFocus = true;
TabStop = TabBehavior.NoStop;
TabStop = TabBehavior.TabStop;
Width = Dim.Auto (DimAutoStyle.Text);
SuperViewRendersLineCanvas = true;
}
/// <summary>The text to display in a <see cref="TabView"/>.</summary>
@@ -26,7 +30,7 @@ public class Tab : View
}
}
/// <summary>The control to display when the tab is selected.</summary>
/// <summary>The View that will be made visible in the <see cref="TabView"/> content area when the tab is selected.</summary>
/// <value></value>
public View? View { get; set; }
}

View File

@@ -1,20 +1,20 @@
namespace Terminal.Gui;
/// <summary>Describes a change in <see cref="TabView.SelectedTab"/></summary>
/// <summary>Describes a change in <see cref="TabView.SelectedTabIndex"/></summary>
public class TabChangedEventArgs : EventArgs
{
/// <summary>Documents a tab change</summary>
/// <param name="oldTab"></param>
/// <param name="newTab"></param>
public TabChangedEventArgs (Tab oldTab, Tab newTab)
/// <param name="oldTabIndex"></param>
/// <param name="newTabIndex"></param>
public TabChangedEventArgs (int? oldTabIndex, int? newTabIndex)
{
OldTab = oldTab;
NewTab = newTab;
OldTabIndex = oldTabIndex;
NewTabIndex = newTabIndex;
}
/// <summary>The currently selected tab. May be null</summary>
public Tab NewTab { get; }
/// <summary>The currently selected tab.</summary>
public int? NewTabIndex { get; }
/// <summary>The previously selected tab. May be null</summary>
public Tab OldTab { get; }
/// <summary>The previously selected tab.</summary>
public int? OldTabIndex{ get; }
}

File diff suppressed because it is too large Load Diff

View File

@@ -743,8 +743,8 @@ public class Editor : Scenario
_findReplaceWindow.Visible = true;
_findReplaceWindow.SuperView.MoveSubviewToStart (_findReplaceWindow);
_tabView.SetFocus ();
_tabView.SelectedTab = isFind ? _tabView.Tabs.ToArray () [0] : _tabView.Tabs.ToArray () [1];
_tabView.SelectedTab.View.FocusDeepest (NavigationDirection.Forward, null);
_tabView.SelectedTabIndex = isFind ? 0 : 1;
// _tabView.SelectedTabIndex.View.FocusDeepest (NavigationDirection.Forward, null);
}
private void CreateFindReplace ()
@@ -758,7 +758,7 @@ public class Editor : Scenario
_tabView.AddTab (new () { DisplayText = "Find", View = CreateFindTab () }, true);
_tabView.AddTab (new () { DisplayText = "Replace", View = CreateReplaceTab () }, false);
_tabView.SelectedTabChanged += (s, e) => _tabView.SelectedTab.View.FocusDeepest (NavigationDirection.Forward, null);
//_tabView.SelectedTabChanged += (s, e) => _tabView.SelectedTabIndex.View.FocusDeepest (NavigationDirection.Forward, null);
_findReplaceWindow.Add (_tabView);
// _tabView.SelectedTab.View.FocusLast (null); // Hack to get the first tab to be focused

View File

@@ -293,11 +293,11 @@ public class Images : Scenario
private void ApplyShowTabViewHack ()
{
// TODO HACK: This hack seems to be required to make tabview actually refresh itself
_tabView.SetNeedsDraw ();
var orig = _tabView.SelectedTab;
_tabView.SelectedTab = _tabView.Tabs.Except (new [] { orig }).ElementAt (0);
_tabView.SelectedTab = orig;
//// TODO HACK: This hack seems to be required to make tabview actually refresh itself
//_tabView.SetNeedsDraw ();
//var orig = _tabView.SelectedTabIndex;
//_tabView.SelectedTabIndex = _tabView.Tabs.Except (new [] { orig }).ElementAt (0);
//_tabView.SelectedTabIndex = orig;
}
private void BuildBasicTab (Tab tabBasic)

View File

@@ -98,7 +98,7 @@ public class Notepad : Scenario
Application.Shutdown ();
}
public void Save () { Save (_focusedTabView, _focusedTabView.SelectedTab); }
public void Save () { Save (_focusedTabView, _focusedTabView.Tabs.ToArray () [_focusedTabView.SelectedTabIndex!.Value]); }
public void Save (TabView tabViewToSave, Tab tabToSave)
{
@@ -120,7 +120,7 @@ public class Notepad : Scenario
public bool SaveAs ()
{
var tab = _focusedTabView.SelectedTab as OpenedFile;
var tab = _focusedTabView.Tabs.ToArray () [_focusedTabView.SelectedTabIndex!.Value] as OpenedFile;
if (tab == null)
{
@@ -153,7 +153,7 @@ public class Notepad : Scenario
return true;
}
private void Close () { Close (_focusedTabView, _focusedTabView.SelectedTab); }
private void Close () { Close (_focusedTabView, _focusedTabView.Tabs.ToArray()[_focusedTabView.SelectedTabIndex!.Value]); }
private void Close (TabView tv, Tab tabToClose)
{
@@ -239,7 +239,7 @@ public class Notepad : Scenario
{
var tv = new TabView { X = 0, Y = 0, Width = Dim.Fill (), Height = Dim.Fill () };
tv.TabClicked += TabView_TabClicked;
// tv.TabClicked += TabView_TabClicked;
tv.SelectedTabChanged += TabView_SelectedTabChanged;
tv.HasFocusChanging += (s, e) => _focusedTabView = tv;
@@ -320,9 +320,10 @@ public class Notepad : Scenario
private void TabView_SelectedTabChanged (object sender, TabChangedEventArgs e)
{
LenShortcut.Title = $"Len:{e.NewTab?.View?.Text?.Length ?? 0}";
Tab tab = _focusedTabView.Tabs.ToArray () [e.NewTabIndex!.Value];
LenShortcut.Title = $"Len:{tab?.View?.Text?.Length ?? 0}";
e.NewTab?.View?.SetFocus ();
tab?.View?.SetFocus ();
}
private void TabView_TabClicked (object sender, TabMouseEventArgs e)

View File

@@ -35,7 +35,7 @@ public class TabViewExample : Scenario
new (
"_Clear SelectedTab",
"",
() => _tabView.SelectedTab = null
() => _tabView.SelectedTabIndex = null
),
new ("_Quit", "", Quit)
}
@@ -129,7 +129,7 @@ public class TabViewExample : Scenario
);
}
_tabView.SelectedTab = _tabView.Tabs.First ();
_tabView.SelectedTabIndex = 0;
appWindow.Add (_tabView);