GDB (xrefs)
tui-windata.c
Go to the documentation of this file.
1 /* Data/register window display.
2 
3  Copyright (C) 1998-2015 Free Software Foundation, Inc.
4 
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
11  the Free Software Foundation; either version 3 of the License, or
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
20  along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 
22 #include "defs.h"
23 #include "tui/tui.h"
24 #include "tui/tui-data.h"
25 #include "tui/tui-wingeneral.h"
26 #include "tui/tui-regs.h"
27 #include "tui/tui-windata.h"
28 #include "gdb_curses.h"
29 
30 
31 /*****************************************
32 ** STATIC LOCAL FUNCTIONS FORWARD DECLS **
33 ******************************************/
34 
35 
36 
37 /*****************************************
38 ** PUBLIC FUNCTIONS **
39 ******************************************/
40 
41 
42 /* Answer the index first element displayed. If none are displayed,
43  then return (-1). */
44 int
46 {
47  int element_no = (-1);
48  int i;
49 
50  for (i = 0;
51  i < TUI_DATA_WIN->generic.content_size && element_no < 0;
52  i++)
53  {
54  struct tui_gen_win_info *data_item_win;
55 
56  data_item_win = &((tui_win_content)
57  TUI_DATA_WIN->generic.content)[i]->which_element.data_window;
58  if (data_item_win->handle != (WINDOW *) NULL
59  && data_item_win->is_visible)
60  element_no = i;
61  }
62 
63  return element_no;
64 }
65 
66 
67 /* Answer the index of the first element in line_no. If line_no is
68  past the data area (-1) is returned. */
69 int
71 {
72  int first_element_no = (-1);
73 
74  /* First see if there is a register on line_no, and if so, set the
75  first element number. */
76  if ((first_element_no = tui_first_reg_element_no_inline (line_no)) == -1)
77  { /* Looking at the general data, the 1st element on line_no. */
78  }
79 
80  return first_element_no;
81 }
82 
83 
84 /* Function to delete all the item windows in the data window. This
85  is usually done when the data window is scrolled. */
86 void
88 {
89  int i;
90  struct tui_gen_win_info *data_item_win_ptr;
91 
92  for (i = 0; (i < TUI_DATA_WIN->generic.content_size); i++)
93  {
94  data_item_win_ptr = &((tui_win_content)
95  TUI_DATA_WIN->generic.content)[i]->which_element.data_window;
96  tui_delete_win (data_item_win_ptr->handle);
97  data_item_win_ptr->handle = (WINDOW *) NULL;
98  data_item_win_ptr->is_visible = FALSE;
99  }
100 }
101 
102 
103 void
105 {
106  werase (TUI_DATA_WIN->generic.handle);
108  if (prompt != (char *) NULL)
109  {
110  int half_width = (TUI_DATA_WIN->generic.width - 2) / 2;
111  int x_pos;
112 
113  if (strlen (prompt) >= half_width)
114  x_pos = 1;
115  else
116  x_pos = half_width - strlen (prompt);
117  mvwaddstr (TUI_DATA_WIN->generic.handle,
118  (TUI_DATA_WIN->generic.height / 2),
119  x_pos,
120  prompt);
121  }
122  wrefresh (TUI_DATA_WIN->generic.handle);
123 }
124 
125 
126 /* This function displays the data that is in the data window's
127  content. It does not set the content. */
128 void
130 {
131  if (TUI_DATA_WIN->generic.content_size <= 0)
133  else
134  {
135  tui_erase_data_content ((char *) NULL);
139 
140  /* Then display the other data. */
141  if (TUI_DATA_WIN->detail.data_display_info.data_content !=
142  (tui_win_content) NULL
143  && TUI_DATA_WIN->detail.data_display_info.data_content_count > 0)
144  {
145  }
146  }
147 }
148 
149 
150 /* Function to display the data starting at line, line_no, in the data
151  window. */
152 void
154 {
155  int _line_no = line_no;
156 
157  if (line_no < 0)
158  _line_no = 0;
159 
161 
162  /* There is no general data, force regs to display (if there are
163  any). */
164  if (TUI_DATA_WIN->detail.data_display_info.data_content_count <= 0)
165  tui_display_registers_from_line (_line_no, TRUE);
166  else
167  {
168  int regs_last_line = tui_last_regs_line_no ();
169 
170 
171  /* Display regs if we can. */
172  if (tui_display_registers_from_line (_line_no, FALSE) < 0)
173  { /* _line_no is past the regs display, so calc where the
174  start data element is. */
175  if (regs_last_line < _line_no)
176  { /* Figure out how many lines each element is to obtain
177  the start element_no. */
178  }
179  }
180  else
181  { /* Calculate the starting element of the data display, given
182  regs_last_line and how many lines each element is, up to
183  _line_no. */
184  }
185  /* Now display the data , starting at element_no. */
186  }
187 }
188 
189 
190 /* Display data starting at element element_no. */
191 void
192 tui_display_data_from (int element_no, int reuse_windows)
193 {
194  int first_line = (-1);
195 
196  if (element_no < TUI_DATA_WIN->detail.data_display_info.regs_content_count)
197  first_line = tui_line_from_reg_element_no (element_no);
198  else
199  { /* Calculate the first_line from the element number. */
200  }
201 
202  if (first_line >= 0)
203  {
204  tui_erase_data_content ((char *) NULL);
205  if (!reuse_windows)
207  tui_display_data_from_line (first_line);
208  }
209 }
210 
211 
212 /* Function to redisplay the contents of the data window. */
213 void
215 {
216  tui_erase_data_content ((char *) NULL);
217  if (TUI_DATA_WIN->generic.content_size > 0)
218  {
219  int first_element = tui_first_data_item_displayed ();
220 
221  if (first_element >= 0) /* Re-use existing windows. */
222  tui_display_data_from (first_element, TRUE);
223  }
224 }
225 
226 
227 /* Function to check the data values and hilite any that have
228  changed. */
229 void
231 {
233 
234  /* Now check any other data values that there are. */
235  if (TUI_DATA_WIN != NULL && TUI_DATA_WIN->generic.is_visible)
236  {
237  int i;
238 
239  for (i = 0;
240  TUI_DATA_WIN->detail.data_display_info.data_content_count;
241  i++)
242  {
243 #ifdef LATER
244  tui_data_element_ptr data_element_ptr;
245  struct tui_gen_win_info *data_item_win_ptr;
246  Opaque new_value;
247 
248  data_item_ptr = &TUI_DATA_WIN->detail.data_display_info.
249  data_content[i]->which_element.data_window;
250  data_element_ptr = &((tui_win_content)
251  data_item_win_ptr->content)[0]->which_element.data;
252  if value
253  has changed (data_element_ptr, frame, &new_value)
254  {
255  data_element_ptr->value = new_value;
256  update the display with the newobj value, hiliting it.
257  }
258 #endif
259  }
260  }
261 }
262 
263 
264 /* Scroll the data window vertically forward or backward. */
265 void
267  int num_to_scroll)
268 {
269  int first_element_no;
270  int first_line = (-1);
271 
272  first_element_no = tui_first_data_item_displayed ();
273  if (first_element_no
274  < TUI_DATA_WIN->detail.data_display_info.regs_content_count)
275  first_line = tui_line_from_reg_element_no (first_element_no);
276  else
277  { /* Calculate the first line from the element number which is in
278  the general data content. */
279  }
280 
281  if (first_line >= 0)
282  {
283  if (scroll_direction == FORWARD_SCROLL)
284  first_line += num_to_scroll;
285  else
286  first_line -= num_to_scroll;
287  tui_erase_data_content ((char *) NULL);
289  tui_display_data_from_line (first_line);
290  }
291 }
292 
293 
294 /*****************************************
295 ** STATIC LOCAL FUNCTIONS **
296 ******************************************/
void tui_delete_data_content_windows(void)
Definition: tui-windata.c:87
void tui_vertical_data_scroll(enum tui_scroll_direction scroll_direction, int num_to_scroll)
Definition: tui-windata.c:266
int tui_line_from_reg_element_no(int element_no)
Definition: tui-regs.c:91
tui_win_content content
Definition: tui-data.h:47
#define NO_DATA_STRING
Definition: tui-data.h:61
void tui_refresh_data_win(void)
Definition: tui-windata.c:214
int tui_display_registers_from_line(int line_no, int force_display)
Definition: tui-regs.c:443
WINDOW * handle
Definition: tui-data.h:42
void tui_delete_win(WINDOW *window)
void tui_erase_data_content(char *prompt)
Definition: tui-windata.c:104
int tui_first_data_item_displayed(void)
Definition: tui-windata.c:45
tui_scroll_direction
Definition: tui-data.h:96
void tui_display_registers_from(int start_element_no)
Definition: tui-regs.c:305
void tui_display_data_from_line(int line_no)
Definition: tui-windata.c:153
int tui_last_regs_line_no(void)
Definition: tui-regs.c:71
#define TUI_DATA_WIN
Definition: tui-data.h:302
Definition: value.c:172
void tui_display_data_from(int element_no, int reuse_windows)
Definition: tui-windata.c:192
void tui_check_data_values(struct frame_info *frame)
Definition: tui-windata.c:230
struct tui_win_element ** tui_win_content
Definition: tui-data.h:37
void tui_check_and_display_highlight_if_needed(struct tui_win_info *win_info)
void tui_display_all_data(void)
Definition: tui-windata.c:129
int tui_first_reg_element_no_inline(int line_no)
Definition: tui-regs.c:117
void tui_check_register_values(struct frame_info *frame)
Definition: tui-regs.c:486
int tui_first_data_element_no_in_line(int line_no)
Definition: tui-windata.c:70