diff -Naur Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-enum-types.c Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-enum-types.c --- Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-enum-types.c 2009-08-19 04:12:54.000000000 +0200 +++ Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-enum-types.c 2011-03-19 12:48:24.948999995 +0100 @@ -31,6 +31,7 @@ static GType case_renamer_mode_type; static GType insert_mode_type; static GType number_mode_type; +static GType order_mode_type; static GType offset_mode_type; static GType text_mode_type; static GType date_mode_type; @@ -62,6 +63,14 @@ GType +thunar_sbr_order_mode_get_type (void) +{ + return order_mode_type; +} + + + +GType thunar_sbr_offset_mode_get_type (void) { return offset_mode_type; @@ -113,6 +122,13 @@ { 0, NULL, NULL, }, }; + static const GEnumValue order_mode_values[] = + { + { THUNAR_SBR_ORDER_MODE_ASC, "THUNAR_SBR_ORDER_MODE_ASC", N_ ("Ascending"), }, + { THUNAR_SBR_ORDER_MODE_DESC, "THUNAR_SBR_ORDER_MODE_DESC", N_ ("Descending"), }, + { 0, NULL, NULL, }, + }; + static const GEnumValue offset_mode_values[] = { { THUNAR_SBR_OFFSET_MODE_LEFT, "THUNAR_SBR_OFFSET_MODE_LEFT", N_ ("From the front (left)"), }, @@ -143,6 +159,7 @@ case_renamer_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrCaseRenamerMode", case_renamer_mode_values); insert_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrInsertMode", insert_mode_values); number_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrNumberMode", number_mode_values); + order_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrOrderMode", order_mode_values); offset_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrOffsetMode", offset_mode_values); text_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrTextMode", text_mode_values); date_mode_type = thunarx_provider_plugin_register_enum (plugin, "ThunarSbrDateMode", date_mode_values); diff -Naur Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-enum-types.h Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-enum-types.h --- Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-enum-types.h 2010-01-07 20:46:19.000000000 +0100 +++ Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-enum-types.h 2011-03-19 12:50:18.780999993 +0100 @@ -87,6 +87,24 @@ GType thunar_sbr_number_mode_get_type (void) G_GNUC_CONST; +#define THUNAR_SBR_TYPE_ORDER_MODE (thunar_sbr_order_mode_get_type ()) + +/** + * ThunarSbrOrderMode: + * @THUNAR_SBR_ORDER_MODE_ASC : Sort order ascending (e.g. 1 to 100). + * @THUNAR_SBR_ORDER_MODE_DESC : Sort order descending (e.g. 100 to 1). + * + * The sort order mode for the #ThunarSbrNumberRenamer. + **/ +typedef enum +{ + THUNAR_SBR_ORDER_MODE_ASC, + THUNAR_SBR_ORDER_MODE_DESC, +} ThunarSbrOrderMode; + +GType thunar_sbr_order_mode_get_type (void) G_GNUC_CONST; + + #define THUNAR_SBR_TYPE_OFFSET_MODE (thunar_sbr_offset_mode_get_type ()) /** @@ -105,7 +123,6 @@ GType thunar_sbr_offset_mode_get_type (void) G_GNUC_CONST; - #define THUNAR_SBR_TYPE_TEXT_MODE (thunar_sbr_text_mode_get_type ()) /** diff -Naur Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-number-renamer.c Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-number-renamer.c --- Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-number-renamer.c 2009-09-10 18:49:46.000000000 +0200 +++ Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-number-renamer.c 2011-03-19 13:27:57.426000185 +0100 @@ -46,6 +46,7 @@ PROP_START, PROP_TEXT, PROP_TEXT_MODE, + PROP_ORDER_MODE, }; @@ -83,6 +84,7 @@ gchar *start; gchar *text; ThunarSbrTextMode text_mode; + ThunarSbrOrderMode order_mode; }; @@ -160,6 +162,20 @@ THUNAR_SBR_TYPE_TEXT_MODE, THUNAR_SBR_TEXT_MODE_NTO, G_PARAM_CONSTRUCT | G_PARAM_READWRITE)); + + /** + * ThunarSbrNumberRenamer:text-mode: + * + * The text mode for the renamer. + **/ + g_object_class_install_property (gobject_class, + PROP_ORDER_MODE, + g_param_spec_enum ("order-mode", + "order-mode", + "order-mode", + THUNAR_SBR_TYPE_ORDER_MODE, + THUNAR_SBR_ORDER_MODE_ASC, + G_PARAM_CONSTRUCT | G_PARAM_READWRITE)); } @@ -223,6 +239,15 @@ atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); + combo = gtk_combo_box_new_text (); + klass = g_type_class_ref (THUNAR_SBR_TYPE_ORDER_MODE); + for (n = 0; n < klass->n_values; ++n) + gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _(klass->values[n].value_nick)); + exo_mutual_binding_new (G_OBJECT (number_renamer), "order-mode", G_OBJECT (combo), "active"); + gtk_box_pack_end (GTK_BOX (hbox), combo, FALSE, FALSE, 0); + g_type_class_unref (klass); + gtk_widget_show (combo); + hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_end (GTK_BOX (number_renamer), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); @@ -311,6 +336,10 @@ g_value_set_enum (value, thunar_sbr_number_renamer_get_text_mode (number_renamer)); break; + case PROP_ORDER_MODE: + g_value_set_enum (value, thunar_sbr_number_renamer_get_order_mode (number_renamer)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -345,6 +374,10 @@ thunar_sbr_number_renamer_set_text_mode (number_renamer, g_value_get_enum (value)); break; + case PROP_ORDER_MODE: + thunar_sbr_number_renamer_set_order_mode (number_renamer, g_value_get_enum (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -377,13 +410,14 @@ gchar *name; gchar *number = NULL; guint start = 0; + guint calc_idx = 0; /* check whether "start" is valid for the "mode" */ if (number_renamer->mode < THUNAR_SBR_NUMBER_MODE_ABC) { - /* "start" must be a positive number */ - start = strtoul (number_renamer->start, &endp, 10); - invalid = (endp <= number_renamer->start || *endp != '\0'); + /* "start" must be a positive number */ + start = strtoul (number_renamer->start, &endp, 10); + invalid = (endp <= number_renamer->start || *endp != '\0'); } else if (number_renamer->mode == THUNAR_SBR_NUMBER_MODE_ABC) { @@ -398,30 +432,36 @@ if (G_UNLIKELY (invalid)) return g_strdup (text); + /* calculate number according to sort order */ + if (number_renamer->order_mode == THUNAR_SBR_ORDER_MODE_ASC) + calc_idx = start + idx; + else + calc_idx = (start > idx) ? start - idx : 0; + /* format the number */ switch (number_renamer->mode) { case THUNAR_SBR_NUMBER_MODE_123: - number = g_strdup_printf ("%u", start + idx); + number = g_strdup_printf ("%u", calc_idx); break; case THUNAR_SBR_NUMBER_MODE_010203: - number = g_strdup_printf ("%02u", start + idx); + number = g_strdup_printf ("%02u", calc_idx); break; case THUNAR_SBR_NUMBER_MODE_001002003: - number = g_strdup_printf ("%03u", start + idx); + number = g_strdup_printf ("%03u", calc_idx); break; case THUNAR_SBR_NUMBER_MODE_000100020003: - number = g_strdup_printf ("%04u", start + idx); + number = g_strdup_printf ("%04u", calc_idx); break; case THUNAR_SBR_NUMBER_MODE_ABC: if (start >= 'a' && start <= 'z') - number = g_strdup_printf ("%c", (gchar) (MIN (start + idx, 'z'))); + number = g_strdup_printf ("%c", (gchar) (MIN (calc_idx, 'z'))); else if (start >= 'A' && start <= 'Z') - number = g_strdup_printf ("%c", (gchar) (MIN (start + idx, 'Z'))); + number = g_strdup_printf ("%c", (gchar) (MIN (calc_idx, 'Z'))); else g_assert_not_reached (); break; @@ -722,4 +762,46 @@ +/** + * thunar_sbr_number_renamer_get_order_mode: + * @number_renamer : a #ThunarSbrNumberRenamer. + * + * Returns the order mode for the @number_renamer. + * + * Return value: the order mode for @number_renamer. + **/ +ThunarSbrOrderMode +thunar_sbr_number_renamer_get_order_mode (ThunarSbrNumberRenamer *number_renamer) +{ + g_return_val_if_fail (THUNAR_SBR_IS_NUMBER_RENAMER (number_renamer), THUNAR_SBR_ORDER_MODE_ASC); + return number_renamer->order_mode; +} + + +/** + * thunar_sbr_number_renamer_set_offset_mode: + * @number_renamer : a #ThunarSbrNumberRenamer. + * @text_mode : the new text mode for @number_renamer. + * + * Sets the text mode for @number_renamer to @text_mode. + **/ +void +thunar_sbr_number_renamer_set_order_mode (ThunarSbrNumberRenamer *number_renamer, + ThunarSbrOrderMode order_mode) +{ + g_return_if_fail (THUNAR_SBR_IS_NUMBER_RENAMER (number_renamer)); + + /* check if we have a new setting */ + if (G_LIKELY (number_renamer->order_mode != order_mode)) + { + /* apply the new setting */ + number_renamer->order_mode = order_mode; + + /* update the renamer */ + thunar_sbr_number_renamer_update (number_renamer); + + /* notify listeners */ + g_object_notify (G_OBJECT (number_renamer), "order-mode"); + } +} diff -Naur Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-number-renamer.h Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-number-renamer.h --- Thunar-1.3.0~/plugins/thunar-sbr/thunar-sbr-number-renamer.h 2010-01-07 20:46:19.000000000 +0100 +++ Thunar-1.3.0/plugins/thunar-sbr/thunar-sbr-number-renamer.h 2011-03-19 12:34:50.069999995 +0100 @@ -56,6 +56,9 @@ void thunar_sbr_number_renamer_set_text_mode (ThunarSbrNumberRenamer *number_renamer, ThunarSbrTextMode text_mode); +ThunarSbrOrderMode thunar_sbr_number_renamer_get_order_mode (ThunarSbrNumberRenamer *number_renamer); +void thunar_sbr_number_renamer_set_order_mode (ThunarSbrNumberRenamer *number_renamer, + ThunarSbrOrderMode order_mode); G_END_DECLS; #endif /* !__THUNAR_SBR_NUMBER_RENAMER_H__ */ --- Thunar-1.3.0~/po/de.po 2011-01-30 19:37:06.000000000 +0100 +++ Thunar-1.3.0/po/de.po 2011-03-19 13:34:29.366999993 +0100 @@ -2972,6 +2972,14 @@ msgstr "Zahl - Text - Alter Name" #: ../plugins/thunar-sbr/thunar-sbr-enum-types.c:127 +msgid "Ascending" +msgstr "Aufsteigend" + +#: ../plugins/thunar-sbr/thunar-sbr-enum-types.c:128 +msgid "Descending" +msgstr "Absteigend" + +#: ../plugins/thunar-sbr/thunar-sbr-enum-types.c:127 msgid "Text - Number" msgstr "Text - Zahl"