Пример #1
0
static gboolean
prop_save_timeout (LdapFavoriteSelector *fsel)
{
	TFavorites *bfav;
	TFavoritesAttributes fav;
	GError *error = NULL;
	gboolean allok;

	bfav = t_connection_get_favorites (fsel->priv->tcnc);

	memset (&fav, 0, sizeof (TFavoritesAttributes));
	fav.id = fsel->priv->properties_id;
	fav.type = T_FAVORITES_LDAP_DN;
	fav.name = (gchar*) gtk_entry_get_text (GTK_ENTRY (fsel->priv->properties_name));
	fav.descr = (gchar*) gtk_entry_get_text (GTK_ENTRY (fsel->priv->properties_descr));
	fav.contents = (gchar*) gtk_entry_get_text (GTK_ENTRY (fsel->priv->properties_name));

	allok = t_favorites_add (bfav, 0, &fav, ORDER_KEY_LDAP,
				       fsel->priv->properties_position, &error);
	if (! allok) {
		ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) fsel),
				    _("Could not add favorite: %s"),
				    error && error->message ? error->message : _("No detail"));
		if (error)
			g_error_free (error);
	}

	fsel->priv->prop_save_timeout = 0;
	return FALSE; /* remove timeout */
}
Пример #2
0
/*
 * relations_diagram_set_fav_id
 *
 * Sets the favorite ID of @diagram: ensure every displayed information is up to date
 */
static void
relations_diagram_set_fav_id (RelationsDiagram *diagram, gint fav_id, GError **error)
{
    g_return_if_fail (IS_RELATIONS_DIAGRAM (diagram));
    TFavoritesAttributes fav;

    if ((fav_id >=0) &&
            t_favorites_get (t_connection_get_favorites (diagram->priv->tcnc),
                             fav_id, &fav, error)) {
        gchar *str, *tmp;
        tmp = g_markup_printf_escaped (_("'%s' diagram"), fav.name);
        str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), tmp);
        g_free (tmp);
        gdaui_bar_set_text (diagram->priv->header, str);
        g_free (str);

        diagram->priv->fav_id = fav.id;

        t_favorites_reset_attributes (&fav);
    }
    else {
        gchar *str;
        str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), _("Unsaved"));
        gdaui_bar_set_text (diagram->priv->header, str);
        g_free (str);
        diagram->priv->fav_id = -1;
    }
}
Пример #3
0
static GtkWidget *
relations_diagram_get_tab_label (BrowserPage *page, GtkWidget **out_close_button)
{
    GtkWidget *wid;
    RelationsDiagram *diagram;
    gchar *tab_name = NULL;
    GdkPixbuf *table_pixbuf;

    diagram = RELATIONS_DIAGRAM (page);
    if (diagram->priv->fav_id > 0) {
        TFavoritesAttributes fav;
        if (t_favorites_get (t_connection_get_favorites (diagram->priv->tcnc),
                             diagram->priv->fav_id, &fav, NULL)) {
            tab_name = g_strdup (fav.name);
            t_favorites_reset_attributes (&fav);
        }
    }
    if (!tab_name)
        tab_name = g_strdup (_("Diagram"));

    table_pixbuf = ui_get_pixbuf_icon (UI_ICON_DIAGRAM);
    wid = ui_make_tab_label_with_pixbuf (tab_name,
                                         table_pixbuf,
                                         out_close_button ? TRUE : FALSE, out_close_button);
    g_free (tab_name);
    return wid;
}
Пример #4
0
static void
query_favorite_selector_dispose (GObject *object)
{
	QueryFavoriteSelector *tsel = (QueryFavoriteSelector *) object;

	/* free memory */
	if (tsel->priv) {
		if (tsel->priv->idle_update_favorites != 0)
			g_source_remove (tsel->priv->idle_update_favorites);
		if (tsel->priv->tree)
			g_object_unref (tsel->priv->tree);

		if (tsel->priv->tcnc) {
			g_signal_handlers_disconnect_by_func (t_connection_get_favorites (tsel->priv->tcnc),
							      G_CALLBACK (favorites_changed_cb), tsel);
			g_object_unref (tsel->priv->tcnc);
		}
		
		if (tsel->priv->popup_properties)
			gtk_widget_destroy (tsel->priv->popup_properties);
		if (tsel->priv->popup_menu)
			gtk_widget_destroy (tsel->priv->popup_menu);
		if (tsel->priv->prop_save_timeout)
			g_source_remove (tsel->priv->prop_save_timeout);

		g_free (tsel->priv);
		tsel->priv = NULL;
	}

	parent_class->dispose (object);
}
Пример #5
0
static void
favorite_delete_selected (LdapFavoriteSelector *fsel)
{
	GtkTreeModel *model;
	GtkTreeSelection *select;
	GtkTreeIter iter;
	
	select = gtk_tree_view_get_selection (GTK_TREE_VIEW (fsel->priv->treeview));
	if (gtk_tree_selection_get_selected (select, &model, &iter)) {
		TFavorites *bfav;
		TFavoritesAttributes fav;
		GError *lerror = NULL;
		
		memset (&fav, 0, sizeof (TFavoritesAttributes));
		gtk_tree_model_get (model, &iter,
				    COLUMN_ID, &(fav.id), -1);
		bfav = t_connection_get_favorites (fsel->priv->tcnc);
		if (!t_favorites_delete (bfav, 0, &fav, NULL)) {
			ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*)fsel),
					    _("Could not remove favorite: %s"),
					    lerror && lerror->message ? lerror->message : _("No detail"));
			if (lerror)
				g_error_free (lerror);
		}
	}
}
Пример #6
0
static void
sql_favorite_new_mitem_cb (G_GNUC_UNUSED GtkMenuItem *mitem, QueryConsolePage *tconsole)
{
	TFavorites *tfav;
	TFavoritesAttributes fav;
	GError *error = NULL;

	GdaSet *set;
	GtkWidget *dlg, *form;
	gint response;
	const GValue *cvalue;
	set = gda_set_new_inline (1, _("Favorite's name"),
				  G_TYPE_STRING, _("Unnamed query"));
	dlg = gdaui_basic_form_new_in_dialog (set,
					      (GtkWindow*) gtk_widget_get_toplevel (GTK_WIDGET (tconsole)),
					      _("Name of the favorite to create"),
					      _("Enter the name of the favorite to create"));
	form = g_object_get_data (G_OBJECT (dlg), "form");
	g_signal_connect (form, "activated",
			  G_CALLBACK (fav_form_name_activated_cb), dlg);
	response = gtk_dialog_run (GTK_DIALOG (dlg));
	if (response == GTK_RESPONSE_REJECT) {
		g_object_unref (set);
		gtk_widget_destroy (dlg);
		return;
	}

	memset (&fav, 0, sizeof (fav));
	fav.id = -1;
	fav.type = T_FAVORITES_QUERIES;
	fav.contents = query_editor_get_all_text (tconsole->priv->editor);
	cvalue = gda_set_get_holder_value (set, _("Favorite's name"));
	fav.name = (gchar*) g_value_get_string (cvalue);

	tfav = t_connection_get_favorites (tconsole->priv->tcnc);

	if (! t_favorites_add (tfav, 0, &fav, ORDER_KEY_QUERIES, G_MAXINT, &error)) {
		ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tconsole),
			       _("Could not add favorite: %s"),
			       error && error->message ? error->message : _("No detail"));
                if (error)
                        g_error_free (error);
	}
	else
		tconsole->priv->fav_id = fav.id;
	g_free (fav.contents);

	g_object_unref (set);
	gtk_widget_destroy (dlg);
}
Пример #7
0
/**
 * schema_browser_perspective_new
 *
 * Creates new #BrowserPerspective widget which 
 */
