Changeset 662 for trunk


Ignore:
Timestamp:
12/28/08 17:19:06 (11 years ago)
Author:
Eoin
Message:

Virtual FileListView? working but not redrawing correctly.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/HaliteSortListViewCtrl.hpp

    r658 r662  
    578578//      void convert(LPLVITEM item, AdapterType adapter); 
    579579         
     580        mutable int update_lock_; 
     581        mutable hal::mutex_t mutex_; 
     582 
     583        friend class hal::mutex_update_lock<thisClass>;  
     584        friend class hal::try_update_lock<thisClass>;    
     585 
    580586        SelectionManager manager_; 
    581587        WTL::CMenu menu_; 
     
    601607        mutable bool descending_; 
    602608        mutable int sortCol_; 
    603          
    604         mutable int update_lock_; 
    605         mutable hal::mutex_t mutex_; 
    606  
    607         friend class hal::mutex_update_lock<thisClass>;  
    608         friend class hal::try_update_lock<thisClass>;            
    609          
     609                 
    610610        boost::ptr_map<size_t, ColumnAdapter> column_adapters_; 
    611611}; 
  • trunk/src/advtabs/Files.cpp

    r661 r662  
    2424        ATL::_U_MENUorID MenuOrID, LPVOID lpCreateParam) 
    2525{ 
    26         HWND hwnd = listClass::Create(hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); 
     26        HWND hwnd = listClass::Create(hWndParent, rect.m_lpRect, szWindowName, dwStyle|LVS_OWNERDATA, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); 
    2727        assert(hwnd); 
    2828         
     
    7070        if (hal::bit::torrent t = hal::bittorrent().get(hal::bittorrent().torrentDetails().focusedTorrent())) 
    7171                t.file_priorities = std::pair<std::vector<int>, int>(indices, priority); 
     72} 
     73 
     74LRESULT FileListView::OnGetDispInfo(int, LPNMHDR pnmh, BOOL&) 
     75{        
     76        hal::mutex_t::scoped_lock l(mutex_); 
     77 
     78        NMLVDISPINFO* pdi = (NMLVDISPINFO*)pnmh; 
     79 
     80        HAL_DEV_MSG(hal::wform(L"OnGetDispInfo() LV Item = %1%, Subitem = %2%")  
     81                % pdi->item.iItem % pdi->item.iSubItem); 
     82 
     83        if (pdi->item.mask & LVIF_TEXT && pdi->item.iItem < files_.size()) 
     84        { 
     85                wstring str = files_[pdi->item.iItem].to_wstring(pdi->item.iSubItem); 
     86                 
     87                int len = str.copy(pdi->item.pszText, min(pdi->item.cchTextMax - 1, str.size())); 
     88                pdi->item.pszText[len] = '\0'; 
     89 
     90                HAL_DEV_MSG(hal::wform(L"OnGetDispInfo() LV String = %1%, length = %2%, max = %3%, len = %4%")  
     91                        % str % str.size() % pdi->item.cchTextMax % len); 
     92        }        
     93         
     94        return 0; 
     95} 
     96 
     97LRESULT AdvFilesDialog::OnGetDispInfo(int, LPNMHDR pnmh, BOOL&) 
     98{        
     99        NMLVDISPINFO* pdi = (NMLVDISPINFO*)pnmh; 
     100 
     101        HAL_DEV_MSG(hal::wform(L"OnGetDispInfo() Dlg Item = %1%, Subitem = %2%")  
     102                % pdi->item.iItem % pdi->item.iSubItem); 
     103         
     104        return 0; 
    72105} 
    73106 
     
    203236                LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|LVS_SHOWSELALWAYS, 
    204237                WS_EX_STATICEDGE|LVS_EX_DOUBLEBUFFER); 
     238 
     239        list_.SetDlgCtrlID(31415); 
    205240                 
    206241        tree_.Create(splitter_, rc, NULL,  
     
    260295        { 
    261296                hal::file_details_vec all_files = focusedTorrent()->get_file_details(); 
    262                 hal::file_details_vec files; 
     297 
     298                FileListView::scoped_files list_files = list_.files(); 
     299                list_files->clear(); 
     300 
    263301                for (std::vector<FileLink>::iterator i=range_.first, e=range_.second; 
    264302                        i != e; ++i) 
    265303                {                
    266                         files.push_back(all_files[(*i).order()]); 
    267                 } 
     304                        list_files->push_back(all_files[(*i).order()]); 
     305                } 
     306 
     307                if (list_files->size() != list_.GetItemCount()) 
     308                        list_.SetItemCount(list_files->size()); 
    268309 
    269310                // Wipe details not present 
    270                 for(int i = 0; i < list_.GetItemCount(); /*nothing here*/) 
     311/*              for(int i = 0; i < list_.GetItemCount(); /*nothing here*//*) 
    271312                { 
    272313                        boost::array<wchar_t, MAX_PATH> fullPath; 
     
    342383                                list_.DoSortItems(col_sort_index, list_.IsSortDescending()); 
    343384                } 
    344         } 
     385                */ 
     386        } 
     387 
     388        list_.InvalidateRect(NULL,true); 
    345389} 
    346390 
  • trunk/src/advtabs/Files.hpp

    r661 r662  
    150150*/ 
    151151public:  
     152 
     153        class scoped_files 
     154        { 
     155 
     156        public: 
     157                scoped_files(hal::mutex_t& m, hal::file_details_vec* f) : 
     158                        l_(m), 
     159                        f_(f) 
     160                {} 
     161 
     162                hal::file_details_vec* operator->() const { return f_; } 
     163 
     164        private: 
     165                hal::mutex_t::scoped_lock l_; 
     166                hal::file_details_vec* f_; 
     167        }; 
     168 
     169 
    152170        enum {  
    153171                LISTVIEW_ID_MENU = HAL_FILESLISTVIEW_MENU, 
     
    159177                MSG_WM_DESTROY(OnDestroy) 
    160178                COMMAND_RANGE_HANDLER_EX(ID_HAL_FILE_PRIORITY_0, ID_HAL_FILE_PRIORITY_7, OnMenuPriority) 
     179                REFLECTED_NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, OnGetDispInfo) 
    161180 
    162181                CHAIN_MSG_MAP(listClass) 
    163                 DEFAULT_REFLECTION_HANDLER() 
     182                FORWARD_NOTIFICATIONS() 
    164183        END_MSG_MAP() 
    165184 
     
    199218        const hal::torrent_details_ptr focused() { return focused_; } 
    200219 
     220        scoped_files files() { return scoped_files(listClass::mutex_, &files_); } 
     221 
     222protected:       
     223        LRESULT OnGetDispInfo(int, LPNMHDR pnmh, BOOL&); 
     224 
    201225private: 
     226        //mutable hal::mutex_t mutex_; 
     227 
     228        hal::file_details_vec files_; 
    202229        hal::torrent_details_ptr focused_; 
    203230}; 
     
    406433                MSG_WM_INITDIALOG(onInitDialog) 
    407434                MSG_WM_CLOSE(onClose) 
     435                NOTIFY_HANDLER(31415, LVN_GETDISPINFO, OnGetDispInfo) 
    408436                MSG_WM_DESTROY(OnDestroy) 
    409437                 
     
    430458        LRESULT onInitDialog(HWND, LPARAM); 
    431459        void onClose(); 
     460        LRESULT OnGetDispInfo(int, LPNMHDR pnmh, BOOL&); 
    432461         
    433462        void DlgResize_UpdateLayout(int cxWidth, int cyHeight); 
  • trunk/src/halTorrent.hpp

    r661 r662  
    9595        enum details 
    9696        { 
    97                 branch_e = 0, 
    98                 filename_e, 
    99                 type_e, 
     97                filename_e = 0, 
     98                branch_e, 
    10099                size_e, 
    101100                progress_e, 
    102                 priority_e 
     101                priority_e, 
     102                type_e 
    103103        }; 
    104104 
Note: See TracChangeset for help on using the changeset viewer.