diff options
Diffstat (limited to 'e-util/e-filter-rule.h')
-rw-r--r-- | e-util/e-filter-rule.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/e-util/e-filter-rule.h b/e-util/e-filter-rule.h new file mode 100644 index 0000000000..8670265d88 --- /dev/null +++ b/e-util/e-filter-rule.h @@ -0,0 +1,163 @@ +/* + * 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; either + * version 2 of the License, or (at your option) version 3. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the 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); +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 */ |