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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
/*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser 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 Lesser General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*
* Authors:
* Not Zed <notzed@lostzed.mmc.com.au>
* Jeffrey Stedfast <fejj@ximian.com>
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
*
*/
#if !defined (__E_UTIL_H_INSIDE__) && !defined (LIBEUTIL_COMPILATION)
#error "Only <e-util/e-util.h> should be included directly."
#endif
#ifndef E_FILTER_RULE_H
#define E_FILTER_RULE_H
#include <e-util/e-filter-part.h>
/* Standard GObject macros */
#define E_TYPE_FILTER_RULE \
(e_filter_rule_get_type ())
#define E_FILTER_RULE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST \
((obj), E_TYPE_FILTER_RULE, EFilterRule))
#define E_FILTER_RULE_CLASS(cls) \
(G_TYPE_CHECK_CLASS_CAST \
((cls), E_TYPE_FILTER_RULE, EFilterRuleClass))
#define E_IS_FILTER_RULE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE \
((obj), E_TYPE_FILTER_RULE))
#define E_IS_FILTER_RULE_CLASS(cls) \
(G_TYPE_CHECK_CLASS_TYPE \
((cls), E_TYPE_FILTER_RULE))
#define E_FILTER_RULE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS \
((obj), E_TYPE_FILTER_RULE, EFilterRuleClass))
G_BEGIN_DECLS
struct _RuleContext;
typedef struct _EFilterRule EFilterRule;
typedef struct _EFilterRuleClass EFilterRuleClass;
typedef struct _EFilterRulePrivate EFilterRulePrivate;
enum _filter_grouping_t {
E_FILTER_GROUP_ALL, /* all rules must match */
E_FILTER_GROUP_ANY /* any rule must match */
};
/* threading, if the context supports it */
enum _filter_threading_t {
E_FILTER_THREAD_NONE, /* don't add any thread matching */
E_FILTER_THREAD_ALL, /* add all possible threads */
E_FILTER_THREAD_REPLIES, /* add only replies */
E_FILTER_THREAD_REPLIES_PARENTS, /* replies plus parents */
E_FILTER_THREAD_SINGLE /* messages with no replies or parents */
};
#define E_FILTER_SOURCE_INCOMING "incoming" /* performed on incoming email */
#define E_FILTER_SOURCE_DEMAND "demand" /* performed on the selected folder
* when the user asks for it */
#define E_FILTER_SOURCE_OUTGOING "outgoing"/* performed on outgoing mail */
#define E_FILTER_SOURCE_JUNKTEST "junktest"/* check incoming mail for junk */
struct _EFilterRule {
GObject parent_object;
EFilterRulePrivate *priv;
gchar *name;
gchar *source;
enum _filter_grouping_t grouping;
enum _filter_threading_t threading;
guint system:1; /* this is a system rule, cannot be edited/deleted */
GList *parts;
gboolean enabled;
};
struct _EFilterRuleClass {
GObjectClass parent_class;
/* virtual methods */
gint (*validate) (EFilterRule *rule,
EAlert **alert);
gint (*eq) (EFilterRule *rule_a,
EFilterRule *rule_b);
xmlNodePtr (*xml_encode) (EFilterRule *rule);
gint (*xml_decode) (EFilterRule *rule,
xmlNodePtr node,
struct _ERuleContext *context);
void (*build_code) (EFilterRule *rule,
GString *out);
void (*copy) (EFilterRule *dst_rule,
EFilterRule *src_rule);
GtkWidget * (*get_widget) (EFilterRule *rule,
struct _ERuleContext *context);
/* signals */
void (*changed) (EFilterRule *rule);
};
GType e_filter_rule_get_type (void) G_GNUC_CONST;
EFilterRule * e_filter_rule_new (void);
EFilterRule * e_filter_rule_clone (EFilterRule *rule);
void e_filter_rule_set_name (EFilterRule *rule,
const gchar *name);
void e_filter_rule_set_source (EFilterRule *rule,
const gchar *source);
gint e_filter_rule_validate (EFilterRule *rule,
EAlert **alert);
gint e_filter_rule_eq (EFilterRule *rule_a,
EFilterRule *rule_b);
xmlNodePtr e_filter_rule_xml_encode (EFilterRule *rule);
gint e_filter_rule_xml_decode (EFilterRule *rule,
xmlNodePtr node,
struct _ERuleContext *context);
void e_filter_rule_copy (EFilterRule *dst_rule,
EFilterRule *src_rule);
void e_filter_rule_add_part (EFilterRule *rule,
EFilterPart *part);
void e_filter_rule_remove_part (EFilterRule *rule,
EFilterPart *part);
void e_filter_rule_replace_part (EFilterRule *rule,
EFilterPart *old_part,
EFilterPart *new_part);
GtkWidget * e_filter_rule_get_widget (EFilterRule *rule,
struct _ERuleContext *context);
void e_filter_rule_build_code (EFilterRule *rule,
GString *out);
void e_filter_rule_emit_changed (EFilterRule *rule);
/* static functions */
EFilterRule * e_filter_rule_next_list (GList *list,
EFilterRule *last,
const gchar *source);
EFilterRule * e_filter_rule_find_list (GList *list,
const gchar *name,
const gchar *source);
G_END_DECLS
#endif /* E_FILTER_RULE_H */
|