Introduce tui_data_window::display_all_data method
[deliverable/binutils-gdb.git] / gdb / tui / tui-windata.c
CommitLineData
f377b406 1/* Data/register window display.
f33c6cbf 2
42a4f53d 3 Copyright (C) 1998-2019 Free Software Foundation, Inc.
f33c6cbf 4
f377b406
SC
5 Contributed by Hewlett-Packard Company.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
f377b406
SC
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 21
96ec9981 22#include "defs.h"
d7b2e967
AC
23#include "tui/tui.h"
24#include "tui/tui-data.h"
25#include "tui/tui-wingeneral.h"
26#include "tui/tui-regs.h"
2c0b251b 27#include "tui/tui-windata.h"
6a83354a 28#include "gdb_curses.h"
4e8f7a8b 29
c906108c
SS
30
31/*****************************************
32** STATIC LOCAL FUNCTIONS FORWARD DECLS **
33******************************************/
34
35
36
37/*****************************************
38** PUBLIC FUNCTIONS **
39******************************************/
40
41
6ba8e26f
AC
42/* Answer the index first element displayed. If none are displayed,
43 then return (-1). */
c906108c 44int
eaf9738b 45tui_data_window::first_data_item_displayed ()
c906108c 46{
21e1c91e 47 for (int i = 0; i < regs_content.size (); i++)
c906108c 48 {
5b6fe301 49 struct tui_gen_win_info *data_item_win;
c906108c 50
21e1c91e 51 data_item_win = regs_content[i].get ();
eaf9738b
TT
52 if (data_item_win->handle != NULL && data_item_win->is_visible)
53 return i;
c906108c
SS
54 }
55
eaf9738b 56 return -1;
6ba8e26f 57}
c906108c
SS
58
59
6ba8e26f
AC
60/* Function to delete all the item windows in the data window. This
61 is usually done when the data window is scrolled. */
c906108c 62void
6ba8e26f 63tui_delete_data_content_windows (void)
c906108c 64{
21e1c91e 65 for (auto &&win : TUI_DATA_WIN->regs_content)
c906108c 66 {
21e1c91e
TT
67 tui_delete_win (win->handle);
68 win->handle = NULL;
69 win->is_visible = false;
c906108c 70 }
6ba8e26f 71}
c906108c
SS
72
73
74void
a121b7c1 75tui_erase_data_content (const char *prompt)
c906108c 76{
cb2ce893 77 werase (TUI_DATA_WIN->handle);
6d012f14 78 tui_check_and_display_highlight_if_needed (TUI_DATA_WIN);
63a33118 79 if (prompt != NULL)
c906108c 80 {
cb2ce893 81 int half_width = (TUI_DATA_WIN->width - 2) / 2;
6ba8e26f 82 int x_pos;
c906108c 83
6ba8e26f
AC
84 if (strlen (prompt) >= half_width)
85 x_pos = 1;
c906108c 86 else
6ba8e26f 87 x_pos = half_width - strlen (prompt);
cb2ce893
TT
88 mvwaddstr (TUI_DATA_WIN->handle,
89 (TUI_DATA_WIN->height / 2),
6ba8e26f 90 x_pos,
7a6e7fcc 91 (char *) prompt);
c906108c 92 }
cb2ce893 93 wrefresh (TUI_DATA_WIN->handle);
edae1ccf 94}
c906108c 95
50daf268 96/* See tui-data.h. */
c906108c 97
c906108c 98void
50daf268 99tui_data_window::display_all_data ()
c906108c 100{
50daf268 101 if (regs_content.empty ())
edae1ccf 102 tui_erase_data_content (NO_DATA_STRING);
c906108c
SS
103 else
104 {
63a33118 105 tui_erase_data_content (NULL);
6ba8e26f 106 tui_delete_data_content_windows ();
50daf268 107 tui_check_and_display_highlight_if_needed (this);
55fb0713 108 tui_display_registers_from (0);
c906108c 109 }
edae1ccf 110}
c906108c
SS
111
112
edae1ccf 113/* Function to redisplay the contents of the data window. */
c906108c 114void
1825f487 115tui_data_window::refresh_all ()
c906108c 116{
63a33118 117 tui_erase_data_content (NULL);
21e1c91e 118 if (!regs_content.empty ())
c906108c 119 {
eaf9738b 120 int first_element = first_data_item_displayed ();
c906108c 121
1cc6d956 122 if (first_element >= 0) /* Re-use existing windows. */
df5f8cab
TT
123 {
124 int first_line = (-1);
125
126 if (first_element < regs_content.size ())
127 first_line = line_from_reg_element_no (first_element);
128
129 if (first_line >= 0)
130 {
131 tui_erase_data_content (NULL);
132 tui_display_registers_from_line (first_line);
133 }
134 }
c906108c 135 }
edae1ccf 136}
c906108c
SS
137
138
1cc6d956 139/* Scroll the data window vertically forward or backward. */
c906108c 140void
c3bd716f 141tui_data_window::do_scroll_vertical (int num_to_scroll)
c906108c 142{
6ba8e26f
AC
143 int first_element_no;
144 int first_line = (-1);
c906108c 145
eaf9738b 146 first_element_no = first_data_item_displayed ();
21e1c91e 147 if (first_element_no < regs_content.size ())
3b23c5f2 148 first_line = line_from_reg_element_no (first_element_no);
c906108c 149 else
1cc6d956
MS
150 { /* Calculate the first line from the element number which is in
151 the general data content. */
c906108c
SS
152 }
153
6ba8e26f 154 if (first_line >= 0)
c906108c 155 {
c3bd716f 156 first_line += num_to_scroll;
63a33118 157 tui_erase_data_content (NULL);
6ba8e26f 158 tui_delete_data_content_windows ();
80cb6c27 159 tui_display_registers_from_line (first_line);
c906108c 160 }
6ba8e26f 161}
c906108c
SS
162
163
164/*****************************************
165** STATIC LOCAL FUNCTIONS **
166******************************************/
This page took 2.400714 seconds and 4 git commands to generate.