Changeset 253


Ignore:
Timestamp:
08/15/07 11:30:09 (12 years ago)
Author:
Eoin
Message:
 
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • res/Halite.rc

    r252 r253  
    442442        HAL_INCORRECT_ENCODING_LEVEL  "An invalid encoding level, %1%, was passed as an encryption setting." 
    443443        HAL_INCORRECT_CONNECT_POLICY  "An invalid connection policy, %1%, was passed as an encryption setting." 
     444        HAL_AUTOSORT                              "Auto Sort" 
    444445END 
    445446 
  • res/resource.h

    r249 r253  
    243243#define HAL_COMPLETED_SUMMARY           40093 
    244244#define HAL_DOWNLOADT_SUMMARY           40094 
     245#define HAL_AUTOSORT                                    40095 
     246#define ID_LVM_AUTOSORT                                 40096 
  • src/HaliteDialog.cpp

    r252 r253  
    161161void HaliteDialog::DialogListView::uiUpdate(const hal::TorrentDetails& tD)  
    162162{        
    163         if (canUpdate()) 
    164         { 
    165                 UpdateLock<listClass> rLock(*this); 
    166 //              hal::mutex_t::scoped_lock l(mutex_); 
    167                  
     163        TryUpdateLock<listClass> lock(*this); 
     164        if (lock)  
     165        {                
    168166                peerDetails_ = tD.selectedTorrent()->peerDetails(); 
    169                 //clearAll(); 
    170          
     167                 
    171168                std::sort(peerDetails_.begin(), peerDetails_.end()); 
    172169                 
     
    188185                        { 
    189186                                SetItemData(i, std::distance(peerDetails_.begin(), iter)); 
    190                          
    191                                 DWORD index = GetItemData(i);            
    192                                 hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails set A %1%, %2% - %3%") % i % std::distance(peerDetails_.begin(), iter) % index).str().c_str()))); 
    193  
    194187                                ++i; 
    195188                        } 
     
    207200                        if (itemPos < 0) 
    208201                                itemPos = AddItem(GetItemCount(), 0, (*i).ipAddress.c_str(), 0); 
    209          
     202                         
    210203                        SetItemData(itemPos, std::distance(peerDetails_.begin(), i)); 
    211                          
    212                         DWORD index = GetItemData(itemPos);                      
    213                         hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails set B %1%, %2% - %3%") % itemPos % std::distance(peerDetails_.begin(), i) % index).str().c_str()))); 
    214204                         
    215205                        SetItemText(itemPos, 1, (*i).country.c_str()); 
     
    223213                         
    224214                        SetItemText(itemPos, 5, (*i).client.c_str()); 
    225                 }                        
     215                } 
     216                 
     217                int iCol = GetSortColumn(); 
     218                if (iCol >= 0 && iCol < m_arrColSortType.GetSize()) 
     219                        DoSortItems(iCol, IsSortDescending()); 
    226220        } 
    227221} 
  • src/HaliteDialog.hpp

    r252 r253  
    128128                pD CustomItemConversion(LVCompareParam* param, int iSortCol) 
    129129                {                        
    130                 //      DWORD index = GetItemData(param->iItem); 
    131                  
    132                         return hal::PeerDetail(L"Eóin"); 
    133                          
    134                         hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails get %1%, %2%. Item count %3%") % param->iItem % param->dwItemData % GetItemCount()).str().c_str()))); 
     130                //      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails get %1%, %2%. Item count %3%") % param->iItem % param->dwItemData % GetItemCount()).str().c_str()))); 
    135131                         
    136132                        return peerDetails_[param->dwItemData]; 
     
    139135                int CustomItemComparision(pD left, pD right, int iSortCol) 
    140136                { 
    141                         hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails left %1%, right %2%") % left.ipAddress % right.ipAddress).str().c_str()))); 
    142                         return 1; 
     137                //      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails left %1%, right %2%") % left.ipAddress % right.ipAddress).str().c_str()))); 
     138 
    143139                        ColumnAdapter* pCA = getColumnAdapter(iSortCol); 
    144140                         
  • src/HaliteSortListViewCtrl.hpp

    r252 r253  
    3838private: 
    3939        T& window_; 
     40}; 
     41 
     42template<class T> 
     43class TryUpdateLock 
     44{ 
     45public: 
     46        TryUpdateLock(T& window) : 
     47                window_(window), 
     48                locked_(false) 
     49        { 
     50                if (0 == window_.updateLock_) 
     51                { 
     52                        locked_=  true; 
     53                        ++window_.updateLock_; 
     54                        window_.SetRedraw(false); 
     55                } 
     56        } 
     57         
     58        ~TryUpdateLock() 
     59        { 
     60                if (locked_ && !--window_.updateLock_) 
     61                        unlock(); 
     62        } 
     63         
     64        void unlock() 
     65        { 
     66                window_.SetRedraw(true); 
     67                window_.InvalidateRect(NULL, true); 
     68        } 
     69         
     70        operator bool() const { return locked_; } 
     71         
     72private: 
     73        T& window_; 
     74        bool locked_; 
    4075}; 
    4176 
     
    209244                        UpdateLock<thisClass> lock(m_list_); 
    210245                         
    211 //                      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"Clear")).str().c_str()))); 
    212          
    213246                        m_list_.DeleteItem(selectedIndex()); 
    214247                         
     
    221254                        UpdateLock<thisClass> lock(m_list_); 
    222255                         
    223 //                      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"ClearAllSelected")).str().c_str()))); 
    224  
    225256                        int total = m_list_.GetItemCount(); 
    226257                         
     
    242273                        UpdateLock<thisClass> lock(m_list_); 
    243274                         
    244 //                      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"ClearAll")).str().c_str()))); 
    245  
    246275                        m_list_.DeleteAllItems(); 
    247276                        all_selected_.clear(); 
     
    315344                updateLock_(0) 
    316345        { 
     346                MENUITEMINFO minfo = {sizeof(MENUITEMINFO)}; 
     347                 
    317348                if (resMenu && TBase::LISTVIEW_ID_MENU) 
    318349                { 
     
    320351                        assert(menu_created);    
    321352                } 
     353                 
     354                if (!menu_) 
     355                        menu_.CreatePopupMenu(); 
     356                else 
     357                { 
     358                        minfo.fMask = MIIM_FTYPE; 
     359                        minfo.fType = MFT_SEPARATOR; 
     360                         
     361                        menu_.InsertMenuItem(3, true, &minfo);           
     362                } 
     363 
     364                minfo.fMask = MIIM_STRING|MIIM_ID|MIIM_FTYPE|MIIM_STATE; 
     365                minfo.fType = MFT_STRING; 
     366                minfo.fState = MFS_CHECKED; 
     367                minfo.wID = ID_LVM_AUTOSORT; 
     368                 
     369                wstring autoarrange = hal::app().res_wstr(TBase::LISTVIEW_ID_COLUMNNAMES); 
     370                minfo.dwTypeData = (LPWSTR)autoarrange.c_str(); 
     371                 
     372                menu_.InsertMenuItem(menu_.GetMenuItemCount(), true, &minfo); 
    322373 
    323374                if (resNames) 
     
    440491        LRESULT OnItemChanged(int, LPNMHDR pnmh, BOOL&) 
    441492        {                
    442                 if (canUpdate())  
    443                 { 
    444                         if (syncTimer_.reset(50, 0, bind(&thisClass::syncTimeout, this))) 
    445                         { 
    446                         //      hal::event().post(shared_ptr<hal::EventDetail> 
    447                         //              (new hal::EventDebug(hal::Event::info, (wformat(L"Set")).str().c_str()))); 
    448                         } 
    449                 } 
     493                TryUpdateLock<thisClass> lock(*this); 
     494                if (lock)  
     495                        !syncTimer_.reset(50, 0, bind(&thisClass::syncTimeout, this)); 
    450496                 
    451497                return 0; 
     
    454500        LRESULT OnRClick(int i, LPNMHDR pnmh, BOOL&) 
    455501        { 
    456                 //hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"RClick %1%") % pnmh->code).str().c_str()))); 
    457502                LPNMITEMACTIVATE pia = (LPNMITEMACTIVATE)pnmh; 
    458503                manager_.sync_list(true); 
    459504                 
    460                 if (TBase::LISTVIEW_ID_MENU) 
     505                if (menu_) 
    461506                { 
    462507                        assert (menu_.IsMenu()); 
     
    512557        int CompareItemsCustom(LVCompareParam* pItem1, LVCompareParam* pItem2, int iSortCol) 
    513558        { 
    514                 //return 1; 
    515                 //hal::mutex_t::scoped_lock l(mutex_); 
     559                UpdateLock<thisClass> lock(*this); 
    516560                 
    517561                TBase* pT = static_cast<TBase*>(this); 
     
    559603         
    560604        SelectionManager manager_; 
    561  
    562         //hal::mutex_t mutex_; 
    563605         
    564606private: 
     
    596638         
    597639        int updateLock_; 
    598         friend class UpdateLock<thisClass>;              
     640        friend class UpdateLock<thisClass>;      
     641        friend class TryUpdateLock<thisClass>;           
    599642         
    600643        boost::ptr_map<size_t, ColumnAdapter> columnAdapters_; 
Note: See TracChangeset for help on using the changeset viewer.