]> uap-core.de Git - note.git/commitdiff
implement basic text search main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 29 Jan 2026 19:54:34 +0000 (20:54 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 29 Jan 2026 19:54:34 +0000 (20:54 +0100)
21 files changed:
application/application.c
application/application.h
application/menu.c
application/note.c
application/window.c
application/window.h
ui/common/context.c
ui/common/context.h
ui/common/types.c
ui/gtk/button.c
ui/gtk/container.c
ui/gtk/display.c
ui/gtk/text.c
ui/gtk/text.h
ui/motif/button.c
ui/motif/container.c
ui/motif/label.c
ui/motif/text.c
ui/ui/button.h
ui/ui/display.h
ui/ui/text.h

index 56c8355e5004b33f88fb5a5c92b446b208c56370..29ef4ada50976dbdade6ba4c3841add44328a00f 100644 (file)
@@ -176,3 +176,13 @@ void action_note_delete(UiEvent *event, void *data) {
             .result = delete_result);
     free(msg.ptr);
 }
             .result = delete_result);
     free(msg.ptr);
 }
+
+void action_find(UiEvent *event, void *data) {
+    ui_set_state(event->obj->ctx, APP_STATE_NOTE_FIND);
+    ui_unset_state(event->obj->ctx, APP_STATE_NOTE_REPLACE);
+}
+
+void action_replace(UiEvent *event, void *data) {
+    ui_set_state(event->obj->ctx, APP_STATE_NOTE_FIND);
+    ui_set_state(event->obj->ctx, APP_STATE_NOTE_REPLACE);
+}
index c72754272ea495be13c0881cc73b08c8a75b7634..2957a2ee95c6ea30ba902bf0be65bb9601289a08 100644 (file)
@@ -42,7 +42,8 @@ extern "C" {
 #define APP_STATE_NOTEBOOK_SELECTED    100
 #define APP_STATE_NOTE_SELECTED        110
 #define APP_STATE_NOTE_HAS_ATTACHMENTS 201
 #define APP_STATE_NOTEBOOK_SELECTED    100
 #define APP_STATE_NOTE_SELECTED        110
 #define APP_STATE_NOTE_HAS_ATTACHMENTS 201
-#define APP_STATE_NOTE_SEARCHBAR       202
+#define APP_STATE_NOTE_FIND            202
+#define APP_STATE_NOTE_REPLACE         203
     
     
 #define VIEW_FLAGS_NO_BROWSER          1
     
     
 #define VIEW_FLAGS_NO_BROWSER          1
@@ -161,6 +162,14 @@ struct NoteModel {
     UiInteger *textnote_underline;
     UiInteger *textnote_code;
     
     UiInteger *textnote_underline;
     UiInteger *textnote_code;
     
+    /*
+     * Search Bar
+     */
+    UiString *search;
+    UiString *replace;
+    UiInteger *search_cs;
+    UiInteger *search_regex;
+    
     bool modified;
     bool new_note;
 };
     bool modified;
     bool new_note;
 };
@@ -199,6 +208,9 @@ void action_go_forward(UiEvent *event, void *data);
 void action_note_new(UiEvent *event, void *data);
 void action_note_delete(UiEvent *event, void *data);
 
 void action_note_new(UiEvent *event, void *data);
 void action_note_delete(UiEvent *event, void *data);
 
+void action_find(UiEvent *event, void *data);
+void action_replace(UiEvent *event, void *data);
+
 #ifdef __cplusplus
 }
 #endif
 #ifdef __cplusplus
 }
 #endif
index 96eb8478d75ac2f5600e13a02407c95848cf2dda..648ad323381f4d53a37712abe7ea5716bdc71557 100644 (file)
@@ -54,6 +54,10 @@ void toolbar_init() {
         
         ui_menuseparator();
         
         
         ui_menuseparator();
         
+        ui_menuitem("Find", .onclick = action_find);
+        ui_menuitem("Replace", .onclick = action_replace);
+        
+        ui_menuseparator();
         
         ui_menuitem("Preferences", .onclick = action_preferences);
     }
         
         ui_menuitem("Preferences", .onclick = action_preferences);
     }
