Changeset 2471


Ignore:
Timestamp:
Jul 23, 2007, 11:59:13 PM (15 years ago)
Author:
charles
Message:

torrent filters work now... we finally have a working feature! ;)

Location:
trunk/wx
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wx/torrent-list.cc

    r2469 r2471  
    302302            // otherwise, add a new row.
    303303            if( row < 0 ) {
    304                 str2int_t::const_iterator it = myHashToRow.find( info->hashString );
    305                 if( it != myHashToRow.end() ) {
     304                str2int_t::const_iterator it = myHashToItem.find( info->hashString );
     305                if( it != myHashToItem.end() ) {
    306306                    row = it->second;
    307307                }
     
    313313                row = InsertItem( GetItemCount(), xstr );
    314314                col = 1;
    315                 myHashToRow[info->hashString] = row;
     315                myHashToItem[info->hashString] = row;
    316316                SetItemData( row, myTorrents_index );
    317317            }
     
    480480        tmp[info->hashString] = i;
    481481    }
    482     myHashToRow.swap( tmp );
     482    myHashToItem.swap( tmp );
    483483    uglyHack = NULL;
    484484}
     
    505505{
    506506    DeleteAllItems();
    507     myHashToRow.clear ();
     507    myHashToItem.clear ();
    508508
    509509    const int_v cols = getTorrentColumns( myConfig );
     
    520520{
    521521    ClearAll( );
    522     myHashToRow.clear ();
     522    myHashToItem.clear ();
    523523
    524524    int i = 0;
     
    558558}
    559559
    560 void
    561 TorrentListCtrl :: Add( const torrents_t& add )
    562 {
     560typedef std::set<tr_torrent_t*> torrent_set;
     561
     562void
     563TorrentListCtrl :: Assign( const torrents_t& torrents )
     564{
     565    torrent_set prev, cur, removed;
     566    torrents_v added;
     567    prev.insert( myTorrents.begin(), myTorrents.end() );
     568    cur.insert( torrents.begin(), torrents.end() );
     569    std::set_difference (prev.begin(), prev.end(), cur.begin(), cur.end(), inserter(removed, removed.begin()));
     570    std::set_difference (cur.begin(), cur.end(), prev.begin(), prev.end(), inserter(added, added.begin()));
     571    Remove( removed );
     572    Add( added );
     573    Refresh ();
     574}
     575
     576void
     577TorrentListCtrl :: Add( const torrents_v& add )
     578{
     579    const int_v  cols = getTorrentColumns( myConfig );
     580    int i = myTorrents.size();
    563581    myTorrents.insert( myTorrents.end(), add.begin(), add.end() );
    564     Repopulate ();
    565 }
    566 
    567 
     582    for( torrents_v::const_iterator it(add.begin()), end(add.end()); it!=end; ++it )
     583        RefreshTorrent( *it, i++, cols );
     584    Resort( );
     585}
     586
     587void
     588TorrentListCtrl :: Remove( const torrent_set& remove )
     589{
     590    torrents_v vtmp;
     591    str2int_t htmp;
     592
     593    for( int item=0; item<GetItemCount(); )
     594    {
     595        tr_torrent_t * tor = myTorrents[GetItemData(item)];
     596        const tr_info_t* info = tr_torrentInfo( tor );
     597
     598        if( remove.count( tor ) )
     599        {
     600            DeleteItem( item );
     601            continue;
     602        }
     603
     604        vtmp.push_back( tor );
     605        SetItemData( item, vtmp.size()-1 );
     606        htmp[ info->hashString ] = item;
     607        ++item;
     608    }
     609
     610    myHashToItem.swap( htmp );
     611    myTorrents.swap( vtmp );
     612}
  • trunk/wx/torrent-list.h

    r2469 r2471  
    7777
    7878    public:
    79         typedef std::vector<tr_torrent_t*> torrents_t;
    80         void Add( const torrents_t& add );
     79        typedef std::vector<tr_torrent_t*> torrents_v;
     80        void Add( const torrents_v& torrents );
     81        void Assign( const torrents_v& torrents );
    8182
    8283    private:
     
    8485        void Resort( );
    8586        void RefreshTorrent( tr_torrent_t*, int, const std::vector<int>& );
     87        void Remove( const std::set<tr_torrent_t*>& );
    8688        static int Compare( long, long, long );
    8789
    8890        /** torrent hash -> the torrent's row in myTorrentList */
    8991        typedef std::map<std::string,int> str2int_t;
    90         str2int_t myHashToRow;
     92        str2int_t myHashToItem;
    9193
    9294    private:
     
    98100        tr_handle_t * myHandle;
    99101        wxConfig * myConfig;
    100         torrents_t myTorrents;
     102        torrents_v myTorrents;
    101103        int prevSortCol;
    102104
  • trunk/wx/xmission.cc

    r2469 r2471  
    5252};
    5353
    54 IMPLEMENT_APP(MyApp)
    55 
    5654namespace
    5755{
     
    7270    void OnOpen( wxCommandEvent& );
    7371    void OnTimer( wxTimerEvent& );
     72    void OnItemSelected( wxListEvent& );
    7473
    7574private:
     
    8786    wxIcon * myTrayLogo;
    8887    torrents_v myTorrents;
     88
     89private:
     90    DECLARE_EVENT_TABLE()
    8991};
    9092
     
    100102    ID_ABOUT,
    101103    ID_Pulse,
     104    ID_Filter,
    102105    N_IDS
    103106};
     107
     108BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     109    EVT_LIST_ITEM_SELECTED( ID_Filter, MyFrame::OnItemSelected )
     110END_EVENT_TABLE()
     111
     112IMPLEMENT_APP(MyApp)
    104113
    105114void MyFrame :: OnOpen( wxCommandEvent& event )
     
    200209        myFilters->SetItem( i, 0, xstr );
    201210    }
     211}
     212
     213void
     214MyFrame :: OnItemSelected( wxListEvent& event )
     215{
     216    const int item = event.GetIndex ();
     217    torrents_v tmp( myTorrents );
     218    TorrentFilter :: RemoveFailures( item, tmp );
     219    myTorrentList->Assign( tmp );
    202220}
    203221
     
    311329    /* Filters */
    312330
    313     myFilters = new wxListCtrl( row1, wxID_ANY, wxDefaultPosition, wxSize(120,-1),
     331    myFilters = new wxListCtrl( row1, ID_Filter, wxDefaultPosition, wxSize(120,-1),
    314332                                wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_NO_HEADER );
    315333    myFilters->InsertColumn( wxLIST_FORMAT_LEFT, _("Filters"), wxLIST_FORMAT_LEFT, 120 );
     
    368386    myTorrentList->Add( myTorrents );
    369387    tr_free( torrents );
     388
     389    wxTimerEvent dummy;
     390    OnTimer( dummy );
    370391}
    371392
Note: See TracChangeset for help on using the changeset viewer.