Changeset 661


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

File list working but very slow.

Location:
trunk/src
Files:
4 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} 
  • trunk/src/advtabs/Files.hpp

    r660 r661  
    9494        friend class listClass; 
    9595         
    96         struct ColumnAdapters 
     96/*      struct ColumnAdapters 
    9797        {        
    9898        typedef listClass::ColumnAdapter ColAdapter_t;   
     
    148148         
    149149        }; 
    150  
     150*/ 
    151151public:  
    152152        enum {  
  • trunk/src/halTorrent.cpp

    r660 r661  
    3434        static bit t; 
    3535        return t; 
     36} 
     37 
     38 
     39 
     40bool file_details::less(const file_details& r, size_t index) const 
     41{        
     42        switch (index) 
     43        { 
     44        case branch_e: return branch < r.branch; 
     45        case filename_e: return filename < r.filename; 
     46 
     47        case type_e: return type < r.type; 
     48        case size_e: return size < r.size; 
     49 
     50        case progress_e: return progress < r.progress; 
     51        case priority_e: return priority < r.priority; 
     52 
     53        default: return false; // ??? 
     54        }; 
     55} 
     56 
     57std::wstring file_details::to_wstring(size_t index) 
     58{ 
     59        switch (index) 
     60        { 
     61        case branch_e: return branch.string(); 
     62        case filename_e: return filename; 
     63 
     64        case type_e: return L"(Undefined)"; // ??? 
     65 
     66        case size_e: return (wform(L"%1$.2fMB") % (static_cast<double>(size)/(1024*1024))).str(); 
     67        case progress_e: return (wform(L"%1$.2f%%") % (static_cast<double>(progress)/size*100)).str();  
     68 
     69        case priority_e:                 
     70                { 
     71                        switch (priority) 
     72                        { 
     73                        case 0: 
     74                                return hal::app().res_wstr(HAL_FILE_PRIORITY_0); 
     75                        case 1: 
     76                                return hal::app().res_wstr(HAL_FILE_PRIORITY_1); 
     77                        case 2: 
     78                                return hal::app().res_wstr(HAL_FILE_PRIORITY_2); 
     79                        case 3: 
     80                                return hal::app().res_wstr(HAL_FILE_PRIORITY_3); 
     81                        case 4: 
     82                                return hal::app().res_wstr(HAL_FILE_PRIORITY_4); 
     83                        case 5: 
     84                                return hal::app().res_wstr(HAL_FILE_PRIORITY_5); 
     85                        case 6: 
     86                                return hal::app().res_wstr(HAL_FILE_PRIORITY_6); 
     87                        case 7: 
     88                                return hal::app().res_wstr(HAL_FILE_PRIORITY_7); 
     89                        default: 
     90                                return hal::app().res_wstr(HAL_FILE_PRIORITY_0); 
     91                        }; 
     92                }  
     93 
     94        default: return L"(Undefined)"; // ??? 
     95        }; 
     96} 
     97 
     98void file_details_sort(file_details_vec& p, size_t index, bool cmp_less) 
     99{ 
     100        std::stable_sort(p.begin(), p.end(),  
     101                bind(&hal_details_compare<const file_details&>, _1, _2, index, cmp_less)); 
    36102} 
    37103 
  • trunk/src/halTorrent.hpp

    r660 r661  
    9393struct file_details 
    9494{ 
     95        enum details 
     96        { 
     97                branch_e = 0, 
     98                filename_e, 
     99                type_e, 
     100                size_e, 
     101                progress_e, 
     102                priority_e 
     103        }; 
     104 
    95105        file_details(boost::filesystem::wpath p,  
    96106                        boost::int64_t s=0,  
     
    118128        } 
    119129         
     130        bool less(const file_details& r, size_t index = 0) const; 
     131        std::wstring to_wstring(size_t index = 0); 
     132         
    120133        enum file_type 
    121134        { 
     
    149162typedef std::vector<file_details> file_details_vec; 
    150163 
     164void file_details_sort(file_details_vec& f, size_t index, bool cmp_less = true); 
    151165 
    152166class torrent_details  
Note: See TracChangeset for help on using the changeset viewer.