index 0e65d6db6f820a2c0d72bda52927796ebb159b79..a2a506fc523ff15733c1718ecc6fd81e9cd0d6c2 100644 (file)
@@ -84,6 +84,11 @@ NoteModel* notemodel_create(const CxAllocator *note_allocator) {
     model->textnote_underline = ui_int_new(model->ctx, "note_textnote_underline");
     model->textnote_code = ui_int_new(model->ctx, "note_textnote_code");
     
     model->textnote_underline = ui_int_new(model->ctx, "note_textnote_underline");
     model->textnote_code = ui_int_new(model->ctx, "note_textnote_code");
     
+    model->search = ui_string_new(model->ctx, "search");
+    model->replace = ui_string_new(model->ctx, "replace");
+    model->search_cs = ui_int_new(model->ctx, "search_cs");
+    model->search_regex = ui_int_new(model->ctx, "search_regex");
+    
     return model;
 }
 
     return model;
 }
 
index 0bac1920c04ae40445cdc17f2d153c1a26706ff1..74b105b67d0cbceae487493493521fd1ee7eb91b 100644 (file)
@@ -118,19 +118,20 @@ void window_create() {
                     wdata->textview = ui_textarea(obj, .varname = "note_text", .vfill = TRUE, .hfill = TRUE, .hexpand = TRUE, .vexpand = TRUE, .colspan = 2, .states = UI_GROUPS(APP_STATE_NOTE_SELECTED), .fill = UI_ON);
                     editor_init_textview(obj, ui_textarea_gettextwidget(wdata->textview));
                     
                     wdata->textview = ui_textarea(obj, .varname = "note_text", .vfill = TRUE, .hfill = TRUE, .hexpand = TRUE, .vexpand = TRUE, .colspan = 2, .states = UI_GROUPS(APP_STATE_NOTE_SELECTED), .fill = UI_ON);
                     editor_init_textview(obj, ui_textarea_gettextwidget(wdata->textview));
                     
-                    ui_grid(obj, .margin = 4, .columnspacing = 4, .rowspacing = 4, .def_hfill = TRUE, .def_vfill = TRUE, .visibility_states = UI_GROUPS(APP_STATE_NOTE_SEARCHBAR)) {
+                    ui_grid(obj, .margin = 4, .columnspacing = 4, .rowspacing = 4, .def_hfill = TRUE, .def_vfill = TRUE, .visibility_states = UI_GROUPS(APP_STATE_NOTE_FIND)) {
                         ui_rlabel(obj, .label = "Find");
                         ui_rlabel(obj, .label = "Find");
-                        ui_textfield(obj, .hexpand = TRUE);
+                        ui_textfield(obj, .hexpand = TRUE, .onactivate = ui_searchbar_next, .varname = "search");
                         ui_button(obj, .label = "Previous");
                         ui_button(obj, .label = "Previous");
-                        ui_button(obj, .label = "Next");
-                        ui_checkbox(obj, .label = "Case Sensitive");
-                        ui_checkbox(obj, .label = "Regex");
+                        ui_button(obj, .label = "Next", .onclick = ui_searchbar_next);
+                        ui_checkbox(obj, .label = "Case Sensitive", .varname = "search_cs");
+                        ui_checkbox(obj, .label = "Regex", .varname = "search_regex");
+                        ui_button(obj, .icon = "window-close", .onclick = action_searchbar_close);
                         
                         ui_newline(obj);
                         
                         ui_newline(obj);
-                        ui_rlabel(obj, .label = "Replace");
-                        ui_textfield(obj, .hexpand = TRUE);
-                        ui_button(obj, .label = "Replace");
-                        ui_button(obj, .label = "Replace All");
+                        ui_rlabel(obj, .label = "Replace", .visibility_states = UI_GROUPS(APP_STATE_NOTE_REPLACE));
+                        ui_textfield(obj, .hexpand = TRUE, .varname = "replace", .visibility_states = UI_GROUPS(APP_STATE_NOTE_REPLACE));
+                        ui_button(obj, .label = "Replace", .visibility_states = UI_GROUPS(APP_STATE_NOTE_REPLACE));
+                        ui_button(obj, .label = "Replace All", .visibility_states = UI_GROUPS(APP_STATE_NOTE_REPLACE));
                     }
                 } 
             }
                     }
                 } 
             }