BrowserPerspective *
schema_browser_perspective_new (BrowserWindow *bwin)
{
	TConnection *tcnc;
	BrowserPerspective *bpers;
	SchemaBrowserPerspective *perspective;
	gboolean fav_supported;

	bpers = (BrowserPerspective*) g_object_new (TYPE_SCHEMA_BROWSER_PERSPECTIVE, NULL);
	perspective = (SchemaBrowserPerspective*) bpers;
	tcnc = browser_window_get_connection (bwin);
	fav_supported = t_connection_get_favorites (tcnc) ? TRUE : FALSE;
	perspective->priv->bwin = bwin;

	/* contents */
	GtkWidget *paned, *wid, *nb;
	paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
	if (fav_supported) {
		wid = favorite_selector_new (tcnc);
		g_signal_connect (wid, "selection-changed",
				  G_CALLBACK (fav_selection_changed_cb), bpers);
		gtk_paned_add1 (GTK_PANED (paned), wid);
		gtk_paned_set_position (GTK_PANED (paned), DEFAULT_FAVORITES_SIZE);
		perspective->priv->favorites = wid;
	}

	nb = browser_perspective_create_notebook (bpers);
	perspective->priv->notebook = nb;
	gtk_paned_add2 (GTK_PANED (paned), nb);

	wid = objects_index_new (tcnc);
	g_signal_connect (wid, "selection-changed",
			  G_CALLBACK (objects_index_selection_changed_cb), bpers);
	gtk_notebook_append_page (GTK_NOTEBOOK (nb), wid,
				  ui_make_tab_label_with_icon (_("Index"), "help-about", FALSE, NULL));
	gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (nb), wid, TRUE);
	gtk_notebook_set_group_name (GTK_NOTEBOOK (nb), "schema-browser");

	gtk_notebook_set_menu_label (GTK_NOTEBOOK (nb), wid,
				     ui_make_tab_label_with_icon (_("Index"), "help-about", FALSE, NULL));
	gtk_box_pack_start (GTK_BOX (bpers), paned, TRUE, TRUE, 0);
	gtk_widget_show_all (paned);

	if (perspective->priv->favorites && !perspective->priv->favorites_shown)
		gtk_widget_hide (perspective->priv->favorites);

	return bpers;
}
Пример #8
0
static void
save_clicked_cb (GtkWidget *button, RelationsDiagram *diagram)
{
    gchar *str;

    if (!diagram->priv->popup_container) {
        GtkWidget *window, *wid, *hbox;

        window = popup_container_new (button);
        diagram->priv->popup_container = window;

        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
        gtk_container_add (GTK_CONTAINER (window), hbox);
        wid = gtk_label_new ("");
        str = g_strdup_printf ("%s:", _("Canvas's name"));
        gtk_label_set_markup (GTK_LABEL (wid), str);
        g_free (str);
        gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 0);

        wid = gtk_entry_new ();
        gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 5);
        diagram->priv->name_entry = wid;
        if (diagram->priv->fav_id > 0) {
            TFavoritesAttributes fav;
            if (t_favorites_get (t_connection_get_favorites (diagram->priv->tcnc),
                                 diagram->priv->fav_id, &fav, NULL)) {
                gtk_entry_set_text (GTK_ENTRY (wid), fav.name);
                t_favorites_reset_attributes (&fav);
            }
        }

        g_signal_connect (wid, "activate",
                          G_CALLBACK (real_save_clicked_cb), diagram);

        wid = gtk_button_new_with_label (_("Save"));
        gtk_box_pack_start (GTK_BOX (hbox), wid, FALSE, FALSE, 0);
        g_signal_connect (wid, "clicked",
                          G_CALLBACK (real_save_clicked_cb), diagram);
        diagram->priv->real_save_button = wid;

        gtk_widget_show_all (hbox);
    }

    gtk_widget_show (diagram->priv->popup_container);
}
Пример #9
0
static gboolean
tree_store_drag_drop_cb (G_GNUC_UNUSED GdauiTreeStore *store, const gchar *path,
			 GtkSelectionData *selection_data, QueryFavoriteSelector *tsel)
{
	TFavorites *bfav;
	TFavoritesAttributes fav;
	GError *error = NULL;
	gint pos;
	gboolean retval = TRUE;
	gint id;
	bfav = t_connection_get_favorites (tsel->priv->tcnc);

	id = t_favorites_find (bfav, 0, (gchar*) gtk_selection_data_get_data (selection_data),
			       &fav, NULL);
	if (id < 0) {
		memset (&fav, 0, sizeof (TFavoritesAttributes));
		fav.id = -1;
		fav.type = T_FAVORITES_QUERIES;
		fav.name = _("Unnamed query");
		fav.descr = NULL;
		fav.contents = (gchar*) gtk_selection_data_get_data (selection_data);
	}

	pos = atoi (path);
	/*g_print ("%s() path => %s, pos: %d\n", __FUNCTION__, path, pos);*/
	
	if (! t_favorites_add (bfav, 0, &fav, ORDER_KEY_QUERIES, pos, &error)) {
		ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tsel),
			       _("Could not add favorite: %s"),
			       error && error->message ? error->message : _("No detail"));
		if (error)
			g_error_free (error);
		retval = FALSE;
	}
	
	if (id >= 0)
		t_favorites_reset_attributes (&fav);

	return retval;
}
Пример #10
0
static void
favorite_delete_selected (QueryFavoriteSelector *tsel)
{
	GtkTreeModel *model;
	GtkTreeSelection *select;
	GtkTreeIter iter;
	
	select = gtk_tree_view_get_selection (GTK_TREE_VIEW (tsel->priv->treeview));
	if (gtk_tree_selection_get_selected (select, &model, &iter)) {
		TFavorites *bfav;
		TFavoritesAttributes fav;
		GError *lerror = NULL;
		
		memset (&fav, 0, sizeof (TFavoritesAttributes));
		gtk_tree_model_get (model, &iter,
				    COLUMN_ID, &(fav.id), -1);
		bfav = t_connection_get_favorites (tsel->priv->tcnc);
		if (! t_favorites_delete (bfav, 0, &fav, NULL)) {
			ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*)tsel),
				       _("Could not remove favorite: %s"),
				       lerror && lerror->message ? lerror->message : _("No detail"));
			if (lerror)
				g_error_free (lerror);
		}
		else {
			/* remove any associated action */
			gint id;
			gchar *tmp;
			tmp = g_strdup_printf ("QUERY%d", fav.id);
			id = t_favorites_find (bfav, 0, tmp, &fav, NULL);
			if (id >= 0) {
				t_favorites_delete (bfav, 0, &fav, NULL);
				/*g_print ("ACTION_DELETED %d: %s\n", fav.id, tmp);*/
			}
			g_free (tmp);
		}
	}
}
Пример #11
0
/*
 * POPUP
 */
