/* XShipWars Client Widget Set */ #ifndef WIDGET_H #define WIDGET_H #include #include "os.h" #include "osw-x.h" /* * Color closeness for libXpm: */ #define WIDGET_XPM_DEF_COLOR_CLOSENESS 40000 /* Standard widget surface colors */ #define WIDGET_CLSP_SURFACE_NORMAL "rgbi:0.03/0.03/0.03" #define WIDGET_CLSP_SURFACE_SELECTED "rgbi:1.00/0.67/0.96" #define WIDGET_CLSP_SURFACE_SHADOW "rgbi:0.001/0.001/0.001" #define WIDGET_CLSP_SURFACE_HIGHLIGHT "rgbi:0.14/0.14/0.14" #define WIDGET_CLSP_SURFACE_EDITABLE "rgbi:0.00/0.00/0.00" /* Scroll Bar & Scale Bar colors */ #define WIDGET_CLSP_SBAR_BG "rgbi:0.00/0.00/0.00" #define WIDGET_CLSP_SBAR_FRAME "rgbi:0.80/0.10/0.80" #define WIDGET_CLSP_SBAR_SLIDER "rgbi:1.00/0.40/1.00" #define WIDGET_CLSP_SBAR_BUTTON "rgbi:1.00/0.40/1.00" /* Text colors */ #define WIDGET_CLSP_TEXT_NORMAL "rgbi:0.75/0.75/0.75" #define WIDGET_CLSP_TEXT_EDITABLE "rgbi:1.00/0.67/0.96" #define WIDGET_CLSP_TEXT_SELECTED "rgbi:0.00/0.00/0.00" #define WIDGET_CLSP_TEXT_DISABLED "rgbi:0.55/0.55/0.55" /* Tooltips colors */ #define WIDGET_CLSP_TOOLTIPS_BG "rgbi:1.00/1.00/0.75" #define WIDGET_CLSP_TOOLTIPS_FG "rgbi:0.00/0.00/0.00" #define WIDGET_CLSP_TOOLTIPS_TEXT "rgbi:0.00/0.00/0.00" /* Progress Bar colors */ #define WIDGET_CLSP_PBAR_TEXT "rgbi:1.00/0.70/0.85" /* * Default double click interval in milliseconds: */ #define WIDGET_DEF_DOUBLE_CLICK_INT 500 /* * Default hint window map delay in milliseconds: */ #define WIDGET_DEF_TOOLTIPS_MAP_INT 900 /* * Default slow double click for renaming list items (in ms): */ #define WIDGET_DEF_RENAME_CLICK_INT 1500 /* * Default Popup List scroll repeat interval (in ms): */ #define WIDGET_DEF_PULIST_SCROLL_REPEAT_INT 50 /* * Default Prompt scroll repeat interval (in ms): */ #define WIDGET_DEF_PROMPT_SCROLL_REPEAT_INT 50 /* * Default Scroll Bar repeat delay and interval (in ms): */ #define WIDGET_DEF_SBAR_SCROLL_REPEAT_DELAY 250 #define WIDGET_DEF_SBAR_SCROLL_REPEAT_INT 50 /* * Widget Types: */ #define WIDGET_TYPE_UNKNOWN 0 #define WIDGET_TYPE_CHECK_BUTTON 1 #define WIDGET_TYPE_CLIST 2 #define WIDGET_TYPE_DIALOG 3 #define WIDGET_TYPE_FILE_BROWSER 4 #define WIDGET_TYPE_LABEL 5 #define WIDGET_TYPE_LIST 6 #define WIDGET_TYPE_MENU 7 #define WIDGET_TYPE_MENU_BAR 8 #define WIDGET_TYPE_POPUP_LIST 9 #define WIDGET_TYPE_PROGRESS_BAR 10 #define WIDGET_TYPE_PROMPT 11 #define WIDGET_TYPE_PUSH_BUTTON 12 #define WIDGET_TYPE_RADIO 13 #define WIDGET_TYPE_SCALE_BAR 14 #define WIDGET_TYPE_SCROLL_BAR 15 #define WIDGET_TYPE_TOOLTIPS 16 #define WIDGET_TYPE_VIEWER 17 /* * Window Relativity: */ #define WIDGET_WINDOW_RELATIVE_PARENT 0 #define WIDGET_WINDOW_RELATIVE_ROOT 1 #define WIDGET_WINDOW_RELATIVE_POINTER 2 /* * Widget typedefs: */ typedef struct _WColorStruct WColorStruct; #define WCOLOR(p) ((WColorStruct *)(p)) typedef struct _WCursor WCursor; #define WCURSOR(p) ((WCursor *)(p)) typedef struct _widget_register_struct widget_register_struct; #define WIDGET_REGISTER(p) ((widget_register_struct *)(p)) typedef struct _wqaction_struct wqaction_struct; #define WQACTION(p) ((wqaction_struct *)(p)) typedef struct _widget_global_struct widget_global_struct; #define WIDGET_GLOBAL(p) ((widget_global_struct *)(p)) typedef struct _Widget widget_struct; #define WIDGET(p) ((widget_struct *)(p)) typedef struct _WTooltips tooltips_struct; #define TOOLTIPS(p) ((tooltips_struct *)(p)) typedef struct _WTooltipsData tooltips_data_struct; #define TOOLTIPS_DATA(p) ((tooltips_data_struct *)(p)) typedef struct _WCheckButton check_button_struct; #define CHECK_BUTTON(p) ((check_button_struct *)(p)) typedef struct _WCList clist_struct; #define CLIST(p) ((clist_struct *)(p)) typedef struct _WCListColumn clist_column_struct; #define CLIST_COLUMN(p) ((clist_column_struct *)(p)) typedef struct _WCListRow clist_row_struct; #define CLIST_ROW(p) ((clist_row_struct *)(p)) typedef struct _WCListItem clist_item_struct; #define CLIST_ITEM(p) ((clist_item_struct *)(p)) typedef struct _WDialog dialog_struct; #define DIALOG(p) ((dialog_struct *)(p)) typedef struct _WFileBrowser fb_struct; #define FB(p) ((fb_struct *)(p)) typedef struct _WFileBrowserObject fb_object_struct; #define FB_OBJECT(p) ((fb_object_struct *)(p)) typedef struct _WLabel label_struct; #define LABEL(p) ((label_struct *)(p)) typedef struct _WList list_struct; #define LIST(p) ((list_struct *)(p)) typedef struct _WListItem list_item_struct; #define LIST_ITEM(p) ((list_item_struct *)(p)) typedef struct _WMenu menu_struct; #define MENU(p) ((menu_struct *)(p)) typedef struct _WMenuItem menu_item_struct; #define MENU_ITEM(p) ((menu_item_struct *)(p)) typedef struct _WPopupList popup_list_struct; #define POPUP_LIST(p) ((popup_list_struct *)(p)) typedef struct _WPopupListItem popup_list_item_struct; #define POPUP_LIST_ITEM(p) ((popup_list_item_struct *)(p)) typedef struct _WProgressBar progress_bar_struct; #define PROGRESS_BAR(p) ((progress_bar_struct *)(p)) typedef struct _WPrompt prompt_struct; #define PROMPT(p) ((prompt_struct *)(p)) typedef struct _WPushButton push_button_struct; #define PUSH_BUTTON(p) ((push_button_struct *)(p)) typedef struct _WRadio radio_struct; #define RADIO(p) ((radio_struct *)(p)) typedef struct _WScaleBar scale_bar_struct; #define SCALE_BAR(p) ((scale_bar_struct *)(p)) typedef struct _WScrollBar scroll_bar_struct; #define SCROLL_BAR(p) ((scroll_bar_struct *)(p)) /* * Color: */ struct _WColorStruct { u_int8_t a, r, g, b; }; /* * Cursor: */ struct _WCursor { cursor_t cursor; int x, /* Hot point */ y; unsigned int width, height; depth_t depth; /* Always 1 bit */ WColorStruct color; /* Foreground color */ }; /* * Widget Register: */ struct _widget_register_struct { void *widget; int type; /* One of WIDGET_TYPE_* */ }; /* * Widget Queued Action: */ struct _wqaction_struct { void (*func)( void *, /* Widget */ void * /* Data */ ); void *widget; /* Shared */ void *data; /* Shared */ time_t timeout_interval, /* In milliseconds */ timeout_next; }; /* * Widget Set Core: * * These values are used by (almost) all widgets. * They include text color, selected text color, background pixmap * etc. * * These values are initialized by WidgetInitGlobals(); * And then cleaned up by WidgetDestroyGlobals(); */ struct _widget_global_struct { bool_t is_init; /* Is initialized */ /* Force black and white mode */ bool_t force_mono; /* Cursors */ WCursor *std_arrow_wcr, /* The standard arrow pointer */ *h_split_wcur, /* Horizontal split */ *v_split_wcur, /* Vertical split */ *text_wcur, *no_way_wcur; /* Circle with diagonal slash */ /* Fonts */ font_t *pbtn_font, *menu_font, *prompt_label_font, *prompt_text_font, *scale_bar_font, *std_font; /* The standard background pixmap (tiled) */ pixmap_t std_bkg_pm, std_icon_pm; /* For the icon pixmap in * XSetStandardProperties() */ /* Icons used in lists, dialogs and other places */ image_t *std_bkg_img, /* Standard background */ *menu_bar_bg_img, *menu_item_img, *menu_item_highlighted_img, *button_unarmed_img, *button_armed_img, *button_highlighted_img, *check_button_unarmed_img, *check_button_armed_img, *check_button_highlighted_img, *tab_unselected_img, *tab_selected_img, *scalebar_h_img, /* Scalebar handles */ *scalebar_v_img; pixmap_t pulist_map_pixmap; bitmap_t pulist_map_mask; pixmap_t parent_dir_pixmap; bitmap_t parent_dir_mask; pixmap_t home_dir_pixmap; bitmap_t home_dir_mask; pixmap_t refresh_pixmap; bitmap_t refresh_mask; pixmap_t browse_files_pixmap; bitmap_t browse_files_mask; /* 20x20 list icons */ pixmap_t icon_file_20x20_pixmap; bitmap_t icon_file_20x20_mask; pixmap_t icon_folder_closed_20x20_pixmap; bitmap_t icon_folder_closed_20x20_mask; pixmap_t icon_folder_opened_20x20_pixmap; bitmap_t icon_folder_opened_20x20_mask; pixmap_t icon_link_20x20_pixmap; bitmap_t icon_link_20x20_mask; pixmap_t icon_pipe_20x20_pixmap; bitmap_t icon_pipe_20x20_mask; pixmap_t icon_device_block_20x20_pixmap; bitmap_t icon_device_block_20x20_mask; pixmap_t icon_device_character_20x20_pixmap; bitmap_t icon_device_character_20x20_mask; pixmap_t icon_executable_20x20_pixmap; bitmap_t icon_executable_20x20_mask; /* Surface colors */ pixel_t surface_normal_pix, /* Overrided by std_bkg */ surface_editable_pix, surface_selected_pix, surface_shadow_pix, surface_highlight_pix; /* Text colors */ pixel_t normal_text_pix, editable_text_pix, selected_text_pix, disabled_text_pix; /* Scroll bar and scale bar colors */ pixel_t scroll_bar_bg_pix, scroll_bar_frame_pix, scroll_bar_btn_pix, scroll_bar_handle_pix; /* Progress bar colors */ pixel_t pbar_text_pix; /* Hint window colors */ pixel_t hint_bkg_pix, hint_text_pix; /* Double click interval (in ms) */ time_t double_click_int; /* Tooltips map interval (in ms) */ time_t tooltips_map_int; /* Rename click interval (in ms) */ time_t rename_click_int; /* Popup List scroll repeat interval (in ms) */ time_t pulist_repeat_int; /* Prompt scroll repeat interval (in ms) */ time_t prompt_scroll_repeat_int; /* Scroll Bar scroll repeat delay and interval (in ms) */ time_t sbar_scroll_repeat_delay, sbar_scroll_repeat_int; /* Widget regeristry list */ widget_register_struct **widget; int nwidgets; /* Queue resize list */ wqaction_struct **queued_resize; int nqueued_resizes; /* Queue draw list */ wqaction_struct **queued_draw; int nqueued_draws; /* Timeouts */ wqaction_struct **timeout; int ntimeouts; /* Tooltips */ tooltips_struct *tooltips; }; extern "C" widget_global_struct widget_global; /* * Prototype for the first common members of all widgets: */ #define WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE \ int type; \ bool_t map_state, \ has_focus, \ disabled; \ visibility_t visibility_state; \ int x, y; \ unsigned int width, height; \ font_t *font; \ void *prev, \ *next; \ void *data; /* * Widget: * * Contains just the commom members of all widget types. */ struct _Widget { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE }; /* * Check Button: */ #define CBTN_DRAW_AMOUNT_COMPLETE 0 #define CBTN_DRAW_AMOUNT_BUTTON 1 #define CBTN_DRAW_AMOUNT_LABEL 2 struct _WCheckButton { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; char *label; bool_t state, /* True if checked */ highlighted; /* True if highlighted by pointer */ void (*checked_cb)( check_button_struct *, /* Check Button */ bool_t, /* State */ void * /* Data */ ); void *checked_data; }; /* * Column List: */ #define CLIST_FLAG_ALLOW_DRAG (1 << 0) #define CLIST_FLAG_ALLOW_MULTI_SELECT (1 << 1) /* Otherwise only * single selection */ #define CLIST_DRAW_AMOUNT_COMPLETE 0 #define CLIST_DRAW_AMOUNT_LIST 1 #define CLIST_DRAW_AMOUNT_HEADING 2 #define CLIST_COLUMN_FLAG_ALIGN_LEFT (1 << 0) #define CLIST_COLUMN_FLAG_ALIGN_CENTER (1 << 1) #define CLIST_COLUMN_FLAG_ALIGN_RIGHT (1 << 2) #define CLIST_ITEM_FLAG_ALIGN_LEFT (1 << 0) #define CLIST_ITEM_FLAG_ALIGN_CENTER (1 << 1) #define CLIST_ITEM_FLAG_ALIGN_RIGHT (1 << 2) struct _WCList { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; unsigned int options; /* Any of CLIST_FLAG_* */ unsigned int row_height; #ifdef HAVE_X gc_t invert_gc; #endif /* Heading */ win_t heading; pixmap_t heading_buf; int resizing_column, /* The column that is being * resized or -1 for none */ pointer_over_column_resize; /* The column that the * pointer is over for * resizing */ int resizing_column_bar_pos; /* Position of the * resize column bar * relative to toplevel */ /* List */ win_t list; pixmap_t list_buf; scroll_bar_struct *sb; /* For the list */ /* Column headings */ clist_column_struct **column; int total_columns; /* Rows */ clist_row_struct **row; int total_rows; /* Selected rows */ int *sel_row; int total_sel_rows; int focus_row; int button_pressed; /* Currently pressed button */ int button_pressed_row; /* Row that the button was * pressed on, can be -1 */ time_t button_pressed_time; /* In ms */ /* Activate callback */ void (*activate_cb)( clist_struct *, /* CList */ void * /* Data */ ); void *activate_data; /* Select callback */ void (*select_cb)( clist_struct *, /* CList */ int, /* Row */ void * /* Data */ ); void *select_data; /* Unselect callback */ void (*unselect_cb)( clist_struct *, /* CList */ int, /* Row */ void * /* Data */ ); void *unselect_data; /* Column resized callback */ void (*column_resized_cb)( clist_struct *, /* CList */ int, /* Column */ int, /* X Position */ void * /* Data */ ); void *column_resized_data; }; struct _WCListColumn { unsigned int flags; /* Any of CLIST_COLUMN_FLAG_* */ char *text; font_t *font; pixel_t text_c; int x_pos, /* X position from left edge of clist * (in pixels) */ x_offset, /* X offset (in pixels) */ y_offset; /* Y offset (in pixels) */ }; struct _WCListRow { clist_item_struct **item; int total_items; void *data; void (*destroy_cb)( void * ); }; struct _WCListItem { unsigned int flags; /* Any of CLIST_ITEM_FLAG_* */ char *text; pixmap_t pixmap; /* Shared */ bitmap_t mask; /* Shared */ font_t *font; /* Shared */ pixel_t text_c; /* Text color */ int x_offset, /* X offset (in pixels) */ y_offset; /* Y offset (in pixels) */ }; /* * Dialog: */ struct _WDialog { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; int map_rel; win_t transient_for_w; push_button_struct *ok_btn; char *title; image_t *icon; char *message; }; /* * File Browser: */ #define FB_FLAG_WRITE_PROTECT (1 << 0) #define FB_FLAG_CLOSE_ON_OK (1 << 1) #define FB_FLAG_CLOSE_ON_CANCEL (1 << 2) #define FB_FLAG_MUST_EXIST (1 << 3) /* Styles */ #define FB_STYLE_SPLIT_LIST 0 /* Split dir and file win */ #define FB_STYLE_SINGLE_LIST 1 /* Single list window */ #define FB_DRAW_COMPLETE 0 #define FB_DRAW_DIRLIST 1 #define FB_DRAW_FILELIST 2 #define FB_DRAW_ALLLISTS 3 #define FB_DRAW_PROMPT 4 #define FB_DRAW_BUTTONS 5 #define FB_DRAW_SCROLLBARS 6 /* Filesystem types */ #define FB_FSTYPE_UNKNOWN 0 #define FB_FSTYPE_SWAP 1 /* Universal swap */ #define FB_FSTYPE_EXT 2 #define FB_FSTYPE_EXT2 3 #define FB_FSTYPE_PROC 4 #define FB_FSTYPE_MSDOS 5 /* Includes Win9* VFS */ #define FB_FSTYPE_ISO9660 6 /* CDRom */ #define FB_FSTYPE_MINIX 7 #define FB_FSTYPE_XIAFS 8 #define FB_FSTYPE_HPFS 9 #define FB_FSTYPE_NFS 10 struct _WFileBrowser { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; unsigned int options; int style; push_button_struct *ok_btn, *cancel_btn, *parent_btn, *home_btn, *refresh_btn; /* Directory window (for FB_STYLE_SPLIT_LIST) */ win_t dir_win; pixmap_t dir_win_buf; scroll_bar_struct *dir_win_sb; /* File window (for FB_STYLE_SPLIT_LIST) */ win_t file_win; pixmap_t file_win_buf; scroll_bar_struct *file_win_sb; /* List window (for FB_STYLE_SINGLE_LIST) */ win_t list_win; pixmap_t list_win_buf; scroll_bar_struct *list_win_sb; unsigned int list_max_width; int list_rows_visible; /* Current location prompt */ prompt_struct *prompt; /* Change value prompt */ prompt_struct *cv_prompt; char *cv_prompt_target; /* Target object */ int cv_prompt_mode; label_struct *location_label; popup_list_struct *location_pulist; /* Right-click menu */ menu_struct *menu; /* Directories list */ fb_object_struct **dir_list; int dir_list_items; /* Files list */ fb_object_struct **file_list; int file_list_items; /* Selected item positions (can be -1 for none) */ int sel_dir, /* For FB_STYLE_SPLIT_LIST */ sel_file, /* For FB_STYLE_SPLIT_LIST */ sel_object; /* For FB_STYLE_SINGLE_LIST */ int button_pressed; /* Currently pressed button */ int button_last_x, button_last_y; time_t button_pressed_time; /* In ms */ /* OK callback */ void (*ok_cb)( fb_struct *, /* File Browser */ const char *, /* Path */ void * /* Data */ ); void *ok_data; /* Cancel callback */ void (*cancel_cb)( fb_struct *, /* File Browser */ void * /* Data */ ); void *cancel_data; /* Main function */ void (*main_push_func)( void * /* Data */ ); void *main_push_data; /* Main pop function */ void (*main_pop_func)( void * /* Data */ ); void *main_pop_data; char **response_paths; int nresponse_paths; }; struct _WFileBrowserObject { char *name; int x, y; unsigned int width, height; mode_t mode; /* Type and permissions */ uid_t uid; /* User ID of owner */ gid_t gid; /* Group ID of owner */ off_t size; /* Total size, in blocks */ time_t atime, /* time of last access */ ctime, /* time of creation */ mtime; /* time of last modification */ }; /* * Label: */ #define LABEL_JUSTIFY_LEFT 0 #define LABEL_JUSTIFY_CENTER 1 #define LABEL_JUSTIFY_RIGHT 2 struct _WLabel { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; char *text; int justify; unsigned int x_border, y_border; pixel_t text_c; }; /* * List: */ #define LIST_FLAG_ALLOW_DRAG (1 << 0) #define LIST_ITEM_TYPE_NORMAL 0 #define LIST_ITEM_TYPE_FOLDER 1 #define LIST_ITEM_TYPE_HR 2 /* Horizontal rule */ #define LIST_CV_PROMPT_MODE_NONE 0 #define LIST_CV_PROMPT_MODE_RENAME 1 struct _WList { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; unsigned int options; /* Any of LIST_FLAG_* */ scroll_bar_struct *sb; unsigned int char_width, char_height, row_height; list_item_struct **item; int total_items, sel_item; /* Selected entry, can be -1 */ /* Margins (in pixels) */ int left_margin, top_margin; int button_pressed; /* Currently pressed button */ int button_last_x, button_last_y; time_t button_pressed_time; /* In ms */ /* DND */ int drag_item_num; /* Item being dragged or -1 for no * drag, this indicates that this * list is the drag source */ win_t dnd_icon; atom_t dnd_action; /* Requested drag action */ int dnd_drag_line; /* Draw the DND drag line on this * item or -1 for none, this is also * the item to process the drop on */ /* Change values prompt */ prompt_struct *cv_prompt; int cv_prompt_mode; int cv_prompt_entry_pos; /* Modifying values for * this item */ /* Activate callback */ void (*activate_cb)( list_struct *, /* List */ void * /* Data */ ); void *activate_data; /* Select callback */ void (*select_cb)( list_struct *, /* List */ int, /* Item Number */ void * /* Data */ ); void *select_data; /* Unselect callback */ void (*unselect_cb)( list_struct *, /* List */ int, /* Item Number */ void * /* Data */ ); void *unselect_data; }; struct _WListItem { int type; /* One of LIST_ITEM_TYPE_* */ unsigned int flags; char *text; pixmap_t pixmap; /* Shared */ bitmap_t mask; /* Shared */ void *data; /* Client data */ void (*destroy_cb)( void * /* Data */ ); }; /* * Menu: */ #define MENU_ITEM_LABEL 0 #define MENU_ITEM_CHECK 1 #define MENU_ITEM_SUBMENU_LABEL 2 #define MENU_ITEM_SEPARATOR 3 #define MENU_ITEM_FLAG_SENSITIVE (1 << 0) #define MENU_ITEM_FLAG_TOGGLED (1 << 1) /* For MENU_ITEM_CHECK */ struct _WMenu { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; /* Background iamges, coppied and resized to fit one standard * menu item (not shared) */ image_t *bg_img, *item_img, *item_highlighted_img; int row_height; /* In pixels, must be 1 or greater */ menu_item_struct **item; int total_items, selected_item; /* Position of pointer when it mapped this menu */ int pointer_map_x, pointer_map_y; /* Activate callback */ void (*activate_cb)( menu_struct *, /* Menu */ int, /* Item ID */ void * /* Data */ ); void *activate_data; }; struct _WMenuItem { int type; /* One of MENU_ITEM_* */ unsigned int flags; /* Any of MENU_ITEM_FLAG_* */ char *text, *accel_text; pixmap_t pixmap; /* Shared */ bitmap_t mask; /* Shared */ keyval_t accel_key; /* Accelerator key */ key_state_t accel_mods; /* Accelerator modifiers */ int id; /* User specified ID for this item */ }; /* * Menu Bar: */ typedef struct _WMenuBar menu_bar_struct; typedef struct _WMenuBarItem menu_bar_item_struct; struct _WMenuBar { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; menu_bar_item_struct **item; int total_items; int sel_item; /* Activate callback */ void (*activate_cb)( menu_struct *, /* Menu */ int, /* Item ID */ void * /* Data */ ); void *activate_data; }; struct _WMenuBarItem { char *text; int x, y; unsigned int width, height; menu_struct *menu; char hotkeys[10]; }; /* * Popup List: */ #define PULIST_MAP_BTN_WIDTH 18 #define PULIST_DRAW_AMOUNT_COMPLETE 0 #define PULIST_DRAW_AMOUNT_LABEL 1 #define PULIST_DRAW_AMOUNT_PULIST 2 #define PULIST_POPUP_BELOW 0 #define PULIST_POPUP_CENTER 1 #define PULIST_POPUP_UP 2 #define PULIST_POPUP_DOWN 3 #define PULIST_ITEM_FLAG_DISABLED (1 << 0) struct _WPopupList { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE /* The toplevel is the "label" and the popup_toplevel is the * "popup list" */ /* Label */ win_t toplevel; push_button_struct *map_btn; /* Popup List */ bool_t popup_map_state; int pointer_map_x, /* Position of pointer when * when was list mapped */ pointer_map_y; win_t popup_toplevel; pixmap_t popup_toplevel_buf; win_t popup_list; pixmap_t popup_list_buf; int popup_list_vis_items; /* Items visable on popup list, * also determines the popup * list's height */ /* Popup list size and scroll position */ unsigned int list_max_width, list_max_height; int list_y_pos; /* Scrolled position */ /* Items */ popup_list_item_struct **item; int total_items, sel_item, prev_sel_item; int direction; /* One of PULIST_POPUP_* */ /* Select callback */ void (*select_cb)( popup_list_struct *, /* Popup List */ int, /* Selected Item */ void * /* Data */ ); void *select_data; }; struct _WPopupListItem { unsigned int flags; /* Any of PULIST_ITEM_FLAG_* */ char *text; pixmap_t pixmap; /* Shared */ bitmap_t mask; /* Shared */ void *data; void (*destroy_cb)( void * /* Data */ ); }; /* * Progress Bar: */ #define PBAR_COMPLETION_HOLD 0 #define PBAR_COMPLETION_WRAP 1 #define PBAR_COMPLETION_UNMAP 2 #define PBAR_COMPLETION_FLASH 3 struct _WProgressBar { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; image_t *image_buf; /* Progress values */ float current, /* Current progress */ min, /* Minimum value */ max; /* Maximum value */ char *label; /* Label (optional) */ int completion_action; /* One of PBAR_COMPLETION_* */ }; /* * Prompt: */ #define PROMPT_DRAW_AMOUNT_COMPLETE 0 #define PROMPT_DRAW_AMOUNT_TEXT 1 #define PROMPT_STYLE_FLUSHED 0 #define PROMPT_STYLE_RAISED 1 #define PROMPT_STYLE_NOBORDER 2 #define PROMPT_FLAG_KEEP_VALUE (1 << 0) struct _WPrompt { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; unsigned int options; /* Any of PROMPT_FLAG_* */ int style; /* One of PROMPT_STYLE_* */ /* Label */ char *label; /* Text area */ font_t *text_font; win_t text_area; pixmap_t text_area_buf; char *buf; int buf_len; int buf_pos, /* Position of cursor in buf (can be -1) */ buf_vis_pos; /* Scrolled position in buf, char units */ /* Text selection */ bool_t selection_in_progress; /* Pointer is in the progress * of dragging a text * selection */ int buf_sel_origin, /* Origin byte of selection text (-1 for none) */ buf_sel_start, /* Start byte of selected text (-1 for none) */ buf_sel_end; /* End byte of selected text (-1 for none) */ /* History buffers */ char **hist_buf; int total_hist_bufs; /* Total number of history buffers */ int hist_buf_pos; /* Which history buffer we last recalled, */ int button_pressed; /* Currently pressed button */ int button_pressed_count; /* Number of times the button * was pressed from * button_pressed_time to the * current time */ time_t button_pressed_time; /* Activate callback */ void (*activate_cb)( prompt_struct *, /* Prompt */ const char *, /* Value */ void * /* Data */ ); void *activate_data; /* Cancel callback */ void (*cancel_cb)( prompt_struct *, /* Prompt */ void * /* Data */ ); void *cancel_data; }; /* * Push Button: */ #define PBTN_UNARMED 0 #define PBTN_ARMED 1 #define PBTN_HIGHLIGHTED 2 #define PBTN_LABEL_ALIGN_CENTER 0 #define PBTN_LABEL_ALIGN_LEFT 1 #define PBTN_LABEL_ALIGN_RIGHT 2 struct _WPushButton { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; /* Display as `default button' if True */ bool_t is_default; /* Button state (PBTN_UNARMED, PBTN_ARMED, or PBTN_HIGHLIGHTED) */ int state; /* Button background images, these are coppied and resized to * fit this button (not shared) */ image_t *unarmed_img, *armed_img, *highlighted_img; keyval_t *accel_keys; key_state_t *accel_mods; int naccel_keys; char *label; int label_align; /* One of PBTN_LABEL_ALIGN_* */ pixmap_t pixmap; bitmap_t mask; /* Pressed callback */ void (*pressed_cb)( push_button_struct *, /* Push Button */ void * /* Data */ ); void *pressed_data; /* Released callback (includes release off button) */ void (*released_cb)( push_button_struct *, /* Push Button */ void * /* Data */ ); void *released_data; /* Activate callback (released on button) */ void (*activate_cb)( push_button_struct *, /* Push Button */ void * /* Data */ ); void *activate_data; }; /* * Radio: */ #define RADIO_ALIGN_VERTICAL 0 #define RADIO_ALIGN_HORIZONTAL 1 #define RADIO_ALIGN_CASCADE 2 struct _WRadio { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; int align; /* One of RADIO_ALIGN_* */ check_button_struct **check_button; int ncheck_buttons, armed_check_button; }; /* * Scale Bar: */ #define SCALEBAR_FLAG_FLIP_POS (1 << 1) #define SCALEBAR_ORIENT_HORIZONTAL 0 #define SCALEBAR_ORIENT_VERTICAL 1 #define SCALEBAR_STYLE_STANDARD 0 #define SCALEBAR_STYLE_STANDARD_VALUE 1 /* Value shown */ #define SCALEBAR_STYLE_FLUSHED 2 /* Simple, similar to scrollbar style */ #define SCALEBAR_BAR_STANDARD_WIDTH 26 #define SCALEBAR_BAR_FLUSHED_WIDTH 12 struct _WScaleBar { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; unsigned int options; /* Any of SCALEBAR_FLAG_* */ int orientation; /* One of SCALEBAR_ORIENT_* */ int style; /* One of SCALEBAR_STYLE_* */ int ticks; /* Number of ticks to draw */ int button_pressed; /* Currently pressed button */ int button_last_x, button_last_y; time_t button_pressed_time; /* In ms */ float pos, /* Position in user defined units */ pos_min, /* In user defined units */ pos_max; /* In user defined units */ pixmap_t bkg_buf; unsigned int length; /* Length of scalebar in pixels */ void (*value_changed_cb)( scale_bar_struct *, /* Scale */ float, /* Value */ void * /* Data */ ); void *value_changed_data; }; /* * Scroll Bar: */ #define SCROLLBAR_FLAG_X_LEFT_BTN_CLICKED (1 << 8) #define SCROLLBAR_FLAG_X_HANDLE_CLICKED (1 << 9) #define SCROLLBAR_FLAG_X_RIGHT_BTN_CLICKED (1 << 10) #define SCROLLBAR_FLAG_Y_UP_BTN_CLICKED (1 << 11) #define SCROLLBAR_FLAG_Y_HANDLE_CLICKED (1 << 12) #define SCROLLBAR_FLAG_Y_DOWN_BTN_CLICKED (1 << 13) #define SCROLLBAR_BTN_WIDTH 16 #define SCROLLBAR_BTN_HEIGHT 16 #define SCROLLBAR_XBAR_HEIGHT 16 #define SCROLLBAR_YBAR_WIDTH 16 struct _WScrollBar { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE /* Toplevel, one for each bar */ win_t x_toplevel, y_toplevel; unsigned int flags; /* Any of SCROLLBAR_FLAG_* */ win_t x_left_btn, x_slider, x_right_btn; pixmap_t x_toplevel_buf; win_t y_up_btn, y_slider, y_down_btn; pixmap_t y_toplevel_buf; int button_pressed; /* Currently pressed button */ int button_last_x, button_last_y; time_t button_pressed_time; /* In ms */ /* Virtual size (may be smaller than visible area) */ unsigned int total_width, total_height; /* Current scroll positions */ int x_win_pos, y_win_pos; /* Scroll increments */ int x_step_inc, x_page_inc, y_step_inc, y_page_inc; /* Original ButtonPress offsets to scroll bar position */ int x_origin_delta, y_origin_delta; /* Value changed callback */ void (*value_changed_cb)( scroll_bar_struct *, /* Scroll Bar */ float, float, /* New x, new y */ void * /* Data */ ); void *value_changed_data; }; /* * Tooltips: */ struct _WTooltips { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; time_t next_map; /* Next time to be mapped (in ms), * can be 0 for none */ win_t ref_win; /* Reference window to map for */ tooltips_data_struct **hint_data; /* List of hint messages */ int ndatas, ref_data_num; /* Data containing the current message * to be displayed for the current * reference window */ }; struct _WTooltipsData { win_t ref_win; /* Referance window */ char **message; int nlines; }; /* * Viewer: */ typedef struct _WViewer file_viewer_struct; #define VIEWER_MODE_ASCII 0 #define VIEWER_MODE_HEX 1 struct _WViewer { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; win_t viewer; pixmap_t viewer_buf; scroll_bar_struct sb; unsigned int max_viewer_width; char *filename; char *buf; int buf_len; int lines; /* Total number of lines */ int viewer_mode; push_button_struct close_btn, ascii_mode_btn, hex_mode_btn; }; #if 0 /* * Page Stepper: */ typedef struct { void *w; /* Pointer to allocated widget struct */ int w_type; /* Widget type */ char *name; /* Unique name */ } page_widget_struct; typedef struct { int x, y; font_t *font; pixel_t pix; char **text; /* Can be NULL */ int total_text_lines; image_t *image; /* Can be NULL */ } page_stepper_label; typedef struct { char map_state; page_widget_struct **widget; /* Widget */ int total_widgets; page_stepper_label_struct **label; int total_labels; } page_stepper_page_struct; typedef struct { WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE win_t toplevel; pixmap_t toplevel_buf; win_t parent; page_stepper_page_struct **page; int total_pages; int cur_page; push_button_struct next_btn, prev_btn; /* Panel image (shared) */ image_t *panel_img; /* Client data and page change callback function */ void *client_data; int (*page_change_handler)(void *, int, int); int (*exit_handler)(void *); int (*finish_handler)(void *); } page_stepper_struct; #endif #undef WIDGET_FIRST_COMMON_MEMBERS_PROTOTYPE /* In wglobal.cpp */ extern "C" int WidgetInitGlobals(const int argc, char **argv); extern "C" void WidgetDestroyGlobals(void); extern "C" int WidgetGUIEventsPending(void); extern "C" int WidgetManageGUI(event_t *event); extern "C" int WidgetActionsPending(void); extern "C" void WidgetMainIteration(void *data); extern "C" int WidgetRegister(void *widget, const int type); extern "C" int WidgetGetType(void *widget); extern "C" const char *WidgetGetTypeName(void *widget); extern "C" bool_t WidgetIsRegistered(void *widget); extern "C" void WidgetUnregister(void *widget); extern "C" win_t WidgetGetToplevel(void *widget); extern "C" win_t WidgetGetParent(void *widget); extern "C" bool_t WidgetHasFocus(void *widget); extern "C" void WidgetSetFocus(void *widget, const bool_t focus); extern "C" bool_t WidgetDisabled(void *widget); extern "C" void WidgetSetDisabled(void *widget, const bool_t disabled); extern "C" void WidgetQueueResize(void *widget); extern "C" void WidgetQueueDraw(void *widget); extern "C" int WidgetManage(void *widget, event_t *event); extern "C" bool_t WidgetMapped(void *widget); extern "C" void WidgetMap(void *widget); extern "C" void WidgetUnmap(void *widget); extern "C" visibility_t WidgetVisibility(void *widget); extern "C" void WidgetDestroy(void *widget); extern "C" void WidgetQueueResizeAction( void (*func)(void *, void *), void *widget, void *data ); extern "C" void WidgetQueueDrawAction( void (*func)(void *, void *), void *widget, void *data ); extern "C" void WidgetTimeoutAdd( void (*func)(void *, void *), void *widget, void *data, const time_t interval_ms ); extern "C" void WidgetIdleAdd( void (*func)(void *, void *), void *widget, void *data ); extern "C" void WidgetTimeoutRemoveByFunc(void (*func)(void *, void *)); extern "C" void WidgetTimeoutRemoveByWidget(void *widget); extern "C" void WidgetTimeoutRemoveByFuncWidget( void (*func)(void *, void *), void *widget ); /* In wtooltips.cpp */ extern "C" int TooltipsInit(tooltips_struct *hw); extern "C" void TooltipsResize(tooltips_struct *hw); extern "C" void TooltipsQueueResize(tooltips_struct *hw); extern "C" void TooltipsDraw(tooltips_struct *hw); extern "C" void TooltipsQueueDraw(tooltips_struct *hw); extern "C" int TooltipsManage(tooltips_struct *hw, event_t *event); extern "C" void TooltipsMap(tooltips_struct *hw); extern "C" void TooltipsUnmap(tooltips_struct *hw); extern "C" void TooltipsDestroy(tooltips_struct *hw); extern "C" void TooltipsSetMessage( tooltips_struct *hw, win_t w, const char *msg ); extern "C" void TooltipsDeleteMessage(tooltips_struct *hw, win_t w); extern "C" void TooltipsDeleteAllMessages(tooltips_struct *hw); extern "C" void TooltipsSchedualMap( tooltips_struct *hw, time_t interval_ms, win_t w ); /* In wfile.cpp */ extern "C" image_t *WidgetLoadImageFromTgaFile(const char *path); extern "C" image_t *WidgetLoadImageFromTgaData(const u_int8_t *data); extern "C" pixmap_t WidgetLoadPixmapFromTgaFile( const char *path, bitmap_t *mask_rtn ); extern "C" pixmap_t WidgetLoadPixmapFromTgaData( u_int8_t *data, bitmap_t *mask_rtn ); extern "C" image_t *WidgetLoadImageFromXpmFile(const char *path); extern "C" image_t *WidgetLoadImageFromXpmData(char **data); extern "C" pixmap_t WidgetLoadPixmapFromXpmFile( const char *path, bitmap_t *mask_rtn ); extern "C" pixmap_t WidgetLoadPixmapFromXpmData( char **data, bitmap_t *mask_rtn ); /* In wutils.cpp */ extern "C" pixel_t WidgetGetPixel(char *clsp); extern "C" WCursor *WidgetCreateCursorFromID(cursor_id_t id); extern "C" WCursor *WidgetCreateCursorFromFile( const char *path, int hot_x, int hot_y, const WColorStruct *c_fg, const WColorStruct *c_bg ); extern "C" WCursor *WidgetCreateCursorFromData( char **xpmdata, int hot_x, int hot_y, const WColorStruct *c_fg, const WColorStruct *c_bg ); extern "C" void WidgetSetWindowCursor(win_t w, WCursor *wcursor); extern "C" void WidgetDestroyCursor(WCursor **wcursor); extern "C" void WidgetCenterWindow(win_t w, int win_rel); extern "C" void WidgetCenterWindowToWindow(win_t w, win_t rel_w); extern "C" void WidgetResizeImageBuffer( unsigned int bits_per_pixel, u_int8_t *tar_buf, const u_int8_t *src_buf, unsigned int tar_width, unsigned int tar_height, unsigned int tbpl, unsigned int src_width, unsigned int src_height, unsigned int sbpl ); extern "C" void WidgetPutImageTile( drawable_t tar_d, image_t *src_img, unsigned int tar_width, unsigned int tar_height ); extern "C" void WidgetPutPixmapTile( drawable_t tar_d, pixmap_t src_pm, unsigned int tar_width, unsigned int tar_height, unsigned int src_width, unsigned int src_height ); extern "C" void WidgetFrameButton(win_t w, bool_t state, unsigned long fg_pix, unsigned long bg_pix ); extern "C" void WidgetFrameButtonPixmap( pixmap_t pixmap, bool_t state, unsigned int width, unsigned int height, unsigned long fg_pix, unsigned long bg_pix ); extern "C" image_t *WidgetCreateImageText( const char *s, font_t *font, pixel_t fg_pix, pixel_t bg_pix, bool_t outline, pixel_t outline_pix ); extern "C" void WidgetCopyImage( image_t *tar_img, image_t *src_img ); extern "C" void WidgetCopyImageToShared( shared_image_t *tar_img, image_t *src_img ); extern "C" void WidgetPutImageNormal( drawable_t d, /* Target */ image_t *ximage, /* Source */ int tar_x, int tar_y, bool_t allow_transparency ); extern "C" void WidgetPutImageRaised( drawable_t d, /* Target */ image_t *ximage, /* Source */ int tar_x, int tar_y, unsigned int altitude ); extern "C" void WidgetAdjustImageGamma( image_t *img, float r, float g, float b ); /* ********************************************************************* * * Widget Management Functions */ /* In wcheckbutton.cpp */ extern "C" bool_t CBtnGetActive(check_button_struct *cb); extern "C" void CBtnSetActive(check_button_struct *cb, bool_t state); extern "C" int CBtnInit( check_button_struct *cb, win_t parent, int x, int y, bool_t state, const char *label ); extern "C" void CBtnSetTooltip( check_button_struct *cb, const char *msg ); extern "C" void CBtnResize(check_button_struct *cb); extern "C" void CBtnQueueResize(check_button_struct *cb); extern "C" void CBtnDraw(check_button_struct *cb, int amount); extern "C" void CBtnQueueDraw(check_button_struct *cb, int amount); extern "C" int CBtnManage(check_button_struct *cb, event_t *event); extern "C" void CBtnMap(check_button_struct *cb); extern "C" void CBtnUnmap(check_button_struct *cb); extern "C" void CBtnDestroy(check_button_struct *cb); /* In wclist.cpp */ extern "C" const char *CListGetItemText( clist_struct *clist, int row_num, int column_num ); extern "C" void CListSetItemText( clist_struct *clist, int row_num, int column_num, const char *text ); extern "C" void CListSetRowTexts( clist_struct *clist, int row_num, const char **text, int ntexts ); extern "C" pixmap_t CListGetItemPixmap( clist_struct *clist, int row_num, int column_num, bitmap_t *mask_rtn ); extern "C" void CListSetItemPixmap( clist_struct *clist, int row_num, int column_num, pixmap_t pixmap, bitmap_t mask ); extern "C" void CListSetRowPixmaps( clist_struct *clist, int row_num, pixmap_t *pixmap, bitmap_t *mask, int npixmaps ); extern "C" void CListSetItemAttributes( clist_struct *clist, int row_num, int column_num, unsigned int flags, font_t *font, pixel_t text_c ); extern "C" void CListSetRowAttributes( clist_struct *clist, int row_num, unsigned int flags, font_t *font, pixel_t text_c ); extern "C" int CListGetFirstSelectedRow(clist_struct *clist); extern "C" int CListGetLastSelectedRow(clist_struct *clist); extern "C" bool_t CListIsRowSelected(clist_struct *clist, const int row_num); extern "C" void CListSelectRow(clist_struct *clist, const int row_num); extern "C" void CListSelectAllRows(clist_struct *clist); extern "C" void CListUnselectRow(clist_struct *clist, const int row_num); extern "C" void CListUnselectAllRows(clist_struct *clist); extern "C" void CListInvertSelection(clist_struct *clist); extern "C" int CListGetRowFromCoordinateY( clist_struct *clist, const int y ); extern "C" int CListGetColumnFromCoordinateX( clist_struct *clist, const int x ); extern "C" visibility_t CListGetRowVisibility( clist_struct *clist, const int row_num ); extern "C" void CListMoveTo( clist_struct *clist, const int row_num, const float coeff ); extern "C" int CListColumnAppend( clist_struct *clist, const char *text, font_t *font, pixel_t text_c, unsigned int flags, int x_pos /* In pixels */ ); extern "C" int CListGetColumnPosition( clist_struct *clist, int column_num ); extern "C" void CListSetColumnPosition( clist_struct *clist, int column_num, int x ); extern "C" void CListSetColumnWidth( clist_struct *clist, int column_num, unsigned int width ); extern "C" void CListColumnRemove(clist_struct *clist, int column_num); extern "C" unsigned int CListGetColumnWidthMin( clist_struct *clist, int column_num ); extern "C" void CListAutosizeColumn( clist_struct *clist, int column_num ); extern "C" void CListAutosizeColumns(clist_struct *clist); extern "C" int CListRowInsert(clist_struct *clist, int row_num); extern "C" int CListRowAppend(clist_struct *clist); extern "C" void CListRowRemove(clist_struct *clist, int row_num); extern "C" void CListRowSwap( clist_struct *clist, const int row_num1, const int row_num2 ); extern "C" void CListClear(clist_struct *clist); extern "C" void CListRowSetData( clist_struct *clist, int row_num, void *data, void (*destroy_cb)(void *) ); extern "C" void *CListRowGetData(clist_struct *clist, int row_num); extern "C" int CListRowGetByData(clist_struct *clist, void *data); extern "C" int CListInit( clist_struct *clist, win_t parent, int x, int y, unsigned int width, unsigned int height ); extern "C" void CListResize(clist_struct *clist); extern "C" void CListQueueResize(clist_struct *clist); extern "C" void CListDraw(clist_struct *clist, int amount); extern "C" void CListQueueDraw(clist_struct *clist, int amount); extern "C" int CListManage(clist_struct *clist, event_t *event); extern "C" void CListMap(clist_struct *clist); extern "C" void CListUnmap(clist_struct *clist); extern "C" void CListDestroy(clist_struct *clist); /* In wdialog.cpp */ extern "C" int DialogInit(dialog_struct *d); extern "C" void DialogSetMapRelative(dialog_struct *d, int map_rel); extern "C" void DialogSetTransientFor(dialog_struct *d, win_t toplevel); extern "C" void DialogSetTitle(dialog_struct *d, const char *title); extern "C" void DialogSetIcon(dialog_struct *d, image_t *icon); extern "C" void DialogSetMessage(dialog_struct *d, const char *msg); extern "C" void DialogResize(dialog_struct *d); extern "C" void DialogQueueResize(dialog_struct *d); extern "C" void DialogDraw(dialog_struct *d); extern "C" void DialogQueueDraw(dialog_struct *d); extern "C" int DialogManage(dialog_struct *d, event_t *event); extern "C" void DialogMap(dialog_struct *d); extern "C" void DialogUnmap(dialog_struct *d); extern "C" void DialogDestroy(dialog_struct *d); extern "C" void printdw(dialog_struct *d, const char *msg, win_t toplevel); /* In wfilebrowser.cpp */ extern "C" bool_t FBrowserGetResponse( fb_struct *fb, const char *title, const char *ok_btn_label, const char *cancel_btn_label, const char *path, char ***paths_rtn, int *npaths_rtn, int map_rel, win_t toplevel, void (*main_push_func)(void *), void *main_push_data, void (*main_pop_func)(void *), void *main_pop_data ); extern "C" void FBrowserSetOpMesg( fb_struct *fb, const char *title, const char *ok_btn_label, const char *cancel_btn_label ); extern "C" void FBrowserSetTransientFor(fb_struct *fb, win_t toplevel); extern "C" void FBrowserSetCallbacks( fb_struct *fb, void (*ok_cb)(fb_struct *, const char *, void *), void *ok_data, void (*cancel_cb)(fb_struct *, void *), void *cancel_data ); extern "C" void FBrowserClearCallbacks(fb_struct *fb); extern "C" int FBrowserInit(fb_struct *fb, int style); extern "C" void FBrowserResize(fb_struct *fb); extern "C" void FBrowserQueueResize(fb_struct *fb); extern "C" void FBrowserDraw(fb_struct *fb, int amount); extern "C" void FBrowserQueueDraw(fb_struct *fb, int amount); extern "C" int FBrowserManage(fb_struct *fb, event_t *event); extern "C" void FBrowserMapCVPrompt(fb_struct *fb, int mode); extern "C" void FBrowserUnmapCVPrompt(fb_struct *fb); extern "C" void FBrowserMap(fb_struct *fb); extern "C" void FBrowserMapPath(fb_struct *fb, const char *path); extern "C" void FBrowserMapSearchMask(fb_struct *fb, const char *mask); extern "C" void FBrowserUnmap(fb_struct *fb); extern "C" void FBrowserDestroy(fb_struct *fb); /* In wlabel.cpp */ extern "C" int LabelInit( label_struct *label, win_t parent, int x, int y, unsigned int width, unsigned int height, const char *text ); extern "C" void LabelSetFont(label_struct *label, font_t *font); extern "C" void LabelSetJustify(label_struct *label, int justify); extern "C" void LabelSetBorder( label_struct *label, unsigned int x_border, unsigned int y_border ); extern "C" void LabelSetText(label_struct *label, const char *text); extern "C" void LabelSetTextColor(label_struct *label, pixel_t text_c); extern "C" void LabelMinimizeSize(label_struct *label); extern "C" void LabelResize(label_struct *label); extern "C" void LabelQueueResize(label_struct *label); extern "C" void LabelDraw(label_struct *label); extern "C" void LabelQueueDraw(label_struct *label); extern "C" int LabelManage(label_struct *label, event_t *event); extern "C" void LabelMap(label_struct *label); extern "C" void LabelUnmap(label_struct *label); extern "C" void LabelDestroy(label_struct *label); /* In wlist.cpp */ extern "C" int ListGetItemNumByData(list_struct *list, void *data); extern "C" int ListIsItemAllocated(list_struct *list, int n); extern "C" int ListGetItemFromCoordinates(list_struct *list, int x, int y); extern "C" int ListGetRowFromCoordinates(list_struct *list, int x, int y); extern "C" bool_t ListGetCoordinatesFromItem( list_struct *list, int i, int *x_rtn, int *y_rtn, unsigned int *width_rtn, unsigned int *height_rtn ); extern "C" visibility_t ListGetItemVisibility( list_struct *list, int item_num ); extern "C" void ListMoveTo( list_struct *list, int item_num, float coeff ); extern "C" int ListInsert( list_struct *list, int type, const char *text, pixmap_t pixmap, bitmap_t mask, int pos, void *data ); extern "C" int ListAppend( list_struct *list, int type, const char *text, pixmap_t pixmap, bitmap_t mask, void *data ); extern "C" void ListRemove(list_struct *list, int i); extern "C" void ListClear(list_struct *list); extern "C" void ListSelect(list_struct *list, int i); extern "C" void ListUnselect(list_struct *list, int i); extern "C" void *ListGetItemData(list_struct *list, int i); extern "C" void ListSetItemData( list_struct *list, int i, void *data, void (*destroy_cb)(void *) ); extern "C" void ListWinDNDEnterNotify( list_struct *list, time_t t ); extern "C" void ListWinDNDPositionNotify( list_struct *list, win_t tar_w, int x, int y, int x_root, int y_root, atom_t action, time_t t ); extern "C" void ListWinDNDLeaveNotify( list_struct *list, time_t t ); extern "C" int ListWinInit( list_struct *list, win_t parent, int x, int y, unsigned int width, unsigned int height ); extern "C" void ListWinResize(list_struct *list); extern "C" void ListWinQueueResize(list_struct *list); extern "C" void ListWinDraw(list_struct *list); extern "C" void ListWinQueueDraw(list_struct *list); extern "C" int ListWinManage(list_struct *list, event_t *event); extern "C" void ListWinMap(list_struct *list); extern "C" void ListWinUnmap(list_struct *list); extern "C" void ListWinDestroy(list_struct *list); /* In wmenu.cpp */ extern "C" int MenuIsItemAllocated(menu_struct *menu, const int item_num); extern "C" int MenuGetItemNumberByID(menu_struct *menu, const int id); extern "C" bool_t MenuGetItemState(menu_struct *menu, const int item_num); extern "C" void MenuSetItemState( menu_struct *menu, const int item_num, bool_t state ); extern "C" void MenuSetItemAccelKey( menu_struct *menu, const int item_num, const keyval_t accel_key, const key_state_t accel_mods ); extern "C" int MenuItemInsert( menu_struct *menu, int item_num, int type, const char *text, pixmap_t pixmap, bitmap_t mask, int id ); extern "C" int MenuItemAppend( menu_struct *menu, int type, const char *text, pixmap_t pixmap, bitmap_t mask, int id ); extern "C" void MenuDeleteAllItems(menu_struct *menu); extern "C" int MenuInit( menu_struct *menu, win_t parent, void (*activate_cb)(menu_struct *, int, void *), void *activate_data ); extern "C" void MenuResize(menu_struct *menu); extern "C" void MenuQueueResize(menu_struct *menu); extern "C" void MenuDraw(menu_struct *menu); extern "C" void MenuQueueDraw(menu_struct *menu); extern "C" int MenuManage(menu_struct *menu, event_t *event); extern "C" void MenuMap(menu_struct *menu); extern "C" void MenuMapCoordinates(menu_struct *menu, int x, int y); extern "C" void MenuUnmap(menu_struct *menu); extern "C" void MenuDestroy(menu_struct *menu); /* In wmenubar.cpp */ extern "C" int MenuBarIsItemAllocated(menu_bar_struct *mb, int n); extern "C" menu_struct *MenuBarGetMenuFromItem(menu_bar_struct *mb, int n); extern "C" bool_t MenuBarGetItemToggleState( menu_bar_struct *mb, int menu_num, int item_num ); extern "C" void MenuBarSetItemToggleState( menu_bar_struct *mb, int menu_num, int item_num, bool_t state ); extern "C" int MenuBarMatchItemByPos( menu_bar_struct *mb, int x, int y ); extern "C" int MenuBarMenuAppend( menu_bar_struct *mb, const char *text, int x, int y, unsigned int width, unsigned int height ); extern "C" int MenuBarMenuItemInsert( menu_bar_struct *mb, int menu_num, int item_num, int type, /* One of MENU_ITEM_* */ const char *text, pixmap_t pixmap, bitmap_t mask, int id ); extern "C" int MenuBarMenuItemAppend( menu_bar_struct *mb, int menu_num, int type, /* One of MENU_ITEM_* */ const char *text, pixmap_t pixmap, bitmap_t mask, int id ); extern "C" void MenuBarDeleteItem(menu_bar_struct *mb, int n); extern "C" int MenuBarInit( menu_bar_struct *mb, win_t parent, int x, int y, unsigned int width, unsigned int height, void (*activate_cb)(menu_struct *, int, void *), void *activate_data ); extern "C" void MenuBarResize(menu_bar_struct *mb); extern "C" void MenuBarQueueResize(menu_bar_struct *mb); extern "C" void MenuBarDraw(menu_bar_struct *mb); extern "C" void MenuBarQueueDraw(menu_bar_struct *mb); extern "C" int MenuBarManage(menu_bar_struct *mb, event_t *event); extern "C" void MenuBarMap(menu_bar_struct *mb); extern "C" void MenuBarUnmap(menu_bar_struct *mb); extern "C" void MenuBarDestroy(menu_bar_struct *mb); /* In wpopuplist.cpp */ extern "C" popup_list_item_struct *PUListGetItem( popup_list_struct *list, int i ); extern "C" int PUListGetSelItem(popup_list_struct *list); extern "C" const char *PUListGetSelItemName(popup_list_struct *list); extern "C" void PUListSetSelItem(popup_list_struct *list, int n); extern "C" int PUListGetItemByData(popup_list_struct *list, void *data); extern "C" int PUListAddItem( popup_list_struct *list, unsigned int flags, const char *text, pixmap_t pixmap, bitmap_t mask ); extern "C" void PUListClear(popup_list_struct *list); void PUListItemSetData( popup_list_struct *list, int i, void *data, void (*destroy_cb)(void *) ); void *PUListItemGetData(popup_list_struct *list, int i); extern "C" int PUListInit( popup_list_struct *list, win_t parent, int x, int y, unsigned int width, unsigned int height, int vis_items, /* Items visible on list */ int direction /* One of PULIST_POPUP_* */ ); extern "C" void PUListResize( popup_list_struct *list, int items_visible ); extern "C" void PUListQueueResize( popup_list_struct *list, int items_visible ); extern "C" void PUListDraw(popup_list_struct *list, int amount); extern "C" void PUListQueueDraw(popup_list_struct *list, int amount); extern "C" int PUListManage(popup_list_struct *list, event_t *event); extern "C" void PUListMap(popup_list_struct *list); extern "C" void PUListUnmap(popup_list_struct *list); extern "C" void PUListMapList(popup_list_struct *list); extern "C" void PUListUnmapList(popup_list_struct *list); extern "C" void PUListDestroy(popup_list_struct *list); /* In wprogressbar.cpp */ extern "C" int PBarInit( progress_bar_struct *pb, win_t parent, int x, int y, unsigned int width, unsigned int height, float start_val, float min, float max, const char *label, int completion_action ); extern "C" void PBarResize(progress_bar_struct *pb); extern "C" void PBarQueueResize(progress_bar_struct *pb); extern "C" void PBarDraw(progress_bar_struct *pb); extern "C" void PBarQueueDraw(progress_bar_struct *pb); extern "C" int PBarManage(progress_bar_struct *pb, event_t *event); extern "C" void PBarMap(progress_bar_struct *pb); extern "C" void PBarUnmap(progress_bar_struct *pb); extern "C" void PBarDestroy(progress_bar_struct *pb); extern "C" void PBarUpdate( progress_bar_struct *pb, float value, const char *label ); /* In wprompt.cpp */ #define PROMPT_POS_CUR 0 #define PROMPT_POS_START 1 #define PROMPT_POS_END 2 extern "C" void PromptMarkBuffer(prompt_struct *prompt, int cursor_pos); extern "C" void PromptUnmarkBuffer(prompt_struct *prompt, int cursor_pos); extern "C" float PromptGetF(prompt_struct *prompt); extern "C" int PromptGetI(prompt_struct *prompt); extern "C" long PromptGetL(prompt_struct *prompt); extern "C" char *PromptGetS(prompt_struct *prompt); extern "C" void PromptSetF(prompt_struct *prompt, float val); extern "C" void PromptSetF2( prompt_struct *prompt, const float val, const unsigned int ndecimals ); extern "C" void PromptSetI(prompt_struct *prompt, int val); extern "C" void PromptSetL(prompt_struct *prompt, long val); extern "C" void PromptSetUL(prompt_struct *prompt, unsigned long val); extern "C" void PromptSetS(prompt_struct *prompt, const char *val); extern "C" int PromptInit( prompt_struct *prompt, win_t parent, int x, int y, unsigned int width, unsigned int height, int style, const char *label, unsigned int buf_len, int hist_bufs ); extern "C" const char *PromptGetLabel(prompt_struct *prompt); extern "C" void PromptSetLabel( prompt_struct *prompt, const char *label ); extern "C" void PromptSetTooltip( prompt_struct *prompt, const char *msg ); extern "C" void PromptResize(prompt_struct *prompt); extern "C" void PromptQueueResize(prompt_struct *prompt); extern "C" void PromptDraw(prompt_struct *prompt, int amount); extern "C" void PromptQueueDraw(prompt_struct *prompt, int amount); extern "C" int PromptManage(prompt_struct *prompt, event_t *event); extern "C" void PromptMap(prompt_struct *prompt); extern "C" void PromptClose(prompt_struct *prompt); extern "C" void PromptUnmap(prompt_struct *prompt); extern "C" void PromptDestroy(prompt_struct *prompt); /* In wpushbutton.cpp */ extern "C" int PBtnInit( push_button_struct *btn, win_t parent, int x, int y, unsigned int width, unsigned int height, const char *label, int label_align, pixmap_t pixmap, bitmap_t mask, void (*activate_cb)(push_button_struct *, void *), void *activate_data ); extern "C" void PBtnSetLabel( push_button_struct *btn, unsigned int width, unsigned int height, const char *label, int label_align, pixmap_t pixmap, bitmap_t mask ); extern "C" void PBtnSetAccelKeys( push_button_struct *btn, const keyval_t *accel_keys, const key_state_t *accel_mods, int naccel_keys ); extern "C" void PBtnSetTooltip( push_button_struct *btn, const char *msg ); extern "C" void PBtnSetState(push_button_struct *btn, const int state); extern "C" void PBtnResize(push_button_struct *btn); extern "C" void PBtnQueueResize(push_button_struct *btn); extern "C" void PBtnDraw(push_button_struct *btn); extern "C" void PBtnQueueDraw(push_button_struct *btn); extern "C" int PBtnManage(push_button_struct *btn, event_t *event); extern "C" void PBtnMap(push_button_struct *btn); extern "C" void PBtnUnmap(push_button_struct *btn); extern "C" void PBtnDestroy(push_button_struct *btn); #if 0 /* In wpstepper.cpp */ extern "C" int PStepperIsPageAllocated( page_stepper_struct *ps, int page ); extern "C" int PStepperGetWidgetPointer( page_stepper_struct *ps, char *name, void **w_ptr, int *w_type ); extern "C" float PStepperGetWidgetValue( page_stepper_struct *ps, char *name ); extern "C" void *PStepperGetWidgetValuePtr( page_stepper_struct *ps, char *name ); extern "C" int PStepperPBCB(void *btn); extern "C" int PStepperPrevPBCB(void *ptr); extern "C" int PStepperNextPBCB(void *ptr); extern "C" int PStepperInit( page_stepper_struct *ps, win_t parent, int x, int y, unsigned int width, unsigned int height, unsigned int total_pages, image_t *panel_img, void *client_data, int (*page_change_handler)(void *, int, int), int (*exit_handler)(void *), int (*finish_handler)(void *) ); extern "C" int PStepperDraw( page_stepper_struct *ps, int amount ); extern "C" int PStepperManage( page_stepper_struct *ps, event_t *event ); extern "C" void PStepperMap(page_stepper_struct *ps); extern "C" void PStepperUnmap(page_stepper_struct *ps); extern "C" void PStepperMapPage(page_stepper_struct *ps, int page); extern "C" void PStepperUnmapPage(page_stepper_struct *ps, int page); extern "C" void PStepperDestroy(page_stepper_struct *ps); extern "C" int PStepperAllocatePage(page_stepper_struct *ps); extern "C" void PStepperDestroyPage( page_stepper_struct *ps, int page ); extern "C" int PStepperAllocateLabel( page_stepper_struct *ps, int page, char *text, image_t *image, font_t *font, pixel_t pix, int x, int y ); extern "C" int PStepperAllocateWidget( page_stepper_struct *ps, int page, char *name, int w_type, int x, int y, unsigned int width, unsigned int height, int argc, char *argv[] ); extern "C" void PStepperDestroyWidget(page_widget_struct *pw); #endif /* In wradio.cpp */ extern "C" int RadioGetActive(radio_struct *radio); extern "C" void RadioSetActive(radio_struct *radio, int n); extern "C" int RadioInit( radio_struct *radio, win_t parent, int x, int y, int ncheck_buttons, int start_sel_btn, char **names, int nnames, int alignment ); extern "C" void RadioResize(radio_struct *radio); extern "C" void RadioQueueResize(radio_struct *radio); extern "C" void RadioDraw(radio_struct *radio); extern "C" void RadioQueueDraw(radio_struct *radio); extern "C" int RadioManage( radio_struct *radio, event_t *event ); extern "C" void RadioMap(radio_struct *radio); extern "C" void RadioUnmap(radio_struct *radio); extern "C" void RadioDestroy(radio_struct *radio); /* In wscalebar.cpp */ extern "C" int ScaleBarInit( scale_bar_struct *sb, win_t parent, int x, int y, unsigned int length, int style, int ticks, int orientation, float pos_min, float pos_max, float pos, bool_t flip_pos ); extern "C" void ScaleBarDraw(scale_bar_struct *sb); extern "C" void ScaleBarQueueDraw(scale_bar_struct *sb); extern "C" int ScaleBarManage(scale_bar_struct *sb, event_t *event); extern "C" void ScaleBarMap(scale_bar_struct *sb); extern "C" void ScaleBarUnmap(scale_bar_struct *sb); extern "C" void ScaleBarDestroy(scale_bar_struct *sb); /* In wscrollbar.cpp */ extern "C" float SBarGetPositionX(scroll_bar_struct *sb); extern "C" float SBarGetPositionY(scroll_bar_struct *sb); extern "C" void SBarSetPositionX(scroll_bar_struct *sb, float x); extern "C" void SBarSetPositionY(scroll_bar_struct *sb, float y); extern "C" int SBarInit( scroll_bar_struct *sb, win_t parent, unsigned int width, unsigned int height, unsigned int total_width, unsigned int total_height ); extern "C" void SBarResize( scroll_bar_struct *sb, unsigned int width, unsigned int height, unsigned int total_width, unsigned int total_height ); extern "C" void SBarQueueResize( scroll_bar_struct *sb, unsigned int width, unsigned int height, unsigned int total_width, unsigned int total_height ); extern "C" void SBarDraw(scroll_bar_struct *sb); extern "C" void SBarQueueDraw(scroll_bar_struct *sb); extern "C" int SBarManage(scroll_bar_struct *sb, event_t *event); extern "C" void SBarDestroy(scroll_bar_struct *sb); /* In wviewer.cpp */ extern "C" int ViewerLoadFile( file_viewer_struct *fv, const char *filename ); extern "C" int ViewerLoadData( file_viewer_struct *fv, const void *buf, int buf_len ); extern "C" void ViewerUnload(file_viewer_struct *fv); extern "C" int ViewerInit( file_viewer_struct *fv, int x, int y, unsigned int width, unsigned int height ); extern "C" void ViewerResize(file_viewer_struct *fv); extern "C" void ViewerDraw(file_viewer_struct *fv); extern "C" int ViewerManage(file_viewer_struct *fv, event_t *event); extern "C" void ViewerMap(file_viewer_struct *fv); extern "C" void ViewerUnmap(file_viewer_struct *fv); extern "C" void ViewerDestroy(file_viewer_struct *fv); #endif /* WIDGET_H */