@@ -557,3 +558,30 @@ static void insertimg_file(UiEvent *event, void *userdata) {
 void action_textnote_insertimg(UiEvent *event, void *userdata) {
     ui_openfiledialog(event->obj, UI_FILEDIALOG_SELECT_SINGLE, insertimg_file, NULL);
 }
 void action_textnote_insertimg(UiEvent *event, void *userdata) {
     ui_openfiledialog(event->obj, UI_FILEDIALOG_SELECT_SINGLE, insertimg_file, NULL);
 }
+
+void action_searchbar_close(UiEvent *event, void *userdata) {
+    ui_unset_state(event->obj->ctx, APP_STATE_NOTE_FIND);
+    ui_unset_state(event->obj->ctx, APP_STATE_NOTE_REPLACE);
+}
+
+void ui_searchbar_next(UiEvent *event, void *userdata) {
+    NoteModel *note = notemodel_current(event->obj);
+    if(!note) {
+        return;
+    }
+    
+    char *searchstr = ui_get(note->search);
+    if(!searchstr || strlen(searchstr) == 0) {
+        return;
+    }
+    
+    cxstring text = cx_str(ui_get(note->text));
+    int pos = note->text->position(note->text);
+    cxstring subtext = cx_strsubs(text, pos);
+    
+    cxstring result = cx_strstr(subtext, searchstr);
+    if(result.ptr) {
+        size_t result_pos = result.ptr - text.ptr;
+        note->text->setselection(note->text, (int)result_pos, (int)(result_pos + result.length));
+    }
+}
index c353186800752c9c44c28b2119c73244e650bf41..c65d25f2fe6be887c2d3c21063f3e9e001083fdb 100644 (file)
@@ -87,6 +87,9 @@ void action_textnote_style_code(UiEvent *event, void *userdata);
 void action_textnote_insertlist(UiEvent *event, void *userdata);
 void action_textnote_insertimg(UiEvent *event, void *userdata);
 
 void action_textnote_insertlist(UiEvent *event, void *userdata);
 void action_textnote_insertimg(UiEvent *event, void *userdata);
 
+void action_searchbar_close(UiEvent *event, void *userdata);
+void ui_searchbar_next(UiEvent *event, void *userdata);
+
 
 
 
 
 
 
index 9ddfdb75b4c0974dfe6c4e20f17690b9b0b55f32..4909d9360b53a589fa22034ed54e4b27ac675aad 100644 (file)
@@ -621,6 +621,13 @@ void ui_widget_set_visibility_states(UiContext *ctx, UIWIDGET widget, const int
     ui_widget_set_states2(ctx, widget, (ui_enablefunc)ui_set_visible, states, nstates);
 }
 
     ui_widget_set_states2(ctx, widget, (ui_enablefunc)ui_set_visible, states, nstates);
 }
 