static void
real_save_clicked_cb (GtkWidget *button, RelationsDiagram *diagram)
{
    gchar *str;

    str = browser_canvas_serialize_items (BROWSER_CANVAS (diagram->priv->canvas));

    GError *lerror = NULL;
    TFavorites *bfav;
    TFavoritesAttributes fav;

    memset (&fav, 0, sizeof (TFavoritesAttributes));
    fav.id = diagram->priv->fav_id;
    fav.type = T_FAVORITES_DIAGRAMS;
    fav.name = gtk_editable_get_chars (GTK_EDITABLE (diagram->priv->name_entry), 0, -1);
    if (!*fav.name) {
        g_free (fav.name);
        fav.name = g_strdup (_("Diagram"));
    }
    fav.contents = str;

    gtk_widget_hide (diagram->priv->popup_container);

    bfav = t_connection_get_favorites (diagram->priv->tcnc);
    if (! t_favorites_add (bfav, 0, &fav, ORDER_KEY_SCHEMA, G_MAXINT, &lerror)) {
        ui_show_error ((GtkWindow*) gtk_widget_get_toplevel (button),
                       "<b>%s:</b>\n%s",
                       _("Could not save diagram"),
                       lerror && lerror->message ? lerror->message : _("No detail"));
        if (lerror)
            g_error_free (lerror);
    }

    relations_diagram_set_fav_id (diagram, fav.id, NULL);

    g_free (fav.name);
    g_free (str);
}
Пример #12
0
static void
sql_favorite_modify_mitem_cb (G_GNUC_UNUSED GtkMenuItem *mitem, QueryConsolePage *tconsole)
{
	TFavorites *tfav;
	TFavoritesAttributes fav;
	GError *error = NULL;

	memset (&fav, 0, sizeof (fav));
	fav.id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (mitem), "favid"));
	fav.type = T_FAVORITES_QUERIES;
	fav.contents = query_editor_get_all_text (tconsole->priv->editor);
	fav.name = g_object_get_data (G_OBJECT (mitem), "favname");

	tfav = t_connection_get_favorites (tconsole->priv->tcnc);

	if (! t_favorites_add (tfav, 0, &fav, ORDER_KEY_QUERIES, G_MAXINT, &error)) {
		ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tconsole),
			       _("Could not add favorite: %s"),
			       error && error->message ? error->message : _("No detail"));
                if (error)
                        g_error_free (error);
	}
	g_free (fav.contents);
}
Пример #13
0
/**
 * query_favorite_selector_new
 *
 * Returns: a new #GtkWidget
 */
