Exemple #1
0
static int rule_add(char *lhs, char *rhs)
{
  int err= 0;

  if(lhs && *lhs)
  {
    int c;
    rule_t **R;

    for(R=&rules[0], c= (int)(unsigned char)*lhs; c && (err==0); c= (int)(unsigned char)*++lhs)
    {
      if( !R[c] )
        R[c]= rule_new();

      if(R[c])
      {
        if(lhs[1])
          R= R[c]->rules;

        else
          R[c]->rhs= (rhs ? rhs : "");  /* Fri Feb 24 18:20:39 1995 */
      }
      else err= 2;
    }
  }
  else err= 1;

  return err;
}
Exemple #2
0
rule_t *rule_first(xmlDocPtr doc)
{
	xmlNodePtr	curNode;
	curNode = xmlDocGetRootElement(doc);
	if(curNode == NULL) return NULL;
	curNode = curNode->xmlChildrenNode;
	if(curNode == NULL) return NULL;
	curNode = curNode->next; // because curNode is text node \r\t	
	return rule_new(curNode);
}
Exemple #3
0
rule_t *rule_findby(xmlDocPtr doc,const char *name)
{
	xmlXPathContextPtr	context;
	xmlXPathObjectPtr	xpathObj;
	context = xmlXPathNewContext(doc);
	char	path[PATH_SIZE];
	snprintf(path, PATH_SIZE, "//rule[@name='%s']", name);
	xpathObj = xmlXPathEvalExpression((xmlChar *)path, context);	
	xmlXPathFreeContext(context);
	
	if(xpathObj == NULL) return NULL;
	xmlNodePtr node = xpathObj->nodesetval->nodeTab[0];
	return rule_new(node);
}
Exemple #4
0
void
itemset_add_rule (itemSetPtr itemSet,
                  const gchar *ruleId,
                  const gchar *value,
                  gboolean additive)
{
	rulePtr		rule;

	rule = rule_new (ruleId, value, additive);
	if (rule)
		itemSet->rules = g_slist_append (itemSet->rules, rule);
	else
		g_warning ("unknown search folder rule id: \"%s\"", ruleId);
}
Exemple #5
0
static void
do_ruletype_changed (struct changeRequest	*changeRequest)
{
    ruleInfoPtr		ruleInfo;
    rulePtr			rule;

    rule = g_object_get_data (G_OBJECT (changeRequest->paramHBox), "rule");
    if (rule) {
        changeRequest->editor->priv->newRules = g_slist_remove (changeRequest->editor->priv->newRules, rule);
        rule_free (rule);
    }
    ruleInfo = g_slist_nth_data (rule_get_available_rules (), changeRequest->rule);
    rule = rule_new (ruleInfo->ruleId, "", TRUE);
    changeRequest->editor->priv->newRules = g_slist_append (changeRequest->editor->priv->newRules, rule);

    rule_editor_setup_widgets (changeRequest, rule);
}
Exemple #6
0
void
rule_editor_add_rule (RuleEditor *re, rulePtr rule)
{
    GSList			*ruleIter;
    GtkWidget		*hbox, *hbox2, *widget;
    GtkListStore		*store;
    struct changeRequest	*changeRequest, *selected = NULL;
    gint			i = 0, active = 0;

    hbox = gtk_hbox_new (FALSE, 2);	/* hbox to contain all rule widgets */
    hbox2 = gtk_hbox_new (FALSE, 2);	/* another hbox where the rule specific widgets are added */

    /* set up the rule type selection popup */
    store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
    ruleIter = rule_get_available_rules ();
    while (ruleIter) {
        ruleInfoPtr ruleInfo = (ruleInfoPtr)ruleIter->data;
        GtkTreeIter iter;

        /* we add a change request to each popup option */
        changeRequest = g_new0 (struct changeRequest, 1);
        changeRequest->paramHBox = hbox2;
        changeRequest->rule = i;
        changeRequest->editor = re;

        if (0 == i)
            selected = changeRequest;

        /* build the menu option */
        gtk_list_store_append (store, &iter);
        gtk_list_store_set (store, &iter, 0, ruleInfo->title, 1, changeRequest, -1);

        if (rule) {
            if (ruleInfo == rule->ruleInfo) {
                selected = changeRequest;
                active = i;
            }
        }

        ruleIter = g_slist_next (ruleIter);
        i++;
    }
    widget = gtk_combo_box_new ();
    ui_common_setup_combo_text (GTK_COMBO_BOX (widget), 0);

    gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
    gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active);
    g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (on_ruletype_changed), NULL);


    gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
    gtk_box_pack_start (GTK_BOX (hbox), hbox2, FALSE, FALSE, 0);

    if (!rule) {
        /* fake a rule type change to initialize parameter widgets */
        do_ruletype_changed (selected);
    } else {
        rulePtr newRule = rule_new (rule->ruleInfo->ruleId, rule->value, rule->additive);

        /* set up widgets with existing rule type and value */
        rule_editor_setup_widgets (selected, newRule);

        /* add the rule to the list of new rules */
        re->priv->newRules = g_slist_append (re->priv->newRules, newRule);
    }

    /* add remove button */
    changeRequest = g_new0 (struct changeRequest, 1);
    changeRequest->hbox = hbox;
    changeRequest->paramHBox = hbox2;
    changeRequest->editor = re;
    widget = gtk_button_new_from_stock ("gtk-remove");
    gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
    g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (on_ruleremove_clicked), changeRequest);

    /* and insert everything in the dialog */
    gtk_widget_show_all (hbox);
    gtk_box_pack_start (GTK_BOX (re->priv->root), hbox, FALSE, TRUE, 0);
}