Diff of /trunk/src/misc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 243 by harbaum, Mon Dec 14 20:07:54 2009 UTC revision 244 by harbaum, Tue Dec 15 19:54:04 2009 UTC
# Line 2161  GtkWidget *export_file(char *sel_title, Line 2161  GtkWidget *export_file(char *sel_title,
2161  #endif  #endif
2162  }  }
2163    
2164    static int number_editor_get(GtkWidget *widget) {
2165      GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "entry");
2166      g_assert(entry);
2167      const char *str = gtk_entry_get_text(GTK_ENTRY(entry));
2168      if(!str) return 0;
2169      return atoi(str);
2170    }
2171    
2172    static void number_editor_set(GtkWidget *widget, int num) {
2173      int min = (int)g_object_get_data(G_OBJECT(widget), "min");
2174      int max = (int)g_object_get_data(G_OBJECT(widget), "max");
2175    
2176      if(num < min) num = min;
2177      if(num > max) num = max;
2178    
2179      GtkWidget *btn_inc =
2180        (GtkWidget*)g_object_get_data(G_OBJECT(widget), "btn_inc");
2181      gtk_widget_set_sensitive(btn_inc, num < max);
2182    
2183      GtkWidget *btn_dec =
2184        (GtkWidget*)g_object_get_data(G_OBJECT(widget), "btn_dec");
2185      gtk_widget_set_sensitive(btn_dec, num > min);
2186    
2187      GtkWidget *entry = g_object_get_data(G_OBJECT(widget), "entry");
2188      g_assert(entry);
2189      char *str = g_strdup_printf("%d", num);
2190      gtk_entry_set_text(GTK_ENTRY(entry), str);
2191      g_free(str);
2192    }
2193    
2194    static void on_number_decrease(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_increase(GtkWidget *widget, gpointer data) {
2200      number_editor_set(GTK_WIDGET(data),
2201        number_editor_get(GTK_WIDGET(data)) + 1);
2202    }
2203    
2204    static void on_number_changed(GtkWidget *widget, gpointer data) {
2205      number_editor_set(GTK_WIDGET(data),
2206        number_editor_get(GTK_WIDGET(data)));
2207    }
2208    
2209    GtkWidget *number_editor_new(int current, int min, int max) {
2210    #ifndef USE_MAEMO
2211      GtkObject *adj = gtk_adjustment_new(current, min, max, 1, 10, 10);
2212      return gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0);
2213    #elif MAEMO_VERSION_MAJOR < 5
2214      GtkWidget *widget = hildon_number_editor_new(min, max);
2215      hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(widget), current);
2216      return widget;
2217    #else
2218      GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
2219      g_object_set_data(G_OBJECT(hbox), "min", (gpointer)min);
2220      g_object_set_data(G_OBJECT(hbox), "max", (gpointer)max);
2221    
2222      GtkWidget *btn_dec = button_new_with_label("  -  ");
2223      g_object_set_data(G_OBJECT(hbox), "btn_dec", btn_dec);
2224      gtk_signal_connect(GTK_OBJECT(btn_dec), "clicked",
2225                         (GtkSignalFunc)on_number_decrease, hbox);
2226      gtk_box_pack_start(GTK_BOX(hbox), btn_dec, FALSE, FALSE, 0);
2227    
2228      GtkWidget *entry = hildon_entry_new(HILDON_SIZE_AUTO);
2229      g_object_set_data(G_OBJECT(hbox), "entry", entry);
2230      g_signal_connect(G_OBJECT(entry), "changed",
2231                       G_CALLBACK(on_number_changed), hbox);
2232      gtk_entry_set_width_chars(GTK_ENTRY(entry), 2);
2233      hildon_gtk_entry_set_input_mode(GTK_ENTRY(entry),
2234                                      HILDON_GTK_INPUT_MODE_NUMERIC);
2235      gtk_box_pack_start_defaults(GTK_BOX(hbox), entry);
2236    
2237      GtkWidget *btn_inc = button_new_with_label("  +  ");
2238      g_object_set_data(G_OBJECT(hbox), "btn_inc", btn_inc);
2239      gtk_signal_connect(GTK_OBJECT(btn_inc), "clicked",
2240                         (GtkSignalFunc)on_number_increase, hbox);
2241      gtk_box_pack_start(GTK_BOX(hbox), btn_inc, FALSE, FALSE, 0);
2242    
2243      number_editor_set(hbox, current);
2244    
2245      return hbox;
2246    #endif
2247    }
2248    
2249    int number_editor_get_value(GtkWidget *widget) {
2250    #ifndef USE_MAEMO
2251      return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
2252    #elif MAEMO_VERSION_MAJOR < 5
2253      return hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(widget));
2254    #else
2255      return number_editor_get(widget);
2256    #endif
2257    }

Legend:
Removed from v.243  
changed lines
  Added in v.244