aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-editor.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-10-12 21:53:50 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-10-12 21:53:50 +0800
commitc308f5eeef858ef813205af508e8ef94a8208d62 (patch)
treef2bad01816b88533321c63e809c0d609549b8f74 /filter/filter-editor.c
parent80237e0c26dd375b0269dc2099d49fc3cd50a4f2 (diff)
downloadgsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.tar
gsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.tar.gz
gsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.tar.bz2
gsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.tar.lz
gsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.tar.xz
gsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.tar.zst
gsoc2013-evolution-c308f5eeef858ef813205af508e8ef94a8208d62.zip
Report the percentage of file complete for the filter.
2000-10-11 Not Zed <NotZed@HelixCode.com> * filter-driver.c (filter_driver_filter_mbox): Report the percentage of file complete for the filter. 2000-10-10 Not Zed <NotZed@HelixCode.com> * filter-driver.c (filter_driver_run): Why on earth does this code ref all these objects for? This is not right at all. (filter_driver_run): Changed source type to a string. (filter_driver_run): REmove the very weird exception copying stuff - just ref it instead. (do_score): (do_colour): (do_stop): (do_copy): (mark_forward): (do_delete): Removed bogus 'terminated' testing. This is NOT NEEDED HERE. It is tested after every rule/action, and termination only makes sense at that point. (filter_driver_filter_message): new funciton (renamed), filter only a message. (filter_driver_filter_mbox): Filter a whole mbox. (filter_driver_run): If we aren't given an info, create a simple one based on the message headers. (filter_driver_filter_message): Renamed from filter_driver_run(). (filter_driver_set_status_func): Set the status callback function. (filter_driver_set_default_folder): Set the default folder for filtering. (report_status): Internal function to report the status of a given event. (do_copy): Removed a pointless cache lookup - duh, we do it in open_folder anyway (infact, we do it in camel too!!). (filter_driver_filter_message): Removed pointless re-refing of arguments. Why would anyone think this could be any use at all? (filter_driver_filter_folder): New function to filter a whole folder. * filter-editor.c (rule_add): api fixes. (rule_edit): (rule_up): (rule_down): (set_sensitive): This didn't take into account the source, now it does. (select_source): Fix for api changes. Changed the rather generic 'number' argument to be 'source', and a string. (filter_editor_construct): Changed the 'number' to 'source', and set the string appropriately. Added a warning for one case where the glade file is out of sync. * score-editor.c (score_editor_construct): (rule_edit): (rule_delete): (rule_up): (rule_down): (set_sensitive): api fixes. * vfolder-editor.c (set_sensitive): Api fixes. (vfolder_editor_construct): (rule_edit): (vfolder_editor_construct): * rule-context.h (RCNextRuleFunc): Added a source argument. * rule-context.c (rule_context_next_rule): Added source argument. (rule_context_find_rule): Added source argument. (rule_context_get_rank_rule): Added source argument. (rule_context_get_rank_rule_with_source): Removed. (save): Fixed for changes to RCNextRuleFunc prototype. * filter-rule.h: Changed the source to be a string, removed the filter_source_t type. * filter-rule.c (filter_rule_set_source): New function to set the source of a rule. What idiot ran this code through indent? (filter_rule_find_list): Added a source argument. (filter_rule_next_list): Added a source argument. (get_widget): Fixed the wording. You dont remove search parts, you can only remove the last one. Why you even need to mention they are search 'criteria' is beyond me. Whoever added the scrolled window needs to be shot, its the single most awful GUI feature ever invented (ranks with the close button next to maximise). (xml_encode): Save source as a string (if present). (xml_decode): Likewise for loading & fixed a small memleak. (filter_rule_finalise): Free source. svn path=/trunk/; revision=5884
Diffstat (limited to 'filter/filter-editor.c')
-rw-r--r--filter/filter-editor.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/filter/filter-editor.c b/filter/filter-editor.c
index cb3e879f04..bed8a0f032 100644
--- a/filter/filter-editor.c
+++ b/filter/filter-editor.c
@@ -130,7 +130,7 @@ struct _editor_data {
FilterRule *current;
GtkList *list;
GtkButton *buttons[BUTTON_LAST];
- enum _filter_source_t current_source;
+ char *current_source;
};
static void set_sensitive (struct _editor_data *data);
@@ -147,7 +147,7 @@ rule_add (GtkWidget *widget, struct _editor_data *data)
d(printf ("add rule\n"));
/* create a new rule with 1 match and 1 action */
rule = filter_filter_new ();
- ((FilterRule *)rule)->source = data->current_source;
+ filter_rule_set_source((FilterRule *)rule, data->current_source);
part = rule_context_next_part (data->f, NULL);
filter_rule_add_part ((FilterRule *)rule, filter_part_clone (part));
@@ -196,15 +196,13 @@ rule_edit (GtkWidget *widget, struct _editor_data *data)
d(printf ("edit rule\n"));
rule = data->current;
w = filter_rule_get_widget (rule, data->f);
- gd = gnome_dialog_new (_("Edit Rule"),
- GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL,
- NULL);
+ gd = gnome_dialog_new(_("Edit Rule"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (gd)->vbox), w, FALSE, TRUE, 0);
gtk_widget_show (gd);
result = gnome_dialog_run_and_close (GNOME_DIALOG (gd));
if (result == 0) {
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
if (pos != -1) {
GtkListItem *item = g_list_nth_data (data->list->children, pos);
gchar *s = e_utf8_to_gtk_string ((GtkWidget *) item, data->current->name);
@@ -222,7 +220,7 @@ rule_delete (GtkWidget *widget, struct _editor_data *data)
GtkListItem *item;
d(printf("ddelete rule\n"));
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
if (pos != -1) {
rule_context_remove_rule (data->f, data->current);
@@ -260,7 +258,7 @@ rule_up (GtkWidget *widget, struct _editor_data *data)
int pos;
d(printf("up rule\n"));
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
if (pos > 0) {
rule_move (data, pos, pos-1);
}
@@ -272,7 +270,7 @@ rule_down (GtkWidget *widget, struct _editor_data *data)
int pos;
d(printf ("down rule\n"));
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
rule_move (data, pos, pos+1);
}
@@ -293,7 +291,7 @@ set_sensitive (struct _editor_data *data)
FilterRule *rule = NULL;
int index = -1, count = 0;
- while ((rule = rule_context_next_rule (data->f, rule))) {
+ while ((rule = rule_context_next_rule (data->f, rule, data->current_source))) {
if (rule == data->current)
index=count;
count++;
@@ -335,22 +333,16 @@ select_source (GtkMenuItem *mi, struct _editor_data *data)
{
FilterRule *rule = NULL;
GList *newitems = NULL;
- enum _filter_source_t source;
+ char *source;
- source = (enum _filter_source_t) GPOINTER_TO_INT (
- gtk_object_get_data (GTK_OBJECT (mi), "number"));
+ source = gtk_object_get_data (GTK_OBJECT (mi), "source");
gtk_list_clear_items (GTK_LIST (data->list), 0, -1);
d(printf ("Checking for rules that are of type %d\n", source));
- while ((rule = rule_context_next_rule (data->f, rule)) != NULL) {
+ while ((rule = rule_context_next_rule (data->f, rule, source)) != NULL) {
GtkWidget *item;
- gchar *s;
-
- if (rule->source != source) {
- d(printf (" skipping %s: %d != %d\n", rule->name, rule->source, source));
- continue;
- }
+ char *s;
d(printf (" hit %s (%d)\n", rule->name, source));
s = e_utf8_to_gtk_string (GTK_WIDGET (data->list), rule->name);
@@ -367,6 +359,12 @@ select_source (GtkMenuItem *mi, struct _editor_data *data)
set_sensitive (data);
}
+static char *source_names[] = {
+ "incoming",
+ "demand",
+ "outgoing"
+};
+
GtkWidget *
filter_editor_construct (struct _FilterContext *f)
{
@@ -400,8 +398,12 @@ filter_editor_construct (struct _FilterContext *f)
if (i == 0)
firstitem = b;
- /* make sure that the glade is in sync with enum _filter_source_t! */
- gtk_object_set_data (GTK_OBJECT (b), "number", GINT_TO_POINTER (i));
+ /* make sure that the glade is in sync with the source list! */
+ if (i < sizeof(source_names)/sizeof(source_names[0])) {
+ gtk_object_set_data (GTK_OBJECT (b), "source", source_names[i]);
+ } else {
+ g_warning("Glade file " FILTER_GLADEDIR "/filter.glade out of sync with editor code");
+ }
gtk_signal_connect (GTK_OBJECT (b), "activate", select_source, data);
i++;