ephy-node-filter.h 4.33 KB
Newer Older
Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
1
/*
2 3
 *  Copyright © 2002 Olivier Martin <omartin@ifrance.com>
 *  Copyright © 2002 Jorn Baayen <jorn@nl.linux.org>
Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
4 5 6 7 8 9 10 11 12 13 14 15 16
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  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
17
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
18 19 20
 *
 */

21 22 23 24
#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
#error "Only <epiphany/epiphany.h> can be included directly."
#endif

Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#ifndef EPHY_NODE_FILTER_H
#define EPHY_NODE_FILTER_H

#include <glib-object.h>

#include "ephy-node.h"

G_BEGIN_DECLS

#define EPHY_TYPE_NODE_FILTER         (ephy_node_filter_get_type ())
#define EPHY_NODE_FILTER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_NODE_FILTER, EphyNodeFilter))
#define EPHY_NODE_FILTER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_NODE_FILTER, EphyNodeFilterClass))
#define EPHY_IS_NODE_FILTER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_NODE_FILTER))
#define EPHY_IS_NODE_FILTER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_NODE_FILTER))
#define EPHY_NODE_FILTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_NODE_FILTER, EphyNodeFilterClass))

41
typedef struct _EphyNodeFilterPrivate EphyNodeFilterPrivate;
Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
42 43 44 45 46

typedef struct
{
	GObject parent;

47
	/*< private >*/
Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
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
	EphyNodeFilterPrivate *priv;
} EphyNodeFilter;

typedef struct
{
	GObjectClass parent;

	void (*changed) (EphyNodeFilter *filter);
} EphyNodeFilterClass;

typedef enum
{
	EPHY_NODE_FILTER_EXPRESSION_ALWAYS_TRUE,           /* args: none */
	EPHY_NODE_FILTER_EXPRESSION_NODE_EQUALS,           /* args: EphyNode *a, EphyNode *b */
	EPHY_NODE_FILTER_EXPRESSION_EQUALS,                /* args: EphyNode *node */
	EPHY_NODE_FILTER_EXPRESSION_HAS_PARENT,            /* args: EphyNode *parent */
	EPHY_NODE_FILTER_EXPRESSION_HAS_CHILD,             /* args: EphyNode *child */
	EPHY_NODE_FILTER_EXPRESSION_NODE_PROP_EQUALS,      /* args: int prop_id, EphyNode *node */
	EPHY_NODE_FILTER_EXPRESSION_CHILD_PROP_EQUALS,     /* args: int prop_id, EphyNode *node */
	EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS,  /* args: int prop_id, const char *string */
	EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_EQUALS,    /* args: int prop_id, const char *string */
	EPHY_NODE_FILTER_EXPRESSION_KEY_PROP_CONTAINS,     /* args: int prop_id, const char *string */
	EPHY_NODE_FILTER_EXPRESSION_KEY_PROP_EQUALS,       /* args: int prop_id, const char *string */
	EPHY_NODE_FILTER_EXPRESSION_INT_PROP_EQUALS,       /* args: int prop_id, int int */
	EPHY_NODE_FILTER_EXPRESSION_INT_PROP_BIGGER_THAN,  /* args: int prop_id, int int */
	EPHY_NODE_FILTER_EXPRESSION_INT_PROP_LESS_THAN     /* args: int prop_id, int int */
} EphyNodeFilterExpressionType;

76
typedef struct _EphyNodeFilterExpression EphyNodeFilterExpression;
Marco Pesenti Gritti's avatar
Marco Pesenti Gritti committed
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

/* The filter starts iterating over all expressions at level 0,
 * if one of them is TRUE it continues to level 1, etc.
 * If it still has TRUE when there are no more expressions at the
 * next level, the result is TRUE. Otherwise, it's FALSE.
 */

GType           ephy_node_filter_get_type       (void);

EphyNodeFilter *ephy_node_filter_new            (void);

void            ephy_node_filter_add_expression (EphyNodeFilter *filter,
					         EphyNodeFilterExpression *expression,
					         int level);

void            ephy_node_filter_empty          (EphyNodeFilter *filter);

void            ephy_node_filter_done_changing  (EphyNodeFilter *filter);

gboolean        ephy_node_filter_evaluate       (EphyNodeFilter *filter,
					         EphyNode *node);

EphyNodeFilterExpression *ephy_node_filter_expression_new  (EphyNodeFilterExpressionType,
						            ...);
/* no need to free unless you didn't add the expression to a filter */
void                      ephy_node_filter_expression_free (EphyNodeFilterExpression *expression);

G_END_DECLS

#endif /* EPHY_NODE_FILTER_H */