GtkWidget *
query_favorite_selector_new (TConnection *tcnc)
{
	QueryFavoriteSelector *tsel;
	GdaTreeManager *manager;

	g_return_val_if_fail (T_IS_CONNECTION (tcnc), NULL);
	tsel = QUERY_FAVORITE_SELECTOR (g_object_new (QUERY_FAVORITE_SELECTOR_TYPE, NULL));

	tsel->priv->tcnc = g_object_ref (tcnc);
	g_signal_connect (t_connection_get_favorites (tsel->priv->tcnc), "favorites-changed",
			  G_CALLBACK (favorites_changed_cb), tsel);
	
	/* create tree managers */
	tsel->priv->tree = gda_tree_new ();
	manager = mgr_favorites_new (tcnc, T_FAVORITES_QUERIES, ORDER_KEY_QUERIES);
        gda_tree_add_manager (tsel->priv->tree, manager);
	g_object_unref (manager);

	/* update the tree's contents */
	if (! gda_tree_update_all (tsel->priv->tree, NULL)) {
		if (tsel->priv->idle_update_favorites == 0)
			tsel->priv->idle_update_favorites = g_idle_add ((GSourceFunc) idle_update_favorites, tsel);
	}

	/* header */
	GtkWidget *label;
	gchar *str;
	str = g_strdup_printf ("<b>%s</b>", _("Favorites"));
	label = gdaui_bar_new (str);
	g_free (str);
	gdaui_bar_set_icon_from_resource (GDAUI_BAR (label), "/images/gda-browser-bookmark.png");
        gtk_box_pack_start (GTK_BOX (tsel), label, FALSE, FALSE, 0);
        gtk_widget_show (label);

	/* tree model */
	GtkTreeModel *model;
	GtkWidget *treeview;
	GtkCellRenderer *renderer;
	GtkTreeViewColumn *column;

	model = gdaui_tree_store_new (tsel->priv->tree, 7,
				      G_TYPE_INT, MGR_FAVORITES_POSITION_ATT_NAME,
				      G_TYPE_OBJECT, "icon",
				      G_TYPE_STRING, MGR_FAVORITES_CONTENTS_ATT_NAME,
				      G_TYPE_UINT, MGR_FAVORITES_TYPE_ATT_NAME,
				      G_TYPE_INT, MGR_FAVORITES_ID_ATT_NAME,
				      G_TYPE_STRING, MGR_FAVORITES_NAME_ATT_NAME,
				      G_TYPE_STRING, "summary");
	treeview = ui_make_tree_view (model);
	tsel->priv->treeview = treeview;
	g_object_unref (model);

	/* icon */
	column = gtk_tree_view_column_new ();

	renderer = gtk_cell_renderer_pixbuf_new ();
	gtk_tree_view_column_pack_start (column, renderer, FALSE);
	gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", COLUMN_ICON);
	g_object_set ((GObject*) renderer, "yalign", 0., NULL);

	/* text */
	renderer = gtk_cell_renderer_text_new ();
	gtk_tree_view_column_pack_start (column, renderer, TRUE);
	gtk_tree_view_column_set_cell_data_func (column, renderer, (GtkTreeCellDataFunc) cell_data_func,
						 NULL, NULL);
	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
	
	/* scrolled window packing */
	GtkWidget *sw;
	sw = gtk_scrolled_window_new (NULL, NULL);
	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
					     GTK_SHADOW_ETCHED_IN);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
					GTK_POLICY_NEVER,
					GTK_POLICY_AUTOMATIC);
	gtk_container_add (GTK_CONTAINER (sw), treeview);
	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);	

	gtk_box_pack_start (GTK_BOX (tsel), sw, TRUE, TRUE, 0);
	gtk_widget_show_all (sw);
	g_signal_connect (G_OBJECT (treeview), "row-activated",
			  G_CALLBACK (selection_changed_cb), tsel);
	g_signal_connect (G_OBJECT (treeview), "key-press-event",
			  G_CALLBACK (key_press_event_cb), tsel);
	g_signal_connect (G_OBJECT (treeview), "popup-menu",
			  G_CALLBACK (popup_menu_cb), tsel);
	g_signal_connect (G_OBJECT (treeview), "button-press-event",
			  G_CALLBACK (button_press_event_cb), tsel);

	/* DnD */
	gtk_tree_view_enable_model_drag_dest (GTK_TREE_VIEW (treeview), dbo_table, G_N_ELEMENTS (dbo_table),
					      GDK_ACTION_COPY);
	gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (treeview), GDK_BUTTON1_MASK,
						dbo_table, G_N_ELEMENTS (dbo_table),
						GDK_ACTION_COPY | GDK_ACTION_MOVE);
	g_signal_connect (model, "drag-drop",
			  G_CALLBACK (tree_store_drag_drop_cb), tsel);
	g_signal_connect (model, "drag-can-drag",
			  G_CALLBACK (tree_store_drag_can_drag_cb), tsel);
	g_signal_connect (model, "drag-get",
			  G_CALLBACK (tree_store_drag_get_cb), tsel);

	return (GtkWidget*) tsel;
}
Пример #14
0
static void
properties_activated_cb (GtkMenuItem *mitem, QueryFavoriteSelector *tsel)
{
	if (! tsel->priv->popup_properties) {
		GtkWidget *pcont, *vbox, *hbox, *label, *entry, *text, *grid;
		gchar *str;
		
		pcont = popup_container_new (GTK_WIDGET (mitem));
		vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
		gtk_container_add (GTK_CONTAINER (pcont), vbox);
		
		label = gtk_label_new ("");
		str = g_strdup_printf ("<b>%s:</b>", _("Favorite's properties"));
		gtk_label_set_markup (GTK_LABEL (label), str);
		g_free (str);
		gtk_widget_set_halign (label, GTK_ALIGN_START);
		gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
		
		hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); /* HIG */
		gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
		label = gtk_label_new ("      ");
		gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
		
		grid = gtk_grid_new ();
		gtk_box_pack_start (GTK_BOX (hbox), grid, TRUE, TRUE, 0);
		
		label = gtk_label_new ("");
		str = g_strdup_printf ("<b>%s:</b>", _("Name"));
		gtk_label_set_markup (GTK_LABEL (label), str);
		g_free (str);
		gtk_widget_set_halign (label, GTK_ALIGN_START);
		gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
		
		label = gtk_label_new ("");
		str = g_strdup_printf ("<b>%s:</b>", _("SQL Code"));
		gtk_label_set_markup (GTK_LABEL (label), str);
		g_free (str);
		gtk_widget_set_halign (label, GTK_ALIGN_START);
		gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);

		label = gtk_label_new ("");
		str = g_strdup_printf ("<b>%s:</b>", _("Is action"));
		gtk_label_set_markup (GTK_LABEL (label), str);
		g_free (str);
		gtk_widget_set_tooltip_text (label, _("Check this option to make this favorite an action\n"
						      "which can be proposed for execution from grids\n"
						      "containing data. The parameters required to execute\n"
						      "the query will be defined from the row selected in the grid"));
		gtk_widget_set_halign (label, GTK_ALIGN_START);
		gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
		
		entry = gtk_entry_new ();
		gtk_grid_attach (GTK_GRID (grid), entry, 1, 0, 1, 1);
		tsel->priv->properties_name = entry;
		g_signal_connect (entry, "changed",
				  G_CALLBACK (property_changed_cb), tsel);
		
		text = query_editor_new ();
		query_editor_show_tooltip (QUERY_EDITOR (text), FALSE);
		gtk_widget_set_size_request (GTK_WIDGET (text), 400, 300);
		gtk_grid_attach (GTK_GRID (grid), text, 1, 1, 1, 1);
		tsel->priv->properties_text = text;
		g_signal_connect (text, "changed",
				  G_CALLBACK (property_changed_cb), tsel);

		entry = gtk_check_button_new ();
		gtk_grid_attach (GTK_GRID (grid), entry, 1, 2, 1, 1);
		tsel->priv->properties_action = entry;
		g_signal_connect (entry, "toggled",
				  G_CALLBACK (property_changed_cb), tsel);

		tsel->priv->popup_properties = pcont;
		gtk_widget_show_all (vbox);
	}

	/* adjust contents */
	GtkTreeSelection *selection;
	GtkTreeModel *model;
	GtkTreeIter iter;
	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tsel->priv->treeview));
	if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
		gchar *name, *contents;
		
		gtk_tree_model_get (model, &iter,
				    COLUMN_ID, &(tsel->priv->properties_id),
				    COLUMN_POSITION, &(tsel->priv->properties_position),
				    COLUMN_NAME, &name,
				    COLUMN_CONTENTS, &contents, -1);

		g_signal_handlers_block_by_func (tsel->priv->properties_name,
						 G_CALLBACK (property_changed_cb), tsel);
		gtk_entry_set_text (GTK_ENTRY (tsel->priv->properties_name), name);
		g_signal_handlers_unblock_by_func (tsel->priv->properties_name,
						   G_CALLBACK (property_changed_cb), tsel);
		g_free (name);

		g_signal_handlers_block_by_func (tsel->priv->properties_text,
						 G_CALLBACK (property_changed_cb), tsel);
		query_editor_set_text (QUERY_EDITOR (tsel->priv->properties_text), contents);
		g_signal_handlers_unblock_by_func (tsel->priv->properties_text,
						   G_CALLBACK (property_changed_cb), tsel);
		g_free (contents);

		/* action, if any */
		g_signal_handlers_block_by_func (tsel->priv->properties_action,
						 G_CALLBACK (property_changed_cb), tsel);
		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tsel->priv->properties_action), FALSE);
		if (tsel->priv->properties_id >= 0) {
			gint id;
			gchar *tmp;
			TFavorites *bfav;
			TFavoritesAttributes fav;
			bfav = t_connection_get_favorites (tsel->priv->tcnc);
			tmp = g_strdup_printf ("QUERY%d", tsel->priv->properties_id);
			id = t_favorites_find (bfav, 0, tmp, &fav, NULL);
			if (id >= 0) {
				gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tsel->priv->properties_action),
							      TRUE);
				/*g_print ("ACTION_USED %d: %s\n", fav.id, tmp);*/
			}
			g_free (tmp);
		}
		g_signal_handlers_unblock_by_func (tsel->priv->properties_action,
						   G_CALLBACK (property_changed_cb), tsel);

		gtk_widget_show (tsel->priv->popup_properties);
	}
}
Пример #15
0
static gboolean
prop_save_timeout (QueryFavoriteSelector *tsel)
{
	TFavorites *bfav;
	TFavoritesAttributes fav;
	GError *error = NULL;
	gboolean allok, actiondel = TRUE;

	bfav = t_connection_get_favorites (tsel->priv->tcnc);

	memset (&fav, 0, sizeof (TFavoritesAttributes));
	fav.id = tsel->priv->properties_id;
	fav.type = T_FAVORITES_QUERIES;
	fav.name = (gchar*) gtk_entry_get_text (GTK_ENTRY (tsel->priv->properties_name));
	fav.descr = NULL;
	fav.contents = query_editor_get_all_text (QUERY_EDITOR (tsel->priv->properties_text));

	allok = t_favorites_add (bfav, 0, &fav, ORDER_KEY_QUERIES,
				 tsel->priv->properties_position, &error);
	if (! allok) {
		ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tsel),
			       _("Could not add favorite: %s"),
			       error && error->message ? error->message : _("No detail"));
		if (error)
			g_error_free (error);
	}
	g_free (fav.contents);

	if (allok && (fav.id >= 0)) {
		gboolean is_action;
		gint qid = fav.id;
		is_action = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tsel->priv->properties_action));
		if (is_action) {
			fav.id = -1;
			fav.type = T_FAVORITES_ACTIONS;
			fav.name = (gchar*) gtk_entry_get_text (GTK_ENTRY (tsel->priv->properties_name));
			fav.descr = NULL;
			fav.contents = g_strdup_printf ("QUERY%d", qid);
			allok = t_favorites_add (bfav, 0, &fav, -1,
						 tsel->priv->properties_position, &error);
			if (! allok) {
				ui_show_error ((GtkWindow*) gtk_widget_get_toplevel ((GtkWidget*) tsel),
					       _("Could not add action: %s"),
					       error && error->message ? error->message : _("No detail"));
				if (error)
					g_error_free (error);
			}
			else
				actiondel = FALSE;
			/*g_print ("ACTION_ADDED %d: %s\n", fav.id, fav.contents);*/
			g_free (fav.contents);
		}
	}

	if (actiondel && (tsel->priv->properties_id >= 0)) {
		/* remove action */
		gint id;
		gchar *tmp;
		tmp = g_strdup_printf ("QUERY%d", tsel->priv->properties_id);
		id = t_favorites_find (bfav, 0, tmp, &fav, NULL);
		if (id >= 0) {
			t_favorites_delete (bfav, 0, &fav, NULL);
			/*g_print ("ACTION_DELETED %d: %s\n", fav.id, tmp);*/
		}
		g_free (tmp);
	}

	tsel->priv->prop_save_timeout = 0;
	return FALSE; /* remove timeout */
}
Пример #16
0
GtkWidget *
relations_diagram_new_with_fav_id (TConnection *tcnc, gint fav_id, GError **error)
{
    RelationsDiagram *diagram = NULL;
    TFavoritesAttributes fav;
    xmlDocPtr doc = NULL;

    if (! t_favorites_get (t_connection_get_favorites (tcnc),
                           fav_id, &fav, error))
        return FALSE;


    doc = xmlParseDoc (BAD_CAST fav.contents);
    if (!doc) {
        g_set_error (error, T_ERROR, T_INTERNAL_COMMAND_ERROR,
                     "%s", _("Error parsing favorite's contents"));
        goto out;
    }

    /* create diagram */
    diagram = RELATIONS_DIAGRAM (relations_diagram_new (tcnc));
    if (!diagram)
        goto out;
    gchar *str, *tmp;
    tmp = g_markup_printf_escaped (_("'%s' diagram"), fav.name);
    str = g_strdup_printf ("<b>%s</b>\n%s", _("Relations diagram"), tmp);
    g_free (tmp);
    gdaui_bar_set_text (diagram->priv->header, str);
    g_free (str);
    diagram->priv->fav_id = fav_id;
    relations_diagram_set_fav_id (diagram, fav_id, NULL);

    /* fill the diagram */
    xmlNodePtr root, node;
    root = xmlDocGetRootElement (doc);
    if (!root)
        goto out;
    for (node = root->children; node; node = node->next) {
        if (!strcmp ((gchar*) node->name, "table")) {
            xmlChar *schema;
            xmlChar *name;
            schema = xmlGetProp (node, BAD_CAST "schema");
            name = xmlGetProp (node, BAD_CAST "name");
            if (schema && name) {
                BrowserCanvasTable *table;
                GValue *v1, *v2;
                g_value_set_string ((v1 = gda_value_new (G_TYPE_STRING)), (gchar*) schema);
                g_value_set_string ((v2 = gda_value_new (G_TYPE_STRING)), (gchar*) name);
                xmlFree (schema);
                xmlFree (name);
                table = browser_canvas_db_relations_add_table (BROWSER_CANVAS_DB_RELATIONS (diagram->priv->canvas),
                        NULL, v1, v2);
                gda_value_free (v1);
                gda_value_free (v2);
                if (table) {
                    xmlChar *x, *y;
                    x = xmlGetProp (node, BAD_CAST "x");
                    y = xmlGetProp (node, BAD_CAST "y");
                    browser_canvas_translate_item (BROWSER_CANVAS (diagram->priv->canvas),
                                                   (BrowserCanvasItem*) table,
                                                   x ? g_ascii_strtod ((gchar*) x, NULL) : 0.,
                                                   y ? g_ascii_strtod ((gchar*) y, NULL) : 0.);
                    if (x)
                        xmlFree (x);
                    if (y)
                        xmlFree (y);
                }
            }
            else {
                if (schema)
                    xmlFree (schema);
                if (name)
                    xmlFree (name);
                g_set_error (error, T_ERROR, T_STORED_DATA_ERROR,
                             "%s", _("Missing table attribute in favorite's contents"));
                gtk_widget_destroy ((GtkWidget*) diagram);
                diagram = NULL;
                goto out;
            }
        }
    }

out:
    t_favorites_reset_attributes (&fav);
    if (doc)
        xmlFreeDoc (doc);
    return (GtkWidget*) diagram;
}
Пример #17
0
static void
form_grid_populate_popup_cb (GtkWidget *wid, GtkMenu *menu, UiFormGrid *formgrid)
{
	/* add actions to execute to menu */
	GdaDataModelIter *iter;
	TConnection *tcnc = NULL;

	tcnc = get_t_connection (formgrid);
	if (!tcnc)
		return;
	
	iter = gdaui_data_selector_get_data_set (GDAUI_DATA_SELECTOR (formgrid->priv->raw_grid));

	/* actions */
	GSList *actions_list, *list;
	actions_list = t_favorites_actions_get (t_connection_get_favorites (tcnc),
							tcnc, GDA_SET (iter));
	if (actions_list) {
		GtkWidget *mitem, *submenu;
		mitem = gtk_menu_item_new_with_label (_("Execute action"));
		gtk_widget_show (mitem);
		gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem);
		
		submenu = gtk_menu_new ();
		gtk_menu_item_set_submenu (GTK_MENU_ITEM (mitem), submenu);
		for (list = actions_list; list; list = list->next) {
			TFavoritesAction *act = (TFavoritesAction*) list->data;
			mitem = gtk_menu_item_new_with_label (act->name);
			gtk_widget_show (mitem);
			gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mitem);
			g_object_set_data_full (G_OBJECT (mitem), "action", act,
						(GDestroyNotify) t_favorites_action_free);
			g_signal_connect (mitem, "activate",
					  G_CALLBACK (execute_action_mitem_cb), formgrid);
		}
		g_slist_free (actions_list);
	}

