libxputty 0.1
Loading...
Searching...
No Matches
Data Structures | Functions
xmultilistview.h File Reference

Go to the source code of this file.

Data Structures

struct  ViewMultiList_t
 ViewMultiList_t - struct to hold information for the listview. More...
 

Functions

void multi_listview_set_active_entry (Widget_t *w, int active)
 multi_listview_set_active_entry - set the active listview entry
 
void multi_listview_unset_active_entry (Widget_t *w)
 multi_listview_unset_active_entry - unset the active listview entry
 
Widget_tcreate_multi_listview_viewport (Widget_t *parent, int elem, int width, int height)
 create_multi_listview_viewport - create a viewport on a listview to a Widget_t
 
Widget_tadd_multi_listview (Widget_t *parent, const char *label, int x, int y, int width, int height)
 add_label - add a listview to a Widget_t
 
void multi_listview_mem_free (void *w_, void *user_data)
 multi_listview_mem_free - release additional used memory when destroy the Widget_t
 
void multi_listview_remove_list (Widget_t *listview)
 multi_listview_remove_list - remove the list from a listview Widget_t
 
void multi_listview_set_list (Widget_t *listview, char **list, int list_size)
 multi_listview_set_multi_list - set a list to a listview Widget_t
 
void multi_listview_set_check_dir (Widget_t *listview, int set)
 multi_listview_set_check_dir - set optional check if list item is a directory
 
void multi_listview_set_item_size (Widget_t *listview, float set)
 multi_listview_set_item_size - set size for the icons in the viewport
 

Function Documentation

◆ add_multi_listview()

Widget_t * add_multi_listview ( Widget_t parent,
const char *  label,
int  x,
int  y,
int  width,
int  height 
)

add_label - add a listview to a Widget_t

Parameters
*parent- pointer to the Widget_t request the label
*label- Label to show on the button
x,y,width,height- the position/geometry to create the label
Returns
Widget_t* - pointer to the Widget_t label struct

Definition at line 72 of file xmultilistview.c.