+void uic_widget_set_visibility_states(UiContext *ctx, UIWIDGET widget, const int *states) {
+    if(states) {
+        size_t nstates = uic_state_array_size(states);
+        ui_widget_set_visibility_states(ctx, widget, states, (int)nstates);
+    }
+}
+
 size_t uic_state_array_size(const int *states) {
     int i;
     for(i=0;states[i] >= 0;i++) { }
 size_t uic_state_array_size(const int *states) {
     int i;
     for(i=0;states[i] >= 0;i++) { }
index 407c051d963dd7d620f3cfb0120199d31a61a528..9a73efabe0f489fee5669d3ba46e1f29a5eafa1c 100644 (file)
@@ -150,6 +150,7 @@ const char *uic_type2str(UiVarType type);
 
 void uic_reg_var(UiContext *ctx, const char *name, UiVarType type, void *value);
 
 
 void uic_reg_var(UiContext *ctx, const char *name, UiVarType type, void *value);
 
+void uic_widget_set_visibility_states(UiContext *ctx, UIWIDGET widget, const int *states);
 size_t uic_state_array_size(const int *states);
 void uic_check_state_widgets(UiContext *ctx);
 void uic_add_state_widget(UiContext *ctx, void *widget, ui_enablefunc enable, CxList *states);
 size_t uic_state_array_size(const int *states);
 void uic_check_state_widgets(UiContext *ctx);
 void uic_add_state_widget(UiContext *ctx, void *widget, ui_enablefunc enable, CxList *states);
index 74b8190805ad475bb9c3233a6a84c8c1ba679a9f..67e122589c3fc8ebb728866077c6c9fd5df5b779 100644 (file)
@@ -678,6 +678,7 @@ void uic_text_copy(UiText *from, UiText *to) {
     to->insert = from->insert;
     to->setposition = from->setposition;
     to->position = from->position;
     to->insert = from->insert;
     to->setposition = from->setposition;
     to->position = from->position;
+    to->setselection = from->setselection;
     to->selection = from->selection;
     to->length = from->length;
     to->remove = from->remove;
     to->selection = from->selection;
     to->length = from->length;
     to->remove = from->remove;
index d9acdbf38284f00bb07228232705114dbee60825..9ce23bf7bf3e2faf5e07f437fe7b60f3ff1cb9fe 100644 (file)
@@ -110,6 +110,7 @@ UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, button, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, button, &layout);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     return button;
 }
 
     return button;
 }
 
@@ -317,6 +318,7 @@ static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleAr
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
     
     return widget;
 }
@@ -380,6 +382,7 @@ UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
     
     return widget;
 }
@@ -469,6 +472,7 @@ UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
     
     return widget;
 }
@@ -621,6 +625,7 @@ UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, rbutton, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, rbutton, &layout);
+    uic_widget_set_visibility_states(obj->ctx, rbutton, args->visibility_states);
     
     return rbutton;
 }
     
     return rbutton;
 }
@@ -913,6 +918,7 @@ UIWIDGET ui_linkbutton_create(UiObject *obj, UiLinkButtonArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, button, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, button, &layout);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     
     return button;
 }
     
     return button;
 }
index 6b8b736c7d26974756df9ced5238b3c07a1b243b..5489ecbdc232f26da8d95e670ded6299332c3248 100644 (file)
@@ -393,10 +393,7 @@ UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, UiSubContainerType
     UiContainerX *container = ui_box_container(obj, box, type);
     uic_object_push_container(obj, container);
     
     UiContainerX *container = ui_box_container(obj, box, type);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, box, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, box, args->visibility_states);
     
     return box;
 }
     
     return box;
 }
@@ -434,10 +431,7 @@ UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
     UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
     uic_object_push_container(obj, container);
     
     UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, grid, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, grid, args->visibility_states);
     
     return grid;
 }
     
     return grid;
 }
@@ -486,10 +480,7 @@ UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) {
         uic_object_push_container(obj, container);
     }
     
         uic_object_push_container(obj, container);
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, frame, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, frame, args->visibility_states);
     
     return frame;
 }
     
     return frame;
 }
@@ -515,10 +506,7 @@ UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args) {
         uic_object_push_container(obj, container);
     }
     
         uic_object_push_container(obj, container);
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, expander, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, expander, args->visibility_states);
     
     return expander;
 }
     
     return expander;
 }
