/* @(#)p_lst_impl.h 1.50 93/06/28 SMI */ /* * (c) Copyright 1989 Sun Microsystems, Inc. Sun design patents * pending in the U.S. and foreign countries. See LEGAL_NOTICE * file for terms of the license. */ #ifndef __panel_list_impl_h #define __panel_list_impl_h #include #include #include #include typedef struct panel_list_struct Panel_list_info; typedef struct panel_list_row_struct Row_info; typedef enum { OP_NONE, OP_CHANGE, OP_INSERT, OP_DELETE } Edit_op; #define PRIMARY_CHOICE 0 #define SHELF_CHOICE 1 #define PANEL_LIST_DEFAULT_ROW 5 /*** Note: Update PANEL_LIST_SORT code when changing this structure. ***/ struct panel_list_row_struct { Xv_opaque client_data; /* Client data with each row */ int display_str_len; /* length of displayed string */ Xv_Font font; /* NULL => use WIN_FONT */ Pixrect *glyph; Pixrect *mask_glyph; int row; /* Row number */ #ifdef OW_I18N _xv_string_attr_dup_t string; #else char *string; #endif int string_y; Xv_opaque exten_data; /* client data for extensions */ struct timeval click_time; /* double-click detection */ struct { unsigned edit_selected : 1; /* selected in edit mode */ #ifndef OW_I18N unsigned free_string : 1; /* free malloc'ed string */ #endif unsigned selected : 1; /* selected in read mode (= current) */ unsigned show : 1; /* row is to be painted */ unsigned row_inactive : 1; /* row is inactive */ } f; /* flags */ /* Chaining */ struct panel_list_row_struct *next; struct panel_list_row_struct *prev; }; struct panel_list_struct { Panel_item public_self; Panel parent_panel; /* Panel we're in */ Rect list_box; /* Box enclosing list of rows */ Scrollbar list_sb; /* Scrollbar for list_box */ Menu edit_menu; /* Row panel edit mode menu */ Edit_op edit_op; /* current edit operation, if any */ Row_info *focus_row; /* Location Cursor is on this row */ int focus_win_x; /* x position of focus window */ int focus_win_y; /* y position of focus window */ Xv_Font font; /* font of parent panel */ #ifdef OW_I18N XFontSet font_set; /* font set of parent panel */ #else XFontStruct *font_struct; /* font structure of parent panel */ #endif Menu read_menu; /* Row panel read mode menu */ int sb_active; /* all events go to Scrollbar */ Rect sb_rect; /* Scrollbar window rectangle */ Panel_item text_item; /* Text item used during editing */ Row_info *text_item_row; /* Text item is editing this row */ int text_item_view_start; /* first row in view when text * item was made visible. */ #ifdef OW_I18N _xv_string_attr_dup_t title; #else CHAR *title; #endif int title_display_str_len; Rect title_rect; /* control */ unsigned choose_none: 1; /* no current row is okay */ unsigned choose_one : 1; /* TRUE: exclusive, FALSE: non-exclusive */ unsigned edit_mode : 1; /* TRUE: read-write, FALSE: read */ unsigned focus_win_shown : 1; /* state of XV_SHOW for focus window */ unsigned initialized : 1; /* set of XV_END_CREATE has occurred */ unsigned insert_delete_enabled; /* OK to insert or delete rows */ unsigned insert_duplicate : 1;/* OK to insert duplicate strings */ unsigned left_hand_sb: 1; /* list_box Scrollbar is on left hand side */ unsigned read_only : 1; /* TRUE: read, FALSE: read/write */ unsigned setting_current_row:1; unsigned destroy_edit_menu:1; /* flags to check if we need to */ unsigned destroy_read_menu:1; /* destroy the edit/read menu */ #ifdef OW_I18N unsigned stored_length_wc:1; /* TRUE: use PANEL_VALUE_STORED_LENGTH_WCS, FALSE: use PANEL_VALUE_STORED_LENGTH */ #endif unsigned do_dbl_click : 1; /* deliver dbl click ops */ /* sizes and positions */ unsigned short nlevels; /* Number of levels */ unsigned short height; /* Height of the scroll list */ int width; /* -1 = extend width to edge of panel * 0 = fit width to widest row * other = list box width */ unsigned short nrows; /* Number of rows */ unsigned short rows_displayed; /* Number of rows displayed */ unsigned short row_height; /* Height of each row. 0 => font height */ unsigned short string_x; /* left margin of each row's string */ /* Current data */ Row_info *rows; Row_info *current_row; /* last row selected */ Row_info *last_edit_row; /* last row selected for editing */ Row_info *last_click_row; /* last row click'd in */ }; #ifdef OW_I18N #define STRING string.pswcs.value #define TITLE title.pswcs.value #define PANEL_VALUE_I18N PANEL_VALUE_WCS #define PANEL_STRSAVE panel_strsave_wc #define XV_PF_TEXTWIDTH xv_pf_textwidth_wc #define NULL_STRING _xv_null_string_wc #else #define STRING string #define TITLE title #define PANEL_VALUE_I18N PANEL_VALUE #define PANEL_STRSAVE panel_strsave #define XV_PF_TEXTWIDTH xv_pf_textwidth #define NULL_STRING "" #endif #endif /* __panel_list_impl_h */