mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-02 01:03:29 +01:00
Corrects the position of the StatusBar so that it is always at the bottom of the screen. Works perfectly with curses.
This commit is contained in:
@@ -1522,12 +1522,12 @@ namespace Terminal.Gui {
|
||||
/// <summary>
|
||||
/// Check id current toplevel has menu bar
|
||||
/// </summary>
|
||||
public bool HasMenuBar { get; set; }
|
||||
public MenuBar MenuBar { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Check id current toplevel has status bar
|
||||
/// </summary>
|
||||
public bool HasStatusBar { get; set; }
|
||||
public StatusBar StatusBar { get; set; }
|
||||
|
||||
public override bool ProcessKey (KeyEvent keyEvent)
|
||||
{
|
||||
@@ -1584,9 +1584,9 @@ namespace Terminal.Gui {
|
||||
{
|
||||
if (this == Application.Top) {
|
||||
if (view is MenuBar)
|
||||
HasMenuBar = true;
|
||||
MenuBar = view as MenuBar;
|
||||
if (view is StatusBar)
|
||||
HasStatusBar = true;
|
||||
StatusBar = view as StatusBar;
|
||||
}
|
||||
base.Add (view);
|
||||
}
|
||||
@@ -1595,9 +1595,9 @@ namespace Terminal.Gui {
|
||||
{
|
||||
if (this == Application.Top) {
|
||||
if (view is MenuBar)
|
||||
HasMenuBar = true;
|
||||
MenuBar = null;
|
||||
if (view is StatusBar)
|
||||
HasStatusBar = true;
|
||||
StatusBar = null;
|
||||
}
|
||||
base.Remove (view);
|
||||
}
|
||||
@@ -1605,8 +1605,8 @@ namespace Terminal.Gui {
|
||||
public override void RemoveAll ()
|
||||
{
|
||||
if (this == Application.Top) {
|
||||
HasMenuBar = false;
|
||||
HasStatusBar = false;
|
||||
MenuBar = null;
|
||||
StatusBar = null;
|
||||
}
|
||||
base.RemoveAll ();
|
||||
}
|
||||
@@ -1617,15 +1617,15 @@ namespace Terminal.Gui {
|
||||
nx = nx + top.Frame.Width > Driver.Cols ? Math.Max(Driver.Cols - top.Frame.Width, 0) : nx;
|
||||
bool m, s;
|
||||
if (SuperView == null)
|
||||
m = Application.Top.HasMenuBar;
|
||||
m = Application.Top.MenuBar != null;
|
||||
else
|
||||
m = ((Toplevel)SuperView).HasMenuBar;
|
||||
m = ((Toplevel)SuperView).MenuBar != null;
|
||||
int l = m ? 1 : 0;
|
||||
ny = Math.Max (y, l);
|
||||
if (SuperView == null)
|
||||
s = Application.Top.HasStatusBar;
|
||||
s = Application.Top.StatusBar != null;
|
||||
else
|
||||
s = ((Toplevel)SuperView).HasStatusBar;
|
||||
s = ((Toplevel)SuperView).StatusBar != null;
|
||||
l = s ? Driver.Rows - 1 : Driver.Rows;
|
||||
ny = Math.Min (ny, l);
|
||||
ny = ny + top.Frame.Height > l ? Math.Max(l - top.Frame.Height, m ? 1 : 0) : ny;
|
||||
@@ -1647,9 +1647,15 @@ namespace Terminal.Gui {
|
||||
top.X = nx;
|
||||
top.Y = ny;
|
||||
}
|
||||
if (HasStatusBar && ny + top.Frame.Height > Driver.Rows - 1) {
|
||||
if (top.Height is Dim.DimFill)
|
||||
top.Height = Dim.Fill () - 1;
|
||||
if (StatusBar != null) {
|
||||
if (ny + top.Frame.Height > Driver.Rows - 1) {
|
||||
if (top.Height is Dim.DimFill)
|
||||
top.Height = Dim.Fill () - 1;
|
||||
}
|
||||
if (StatusBar.Frame.Y != Driver.Rows - 1) {
|
||||
StatusBar.Y = Driver.Rows - 1;
|
||||
SetNeedsDisplay ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +101,12 @@ namespace Terminal.Gui {
|
||||
Items = items;
|
||||
CanFocus = false;
|
||||
ColorScheme = Colors.Menu;
|
||||
X = 0;
|
||||
Y = Driver.Rows - 1;
|
||||
Width = Dim.Fill ();
|
||||
Height = 1;
|
||||
|
||||
// This is never called if it is invoked later on another place.
|
||||
Application.OnLoad += () => {
|
||||
X = 0;
|
||||
Height = 1;
|
||||
@@ -134,11 +139,11 @@ namespace Terminal.Gui {
|
||||
|
||||
public override void Redraw (Rect region)
|
||||
{
|
||||
if (Frame.Y != Driver.Rows - 1) {
|
||||
Frame = new Rect (Frame.X, Driver.Rows - 1, Frame.Width, Frame.Height);
|
||||
Y = Driver.Rows - 1;
|
||||
SetNeedsDisplay ();
|
||||
}
|
||||
//if (Frame.Y != Driver.Rows - 1) {
|
||||
// Frame = new Rect (Frame.X, Driver.Rows - 1, Frame.Width, Frame.Height);
|
||||
// Y = Driver.Rows - 1;
|
||||
// SetNeedsDisplay ();
|
||||
//}
|
||||
|
||||
Move (0, 0);
|
||||
Driver.SetAttribute (ColorScheme.Normal);
|
||||
|
||||
Reference in New Issue
Block a user