@@ -545,10 +533,7 @@ UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) {
         uic_object_push_container(obj, container);
     }
     
         uic_object_push_container(obj, container);
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, sw, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, sw, args->visibility_states);
     
     return sw;
 }
     
     return sw;
 }
@@ -839,10 +824,7 @@ UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) {
     UiContainerX *container = ui_tabview_container(obj, widget);
     uic_object_push_container(obj, container);
     
     UiContainerX *container = ui_tabview_container(obj, widget);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, widget, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
     
     return widget;
 }
index 1f8c39e1a32104d73638e17975cd07d2a1a54814..1a4073c089b5c98fa64e6e5b26386d153c490290 100644 (file)
@@ -115,6 +115,8 @@ UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs *args) {
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
     
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
     
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
+    
     return widget;
 }
 
     return widget;
 }
 
@@ -205,6 +207,8 @@ UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args) {
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, progressbar, &layout);
     
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, progressbar, &layout);
     
+    uic_widget_set_visibility_states(obj->ctx, progressbar, args->visibility_states);
+    
     return progressbar;
 }
 
     return progressbar;
 }
 
@@ -246,6 +250,8 @@ UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, spinner, &layout);
     
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, spinner, &layout);
     
+    uic_widget_set_visibility_states(obj->ctx, spinner, args->visibility_states);
+    
     return spinner;
 }
 
     return spinner;
 }
 
