26 if (xbutton->
button == Button1) {
30 int ret = system(command);
33 "Fail to open link", NULL);
44 int width = metrics.
width;
45 int height = metrics.
height;
47 cairo_text_extents_t extents;
50 cairo_text_extents(w->
crb,w->
label , &extents);
52 cairo_move_to (w->
crb, (width*0.5)-(extents.width/2), height-(extents.height/4));
54 cairo_new_path (w->
crb);
58 int width,
int height) {
63 Cursor c = XCreateFontCursor(wid->
app->
dpy, XC_hand2);
65 XFreeCursor(wid->
app->
dpy, c);
74static void draw_message_label(
Widget_t *w,
int width,
int height) {
76 cairo_text_extents_t extents;
78 cairo_set_font_size (w->crb, 12.0);
80 for(;i<(int)mb->lin;i++) {
81 cairo_text_extents(w->crb,mb->message[i] , &extents);
82 if (strstr(mb->message[i],
"http") != NULL) {
85 cairo_move_to (w->crb, 100, ((40)+(extents.height * (2*i))));
86 cairo_show_text(w->crb, mb->message[i]);
87 cairo_new_path (w->crb);
92static void draw_message_window(
void *w_,
void* user_data) {
96 int width_t = metrics.
width;
97 int height_t = metrics.
height;
100 cairo_rectangle(w->
crb,0,0,width_t,height_t);
107 double x = 64.0/(double)(width);
108 double y = 64.0/(double)height;
109 double x1 = (double)height/64.0;
110 double y1 = (double)(width)/64.0;
111 cairo_scale(w->
crb, x,y);
112 cairo_set_source_surface (w->
crb, w->
image, 50, 50);
113 cairo_rectangle(w->
crb,50, 50, width, height);
115 cairo_scale(w->
crb, x1,y1);
117 draw_message_label(w,width_t,height_t);
121static void draw_entry(
void *w_,
void* user_data) {
126 int width = metrics.
width;
127 int height = metrics.
height;
131 cairo_rectangle(w->
cr,0,0,width,height);
132 cairo_fill_preserve (w->
cr);
134 cairo_set_line_width(w->
cr, 2.0);
137 cairo_set_font_size (w->
cr, 9.0);
139 cairo_move_to (w->
cr, 2, 9);
140 cairo_show_text(w->
cr,
" ");
143static void entry_add_text(
void *w_,
void *label_) {
146 char *label = (
char*)label_;
151 cairo_text_extents_t extents;
153 cairo_set_font_size (w->
cr, 11.0);
162 cairo_set_font_size (w->
cr, 12.0);
165 cairo_move_to (w->
cr, 2, 12.0+extents.height);
170static void entry_clip(
Widget_t *w) {
172 cairo_text_extents_t extents;
174 cairo_set_font_size (w->
cr, 11.0);
194 cairo_set_font_size (w->
cr, 12.0);
197 cairo_move_to (w->
cr, 2, 12.0+extents.height);
202static void message_okay_callback(
void *w_,
void* user_data) {
209 pa->func.dialog_callback(pa,&mb->response);
210 }
else if(mb->message_type ==
ENTRY_BOX) {
212 if (strlen( mb->text_entry->input_label))
213 mb->text_entry->input_label[strlen( mb->text_entry->input_label)-1] = 0;
214 mb->text_entry->label = mb->text_entry->input_label;
215 pa->func.dialog_callback(pa,&mb->text_entry->label);
221static void message_no_callback(
void *w_,
void* user_data) {
229 pa->func.dialog_callback(pa,&mb->response);
245 else if (wid == w) mb->
response = response;
250static void radio_box_button_pressed(
void *w_,
void* button_,
void* user_data) {
257static void create_checkboxes(
Widget_t *w) {
259 int y = (mb->lin + 1) * 24 +12;
261 for(;i<(int)mb->sel;i++) {
268static void entry_get_text(
void *w_,
void *key_,
void *user_data) {
281 if (strlen( mb->text_entry->input_label))
282 mb->text_entry->input_label[strlen( mb->text_entry->input_label)-1] = 0;
283 mb->text_entry->label = mb->text_entry->input_label;
284 pa->func.dialog_callback(pa,&mb->text_entry->label);
289 case 11: entry_clip(w);
298 entry_add_text(w, buf);
304static void create_entry_box(
Widget_t *w) {
307 mb->text_entry =
create_widget(w->
app, w, 20, mb->height-90, mb->width-40, 40);
308 memset(mb->text_entry->input_label, 0, 32 * (
sizeof mb->text_entry->input_label[0]) );
309 mb->text_entry->func.expose_callback = entry_add_text;
310 mb->text_entry->func.key_press_callback = entry_get_text;
311 mb->text_entry->flags &= ~USE_TRANSPARENCY;
312 mb->text_entry->scale.gravity =
CENTER;
315static void check_for_message(
MessageDialog *mb,
const char *message) {
317 if(!strlen(message))
return;
319 char *ms =strdup(message);
320 char * p = strtok (ms,
"|");
324 len = max(len, (
int)strlen(mb->
message[mb->
lin-1]));
325 p = strtok (NULL,
"|");
332static void check_for_hyperlinks(
Widget_t *w) {
335 cairo_text_extents_t extents;
336 cairo_set_font_size (w->
crb, 12.0);
338 for(;i<(int)mb->
lin;i++) {
339 if (strstr(mb->
message[i],
"http") != NULL) {
340 cairo_text_extents(w->
crb,mb->
message[i] , &extents);
342 ((25)+(extents.height * (2*i))), extents.width, 16);
347static void check_for_choices(
MessageDialog *mb,
const char *choices) {
349 if(!strlen(choices))
return;
351 char *ms =strdup(choices);
352 char * p = strtok (ms,
"|");
356 len = max(len, (
int)strlen(mb->
choices[mb->
sel-1]));
357 p = strtok (NULL,
"|");
371static void mg_mem_free(
void *w_,
void* user_data) {
375 for(;i<(int)mb->
lin;i++) {
379 for(;i<(int)mb->
sel;i++) {
387 const char *message,
const char *choices) {
398 check_for_message(mb, message);
399 check_for_choices(mb, choices);
400 check_for_style(mb, style);
402 wid->
label = message;
409 check_for_hyperlinks(wid);
410 char *alternate_title = NULL;
411 char *button_title = (
char*)_(
"OK");
416 alternate_title = (
char*)_(
"INFO");
422 alternate_title = (
char*)_(
"WARNING");
428 alternate_title = (
char*)_(
"ERROR");
434 alternate_title = (
char*)_(
"QUESTION");
439 button_title = (
char*)_(
"YES");
444 alternate_title = (
char*)_(
"SELECTION");
446 create_checkboxes(wid);
451 alternate_title = (
char*)_(
"TEXT ENTRY");
453 create_entry_box(wid);
460 okay->scale.gravity =
CENTER;
461 okay->func.value_changed_callback = message_okay_callback;
xevfunc value_changed_callback
xevfunc mem_free_callback
evfunc button_press_callback
Metrics_t - struct to receive window size, position & visibility Pass this struct to os_get_window_...
void adj_set_value(Adjustment_t *adj, float value)
adj_set_value - set the current value to the Adjustment_t
int asprintf(char *strp[], const char *fmt,...)
Color_state get_color_state(Widget_t *wid)
get_color_state - get the Color_state to use in relation to the Widget_t state
void use_text_color_scheme(Widget_t *w, Color_state st)
use_text_color_scheme - use text Colors to paint on Widget_t
void use_fg_color_scheme(Widget_t *w, Color_state st)
use_fg_color_scheme - use forground Colors to paint on Widget_t
void set_pattern(Widget_t *w, Colors *from, Colors *to, Color_mod mod)
set_pattern - set pattern for the selected Colors
void use_base_color_scheme(Widget_t *w, Color_state st)
use_base_color_scheme - use base Colors to paint on Widget_t
void hyperlink_pressed(void *w_, void *button_, void *user_data)
Widget_t * create_hyperlink(Widget_t *w, char *label, int x, int y, int width, int height)
Widget_t * open_message_dialog(Widget_t *w, int style, const char *title, const char *message, const char *choices)
open_message_dialog - open a non blocking dialog window, lines in message chould be separated by the ...
void draw_hyperlink(void *w_, void *user_data)
void radio_box_set_active(Widget_t *w)
void widget_get_png(Widget_t *w, const unsigned char *name)
widget_get_png - read png into Widget_t xlib surface
void widget_set_icon_from_surface(Widget_t *w, cairo_surface_t *image)
widget_set_icon_from_surface - set icon image from cairo surface for Widget_t those icon will be used...