38 |
#include <hildon/hildon-touch-selector.h> |
#include <hildon/hildon-touch-selector.h> |
39 |
#include <hildon/hildon-picker-button.h> |
#include <hildon/hildon-picker-button.h> |
40 |
#include <hildon/hildon-picker-dialog.h> |
#include <hildon/hildon-picker-dialog.h> |
41 |
|
#include <hildon/hildon-check-button.h> |
42 |
#endif |
#endif |
43 |
|
|
44 |
float roundf(float x); |
float roundf(float x); |
51 |
#define COORDINATE_PICKER |
#define COORDINATE_PICKER |
52 |
#endif |
#endif |
53 |
|
|
54 |
|
static const char *decimal_point(void) { |
55 |
|
static const char *point = "."; |
56 |
|
|
57 |
|
struct lconv *lconv = localeconv(); |
58 |
|
|
59 |
|
if(lconv && lconv->decimal_point) |
60 |
|
return lconv->decimal_point; |
61 |
|
|
62 |
|
return point; |
63 |
|
} |
64 |
|
|
65 |
char strlastchr(char *str) { |
char strlastchr(char *str) { |
66 |
return str[strlen(str)]-1; |
return str[strlen(str)]-1; |
67 |
} |
} |
579 |
minw[0] = digit_picker_create(0,5, min/10)); |
minw[0] = digit_picker_create(0,5, min/10)); |
580 |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
581 |
minw[1] = digit_picker_create(0,9, min%10)); |
minw[1] = digit_picker_create(0,9, min%10)); |
582 |
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("."), FALSE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(decimal_point()), |
583 |
|
FALSE, FALSE, 0); |
584 |
|
|
585 |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
586 |
minfracw[0] = digit_picker_create(0,9, minfrac/100)); |
minfracw[0] = digit_picker_create(0,9, minfrac/100)); |
624 |
} |
} |
625 |
#endif |
#endif |
626 |
|
|
627 |
|
/* whatever there is in the entry: if it's illegal make it */ |
628 |
|
#define ILLEGAL_LAT "X --° --%s---'" |
629 |
|
#define ILLEGAL_LON "X ---° --%s---'" |
630 |
|
|
631 |
|
static void pos_lat_check(GtkWidget *widget) { |
632 |
|
if(isnan(lat_entry_get(widget))) { |
633 |
|
char *str = g_strdup_printf(ILLEGAL_LAT, decimal_point()); |
634 |
|
|
635 |
|
#ifndef COORDINATE_PICKER |
636 |
|
mark(widget, FALSE); |
637 |
|
gtk_entry_set_text(GTK_ENTRY(widget), str); |
638 |
|
#else |
639 |
|
gtk_button_set_label(GTK_BUTTON(widget), str); |
640 |
|
#endif |
641 |
|
|
642 |
|
g_free(str); |
643 |
|
} |
644 |
|
} |
645 |
|
|
646 |
|
static void pos_lon_check(GtkWidget *widget) { |
647 |
|
if(isnan(lon_entry_get(widget))) { |
648 |
|
char *str = g_strdup_printf(ILLEGAL_LON, decimal_point()); |
649 |
|
|
650 |
|
#ifndef COORDINATE_PICKER |
651 |
|
mark(widget, FALSE); |
652 |
|
gtk_entry_set_text(GTK_ENTRY(widget), str); |
653 |
|
#else |
654 |
|
gtk_button_set_label(GTK_BUTTON(widget), str); |
655 |
|
#endif |
656 |
|
|
657 |
|
g_free(str); |
658 |
|
} |
659 |
|
} |
660 |
|
|
661 |
/* a entry that is colored red when being "active" */ |
/* a entry that is colored red when being "active" */ |
662 |
GtkWidget *lat_entry_new(float lat) { |
GtkWidget *lat_entry_new(float lat) { |
663 |
char str[32]; |
char str[32]; |
682 |
(GtkSignalFunc)on_lat_picker_button_press, NULL); |
(GtkSignalFunc)on_lat_picker_button_press, NULL); |
683 |
#endif |
#endif |
684 |
|
|
685 |
|
pos_lat_check(widget); |
686 |
return widget; |
return widget; |
687 |
} |
} |
688 |
|
|
735 |
minw[0] = digit_picker_create(0,5, min/10)); |
minw[0] = digit_picker_create(0,5, min/10)); |
736 |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
737 |
minw[1] = digit_picker_create(0,9, min%10)); |
minw[1] = digit_picker_create(0,9, min%10)); |
738 |
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("."), FALSE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(decimal_point()), |
739 |
|
FALSE, FALSE, 0); |
740 |
|
|
741 |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
gtk_box_pack_start_defaults(GTK_BOX(hbox), |
742 |
minfracw[0] = digit_picker_create(0,9, minfrac/100)); |
minfracw[0] = digit_picker_create(0,9, minfrac/100)); |
802 |
(GtkSignalFunc)on_lon_picker_button_press, NULL); |
(GtkSignalFunc)on_lon_picker_button_press, NULL); |
803 |
#endif |
#endif |
804 |
|
|
805 |
|
pos_lon_check(widget); |
806 |
return widget; |
return widget; |
807 |
} |
} |
808 |
|
|
835 |
g_object_set_data(G_OBJECT(widget), "latitude", (gpointer)lat_int); |
g_object_set_data(G_OBJECT(widget), "latitude", (gpointer)lat_int); |
836 |
g_signal_emit_by_name(widget, "changed"); |
g_signal_emit_by_name(widget, "changed"); |
837 |
#endif |
#endif |
838 |
|
pos_lat_check(widget); |
839 |
} |
} |
840 |
|
|
841 |
void lon_entry_set(GtkWidget *widget, float lon) { |
void lon_entry_set(GtkWidget *widget, float lon) { |
849 |
g_object_set_data(G_OBJECT(widget), "longitude", (gpointer)lon_int); |
g_object_set_data(G_OBJECT(widget), "longitude", (gpointer)lon_int); |
850 |
g_signal_emit_by_name(widget, "changed"); |
g_signal_emit_by_name(widget, "changed"); |
851 |
#endif |
#endif |
852 |
|
pos_lon_check(widget); |
853 |
} |
} |
854 |
|
|
855 |
void lat_label_set(GtkWidget *widget, float lat) { |
void lat_label_set(GtkWidget *widget, float lat) { |
1025 |
#ifndef COORDINATE_PICKER |
#ifndef COORDINATE_PICKER |
1026 |
gtk_entry_set_text(GTK_ENTRY(widget), str); |
gtk_entry_set_text(GTK_ENTRY(widget), str); |
1027 |
#else |
#else |
1028 |
|
gtk_button_set_label(GTK_BUTTON(widget), str); |
1029 |
int dist_int = (int)roundf(dist * 1000); // km -> m |
int dist_int = (int)roundf(dist * 1000); // km -> m |
1030 |
if(mil) dist_int = (int)roundf(dist * 5280.0); // mi -> ft |
if(mil) dist_int = (int)roundf(dist * 5280.0); // mi -> ft |
1031 |
g_object_set_data(G_OBJECT(widget), "distance", (gpointer)dist_int); |
g_object_set_data(G_OBJECT(widget), "distance", (gpointer)dist_int); |
1032 |
g_object_set_data(G_OBJECT(widget), "mil", (gpointer)mil); |
g_object_set_data(G_OBJECT(widget), "mil", (gpointer)mil); |
1033 |
gtk_button_set_label(GTK_BUTTON(widget), str); |
g_signal_emit_by_name(widget, "changed"); |
1034 |
#endif |
#endif |
1035 |
} |
} |
1036 |
|
|
1229 |
static void cb_mm(GtkWidget *item, gpointer data) { |
static void cb_mm(GtkWidget *item, gpointer data) { |
1230 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
1231 |
|
|
1232 |
pos_set(item, appdata->mmpos.lat, appdata->mpos.lon); |
pos_set(item, appdata->mmpos.lat, appdata->mmpos.lon); |
1233 |
} |
} |
1234 |
#endif |
#endif |
1235 |
|
|
1320 |
#ifdef ENABLE_MAEMO_MAPPER |
#ifdef ENABLE_MAEMO_MAPPER |
1321 |
if(appdata->mmpos_valid) { |
if(appdata->mmpos_valid) { |
1322 |
menu_add(menu, appdata, icon_get_widget(ICON_POS, 24), |
menu_add(menu, appdata, icon_get_widget(ICON_POS, 24), |
1323 |
_("Maemo mapper position"), cb_mm, 0, lon_entry, lat_entry); |
_("Maemo Mapper position"), cb_mm, 0, lon_entry, lat_entry); |
1324 |
} |
} |
1325 |
#endif |
#endif |
1326 |
|
|
1510 |
|
|
1511 |
#ifdef ENABLE_MAEMO_MAPPER |
#ifdef ENABLE_MAEMO_MAPPER |
1512 |
if(appdata->mmpos_valid) { |
if(appdata->mmpos_valid) { |
1513 |
preset_picker_add(menu, appdata, icon_get(ICON_POS, 24), |
preset_picker_add(store, appdata, icon_get(ICON_POS, 24), |
1514 |
_("Maemo mapper position"), cb_mm, 0); |
_("Maemo Mapper position"), cb_mm, 0); |
1515 |
} |
} |
1516 |
#endif |
#endif |
1517 |
|
|
1580 |
|
|
1581 |
if(event->type == GDK_BUTTON_PRESS) { |
if(event->type == GDK_BUTTON_PRESS) { |
1582 |
GtkWidget *dialog = |
GtkWidget *dialog = |
1583 |
gtk_dialog_new_with_buttons(_("Preset coordinates"), |
gtk_dialog_new_with_buttons(_("Use coordinate"), |
1584 |
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))), |
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))), |
1585 |
GTK_DIALOG_MODAL, |
GTK_DIALOG_MODAL, |
1586 |
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
1609 |
|
|
1610 |
gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_POS, 22)); |
gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_POS, 22)); |
1611 |
|
|
1612 |
gtk_widget_set_tooltip_text(button, _("Preset coordinates")); |
#ifndef USE_MAEMO |
1613 |
|
gtk_widget_set_tooltip_text(button, _("Use coordinate")); |
1614 |
|
#endif |
1615 |
|
|
1616 |
g_object_set_data(G_OBJECT(button), "lat_entry", (gpointer)lat_entry); |
g_object_set_data(G_OBJECT(button), "lat_entry", (gpointer)lat_entry); |
1617 |
g_object_set_data(G_OBJECT(button), "lon_entry", (gpointer)lon_entry); |
g_object_set_data(G_OBJECT(button), "lon_entry", (gpointer)lon_entry); |
1635 |
return button; |
return button; |
1636 |
} |
} |
1637 |
|
|
|
#if defined(ENABLE_MAEMO_MAPPER) || defined(ENABLE_OSM_GPS_MAP) |
|
1638 |
static pos_t goto_pos_get(GtkWidget *item) { |
static pos_t goto_pos_get(GtkWidget *item) { |
1639 |
pos_t pos; |
pos_t pos; |
1640 |
|
|
1657 |
} |
} |
1658 |
#endif |
#endif |
1659 |
|
|
1660 |
|
#ifdef ENABLE_OSM_GPS_MAP |
1661 |
static void cb_map_set(GtkWidget *item, gpointer data) { |
static void cb_map_set(GtkWidget *item, gpointer data) { |
1662 |
appdata_t *appdata = (appdata_t*)data; |
appdata_t *appdata = (appdata_t*)data; |
1663 |
|
|
1668 |
pos.lat, pos.lon); |
pos.lat, pos.lon); |
1669 |
} |
} |
1670 |
} |
} |
1671 |
|
#endif |
1672 |
|
|
1673 |
|
static void cb_clipboard_set(GtkWidget *item, gpointer data) { |
1674 |
|
appdata_t *appdata = (appdata_t*)data; |
1675 |
|
|
1676 |
|
pos_t pos = goto_pos_get(item); |
1677 |
|
if(!isnan(pos.lat) && !isnan(pos.lon)) { |
1678 |
|
char lat[32], lon[32]; |
1679 |
|
pos_lat_str(lat, sizeof(lat), pos.lat); |
1680 |
|
pos_lon_str(lon, sizeof(lon), pos.lon); |
1681 |
|
|
1682 |
|
char *str = g_strdup_printf("%s %s", lat, lon); |
1683 |
|
gtk_clipboard_set_text(appdata->clipboard, str, -1); |
1684 |
|
g_free(str); |
1685 |
|
} |
1686 |
|
} |
1687 |
|
|
1688 |
#ifndef PRESET_PICKER_DIALOG |
#ifndef PRESET_PICKER_DIALOG |
1689 |
static GtkWidget *goto_popup_menu_create(appdata_t *appdata, |
static GtkWidget *goto_popup_menu_create(appdata_t *appdata, |
1692 |
|
|
1693 |
#if defined(ENABLE_OSM_GPS_MAP) |
#if defined(ENABLE_OSM_GPS_MAP) |
1694 |
menu_add(menu, appdata, icon_get_widget(ICON_POS, 20), |
menu_add(menu, appdata, icon_get_widget(ICON_POS, 20), |
1695 |
_("Map position"), cb_map_set, 0, lon_entry, lat_entry); |
_("Internal map"), cb_map_set, 0, lon_entry, lat_entry); |
1696 |
#endif |
#endif |
1697 |
|
|
1698 |
#if defined(ENABLE_MAEMO_MAPPER) |
#if defined(ENABLE_MAEMO_MAPPER) |
1699 |
menu_add(menu, appdata, icon_get_widget(ICON_POS, 24), |
menu_add(menu, appdata, icon_get_widget(ICON_POS, 24), |
1700 |
_("Maemo mapper position"), cb_mm_set, 0, lon_entry, lat_entry); |
_("Maemo Mapper"), cb_mm_set, 0, lon_entry, lat_entry); |
1701 |
#endif |
#endif |
1702 |
|
|
1703 |
|
menu_add(menu, appdata, icon_get_widget(ICON_POS, 25), |
1704 |
|
_("Clipboard"), cb_clipboard_set, 0, lon_entry, lat_entry); |
1705 |
|
|
1706 |
gtk_widget_show_all(menu); |
gtk_widget_show_all(menu); |
1707 |
|
|
1739 |
|
|
1740 |
#if defined(ENABLE_OSM_GPS_MAP) |
#if defined(ENABLE_OSM_GPS_MAP) |
1741 |
preset_picker_add(store, appdata, icon_get(ICON_POS, 20), |
preset_picker_add(store, appdata, icon_get(ICON_POS, 20), |
1742 |
_("Map position"), cb_map_set, 0); |
_("Internal map"), cb_map_set, 0); |
1743 |
#endif |
#endif |
1744 |
|
|
1745 |
#if defined(ENABLE_MAEMO_MAPPER) |
#if defined(ENABLE_MAEMO_MAPPER) |
1746 |
preset_picker_add(store, appdata, icon_get(ICON_POS, 24), |
preset_picker_add(store, appdata, icon_get(ICON_POS, 24), |
1747 |
_("Maemo mapper position"), cb_mm_set, 0); |
_("Maemo Mapper"), cb_mm_set, 0); |
1748 |
#endif |
#endif |
1749 |
|
|
1750 |
|
preset_picker_add(store, appdata, icon_get(ICON_POS, 25), |
1751 |
|
_("Clipboard"), cb_clipboard_set, 0); |
1752 |
|
|
1753 |
gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store)); |
gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store)); |
1754 |
g_object_unref(store); |
g_object_unref(store); |
1755 |
|
|
1778 |
|
|
1779 |
if(event->type == GDK_BUTTON_PRESS) { |
if(event->type == GDK_BUTTON_PRESS) { |
1780 |
|
|
|
#if defined(ENABLE_MAEMO_MAPPER) && !defined(ENABLE_OSM_GPS_MAP) |
|
|
/* only maemo mapper is being used */ |
|
|
pos_t pos = goto_pos_get(button); |
|
|
if(!isnan(pos.lat) && !isnan(pos.lon)) { |
|
|
dbus_mm_set_position(appdata, &pos); |
|
|
#elif !defined(ENABLE_MAEMO_MAPPER) && defined(ENABLE_OSM_GPS_MAP) |
|
|
/* only internal map is being used */ |
|
|
pos_t pos = goto_pos_get(button); |
|
|
if(!isnan(pos.lat) && !isnan(pos.lon)) { |
|
|
map(appdata); |
|
|
osm_gps_map_set_center(OSM_GPS_MAP(appdata->map.context->widget), |
|
|
pos.lat, pos.lon); |
|
|
} |
|
|
#else |
|
|
|
|
1781 |
gpointer lat_entry = g_object_get_data(G_OBJECT(button), "lat_entry"); |
gpointer lat_entry = g_object_get_data(G_OBJECT(button), "lat_entry"); |
1782 |
g_assert(lat_entry); |
g_assert(lat_entry); |
1783 |
gpointer lon_entry = g_object_get_data(G_OBJECT(button), "lon_entry"); |
gpointer lon_entry = g_object_get_data(G_OBJECT(button), "lon_entry"); |
1795 |
event->button, event->time); |
event->button, event->time); |
1796 |
#else |
#else |
1797 |
GtkWidget *dialog = |
GtkWidget *dialog = |
1798 |
gtk_dialog_new_with_buttons(_("Map coordinates"), |
gtk_dialog_new_with_buttons(_("Show coordinate on map"), |
1799 |
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))), |
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))), |
1800 |
GTK_DIALOG_MODAL, |
GTK_DIALOG_MODAL, |
1801 |
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, |
1810 |
gtk_dialog_run(GTK_DIALOG(dialog)); |
gtk_dialog_run(GTK_DIALOG(dialog)); |
1811 |
gtk_widget_destroy(dialog); |
gtk_widget_destroy(dialog); |
1812 |
#endif |
#endif |
|
|
|
|
#endif |
|
1813 |
|
|
1814 |
return TRUE; |
return TRUE; |
1815 |
} |
} |
1825 |
|
|
1826 |
gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_POS, 23)); |
gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_POS, 23)); |
1827 |
|
|
1828 |
gtk_widget_set_tooltip_text(button, _("Goto coordinates")); |
#ifndef USE_MAEMO |
1829 |
|
gtk_widget_set_tooltip_text(button, _("Show coordinate on map")); |
1830 |
|
#endif |
1831 |
|
|
1832 |
g_object_set_data(G_OBJECT(button), "lat_entry", (gpointer)lat_entry); |
g_object_set_data(G_OBJECT(button), "lat_entry", (gpointer)lat_entry); |
1833 |
g_object_set_data(G_OBJECT(button), "lon_entry", (gpointer)lon_entry); |
g_object_set_data(G_OBJECT(button), "lon_entry", (gpointer)lon_entry); |
1847 |
|
|
1848 |
return button; |
return button; |
1849 |
} |
} |
|
#else |
|
|
/* no map installed */ |
|
|
GtkWidget *goto_coordinate(appdata_t *appdata, |
|
|
GtkWidget *lat_entry, GtkWidget *lon_entry) { |
|
|
return gtk_label_new(""); |
|
|
} |
|
|
#endif |
|
1850 |
|
|
1851 |
GtkWidget *entry_new(void) { |
GtkWidget *entry_new(void) { |
1852 |
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
1969 |
#endif |
#endif |
1970 |
return widget; |
return widget; |
1971 |
} |
} |
1972 |
|
|
1973 |
float angle_entry_get(GtkWidget *widget) { |
float angle_entry_get(GtkWidget *widget) { |
1974 |
#ifndef COORDINATE_PICKER |
#ifndef COORDINATE_PICKER |
1975 |
char *p = (char*)gtk_entry_get_text(GTK_ENTRY(widget)); |
char *p = (char*)gtk_entry_get_text(GTK_ENTRY(widget)); |
1991 |
g_signal_emit_by_name(widget, "changed"); |
g_signal_emit_by_name(widget, "changed"); |
1992 |
#endif |
#endif |
1993 |
} |
} |
1994 |
|
|
1995 |
|
GtkWidget *toggle_button_new_with_label(char *label) { |
1996 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
1997 |
|
return gtk_check_button_new_with_label(label); |
1998 |
|
#else |
1999 |
|
GtkWidget *cbut = gtk_toggle_button_new_with_label(label); |
2000 |
|
hildon_gtk_widget_set_theme_size(cbut, |
2001 |
|
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
2002 |
|
gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(cbut), FALSE); |
2003 |
|
return cbut; |
2004 |
|
#endif |
2005 |
|
} |
2006 |
|
|
2007 |
|
void toggle_button_set_active(GtkWidget *button, gboolean active) { |
2008 |
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); |
2009 |
|
} |
2010 |
|
|
2011 |
|
gboolean toggle_button_get_active(GtkWidget *button) { |
2012 |
|
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); |
2013 |
|
} |
2014 |
|
|
2015 |
|
GtkWidget *check_button_new_with_label(char *label) { |
2016 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
2017 |
|
return gtk_check_button_new_with_label(label); |
2018 |
|
#else |
2019 |
|
GtkWidget *cbut = |
2020 |
|
hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT | |
2021 |
|
HILDON_SIZE_AUTO_WIDTH); |
2022 |
|
gtk_button_set_label(GTK_BUTTON(cbut), label); |
2023 |
|
return cbut; |
2024 |
|
#endif |
2025 |
|
} |
2026 |
|
|
2027 |
|
void check_button_set_active(GtkWidget *button, gboolean active) { |
2028 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
2029 |
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); |
2030 |
|
#else |
2031 |
|
hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active); |
2032 |
|
#endif |
2033 |
|
} |
2034 |
|
|
2035 |
|
gboolean check_button_get_active(GtkWidget *button) { |
2036 |
|
#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) |
2037 |
|
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); |
2038 |
|
#else |
2039 |
|
return hildon_check_button_get_active(HILDON_CHECK_BUTTON(button)); |
2040 |
|
#endif |
2041 |
|
} |
2042 |
|
|
2043 |
|
GtkWidget *button_new(void) { |
2044 |
|
GtkWidget *button = gtk_button_new(); |
2045 |
|
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
2046 |
|
hildon_gtk_widget_set_theme_size(button, |
2047 |
|
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
2048 |
|
#endif |
2049 |
|
return button; |
2050 |
|
} |
2051 |
|
|
2052 |
|
GtkWidget *button_new_with_label(char *label) { |
2053 |
|
GtkWidget *button = gtk_button_new_with_label(label); |
2054 |
|
#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR == 5) |
2055 |
|
hildon_gtk_widget_set_theme_size(button, |
2056 |
|
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); |
2057 |
|
#endif |
2058 |
|
return button; |
2059 |
|
} |
2060 |
|
|
2061 |
|
static void on_browse(GtkWidget *widget, gpointer data) { |
2062 |
|
GtkWidget *dialog; |
2063 |
|
|
2064 |
|
char **fileptr = g_object_get_data(G_OBJECT(widget), "fileptr"); |
2065 |
|
|
2066 |
|
#ifdef USE_MAEMO |
2067 |
|
dialog = hildon_file_chooser_dialog_new( |
2068 |
|
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), |
2069 |
|
GTK_FILE_CHOOSER_ACTION_SAVE); |
2070 |
|
#else |
2071 |
|
dialog = gtk_file_chooser_dialog_new( |
2072 |
|
g_object_get_data(G_OBJECT(widget), "sel_title"), |
2073 |
|
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))), |
2074 |
|
GTK_FILE_CHOOSER_ACTION_SAVE, |
2075 |
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
2076 |
|
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, |
2077 |
|
NULL); |
2078 |
|
#endif |
2079 |
|
|
2080 |
|
if(*fileptr) { |
2081 |
|
printf("set filename <%s>\n", *fileptr); |
2082 |
|
|
2083 |
|
if(!g_file_test(*fileptr, G_FILE_TEST_EXISTS)) { |
2084 |
|
char *last_sep = strrchr(*fileptr, '/'); |
2085 |
|
if(last_sep) { |
2086 |
|
*last_sep = 0; // seperate path from file |
2087 |
|
|
2088 |
|
/* the user just created a new document */ |
2089 |
|
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), |
2090 |
|
*fileptr); |
2091 |
|
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), |
2092 |
|
last_sep+1); |
2093 |
|
|
2094 |
|
/* restore full filename */ |
2095 |
|
*last_sep = '/'; |
2096 |
|
} |
2097 |
|
} else |
2098 |
|
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), *fileptr); |
2099 |
|
} |
2100 |
|
|
2101 |
|
if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_FM_OK) { |
2102 |
|
gchar *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); |
2103 |
|
if(name) { |
2104 |
|
if(*fileptr) g_free(*fileptr); |
2105 |
|
*fileptr = g_strdup(name); |
2106 |
|
|
2107 |
|
#ifndef FREMANTLE |
2108 |
|
GtkWidget *label = g_object_get_data(G_OBJECT(widget), "label"); |
2109 |
|
gtk_label_set_text(GTK_LABEL(label), *fileptr); |
2110 |
|
#else |
2111 |
|
hildon_button_set_value(HILDON_BUTTON(widget), *fileptr); |
2112 |
|
#endif |
2113 |
|
} |
2114 |
|
} |
2115 |
|
|
2116 |
|
gtk_widget_destroy (dialog); |
2117 |
|
} |
2118 |
|
|
2119 |
|
GtkWidget *export_file(char *sel_title, char **filename) { |
2120 |
|
/* non-fremantle and classic gtk use a rather ugly and */ |
2121 |
|
/* complex layout */ |
2122 |
|
#ifndef FREMANTLE |
2123 |
|
GtkWidget *vbox = gtk_vbox_new(FALSE, 0); |
2124 |
|
GtkWidget *hbox = gtk_hbox_new(FALSE, 0); |
2125 |
|
GtkWidget *label = gtk_label_new(_("Export to")); |
2126 |
|
gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE,0); |
2127 |
|
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
2128 |
|
GtkWidget *button = button_new_with_label(_("Browse")); |
2129 |
|
g_object_set_data(G_OBJECT(button), "sel_title", sel_title); |
2130 |
|
g_object_set_data(G_OBJECT(button), "fileptr", filename); |
2131 |
|
gtk_signal_connect(GTK_OBJECT(button), "clicked", |
2132 |
|
GTK_SIGNAL_FUNC(on_browse), NULL); |
2133 |
|
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE,0); |
2134 |
|
gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox); |
2135 |
|
|
2136 |
|
label = gtk_label_new((*filename)?*filename:""); |
2137 |
|
g_object_set_data(G_OBJECT(button), "label", label); |
2138 |
|
gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); |
2139 |
|
gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_MIDDLE); |
2140 |
|
|
2141 |
|
gtk_box_pack_start_defaults(GTK_BOX(vbox), label); |
2142 |
|
return vbox; |
2143 |
|
#else |
2144 |
|
GtkWidget *button = hildon_button_new_with_text( |
2145 |
|
(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH), |
2146 |
|
HILDON_BUTTON_ARRANGEMENT_VERTICAL, |
2147 |
|
_("Export to"), *filename); |
2148 |
|
hildon_button_set_title_alignment(HILDON_BUTTON(button), 0.5, 0.5); |
2149 |
|
hildon_button_set_value_alignment(HILDON_BUTTON(button), 0.5, 0.5); |
2150 |
|
g_object_set_data(G_OBJECT(button), "sel_title", sel_title); |
2151 |
|
g_object_set_data(G_OBJECT(button), "fileptr", filename); |
2152 |
|
gtk_signal_connect(GTK_OBJECT(button), "clicked", |
2153 |
|
GTK_SIGNAL_FUNC(on_browse), NULL); |
2154 |
|
return button; |
2155 |
|
#endif |
2156 |
|
} |
2157 |
|
|
2158 |
|
#ifdef FREMANTLE |
2159 |
|
static int number_editor_get(GtkWidget *widget) { |
2160 |
|
GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "entry"); |
2161 |
|
g_assert(entry); |
2162 |
|
const char *str = gtk_entry_get_text(GTK_ENTRY(entry)); |
2163 |
|
if(!str) return 0; |
2164 |
|
return atoi(str); |
2165 |
|
} |
2166 |
|
|
2167 |
|
static void number_editor_set(GtkWidget *widget, int num) { |
2168 |
|
int min = (int)g_object_get_data(G_OBJECT(widget), "min"); |
2169 |
|
int max = (int)g_object_get_data(G_OBJECT(widget), "max"); |
2170 |
|
|
2171 |
|
if(num < min) num = min; |
2172 |
|
if(num > max) num = max; |
2173 |
|
|
2174 |
|
GtkWidget *btn_inc = |
2175 |
|
(GtkWidget*)g_object_get_data(G_OBJECT(widget), "btn_inc"); |
2176 |
|
gtk_widget_set_sensitive(btn_inc, num < max); |
2177 |
|
|
2178 |
|
GtkWidget *btn_dec = |
2179 |
|
(GtkWidget*)g_object_get_data(G_OBJECT(widget), "btn_dec"); |
2180 |
|
gtk_widget_set_sensitive(btn_dec, num > min); |
2181 |
|
|
2182 |
|
GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "entry"); |
2183 |
|
g_assert(entry); |
2184 |
|
char *str = g_strdup_printf("%d", num); |
2185 |
|
gtk_entry_set_text(GTK_ENTRY(entry), str); |
2186 |
|
g_free(str); |
2187 |
|
} |
2188 |
|
|
2189 |
|
static void on_number_decrease(GtkWidget *widget, gpointer data) { |
2190 |
|
number_editor_set(GTK_WIDGET(data), |
2191 |
|
number_editor_get(GTK_WIDGET(data)) - 1); |
2192 |
|
} |
2193 |
|
|
2194 |
|
static void on_number_increase(GtkWidget *widget, gpointer data) { |
2195 |
|
number_editor_set(GTK_WIDGET(data), |
2196 |
|
number_editor_get(GTK_WIDGET(data)) + 1); |
2197 |
|
} |
2198 |
|
|
2199 |
|
static void on_number_changed(GtkWidget *widget, gpointer data) { |
2200 |
|
number_editor_set(GTK_WIDGET(data), |
2201 |
|
number_editor_get(GTK_WIDGET(data))); |
2202 |
|
} |
2203 |
|
#endif |
2204 |
|
|
2205 |
|
GtkWidget *number_editor_new(int current, int min, int max) { |
2206 |
|
#ifndef USE_MAEMO |
2207 |
|
GtkObject *adj = gtk_adjustment_new(current, min, max, 1, 10, 10); |
2208 |
|
return gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); |
2209 |
|
#elif MAEMO_VERSION_MAJOR < 5 |
2210 |
|
GtkWidget *widget = hildon_number_editor_new(min, max); |
2211 |
|
hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(widget), current); |
2212 |
|
return widget; |
2213 |
|
#else |
2214 |
|
GtkWidget *hbox = gtk_hbox_new(FALSE, 0); |
2215 |
|
g_object_set_data(G_OBJECT(hbox), "min", (gpointer)min); |
2216 |
|
g_object_set_data(G_OBJECT(hbox), "max", (gpointer)max); |
2217 |
|
|
2218 |
|
GtkWidget *btn_dec = button_new_with_label(" - "); |
2219 |
|
g_object_set_data(G_OBJECT(hbox), "btn_dec", btn_dec); |
2220 |
|
gtk_signal_connect(GTK_OBJECT(btn_dec), "clicked", |
2221 |
|
(GtkSignalFunc)on_number_decrease, hbox); |
2222 |
|
gtk_box_pack_start(GTK_BOX(hbox), btn_dec, FALSE, FALSE, 0); |
2223 |
|
|
2224 |
|
GtkWidget *entry = hildon_entry_new(HILDON_SIZE_AUTO); |
2225 |
|
g_object_set_data(G_OBJECT(hbox), "entry", entry); |
2226 |
|
g_signal_connect(G_OBJECT(entry), "changed", |
2227 |
|
G_CALLBACK(on_number_changed), hbox); |
2228 |
|
gtk_entry_set_width_chars(GTK_ENTRY(entry), 2); |
2229 |
|
hildon_gtk_entry_set_input_mode(GTK_ENTRY(entry), |
2230 |
|
HILDON_GTK_INPUT_MODE_NUMERIC); |
2231 |
|
gtk_box_pack_start_defaults(GTK_BOX(hbox), entry); |
2232 |
|
|
2233 |
|
GtkWidget *btn_inc = button_new_with_label(" + "); |
2234 |
|
g_object_set_data(G_OBJECT(hbox), "btn_inc", btn_inc); |
2235 |
|
gtk_signal_connect(GTK_OBJECT(btn_inc), "clicked", |
2236 |
|
(GtkSignalFunc)on_number_increase, hbox); |
2237 |
|
gtk_box_pack_start(GTK_BOX(hbox), btn_inc, FALSE, FALSE, 0); |
2238 |
|
|
2239 |
|
number_editor_set(hbox, current); |
2240 |
|
|
2241 |
|
return hbox; |
2242 |
|
#endif |
2243 |
|
} |
2244 |
|
|
2245 |
|
int number_editor_get_value(GtkWidget *widget) { |
2246 |
|
#ifndef USE_MAEMO |
2247 |
|
return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); |
2248 |
|
#elif MAEMO_VERSION_MAJOR < 5 |
2249 |
|
return hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(widget)); |
2250 |
|
#else |
2251 |
|
return number_editor_get(widget); |
2252 |
|
#endif |
2253 |
|
} |