source: trunk/src/NewTorrentPeersLV.cpp @ 509

Revision 509, 2.9 KB checked in by Eoin, 11 years ago (diff)
Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2008.
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#include "halTorrent.hpp"
9
10#include "NewTorrentPeers.hpp"
11
12void NewTorrent_PeersListViewCtrl::OnAttach()
13{       
14        WTL::CMenuHandle menu;
15        BOOL menu_created = menu.LoadMenu(HAL_GENERIC_ADD_LV_MENU);
16        InitialSetup(menu);     
17
18        std::vector<wstring> names;     
19        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
20
21        // "Tracker;Tier"
22        boost::split(names, column_names, boost::is_any_of(L";"));
23       
24        array<int, 3> widths = {287,50,50};
25        array<int, 3> order = {0,1,2};
26        array<bool, 3> visible = {true,true,true};
27       
28        for (int i=0, e=3; i < e; ++i)
29        {
30                AddColumn(names[i].c_str(), i, visible[i], widths[i]);
31        }       
32
33        load_from_ini();       
34       
35        SetColumnSortType(1, WTL::LVCOLSORT_LONG);
36}
37
38void NewTorrent_PeersListViewCtrl::OnDestroy()
39{
40        saveSettings();
41}
42
43void NewTorrent_PeersListViewCtrl::saveSettings()
44{               
45        GetListViewDetails();
46        save_to_ini();
47}
48
49void NewTorrent_PeersListViewCtrl::newItem()
50{
51        hal::web_seed_or_dht_node_detail peer; 
52        NewTorrent_PeersAddDialog trackDlg(hal::app().res_wstr(HAL_NEWT_ADD_NEW_PEER), peer);
53       
54        if (trackDlg.DoModal() == 1 && !peer.url.empty()) 
55        {
56                int itemPos = AddItem(0, 0, peer.url.c_str(), 0);               
57                SetItemText(itemPos, 1, lexical_cast<wstring>(peer.port).c_str());
58                SetItemText(itemPos, 2, peer.type.c_str());
59        }
60}
61
62void NewTorrent_PeersListViewCtrl::editItem(int index)
63{       
64        try {
65
66        hal::win_c_str<std::wstring> str_url(MAX_PATH); 
67        GetItemText(index, 0, str_url, str_url.size());
68
69        hal::win_c_str<std::wstring> str_port(MAX_PATH);       
70        GetItemText(index, 1, str_port, str_port.size());
71
72        hal::win_c_str<std::wstring> str_type(MAX_PATH);
73        GetItemText(index, 2, str_type, str_type.size());
74       
75        hal::web_seed_or_dht_node_detail peer;
76
77        if (hal::app().res_wstr(HAL_NEWT_ADD_PEERS_WEB) == str_type.str())
78        {
79                peer.url = str_url.str();
80                peer.port = -1;
81                peer.type = hal::app().res_wstr(HAL_NEWT_ADD_PEERS_WEB);
82        }
83        else
84        {
85                peer.url = str_url.str();
86                peer.port = lexical_cast<unsigned>(str_port.str());
87                peer.type = hal::app().res_wstr(HAL_NEWT_ADD_PEERS_DHT);
88        }
89
90        NewTorrent_PeersAddDialog trackDlg(hal::app().res_wstr(HAL_NEWT_EDIT_PEER), peer);
91       
92        if (trackDlg.DoModal() == 1) 
93        {
94                if (peer.url.empty())
95                {
96                        DeleteItem(index);
97                }
98                else
99                {
100                        SetItemText(index, 0, peer.url.c_str());       
101                        SetItemText(index, 1, lexical_cast<wstring>(peer.port).c_str());
102                        SetItemText(index, 2, peer.type.c_str());
103                }               
104        }       
105
106        }
107        catch(const std::exception& e)
108        {
109                hal::event_log.post(boost::shared_ptr<hal::EventDetail>(
110                        new hal::EventStdException(hal::event_logger::critical, e, 
111                                L"NewTorrent_PeersListViewCtrl::editItem")));
112        }
113}
114
115void NewTorrent_PeersListViewCtrl::deleteItem(int index)
116{
117        DeleteItem(index);
118}
Note: See TracBrowser for help on using the repository browser.