Changeset 275


Ignore:
Timestamp:
08/28/07 14:53:11 (13 years ago)
Author:
Eoin
Message:

More work on file listing.

Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/advtabs/Files.cpp

    r274 r275  
    122122                 
    123123        tree_.Create(splitter_, rc, NULL,  
    124                 WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN); 
     124                WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES|TVS_TRACKSELECT); 
    125125                 
    126126        splitter_.SetSplitterPanes(tree_, list_); 
    127127         
     128        CTreeItem ti = tree_.InsertItem(L"baz", TVI_ROOT, TVI_LAST); 
    128129//      tree_.ShowWindow(true); 
    129130//      list_.ShowWindow(true); 
     
    156157         
    157158        std::sort(fileDetails_.begin(), fileDetails_.end()); 
     159         
     160        //tree_.DeleteAllItems(); 
     161        //fileTreeMap_.clear(); 
     162        treeManager_.InvalidateAll(); 
     163         
     164        foreach (hal::FileDetail file, fileDetails_) 
     165        { 
     166                treeManager_.EnsureValid(file.path); 
     167        } 
     168         
     169        treeManager_.ClearInvalid(); 
    158170         
    159171        TryUpdateLock<FileListView::listClass> lock(list_); 
     
    195207                //      list_.SetItemData(itemPos, std::distance(peerDetails_.begin(), i)); 
    196208                         
    197                 //      list_.SetItemText(itemPos, 1, (*i).country.c_str()); 
     209                        list_.SetItemText(itemPos, 1, (*i).path.leaf().c_str()); 
     210                        list_.SetItemText(itemPos, 2, (*i).path.branch_path().string().c_str()); 
    198211                         
    199212                //      list_.SetItemText(itemPos, 2, getColumnAdapter(2)->print(*i).c_str()); 
  • src/advtabs/Files.hpp

    r274 r275  
    119119                MSG_WM_DESTROY(OnDestroy) 
    120120 
     121//              CHAIN_MSG_MAP(treeClass) 
    121122                DEFAULT_REFLECTION_HANDLER() 
    122123        END_MSG_MAP() 
     
    127128        //      saveSettings(); 
    128129        } 
     130}; 
     131 
     132template<typename T> 
     133class TreeViewManager 
     134{ 
     135public: 
     136        TreeViewManager(T& t) : 
     137                tree_(t) 
     138        {} 
     139         
     140        struct ValidTreeItem 
     141        { 
     142                ValidTreeItem()  
     143                {} 
     144 
     145                ValidTreeItem(CTreeItem& t) : 
     146                        valid(true), 
     147                        treeItem(t) 
     148                {} 
     149                 
     150                bool valid; 
     151                CTreeItem treeItem; 
     152        }; 
     153         
     154        typedef std::map<wpath, ValidTreeItem> MapType; 
     155         
     156        void EnsureValid(wpath p) 
     157        {                
     158                wpath branchPath = p.branch_path(); 
     159                 
     160                MapType::iterator i = map_.find(branchPath);             
     161                if (i == map_.end()) 
     162                { 
     163                        CTreeItem ti = tree_.GetRootItem(); 
     164                         
     165                        wpath branch; 
     166                        foreach (wstring b, branchPath) 
     167                        { 
     168                                branch /= b;                             
     169                                MapType::iterator j = map_.find(branch); 
     170                                 
     171                                if (j == map_.end()) 
     172                                { 
     173                                        CTreeItem tmp = ti.AddTail(b.c_str(), -1); 
     174                                        ti.Expand(); 
     175                                        ti = tmp; 
     176                                        map_[b] = ValidTreeItem(ti); 
     177                                } 
     178                                else 
     179                                { 
     180                                        (*i).second.valid = true; 
     181                                        ti = (*i).second.treeItem; 
     182                                } 
     183                                 
     184                        } 
     185                } 
     186                else 
     187                { 
     188                        if (!(*i).second.valid) 
     189                        { 
     190                                (*i).second.valid = true; 
     191                                EnsureValid(branchPath); 
     192                        } 
     193                } 
     194        } 
     195         
     196        void InvalidateAll() 
     197        { 
     198                for(MapType::iterator i=map_.begin(), e=map_.end(); i!=e; ++i) 
     199                { 
     200                        (*i).second.valid = false; 
     201                } 
     202        } 
     203         
     204        void ClearInvalid() 
     205        { 
     206                for(MapType::iterator i=map_.begin(), e=map_.end(); i!=e; /**/) 
     207                { 
     208                        if ((*i).second.valid) 
     209                        { 
     210                                ++i; 
     211                        } 
     212                        else 
     213                        { 
     214                                (*i).second.treeItem.Delete(); 
     215                                map_.erase(i++); 
     216                        } 
     217                }                
     218        } 
     219         
     220private: 
     221        T& tree_; 
     222        MapType map_; 
    129223}; 
    130224 
     
    146240 
    147241        AdvFilesDialog(HaliteWindow& halWindow) : 
    148                 dialogBaseClass(halWindow) 
     242                dialogBaseClass(halWindow), 
     243                treeManager_(tree_) 
    149244        {} 
    150245         
     
    182277         
    183278        hal::FileDetails fileDetails_; 
    184 }; 
     279        std::map<wpath, CTreeItem> fileTreeMap_; 
     280        TreeViewManager<FileTreeView> treeManager_; 
     281}; 
  • src/halTorrent.hpp

    r274 r275  
    7272struct FileDetail 
    7373{ 
    74         FileDetail(boost::filesystem::wpath p, size_t s=0, float pg=0, int pr=1) : 
     74        FileDetail(boost::filesystem::wpath p, size_t s=0, float pg=0, int pr=1, size_t o=0) : 
    7575                path(p), 
    7676                size(s), 
    7777                progress(pg), 
    78                 priority(pr) 
     78                priority(pr), 
     79                order(o) 
    7980        {} 
    8081         
     
    9394        float progress; 
    9495        int priority; 
     96         
     97private: 
     98        size_t order; 
    9599}; 
    96100 
  • src/halTorrentInternal.hpp

    r274 r275  
    1212} 
    1313 
    14 BOOST_CLASS_VERSION(hal::TorrentInternal, 4) 
     14BOOST_CLASS_VERSION(hal::TorrentInternal, 5) 
    1515 
    1616namespace hal  
     
    303303                        ar & make_nvp("resolve_countries", resolve_countries_); 
    304304                } 
     305                if (version > 4) { 
     306                        ar & make_nvp("file_priorities", filePriorities_); 
     307                } 
    305308    } 
    306309         
     
    350353                        handle_.file_progress(fileProgress); 
    351354                         
     355                        if (filePriorities_.size() != files.size()) 
     356                        { 
     357                                filePriorities_.clear(); 
     358                                filePriorities_.assign(files.size(), 1); 
     359                        } 
     360                         
    352361                        for(size_t i=0, e=files.size(); i<e; ++i) 
    353362                        { 
    354363                                wstring fullPath = hal::from_utf8(files[i].path.string()); 
    355364                                 
    356                                 fileDetails.push_back(FileDetail(fullPath, files[i].size, fileProgress[i])); 
    357                         } 
     365                                fileDetails.push_back(FileDetail(fullPath, files[i].size, fileProgress[i], filePriorities_[i], i)); 
     366                        }                        
    358367                } 
    359368        } 
     
    391400        std::vector<TrackerDetail> trackers_; 
    392401        std::vector<lbt::announce_entry> torrent_trackers_; 
    393         mutable std::vector<lbt::peer_info> peers_; 
    394          
     402        mutable std::vector<lbt::peer_info> peers_;      
     403        mutable std::vector<int> filePriorities_;        
    395404}; 
    396405 
Note: See TracChangeset for help on using the changeset viewer.