Changeset 2437


Ignore:
Timestamp:
Jul 19, 2007, 8:35:01 PM (15 years ago)
Author:
charles
Message:

make the torrent list columns configurable.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wx/xmission.cc

    r2436 r2437  
     1/*
     2 * This file Copyright (C) 2007 Charles Kerr <charles@rebelbase.com>
     3 *
     4 * This file is licensed by the GPL version 2.  Works owned by the
     5 * Transmission project are granted a special exemption to clause 2(b)
     6 * so that the bulk of its code can remain under the MIT license.
     7 * This exemption does not extend to derived works not owned by
     8 * the Transmission project.
     9 */
     10
     11#include <set>
     12#include <map>
     13#include <string>
     14#include <vector>
    115#include <iostream>
    216#include <wx/aboutdlg.h>
     
    3246protected:
    3347    wxConfig * myConfig;
     48
     49private:
     50    void rebuildTorrentList();
     51    wxListCtrl * myTorrentList;
    3452};
    3553
     
    90108    SetTopWindow( frame );
    91109    return true;
     110}
     111
     112/***
     113****
     114***/
     115
     116
     117namespace
     118{
     119    enum
     120    {
     121        COL_NUMBER,
     122        COL_DONE,
     123        COL_DOWNLOAD_SPEED,
     124        COL_ETA,
     125        COL_HASH,
     126        COL_NAME,
     127        COL_PEERS,
     128        COL_RATIO,
     129        COL_RECEIVED,
     130        COL_REMAINING,
     131        COL_SEEDS,
     132        COL_SEND,
     133        COL_SIZE,
     134        COL_STATE,
     135        COL_STATUS,
     136        COL_TOTAL,
     137        COL_UPLOAD_SPEED,
     138        N_COLS
     139    };
     140
     141    int getTorrentColumn( const wxString& wxKey )
     142    {
     143        const std::string key ( wxKey.c_str() );
     144        typedef std::map<std::string,int> string2key_t;
     145        static string2key_t columns;
     146
     147        if( columns.empty() )
     148        {
     149            columns["#"]         = COL_NUMBER;
     150            columns["done"]      = COL_DONE;
     151            columns["dspeed"]    = COL_DOWNLOAD_SPEED;
     152            columns["eta"]       = COL_ETA;
     153            columns["hash"]      = COL_HASH;
     154            columns["name"]      = COL_NAME;
     155            columns["peers"]     = COL_PEERS;
     156            columns["ratio"]     = COL_RATIO;
     157            columns["received"]  = COL_RECEIVED;
     158            columns["remaining"] = COL_REMAINING;
     159            columns["seeds"]     = COL_SEEDS;
     160            columns["sent"]      = COL_SEND;
     161            columns["size"]      = COL_SIZE;
     162            columns["state"]     = COL_STATE;
     163            columns["status"]    = COL_STATUS;
     164            columns["total"]     = COL_TOTAL;
     165            columns["uspeed"]    = COL_UPLOAD_SPEED;
     166        }
     167
     168        int i = -1;
     169        string2key_t::const_iterator it = columns.find( key );
     170        if( it != columns.end() )
     171            i = it->second;
     172
     173        return i;
     174    }
     175
     176    std::vector<int> getTorrentColumns( wxConfig * config )
     177    {
     178        const wxString key = _T("TorrentListColumns");
     179        wxString columnStr;
     180        if( !config->Read( key, &columnStr ) )
     181            columnStr = _T("name|#|size|done|status|seeds|peers|eta|uspeed|dspeed");
     182
     183        std::vector<int> cols;
     184        while( !columnStr.IsEmpty() )
     185        {
     186            const wxString key = columnStr.BeforeFirst(_T('|'));
     187            columnStr.Remove( 0, key.Len() + 1 );
     188            cols.push_back( getTorrentColumn( key ) );
     189        }
     190        return cols;
     191    }
     192}
     193
     194void
     195MyFrame :: rebuildTorrentList()
     196{
     197    myTorrentList->ClearAll( );
     198
     199    int i = 0;
     200    const std::vector<int> cols = getTorrentColumns( myConfig );
     201    for( std::vector<int>::const_iterator it(cols.begin()), end(cols.end()); it!=end; ++it )
     202    {
     203        wxString h;
     204
     205        switch( *it )
     206        {
     207            case COL_NUMBER:          h = _T("#"); break;
     208            case COL_DONE:            h = _T("Done"); break;
     209            case COL_DOWNLOAD_SPEED:  h = _T("Download"); break;
     210            case COL_ETA:             h = _T("ETA"); break;
     211            case COL_HASH:            h = _T("SHA1 Hash"); break;
     212            case COL_NAME:            h = _T("Name"); break;
     213            case COL_PEERS:           h = _T("Peers"); break;
     214            case COL_RATIO:           h = _T("Ratio"); break;
     215            case COL_RECEIVED:        h = _T("Received"); break;
     216            case COL_REMAINING:       h = _T("Remaining"); break;
     217            case COL_SEEDS:           h = _T("Seeds"); break;
     218            case COL_SEND:            h = _T("Send"); break;
     219            case COL_SIZE:            h = _T("Size"); break;
     220            case COL_STATE:           h = _T("State"); break;
     221            case COL_STATUS:          h = _T("Status"); break;
     222            case COL_TOTAL:           h = _T("Total"); break;
     223            case COL_UPLOAD_SPEED:    h = _T("Upload"); break;
     224            default:                  h = _T("Error"); break;
     225        }
     226
     227        myTorrentList->InsertColumn( i++, h );
     228    }
    92229}
    93230
     
    194331    **/
    195332
    196     wxListCtrl * torrents = new wxListCtrl( row1, wxID_ANY, wxDefaultPosition, wxDefaultSize,
    197                                             wxLC_REPORT|wxLC_SINGLE_SEL );
    198     torrents->InsertColumn( 0, _T("Name") );
    199     torrents->InsertColumn( 1, _T("#") );
    200     torrents->InsertColumn( 2, _T("Size") );
    201     torrents->InsertColumn( 3, _T("Done") );
    202     torrents->InsertColumn( 4, _T("Status") );
    203     torrents->InsertColumn( 5, _T("Seeds") );
    204     torrents->InsertColumn( 6, _T("Peers") );
    205     row_sizer->Add( torrents, wxSizerFlags().Expand() );
     333    myTorrentList = new wxListCtrl( row1, wxID_ANY, wxDefaultPosition, wxDefaultSize,
     334                                    wxLC_REPORT|wxLC_SINGLE_SEL );
     335    rebuildTorrentList();
     336    row_sizer->Add( myTorrentList, wxSizerFlags().Expand() );
    206337    row_sizer->AddGrowableCol( 1, 1 );
    207338
    208     i = torrents->InsertItem( 0, _T("Fedora.iso") );
    209     torrents->SetItem( i, 1, _T("*"));
    210     torrents->SetItem( i, 2, _T("4.4 GiB"));
    211     torrents->SetItem( i, 3, _T("50%"));
    212     torrents->SetItem( i, 4, _T("0 (77)"));
    213     torrents->SetItem( i, 5, _T("1 (128)"));
     339    i = myTorrentList->InsertItem( 0, _T("Fedora.iso") );
     340    myTorrentList->SetItem( i, 1, _T("*"));
     341    myTorrentList->SetItem( i, 2, _T("4.4 GiB"));
     342    myTorrentList->SetItem( i, 3, _T("50%"));
     343    myTorrentList->SetItem( i, 4, _T("0 (77)"));
     344    myTorrentList->SetItem( i, 5, _T("1 (128)"));
    214345
    215346
Note: See TracChangeset for help on using the changeset viewer.