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

Revision 397, 3.5 KB checked in by Eoin, 12 years ago (diff)

Arrgh in place edit!

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 "stdAfx.hpp"
8
9#include "../halTorrent.hpp"
10
11#include "TrackerListView.hpp"
12#include "TrackerAddDialog.hpp"
13
14void TrackerListViewCtrl::OnAttach()
15{
16        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);
17        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS);
18       
19        ApplyDetails();
20       
21        SetColumnSortType(1, LVCOLSORT_LONG);
22}
23
24void TrackerListViewCtrl::OnDestroy()
25{
26        saveSettings();
27}
28
29void TrackerListViewCtrl::saveSettings()
30{               
31        GetListViewDetails();
32        save();
33}
34
35void TrackerListViewCtrl::uiUpdate(const hal::TorrentDetail_ptr pT)
36{
37        if (pT)
38        {                       
39                TryUpdateLock<listClass> lock(*this);
40                if (lock) 
41                {                       
42                        std::vector<hal::TrackerDetail> trackers =
43                                hal::bittorrent().getTorrentTrackers(pT->name());
44                        clearAll();
45                       
46                        foreach (const hal::TrackerDetail& tracker, trackers)
47                        {
48                                int itemPos = AddItem(0, 0, tracker.url.c_str(), 0);
49                                SetItemText(itemPos, 1, lexical_cast<wstring>(tracker.tier).c_str());
50                        }
51                }
52        }
53        else
54        {               
55                clearAll();
56        }
57}
58
59void TrackerListViewCtrl::enterNewTracker()
60{
61        hal::TrackerDetail tracker(L"", 0);     
62        TrackerAddDialog trackDlg(L"Add New Tracker", tracker);
63       
64        if (trackDlg.DoModal() == 1 && !tracker.url.empty()) 
65        {
66                int itemPos = AddItem(0, 0, tracker.url.c_str(), 0);           
67                SetItemText(itemPos, 1, lexical_cast<wstring>(tracker.tier).c_str());
68               
69                listEdited_(); 
70        }
71}
72
73LRESULT TrackerListViewCtrl::OnDoubleClick(int i, LPNMHDR pnmh, BOOL&)
74{
75//      enterNewTracker();
76
77       
78                LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)pnmh;
79                LVHITTESTINFO hit;
80
81                hit.pt = lpnmitem->ptAction;
82                SubItemHitTest(&hit);
83
84                HAL_DEV_MSG(wformat(L"OnDoubleClick %1% %2%") % hit.iItem % hit.iSubItem);
85
86        return 0;
87}
88
89LRESULT TrackerListViewCtrl::OnNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
90{
91        enterNewTracker();
92       
93        return 0;
94}
95
96LRESULT TrackerListViewCtrl::OnEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
97{
98        array<wchar_t, MAX_PATH> buffer;
99        int index = manager().selectedIndex();
100       
101        GetItemText(index, 0, buffer.elems, buffer.size());
102        hal::TrackerDetail tracker(wstring(buffer.elems), 0);
103       
104        GetItemText(index, 1, buffer.elems, buffer.size());
105        tracker.tier = lexical_cast<int>(wstring(buffer.elems));
106
107        TrackerAddDialog trackDlg(L"Edit Tracker", tracker);
108       
109        if (trackDlg.DoModal() == 1) 
110        {
111                if (tracker.url.empty())
112                {
113                        DeleteItem(index);
114                }
115                else
116                {
117                        SetItemText(index, 0, tracker.url.c_str());     
118                        SetItemText(index, 1, lexical_cast<wstring>(tracker.tier).c_str());
119                }               
120                listEdited_();
121        }       
122        return 0;
123}
124
125LRESULT TrackerListViewCtrl::OnDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
126{
127        DeleteItem(manager().selectedIndex());
128        listEdited_();
129       
130        return 0;
131}
132
133LRESULT TrackerListViewCtrl::OnPrimary(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
134{       
135        TryUpdateLock<listClass> lock(*this);
136        if (lock) 
137        {       
138       
139        for (int i=0, e=GetItemCount(); i<e; ++i)
140        {
141                array<wchar_t, MAX_PATH> buffer;               
142                GetItemText(i, 1, buffer.elems, buffer.size());
143               
144                if (wstring(buffer.elems) == L"0")
145                        SetItemText(i, 1, L"1");
146        }
147       
148        SetItemText(manager().selectedIndex(), 1, L"0");
149       
150        listEdited_();
151       
152        }       
153        return 0;
154}
Note: See TracBrowser for help on using the repository browser.