source: src/HaliteListView.cpp @ 268

Revision 268, 5.3 KB checked in by Eoin, 12 years ago (diff)

Added copyright eventually.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2007.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#include "HaliteListView.hpp"
8#include "HaliteWindow.hpp"
9#include "halTorrent.hpp"
10
11HaliteListViewCtrl::HaliteListViewCtrl(HaliteWindow& HalWindow) :
12        halWindow_(HalWindow),
13        iniClass("listviews/halite", "HaliteListView"),
14        listClass(true, false, false)
15{               
16        HalWindow.connectUiUpdate(bind(&HaliteListViewCtrl::uiUpdate, this, _1));
17       
18        std::vector<wstring> names;     
19        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
20       
21        // "Name;Status;Completed;Download;Upload;Peers;Seeds;ETA;Copies;Tracker;Reannounce;Ratio"
22        boost::split(names, column_names, boost::is_any_of(L";"));
23       
24        array<int, 12> widths = {100,110,60,60,60,42,45,61,45,45,45,45};
25        array<int, 12> order = {0,1,2,3,4,5,6,7,8,9,10,11};
26        array<bool, 12> visible = {true,true,true,true,true,true,true,true,true,true,true,true};
27       
28        SetDefaults(names, widths, order, visible);
29        Load();
30}
31       
32void HaliteListViewCtrl::OnShowWindow(UINT, INT)
33{
34        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER);
35        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS);
36       
37        ApplyDetails();
38       
39        SetColumnSortType(0, LVCOLSORT_CUSTOM, new ColumnAdapters::Filename());
40        SetColumnSortType(1, LVCOLSORT_CUSTOM, new ColumnAdapters::State());
41        SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::Completion());
42        SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown());
43        SetColumnSortType(4, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp());
44        SetColumnSortType(5, LVCOLSORT_CUSTOM, new ColumnAdapters::Peers());
45        SetColumnSortType(6, LVCOLSORT_CUSTOM, new ColumnAdapters::Seeds());
46        SetColumnSortType(7, LVCOLSORT_CUSTOM, new ColumnAdapters::ETA());
47        SetColumnSortType(8, LVCOLSORT_CUSTOM, new ColumnAdapters::DistributedCopies());
48        SetColumnSortType(9, LVCOLSORT_CUSTOM, new ColumnAdapters::Tracker());
49        SetColumnSortType(10, LVCOLSORT_CUSTOM, new ColumnAdapters::UpdateTrackerIn());
50        SetColumnSortType(11, LVCOLSORT_CUSTOM, new ColumnAdapters::Ratio());
51}
52
53void HaliteListViewCtrl::OnDestroy()
54{
55        saveSettings();
56}
57
58void HaliteListViewCtrl::saveSettings()
59{
60        GetListViewDetails();
61        Save();
62}
63
64void HaliteListViewCtrl::uiUpdate(const hal::TorrentDetails& tD)
65{
66        TryUpdateLock<listClass> lock(*this);
67        if (lock) 
68        {
69       
70        foreach (const hal::TorrentDetail_ptr td, tD.torrents()) 
71        {
72                LV_FINDINFO findInfo; 
73                findInfo.flags = LVFI_STRING;
74                findInfo.psz = const_cast<LPTSTR>(td->filename().c_str());
75               
76                int itemPos = FindItem(&findInfo, -1);
77                if (itemPos < 0)
78                        itemPos = AddItem(0, 0, td->filename().c_str(), 0);
79
80                for (size_t i=1; i<HaliteListViewCtrl::NumberOfColumns_s; ++i)
81                {
82                        SetItemText(itemPos, i, getColumnAdapter(i)->print(td).c_str());
83                }
84        }
85       
86        int iCol = GetSortColumn();
87        if (autoSort() && iCol >= 0 && iCol < m_arrColSortType.GetSize())
88                DoSortItems(iCol, IsSortDescending());
89       
90        }
91}
92
93HaliteListViewCtrl::tD HaliteListViewCtrl::CustomItemConversion(LVCompareParam* param, int iSortCol)
94{
95        boost::array<wchar_t, MAX_PATH> buffer;
96        GetItemText(param->iItem, 0, buffer.c_array(), buffer.size());         
97        wstring torrent = buffer.data();
98       
99        return hal::bittorrent().torrentDetails().get(torrent);
100}
101
102LRESULT HaliteListViewCtrl::OnResume(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
103{
104        std::for_each(manager().allSelected().begin(), manager().allSelected().end(),
105                bind(&hal::BitTorrent::resumeTorrent, &hal::bittorrent(), bind(&hal::to_utf8, _1)));
106       
107        return 0;
108}
109
110LRESULT HaliteListViewCtrl::OnPause(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
111{
112        std::for_each(manager().allSelected().begin(), manager().allSelected().end(),
113                bind(&hal::BitTorrent::pauseTorrent, &hal::bittorrent(), bind(&hal::to_utf8, _1)));
114       
115        return 0;
116}
117
118LRESULT HaliteListViewCtrl::OnStop(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
119{
120        std::for_each(manager().allSelected().begin(), manager().allSelected().end(),
121                bind(&hal::BitTorrent::stopTorrent, &hal::bittorrent(),bind(&hal::to_utf8, _1)));
122       
123        return 0;
124}
125
126LRESULT HaliteListViewCtrl::OnRemoveFocused(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
127{
128        hal::bittorrent().removeTorrent(hal::to_utf8(manager_.selected()));
129
130        clearFocused(); 
131        return 0;
132}
133
134LRESULT HaliteListViewCtrl::OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
135{
136        std::for_each(manager().allSelected().begin(), manager().allSelected().end(),
137                bind(&hal::BitTorrent::removeTorrent, &hal::bittorrent(), bind(&hal::to_utf8, _1)));
138
139        clearSelected();       
140        return 0;
141}
142
143LRESULT HaliteListViewCtrl::OnRemoveWipeFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
144{
145        std::for_each(manager().allSelected().begin(), manager().allSelected().end(),
146                bind(&hal::BitTorrent::removeTorrentWipeFiles, &hal::bittorrent(), bind(&hal::to_utf8, _1)));
147       
148        clearSelected();
149        return 0;
150}
151
152
153//LRESULT HaliteListViewCtrl::OnDeleteItem(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/)
154//{
155//      LPNMLISTVIEW pnmv=(LPNMLISTVIEW)pnmh;
156//      T* pItem=(T*)GetItemData(pnmv->iItem);
157//      ATLASSERT(pItem);
158//      if (pItem)      // Delete attached structure
159//              delete pItem;
160//      return 0;
161//}
Note: See TracBrowser for help on using the repository browser.