mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-28 04:25:10 +08:00
First use of tui_layout
This patch introduces the first use of tui_layout, by changing show_layout to clone and use the appropriate tui_layout. This resulted in one minor layout change, and also in the unintended -- but good -- side effect that the title of each boxed window is now visible. gdb/ChangeLog 2019-12-11 Tom Tromey <tom@tromey.com> * tui/tui-layout.h (tui_apply_current_layout): Declare. * tui/tui-layout.c (standard_layouts, applied_layout): New globals. (tui_apply_current_layout): New function. (show_layout): Set applied_layout. Call tui_apply_current_layout. (show_source_command, show_disasm_command) (show_source_disasm_command, show_data) (show_source_or_disasm_and_command): Remove. (initialize_layouts): New function. (_initialize_tui_layout): Call initialize_layouts. gdb/testsuite/ChangeLog 2019-12-11 Tom Tromey <tom@tromey.com> * gdb.tui/regs.exp: Update. * gdb.tui/empty.exp (layouts): Update. * gdb.tui/basic.exp: Update. * lib/tuiterm.exp (_check_box): Don't check bottom border. Change-Id: If1ee06ee58f4803e8c213f4ab0f5bb59f4650ec2
This commit is contained in:
parent
389e7ddbc2
commit
2192a9d3b3
@ -1,3 +1,17 @@
|
||||
2019-12-11 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* tui/tui-layout.h (tui_apply_current_layout): Declare.
|
||||
* tui/tui-layout.c (standard_layouts, applied_layout): New
|
||||
globals.
|
||||
(tui_apply_current_layout): New function.
|
||||
(show_layout): Set applied_layout. Call
|
||||
tui_apply_current_layout.
|
||||
(show_source_command, show_disasm_command)
|
||||
(show_source_disasm_command, show_data)
|
||||
(show_source_or_disasm_and_command): Remove.
|
||||
(initialize_layouts): New function.
|
||||
(_initialize_tui_layout): Call initialize_layouts.
|
||||
|
||||
2019-12-11 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* tui/tui-layout.h (class tui_layout_base)
|
||||
|
@ -1,3 +1,10 @@
|
||||
2019-12-11 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* gdb.tui/regs.exp: Update.
|
||||
* gdb.tui/empty.exp (layouts): Update.
|
||||
* gdb.tui/basic.exp: Update.
|
||||
* lib/tuiterm.exp (_check_box): Don't check bottom border.
|
||||
|
||||
2019-12-11 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* gdb.base/options.exp: Add -raw-values in the print completion list.
|
||||
|
@ -45,5 +45,5 @@ Term::check_box "asm box" 0 0 80 15
|
||||
Term::command "layout split"
|
||||
Term::check_contents "split layout contents" "21 *return 0.*$hex <main>"
|
||||
|
||||
Term::check_box "source box in split layout" 0 0 80 8
|
||||
Term::check_box "asm box in split layout" 0 7 80 8
|
||||
Term::check_box "source box in split layout" 0 0 80 7
|
||||
Term::check_box "asm box in split layout" 0 6 80 9
|
||||
|
@ -34,7 +34,7 @@ if {![Term::enter_tui]} {
|
||||
set layouts {
|
||||
{src src {{0 0 80 15}} {{0 0 90 23}}
|
||||
{{"no source" "No Source Available"}}}
|
||||
{regs src-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
|
||||
{regs src-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
|
||||
{
|
||||
{"no source" "No Source Available"}
|
||||
{"no regs" "Register Values Unavailable"}
|
||||
@ -43,17 +43,17 @@ set layouts {
|
||||
{
|
||||
{"no asm" "No Assembly Available"}
|
||||
}}
|
||||
{regs asm-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
|
||||
{regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
|
||||
{
|
||||
{"no asm" "No Assembly Available"}
|
||||
{"no regs" "Register Values Unavailable"}
|
||||
}}
|
||||
{split split {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
|
||||
{split split {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
|
||||
{
|
||||
{"no source" "No Source Available"}
|
||||
{"no asm" "No Assembly Available"}
|
||||
}}
|
||||
{regs split-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}}
|
||||
{regs split-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 12} {0 11 90 14}}
|
||||
{
|
||||
{"no asm" "No Assembly Available"}
|
||||
{"no regs" "Register Values Unavailable"}
|
||||
|
@ -37,8 +37,8 @@ if {![Term::enter_tui]} {
|
||||
Term::check_contents "source at startup" ">|21 *return 0"
|
||||
|
||||
Term::command "layout regs"
|
||||
Term::check_box "register box" 0 0 80 8
|
||||
Term::check_box "source box in regs layout" 0 7 80 8
|
||||
Term::check_box "register box" 0 0 80 7
|
||||
Term::check_box "source box in regs layout" 0 6 80 9
|
||||
|
||||
set text [Term::get_line 1]
|
||||
# Just check for any register window content at all.
|
||||
|
@ -555,13 +555,9 @@ namespace eval Term {
|
||||
return "lr corner"
|
||||
}
|
||||
|
||||
for {set i [expr {$x + 1}]} {$i < $x2 - 1} {incr i} {
|
||||
# Note we do not check the top border of the box, because
|
||||
# it will contain a title.
|
||||
if {[get_char $i $y2] != "-"} {
|
||||
return "bottom border $i"
|
||||
}
|
||||
}
|
||||
# Note we do not check the horizonal borders of the box. The
|
||||
# top will contain a title, and the bottom may as well, if it
|
||||
# is overlapped by some other border.
|
||||
for {set i [expr {$y + 1}]} {$i < $y2 - 1} {incr i} {
|
||||
if {[get_char $x $i] != "|"} {
|
||||
return "left side $i"
|
||||
|
@ -41,17 +41,18 @@
|
||||
#include "gdb_curses.h"
|
||||
|
||||
static void show_layout (enum tui_layout_type);
|
||||
static void show_source_or_disasm_and_command (enum tui_layout_type);
|
||||
static void show_source_command (void);
|
||||
static void show_disasm_command (void);
|
||||
static void show_source_disasm_command (void);
|
||||
static void show_data (enum tui_layout_type);
|
||||
static enum tui_layout_type next_layout (void);
|
||||
static enum tui_layout_type prev_layout (void);
|
||||
static void tui_layout_command (const char *, int);
|
||||
static void extract_display_start_addr (struct gdbarch **, CORE_ADDR *);
|
||||
|
||||
|
||||
/* The pre-defined layouts. */
|
||||
static tui_layout_split *standard_layouts[UNDEFINED_LAYOUT];
|
||||
|
||||
/* The layout that is currently applied. */
|
||||
static std::unique_ptr<tui_layout_base> applied_layout;
|
||||
|
||||
static enum tui_layout_type current_layout = UNDEFINED_LAYOUT;
|
||||
|
||||
/* Accessor for the current layout. */
|
||||
@ -61,6 +62,13 @@ tui_current_layout (void)
|
||||
return current_layout;
|
||||
}
|
||||
|
||||
/* See tui-layout.h. */
|
||||
|
||||
void
|
||||
tui_apply_current_layout ()
|
||||
{
|
||||
applied_layout->apply (0, 0, tui_term_width (), tui_term_height ());
|
||||
}
|
||||
|
||||
/* Show the screen layout defined. */
|
||||
static void
|
||||
@ -71,26 +79,8 @@ show_layout (enum tui_layout_type layout)
|
||||
if (layout != cur_layout)
|
||||
{
|
||||
tui_make_all_invisible ();
|
||||
switch (layout)
|
||||
{
|
||||
case SRC_DATA_COMMAND:
|
||||
case DISASSEM_DATA_COMMAND:
|
||||
show_data (layout);
|
||||
break;
|
||||
/* Now show the new layout. */
|
||||
case SRC_COMMAND:
|
||||
show_source_command ();
|
||||
break;
|
||||
case DISASSEM_COMMAND:
|
||||
show_disasm_command ();
|
||||
break;
|
||||
case SRC_DISASSEM_COMMAND:
|
||||
show_source_disasm_command ();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
applied_layout = standard_layouts[layout]->clone ();
|
||||
tui_apply_current_layout ();
|
||||
current_layout = layout;
|
||||
tui_delete_invisible_windows ();
|
||||
}
|
||||
@ -364,105 +354,6 @@ prev_layout (void)
|
||||
return (enum tui_layout_type) new_layout;
|
||||
}
|
||||
|
||||
/* Show the Source/Command layout. */
|
||||
static void
|
||||
show_source_command (void)
|
||||
{
|
||||
show_source_or_disasm_and_command (SRC_COMMAND);
|
||||
}
|
||||
|
||||
|
||||
/* Show the Dissassem/Command layout. */
|
||||
static void
|
||||
show_disasm_command (void)
|
||||
{
|
||||
show_source_or_disasm_and_command (DISASSEM_COMMAND);
|
||||
}
|
||||
|
||||
|
||||
/* Show the Source/Disassem/Command layout. */
|
||||
static void
|
||||
show_source_disasm_command (void)
|
||||
{
|
||||
int cmd_height, src_height, asm_height;
|
||||
|
||||
if (TUI_CMD_WIN != NULL)
|
||||
cmd_height = TUI_CMD_WIN->height;
|
||||
else
|
||||
cmd_height = tui_term_height () / 3;
|
||||
|
||||
src_height = (tui_term_height () - cmd_height) / 2;
|
||||
asm_height = tui_term_height () - (src_height + cmd_height);
|
||||
|
||||
if (TUI_SRC_WIN == NULL)
|
||||
tui_win_list[SRC_WIN] = new tui_source_window ();
|
||||
TUI_SRC_WIN->resize (src_height,
|
||||
tui_term_width (),
|
||||
0,
|
||||
0);
|
||||
|
||||
struct tui_locator_window *locator = tui_locator_win_info_ptr ();
|
||||
gdb_assert (locator != nullptr);
|
||||
|
||||
if (TUI_DISASM_WIN == NULL)
|
||||
tui_win_list[DISASSEM_WIN] = new tui_disasm_window ();
|
||||
TUI_DISASM_WIN->resize (asm_height,
|
||||
tui_term_width (),
|
||||
0,
|
||||
src_height - 1);
|
||||
locator->resize (1, tui_term_width (),
|
||||
0, (src_height + asm_height) - 1);
|
||||
|
||||
if (TUI_CMD_WIN == NULL)
|
||||
tui_win_list[CMD_WIN] = new tui_cmd_window ();
|
||||
TUI_CMD_WIN->resize (cmd_height,
|
||||
tui_term_width (),
|
||||
0,
|
||||
tui_term_height () - cmd_height);
|
||||
}
|
||||
|
||||
|
||||
/* Show the Source/Data/Command or the Dissassembly/Data/Command
|
||||
layout. */
|
||||
static void
|
||||
show_data (enum tui_layout_type new_layout)
|
||||
{
|
||||
int total_height = (tui_term_height () - TUI_CMD_WIN->height);
|
||||
int src_height, data_height;
|
||||
enum tui_win_type win_type;
|
||||
|
||||
struct tui_locator_window *locator = tui_locator_win_info_ptr ();
|
||||
gdb_assert (locator != nullptr);
|
||||
|
||||
data_height = total_height / 2;
|
||||
src_height = total_height - data_height;
|
||||
if (tui_win_list[DATA_WIN] == nullptr)
|
||||
tui_win_list[DATA_WIN] = new tui_data_window ();
|
||||
tui_win_list[DATA_WIN]->resize (data_height, tui_term_width (), 0, 0);
|
||||
|
||||
if (new_layout == SRC_DATA_COMMAND)
|
||||
win_type = SRC_WIN;
|
||||
else
|
||||
win_type = DISASSEM_WIN;
|
||||
|
||||
if (tui_win_list[win_type] == NULL)
|
||||
{
|
||||
if (win_type == SRC_WIN)
|
||||
tui_win_list[win_type] = new tui_source_window ();
|
||||
else
|
||||
tui_win_list[win_type] = new tui_disasm_window ();
|
||||
}
|
||||
|
||||
tui_win_list[win_type]->resize (src_height,
|
||||
tui_term_width (),
|
||||
0,
|
||||
data_height - 1);
|
||||
locator->resize (1, tui_term_width (),
|
||||
0, total_height - 1);
|
||||
TUI_CMD_WIN->resize (TUI_CMD_WIN->height, tui_term_width (),
|
||||
0, total_height);
|
||||
}
|
||||
|
||||
void
|
||||
tui_gen_win_info::resize (int height_, int width_,
|
||||
int origin_x_, int origin_y_)
|
||||
@ -498,49 +389,6 @@ tui_gen_win_info::resize (int height_, int width_,
|
||||
rerender ();
|
||||
}
|
||||
|
||||
/* Show the Source/Command or the Disassem layout. */
|
||||
static void
|
||||
show_source_or_disasm_and_command (enum tui_layout_type layout_type)
|
||||
{
|
||||
struct tui_source_window_base *win_info;
|
||||
int src_height, cmd_height;
|
||||
struct tui_locator_window *locator = tui_locator_win_info_ptr ();
|
||||
gdb_assert (locator != nullptr);
|
||||
|
||||
if (TUI_CMD_WIN != NULL)
|
||||
cmd_height = TUI_CMD_WIN->height;
|
||||
else
|
||||
cmd_height = tui_term_height () / 3;
|
||||
src_height = tui_term_height () - cmd_height;
|
||||
|
||||
if (layout_type == SRC_COMMAND)
|
||||
{
|
||||
if (tui_win_list[SRC_WIN] == nullptr)
|
||||
tui_win_list[SRC_WIN] = new tui_source_window ();
|
||||
win_info = TUI_SRC_WIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tui_win_list[DISASSEM_WIN] == nullptr)
|
||||
tui_win_list[DISASSEM_WIN] = new tui_disasm_window ();
|
||||
win_info = TUI_DISASM_WIN;
|
||||
}
|
||||
|
||||
locator->resize (1, tui_term_width (),
|
||||
0, src_height - 1);
|
||||
win_info->resize (src_height - 1,
|
||||
tui_term_width (),
|
||||
0,
|
||||
0);
|
||||
|
||||
if (TUI_CMD_WIN == NULL)
|
||||
tui_win_list[CMD_WIN] = new tui_cmd_window ();
|
||||
TUI_CMD_WIN->resize (cmd_height,
|
||||
tui_term_width (),
|
||||
0,
|
||||
src_height);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Helper function that returns a TUI window, given its name. */
|
||||
@ -901,6 +749,38 @@ tui_layout_split::apply (int x_, int y_, int width_, int height_)
|
||||
m_applied = true;
|
||||
}
|
||||
|
||||
static void
|
||||
initialize_layouts ()
|
||||
{
|
||||
standard_layouts[SRC_COMMAND] = new tui_layout_split ();
|
||||
standard_layouts[SRC_COMMAND]->add_window ("src", 2);
|
||||
standard_layouts[SRC_COMMAND]->add_window ("locator", 0);
|
||||
standard_layouts[SRC_COMMAND]->add_window ("cmd", 1);
|
||||
|
||||
standard_layouts[DISASSEM_COMMAND] = new tui_layout_split ();
|
||||
standard_layouts[DISASSEM_COMMAND]->add_window ("asm", 2);
|
||||
standard_layouts[DISASSEM_COMMAND]->add_window ("locator", 0);
|
||||
standard_layouts[DISASSEM_COMMAND]->add_window ("cmd", 1);
|
||||
|
||||
standard_layouts[SRC_DATA_COMMAND] = new tui_layout_split ();
|
||||
standard_layouts[SRC_DATA_COMMAND]->add_window ("regs", 1);
|
||||
standard_layouts[SRC_DATA_COMMAND]->add_window ("src", 1);
|
||||
standard_layouts[SRC_DATA_COMMAND]->add_window ("locator", 0);
|
||||
standard_layouts[SRC_DATA_COMMAND]->add_window ("cmd", 1);
|
||||
|
||||
standard_layouts[DISASSEM_DATA_COMMAND] = new tui_layout_split ();
|
||||
standard_layouts[DISASSEM_DATA_COMMAND]->add_window ("regs", 1);
|
||||
standard_layouts[DISASSEM_DATA_COMMAND]->add_window ("asm", 1);
|
||||
standard_layouts[DISASSEM_DATA_COMMAND]->add_window ("locator", 0);
|
||||
standard_layouts[DISASSEM_DATA_COMMAND]->add_window ("cmd", 1);
|
||||
|
||||
standard_layouts[SRC_DISASSEM_COMMAND] = new tui_layout_split ();
|
||||
standard_layouts[SRC_DISASSEM_COMMAND]->add_window ("src", 1);
|
||||
standard_layouts[SRC_DISASSEM_COMMAND]->add_window ("asm", 1);
|
||||
standard_layouts[SRC_DISASSEM_COMMAND]->add_window ("locator", 0);
|
||||
standard_layouts[SRC_DISASSEM_COMMAND]->add_window ("cmd", 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Function to initialize gdb commands, for tui window layout
|
||||
@ -925,4 +805,6 @@ Layout names are:\n\
|
||||
the register window is displayed with \n\
|
||||
the window that has current logical focus."));
|
||||
set_cmd_completer (cmd, layout_completer);
|
||||
|
||||
initialize_layouts ();
|
||||
}
|
||||
|
@ -174,4 +174,7 @@ private:
|
||||
extern void tui_add_win_to_layout (enum tui_win_type);
|
||||
extern void tui_set_layout (enum tui_layout_type);
|
||||
|
||||
/* Apply the current layout. */
|
||||
extern void tui_apply_current_layout ();
|
||||
|
||||
#endif /* TUI_TUI_LAYOUT_H */
|
||||
|
Loading…
Reference in New Issue
Block a user