Changeset 1507


Ignore:
Timestamp:
Feb 23, 2007, 6:54:49 AM (15 years ago)
Author:
joshe
Message:

Calculate and show directory sizes in file window.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/dialogs.c

    r1506 r1507  
    8686parsepath( GtkTreeStore * store, GtkTreeIter * ret,
    8787           const char * path, int index, uint64_t size );
     88static uint64_t
     89getdirtotals( GtkTreeStore * store, GtkTreeIter * parent, tr_file_t * files );
    8890static void
    8991setscroll( void * arg );
     
    417419                   ii, inf->files[ii].length );
    418420    }
     421    getdirtotals( store, NULL, inf->files );
    419422    gtk_tree_sortable_set_sort_column_id( GTK_TREE_SORTABLE( store ),
    420423                                          FC_KEY, GTK_SORT_ASCENDING );
     
    516519        label = g_markup_printf_escaped( _("<small>%s (%s)</small>"),
    517520                                         file, sizestr );
     521        g_free( file );
     522        file = label;
    518523        g_free( sizestr );
    519524        stock = GTK_STOCK_FILE;
     
    521526    else
    522527    {
    523         label = g_markup_printf_escaped( _("<small>%s</small>"), file );
    524528        stock = GTK_STOCK_DIRECTORY;
    525     }
    526     gtk_tree_store_set( store, &iter, FC_INDEX, index, FC_LABEL, label,
     529        index = -1;
     530    }
     531    gtk_tree_store_set( store, &iter, FC_INDEX, index, FC_LABEL, file,
    527532                        FC_KEY, mykey, FC_STOCK, stock, -1 );
    528     g_free( label );
    529533  done:
    530534    g_free( mykey );
     
    534538        memcpy( ret, &iter, sizeof( iter ) );
    535539    }
     540}
     541
     542static uint64_t
     543getdirtotals( GtkTreeStore * store, GtkTreeIter * parent, tr_file_t * files )
     544{
     545    GtkTreeModel * model;
     546    GtkTreeIter    iter;
     547    int            index;
     548    uint64_t       mysize, subsize;
     549    char         * sizestr, * name, * label;
     550
     551    model  = GTK_TREE_MODEL( store );
     552    mysize = 0;
     553    if( gtk_tree_model_iter_children( model, &iter, parent ) )
     554    {
     555        do
     556        {
     557            if( gtk_tree_model_iter_has_child( model, &iter ) )
     558            {
     559                subsize = getdirtotals( store, &iter, files );
     560                mysize += subsize;
     561                gtk_tree_model_get( model, &iter, FC_LABEL, &name, -1 );
     562                sizestr = readablesize( subsize );
     563                label = g_markup_printf_escaped( _("<small>%s (%s)</small>"),
     564                                                 name, sizestr );
     565                g_free( sizestr );
     566                g_free( name );
     567                gtk_tree_store_set( store, &iter, FC_LABEL, label, -1 );
     568                g_free( label );
     569            }
     570            else
     571            {
     572                gtk_tree_model_get( model, &iter, FC_INDEX, &index, -1 );
     573                g_assert( 0 <= index );
     574                mysize += files[index].length;
     575            }
     576        }
     577        while( gtk_tree_model_iter_next( model, &iter ) );
     578    }
     579
     580    return mysize;
    536581}
    537582
Note: See TracChangeset for help on using the changeset viewer.