#ifdef HAVE_LDAP
	/* LDAP specific */
	if (t_connection_is_ldap (tcnc)) {
		GdaHolder *dnh;
		dnh = gda_set_get_holder (GDA_SET (iter), "dn");
		if (dnh) {
			const GValue *cvalue;
			cvalue = gda_holder_get_value (GDA_HOLDER (dnh));
			if (!cvalue && (G_VALUE_TYPE (cvalue) != G_TYPE_STRING))
				dnh = NULL;
		}
		if (!dnh) {
			GSList *list;
			for (list = GDA_SET (iter)->holders; list; list = list->next) {
				const GValue *cvalue;
				cvalue = gda_holder_get_value (GDA_HOLDER (list->data));
				if (cvalue && (G_VALUE_TYPE (cvalue) == G_TYPE_STRING) &&
				    gda_ldap_is_dn (g_value_get_string (cvalue))) {
					dnh = GDA_HOLDER (list->data);
					break;
				}
			}
		}

		if (dnh) {
			const GValue *cvalue;
			cvalue = gda_holder_get_value (dnh);

			GtkWidget *mitem;
			mitem = gtk_menu_item_new_with_label (_("View LDAP entry's details"));
			gtk_widget_show (mitem);
			gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem);
			g_object_set_data_full (G_OBJECT (mitem), "dn",
						g_value_dup_string (cvalue), g_free);
			g_signal_connect (mitem, "activate",
					  G_CALLBACK (ldap_view_dn_mitem_cb), formgrid);
		}
	}
