.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);
+}
#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
UiInteger *textnote_underline;
UiInteger *textnote_code;
+ /*
+ * Search Bar
+ */
+ UiString *search;
+ UiString *replace;
+ UiInteger *search_cs;
+ UiInteger *search_regex;
+
bool modified;
bool new_note;
};
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
ui_menuseparator();
+ ui_menuitem("Find", .onclick = action_find);
+ ui_menuitem("Replace", .onclick = action_replace);
+
+ ui_menuseparator();
ui_menuitem("Preferences", .onclick = action_preferences);
}
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;
}
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_textfield(obj, .hexpand = TRUE);
+ ui_textfield(obj, .hexpand = TRUE, .onactivate = ui_searchbar_next, .varname = "search");
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_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));
}
}
}
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));
+ }
+}
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);
+
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++) { }
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);
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;
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
UiLayout layout = UI_ARGS2LAYOUT(args);
ct->add(ct, widget, &layout);
+ uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
+
return widget;
}
UiLayout layout = UI_ARGS2LAYOUT(args);
ct->add(ct, progressbar, &layout);
+ uic_widget_set_visibility_states(obj->ctx, progressbar, args->visibility_states);
+
return progressbar;
}
UiLayout layout = UI_ARGS2LAYOUT(args);
ct->add(ct, spinner, &layout);
+ uic_widget_set_visibility_states(obj->ctx, spinner, args->visibility_states);
+
return spinner;
}
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) {
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;
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;
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;
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();
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);
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);
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);
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);
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);
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);
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;
}
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;
}
}
}
- 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;
}
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;
}
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);
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
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) {
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);
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));
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) {
void *onclickdata;
const int *states;
+ const int *visibility_states;
} UiButtonArgs;
typedef struct UiToggleArgs {
int enable_state;
const int *states;
+ const int *visibility_states;
} UiToggleArgs;
typedef struct UiLinkButtonArgs {
UiLinkType type;
const int *states;
+ const int *visibility_states;
} UiLinkButtonArgs;
#define ui_button(obj, ...) ui_button_create(obj, &(UiButtonArgs){ __VA_ARGS__ } )
UiLabelStyle style;
UiString* value;
const char* varname;
+
+ const int *visibility_states;
} UiLabelArgs;
typedef struct UiProgressbarArgs {
double max;
UiDouble* value;
const char* varname;
+
+ const int *visibility_states;
} UiProgressbarArgs;
typedef struct UiProgressbarSpinnerArgs {
UiInteger* value;
const char* varname;
+
+ const int *visibility_states;
} UiProgressbarSpinnerArgs;
/* label widgets */
void *onchangedata;
const int *states;
+ const int *visibility_states;
} UiTextAreaArgs;
typedef struct UiTextFieldArgs {
void *onactivatedata;
const int *states;
+ const int *visibility_states;
} UiTextFieldArgs;
typedef struct UiPathElmRet {
void *ondragcompletedata;
ui_callback ondrop;
void *ondropsdata;
+
+ const int *visibility_states;
} UiPathTextFieldArgs;
#define ui_textarea(obj, ...) ui_textarea_create(obj, &(UiTextAreaArgs) { __VA_ARGS__ })