libxputty 0.1
Loading...
Searching...
No Matches
xlistview.c
Go to the documentation of this file.
1/*
2 * 0BSD
3 *
4 * BSD Zero Clause License
5 *
6 * Copyright (c) 2019 Hermann Meyer
7 *
8 * Permission to use, copy, modify, and/or distribute this software for any
9 * purpose with or without fee is hereby granted.
10
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13 * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 *
19 */
20
21
22#include "xlistview.h"
23#include "xlistview_private.h"
24#include "xtooltip.h"
25#include "xslider.h"
26
27
28void listview_set_active_entry(Widget_t *w, int active) {
29 if(active<0) return;
30 Widget_t* view_port = w->childlist->childs[0];
31 ViewList_t *filelist = (ViewList_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}
38
40 Widget_t* view_port = w->childlist->childs[0];
41 ViewList_t *filelist = (ViewList_t*)view_port->parent_struct;
42 filelist->active_item = -1;
43 filelist->prelight_item = -1;
44}
45
46Widget_t* create_listview_viewport(Widget_t *parent, int elem, int width, int height) {
47 Widget_t *wid = create_widget(parent->app, parent, 0, 0, width, height);
49 wid->scale.gravity = NORTHWEST;
50 ViewList_t *filelist;
51 filelist = (ViewList_t*)malloc(sizeof(ViewList_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}
71
72Widget_t* add_listview(Widget_t *parent, const char * label,
73 int x, int y, int width, int height) {
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/25;
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_listview_viewport(wid, elem, width-10, height);
84
85 ViewList_t *filelist = (ViewList_t*)viewport->parent_struct;
86 filelist->folder = surface_get_png(wid, filelist->folder, LDVAR(directory_png));
87 filelist->file = surface_get_png(wid, filelist->file, LDVAR(file_png));
88 filelist->slider = add_vslider(wid, "", width-10, 0, 10, height);
90 filelist->slider->adj_y = add_adjustment(filelist->slider,0.0, 0.0, 0.0, 1.0,0.0085, CL_VIEWPORTSLIDER);
91 filelist->slider->adj = filelist->slider->adj_y;
93 filelist->slider->scale.gravity = WESTSOUTH;
94 filelist->slider->flags &= ~USE_TRANSPARENCY;
95 filelist->slider->flags |= NO_AUTOREPEAT | NO_PROPAGATE;
96 filelist->slider->parent_struct = viewport;
97
98 return wid;
99}
100
101void listview_mem_free(void *w_, void* user_data) {
102 Widget_t *w = (Widget_t*)w_;
103 ViewList_t *filelist = (ViewList_t*)w->parent_struct;
104 cairo_surface_destroy(filelist->folder);
105 cairo_surface_destroy(filelist->file);
106 free(filelist);
107}
108
110 Widget_t* view_port = listview->childlist->childs[0];
111 ViewList_t *filelist = (ViewList_t*)view_port->parent_struct;
112 filelist->list_names = NULL;
113 filelist->list_size = 0;
114 Metrics_t metrics;
115 os_get_window_metrics(listview, &metrics);
116 int height = metrics.height;
117 float elem = height/25;
118 set_adjustment(listview->adj,0.0, 0.0, 0.0, -1.0,1.0, CL_NONE);
119 set_adjustment(view_port->adj,0.0, 0.0, 0.0, -elem,1.0, CL_VIEWPORT);
120 adj_set_value(filelist->slider->adj,0.0);
121}
122
123void listview_set_list(Widget_t *listview, char **list, int list_size) {
124 Widget_t* view_port = listview->childlist->childs[0];
125 ViewList_t *filelist = (ViewList_t*)view_port->parent_struct;
126 filelist->list_names = list;
127 filelist->list_size = list_size;
128 set_adjustment(listview->adj,0.0, 0.0, 0.0, (float)(list_size-1.0),1.0, CL_NONE);
129 float max_value = view_port->adj->max_value+ (float)list_size;
130 set_adjustment(view_port->adj,0.0, 0.0, 0.0, max_value,1.0, CL_VIEWPORT);
131 _configure_listview(view_port, NULL);
132}
133
134void listview_set_check_dir(Widget_t *listview, int set) {
135 Widget_t* view_port = listview->childlist->childs[0];
136 ViewList_t *filelist = (ViewList_t*)view_port->parent_struct;
137 filelist->check_dir = set;
138}
float min_value
Definition xadjustment.h:90
float max_value
Definition xadjustment.h:92
Widget_t ** childs
Definition xchildlist.h:51
xevfunc configure_notify_callback
Definition xwidget.h:93
evfunc button_release_callback
Definition xwidget.h:101
xevfunc map_notify_callback
Definition xwidget.h:94
xevfunc expose_callback
Definition xwidget.h:85
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 value_changed_callback
Definition xwidget.h:90
xevfunc mem_free_callback
Definition xwidget.h:92
evfunc motion_callback
Definition xwidget.h:103
Metrics_t - struct to receive window size, position & visibility Pass this struct to os_get_window_...
Gravity gravity
Definition xwidget.h:347
ViewList_t - struct to hold information for the listview.
Definition xlistview.h:42
int active_item
Definition xlistview.h:48
char ** list_names
Definition xlistview.h:43
int prelight_item
Definition xlistview.h:47
int list_size
Definition xlistview.h:52
int check_dir
Definition xlistview.h:53
Widget_t * slider
Definition xlistview.h:44
int show_items
Definition xlistview.h:51
cairo_surface_t * file
Definition xlistview.h:46
cairo_surface_t * folder
Definition xlistview.h:45
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
Childlist_t * childlist
Definition xwidget.h:499
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
void adj_set_value(Adjustment_t *adj, float value)
adj_set_value - set the current value to the Adjustment_t
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
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
@ CL_VIEWPORT
Definition xadjustment.h:57
@ CL_NONE
Definition xadjustment.h:47
@ CL_VIEWPORTSLIDER
Definition xadjustment.h:65
void listview_remove_list(Widget_t *listview)
listview_remove_list - remove the list from a listview Widget_t
Definition xlistview.c:109
Widget_t * add_listview(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_label - add a listview to a Widget_t
Definition xlistview.c:72
void listview_set_check_dir(Widget_t *listview, int set)
listview_set_check_dir - set optional check if list item is a directory
Definition xlistview.c:134
void listview_set_active_entry(Widget_t *w, int active)
listview_set_active_entry - set the active listview entry
Definition xlistview.c:28
void listview_mem_free(void *w_, void *user_data)
listview_mem_free - release additional used memory when destroy the Widget_t
Definition xlistview.c:101
Widget_t * create_listview_viewport(Widget_t *parent, int elem, int width, int height)
create_listview_viewport - create a viewport on a listview to a Widget_t
Definition xlistview.c:46
void listview_unset_active_entry(Widget_t *w)
listview_unset_active_entry - unset the active listview entry
Definition xlistview.c:39
void listview_set_list(Widget_t *listview, char **list, int list_size)
listview_set_list - set a list to a listview Widget_t
Definition xlistview.c:123
void _leave_list(void *w_, void *user_data)
_leave_list - draw list on pointer leave
void _list_key_pressed(void *w_, void *xkey_, void *user_data)
_list_key_pressed - move listview or set active entry
void _draw_listviewslider(void *w_, void *user_data)
_draw_listviewslider - draw a slider on the viewport to indicate the view point
void _reconfigure_listview_viewport(void *w_, void *user_data)
_reconfigure_listview_viewport - reconfigure the viewport adjustment on size changes
void _list_entry_double_clicked(void *w_, void *button_, void *user_data)
_list_entry_double_clicke - forward double click from list entry to list view
void _configure_listview(void *w_, void *user_data)
_configure_listview - configure the viewport on mapping
void _list_motion(void *w_, void *xmotion_, void *user_data)
_list_motion - follow mouse pointer to set prelight item
void _draw_list(void *w_, void *user_data)
_draw_list - draw list on expose call
void _set_listviewport(void *w_, void *user_data)
_set_listviewport - move the view_port to position by listviewslider state
void _set_listview_viewpoint(void *w_, void *user_data)
_set_listview_viewpoint - move the view_port to position
void _list_entry_released(void *w_, void *button_, void *user_data)
_list_entry_released - move listview or set active entry
void _draw_listview(void *w_, void *user_data)
_draw_listview - draw listview on expose call
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
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
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
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
@ NORTHWEST
Definition xwidget.h:300
@ NO_AUTOREPEAT
Definition xwidget.h:408
@ HAS_MEM
Definition xwidget.h:406
@ NO_PROPAGATE
Definition xwidget.h:416