commit eee41ab09d8ab73a9cb70c1444c5c6ba463949e3
parent 0314475ba605a707740f7e818d04a8ce66f619e8
Author: Colin Leroy <colin@colino.net>
Date: Fri, 24 Aug 2018 10:17:27 +0200
Filtering: simple GUI for date_after/before
Diffstat:
1 file changed, 49 insertions(+), 16 deletions(-)
diff --git a/src/prefs_matcher.c b/src/prefs_matcher.c
@@ -106,6 +106,7 @@ static struct Matcher {
GtkWidget *addressbook_select_btn;
GtkTreeModel *model_age;
+ GtkTreeModel *model_date;
GtkTreeModel *model_age_units;
GtkTreeModel *model_contain;
GtkTreeModel *model_found;
@@ -186,7 +187,10 @@ enum {
CRITERIA_AGE_LOWER_HOURS = 40,
CRITERIA_MESSAGEID = 41,
- CRITERIA_HEADERS_CONT = 42
+ CRITERIA_HEADERS_CONT = 42,
+
+ CRITERIA_DATE_AFTER = 43,
+ CRITERIA_DATE_BEFORE = 44
};
enum {
@@ -202,7 +206,8 @@ enum {
MATCH_PARTIAL = 9,
MATCH_ABOOK = 10,
MATCH_TAGS = 11,
- MATCH_TEST = 12
+ MATCH_TEST = 12,
+ MATCH_DATE = 13
};
enum {
@@ -338,6 +343,11 @@ static void prefs_matcher_models_create(void)
matcher.model_age_units = GTK_TREE_MODEL(store);
store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
+ COMBOBOX_ADD(store, _("after"), CRITERIA_DATE_AFTER);
+ COMBOBOX_ADD(store, _("before"), CRITERIA_DATE_BEFORE);
+ matcher.model_date = GTK_TREE_MODEL(store);
+
+ store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
COMBOBOX_ADD(store, _("higher than"), CRITERIA_SCORE_GREATER);
COMBOBOX_ADD(store, _("lower than"), CRITERIA_SCORE_LOWER);
COMBOBOX_ADD(store, _("exactly"), CRITERIA_SCORE_EQUAL);
@@ -618,19 +628,20 @@ static void prefs_matcher_create(void)
criteria_combo = gtkut_sc_combobox_create(NULL, FALSE);
store = GTK_LIST_STORE(gtk_combo_box_get_model(
GTK_COMBO_BOX(criteria_combo)));
- COMBOBOX_ADD(store, _("All messages"), 0);
- COMBOBOX_ADD(store, _("Header"), 1);
- COMBOBOX_ADD(store, _("Age"), 2);
- COMBOBOX_ADD(store, _("Phrase"), 3);
- COMBOBOX_ADD(store, _("Flags"), 4);
- COMBOBOX_ADD(store, _("Color labels"), 5);
- COMBOBOX_ADD(store, _("Thread"), 6);
- COMBOBOX_ADD(store, _("Score"), 7);
- COMBOBOX_ADD(store, _("Size"), 8);
- COMBOBOX_ADD(store, _("Partially downloaded"), 9);
- COMBOBOX_ADD(store, _("Address book"), 10);
- COMBOBOX_ADD(store, _("Tags"), 11);
- COMBOBOX_ADD(store, _("External program test"), 12);
+ COMBOBOX_ADD(store, _("All messages"), MATCH_ALL);
+ COMBOBOX_ADD(store, _("Header"), MATCH_HEADER);
+ COMBOBOX_ADD(store, _("Age"), MATCH_AGE);
+ COMBOBOX_ADD(store, _("Phrase"), MATCH_PHRASE);
+ COMBOBOX_ADD(store, _("Flags"), MATCH_FLAG);
+ COMBOBOX_ADD(store, _("Color labels"), MATCH_LABEL);
+ COMBOBOX_ADD(store, _("Thread"), MATCH_THREAD);
+ COMBOBOX_ADD(store, _("Score"), MATCH_SCORE);
+ COMBOBOX_ADD(store, _("Size"), MATCH_SIZE);
+ COMBOBOX_ADD(store, _("Partially downloaded"), MATCH_PARTIAL);
+ COMBOBOX_ADD(store, _("Address book"), MATCH_ABOOK);
+ COMBOBOX_ADD(store, _("Tags"), MATCH_TAGS);
+ COMBOBOX_ADD(store, _("External program test"), MATCH_TEST);
+ COMBOBOX_ADD(store, _("Date"), MATCH_DATE);
gtk_widget_set_size_request(criteria_combo, 150, -1);
gtk_combo_box_set_active(GTK_COMBO_BOX(criteria_combo), MATCH_ALL);
@@ -1160,6 +1171,10 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id)
return CRITERIA_AGE_GREATER;
case MATCHCRITERIA_AGE_LOWER:
return CRITERIA_AGE_LOWER;
+ case MATCHCRITERIA_DATE_AFTER:
+ return CRITERIA_DATE_AFTER;
+ case MATCHCRITERIA_DATE_BEFORE:
+ return CRITERIA_DATE_BEFORE;
case MATCHCRITERIA_SCORE_GREATER:
return CRITERIA_SCORE_GREATER;
case MATCHCRITERIA_SCORE_LOWER:
@@ -1256,6 +1271,10 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id)
return MATCHCRITERIA_AGE_GREATER_HOURS;
case CRITERIA_AGE_LOWER_HOURS:
return MATCHCRITERIA_AGE_LOWER_HOURS;
+ case CRITERIA_DATE_AFTER:
+ return MATCHCRITERIA_DATE_AFTER;
+ case CRITERIA_DATE_BEFORE:
+ return MATCHCRITERIA_DATE_BEFORE;
case CRITERIA_SCORE_GREATER:
return MATCHCRITERIA_SCORE_GREATER;
case CRITERIA_SCORE_LOWER:
@@ -1381,6 +1400,7 @@ static gint prefs_matcher_get_criteria(void)
case MATCH_ALL:
return CRITERIA_ALL;
case MATCH_AGE:
+ case MATCH_DATE:
case MATCH_SCORE:
case MATCH_SIZE:
case MATCH_FLAG:
@@ -1524,6 +1544,8 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void)
case CRITERIA_HEADERS_PART:
case CRITERIA_HEADERS_CONT:
case CRITERIA_BODY_PART:
+ case CRITERIA_DATE_AFTER:
+ case CRITERIA_DATE_BEFORE:
case CRITERIA_MESSAGE:
expr = gtk_entry_get_text(GTK_ENTRY(matcher.string_entry));
@@ -1927,7 +1949,7 @@ static void prefs_matcher_criteria_select(GtkWidget *widget,
(value == MATCH_ABOOK));
prefs_matcher_enable_widget(matcher.string_entry,
(MATCH_CASE_REGEXP(value) ||
- value == MATCH_TEST));
+ value == MATCH_TEST || value == MATCH_DATE));
prefs_matcher_enable_widget(matcher.numeric_entry,
MATCH_NUMERIC(value));
prefs_matcher_enable_widget(matcher.numeric_label,
@@ -1965,6 +1987,10 @@ static void prefs_matcher_criteria_select(GtkWidget *widget,
gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Header"));
gtk_label_set_text(GTK_LABEL(matcher.match_label2), _("content is"));
break;
+ case MATCH_DATE:
+ prefs_matcher_set_model(matcher.match_combo, matcher.model_date);
+ gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Date is"));
+ break;
case MATCH_AGE:
prefs_matcher_set_model(matcher.match_combo, matcher.model_age);
prefs_matcher_set_model(matcher.match_combo2, matcher.model_age_units);
@@ -2301,6 +2327,10 @@ static void prefs_matcher_set_criteria(const gint criteria)
case CRITERIA_AGE_LOWER_HOURS:
match_criteria = MATCH_AGE;
break;
+ case CRITERIA_DATE_AFTER:
+ case CRITERIA_DATE_BEFORE:
+ match_criteria = MATCH_DATE;
+ break;
case CRITERIA_SCORE_GREATER:
case CRITERIA_SCORE_LOWER:
case CRITERIA_SCORE_EQUAL:
@@ -2373,6 +2403,7 @@ static void prefs_matcher_set_criteria(const gint criteria)
criteria);
break;
case MATCH_AGE:
+ case MATCH_DATE:
case MATCH_SCORE:
case MATCH_SIZE:
case MATCH_FLAG:
@@ -2500,6 +2531,8 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
case MATCHCRITERIA_BODY_PART:
case MATCHCRITERIA_MESSAGE:
case MATCHCRITERIA_TEST:
+ case MATCHCRITERIA_DATE_AFTER:
+ case MATCHCRITERIA_DATE_BEFORE:
gtk_entry_set_text(GTK_ENTRY(matcher.string_entry), prop->expr);
break;