source: trunk/src/advtabs/TrackerListView.cpp @ 745

Revision 745, 3.2 KB checked in by Eoin, 11 years ago (diff)
Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2009.
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 "stdAfx.hpp"
8
9#include "../halTorrent.hpp"
10
11#include "TrackerListView.hpp"
12#include "TrackerAddDialog.hpp"
13
14void TrackerListViewCtrl::OnAttach()
15{
16        WTL::CMenuHandle menu;
17        BOOL menu_created = menu.LoadMenu(LISTVIEW_ID_MENU);
18        InitialSetup(menu);     
19
20        std::vector<wstring> names;     
21        wstring column_names = hal::app().res_wstr(HAL_TRACKER_LISTVIEW_COLUMNS);
22
23        // "Tracker;Tier"
24        boost::split(names, column_names, boost::is_any_of(L";"));
25       
26        array<int, 2> widths = {287,50};
27        array<int, 2> order = {0,1};
28        array<bool, 2> visible = {true,true};
29
30        for (int i=0, e=2; i < e; ++i)
31        {
32                AddColumn(names[i].c_str(), i, visible[i], widths[i]);
33        }       
34
35        load_from_ini();       
36       
37        SetColumnSortType(1, WTL::LVCOLSORT_LONG);
38}
39
40void TrackerListViewCtrl::OnDestroy()
41{
42        saveSettings();
43}
44
45void TrackerListViewCtrl::saveSettings()
46{               
47        GetListViewDetails();
48        save_to_ini();
49}
50
51void TrackerListViewCtrl::uiUpdate(const hal::torrent_details_ptr pT)
52{
53        if (hal::bit::torrent t = hal::bittorrent::Instance().get(pT))
54        {                       
55                hal::try_update_lock<listClass> lock(*this);
56                if (lock) 
57                {                       
58                        std::vector<hal::tracker_detail> trackers = t.trackers;                         
59                        DeleteAllItems();
60                       
61                        foreach (const hal::tracker_detail& tracker, trackers)
62                        {
63                                int itemPos = AddItem(0, 0, tracker.url.c_str(), 0);
64                                SetItemText(itemPos, 1, lexical_cast<wstring>(tracker.tier).c_str());
65                        }
66                }
67        }
68        else
69        {               
70                DeleteAllItems();
71        }
72}
73
74void TrackerListViewCtrl::newItem()
75{
76        hal::tracker_detail tracker(L"", 0);   
77        TrackerAddDialog trackDlg(L"Add New Tracker", tracker);
78       
79        if (trackDlg.DoModal() == 1 && !tracker.url.empty()) 
80        {
81                int itemPos = AddItem(0, 0, tracker.url.c_str(), 0);           
82                SetItemText(itemPos, 1, lexical_cast<wstring>(tracker.tier).c_str());
83               
84                listEdited_(); 
85        }
86}
87
88void TrackerListViewCtrl::editItem(int index)
89{
90        array<wchar_t, MAX_PATH> buffer;
91
92        GetItemText(index, 0, buffer.elems, buffer.size());
93        hal::tracker_detail tracker(wstring(buffer.elems), 0);
94       
95        GetItemText(index, 1, buffer.elems, buffer.size());
96        tracker.tier = lexical_cast<int>(wstring(buffer.elems));
97
98        TrackerAddDialog trackDlg(L"Edit Tracker", tracker);
99       
100        if (trackDlg.DoModal() == 1) 
101        {
102                if (tracker.url.empty())
103                {
104                        DeleteItem(index);
105                }
106                else
107                {
108                        SetItemText(index, 0, tracker.url.c_str());     
109                        SetItemText(index, 1, lexical_cast<wstring>(tracker.tier).c_str());
110                }               
111                listEdited_();
112        }       
113}
114
115void TrackerListViewCtrl::deleteItem(int index)
116{
117        DeleteItem(index);
118        listEdited_();
119}
120
121LRESULT TrackerListViewCtrl::OnPrimary(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
122{       
123        hal::try_update_lock<listClass> lock(*this);
124        if (lock) 
125        {       
126       
127        for (int i=0, e=GetItemCount(); i<e; ++i)
128        {
129                array<wchar_t, MAX_PATH> buffer;               
130                GetItemText(i, 1, buffer.elems, buffer.size());
131               
132                if (wstring(buffer.elems) == L"0")
133                        SetItemText(i, 1, L"1");
134        }
135       
136//      SetItemText(manager().selectedIndex(), 1, L"0");
137       
138        listEdited_();
139       
140        }       
141        return 0;
142}
Note: See TracBrowser for help on using the repository browser.