| 64 appmenu_pos = UI_TOOLBAR_RIGHTPANEL_RIGHT; |
67 appmenu_pos = UI_TOOLBAR_RIGHTPANEL_RIGHT; |
| 65 } |
68 } |
| 66 } |
69 } |
| 67 |
70 |
| 68 // main toolbar |
71 // main toolbar |
| 69 ui_headerbar_add_items(obj, main_headerbar, left_defaults, UI_TOOLBAR_LEFT); |
72 ui_headerbar_add_items(obj, main_headerbar, left_defaults, UI_TOOLBAR_LEFT, NULL); |
| 70 ui_headerbar_add_items(obj, main_headerbar, center_defaults, UI_TOOLBAR_CENTER); |
73 ui_headerbar_add_items(obj, main_headerbar, center_defaults, UI_TOOLBAR_CENTER, NULL); |
| 71 |
74 |
| 72 if(appmenu && appmenu_pos == UI_TOOLBAR_RIGHT) { |
75 if(appmenu && appmenu_pos == UI_TOOLBAR_RIGHT) { |
| 73 ui_add_headerbar_menu(main_headerbar, NULL, appmenu, obj, UI_TOOLBAR_RIGHT); |
76 ui_add_headerbar_menu(main_headerbar, NULL, appmenu, obj, UI_TOOLBAR_RIGHT); |
| 74 } |
77 } |
| 75 ui_headerbar_add_items(obj, main_headerbar, right_defaults, UI_TOOLBAR_RIGHT); |
78 ui_headerbar_add_items(obj, main_headerbar, right_defaults, UI_TOOLBAR_RIGHT, NULL); |
| 76 |
79 |
| 77 // sidebar |
80 // sidebar |
| 78 if(sidebar_headerbar) { |
81 if(sidebar_headerbar) { |
| 79 // ui_headerbar_add_items pos parameter uses only UI_TOOLBAR_LEFT, UI_TOOLBAR_CENTER, UI_TOOLBAR_RIGHT |
82 // ui_headerbar_add_items pos parameter uses only UI_TOOLBAR_LEFT, UI_TOOLBAR_CENTER, UI_TOOLBAR_RIGHT |
| 80 ui_headerbar_add_items(obj, sidebar_headerbar, sidebar_left_defaults, UI_TOOLBAR_LEFT); |
83 ui_headerbar_add_items(obj, sidebar_headerbar, sidebar_left_defaults, UI_TOOLBAR_LEFT, NULL); |
| 81 |
84 |
| 82 if(appmenu && appmenu_pos == UI_TOOLBAR_SIDEBAR_RIGHT) { |
85 if(appmenu && appmenu_pos == UI_TOOLBAR_SIDEBAR_RIGHT) { |
| 83 ui_add_headerbar_menu(sidebar_headerbar, NULL, appmenu, obj, UI_TOOLBAR_RIGHT); |
86 ui_add_headerbar_menu(sidebar_headerbar, NULL, appmenu, obj, UI_TOOLBAR_RIGHT); |
| 84 } |
87 } |
| 85 ui_headerbar_add_items(obj, sidebar_headerbar, sidebar_right_defaults, UI_TOOLBAR_RIGHT); |
88 ui_headerbar_add_items(obj, sidebar_headerbar, sidebar_right_defaults, UI_TOOLBAR_RIGHT, NULL); |
| 86 } |
89 } |
| 87 |
90 |
| 88 // right panel |
91 // right panel |
| 89 if(right_headerbar) { |
92 if(right_headerbar) { |
| 90 ui_headerbar_add_items(obj, right_headerbar, rightpanel_left_defaults, UI_TOOLBAR_LEFT); |
93 // also add central toolbar items, in case the central pane is hidden |
| 91 ui_headerbar_add_items(obj, right_headerbar, rightpanel_center_defaults, UI_TOOLBAR_CENTER); |
94 CxList *backup_toolbar_widgets = cxArrayListCreate(obj->ctx->allocator, CX_STORE_POINTERS, 16); |
| |
95 ui_headerbar_add_items(obj, right_headerbar, left_defaults, UI_TOOLBAR_LEFT, backup_toolbar_widgets); |
| |
96 ui_headerbar_add_items(obj, right_headerbar, center_defaults, UI_TOOLBAR_LEFT, backup_toolbar_widgets); |
| |
97 ui_headerbar_add_items(obj, right_headerbar, right_defaults, UI_TOOLBAR_LEFT, backup_toolbar_widgets); |
| |
98 CxIterator i = cxListIterator(backup_toolbar_widgets); |
| |
99 cx_foreach(GtkWidget *, w, i) { |
| |
100 ui_set_visible(w, FALSE); |
| |
101 } |
| |
102 g_object_set_data(G_OBJECT(obj->widget), "ui_toolbar_center_backup", backup_toolbar_widgets); |
| |
103 |
| |
104 // main items for the right panel |
| |
105 ui_headerbar_add_items(obj, right_headerbar, rightpanel_left_defaults, UI_TOOLBAR_LEFT, NULL); |
| |
106 ui_headerbar_add_items(obj, right_headerbar, rightpanel_center_defaults, UI_TOOLBAR_CENTER, NULL); |
| 92 |
107 |
| 93 if(appmenu && appmenu_pos == UI_TOOLBAR_RIGHTPANEL_RIGHT) { |
108 if(appmenu && appmenu_pos == UI_TOOLBAR_RIGHTPANEL_RIGHT) { |
| 94 ui_add_headerbar_menu(right_headerbar, NULL, appmenu, obj, UI_TOOLBAR_RIGHT); |
109 ui_add_headerbar_menu(right_headerbar, NULL, appmenu, obj, UI_TOOLBAR_RIGHT); |
| 95 } |
110 } |
| 96 ui_headerbar_add_items(obj, right_headerbar, rightpanel_right_defaults, UI_TOOLBAR_RIGHT); |
111 ui_headerbar_add_items(obj, right_headerbar, rightpanel_right_defaults, UI_TOOLBAR_RIGHT, NULL); |
| 97 } |
112 } |
| 98 } |
113 } |
| 99 |
114 |
| 100 static void create_item(UiObject *obj, GtkWidget *headerbar, GtkWidget *box, UiToolbarItemI *i, enum UiToolbarPos pos) { |
115 static GtkWidget* create_item(UiObject *obj, GtkWidget *headerbar, GtkWidget *box, UiToolbarItemI *i, enum UiToolbarPos pos) { |
| 101 switch(i->type) { |
116 switch(i->type) { |
| 102 case UI_TOOLBAR_ITEM: { |
117 case UI_TOOLBAR_ITEM: { |
| 103 ui_add_headerbar_item(headerbar, box, (UiToolbarItem*)i, obj, pos); |
118 return ui_add_headerbar_item(headerbar, box, (UiToolbarItem*)i, obj, pos); |
| 104 break; |
|
| 105 } |
119 } |
| 106 case UI_TOOLBAR_TOGGLEITEM: { |
120 case UI_TOOLBAR_TOGGLEITEM: { |
| 107 ui_add_headerbar_toggleitem(headerbar, box, (UiToolbarToggleItem*)i, obj, pos); |
121 return ui_add_headerbar_toggleitem(headerbar, box, (UiToolbarToggleItem*)i, obj, pos); |
| 108 break; |
|
| 109 } |
122 } |
| 110 case UI_TOOLBAR_MENU: { |
123 case UI_TOOLBAR_MENU: { |
| 111 ui_add_headerbar_menu(headerbar, box, (UiToolbarMenuItem*)i, obj, pos); |
124 return ui_add_headerbar_menu(headerbar, box, (UiToolbarMenuItem*)i, obj, pos); |
| 112 break; |
|
| 113 } |
125 } |
| 114 default: fprintf(stderr, "toolbar item type unimplemented: %d\n", (int)i->type); |
126 default: fprintf(stderr, "toolbar item type unimplemented: %d\n", (int)i->type); |
| 115 } |
127 } |
| |
128 return NULL; |
| 116 } |
129 } |
| 117 |
130 |
| 118 static void headerbar_add(GtkWidget *headerbar, GtkWidget *box, GtkWidget *item, enum UiToolbarPos pos) { |
131 static void headerbar_add(GtkWidget *headerbar, GtkWidget *box, GtkWidget *item, enum UiToolbarPos pos) { |
| 119 switch(pos) { |
132 switch(pos) { |
| 120 case UI_TOOLBAR_LEFT: { |
133 case UI_TOOLBAR_LEFT: { |
| 135 break; |
148 break; |
| 136 } |
149 } |
| 137 } |
150 } |
| 138 } |
151 } |
| 139 |
152 |
| 140 void ui_headerbar_add_items(UiObject *obj, GtkWidget *headerbar, CxList *items, enum UiToolbarPos pos) { |
153 void ui_headerbar_add_items(UiObject *obj, GtkWidget *headerbar, CxList *items, enum UiToolbarPos pos, CxList *out_items) { |
| 141 GtkWidget *box = NULL; |
154 GtkWidget *box = NULL; |
| 142 |
155 |
| 143 if(pos == UI_TOOLBAR_CENTER && cxListSize(items) > 0) { |
156 if(pos == UI_TOOLBAR_CENTER && cxListSize(items) > 0) { |
| 144 box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); |
157 box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); |
| 145 UI_HEADERBAR_SET_TITLE_WIDGET(headerbar, box); |
158 UI_HEADERBAR_SET_TITLE_WIDGET(headerbar, box); |
| |
159 if(out_items) { |
| |
160 cxListAdd(out_items, box); |
| |
161 } |
| 146 } |
162 } |
| 147 |
163 |
| 148 CxIterator i = pos == UI_TOOLBAR_RIGHT ? cxListBackwardsIterator(items) : cxListIterator(items); |
164 CxIterator i = pos == UI_TOOLBAR_RIGHT ? cxListBackwardsIterator(items) : cxListIterator(items); |
| 149 cx_foreach(char*, def, i) { |
165 cx_foreach(char*, def, i) { |
| 150 UiToolbarItemI* item = uic_toolbar_get_item(def); |
166 UiToolbarItemI* item = uic_toolbar_get_item(def); |
| 151 if (!item) { |
167 if (!item) { |
| 152 fprintf(stderr, "unknown toolbar item: %s\n", def); |
168 fprintf(stderr, "unknown toolbar item: %s\n", def); |
| 153 continue; |
169 continue; |
| 154 } |
170 } |
| 155 create_item(obj, headerbar, box, item, pos); |
171 GtkWidget *item_widget = create_item(obj, headerbar, box, item, pos); |
| 156 } |
172 if(out_items && !box) { |
| 157 } |
173 cxListAdd(out_items, item_widget); |
| 158 |
174 } |
| 159 void ui_add_headerbar_item( |
175 } |
| |
176 } |
| |
177 |
| |
178 GtkWidget* ui_add_headerbar_item( |
| 160 GtkWidget *headerbar, |
179 GtkWidget *headerbar, |
| 161 GtkWidget *box, |
180 GtkWidget *box, |
| 162 UiToolbarItem *item, |
181 UiToolbarItem *item, |
| 163 UiObject *obj, |
182 UiObject *obj, |
| 164 enum UiToolbarPos pos) |
183 enum UiToolbarPos pos) |
| 166 GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.tooltip, item->args.onclick, item->args.onclickdata, item->args.action, 0, FALSE); |
185 GtkWidget *button = ui_create_button(obj, item->args.label, item->args.icon, item->args.tooltip, item->args.onclick, item->args.onclickdata, item->args.action, 0, FALSE); |
| 167 ui_set_widget_states(obj->ctx, button, item->args.states); |
186 ui_set_widget_states(obj->ctx, button, item->args.states); |
| 168 ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states); |
187 ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states); |
| 169 WIDGET_ADD_CSS_CLASS(button, "flat"); |
188 WIDGET_ADD_CSS_CLASS(button, "flat"); |
| 170 headerbar_add(headerbar, box, button, pos); |
189 headerbar_add(headerbar, box, button, pos); |
| 171 } |
190 return button; |
| 172 |
191 } |
| 173 void ui_add_headerbar_toggleitem( |
192 |
| |
193 GtkWidget* ui_add_headerbar_toggleitem( |
| 174 GtkWidget *headerbar, |
194 GtkWidget *headerbar, |
| 175 GtkWidget *box, |
195 GtkWidget *box, |
| 176 UiToolbarToggleItem *item, |
196 UiToolbarToggleItem *item, |
| 177 UiObject *obj, |
197 UiObject *obj, |
| 178 enum UiToolbarPos pos) |
198 enum UiToolbarPos pos) |
| 181 ui_set_widget_states(obj->ctx, button, item->args.states); |
201 ui_set_widget_states(obj->ctx, button, item->args.states); |
| 182 ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states); |
202 ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states); |
| 183 WIDGET_ADD_CSS_CLASS(button, "flat"); |
203 WIDGET_ADD_CSS_CLASS(button, "flat"); |
| 184 ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, item->args.action, 0); |
204 ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, item->args.action, 0); |
| 185 headerbar_add(headerbar, box, button, pos); |
205 headerbar_add(headerbar, box, button, pos); |
| 186 } |
206 return button; |
| 187 |
207 } |
| 188 void ui_add_headerbar_menu( |
208 |
| |
209 GtkWidget* ui_add_headerbar_menu( |
| 189 GtkWidget *headerbar, |
210 GtkWidget *headerbar, |
| 190 GtkWidget *box, |
211 GtkWidget *box, |
| 191 UiToolbarMenuItem *item, |
212 UiToolbarMenuItem *item, |
| 192 UiObject *obj, |
213 UiObject *obj, |
| 193 enum UiToolbarPos pos) |
214 enum UiToolbarPos pos) |