index 0c352192e1f7b193148ca6c24fd32ed5f3447426..36f25b9595bf4a6781c4a9aea3fe4f4a64913d9c 100644 (file)
@@ -160,6 +160,7 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, scroll_area, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, scroll_area, &layout);
+    uic_widget_set_visibility_states(obj->ctx, scroll_area, args->visibility_states);
     
     // bind value
     if(var) {
     
     // bind value
     if(var) {
@@ -185,6 +186,7 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
         value->insert = ui_textarea_insert;
         value->setposition = ui_textarea_setposition;
         value->position = ui_textarea_position;
         value->insert = ui_textarea_insert;
         value->setposition = ui_textarea_setposition;
         value->position = ui_textarea_position;
+        value->setselection = ui_textarea_setselection;
         value->selection = ui_textarea_selection;
         value->length = ui_textarea_length;
         value->remove = ui_textarea_remove;
         value->selection = ui_textarea_selection;
         value->length = ui_textarea_length;
         value->remove = ui_textarea_remove;
@@ -294,6 +296,15 @@ int ui_textarea_position(UiText *text) {
     return text->pos;
 }
 
     return text->pos;
 }
 
+void ui_textarea_setselection(UiText *text, int begin, int end) {
+    GtkTextBuffer *buf = text->data1;
+    GtkTextIter ib;
+    GtkTextIter ie;
+    gtk_text_buffer_get_iter_at_offset(text->data1, &ib, begin);
+    gtk_text_buffer_get_iter_at_offset(text->data1, &ie, end);
+    gtk_text_buffer_select_range(buf, &ib, &ie);
+}
+
 void ui_textarea_selection(UiText *text, int *begin, int *end) {
     GtkTextIter b;
     GtkTextIter e;
 void ui_textarea_selection(UiText *text, int *begin, int *end) {
     GtkTextIter b;
     GtkTextIter e;
@@ -639,6 +650,7 @@ static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool passwor
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, textfield, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, textfield, &layout);
+    uic_widget_set_visibility_states(obj->ctx, textfield, args->visibility_states);
     
     if(var) {
         UiString *value = var->value;
     
     if(var) {
         UiString *value = var->value;
@@ -999,6 +1011,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, pathtf->stack, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, pathtf->stack, &layout);
+    uic_widget_set_visibility_states(obj->ctx, pathtf->stack, args->visibility_states);
     
     pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
     pathtf->entry = gtk_entry_new();
     
     pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
     pathtf->entry = gtk_entry_new();
@@ -1174,6 +1187,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, eventbox, &layout);
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, eventbox, &layout);
+    uic_widget_set_visibility_states(obj->ctx, eventbox, args->visibility_states);
     
     // hbox as parent for the GtkEntry and GtkButtonBox
     GtkWidget *hbox = ui_gtk_hbox_new(0);
     
     // hbox as parent for the GtkEntry and GtkButtonBox
     GtkWidget *hbox = ui_gtk_hbox_new(0);
index b7fbda499a8a2267190825bec206524eeeea1ea8..701ed7f9f111d114b02386b0907132be3ee4e89f 100644 (file)
@@ -120,6 +120,7 @@ char* ui_textarea_getsubstr(UiText *text, int begin, int end);
 void ui_textarea_insert(UiText *text, int pos, char *str);
 void ui_textarea_setposition(UiText *text, int pos);
 int ui_textarea_position(UiText *text);
 void ui_textarea_insert(UiText *text, int pos, char *str);
 void ui_textarea_setposition(UiText *text, int pos);
 int ui_textarea_position(UiText *text);
+void ui_textarea_setselection(UiText *text, int begin, int end);
 void ui_textarea_selection(UiText *text, int *begin, int *end);
 int ui_textarea_length(UiText *text);
 void ui_textarea_remove(UiText *text, int begin, int end);
 void ui_textarea_selection(UiText *text, int *begin, int *end);
 int ui_textarea_length(UiText *text);
 void ui_textarea_remove(UiText *text, int begin, int end);
index 45e7a1be1ab25c8b6d5db48bf358acdf10a3422b..babbf80b03090a1893194a26a763269b731ea570 100644 (file)
@@ -60,6 +60,7 @@ UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
     Widget button = XmCreatePushButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
     Widget button = XmCreatePushButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
@@ -117,6 +118,7 @@ UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
     Widget button = XmCreateToggleButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
     Widget button = XmCreateToggleButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
@@ -145,6 +147,7 @@ UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
     Widget button = XmCreateToggleButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
     Widget button = XmCreateToggleButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
@@ -364,6 +367,7 @@ UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args) {
     Widget button = XmCreateToggleButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
     Widget button = XmCreateToggleButton(parent, name, xargs, n);
     XtManageChild(button);
     ui_container_add(ctn, button);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
     
     ui_set_widget_groups(obj->ctx, button, args->states);
     
index d1e05991b7d2375bc34d7945489c22dd7737f04f..73c919808bfb27ae8c11d01683022daa3bf5c67e 100644 (file)
@@ -90,10 +90,7 @@ static UIWIDGET box_create(UiObject *obj, UiContainerArgs *args, UiBoxOrientatio
     UiContainerX *container = ui_box_container(obj, grid, orientation);
     uic_object_push_container(obj, container);
     
     UiContainerX *container = ui_box_container(obj, grid, orientation);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, grid, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, grid, args->visibility_states);
     
     return grid;
 }
     
     return grid;
 }
@@ -176,10 +173,7 @@ UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
     UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
     uic_object_push_container(obj, container);
     
     UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, grid, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, grid, args->visibility_states);
     
     return grid;
 }
     
     return grid;
 }
@@ -309,10 +303,7 @@ UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) {
         }
     }
     
         }
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, frame, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, frame, args->visibility_states);
     
     return frame;
 }
     
     return frame;
 }
@@ -483,10 +474,7 @@ UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args) {
     
     uic_object_push_container(obj, (UiContainerX*)ct);
     
     
     uic_object_push_container(obj, (UiContainerX*)ct);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, form, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, form, args->visibility_states);
     
     return form;
 }
     
     return form;
 }
