Changeset 2459
- Timestamp:
- Jul 22, 2007, 7:37:43 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wx/xmission.cc
r2456 r2459 47 47 void OnAbout(wxCommandEvent& event); 48 48 void OnOpen(wxCommandEvent& event); 49 void OnTimer(wxTimerEvent& event); 49 50 50 51 protected: 51 52 wxConfig * myConfig; 53 wxTimer myPulseTimer; 52 54 53 55 private: 54 56 void rebuildTorrentList(); 55 57 void repopulateTorrentList (); 58 void refreshTorrentList (); 56 59 wxListCtrl * myTorrentList; 57 60 typedef std::vector<tr_torrent_t*> torrents_t; 58 61 torrents_t myTorrents; 59 void insertTorrent( tr_torrent_t*, const std::vector<int>& ); 62 void refreshTorrent( tr_torrent_t*, int, const std::vector<int>& ); 63 64 typedef std::map<std::string,int> str2int_t; 65 66 /** torrent hash -> the torrent's row in myTorrentList */ 67 str2int_t myHashToRow; 60 68 }; 61 69 … … 70 78 ID_SHOW_DEBUG_WINDOW, 71 79 ID_ABOUT, 80 ID_Pulse, 72 81 N_IDS 73 82 }; … … 112 121 frame->Connect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &MyFrame::OnQuit ); 113 122 frame->Connect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction) &MyFrame::OnAbout ); 123 frame->Connect( ID_Pulse, wxEVT_TIMER, (wxObjectEventFunction) &MyFrame::OnTimer ); 114 124 115 125 frame->Show( true ); … … 188 198 wxString columnStr; 189 199 if( !config->Read( key, &columnStr ) ) 190 columnStr = _T("name| #|size|done|status|seeds|peers|eta|uspeed|dspeed");200 columnStr = _T("name|dspeed|uspeed|eta|peers|size|done|status|seeds"); 191 201 192 202 int_v cols; … … 246 256 /*** 247 257 **** 258 **** PEERS LIST 259 **** 260 **** 248 261 ***/ 249 262 263 264 /*** 265 **** 266 **** TORRENT LIST 267 **** 268 **** 269 ***/ 270 250 271 void 251 MyFrame :: insertTorrent( tr_torrent_t * tor, 252 const int_v & cols ) 272 MyFrame :: refreshTorrent( tr_torrent_t * tor, 273 int myTorrents_index, 274 const int_v & cols ) 253 275 { 254 276 int row = -1; … … 259 281 const tr_info_t* info = tr_torrentInfo( tor ); 260 282 261 262 283 for( int_v::const_iterator it(cols.begin()), end(cols.end()); it!=end; ++it ) 263 284 { … … 272 293 273 294 case COL_DONE: 274 snprintf( buf, sizeof(buf), "% %%.1f", s->percentDone);295 snprintf( buf, sizeof(buf), "%d%%", (int)(s->percentDone*100.0) ); 275 296 xstr = toWxStr( buf ); 276 297 break; … … 281 302 282 303 case COL_ETA: 283 xstr = toWxStr( getReadableTime( s->eta ) ); 304 if( (int)(s->percentDone*100) >= 100 ) 305 xstr = wxString (); 306 else if( s->eta < 0 ) 307 xstr = toWxStr( "\xE2\x88\x9E" ); /* infinity, in utf-8 */ 308 else 309 xstr = toWxStr( getReadableTime( s->eta ) ); 284 310 break; 285 311 … … 344 370 } 345 371 346 if( row < 0 ) 347 row = myTorrentList->InsertItem( myTorrentList->GetItemCount(), xstr ); 348 else 349 myTorrentList->SetItem( row, ++col, xstr ); 350 } 351 } 352 372 if( col ) { 373 myTorrentList->SetItem( row, col++, xstr ); 374 } 375 else { 376 // first column... find the right row to put the info in. 377 // if the torrent's in the list already, update that row. 378 // otherwise, add a new row. 379 if( row < 0 ) { 380 str2int_t::const_iterator it = myHashToRow.find( info->hashString ); 381 if( it != myHashToRow.end() ) { 382 row = it->second; 383 } 384 } 385 if( row >= 0 ) { 386 myTorrentList->SetItem( row, col++, xstr ); 387 } 388 else { 389 row = myTorrentList->InsertItem( myTorrentList->GetItemCount(), xstr ); 390 col = 1; 391 myHashToRow[info->hashString] = row; 392 myTorrentList->SetItemData( row, myTorrents_index ); 393 } 394 } 395 } 396 } 397 398 void 399 MyFrame :: refreshTorrentList () 400 { 401 const int_v cols = getTorrentColumns( myConfig ); 402 const int rowCount = myTorrentList->GetItemCount(); 403 for( int row=0; row<rowCount; ++row ) 404 { 405 int array_index = myTorrentList->GetItemData( row ); 406 tr_torrent_t * tor = myTorrents[array_index]; 407 refreshTorrent( tor, array_index, cols ); 408 } 409 } 353 410 354 411 void 355 412 MyFrame :: repopulateTorrentList () 356 413 { 414 std::cerr << __FILE__ << ':' << __LINE__ << " clearing all items from list" << std::endl; 357 415 myTorrentList->DeleteAllItems(); 416 myHashToRow.clear (); 358 417 359 418 const int_v cols = getTorrentColumns( myConfig ); 419 int i = 0; 360 420 for( torrents_t::const_iterator it(myTorrents.begin()), 361 421 end(myTorrents.end()); it!=end; ++it ) 362 insertTorrent( *it, cols );422 refreshTorrent( *it, i++, cols ); 363 423 } 364 424 … … 367 427 { 368 428 myTorrentList->ClearAll( ); 429 myHashToRow.clear (); 369 430 370 431 int i = 0; … … 372 433 for( int_v ::const_iterator it(cols.begin()), end(cols.end()); it!=end; ++it ) 373 434 { 435 int format = wxLIST_FORMAT_LEFT; 436 int width = -1; 374 437 wxString h; 375 438 376 439 switch( *it ) 377 440 { 378 case COL_NUMBER: h = _T("#"); break;379 case COL_DONE: h = _T("Done"); break;441 case COL_NUMBER: h = _T("#"); format = wxLIST_FORMAT_CENTRE; break; 442 case COL_DONE: h = _T("Done"); format = wxLIST_FORMAT_RIGHT; break; 380 443 case COL_DOWNLOAD_SPEED: h = _T("Download"); break; 381 case COL_ETA: h = _T("ETA"); break;444 case COL_ETA: h = _T("ETA"); format = wxLIST_FORMAT_RIGHT; break; 382 445 case COL_HASH: h = _T("SHA1 Hash"); break; 383 case COL_NAME: h = _T("Name"); break;384 case COL_PEERS: h = _T("Peers"); break;385 case COL_RATIO: h = _T("Ratio"); break;386 case COL_RECEIVED: h = _T("Received"); break;387 case COL_REMAINING: h = _T("Remaining"); break;388 case COL_SEEDS: h = _T("Seeds"); break;389 case COL_SENT: h = _T("Sent"); break;390 case COL_SIZE: h = _T("Size"); break;446 case COL_NAME: h = _T("Name"); width = 500; break; 447 case COL_PEERS: h = _T("Peers"); format = wxLIST_FORMAT_RIGHT; break; 448 case COL_RATIO: h = _T("Ratio"); format = wxLIST_FORMAT_RIGHT; break; 449 case COL_RECEIVED: h = _T("Received"); format = wxLIST_FORMAT_RIGHT; break; 450 case COL_REMAINING: h = _T("Remaining"); format = wxLIST_FORMAT_RIGHT; break; 451 case COL_SEEDS: h = _T("Seeds"); format = wxLIST_FORMAT_RIGHT; break; 452 case COL_SENT: h = _T("Sent"); format = wxLIST_FORMAT_RIGHT; break; 453 case COL_SIZE: h = _T("Size"); format = wxLIST_FORMAT_RIGHT; break; 391 454 case COL_STATE: h = _T("State"); break; 392 455 case COL_STATUS: h = _T("Status"); break; 393 456 case COL_TOTAL: h = _T("Total"); break; 394 case COL_UPLOAD_SPEED: h = _T("Upload"); break;457 case COL_UPLOAD_SPEED: h = _T("Upload"); format = wxLIST_FORMAT_RIGHT;break; 395 458 default: h = _T("Error"); break; 396 459 } 397 460 398 myTorrentList->InsertColumn( i++, h );461 myTorrentList->InsertColumn( i++, h, format, width ); 399 462 } 400 463 … … 405 468 **** 406 469 ***/ 470 471 void 472 MyFrame :: OnTimer(wxTimerEvent& event) 473 { 474 refreshTorrentList (); 475 } 407 476 408 477 MyFrame::~MyFrame() … … 413 482 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size): 414 483 wxFrame((wxFrame*)NULL,-1,title,pos,size), 415 myConfig( new wxConfig( _T("xmission") ) ) 484 myConfig( new wxConfig( _T("xmission") ) ), 485 myPulseTimer( this, ID_Pulse ) 416 486 { 417 487 wxImage::AddHandler( new wxPNGHandler ); … … 426 496 427 497 const int flags = TR_FLAG_PAUSED; 428 const char * destination = "/ tmp/asdf";498 const char * destination = "/home/charles/torrents"; 429 499 int count = 0; 430 500 tr_torrent_t ** torrents = tr_loadTorrents ( handle, destination, flags, &count ); … … 521 591 row_sizer->Add( myTorrentList, wxSizerFlags().Expand() ); 522 592 row_sizer->AddGrowableCol( 1, 1 ); 523 repopulateTorrentList ();524 593 525 594 … … 545 614 CreateStatusBar(); 546 615 SetStatusText(_T("Welcome to Xmission!")); 616 617 /** 618 *** Refresh 619 **/ 620 621 myPulseTimer.Start( 1500 ); 547 622 } 548 623
Note: See TracChangeset
for help on using the changeset viewer.