static void _enum_display (Ewl_Widget *w, void *ev_data, void *user_data) { Ecrin_Hash_Data *data; Ecrin_Enum *e; Ecrin_Enum_Item *item; char str[4096]; data = (Ecrin_Hash_Data *)user_data; e = (Ecrin_Enum *)data->data; ewl_text_text_set (EWL_TEXT (text), data->efl_name); ewl_text_text_append (EWL_TEXT (text), "\n"); ewl_text_text_append (EWL_TEXT (text), "\n"); snprintf (str, 4096, "enum %s\n", e->name); ewl_text_text_append (EWL_TEXT (text), str); ewl_text_text_append (EWL_TEXT (text), "{\n"); ecore_list_first_goto (e->items); while ((item = ecore_list_next (e->items))) { snprintf (str, 4096, " %s", item->name); ewl_text_text_append (EWL_TEXT (text), str); if (item->value) snprintf (str, 4096, " = %s", item->value); ewl_text_text_append (EWL_TEXT (text), str); if (ecore_list_index (e->items) != ecore_list_count (e->items)) ewl_text_text_append (EWL_TEXT (text), ","); ewl_text_text_append (EWL_TEXT (text), "\n"); } ewl_text_text_append (EWL_TEXT (text), "};\n"); }
static void help_reader_text_cb_enter(void *data, Eli_Help_Reader_Node *styles, size_t len) { Help_Reader_Window * win = data; Ewl_Text * t = EWL_TEXT(win->text); size_t last = len - 1; if (styles[last].type == ELI_HELP_READER_NODE_PARAGRAPH) { ewl_text_font_size_set(t, 12); ewl_text_text_append(t, "\t"); } if (styles[last].type == ELI_HELP_READER_NODE_HEADER) { ewl_text_font_size_set(t, 12); ewl_text_text_append(t, "\n"); } }
static void help_reader_text_cb_leave(void *data, Eli_Help_Reader_Node *styles, size_t len) { Help_Reader_Window *win = data; Ewl_Text *t = EWL_TEXT(win->text); size_t last = len - 1; switch (styles[last].type) { case ELI_HELP_READER_NODE_HEADER: ewl_text_text_append(t, "\n"); ewl_text_font_size_set(t, 6); ewl_text_text_append(t, "\n"); break; case ELI_HELP_READER_NODE_BLOCK: case ELI_HELP_READER_NODE_PARAGRAPH: ewl_text_text_append(t, "\n"); break; default: break; } }
static void _define_display (Ewl_Widget *w, void *ev_data, void *user_data) { Ecrin_Hash_Data *data; Ecrin_Define *define; char str[4096]; char *p; char *iter; data = (Ecrin_Hash_Data *)user_data; define = (Ecrin_Define *)data->data; ewl_text_text_set (EWL_TEXT (text), data->efl_name); ewl_text_text_append (EWL_TEXT (text), "\n"); ewl_text_text_append (EWL_TEXT (text), "\n"); snprintf (str, 4096, "#define %s", define->name); ewl_text_text_append (EWL_TEXT (text), str); iter = define->value; if (define->value) { while ((p = strchr (iter, '\\')) != NULL) { char *string; int l; l = p - iter; string = strndup (iter, l); snprintf (str, 4096, " %s\n", string); ewl_text_text_append (EWL_TEXT (text), str); free (string); iter = p + 1; } } snprintf (str, 4096, " %s\n", iter); ewl_text_text_append (EWL_TEXT (text), str); remove_description (define->value); }
static void _function_display (Ewl_Widget *w, void *ev_data, void *user_data) { Ecrin_Hash_Data *data; Ecrin_Function *function; Ecrin_Function_Param *param; char str[4096]; char space[4096]; data = (Ecrin_Hash_Data *)user_data; function = (Ecrin_Function *)data->data; ewl_text_text_set (EWL_TEXT (text), data->efl_name); ewl_text_text_append (EWL_TEXT (text), "\n"); ewl_text_text_append (EWL_TEXT (text), "\n"); snprintf (str, 4096, "%s %s (", function->return_type, function->name); ewl_text_text_append (EWL_TEXT (text), str); memset (space, ' ', 4096); space[strlen (str)] = '\0'; ecore_list_first_goto (function->params); while ((param = ecore_list_next (function->params))) { if (ecore_list_index (function->params) != 1) ewl_text_text_append (EWL_TEXT (text), space); snprintf (str, 4096, "%s", param->type); ewl_text_text_append (EWL_TEXT (text), str); if (param->name) { snprintf (str, 4096, " %s", param->name); ewl_text_text_append (EWL_TEXT (text), str); } if (ecore_list_index (function->params) != ecore_list_count (function->params)) { snprintf (str, 4096, ",\n"); ewl_text_text_append (EWL_TEXT (text), str); } else { snprintf (str, 4096, ")\n"); ewl_text_text_append (EWL_TEXT (text), str); } } }
static EWL_CALLBACK_DEFN(entry_value_changed) { Ewler_Widget_Elem *elem = user_data; char *text; text = ewl_text_text_get(EWL_TEXT(elem->entry)); if( !text ) return; switch( elem->spec->type ) { case EWLER_SPEC_ELEM_INT: elem->info.ivalue = strtol(text, NULL, 0); IF_FREE(text); if( !elem->changed ) { Ewl_Widget *parent; char *label = ewl_text_text_get(EWL_TEXT(elem->text)); parent = elem->text->parent; ewl_widget_destroy(elem->text); elem->text = ewl_text_new(""); ewl_text_color_set(EWL_TEXT(elem->text), 255, 0, 0, 255); ewl_text_text_append(EWL_TEXT(elem->text), label); ewl_container_child_append(EWL_CONTAINER(parent), elem->text); ewl_widget_show(elem->text); FREE(label); } elem->changed = true; if( elem->spec->set_func ) elem->spec->set_func(elem->w->w, elem->info.ivalue); break; case EWLER_SPEC_ELEM_STRING: if( elem->spec == name_spec ) { if( ewl_widget_name_find(text) ) { ewler_error("A widget already exists with the name %s", text); FREE(text); ewl_text_text_set(EWL_TEXT(elem->entry), elem->info.svalue); return; } form_rename_widget(elem->info.svalue, text); } elem->info.svalue = text; if( !elem->changed ) { int len; len = ewl_text_length_get(EWL_TEXT(elem->text)); ewl_text_cursor_position_set(EWL_TEXT(elem->text), 0); ewl_text_color_apply(EWL_TEXT(elem->text), 255, 0, 0, 255, len); } elem->changed = true; if( elem->spec->set_func ) elem->spec->set_func(elem->w->w, elem->info.svalue); break; default: break; } }
/* * Parser functions */ static void help_reader_text_cb_append(void *data, const char *text, Eli_Help_Reader_Node *styles, size_t len) { Help_Reader_Window * win = data; Ewl_Text * t = EWL_TEXT(win->text); size_t i; int bold = 0; int italic = 0; int pref = 0; unsigned int size = 12; unsigned int r, g, b, a; unsigned int t_len; unsigned int t_pos; r = g = b = 0; a = 255; const char * url = NULL; for (i = 0; i < len; i++) { switch (styles[i].type) { case ELI_HELP_READER_NODE_HEADER: { unsigned int h = 1; if (styles[i].parameter) h = atoi(styles[i].parameter); h--; if (h > 5) h = 5; size = 24 - h * 5; bold = 1; } break; case ELI_HELP_READER_NODE_LINK: r = 10; g = 0; b = 255; a = 255; url = styles[i].parameter; break; case ELI_HELP_READER_NODE_EMPHASIZE: italic = 1; break; case ELI_HELP_READER_NODE_STRONG: bold = 1; break; case ELI_HELP_READER_NODE_PREFORMATED: pref = 1; break; case ELI_HELP_READER_NODE_TITLE: ewl_window_title_set(EWL_WINDOW(win), text); return; case ELI_HELP_READER_NODE_BLOCK: case ELI_HELP_READER_NODE_PARAGRAPH: case ELI_HELP_READER_NODE_UNKNOWN: default: break; } } if (pref) ewl_text_font_set(t, "ewl/monospace"); else if (bold && italic) ewl_text_font_set(t, "ewl/default/bold-italic"); else if (italic) ewl_text_font_set(t, "ewl/default/italic"); else if (bold) ewl_text_font_set(t, "ewl/default/bold"); else ewl_text_font_set(t, NULL); ewl_text_font_size_set(t, size); ewl_text_color_set(t, r, g, b, a); t_pos = ewl_text_length_get(t); ewl_text_text_append(t, text); t_len = ewl_text_length_get(t) - t_pos; if (url) { Ewl_Widget * trig; trig = ewl_text_trigger_new(EWL_TEXT_TRIGGER_TYPE_TRIGGER); ewl_attach_mouse_cursor_set(trig, EWL_MOUSE_CURSOR_HAND2); ewl_text_trigger_start_pos_set(EWL_TEXT_TRIGGER(trig), t_pos); ewl_text_trigger_length_set(EWL_TEXT_TRIGGER(trig), t_len); ewl_callback_append(trig, EWL_CALLBACK_CLICKED, help_reader_trigger_cb_clicked, win); ewl_callback_append(trig, EWL_CALLBACK_DESTROY, help_reader_trigger_cb_destroy, NULL); ewl_widget_data_set(trig, TRIGGER_TXT, strdup(url)); ewl_container_child_append(EWL_CONTAINER(t), trig); ewl_widget_show(trig); } }
static void text_set(Ewl_Text *t, char *text) { char *tx1, *tx2; tx1 = tx2 = text; while (*tx1) { int mode; char remc = '\0'; /* decide what case we are dealing with */ if (isalpha(*tx1) || (*tx1 == '_')) mode = COMMAND; else if ((*tx1 == '/') && (*(tx1 + 1) == '*')) mode = C_COMMENT; else if ((*tx1 == '/') && (*(tx1 + 1) == '/')) mode = CPP_COMMENT; else if (*tx1 == '#') mode = PREPROCESSOR; else if (isdigit(*tx1)) mode = NUMBER; else if (*tx1 == '\"' && !( tx1 != text && *(tx1 - 1) == '\\')) mode = STRING; else mode = REST; /* * finde the end of the mode */ tx2++; switch (mode) { case NUMBER: case COMMAND: while(isalnum(*tx2) || (*tx2 == '_')) tx2++; break; case C_COMMENT: while((*tx2 != '\0') && (!((*tx2 == '*') && (*(tx2 + 1) == '/')))) tx2++; /* skip over the * and / characters */ if (*tx2) tx2 += 2; break; case PREPROCESSOR: case CPP_COMMENT: while((*tx2 != '\0') && (*tx2 != '\n')) tx2++; break; case STRING: while((*tx2 != '\0') && !((*tx2 == '\"') && (*(tx2 - 1) != '\\'))) tx2++; if (*tx2) tx2++; break; case REST: while(!isalnum(*tx2) && (*tx2 != '\0') && (*tx2 != '#') && (*tx2 != '/') && (*tx2 != '\"')) tx2++; break; default: break; } /* append the text */ remc = *tx2; *tx2 = '\0'; if (mode == COMMAND && ((tx2 - tx1) < 8) && string_is_keyword(key1, tx1)) ewl_text_color_set(t, 68, 144, 169, 255); else if ((mode == COMMAND) && ((tx2 - tx1) < 8) && string_is_keyword(key2, tx1)) ewl_text_color_set(t, 26, 117, 3, 255); else if (mode == STRING) ewl_text_color_set(t, 217, 0, 0, 255); else if ((mode == C_COMMENT) || (mode == CPP_COMMENT)) ewl_text_color_set(t, 106, 15, 159, 255); else if (mode == PREPROCESSOR) ewl_text_color_set(t, 153, 85, 29, 255); else if (mode == NUMBER) ewl_text_color_set(t, 255, 114, 0, 255); else ewl_text_color_set(t, 0, 0, 0, 255); ewl_text_text_append(t, tx1); *tx2 = remc; tx1 = tx2; } }
static EWL_CALLBACK_DEFN(realize) { Ewler_Widget *ewler_w = user_data; Ecore_List *elems; Ewler_Widget_Elem *elem; char *name; void *args[4]; int i, n; if( ewler_w->selected ) widget_select(ewler_w); elems = ecore_hash_keys(ewler_w->elems); while( (name = ecore_list_next(elems)) ) { elem = ecore_hash_get(ewler_w->elems, name); if( elem->spec->get_func ) switch( elem->spec->type ) { case EWLER_SPEC_ELEM_INT: elem->info.ivalue = (int) elem->spec->get_func(ewler_w->w); if( elem->entry ) { ewl_text_text_set(EWL_TEXT(elem->entry), ""); ewl_text_text_append(EWL_TEXT(elem->entry), elem_to_s(elem)); } break; case EWLER_SPEC_ELEM_STRING: IF_FREE(elem->info.svalue); elem->info.svalue = (char *) elem->spec->get_func(ewler_w->w); if( elem->entry ) ewl_text_text_set(EWL_TEXT(elem->entry), elem_to_s(elem)); break; case EWLER_SPEC_ELEM_STRUCT: n = elem->spec->info.children->nodes; for( i=0;i<n;i++ ) args[i] = elem_at_index(elem->info.children, i); switch( n ) { case 1: elem->spec->get_func(ewler_w->w, args[0]); break; case 2: elem->spec->get_func(ewler_w->w, args[0], args[1]); break; case 3: elem->spec->get_func(ewler_w->w, args[0], args[1], args[2]); break; case 4: elem->spec->get_func(ewler_w->w, args[0], args[1], args[2], args[3]); break; /* haven't seen anything higher just yet */ } break; case EWLER_SPEC_ELEM_ENUM: elem->info.evalue = (int) elem->spec->get_func(ewler_w->w); if( elem->entry ) { Ewl_Widget *item; item = ecore_hash_get(elem->items, (void *) elem->info.evalue); ewl_combo_selected_set(EWL_COMBO(elem->entry), item); } break; default: break; } else if(elem->spec->type == EWLER_SPEC_ELEM_STRUCT) /* iterate through children, since we don't have a mass get */; } ecore_list_destroy(elems); }