index 2acb2c30855d826683a7b0b45aa10acb316ebe46..143996678eec533b7323ba3cf60943c1aec48461 100644 (file)
@@ -65,6 +65,7 @@ static UIWIDGET label_create(UiObject *obj, UiLabelArgs *args, int align) {
     Widget w = XmCreateLabel(parent, name, xargs, n);
     XtManageChild(w);
     ui_container_add(ctn, w);
     Widget w = XmCreateLabel(parent, name, xargs, n);
     XtManageChild(w);
     ui_container_add(ctn, w);
+    uic_widget_set_visibility_states(obj->ctx, w, args->visibility_states);
       
     XmStringFree(label);
     
       
     XmStringFree(label);
     
@@ -162,6 +163,7 @@ UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args) {
     char *name = args->name ? (char*)args->name : "progressbar";
     Widget frame = XmCreateFrame(parent, name, xargs, n);
     ui_container_add(ctn, frame);
     char *name = args->name ? (char*)args->name : "progressbar";
     Widget frame = XmCreateFrame(parent, name, xargs, n);
     ui_container_add(ctn, frame);
+    uic_widget_set_visibility_states(obj->ctx, frame, args->visibility_states);
     
     // create a button and get some informations about the height, shadow, highlight, ....
     // we want the frame to have the same dimensions as a normal button
     
     // create a button and get some informations about the height, shadow, highlight, ....
     // we want the frame to have the same dimensions as a normal button
@@ -252,6 +254,7 @@ UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args
     Widget w = XmCreateLabel(parent, name, xargs, n);
     XtManageChild(w);
     ui_container_add(ctn, w);
     Widget w = XmCreateLabel(parent, name, xargs, n);
     XtManageChild(w);
     ui_container_add(ctn, w);
+    uic_widget_set_visibility_states(obj->ctx, w, args->visibility_states);
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
     if(var) {
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
     if(var) {
index 09841df67dd6029ce19e5fd88b498b03349a3c71..877659f0f9027ee86387ff103ab6e8e47fb34bab 100644 (file)
@@ -56,6 +56,7 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
     Widget widget = XmCreateScrolledText(parent, name, xargs, n);
     XtManageChild(widget);
     ui_container_add(ctn, widget);
     Widget widget = XmCreateScrolledText(parent, name, xargs, n);
     XtManageChild(widget);
     ui_container_add(ctn, widget);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT);
     
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT);
     
@@ -408,6 +409,7 @@ static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs *args, int frame
     XtManageChild(textfield);
     ui_container_add(ctn, textfield);
     
     XtManageChild(textfield);
     ui_container_add(ctn, textfield);
     
+    uic_widget_set_visibility_states(obj->ctx, textfield, args->visibility_states);
     ui_set_widget_groups(obj->ctx, textfield, args->states);
     
     UiEventDataExt *eventdata = malloc(sizeof(UiEventDataExt));
     ui_set_widget_groups(obj->ctx, textfield, args->states);
     
     UiEventDataExt *eventdata = malloc(sizeof(UiEventDataExt));
@@ -587,6 +589,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
     
     XtManageChild(pathbar->widget);
     ui_container_add(ctn, pathbar->widget);
     
     XtManageChild(pathbar->widget);
     ui_container_add(ctn, pathbar->widget);
+    uic_widget_set_visibility_states(obj->ctx, pathbar->widget, args->visibility_states);
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
     if (var) {
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
     if (var) {
index 55367f19fc7e54e34c09738c469edf0fbaf91ce5..c7db3968f8bf049f10ab16d6f73f8c40d31cc053 100644 (file)
@@ -66,6 +66,7 @@ typedef struct UiButtonArgs {
     void *onclickdata;
     
     const int *states;
     void *onclickdata;
     
     const int *states;
+    const int *visibility_states;
 } UiButtonArgs;
 
 typedef struct UiToggleArgs {
 } UiButtonArgs;
 
 typedef struct UiToggleArgs {
@@ -96,6 +97,7 @@ typedef struct UiToggleArgs {
     int enable_state;
     
     const int *states;
     int enable_state;
     
     const int *states;
+    const int *visibility_states;
 } UiToggleArgs;
 
 typedef struct UiLinkButtonArgs {
 } UiToggleArgs;
 
 typedef struct UiLinkButtonArgs {
@@ -125,6 +127,7 @@ typedef struct UiLinkButtonArgs {
     UiLinkType type;
     
     const int *states;
     UiLinkType type;
     
     const int *states;
+    const int *visibility_states;
 } UiLinkButtonArgs;
  
 #define ui_button(obj, ...) ui_button_create(obj, &(UiButtonArgs){ __VA_ARGS__ } )
 } UiLinkButtonArgs;
  
 #define ui_button(obj, ...) ui_button_create(obj, &(UiButtonArgs){ __VA_ARGS__ } )
index 1ed1235ba3170ed93a88e6ef88c97e1a92268789..a9c585a9a4ae5c0032c4b6c5bce5d166e878f4d0 100644 (file)
@@ -71,6 +71,8 @@ typedef struct UiLabelArgs {
     UiLabelStyle style;
     UiString* value;
     const char* varname;
     UiLabelStyle style;
     UiString* value;
     const char* varname;
+    
+    const int *visibility_states;
 } UiLabelArgs;
 
 typedef struct UiProgressbarArgs {
 } UiLabelArgs;
 
 typedef struct UiProgressbarArgs {
@@ -95,6 +97,8 @@ typedef struct UiProgressbarArgs {
     double max;
     UiDouble* value;
     const char* varname;
     double max;
     UiDouble* value;
     const char* varname;
+    
+    const int *visibility_states;
 } UiProgressbarArgs;
 
 typedef struct UiProgressbarSpinnerArgs {
 } UiProgressbarArgs;
 
 typedef struct UiProgressbarSpinnerArgs {
@@ -116,6 +120,8 @@ typedef struct UiProgressbarSpinnerArgs {
 
     UiInteger* value;
     const char* varname;
 
     UiInteger* value;
     const char* varname;
+    
+    const int *visibility_states;
 } UiProgressbarSpinnerArgs;
 
 /* label widgets */
 } UiProgressbarSpinnerArgs;
 
 /* label widgets */
index 4e9265913606c4c4b5600ad61caaf5e61b2ed56e..9fed6b823d40e01d8f81634953b3952faf07b81a 100644 (file)
@@ -60,6 +60,7 @@ typedef struct UiTextAreaArgs {
     void *onchangedata;
     
     const int *states;
     void *onchangedata;
     
     const int *states;
+    const int *visibility_states;
 } UiTextAreaArgs;
     
 typedef struct UiTextFieldArgs {
 } UiTextAreaArgs;
     
 typedef struct UiTextFieldArgs {
@@ -88,6 +89,7 @@ typedef struct UiTextFieldArgs {
     void *onactivatedata;
     
     const int *states;
     void *onactivatedata;
     
     const int *states;
+    const int *visibility_states;
 } UiTextFieldArgs;
 
 typedef struct UiPathElmRet {
 } UiTextFieldArgs;
 
 typedef struct UiPathElmRet {
@@ -134,6 +136,8 @@ typedef struct UiPathTextFieldArgs {
     void *ondragcompletedata;
     ui_callback ondrop;
     void *ondropsdata;
     void *ondragcompletedata;
     ui_callback ondrop;
     void *ondropsdata;
+    
+    const int *visibility_states;
 } UiPathTextFieldArgs;
 
 #define ui_textarea(obj, ...) ui_textarea_create(obj, &(UiTextAreaArgs) { __VA_ARGS__ })
 } UiPathTextFieldArgs;
 
 #define ui_textarea(obj, ...) ui_textarea_create(obj, &(UiTextAreaArgs) { __VA_ARGS__ })