Changeset 2913


Ignore:
Timestamp:
Aug 23, 2007, 7:02:33 PM (15 years ago)
Author:
charles
Message:
  • simplify the filters a bit.
  • fix a bug in filtering complete/incomplete.
  • when adding torrents, save a copy in transmission's torrents directory.
Location:
trunk/wx
Files:
2 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/wx/Makefile.am

    r2762 r2913  
    1212Xmission_SOURCES = \
    1313  speed-stats.cc \
    14   torrent-filter.cc \
     14  filter.cc \
    1515  torrent-list.cc \
    1616  torrent-stats.cc \
  • trunk/wx/filter.cc

    r2911 r2913  
    2020
    2121#include "foreach.h"
    22 #include "torrent-filter.h"
     22#include "filter.h"
    2323
    2424int
     
    3030    switch( s->status )
    3131    {
    32         case TR_STATUS_STOPPING:
    33         case TR_STATUS_STOPPED:
    34         case TR_STATUS_CHECK:
    35         case TR_STATUS_CHECK_WAIT:
    36             flags |= FLAG_STOPPED;
    37             break;
    38 
    3932        case TR_STATUS_DOWNLOAD:
    4033            flags |= FLAG_LEECHING;
     
    4538            flags |= FLAG_SEEDING;
    4639            break;
     40
     41        case TR_STATUS_STOPPING:
     42        case TR_STATUS_STOPPED:
     43        case TR_STATUS_CHECK:
     44        case TR_STATUS_CHECK_WAIT:
     45            break;
    4746    }
    4847
     
    5251
    5352    flags |= s->left
    54         ? FLAG_DONE
    55         : FLAG_NOT_DONE;
     53        ? FLAG_INCOMPLETE
     54        : FLAG_COMPLETE;
     55
     56    flags |= FLAG_ALL;
    5657
    5758    return flags;
     
    6566    foreach_const( torrents_v, torrents, it ) {
    6667        const int flags = GetFlags( *it );
    67         if( flags & FLAG_STOPPED )  ++counts[STOPPED];
    68         if( flags & FLAG_LEECHING ) ++counts[LEECHING];
    69         if( flags & FLAG_SEEDING )  ++counts[SEEDING];
    70         if( flags & FLAG_ACTIVE )   ++counts[ACTIVE];
    71         if( flags & FLAG_IDLE )     ++counts[IDLE];
    72         if( flags & FLAG_DONE )     ++counts[DONE];
    73         if( flags & FLAG_NOT_DONE ) ++counts[NOT_DONE];
     68        if( flags & FLAG_ALL )        ++counts[ALL];
     69        if( flags & FLAG_LEECHING )   ++counts[LEECHING];
     70        if( flags & FLAG_SEEDING )    ++counts[SEEDING];
     71        if( flags & FLAG_ACTIVE )     ++counts[ACTIVE];
     72        if( flags & FLAG_IDLE )       ++counts[IDLE];
     73        if( flags & FLAG_COMPLETE )   ++counts[COMPLETE];
     74        if( flags & FLAG_INCOMPLETE ) ++counts[INCOMPLETE];
    7475    }
    7576}
     
    7879TorrentFilter :: GetName( int show, int count )
    7980{
    80     wxString xstr;
     81    static const wxString names[N_FILTERS] = {
     82        _("&All"),
     83        _("&Complete"),
     84        _("&Incomplete"),
     85        _("&Seeding"),
     86        _("&Leeching"),
     87        _("Acti&ve"),
     88        _("I&dle")
     89    };
    8190
    82     switch( show )
    83     {
    84         case SEEDING:  xstr = _("&Seeds");  break;
    85         case LEECHING: xstr = _("&Leeches"); break;
    86         case STOPPED:  xstr = _("Sto&pped");  break;
    87         case ACTIVE:   xstr = _("&Active");   break;
    88         case IDLE:     xstr = _("&Idle");     break;
    89         case DONE:     xstr = _("&Done");     break;
    90         case NOT_DONE: xstr = _("&Not Done"); break;
    91         default: assert(0);
    92     }
     91    assert( 0<=show && show<N_FILTERS );
    9392
    94     xstr += wxString::Format(_T(" (%d)"), count );
    95 
     93    wxString xstr = names[show];
     94    if( count )
     95        xstr += wxString::Format(_T(" (%d)"), count );
    9696    return xstr;
    9797}
    9898
    99 
    10099void
    101 TorrentFilter :: RemoveFailures( int flags, torrents_v& torrents )
     100TorrentFilter :: RemoveFailures( int            show,
     101                                 torrents_v  &  torrents )
    102102{
    103103    torrents_v tmp;
    104104
    105     for( torrents_v::iterator it(torrents.begin()), end(torrents.end()); it!=end; ++it )
    106         if( flags & GetFlags ( *it ) )
     105    foreach_const( torrents_v, torrents, it ) {
     106        const int flags = GetFlags( *it );
     107        if(   ( ( show == ALL )        && ( flags & FLAG_ALL ) )
     108           || ( ( show == LEECHING )   && ( flags & FLAG_LEECHING ) )
     109           || ( ( show == SEEDING )    && ( flags & FLAG_SEEDING ) )
     110           || ( ( show == ACTIVE )     && ( flags & FLAG_ACTIVE ) )
     111           || ( ( show == IDLE )       && ( flags & FLAG_IDLE ) )
     112           || ( ( show == COMPLETE )   && ( flags & FLAG_COMPLETE ) )
     113           || ( ( show == INCOMPLETE ) && ( flags & FLAG_INCOMPLETE ) ) )
    107114            tmp.push_back( *it );
     115    }
    108116
    109117    torrents.swap( tmp );
  • trunk/wx/filter.h

    r2911 r2913  
    2828class TorrentFilter
    2929{
     30    private:
     31
     32        enum ShowFlags
     33        {
     34            FLAG_ALL        = (1<<0),
     35            FLAG_COMPLETE   = (1<<1),
     36            FLAG_INCOMPLETE = (1<<2),
     37            FLAG_SEEDING    = (1<<3),
     38            FLAG_LEECHING   = (1<<4),
     39            FLAG_ACTIVE     = (1<<5),
     40            FLAG_IDLE       = (1<<6)
     41        };
     42
    3043    public:
    3144
    3245        typedef std::vector<tr_torrent_t*> torrents_v;
    3346
    34         enum ShowFlags
    35         {
    36             FLAG_SEEDING    = (1<<0),
    37             FLAG_LEECHING   = (1<<1),
    38             FLAG_STOPPED    = (1<<2),
    39 
    40             FLAG_ACTIVE     = (1<<3),
    41             FLAG_IDLE       = (1<<4),
    42 
    43             FLAG_DONE       = (1<<5),
    44             FLAG_NOT_DONE   = (1<<6)
    45         };
    46 
    4747        enum Show {
    48             SEEDING, LEECHING, STOPPED,
     48            ALL,
     49            COMPLETE, INCOMPLETE,
     50            SEEDING, LEECHING,
    4951            ACTIVE, IDLE,
    50             DONE, NOT_DONE,
    5152            N_FILTERS
    5253        };
  • trunk/wx/xmission.cc

    r2912 r2913  
    6565#include "foreach.h"
    6666#include "speed-stats.h"
    67 #include "torrent-filter.h"
     67#include "filter.h"
    6868#include "torrent-list.h"
    6969#include "torrent-stats.h"
     
    169169    void OnDeselectAllUpdate( wxUpdateUIEvent& );
    170170
    171     void OnFilterToggled( wxCommandEvent& );
     171    void OnFilterChanged( wxCommandEvent& );
    172172
    173173    void OnPulse( wxTimerEvent& );
     
    193193    torrents_v myTorrents;
    194194    torrents_v mySelectedTorrents;
    195     int myFilterFlags;
     195    int myFilter;
    196196    std::string mySavePath;
    197197    time_t myExitTime;
    198     wxToggleButton * myFilterToggles[TorrentFilter::N_FILTERS];
     198    wxToggleButton* myFilterButtons[TorrentFilter::N_FILTERS];
    199199
    200200private:
     
    213213
    214214BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    215     EVT_COMMAND_RANGE( ID_Filter, ID_Filter+TorrentFilter::N_FILTERS, wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, MyFrame::OnFilterToggled )
     215    EVT_COMMAND_RANGE( ID_Filter, ID_Filter+TorrentFilter::N_FILTERS, wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, MyFrame::OnFilterChanged )
    216216    EVT_MENU     ( wxID_ABOUT, MyFrame::OnAbout )
    217217    EVT_TIMER    ( ID_Pulse, MyFrame::OnPulse )
     
    236236
    237237void
    238 MyFrame :: OnFilterToggled( wxCommandEvent& e )
    239 {
    240     const int index = e.GetId() - ID_Filter;
    241     int flags = 1<<index;
    242     const bool active = myFilterToggles[index]->GetValue ( );
    243     if( active )
    244         myFilterFlags |= flags;
    245     else
    246         myFilterFlags &= ~flags;
    247     ApplyCurrentFilter ( );
     238MyFrame :: OnFilterChanged( wxCommandEvent& e )
     239{
     240    static bool ignore = false;
     241
     242    if( !ignore )
     243    {
     244        myFilter = e.GetId() - ID_Filter;
     245        std::cerr << " OnFilterChanged, myFilter is now " << myFilter << std::endl;
     246        ApplyCurrentFilter ( );
     247
     248        ignore = true;
     249        for( int i=0; i<TorrentFilter::N_FILTERS; ++i )
     250            myFilterButtons[i]->SetValue( i==myFilter );
     251        ignore = false;
     252    }
    248253}
    249254
     
    367372                                                 filename.c_str(),
    368373                                                 mySavePath.c_str(),
    369                                                  0, NULL );
     374                                                 TR_FLAG_SAVE, NULL );
    370375            if( tor )
    371376                myTorrents.push_back( tor );
     
    422427    TorrentFilter::CountHits( myTorrents, hits );
    423428    for( int i=0; i<TorrentFilter::N_FILTERS; ++i )
    424         myFilterToggles[i]->SetLabel( TorrentFilter::GetName( i, hits[i] ) );
     429        myFilterButtons[i]->SetLabel( TorrentFilter::GetName( i, hits[i] ) );
    425430}
    426431
     
    429434{
    430435    torrents_v tmp( myTorrents );
    431     TorrentFilter :: RemoveFailures( myFilterFlags, tmp );
     436    TorrentFilter :: RemoveFailures( myFilter, tmp );
    432437    myTorrentList->Assign( tmp );
    433438}
     
    495500    myTrayIconIcon( systray_xpm ),
    496501    mySpeedStats( 0 ),
    497     myFilterFlags( ~0 ),
     502    myFilter( TorrentFilter::ALL ),
    498503    myExitTime( 0 )
    499504{
     
    612617    wxPanel * panel_1 = new wxPanel( hsplit, wxID_ANY );
    613618
    614     wxBoxSizer * buttonSizer = new wxBoxSizer( wxHORIZONTAL );
    615 
    616     wxStaticText * text = new wxStaticText( panel_1, wxID_ANY, _("Show:") );
    617     buttonSizer->Add( text, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 3 );
    618 
    619     int rightButtonSpacing[TorrentFilter::N_FILTERS] = { 0, 0, 10, 0, 10, 0, 0 };
     619    wxBoxSizer * buttonSizer = new wxBoxSizer( wxVERTICAL );
     620
    620621    for( int i=0; i<TorrentFilter::N_FILTERS; ++i ) {
    621         wxToggleButton * tb = new wxToggleButton( panel_1, ID_Filter+i, TorrentFilter::GetName(i) );
    622         tb->SetValue( true );
    623         myFilterToggles[i] = tb;
    624         //buttonSizer->Add( tb, 0, wxRIGHT, rightButtonSpacing[i] );
    625         buttonSizer->Add( tb, 1, wxEXPAND|wxRIGHT, rightButtonSpacing[i] );
     622        wxToggleButton * b = new wxToggleButton( panel_1, ID_Filter+i, TorrentFilter::GetName(i), wxDefaultPosition, wxDefaultSize, (i==0)?wxRB_GROUP:0 );
     623        b->SetValue( i==0 );
     624        myFilterButtons[i] = b;
     625        buttonSizer->Add( b, 1, wxGROW, 0 );
    626626    }
    627627
     
    629629    myTorrentList->AddListener( this );
    630630
    631     wxBoxSizer * panelSizer = new wxBoxSizer( wxVERTICAL );
    632     panelSizer->Add( new wxStaticLine( panel_1 ), 0, wxEXPAND, 0 );
    633     panelSizer->Add( buttonSizer, 0, 0, 0 );
    634     panelSizer->Add( myTorrentList, 1, wxEXPAND, 0 );
     631    wxBoxSizer * panelSizer = new wxBoxSizer( wxHORIZONTAL );
     632    panelSizer->Add( buttonSizer, 0, wxALL, 5 );
     633    panelSizer->Add( myTorrentList, 1, wxGROW|wxALL, 5 );
    635634
    636635    panel_1->SetSizer( panelSizer );
Note: See TracChangeset for help on using the changeset viewer.