Ignore:
Timestamp:
12/27/08 19:24:23 (11 years ago)
Author:
Eoin
Message:

File list working but very slow.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/advtabs/Files.cpp

    r660 r661  
    4747        load_from_ini(); 
    4848         
    49         SetColumnSortType(2, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Size()); 
     49/*      SetColumnSortType(2, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Size()); 
    5050        SetColumnSortType(3, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Progress()); 
    5151        SetColumnSortType(4, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Priority()); 
    52          
     52        */ 
    5353        return hwnd; 
    5454} 
     
    258258        hal::try_update_lock<FileListView::listClass> lock(list_); 
    259259        if (lock)  
    260         {                        
     260        { 
     261                hal::file_details_vec all_files = focusedTorrent()->get_file_details(); 
     262                hal::file_details_vec files; 
     263                for (std::vector<FileLink>::iterator i=range_.first, e=range_.second; 
     264                        i != e; ++i) 
     265                {                
     266                        files.push_back(all_files[(*i).order()]); 
     267                } 
     268 
    261269                // Wipe details not present 
    262270                for(int i = 0; i < list_.GetItemCount(); /*nothing here*/) 
     
    279287                        } 
    280288                } 
    281                  
     289 
     290                int col_sort_index = list_.GetSortColumn(); 
     291                if (col_sort_index != -1) 
     292                {                
     293                        int index = list_.GetColumnSortType(col_sort_index); 
     294                         
     295                        HAL_DEV_MSG(hal::wform(L"col_sort_index() = %1%, index() = %2%")  
     296                                % col_sort_index % index); 
     297 
     298                        if (index > WTL::LVCOLSORT_LAST) 
     299                                hal::file_details_sort(files, index - (WTL::LVCOLSORT_LAST+1+hal::file_details::branch_e),  
     300                                        list_.IsSortDescending()); 
     301                } 
     302 
     303                bool sort_once = list_.IsSortOnce(); 
     304 
     305                if (list_.GetItemCount() < files.size()) 
     306                { 
    282307                // Add additional details 
    283                 for (std::vector<FileLink>::iterator i=range_.first, e=range_.second; 
    284                         i != e; ++i) 
    285                 { 
    286                         hal::file_details fileD = focusedTorrent()->get_file_details()[(*i).order()]; 
    287                          
    288                         LV_FINDINFO findInfo;  
    289                         findInfo.flags = LVFI_STRING; 
    290                         findInfo.psz = const_cast<LPTSTR>((*i).filename.c_str()); 
    291                          
    292                         int itemPos = list_.FindItem(&findInfo, -1); 
    293                         if (itemPos < 0) 
    294                                 itemPos = list_.AddItem(list_.GetItemCount(), 0, (*i).filename.c_str(), 0); 
    295                          
    296                         list_.SetItemData(itemPos, (*i).order()); 
    297                          
    298                         list_.SetItemText(itemPos, 1, (*i).branch.string().c_str());                     
    299                         list_.SetItemText(itemPos, 2, list_.getColumnAdapter(2)->print(fileD).c_str()); 
    300                         list_.SetItemText(itemPos, 3, list_.getColumnAdapter(3)->print(fileD).c_str()); 
    301                         list_.SetItemText(itemPos, 4, list_.getColumnAdapter(4)->print(fileD).c_str());                  
    302                 } 
    303  
    304 //              list_.ConditionallyDoAutoSort(); 
     308                for (size_t index = 0, e = files.size(); index < e; ++index) 
     309                { 
     310                        hal::file_details& fd = files[index]; 
     311                         
     312                        int item_pos = index; 
     313                 
     314                        HAL_DEV_SORT_MSG(hal::wform(L"AutoSort() = %1%, SortOnce() = %2%, !AutoSort() && !SortOnce() = %3%")  
     315                                % AutoSort() % sort_once % (!AutoSort() && !sort_once)); 
     316 
     317                        if (!list_.AutoSort() && !sort_once) 
     318                        { 
     319                                LV_FINDINFO findInfo;  
     320                                findInfo.flags = LVFI_STRING; 
     321                                findInfo.psz = const_cast<LPTSTR>(fd.to_wstring(hal::file_details::filename_e).c_str()); 
     322                                 
     323                                item_pos = list_.FindItem(&findInfo, -1); 
     324                        } 
     325 
     326                        if (item_pos == -1 || item_pos > list_.GetItemCount()) 
     327                                item_pos = list_.AddItem(list_.GetItemCount(), 0, fd.to_wstring(hal::file_details::filename_e).c_str(), 0); 
     328                         
     329                        list_.SetItemData(item_pos, fd.order()); 
     330                         
     331                        list_.SetItemText(item_pos, 0, fd.filename.c_str());             
     332                        for (size_t i = hal::file_details::filename_e; i <= hal::file_details::priority_e; ++i) 
     333                        { 
     334                                list_.SetItemText(item_pos, i, fd.to_wstring(i).c_str()); 
     335                        }        
     336                } 
     337                } 
     338 
     339                if (list_.AutoSort() && col_sort_index >= 0 && col_sort_index < list_.m_arrColSortType.GetSize()) 
     340                { 
     341                        if (list_.GetColumnSortType(col_sort_index) <= WTL::LVCOLSORT_CUSTOM) 
     342                                list_.DoSortItems(col_sort_index, list_.IsSortDescending()); 
     343                } 
    305344        } 
    306345} 
Note: See TracChangeset for help on using the changeset viewer.