Re: Treeview column width changed signal
- From: Gorshkov <listsubscriptions oghma on ca>
- To: jeff_barish earthlink net, gtk-app-devel-list gnome org
- Subject: Re: Treeview column width changed signal
- Date: Sat, 09 Feb 2008 07:29:21 -0500
Jeffrey Barish wrote:
Kristian Rietveld wrote:
The problem with your first suggestion is that I have to hook every
situation in which the tree view can be destroyed.  The obvious one is when
I change data sets.  Exiting the program is another.  There will be others
when I implement more of the program.  It certainly is possible to record
the column widths at each of these points, but it sure is clumsy.
I do this exact thing in an application I'm developing now. But I only 
do it in one place - a callback routine that is called for both the 
delete and destroy events.
The problem with the second suggestion is that writing a file is exactly
what I need to do.  The point of this exercise is to record in a file the
width of each column as established by the user with the mouse so that the
columns will have the same width the next time the program runs.
Again, I do the same - in my case, entries in an sqlite database. Some 
routines are left out, but what I have included should give you the idea.
You don't hide/delete a window often at all (well - certainly not 
"often" as far as the computer is concerned), and the time required 
isn't noticeable - period.
Hope this helps?
First, setting the handlers:
    SetSignalHandler(GTK_WIDGET(GetSWWindow()),"delete-event",
                     G_CALLBACK(HideSongWindow));
    SetSignalHandler(GTK_WIDGET(GetSWWindow()), "destroy-event",
                     G_CALLBACK(HideSongWindow));
ANd then:
static void HideSongWindow(void)
{
    SWSaveWindowPos();
    SWSetVisible(FALSE);
}
void SWSaveWindowPos(void)
{
    GList               *cols;
    int                 index = 0;
    privateOpenDatabase();
    avSaveWindowGeometry(GetSWWindow(),NULL, NULL);
    /*
    ** save the order and size data for the different columns
    */
    cols = gtk_tree_view_get_columns(GetSWTreeView());
    g_list_foreach(cols, (GFunc) SWSaveColumnData, (gpointer) &index);
    g_list_free(cols);
    privateCloseDatabase();
}
static void SWSaveColumnData(GtkTreeViewColumn *column, int *index)
{
    char                name[32],
                        value[64];
    int                 width;
    if (*index)
    {
        g_object_get(G_OBJECT(column), "width", &width, NULL);
        sprintf(name,"SongWindowListColumn%02d", *index);
        sprintf(value,"%d %d %d %s",
                gtk_tree_view_column_get_sort_column_id(column),
                gtk_tree_view_column_get_visible(column),
                width,
                gtk_tree_view_column_get_title(column));
        avStoreConfData(name, value);
    }
    (*index)++;
}
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]