extern "C" {
#endif
+#define APP_STATE_HIDE_NOTELIST 80
#define APP_STATE_NOTEBOOK_SELECTED 100
#define APP_STATE_NOTE_SELECTED 110
#define APP_STATE_NOTE_HAS_ATTACHMENTS 201
ui_toolbar_item("GoForward", .icon = UI_ICON_GO_FORWARD, .onclick = action_go_forward);
ui_toolbar_item("AddNote", .icon = UI_ICON_ADD, .onclick = action_note_new, .groups = UI_GROUPS(APP_STATE_NOTEBOOK_SELECTED));
+ ui_toolbar_item("GoBack2", .icon = UI_ICON_GO_BACK, .onclick = action_go_back, .visibility_states = UI_GROUPS(APP_STATE_HIDE_NOTELIST));
+ ui_toolbar_item("GoForward2", .icon = UI_ICON_GO_FORWARD, .onclick = action_go_forward, .visibility_states = UI_GROUPS(APP_STATE_HIDE_NOTELIST));
+
ui_toolbar_add_default("GoBack", UI_TOOLBAR_LEFT);
ui_toolbar_add_default("GoForward", UI_TOOLBAR_LEFT);
ui_toolbar_add_default("AddNote", UI_TOOLBAR_LEFT);
+
+ ui_toolbar_add_default("GoBack2", UI_TOOLBAR_RIGHTPANEL_LEFT);
+ ui_toolbar_add_default("GoForward2", UI_TOOLBAR_RIGHTPANEL_LEFT);
}
void window_notelist_setvisible(MainWindow *window, UiBool visible) {
ui_splitview_window_set_visible(window->obj, 0, visible);
window->notelist_isvisible = visible;
+ if(visible) {
+ ui_unset_group(window->obj->ctx, APP_STATE_HIDE_NOTELIST);
+ } else {
+ ui_set_group(window->obj->ctx, APP_STATE_HIDE_NOTELIST);
+ }
}
void window_sidebar_getvalue(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata) {
case UI_ICON_TEXT_FREE: {
break;
}
+ case UI_STRING_EDITABLE: {
+ break;
+ }
+ case UI_BOOL_EDITABLE: {
+ break;
+ }
}
if(freeResult) {
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
ui_menu_init();
+ NSLog(@"toolkit applicationDidFinishLaunching");
ui_cocoa_onstartup();
}
}
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
+ return NULL; // TODO
+}
+
+UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args) {
+ return NULL; // TODO
+}
+
+UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
+ return NULL; // TODO
+}
+
+UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
+ return NULL; // TODO
+}
+
void ui_container_begin_close(UiObject *obj) {
*/
#import "label.h"
-#import "container.h"
+#import "Container.h"
#import <string.h>
/* --------------------------- SourceList --------------------------- */
+static ui_sourcelist_update_func sclist_update_callback = NULL;
+
+void ui_sourcelist_set_update_callback(ui_sourcelist_update_func cb) {
+ sclist_update_callback = cb;
+}
+
+void ui_sourcelist_updated(void) {
+ if(sclist_update_callback) {
+ sclist_update_callback();
+ }
+}
+
static void sublist_free(const CxAllocator *a, UiSubList *sl) {
cxFree(a, (char*)sl->varname);
cxFree(a, (char*)sl->header);
COCOAOBJ += widget.o
COCOAOBJ += image.o
COCOAOBJ += entry.o
+COCOAOBJ += TabView.o
TOOLKITOBJS += $(COCOAOBJ:%=$(COCOA_OBJPRE)%)
TOOLKITSOURCE += $(COCOAOBJ:%.o=cocoa/%.m)
#include "../common/context.h"
#include "../common/object.h"
-@interface UiAppCallback : NSObject {
- ui_threadfunc callback;
- void *userdata;
-}
+@interface UiAppCallback : NSObject
+
+@property ui_threadfunc callback;
+@property void *userdata;
- (id) initWithCallback:(ui_threadfunc)func userdata:(void*)userdata;
/* ------------------- App Init / Event Loop functions ------------------- */
+
void ui_init(const char *appname, int argc, char **argv) {
application_name = appname;
app_argc = argc;
uic_load_app_properties();
- [NSApplication sharedApplication];
+ NSApplication *app = [NSApplication sharedApplication];
+ //[app setActivationPolicy:NSApplicationActivationPolicyRegular];
+
//[NSBundle loadNibNamed:@"MainMenu" owner:NSApp ];
//[[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:NSApp topLevelObjects:&topLevelObjects];
@implementation UiAppCallback
- (id) initWithCallback:(ui_threadfunc)func userdata:(void*)userdata {
- self->callback = func;
- self->userdata = userdata;
+ _callback = func;
+ _userdata = userdata;
return self;
}
}
- (void) mainThread:(id)n {
- callback(userdata);
+ if(_callback) {
+ _callback(_userdata);
+ }
}
@end
*/
#import "toolkit.h"
-#import "container.h"
+#import "Container.h"
#import "../ui/widget.h"
}
+UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args) {
+ // TODO
+ return NULL;
+}
+
/* custom widget */
#include <cx/mempool.h>
+static int window_default_width = 650;
+static int window_default_height = 550;
+
+static int splitview_window_default_pos = -1;
+static UiBool splitview_window_use_prop = TRUE;
static UiObject* create_window(const char *title, BOOL simple, BOOL sidebar, BOOL splitview) {
UiObject *obj = uic_object_new_toplevel();
}
UiObject* ui_splitview_window(const char *title, UiBool sidebar) {
+ sleep(1);
return create_window(title, FALSE, sidebar, TRUE);
}
+void ui_window_size(UiObject *obj, int width, int height) {
+ // TODO
+}
+
+void ui_window_default_size(int width, int height) {
+ window_default_width = width;
+ window_default_height = height;
+}
+
/* --------------------------------- File Dialogs --------------------------------- */
void ui_openfiledialog(UiObject *obj, unsigned int mode, ui_callback file_selected_callback, void *cbdata) {
#include <stdio.h>
#include <stdlib.h>
-
#include "object.h"
#include "context.h"
}
UiObject* uic_object_new_toplevel(void) {
+ fflush(stdout);
CxMempool *mp = cxMempoolCreateSimple(256);
UiObject *obj = cxCalloc(mp->allocator, 1, sizeof(UiObject));
+ fflush(stdout);
obj->ctx = uic_context(obj, mp);
obj->ctx->parent = ui_global_context();
+ fflush(stdout);
uic_object_created(obj);
+ fflush(stdout);
return obj;
}
return str ? strdup(str) : NULL;\r
}\r
\r
-static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups) {\r
+static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups, size_t *nvstates) {\r
UiToolbarItemArgs newargs;\r
newargs.label = nl_strdup(args->label);\r
newargs.icon = nl_strdup(args->icon);\r
newargs.onclick = args->onclick;\r
newargs.onclickdata = args->onclickdata;\r
newargs.groups = uic_copy_groups(args->groups, ngroups);\r
+ newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates);\r
return newargs;\r
}\r
\r
void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args) {\r
UiToolbarItem* item = malloc(sizeof(UiToolbarItem));\r
item->item.type = UI_TOOLBAR_ITEM;\r
- item->args = itemargs_copy(args, &item->ngroups);\r
+ item->args = itemargs_copy(args, &item->ngroups, &item->nvstates);\r
cxMapPut(toolbar_items, name, item);\r
}\r
\r
\r
-static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups) {\r
+static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups, size_t *nvstates) {\r
UiToolbarToggleItemArgs newargs;\r
newargs.label = nl_strdup(args->label);\r
newargs.icon = nl_strdup(args->icon);\r
newargs.onchange = args->onchange;\r
newargs.onchangedata = args->onchangedata;\r
newargs.groups = uic_copy_groups(args->groups, ngroups);\r
+ newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates);\r
return newargs;\r
}\r
\r
void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args) {\r
UiToolbarToggleItem* item = malloc(sizeof(UiToolbarToggleItem));\r
item->item.type = UI_TOOLBAR_TOGGLEITEM;\r
- item->args = toggleitemargs_copy(args, &item->ngroups);\r
+ item->args = toggleitemargs_copy(args, &item->ngroups, &item->nvstates);\r
cxMapPut(toolbar_items, name, item);\r
}\r
\r
-static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args) {\r
+static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args, size_t *nvstates) {\r
UiToolbarMenuArgs newargs;\r
newargs.label = nl_strdup(args->label);\r
newargs.icon = nl_strdup(args->icon);\r
newargs.tooltip = nl_strdup(args->tooltip);\r
+ newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates);\r
return newargs;\r
}\r
\r
UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem));\r
item->item.type = UI_TOOLBAR_MENU;\r
memset(&item->menu, 0, sizeof(UiMenu));\r
- item->args = menuargs_copy(args);\r
+ item->args = menuargs_copy(args, &item->nvstates);\r
\r
item->end = 0;\r
\r
UiToolbarItemI item;\r
UiToolbarItemArgs args;\r
size_t ngroups;\r
+ size_t nvstates;\r
};\r
\r
struct UiToolbarToggleItem {\r
UiToolbarItemI item;\r
UiToolbarToggleItemArgs args;\r
size_t ngroups;\r
+ size_t nvstates;\r
};\r
\r
struct UiToolbarMenuItem {\r
UiToolbarItemI item;\r
UiMenu menu;\r
UiToolbarMenuArgs args;\r
+ size_t nvstates;\r
int end;\r
};\r
\r
{
GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.tooltip, item->args.onclick, item->args.onclickdata, 0, FALSE);
ui_set_widget_groups(obj->ctx, button, item->args.groups);
+ ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states);
WIDGET_ADD_CSS_CLASS(button, "flat");
headerbar_add(headerbar, box, button, pos);
}
{
GtkWidget *button = gtk_toggle_button_new();
ui_set_widget_groups(obj->ctx, button, item->args.groups);
+ ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states);
WIDGET_ADD_CSS_CLASS(button, "flat");
ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, 0);
headerbar_add(headerbar, box, button, pos);
#if GTK_MAJOR_VERSION >= 4
GtkWidget *menubutton = gtk_menu_button_new();
+ ui_set_widget_visibility_states(obj->ctx, menubutton, item->args.visibility_states);
if(item->args.label) {
gtk_menu_button_set_label(GTK_MENU_BUTTON(menubutton), item->args.label);
}
ui_set_enabled(widget, FALSE);
}
}
+
+void ui_set_widget_visibility_states(UiContext *ctx, GtkWidget *widget, const int *states) {
+ if(!states) {
+ return;
+ }
+ size_t nstates = uic_group_array_size(states);
+ ui_set_widget_nvisibility_states(ctx, widget, states, nstates);
+}
+
+
+void ui_set_widget_nvisibility_states(UiContext *ctx, GtkWidget *widget, const int *states, size_t ngroups) {
+ if(ngroups > 0) {
+ uic_add_group_widget_i(ctx, widget, (ui_enablefunc)ui_set_visible, states, ngroups);
+ ui_set_visible(widget, FALSE);
+ }
+}
void ui_set_name_and_style(GtkWidget *widget, const char *name, const char *style);
void ui_set_widget_groups(UiContext *ctx, GtkWidget *widget, const int *groups);
void ui_set_widget_ngroups(UiContext *ctx, GtkWidget *widget, const int *groups, size_t ngroups);
+void ui_set_widget_visibility_states(UiContext *ctx, GtkWidget *widget, const int *states);
+void ui_set_widget_nvisibility_states(UiContext *ctx, GtkWidget *widget, const int *states, size_t ngroups);
void ui_destroy_userdata(GtkWidget *object, void *userdata);
void ui_destroy_vardata(GtkWidget *object, UiVarEventData *data);
return;
}
-#ifdef UI_LIBADWAITA
- gtk_widget_set_visible(gtk_widget_get_parent(panel), visible);
-#else
gtk_widget_set_visible(panel, visible);
-#endif
}
#ifdef UI_LIBADWAITA
void* onclickdata;
const int *groups;
+ const int *visibility_states;
} UiToolbarItemArgs;
typedef struct UiToolbarToggleItemArgs {
void *onchangedata;
const int *groups;
+ const int *visibility_states;
} UiToolbarToggleItemArgs;
typedef struct UiToolbarMenuArgs {
const char *label;
const char *icon;
const char *tooltip;
+ const int *visibility_states;
} UiToolbarMenuArgs;
enum UiToolbarPos {