aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-10-09 16:35:41 -0600
committerTom Tromey <tom@tromey.com>2019-12-11 15:49:02 -0700
commit2192a9d3b31a595eb7add928221d49334f32c06d (patch)
treee021f263f4a25a20c885a674e6f03a92306dba0b /gdb/tui
parent389e7ddbc2b08bd5cac8c8f44a03e93609fd43d1 (diff)
downloadgdb-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.c216
-rw-r--r--gdb/tui/tui-layout.h3
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 */