Changeset 8245


Ignore:
Timestamp:
Apr 16, 2009, 4:35:00 PM (13 years ago)
Author:
charles
Message:

(trunk gtk/qt) #1502: Details' Addresses should "sort -n"

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/details.c

    r8211 r8245  
    8484{
    8585    PEER_COL_ADDRESS,
     86    PEER_COL_ADDRESS_COLLATED,
    8687    PEER_COL_DOWNLOAD_RATE,
    8788    PEER_COL_UPLOAD_RATE,
     
    129130              const tr_peer_stat  * peer )
    130131{
     132    int quads[4];
     133    char buf[128];
    131134    const char * client = peer->client;
    132135
     
    134137        client = " ";
    135138
     139    if( sscanf( peer->addr, "%d.%d.%d.%d", quads, quads+1, quads+2, quads+3 ) == 4 )
     140        g_snprintf( buf, sizeof( buf ), "%03d.%03d.%03d.%03d", quads[0], quads[1], quads[2], quads[3] );
     141    else
     142        g_strlcpy( buf, peer->addr, sizeof( buf ) );
     143
    136144    gtk_list_store_set( store, iter,
    137145                        PEER_COL_ADDRESS, peer->addr,
     146                        PEER_COL_ADDRESS_COLLATED, buf,
    138147                        PEER_COL_CLIENT, client,
    139148                        PEER_COL_IS_ENCRYPTED, peer->isEncrypted,
     
    164173{
    165174    GtkListStore * m = gtk_list_store_new( N_PEER_COLS,
    166                                            G_TYPE_STRING, /* addr */
    167                                            G_TYPE_FLOAT, /* downloadFromRate */
    168                                            G_TYPE_FLOAT, /* uploadToRate */
    169                                            G_TYPE_STRING, /* client */
    170                                            G_TYPE_INT,   /* progress [0..100] */
    171                                            G_TYPE_BOOLEAN, /* isEncrypted */
     175                                           G_TYPE_STRING,   /* address */
     176                                           G_TYPE_STRING,   /* collated address */
     177                                           G_TYPE_FLOAT,    /* downloadFromRate */
     178                                           G_TYPE_FLOAT,    /* uploadToRate */
     179                                           G_TYPE_STRING,   /* client */
     180                                           G_TYPE_INT,      /* progress [0..100] */
     181                                           G_TYPE_BOOLEAN,  /* isEncrypted */
    172182                                           G_TYPE_STRING ); /* flagString */
    173183
     
    486496    {
    487497        const int           col = view_columns[i];
     498        int                 sort_col = col;
    488499        const char *        t = _( peer_column_names[col] );
    489500        GtkTreeViewColumn * c;
     
    495506                r = gtk_cell_renderer_text_new( );
    496507                c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL );
     508                sort_col = PEER_COL_ADDRESS_COLLATED;
    497509                break;
    498510
     
    538550
    539551        gtk_tree_view_column_set_resizable( c, FALSE );
    540         gtk_tree_view_column_set_sort_column_id( c, col );
     552        gtk_tree_view_column_set_sort_column_id( c, sort_col );
    541553        gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c );
    542554    }
  • trunk/qt/details.cc

    r8232 r8245  
    8181{
    8282        Peer peer;
    83         int quads[4];
     83        QString collatedAddress;
    8484        QString status;
    85 
    86         bool quadsLessThan( const PeerItem * that ) const {
    87             for( int i=0; i<4; ++i ) {
    88                 if( quads[i] < that->quads[i] ) return true;
    89                 if( quads[i] > that->quads[i] ) return false;
    90             }
    91             return false;
    92         }
    9385
    9486    public:
     
    10294        void setPeer( const Peer& p ) {
    10395            peer = p;
    104             const QStringList tokens( p.address.split(".") );
    105             for( int i=0; i<4; ++i )
    106                 quads[i] = tokens.at(i).toInt();
     96            int quads[4];
     97            if( sscanf( p.address.toUtf8().constData(), "%d.%d.%d.%d", quads+0, quads+1, quads+2, quads+3 ) == 4 )
     98                collatedAddress.sprintf( "%03d.%03d.%03d.%03d", quads[0], quads[1], quads[2], quads[3] );
     99            else
     100                collatedAddress = p.address;
    107101        }
    108102        virtual bool operator< ( const QTreeWidgetItem & other ) const {
     
    115109                case COL_PERCENT: return peer.progress < that->peer.progress;
    116110                case COL_STATUS: return status < that->status;
    117                 case COL_ADDRESS: return quadsLessThan( that );
     111                case COL_ADDRESS: return collatedAddress < that->collatedAddress;
    118112                case COL_CLIENT: return peer.clientName < that->peer.clientName;
    119113                default: /*COL_LOCK*/ return peer.isEncrypted && !that->peer.isEncrypted;
Note: See TracChangeset for help on using the changeset viewer.