Esempio n. 1
0
File: gui_ewl.c Progetto: Limsik/e17
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");
}
Esempio n. 2
0
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");
    }
}
Esempio n. 3
0
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;
    }
}
Esempio n. 4
0
File: gui_ewl.c Progetto: Limsik/e17
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);
}
Esempio n. 5
0
File: gui_ewl.c Progetto: Limsik/e17
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);
        }
    }
}
Esempio n. 6
0
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;
	}
}
Esempio n. 7
0
/*
 * 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;
        }
}
Esempio n. 9
0
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);
}