73 {
74
75 Widget_t *wid = create_widget(parent->app, parent, x, y, width, height);
76 wid->label = label;
77 wid->scale.gravity = CENTER;
78 wid->flags &= ~USE_TRANSPARENCY;
80 int elem = height/75;
81 wid->adj_y = add_adjustment(wid,0.0, 0.0, 0.0, -1.0,1.0, CL_NONE);
82 wid->adj = wid->adj_y;
83 Widget_t *viewport = create_multi_listview_viewport(wid, elem, width-10, height);
84
85 ViewMultiList_t *filelist = (ViewMultiList_t*)viewport->parent_struct;
86 filelist->tooltip_text = NULL;
87 filelist->folder = surface_get_png(wid, filelist->folder, LDVAR(directory_png));
88 filelist->folder_select = surface_get_png(wid, filelist->folder_select, LDVAR(directory_select_png));
89 filelist->file = surface_get_png(wid, filelist->file, LDVAR(file_png));
90 filelist->folder_scaled = NULL;
91 filelist->folder_select_scaled = NULL;
92 filelist->file_scaled = NULL;
93 filelist->scale_down = 0.2;
94 filelist->scale_up = 1.0/0.2;
95 filelist->item_height = 375*filelist->scale_down;
96 filelist->item_width = 500*filelist->scale_down;
97 filelist->column = max(1,width/filelist->item_width);
98 filelist->icon_pos = (filelist->item_width/2) - 120/filelist->scale_up;
99 filelist->slider = add_vslider(wid, "", width-10, 0, 10, height);
100 filelist->slider->func.expose_callback = _draw_multi_listviewslider;
101 filelist->slider->adj_y = add_adjustment(filelist->slider,0.0, 0.0, 0.0, 1.0,1.0, CL_VIEWPORTSLIDER);
102 filelist->slider->adj = filelist->slider->adj_y;
103 filelist->slider->func.value_changed_callback = _set_multi_listviewport;
104 filelist->slider->scale.gravity = WESTSOUTH;
105 filelist->slider->flags &= ~USE_TRANSPARENCY;
106 filelist->slider->flags |= NO_AUTOREPEAT | NO_PROPAGATE;
107 filelist->slider->parent_struct = viewport;
108
109 return wid;
110}
xevfunc expose_callback
Definition xwidget.h:85
Gravity gravity
Definition xwidget.h:347
ViewMultiList_t - struct to hold information for the listview.
Widget_t - struct to hold the basic Widget_t info.
Definition xwidget.h:457
Resize_t scale
Definition xwidget.h:525
Adjustment_t * adj_y
Definition xwidget.h:495
Adjustment_t * adj
Definition xwidget.h:497
long long flags
Definition xwidget.h:461
const char * label
Definition xwidget.h:463
void * parent_struct
Definition xwidget.h:473
Func_t func
Definition xwidget.h:481
Xputty * app
Definition xwidget.h:465
Adjustment_t * add_adjustment(Widget_t *w, float std_value, float value, float min_value, float max_value, float step, CL_type type)
*add_adjustment - adding a adjustment to a Widget_t
Definition xadjustment.c:25
@ CL_NONE
Definition xadjustment.h:47
@ CL_VIEWPORTSLIDER
Definition xadjustment.h:65
Widget_t * create_multi_listview_viewport(Widget_t *parent, int elem, int width, int height)
create_multi_listview_viewport - create a viewport on a listview to a Widget_t
void _draw_multi_listviewslider(void *w_, void *user_data)
_draw_multi_listviewslider - draw a slider on the viewport to indicate the view point
void _draw_multi_listview(void *w_, void *user_data)
_draw_multi_listview - draw listview on expose call
void _set_multi_listviewport(void *w_, void *user_data)
_set_multi_listviewport - move the view_port to position by listviewslider state
cairo_surface_t * surface_get_png(Widget_t *w, cairo_surface_t *sf, const unsigned char *name)
surface_get_png - read png into Widget_t xlib surface
Definition xpngloader.c:104
Widget_t * add_vslider(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_vslider - add a vertical slider to a Widget_t connect to func.value_changed_callback to implement...
Definition xslider.c:30
Widget_t * create_widget(Xputty *app, Widget_t *win, int x, int y, int width, int height)
*create_widget - create a widget A Widget_t could only be created as child of a other Widget_t To...
Definition xwidget.c:265
@ CENTER
Definition xwidget.h:320
@ WESTSOUTH
Definition xwidget.h:318
@ NO_AUTOREPEAT
Definition xwidget.h:408
@ NO_PROPAGATE
Definition xwidget.h:416

References _draw_multi_listview(), _draw_multi_listviewslider(), _set_multi_listviewport(), add_adjustment(), add_vslider(), Widget_t::adj, Widget_t::adj_y, Widget_t::app, CENTER, CL_NONE, CL_VIEWPORTSLIDER, ViewMultiList_t::column, create_multi_listview_viewport(), create_widget(), Func_t::expose_callback, ViewMultiList_t::file, ViewMultiList_t::file_scaled, Widget_t::flags, ViewMultiList_t::folder, ViewMultiList_t::folder_scaled, ViewMultiList_t::folder_select, ViewMultiList_t::folder_select_scaled, Widget_t::func, Resize_t::gravity, ViewMultiList_t::icon_pos, ViewMultiList_t::item_height, ViewMultiList_t::item_width, Widget_t::label, NO_AUTOREPEAT, NO_PROPAGATE, Widget_t::parent_struct, Widget_t::scale, ViewMultiList_t::scale_down, ViewMultiList_t::scale_up, ViewMultiList_t::slider, surface_get_png(), ViewMultiList_t::tooltip_text, Func_t::value_changed_callback, and WESTSOUTH.

Referenced by open_file_dialog().

◆ create_multi_listview_viewport()

Widget_t * create_multi_listview_viewport ( Widget_t parent,
int  elem,
int  width,
int  height 
)

create_multi_listview_viewport - create a viewport on a listview to a Widget_t

Parameters
*parent- pointer to the Widget_t the listview should pop over
elem- define how many entries to show in the viewport
width- define the width of the viewport
height- define the height of the viewport
Returns
Widget_t* - pointer to the Widget_t viewport

Definition at line 46 of file xmultilistview.c.

46 {
47 Widget_t *wid = create_widget(parent->app, parent, 0, 0, width, height);
49 wid->scale.gravity = NORTHWEST;
50 ViewMultiList_t *filelist;
51 filelist = (ViewMultiList_t*)malloc(sizeof(ViewMultiList_t));
52 filelist->show_items = elem;
53 filelist->check_dir = 0;
54 wid->flags |= HAS_MEM;
55 wid->parent_struct = filelist;
56 float max_value = -elem;
57 wid->adj_y = add_adjustment(wid,0.0, 0.0, 0.0, max_value,1.0, CL_VIEWPORT);
58 wid->adj = wid->adj_y;
69 return wid;
70}
xevfunc configure_notify_callback
Definition xwidget.h:93
evfunc button_release_callback
Definition xwidget.h:101
xevfunc map_notify_callback
Definition xwidget.h:94
evfunc key_press_callback
Definition xwidget.h:104
evfunc double_click_callback
Definition xwidget.h:102
xevfunc leave_callback
Definition xwidget.h:88
xevfunc adj_callback
Definition xwidget.h:89
xevfunc mem_free_callback
Definition xwidget.h:92
evfunc motion_callback
Definition xwidget.h:103
@ CL_VIEWPORT
Definition xadjustment.h:57
void multi_listview_mem_free(void *w_, void *user_data)
multi_listview_mem_free - release additional used memory when destroy the Widget_t
void _multi_list_motion(void *w_, void *xmotion_, void *user_data)
_multi_list_motion - follow mouse pointer to set prelight item
void _multi_list_entry_released(void *w_, void *button_, void *user_data)
_multi_list_entry_released - move listview or set active entry
void _multi_list_entry_double_clicked(void *w_, void *button_, void *user_data)
_multi_list_entry_double_clicke - forward double click from list entry to list view
void _multi_list_key_pressed(void *w_, void *xkey_, void *user_data)
_multi_list_key_pressed - move listview or set active entry
void _leave_multi_list(void *w_, void *user_data)
_leave_multi_list - draw list on pointer leave
void _reconfigure_multi_listview_viewport(void *w_, void *user_data)
_reconfigure_multi_listview_viewport - reconfigure the viewport adjustment on size changes
void _set_multi_listview_viewpoint(void *w_, void *user_data)
_set_multi_listview_viewpoint - move the view_port to position
void _draw_multi_list(void *w_, void *user_data)
_draw_multi_list - draw list on expose call
void os_set_input_mask(Widget_t *w)
os_set_input_mask - set the Event mask to a Widget_t only work on linux, stub on Windows
@ NORTHWEST
Definition xwidget.h:300
@ HAS_MEM
Definition xwidget.h:406

References _draw_multi_list(), _leave_multi_list(), _multi_list_entry_double_clicked(), _multi_list_entry_released(), _multi_list_key_pressed(), _multi_list_motion(), _reconfigure_multi_listview_viewport(), _set_multi_listview_viewpoint(), add_adjustment(), Widget_t::adj, Func_t::adj_callback, Widget_t::adj_y, Widget_t::app, Func_t::button_release_callback, ViewMultiList_t::check_dir, CL_VIEWPORT, Func_t::configure_notify_callback, create_widget(), Func_t::double_click_callback, Func_t::expose_callback, Widget_t::flags, Widget_t::func, Resize_t::gravity, HAS_MEM, Func_t::key_press_callback, Func_t::leave_callback, Func_t::map_notify_callback, Func_t::mem_free_callback, Func_t::motion_callback, multi_listview_mem_free(), NORTHWEST, os_set_input_mask(), Widget_t::parent_struct, Widget_t::scale, and ViewMultiList_t::show_items.

Referenced by add_multi_listview().

◆ multi_listview_mem_free()

void multi_listview_mem_free ( void *  w_,
void *  user_data 
)

multi_listview_mem_free - release additional used memory when destroy the Widget_t

Parameters
*w_- void pointer to the Widget_t
*user_data- void pointer to attached user_data

Definition at line 112 of file xmultilistview.c.

112 {
113 Widget_t *w = (Widget_t*)w_;
115 cairo_surface_destroy(filelist->folder);
116 cairo_surface_destroy(filelist->folder_select);
117 cairo_surface_destroy(filelist->file);
118 cairo_surface_destroy(filelist->folder_scaled);
119 cairo_surface_destroy(filelist->folder_select_scaled);
120 cairo_surface_destroy(filelist->file_scaled);
121 free(filelist->tooltip_text);
122 free(filelist);
123}

References ViewMultiList_t::file, ViewMultiList_t::file_scaled, ViewMultiList_t::folder, ViewMultiList_t::folder_scaled, ViewMultiList_t::folder_select, ViewMultiList_t::folder_select_scaled, Widget_t::parent_struct, and ViewMultiList_t::tooltip_text.

Referenced by create_multi_listview_viewport().

◆ multi_listview_remove_list()

void multi_listview_remove_list ( Widget_t listview)

multi_listview_remove_list - remove the list from a listview Widget_t

Parameters
*listview- pointer to the Widget_t listview which should show the list

Definition at line 125 of file xmultilistview.c.

125 {
126 Widget_t* view_port = listview->childlist->childs[0];
127 ViewMultiList_t *filelist = (ViewMultiList_t*)view_port->parent_struct;
128 filelist->list_names = NULL;
129 filelist->list_size = 0;
130 Metrics_t metrics;
131 os_get_window_metrics(listview, &metrics);
132 int height = metrics.height;
133 float elem = height/filelist->item_height;
134 set_adjustment(listview->adj,0.0, 0.0, 0.0, -1.0,1.0, CL_NONE);
135 set_adjustment(view_port->adj,0.0, 0.0, 0.0, -elem,1.0, CL_VIEWPORT);
136 adj_set_value(filelist->slider->adj,0.0);
137}
Widget_t ** childs
Definition xchildlist.h:51
Metrics_t - struct to receive window size, position & visibility Pass this struct to os_get_window_...
Childlist_t * childlist
Definition xwidget.h:499
void adj_set_value(Adjustment_t *adj, float value)
adj_set_value - set the current value to the Adjustment_t
void set_adjustment(Adjustment_t *adj, float std_value, float value, float min_value, float max_value, float step, CL_type type)
*set_adjustment - set a new range to a existing Adjustment_t or create if it not exists yet
Definition xadjustment.c:80
void os_get_window_metrics(Widget_t *w, Metrics_t *metrics)
os_get_window_metrics - Get the Merics_t struct related to a Widget_t

References Widget_t::adj, adj_set_value(), Widget_t::childlist, Childlist_t::childs, CL_NONE, CL_VIEWPORT, Metrics_t::height, ViewMultiList_t::item_height, ViewMultiList_t::list_names, ViewMultiList_t::list_size, os_get_window_metrics(), Widget_t::parent_struct, set_adjustment(), and ViewMultiList_t::slider.

◆ multi_listview_set_active_entry()

void multi_listview_set_active_entry ( Widget_t w,
int  active 
)

multi_listview_set_active_entry - set the active listview entry

Parameters
*w- void pointer to the Widget_t listview
active- the active entry (int)

Definition at line 28 of file xmultilistview.c.

28 {
29 if(active<0) return;
30 Widget_t* view_port = w->childlist->childs[0];
31 ViewMultiList_t *filelist = (ViewMultiList_t*)view_port->parent_struct;
32 float value = (float)active;
33 if (value>w->adj->max_value) value = w->adj->max_value;
34 else if (value<w->adj->min_value) value = w->adj->min_value;
35 filelist->active_item = (int)value;
36 adj_set_value(w->adj,filelist->active_item);
37}
float min_value
Definition xadjustment.h:90
float max_value
Definition xadjustment.h:92

References ViewMultiList_t::active_item, Widget_t::adj, adj_set_value(), Widget_t::childlist, Childlist_t::childs, Adjustment_t::max_value, Adjustment_t::min_value, and Widget_t::parent_struct.

Referenced by open_file_dialog().

◆ multi_listview_set_check_dir()

void multi_listview_set_check_dir ( Widget_t listview,
int  set 
)

multi_listview_set_check_dir - set optional check if list item is a directory

Parameters
*listview- pointer to the Widget_t listview which should show the list
set- 0 = no check (default); 1 = check

Definition at line 150 of file xmultilistview.c.

150 {
151 Widget_t* view_port = listview->childlist->childs[0];
152 ViewMultiList_t *filelist = (ViewMultiList_t*)view_port->parent_struct;
153 filelist->check_dir = set;
154}

References ViewMultiList_t::check_dir, Widget_t::childlist, Childlist_t::childs, and Widget_t::parent_struct.

Referenced by open_file_dialog().

◆ multi_listview_set_item_size()

void multi_listview_set_item_size ( Widget_t listview,
float  set 
)

multi_listview_set_item_size - set size for the icons in the viewport

Parameters
*listview- pointer to the Widget_t listview which should show the list
set- scale factor range from 0.1 <-> 0.4

Definition at line 175 of file xmultilistview.c.

175 {
176 Widget_t* view_port = listview->childlist->childs[0];
177 ViewMultiList_t *filelist = (ViewMultiList_t*)view_port->parent_struct;
178 filelist->scale_down = set;
179 filelist->scale_up = 1.0/set;
180 filelist->item_height = 375*filelist->scale_down;
181 filelist->item_width = 500*filelist->scale_down;
183 filelist->folder_scaled = scale_image(listview,filelist,filelist->folder, filelist->folder_scaled);
184 filelist->folder_select_scaled = scale_image(listview,filelist,filelist->folder_select, filelist->folder_select_scaled);
185 filelist->file_scaled = scale_image(listview,filelist,filelist->file, filelist->file_scaled);
186 expose_widget(view_port);
187}
cairo_surface_t * scale_image(Widget_t *listview, ViewMultiList_t *filelist, cairo_surface_t *orig, cairo_surface_t *scaled)
void expose_widget(Widget_t *w)
expose_widgets - send a expose event (EXPOSE) to a Widget_t
Definition xwidget.c:445

References _reconfigure_multi_listview_viewport(), Widget_t::childlist, Childlist_t::childs, expose_widget(), ViewMultiList_t::file, ViewMultiList_t::file_scaled, ViewMultiList_t::folder, ViewMultiList_t::folder_scaled, ViewMultiList_t::folder_select, ViewMultiList_t::folder_select_scaled, ViewMultiList_t::item_height, ViewMultiList_t::item_width, Widget_t::parent_struct, ViewMultiList_t::scale_down, scale_image(), and ViewMultiList_t::scale_up.

Referenced by multi_listview_set_list().

◆ multi_listview_set_list()

void multi_listview_set_list ( Widget_t listview,
char **  list,
int  list_size 
)

multi_listview_set_multi_list - set a list to a listview Widget_t

Parameters
*listview- pointer to the Widget_t listview which should show the list
**list- pointer to the list
list_size- how many items contain the list

Definition at line 139 of file xmultilistview.c.

139 {
140 Widget_t* view_port = listview->childlist->childs[0];
141 ViewMultiList_t *filelist = (ViewMultiList_t*)view_port->parent_struct;
142 filelist->list_names = list;
143 filelist->list_size = list_size;
144 set_adjustment(listview->adj,0.0, 0.0, 0.0, (float)(list_size-1.0),1.0, CL_NONE);
145 float max_value = view_port->adj->max_value+ (float)list_size;
146 set_adjustment(view_port->adj,0.0, 0.0, 0.0, max_value,1.0, CL_VIEWPORT);
147 multi_listview_set_item_size(listview, filelist->scale_down);
148}
void multi_listview_set_item_size(Widget_t *listview, float set)
multi_listview_set_item_size - set size for the icons in the viewport

References Widget_t::adj, Widget_t::childlist, Childlist_t::childs, CL_NONE, CL_VIEWPORT, ViewMultiList_t::list_names, ViewMultiList_t::list_size, Adjustment_t::max_value, multi_listview_set_item_size(), Widget_t::parent_struct, ViewMultiList_t::scale_down, and set_adjustment().

◆ multi_listview_unset_active_entry()

void multi_listview_unset_active_entry ( Widget_t w)

multi_listview_unset_active_entry - unset the active listview entry

Parameters
*w- void pointer to the Widget_t listview

Definition at line 39 of file xmultilistview.c.

39 {
40 Widget_t* view_port = w->childlist->childs[0];
41 ViewMultiList_t *filelist = (ViewMultiList_t*)view_port->parent_struct;
42 filelist->active_item = -1;
43 filelist->prelight_item = -1;
44}

References ViewMultiList_t::active_item, Widget_t::childlist, Childlist_t::childs, Widget_t::parent_struct, and ViewMultiList_t::prelight_item.

Referenced by open_file_dialog().