#endif

	if (wid == formgrid->priv->raw_form) {
		GtkWidget *mitem;
		gboolean add_scale;
		g_object_get (G_OBJECT (formgrid->priv->overlay_form), "add-scale", &add_scale, NULL);
		mitem = gtk_check_menu_item_new_with_label (_("Zoom..."));
		gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mitem), add_scale);
		gtk_widget_show (mitem);
		gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem);
		g_signal_connect (mitem, "toggled",
				  G_CALLBACK (zoom_form_mitem_cb), formgrid);
	}
	else if (wid == formgrid->priv->raw_grid) {
		GtkWidget *mitem;
		gboolean add_scale;
		g_object_get (G_OBJECT (formgrid->priv->overlay_grid), "add-scale", &add_scale, NULL);
		mitem = gtk_check_menu_item_new_with_label (_("Zoom..."));
		gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mitem), add_scale);
		gtk_widget_show (mitem);
		gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), mitem);
		g_signal_connect (mitem, "toggled",
				  G_CALLBACK (zoom_grid_mitem_cb), formgrid);
	}
}
Пример #18
0
static void
sql_favorite_clicked_cb (G_GNUC_UNUSED GtkButton *button, QueryConsolePage *tconsole)
{
	GtkWidget *menu, *mitem;
	TFavorites *tfav;

	if (tconsole->priv->favorites_menu)
		gtk_widget_destroy (tconsole->priv->favorites_menu);

	menu = gtk_menu_new ();
	tconsole->priv->favorites_menu = menu;
	mitem = gtk_menu_item_new_with_label (_("New favorite"));
	g_signal_connect (mitem, "activate",
			  G_CALLBACK (sql_favorite_new_mitem_cb), tconsole);
	gtk_widget_show (mitem);
	gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);

	tfav = t_connection_get_favorites (tconsole->priv->tcnc);
	if (tconsole->priv->fav_id >= 0) {
		TFavoritesAttributes fav;
		if (t_favorites_get (tfav, tconsole->priv->fav_id, &fav, NULL)) {
			gchar *str;
			str = g_strdup_printf (_("Modify favorite '%s'"), fav.name);
			mitem = gtk_menu_item_new_with_label (str);
			g_free (str);
			g_signal_connect (mitem, "activate",
					  G_CALLBACK (sql_favorite_modify_mitem_cb), tconsole);
			g_object_set_data_full (G_OBJECT (mitem), "favname",
						g_strdup (fav.name), g_free);
			g_object_set_data (G_OBJECT (mitem), "favid",
					   GINT_TO_POINTER (tconsole->priv->fav_id));
			gtk_widget_show (mitem);
			gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);
			t_favorites_reset_attributes (&fav);
		}
	}

	GSList *allfav;
	allfav = t_favorites_list (tfav, 0, T_FAVORITES_QUERIES, ORDER_KEY_QUERIES, NULL);
	if (allfav) {
		GtkWidget *submenu;
		GSList *list;

		mitem = gtk_menu_item_new_with_label (_("Modify a favorite"));
		gtk_widget_show (mitem);
		gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);

		submenu = gtk_menu_new ();
		gtk_menu_item_set_submenu (GTK_MENU_ITEM (mitem), submenu);
		for (list = allfav; list; list = list->next) {
			TFavoritesAttributes *fav;
			fav = (TFavoritesAttributes*) list->data;
			if (fav->id == tconsole->priv->fav_id)
				continue;
			gchar *str;
			str = g_strdup_printf (_("Modify favorite '%s'"), fav->name);
			mitem = gtk_menu_item_new_with_label (str);
			g_free (str);
			g_signal_connect (mitem, "activate",
					  G_CALLBACK (sql_favorite_modify_mitem_cb), tconsole);
			g_object_set_data_full (G_OBJECT (mitem), "favname",
						g_strdup (fav->name), g_free);
			g_object_set_data (G_OBJECT (mitem), "favid",
					   GINT_TO_POINTER (fav->id));
			gtk_widget_show (mitem);
			gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mitem);
		}
		t_favorites_free_list (allfav);
	}

	gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
			NULL, NULL, 0,
			gtk_get_current_event_time ());
}