1 /****************************************************************************\ 2 * sview.h - definitions used for sview data functions 3 ***************************************************************************** 4 * Copyright (C) 2004 The Regents of the University of California. 5 * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). 6 * Written by Danny Auble <da@llnl.gov> 7 * CODE-OCEC-09-009. All rights reserved. 8 * 9 * This file is part of Slurm, a resource management program. 10 * For details, see <https://slurm.schedmd.com/>. 11 * Please also read the included file: DISCLAIMER. 12 * 13 * Slurm is free software; you can redistribute it and/or modify it under 14 * the terms of the GNU General Public License as published by the Free 15 * Software Foundation; either version 2 of the License, or (at your option) 16 * any later version. 17 * 18 * Slurm is distributed in the hope that it will be useful, but WITHOUT ANY 19 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 20 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 21 * details. 22 * 23 * You should have received a copy of the GNU General Public License along 24 * with Slurm; if not, write to the Free Software Foundation, Inc., 25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 26 \****************************************************************************/ 27 28 #ifndef _SVIEW_H 29 #define _SVIEW_H 30 31 #include "config.h" 32 33 #define _GNU_SOURCE 34 35 #include <ctype.h> 36 #include <inttypes.h> 37 #include <getopt.h> 38 #include <pwd.h> 39 #include <stdio.h> 40 #include <stdlib.h> 41 #include <string.h> 42 #include <sys/stat.h> 43 #include <sys/types.h> 44 #include <unistd.h> 45 46 #include "slurm/slurmdb.h" 47 48 #include "src/common/assoc_mgr.h" 49 #include "src/common/bitstring.h" 50 #include "src/common/hostlist.h" 51 #include "src/common/list.h" 52 #include "src/common/macros.h" 53 #include "src/common/node_select.h" 54 #include "src/common/parse_time.h" 55 #include "src/common/slurmdb_defs.h" 56 #include "src/common/slurm_protocol_api.h" 57 #include "src/common/slurm_protocol_defs.h" 58 #include "src/common/strlcpy.h" 59 #include "src/common/uid.h" 60 #include "src/common/xstring.h" 61 62 #include "gthread_helper.h" 63 64 /* getopt_long options, integers but not characters */ 65 #define OPT_LONG_HELP 0x100 66 #define OPT_LONG_USAGE 0x101 67 #define OPT_LONG_HIDE 0x102 68 69 #define POS_LOC 0 70 #define DEFAULT_ENTRY_LENGTH 500 71 72 #define MAKE_TOPO_1 -6 73 #define MAKE_TOPO_2 -5 74 #define MAKE_INIT -4 75 #define MAKE_DOWN -3 76 #define MAKE_BLACK -2 77 #define MAKE_WHITE -1 78 79 #define EXTRA_BASE 0x0000ffff 80 #define EXTRA_FLAGS 0xffff0000 81 #define EXTRA_NODES 0x00010000 82 83 enum { JOB_PAGE, 84 PART_PAGE, 85 RESV_PAGE, 86 BB_PAGE, 87 NODE_PAGE, 88 FRONT_END_PAGE, 89 SUBMIT_PAGE, 90 ADMIN_PAGE, 91 INFO_PAGE, 92 TAB_PAGE, 93 PAGE_CNT 94 }; 95 enum { TAB_CLICKED, 96 ROW_LEFT_CLICKED, 97 ROW_CLICKED, 98 FULL_CLICKED, 99 POPUP_CLICKED 100 }; 101 102 enum { ERROR_VIEW, 103 INFO_VIEW 104 }; 105 106 enum { STATUS_ADMIN_MODE, 107 STATUS_REFRESH, 108 STATUS_ADMIN_EDIT 109 }; 110 111 enum { DISPLAY_NAME, 112 DISPLAY_VALUE, 113 DISPLAY_FONT 114 }; 115 116 enum { EDIT_NONE, 117 EDIT_ARRAY, 118 EDIT_MODEL, 119 EDIT_TEXTBOX, 120 EDIT_COLOR 121 }; 122 123 //typedef struct pages_options page_opts_t; 124 typedef struct display_data display_data_t; 125 typedef struct specific_info specific_info_t; 126 typedef struct popup_info popup_info_t; 127 typedef struct popup_positioner popup_positioner_t; 128 129 typedef enum { 130 CREATE_BATCH_JOB = 1, 131 CREATE_PARTITION, 132 CREATE_RESERVATION, 133 SEARCH_JOB_ID = 10, 134 SEARCH_JOB_USER, 135 SEARCH_JOB_STATE, 136 SEARCH_PARTITION_NAME, 137 SEARCH_PARTITION_STATE, 138 SEARCH_NODE_NAME, 139 SEARCH_NODE_STATE, 140 SEARCH_RESERVATION_NAME, 141 } sview_search_type_t; 142 143 typedef struct { 144 uint32_t x; 145 uint32_t y; 146 int cntr; 147 int slider; 148 } popup_pos_t; 149 150 typedef struct { 151 char *nodes; 152 bitstr_t *node_bitmap; 153 } switch_record_bitmaps_t; 154 155 typedef struct { 156 List col_list; 157 bool def_col_list; 158 display_data_t *display_data; 159 char *page_name; 160 } page_opts_t; 161 162 /* Input parameters */ 163 typedef struct { 164 GtkToggleAction *action_admin; 165 GtkToggleAction *action_grid; 166 GtkToggleAction *action_hidden; 167 GtkToggleAction *action_page_opts; 168 GtkToggleAction *action_gridtopo; 169 GtkToggleAction *action_ruled; 170 GtkRadioAction *action_tab; 171 uint16_t button_size; 172 uint16_t gap_size; 173 bool admin_mode; 174 uint16_t default_page; 175 uint32_t fi_popup_width; 176 uint32_t fi_popup_height; 177 uint32_t grid_hori; 178 bool grid_topological; 179 uint32_t grid_vert; 180 uint32_t grid_x_width; 181 uint32_t main_width; 182 uint32_t main_height; 183 GtkWidget *page_check_widget[PAGE_CNT]; 184 page_opts_t page_opts[PAGE_CNT]; 185 bool page_visible[PAGE_CNT]; 186 uint16_t refresh_delay; 187 bool ruled_treeview; 188 bool show_grid; 189 bool show_hidden; 190 bool save_page_opts; 191 uint16_t tab_pos; 192 uint32_t convert_flags; 193 } sview_config_t; 194 195 struct display_data { 196 GType type; 197 int id; 198 char *name; 199 bool show; 200 uint32_t extra; 201 void (*refresh) (GtkAction *action, gpointer user_data); 202 GtkListStore *(*create_model)(int type); 203 void (*admin_edit) (GtkCellRendererText *cell, 204 const char *path_string, 205 const char *new_text, 206 gpointer data); 207 void (*get_info) (GtkTable *table, display_data_t *display_data); 208 void (*specific) (popup_info_t *popup_win); 209 void (*set_menu) (void *arg, void *arg2, 210 GtkTreePath *path, int type); 211 gpointer user_data; 212 gpointer button_list; 213 }; 214 215 struct popup_positioner { 216 int id; 217 char *name; 218 uint32_t width; 219 uint32_t height; 220 }; 221 222 typedef struct { 223 sview_search_type_t search_type; 224 gchar *cluster_name; 225 gchar *gchar_data; 226 int int_data; 227 int int_data2; 228 } sview_search_info_t; 229 230 struct specific_info { 231 int type; /* calling window type */ 232 int view; 233 sview_search_info_t *search_info; 234 char *title; 235 GtkWidget *display_widget; 236 }; 237 238 struct popup_info { 239 display_data_t *display_data; 240 GtkWidget *event_box; 241 int force_refresh; 242 int full_grid; 243 List grid_button_list; 244 List multi_button_list; 245 GtkTable *grid_table; 246 GtkTreeIter iter; 247 GtkTreeModel *model; 248 int *node_inx; 249 int node_inx_id; 250 bool not_found; 251 GtkWidget *popup; 252 int *running; 253 int show_grid; 254 specific_info_t *spec_info; 255 GtkTable *table; 256 int toggled; 257 int type; /* window type */ 258 }; 259 260 typedef struct { 261 GtkWidget *button; 262 List button_list; /*list this grid_button exists in does not 263 * need to be freed, should only be a 264 * pointer to an existing list */ 265 char *color; 266 int color_inx; 267 int inx; 268 GtkStateType last_state; 269 char *node_name; 270 uint32_t state; 271 GtkTable *table; 272 int table_x; 273 int table_y; 274 #ifndef GTK2_USE_TOOLTIP 275 GtkTooltips *tip; 276 #endif 277 bool used; 278 } grid_button_t; 279 280 typedef struct { 281 char *boot_time; 282 char *color; 283 GtkTreeIter iter_ptr; 284 bool iter_set; 285 char *node_name; 286 node_info_t *node_ptr; 287 int pos; 288 char *reason; 289 char *rack_mp; 290 char *slurmd_start_time; 291 } sview_node_info_t; 292 293 typedef struct { 294 display_data_t *display_data; 295 List *button_list; 296 } signal_params_t; 297 298 extern sview_config_t default_sview_config; 299 extern sview_config_t working_sview_config; 300 301 extern int fini; 302 extern bool toggled; 303 extern bool force_refresh; 304 extern bool apply_hidden_change; 305 extern bool apply_partition_check; 306 extern List popup_list; 307 extern List grid_button_list; 308 extern List multi_button_list; 309 extern List signal_params_list; 310 extern bool global_entry_changed; 311 extern bool global_send_update_msg; 312 extern bool global_edit_error; 313 extern bool global_multi_error; 314 extern int global_error_code; 315 extern gchar *global_edit_error_msg; 316 extern GtkWidget *main_notebook; 317 extern GtkWidget *main_statusbar; 318 extern GtkWidget *main_window; 319 extern GtkTable *main_grid_table; 320 extern GMutex *sview_mutex; 321 extern int global_row_count; 322 extern gint last_event_x; 323 extern gint last_event_y; 324 extern GdkCursor* in_process_cursor; 325 extern char *sview_colors[]; 326 extern int sview_colors_cnt; 327 extern int cluster_dims; 328 extern uint32_t cluster_flags; 329 extern List cluster_list; 330 extern char *orig_cluster_name; 331 extern front_end_info_msg_t *g_front_end_info_ptr; 332 extern job_info_msg_t *g_job_info_ptr; 333 extern node_info_msg_t *g_node_info_ptr; 334 extern partition_info_msg_t *g_part_info_ptr; 335 extern reserve_info_msg_t *g_resv_info_ptr; 336 extern burst_buffer_info_msg_t *g_bb_info_ptr; 337 extern slurm_ctl_conf_info_msg_t *g_ctl_info_ptr; 338 extern job_step_info_response_msg_t *g_step_info_ptr; 339 extern topo_info_response_msg_t *g_topo_info_msg_ptr; 340 extern switch_record_bitmaps_t *g_switch_nodes_maps; 341 extern popup_positioner_t main_popup_positioner[]; 342 extern popup_pos_t popup_pos; 343 extern char *federation_name; 344 345 extern void init_grid(node_info_msg_t *node_info_ptr); 346 extern int set_grid(int start, int end, int count); 347 extern int set_grid_bg(int *start, int *end, int count, int set); 348 extern void print_grid(int dir); 349 350 //sview.c 351 extern void refresh_main(GtkAction *action, gpointer user_data); 352 extern void toggle_tab_visiblity(GtkToggleButton *toggle_button, 353 display_data_t *display_data); 354 extern gboolean tab_pressed(GtkWidget *widget, GdkEventButton *event, 355 display_data_t *display_data); 356 extern void close_tab(GtkWidget *widget, GdkEventButton *event, 357 display_data_t *display_data); 358 359 //popups.c 360 extern void create_config_popup(GtkAction *action, gpointer user_data); 361 extern void create_create_popup(GtkAction *action, gpointer user_data); 362 extern void create_dbconfig_popup(GtkAction *action, gpointer user_data); 363 extern void create_daemon_popup(GtkAction *action, gpointer user_data); 364 extern void create_search_popup(GtkAction *action, gpointer user_data); 365 extern void change_refresh_popup(GtkAction *action, gpointer user_data); 366 extern void change_grid_popup(GtkAction *action, gpointer user_data); 367 extern void about_popup(GtkAction *action, gpointer user_data); 368 extern void usage_popup(GtkAction *action, gpointer user_data); 369 extern void display_fed_disabled_popup(const char *title); 370 371 //grid.c 372 extern void destroy_grid_button(void *arg); 373 extern grid_button_t *create_grid_button_from_another( 374 grid_button_t *grid_button, char *name, int color_inx); 375 /* do not free the char * from this function it is static */ 376 extern void change_grid_color(List button_list, int start, int end, 377 int color_inx, bool change_unused, 378 enum node_states state_override); 379 extern void change_grid_color_array(List button_list, int array_len, 380 int *color_inx, bool *color_set_flag, 381 bool only_change_unused, 382 enum node_states state_override); 383 extern void highlight_grid(GtkTreeView *tree_view, 384 int node_inx_id, int color_inx_id, List button_list); 385 extern void highlight_grid_range(int start, int end, List button_list); 386 extern void set_grid_used(List button_list, int start, int end, 387 bool used, bool reset_highlight); 388 extern void get_button_list_from_main(List *button_list, int start, int end, 389 int color_inx); 390 extern List copy_main_button_list(int initial_color); 391 extern void put_buttons_in_table(GtkTable *table, List button_list); 392 extern int get_system_stats(GtkTable *table); 393 extern int setup_grid_table(GtkTable *table, List button_list, List node_list); 394 extern void sview_init_grid(bool reset_highlight); 395 extern void sview_clear_unused_grid(List button_list, int color_inx); 396 extern void setup_popup_grid_list(popup_info_t *popup_win); 397 extern void post_setup_popup_grid_list(popup_info_t *popup_win); 398 399 // part_info.c 400 extern GtkWidget *create_part_entry(update_part_msg_t *part_msg, 401 GtkTreeModel *model, GtkTreeIter *iter); 402 extern bool check_part_includes_node(int node_dx); 403 extern void refresh_part(GtkAction *action, gpointer user_data); 404 extern GtkListStore *create_model_part(int type); 405 extern void admin_edit_part(GtkCellRendererText *cell, 406 const char *path_string, 407 const char *new_text, 408 gpointer data); 409 extern int get_new_info_part(partition_info_msg_t **part_ptr, int force); 410 extern void get_info_part(GtkTable *table, display_data_t *display_data); 411 extern void specific_info_part(popup_info_t *popup_win); 412 extern void set_menus_part(void *arg, void *arg2, GtkTreePath *path, int type); 413 extern void popup_all_part(GtkTreeModel *model, GtkTreeIter *iter, int id); 414 extern void select_admin_partitions(GtkTreeModel *model, GtkTreeIter *iter, 415 display_data_t *display_data, 416 GtkTreeView *treeview); 417 extern void admin_part(GtkTreeModel *model, GtkTreeIter *iter, char *type); 418 extern void cluster_change_part(void); 419 420 // accnt_info.c 421 extern void refresh_accnt(GtkAction *action, gpointer user_data); 422 extern GtkListStore *create_model_accnt(int type); 423 extern void admin_edit_accnt(GtkCellRendererText *cell, 424 const char *path_string, 425 const char *new_text, 426 gpointer data); 427 extern void specific_info_accnt(popup_info_t *popup_win); 428 429 // front_end_info.c 430 extern void admin_edit_front_end(GtkCellRendererText *cell, 431 const char *path_string, 432 const char *new_text, gpointer data); 433 extern void cluster_change_front_end(void); 434 extern GtkListStore *create_model_front_end(int type); 435 extern void get_info_front_end(GtkTable *table, display_data_t *display_data); 436 extern int get_new_info_front_end(front_end_info_msg_t **info_ptr, int force); 437 extern void popup_all_front_end(GtkTreeModel *model, GtkTreeIter *iter, int id); 438 extern void refresh_front_end(GtkAction *action, gpointer user_data); 439 extern void select_admin_front_end(GtkTreeModel *model, GtkTreeIter *iter, 440 display_data_t *display_data, 441 GtkTreeView *treeview); 442 extern void set_menus_front_end(void *arg, void *arg2, GtkTreePath *path, 443 int type); 444 extern void specific_info_front_end(popup_info_t *popup_win); 445 446 // job_info.c 447 extern GtkWidget *create_job_entry(job_desc_msg_t *job_msg, 448 GtkTreeModel *model, GtkTreeIter *iter); 449 extern void refresh_job(GtkAction *action, gpointer user_data); 450 extern GtkListStore *create_model_job(int type); 451 extern void admin_edit_job(GtkCellRendererText *cell, 452 const char *path_string, 453 const char *new_text, 454 gpointer data); 455 extern int get_new_info_job(job_info_msg_t **info_ptr, int force); 456 extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr, 457 int force); 458 extern void get_info_job(GtkTable *table, display_data_t *display_data); 459 extern void specific_info_job(popup_info_t *popup_win); 460 extern void set_menus_job(void *arg, void *arg2, GtkTreePath *path, int type); 461 extern void popup_all_job(GtkTreeModel *model, GtkTreeIter *iter, int id); 462 extern void admin_job(GtkTreeModel *model, GtkTreeIter *iter, char *type, 463 GtkTreeView *treeview); 464 extern void cluster_change_job(void); 465 466 // node_info.c 467 extern void refresh_node(GtkAction *action, gpointer user_data); 468 /* don't destroy the list from this function */ 469 extern List create_node_info_list(node_info_msg_t *node_info_ptr, 470 bool by_partition); 471 extern int update_active_features_node(GtkDialog *dialog, const char *nodelist, 472 const char *old_features); 473 extern int update_avail_features_node(GtkDialog *dialog, const char *nodelist, 474 const char *old_features); 475 extern int update_state_node(GtkDialog *dialog, 476 const char *nodelist, const char *type); 477 extern GtkListStore *create_model_node(int type); 478 extern void select_admin_nodes(GtkTreeModel *model, GtkTreeIter *iter, 479 display_data_t *display_data, uint32_t node_col, 480 GtkTreeView *treeview); 481 extern void admin_edit_node(GtkCellRendererText *cell, 482 const char *path_string, 483 const char *new_text, 484 gpointer data); 485 extern int get_new_info_node(node_info_msg_t **info_ptr, int force); 486 extern void get_info_node(GtkTable *table, display_data_t *display_data); 487 extern void specific_info_node(popup_info_t *popup_win); 488 extern void set_menus_node(void *arg, void *arg2, GtkTreePath *path, int type); 489 extern void popup_all_node(GtkTreeModel *model, GtkTreeIter *iter, int id); 490 extern void popup_all_node_name(char *name, int id, char *cluster_name); 491 extern void admin_menu_node_name(char *name, GdkEventButton *event); 492 extern void admin_node(GtkTreeModel *model, GtkTreeIter *iter, char *type); 493 extern void admin_node_name(char *name, char *old_value, char *type); 494 extern void cluster_change_node(void); 495 496 // resv_info.c 497 extern GtkWidget *create_resv_entry(resv_desc_msg_t *resv_msg, 498 GtkTreeModel *model, GtkTreeIter *iter); 499 extern void refresh_resv(GtkAction *action, gpointer user_data); 500 extern GtkListStore *create_model_resv(int type); 501 extern void admin_edit_resv(GtkCellRendererText *cell, 502 const char *path_string, 503 const char *new_text, 504 gpointer data); 505 extern int get_new_info_resv(reserve_info_msg_t **info_ptr, int force); 506 extern void get_info_resv(GtkTable *table, display_data_t *display_data); 507 extern void specific_info_resv(popup_info_t *popup_win); 508 extern void set_menus_resv(void *arg, void *arg2, GtkTreePath *path, int type); 509 extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id); 510 extern void select_admin_resv(GtkTreeModel *model, GtkTreeIter *iter, 511 display_data_t *display_data, 512 GtkTreeView *treeview); 513 extern void cluster_change_resv(void); 514 515 516 // submit_info.c 517 extern void get_info_submit(GtkTable *table, display_data_t *display_data); 518 extern void set_menus_submit(void *arg, void *arg2, 519 GtkTreePath *path, int type); 520 521 // config_info.c 522 extern int get_new_info_config(slurm_ctl_conf_info_msg_t **info_ptr); 523 524 // common.c 525 extern char * replspace (char *str); 526 extern char * replus (char *str); 527 extern void set_page_opts(int tab, display_data_t *display_data, 528 int count, char* initial_opts); 529 extern void free_switch_nodes_maps(switch_record_bitmaps_t 530 *g_switch_nodes_maps); 531 extern int get_topo_conf(void); 532 extern int get_row_number(GtkTreeView *tree_view, GtkTreePath *path); 533 extern int find_col(display_data_t *display_data, int type); 534 extern const char *find_col_name(display_data_t *display_data, int type); 535 extern void load_header(GtkTreeView *tree_view, display_data_t *display_data); 536 extern void make_fields_menu(popup_info_t *popup_win, GtkMenu *menu, 537 display_data_t *display_data, int count); 538 extern void make_options_menu(GtkTreeView *tree_view, GtkTreePath *path, 539 GtkMenu *menu, display_data_t *display_data); 540 extern GtkScrolledWindow *create_scrolled_window(void); 541 extern GtkWidget *create_entry(void); 542 extern void create_page(GtkNotebook *notebook, display_data_t *display_data); 543 extern GtkTreeView *create_treeview(display_data_t *local, List *button_list); 544 extern GtkTreeView *create_treeview_2cols_attach_to_table(GtkTable *table); 545 extern GtkTreeStore *create_treestore(GtkTreeView *tree_view, 546 display_data_t *display_data, 547 int count, int sort_column, 548 int color_column); 549 550 extern gboolean right_button_pressed(GtkTreeView *tree_view, GtkTreePath *path, 551 GdkEventButton *event, 552 const signal_params_t *signal_params, 553 int type); 554 extern gboolean left_button_pressed(GtkTreeView *tree_view, 555 GtkTreePath *path, 556 const signal_params_t *signal_params, 557 GdkEventButton *event); 558 extern gboolean row_activated(GtkTreeView *tree_view, GtkTreePath *path, 559 GtkTreeViewColumn *column, 560 const signal_params_t *signal_params); 561 extern gboolean row_expander(GtkTreeView *tree_view, 562 gboolean arg1, gboolean arg2, 563 const signal_params_t *signal_params); 564 extern gboolean row_expand(GtkTreeView *tree_view, GtkTreeIter *iter, 565 GtkTreePath *path, 566 const signal_params_t *signal_params); 567 extern gboolean row_clicked(GtkTreeView *tree_view, GdkEventButton *event, 568 const signal_params_t *signal_params); 569 extern gboolean key_pressed(GtkTreeView *tree_view, GdkEventKey *event, 570 const signal_params_t *signal_params); 571 extern gboolean focus_in(GtkTreeView *tree_view, GdkEventButton *event, 572 const signal_params_t *signal_params); 573 extern gboolean key_released(GtkTreeView *tree_view, GdkEventKey *event, 574 const signal_params_t *signal_params); 575 extern popup_info_t *create_popup_info(int type, int dest_type, char *title); 576 extern void setup_popup_info(popup_info_t *popup_win, 577 display_data_t *display_data, 578 int cnt); 579 extern void redo_popup(GtkWidget *widget, GdkEventButton *event, 580 popup_info_t *popup_win); 581 582 extern void destroy_search_info(void *arg); 583 extern void destroy_specific_info(void *arg); 584 extern void destroy_popup_info(void *arg); 585 extern void destroy_signal_params(void *arg); 586 587 extern gboolean delete_popup(GtkWidget *widget, GtkWidget *event, char *title); 588 extern gboolean delete_popups(void); 589 extern void *popup_thr(popup_info_t *popup_win); 590 extern void set_for_update(GtkTreeModel *model, int updated); 591 extern void remove_old(GtkTreeModel *model, int updated); 592 extern GtkWidget *create_pulldown_combo(display_data_t *display_data); 593 extern char *str_tolower(char *upper_str); 594 extern char *get_reason(void); 595 extern void display_admin_edit(GtkTable *table, void *type_msg, int *row, 596 GtkTreeModel *model, GtkTreeIter *iter, 597 display_data_t *display_data, 598 GCallback changed_callback, 599 GCallback focus_callback, 600 void (*set_active)( 601 GtkComboBox *combo, 602 GtkTreeModel *model, GtkTreeIter *iter, 603 int type)); 604 extern void display_edit_note(char *edit_note); 605 extern void add_display_treestore_line(int update, 606 GtkTreeStore *treestore, 607 GtkTreeIter *iter, 608 const char *name, 609 const char *value); 610 extern void add_display_treestore_line_with_font( 611 int update, 612 GtkTreeStore *treestore, 613 GtkTreeIter *iter, 614 const char *name, char *value, 615 char *font); 616 extern void sview_widget_modify_bg(GtkWidget *widget, GtkStateType state, 617 const GdkColor color); 618 extern void sview_radio_action_set_current_value(GtkRadioAction *action, 619 gint current_value); 620 extern char *page_to_str(int page); 621 extern char *tab_pos_to_str(int tab_pos); 622 extern char *visible_to_str(sview_config_t *sview_config); 623 extern gboolean entry_changed(GtkWidget *widget, void *msg); 624 extern void select_admin_common(GtkTreeModel *model, GtkTreeIter *iter, 625 display_data_t *display_data, 626 GtkTreeView *treeview, 627 uint32_t node_col, 628 void (*process_each)(GtkTreeModel *model, 629 GtkTreePath *path, 630 GtkTreeIter *iter, 631 gpointer userdata)); 632 633 // defaults.c 634 extern int load_defaults(void); 635 extern int save_defaults(bool final_save); 636 extern GtkListStore *create_model_defaults(int type); 637 extern int configure_defaults(void); 638 639 //bb_info.c 640 extern void refresh_bb(GtkAction *action, gpointer user_data); 641 extern GtkListStore *create_model_bb(int type); 642 extern void admin_edit_bb(GtkCellRendererText *cell, 643 const char *path_string, 644 const char *new_text, 645 gpointer data); 646 extern void get_info_bb(GtkTable *table, display_data_t *display_data); 647 extern void specific_info_bb(popup_info_t *popup_win); 648 extern void set_menus_bb(void *arg, void *arg2, GtkTreePath *path, int type); 649 extern void cluster_change_bb(void); 650 extern void popup_all_bb(GtkTreeModel *model, GtkTreeIter *iter, int id); 651 extern void select_admin_bb(GtkTreeModel *model, GtkTreeIter *iter, 652 display_data_t *display_data, 653 GtkTreeView *treeview); 654 655 #endif 656