1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2000-2002 Ximian Inc.
*
* Authors: Not Zed <notzed@lostzed.mmc.com.au>
* Jeffrey Stedfast <fejj@ximian.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef _FILTER_RULE_H
#define _FILTER_RULE_H
#include <glib.h>
#include <glib-object.h>
#include "filter-part.h"
#define FILTER_TYPE_RULE (filter_rule_get_type ())
#define FILTER_RULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FILTER_TYPE_RULE, FilterRule))
#define FILTER_RULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FILTER_TYPE_RULE, FilterRuleClass))
#define IS_FILTER_RULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FILTER_TYPE_RULE))
#define IS_FILTER_RULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FILTER_TYPE_RULE))
#define FILTER_RULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), FILTER_TYPE_RULE, FilterRuleClass))
struct _RuleContext;
typedef struct _FilterRule FilterRule;
typedef struct _FilterRuleClass FilterRuleClass;
enum _filter_grouping_t {
FILTER_GROUP_ALL, /* all rules must match */
FILTER_GROUP_ANY /* any rule must match */
};
/* threading, if the context supports it */
enum _filter_threading_t {
FILTER_THREAD_NONE, /* don't add any thread matching */
FILTER_THREAD_ALL, /* add all possible threads */
FILTER_THREAD_REPLIES, /* add only replies */
FILTER_THREAD_REPLIES_PARENTS, /* replies plus parents */
FILTER_THREAD_SINGLE, /* messages with no replies or parents */
};
#define FILTER_SOURCE_INCOMING "incoming" /* performed on incoming email */
#define FILTER_SOURCE_DEMAND "demand" /* performed on the selected folder
* when the user asks for it */
#define FILTER_SOURCE_OUTGOING "outgoing"/* performed on outgoing mail */
#define FILTER_SOURCE_JUNKTEST "junktest"/* perform only junktest on incoming mail */
struct _FilterRule {
GObject parent_object;
struct _FilterRulePrivate *priv;
char *name;
char *source;
enum _filter_grouping_t grouping;
enum _filter_threading_t threading;
unsigned int system:1; /* this is a system rule, cannot be edited/deleted */
GList *parts;
};
struct _FilterRuleClass {
GObjectClass parent_class;
/* virtual methods */
int (*validate) (FilterRule *);
int (*eq) (FilterRule *fr, FilterRule *cm);
xmlNodePtr (*xml_encode) (FilterRule *);
int (*xml_decode) (FilterRule *, xmlNodePtr, struct _RuleContext *);
void (*build_code) (FilterRule *, GString *out);
void (*copy) (FilterRule *dest, FilterRule *src);
GtkWidget *(*get_widget) (FilterRule *fr, struct _RuleContext *f);
/* signals */
void (*changed) (FilterRule *fr);
};
GType filter_rule_get_type (void);
FilterRule *filter_rule_new (void);
FilterRule *filter_rule_clone (FilterRule *base);
/* methods */
void filter_rule_set_name (FilterRule *fr, const char *name);
void filter_rule_set_source (FilterRule *fr, const char *source);
int filter_rule_validate (FilterRule *fr);
int filter_rule_eq (FilterRule *fr, FilterRule *cm);
xmlNodePtr filter_rule_xml_encode (FilterRule *fr);
int filter_rule_xml_decode (FilterRule *fr, xmlNodePtr node, struct _RuleContext *f);
void filter_rule_copy (FilterRule *dest, FilterRule *src);
void filter_rule_add_part (FilterRule *fr, FilterPart *fp);
void filter_rule_remove_part (FilterRule *fr, FilterPart *fp);
void filter_rule_replace_part (FilterRule *fr, FilterPart *fp, FilterPart *new);
GtkWidget *filter_rule_get_widget (FilterRule *fr, struct _RuleContext *f);
void filter_rule_build_code (FilterRule *fr, GString *out);
/*
void filter_rule_build_action(FilterRule *fr, GString *out);
*/
void filter_rule_emit_changed (FilterRule *fr);
/* static functions */
FilterRule *filter_rule_next_list (GList *l, FilterRule *last, const char *source);
FilterRule *filter_rule_find_list (GList *l, const char *name, const char *source);
#endif /* ! _FILTER_RULE_H */
|