2251 |
return number_editor_get(widget); |
return number_editor_get(widget); |
2252 |
#endif |
#endif |
2253 |
} |
} |
2254 |
|
|
2255 |
|
#ifdef MAEMO5 |
2256 |
|
gboolean is_portrait() { |
2257 |
|
GdkScreen *screen = gdk_screen_get_default(); |
2258 |
|
return (gdk_screen_get_width(screen) < gdk_screen_get_height(screen)); |
2259 |
|
} |
2260 |
|
|
2261 |
|
static |
2262 |
|
void on_orientation_changed(GdkScreen *screen, gpointer userdata) { |
2263 |
|
GtkWidget *vbox = GTK_WIDGET(userdata); |
2264 |
|
GtkWidget *hbox0 = g_object_get_data(G_OBJECT(vbox), "hbox0"); |
2265 |
|
GtkWidget *hbox1 = g_object_get_data(G_OBJECT(vbox), "hbox1"); |
2266 |
|
|
2267 |
|
GSList *xbut = g_object_get_data(G_OBJECT(vbox), "xbut"); |
2268 |
|
if(!xbut) return; |
2269 |
|
|
2270 |
|
int i; |
2271 |
|
for(i=0;i<g_slist_length(xbut);i++) { |
2272 |
|
GtkWidget *but = g_slist_nth_data(xbut, i); |
2273 |
|
g_object_ref(G_OBJECT(but)); |
2274 |
|
|
2275 |
|
if(is_portrait()) { |
2276 |
|
/* move button from hbox0 to hbox1 */ |
2277 |
|
gtk_container_remove(GTK_CONTAINER(hbox0), but); |
2278 |
|
gtk_box_pack_start_defaults(GTK_BOX(hbox1), but); |
2279 |
|
} else { |
2280 |
|
/* move button from hbox1 to hbox0 */ |
2281 |
|
gtk_container_remove(GTK_CONTAINER(hbox1), but); |
2282 |
|
gtk_box_pack_start_defaults(GTK_BOX(hbox0), but); |
2283 |
|
} |
2284 |
|
g_object_unref(G_OBJECT(but)); |
2285 |
|
} |
2286 |
|
|
2287 |
|
gtk_window_resize(GTK_WINDOW(gtk_widget_get_toplevel(vbox)), 800, 800); |
2288 |
|
} |
2289 |
|
#endif |
2290 |
|
|
2291 |
|
GtkWidget *notebook_new(void) { |
2292 |
|
#ifdef MAEMO5 |
2293 |
|
GtkWidget *vbox = gtk_vbox_new(FALSE, 0); |
2294 |
|
|
2295 |
|
GtkWidget *notebook = gtk_notebook_new(); |
2296 |
|
|
2297 |
|
/* solution for fremantle: we use a row of ordinary buttons instead */ |
2298 |
|
/* of regular tabs */ |
2299 |
|
|
2300 |
|
/* hide the regular tabs */ |
2301 |
|
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE); |
2302 |
|
|
2303 |
|
gtk_box_pack_start_defaults(GTK_BOX(vbox), notebook); |
2304 |
|
|
2305 |
|
/* store a reference to the notebook in the vbox */ |
2306 |
|
g_object_set_data(G_OBJECT(vbox), "notebook", (gpointer)notebook); |
2307 |
|
|
2308 |
|
/* create hboxes for the buttons (second hbox for portrait mode) */ |
2309 |
|
GtkWidget *hbox0 = gtk_hbox_new(TRUE, 0); |
2310 |
|
gtk_box_pack_start(GTK_BOX(vbox), hbox0, FALSE, FALSE, 0); |
2311 |
|
g_object_set_data(G_OBJECT(vbox), "hbox0", (gpointer)hbox0); |
2312 |
|
GtkWidget *hbox1 = gtk_hbox_new(TRUE, 0); |
2313 |
|
gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); |
2314 |
|
g_object_set_data(G_OBJECT(vbox), "hbox1", (gpointer)hbox1); |
2315 |
|
|
2316 |
|
/* this box needs to be re-arranged for portrait mode */ |
2317 |
|
GdkScreen *screen = gdk_screen_get_default(); |
2318 |
|
g_signal_connect(screen, "size-changed", G_CALLBACK(on_orientation_changed), vbox); |
2319 |
|
|
2320 |
|
return vbox; |
2321 |
|
#else |
2322 |
|
return gtk_notebook_new(); |
2323 |
|
#endif |
2324 |
|
} |
2325 |
|
|
2326 |
|
GtkWidget *notebook_get_gtk_notebook(GtkWidget *notebook) { |
2327 |
|
#ifdef MAEMO5 |
2328 |
|
return GTK_WIDGET(g_object_get_data(G_OBJECT(notebook), "notebook")); |
2329 |
|
#else |
2330 |
|
return notebook; |
2331 |
|
#endif |
2332 |
|
} |
2333 |
|
|
2334 |
|
#ifdef MAEMO5 |
2335 |
|
static void on_notebook_button_clicked(GtkWidget *button, gpointer data) { |
2336 |
|
GtkNotebook *nb = |
2337 |
|
GTK_NOTEBOOK(g_object_get_data(G_OBJECT(data), "notebook")); |
2338 |
|
|
2339 |
|
gint page = (gint)g_object_get_data(G_OBJECT(button), "page"); |
2340 |
|
gtk_notebook_set_current_page(nb, page); |
2341 |
|
} |
2342 |
|
#endif |
2343 |
|
|
2344 |
|
void notebook_append_page(GtkWidget *notebook, |
2345 |
|
GtkWidget *page, char *label) { |
2346 |
|
#ifdef MAEMO5 |
2347 |
|
GtkNotebook *nb = |
2348 |
|
GTK_NOTEBOOK(g_object_get_data(G_OBJECT(notebook), "notebook")); |
2349 |
|
|
2350 |
|
gint page_num = gtk_notebook_append_page(nb, page, gtk_label_new(label)); |
2351 |
|
GtkWidget *button = NULL; |
2352 |
|
|
2353 |
|
/* select button for page 0 by default */ |
2354 |
|
if(!page_num) { |
2355 |
|
button = gtk_radio_button_new_with_label(NULL, label); |
2356 |
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); |
2357 |
|
g_object_set_data(G_OBJECT(notebook), "group_master", (gpointer)button); |
2358 |
|
} else { |
2359 |
|
GtkWidget *master = g_object_get_data(G_OBJECT(notebook), "group_master"); |
2360 |
|
button = gtk_radio_button_new_with_label_from_widget( |
2361 |
|
GTK_RADIO_BUTTON(master), label); |
2362 |
|
} |
2363 |
|
|
2364 |
|
gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE); |
2365 |
|
g_object_set_data(G_OBJECT(button), "page", (gpointer)page_num); |
2366 |
|
|
2367 |
|
gtk_signal_connect(GTK_OBJECT(button), "clicked", |
2368 |
|
GTK_SIGNAL_FUNC(on_notebook_button_clicked), notebook); |
2369 |
|
|
2370 |
|
hildon_gtk_widget_set_theme_size(button, |
2371 |
|
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
2372 |
|
|
2373 |
|
gtk_box_pack_start_defaults( |
2374 |
|
GTK_BOX(g_object_get_data(G_OBJECT(notebook), |
2375 |
|
(!is_portrait() || page_num < 3)?"hbox0":"hbox1")), button); |
2376 |
|
|
2377 |
|
/* update list of "buttons that need to be moved when switching orientation" */ |
2378 |
|
if(page_num >= 3) { |
2379 |
|
GSList *xbut = g_object_get_data(G_OBJECT(notebook), "xbut"); |
2380 |
|
xbut = g_slist_append(xbut, button); |
2381 |
|
g_object_set_data(G_OBJECT(notebook), "xbut", xbut); |
2382 |
|
} |
2383 |
|
|
2384 |
|
#else |
2385 |
|
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, gtk_label_new(label)); |
2386 |
|
#endif |
2387 |
|
} |
2388 |
|
|
2389 |
|
GtkWidget *text_wrap(char *str) { |
2390 |
|
GtkTextBuffer *buffer = gtk_text_buffer_new(NULL); |
2391 |
|
|
2392 |
|
#ifndef MAEMO5 |
2393 |
|
GtkWidget *view = gtk_text_view_new_with_buffer(buffer); |
2394 |
|
#else |
2395 |
|
GtkWidget *view = hildon_text_view_new(); |
2396 |
|
hildon_text_view_set_buffer(HILDON_TEXT_VIEW(view), buffer); |
2397 |
|
#endif |
2398 |
|
|
2399 |
|
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD); |
2400 |
|
gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); |
2401 |
|
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE); |
2402 |
|
gtk_text_view_set_justification(GTK_TEXT_VIEW(view), GTK_JUSTIFY_LEFT); |
2403 |
|
|
2404 |
|
gtk_text_buffer_set_text(buffer, str, -1); |
2405 |
|
|
2406 |
|
#ifdef MAEMO5 |
2407 |
|
/* in fremantle this is really tricky and we need to inherit the */ |
2408 |
|
/* style from the topmost window in the stack */ |
2409 |
|
HildonWindowStack *stack = hildon_window_stack_get_default(); |
2410 |
|
GList *list = hildon_window_stack_get_windows(stack); |
2411 |
|
gtk_widget_set_style(view, GTK_WIDGET(list->data)->style); |
2412 |
|
g_list_free(list); |
2413 |
|
#else |
2414 |
|
GtkStyle *style = gtk_widget_get_style(view); |
2415 |
|
gtk_widget_modify_base(view, GTK_STATE_NORMAL, &style->bg[GTK_STATE_NORMAL]); |
2416 |
|
#endif |
2417 |
|
|
2418 |
|
return view; |
2419 |
|
} |
2420 |
|
|
2421 |
|
void text_set(GtkWidget *view, char *str) { |
2422 |
|
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); |
2423 |
|
gtk_text_buffer_set_text(buffer, str, -1); |
2424 |
|
} |
2425 |
|
|