diff options
author | Tom Tromey <tom@tromey.com> | 2019-10-09 16:35:41 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-12-11 15:49:02 -0700 |
commit | 2192a9d3b31a595eb7add928221d49334f32c06d (patch) | |
tree | e021f263f4a25a20c885a674e6f03a92306dba0b /gdb/tui | |
parent | 389e7ddbc2b08bd5cac8c8f44a03e93609fd43d1 (diff) | |
download | gdb-2192a9d3b31a595eb7add928221d49334f32c06d.zip gdb-2192a9d3b31a595eb7add928221d49334f32c06d.tar.gz gdb-2192a9d3b31a595eb7add928221d49334f32c06d.tar.bz2 |
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
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-layout.c | 216 | ||||
-rw-r--r-- | gdb/tui/tui-layout.h | 3 |
2 files changed, 52 insertions, 167 deletions
diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index 91f270d..1884c2a 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -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 (); } diff --git a/gdb/tui/tui-layout.h b/gdb/tui/tui-layout.h index d7f0731..a9346ef 100644 --- a/gdb/tui/tui-layout.h +++ b/gdb/tui/tui-layout.h @@ -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 */ |