aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-filter-rule.h
diff options
context:
space:
mode:
Diffstat (limited to 'e-util/e-filter-rule.h')
-rw-r--r--e-util/e-filter-rule.h163
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 */