• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdenetwork API Reference
  • KDE Home
  • Contact Us
 

kget

  • sources
  • kde-4.12
  • kdenetwork
  • kget
  • transfer-plugins
  • bittorrent
  • advanceddetails
trackerview.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2006-2007 by Joris Guisson, Ivan Vasic *
3  * joris.guisson@gmail.com *
4  * ivasic@gmail.com *
5  * *
6  * This program is free software; you can redistribute it and/or modify *
7  * it under the terms of the GNU General Public License as published by *
8  * the Free Software Foundation; either version 2 of the License, or *
9  * (at your option) any later version. *
10  * *
11  * This program is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU General Public License *
17  * along with this program; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
20  ***************************************************************************/
21 #include "trackerview.h"
22 
23 #include <QHeaderView>
24 #include <QClipboard>
25 #include <klocale.h>
26 #include <kurl.h>
27 #include <kmessagebox.h>
28 #include <kglobal.h>
29 #include <kinputdialog.h>
30 #include <torrent/globals.h>
31 #include <interfaces/trackerinterface.h>
32 #include <interfaces/torrentinterface.h>
33 #include <interfaces/trackerslist.h>
34 #include <util/log.h>
35 #include "trackermodel.h"
36 
37 
38 using namespace bt;
39 
40 namespace kt
41 {
42 
43 
44  TrackerView::TrackerView(QWidget *parent)
45  : QWidget(parent), tc(0)
46  {
47  setupUi(this);
48  model = new TrackerModel(this);
49  proxy_model = new QSortFilterProxyModel(this);
50  proxy_model->setSortRole(Qt::UserRole);
51  proxy_model->setSourceModel(model);
52  m_tracker_list->setModel(proxy_model);
53  m_tracker_list->setAllColumnsShowFocus(true);
54  m_tracker_list->setRootIsDecorated(false);
55  m_tracker_list->setAlternatingRowColors(true);
56  m_tracker_list->setSortingEnabled(true);
57  connect(m_add_tracker,SIGNAL(clicked()),this,SLOT(addClicked()));
58  connect(m_remove_tracker,SIGNAL(clicked()),this,SLOT(removeClicked()));
59  connect(m_change_tracker,SIGNAL(clicked()),this,SLOT(changeClicked()));
60  connect(m_restore_defaults,SIGNAL(clicked()),this,SLOT(restoreClicked()));
61  connect(m_tracker_list->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),
62  this,SLOT(currentChanged(QModelIndex,QModelIndex)));
63  connect(m_scrape,SIGNAL(clicked()),this,SLOT(scrapeClicked()));
64 
65  m_add_tracker->setIcon(KIcon("list-add"));
66  m_remove_tracker->setIcon(KIcon("list-remove"));
67  m_restore_defaults->setIcon(KIcon("kt-restore-defaults"));
68  m_change_tracker->setIcon(KIcon("kt-change-tracker"));
69 
70  setEnabled(false);
71  torrentChanged(0);
72  }
73 
74  TrackerView::~TrackerView()
75  {
76  }
77 
78  void TrackerView::addClicked()
79  {
80  if (!tc)
81  return;
82 
83  bool ok = false;
84  QClipboard* clipboard = QApplication::clipboard();
85  QString text = KInputDialog::getText(
86  i18n("Add Tracker"),i18n("Enter the URL of the tracker:"),clipboard->text(),&ok,this);
87 
88  if (!ok)
89  return;
90 
91  KUrl url(text);
92  if (!url.isValid())
93  {
94  KMessageBox::error(0, i18n("Malformed URL."));
95  return;
96  }
97 
98  // check for dupes
99  if (!tc->getTrackersList()->addTracker(url,true))
100  {
101  KMessageBox::sorry(0,i18n("There already is a tracker named <b>%1</b>.",text));
102  }
103  else
104  {
105  model->insertRow(model->rowCount(QModelIndex()));
106  }
107  }
108 
109  void TrackerView::removeClicked()
110  {
111  QModelIndex current = proxy_model->mapToSource(m_tracker_list->selectionModel()->currentIndex());
112  if (!current.isValid())
113  return;
114 
115  model->removeRow(current.row());
116  }
117 
118  void TrackerView::changeClicked()
119  {
120  QModelIndex current = m_tracker_list->selectionModel()->currentIndex();
121  if (!current.isValid())
122  return;
123 
124  bt::TrackersList* tlist = tc->getTrackersList();
125  bt::TrackerInterface* trk = model->tracker(proxy_model->mapToSource(current));
126  if (trk && trk->isEnabled())
127  tlist->setCurrentTracker(trk);
128  }
129 
130  void TrackerView::restoreClicked()
131  {
132  tc->getTrackersList()->restoreDefault();
133  tc->updateTracker();
134  model->changeTC(tc); // trigger reset
135  }
136 
137  void TrackerView::updateClicked()
138  {
139  if(!tc)
140  return;
141 
142  tc->updateTracker();
143  }
144 
145  void TrackerView::scrapeClicked()
146  {
147  if(!tc)
148  return;
149 
150  tc->scrapeTracker();
151  }
152 
153  void TrackerView::changeTC(TorrentInterface* ti)
154  {
155  if (tc == ti)
156  return;
157 
158  setEnabled(ti != 0);
159  torrentChanged(ti);
160  update();
161  }
162 
163  void TrackerView::update()
164  {
165  if (tc)
166  model->update();
167  }
168 
169  void TrackerView::torrentChanged(TorrentInterface* ti)
170  {
171  tc = ti;
172  if(!tc)
173  {
174  m_add_tracker->setEnabled(false);
175  m_remove_tracker->setEnabled(false);
176  m_restore_defaults->setEnabled(false);
177  m_change_tracker->setEnabled(false);
178  m_scrape->setEnabled(false);
179  model->changeTC(0);
180  }
181  else
182  {
183  m_add_tracker->setEnabled(true);
184  m_remove_tracker->setEnabled(true);
185  m_restore_defaults->setEnabled(true);
186  m_scrape->setEnabled(true);
187  model->changeTC(tc);
188  currentChanged(m_tracker_list->selectionModel()->currentIndex(),QModelIndex());
189  }
190  }
191 
192  void TrackerView::currentChanged(const QModelIndex & current,const QModelIndex & previous)
193  {
194  Q_UNUSED(previous)
195  if (!tc)
196  {
197  m_change_tracker->setEnabled(false);
198  m_remove_tracker->setEnabled(false);
199  return;
200  }
201 
202  const TorrentStats & s = tc->getStats();
203 
204  bt::TrackerInterface* trk = model->tracker(proxy_model->mapToSource(current));
205  bool enabled = trk ? trk->isEnabled() : false;
206  m_change_tracker->setEnabled(s.running && model->rowCount(QModelIndex()) > 1 && enabled);
207  m_remove_tracker->setEnabled(trk && tc->getTrackersList()->canRemoveTracker(trk));
208  }
209 
210  void TrackerView::saveState(KSharedConfigPtr cfg)
211  {
212  KConfigGroup g = cfg->group("TrackerView");
213  QByteArray s = m_tracker_list->header()->saveState();
214  g.writeEntry("state",s.toBase64());
215  }
216 
217  void TrackerView::loadState(KSharedConfigPtr cfg)
218  {
219  KConfigGroup g = cfg->group("TrackerView");
220  QByteArray s = QByteArray::fromBase64(g.readEntry("state",QByteArray()));
221  if (!s.isNull())
222  {
223  QHeaderView* v = m_tracker_list->header();
224  v->restoreState(s);
225  }
226  }
227 }
228 
229 
230 #include "trackerview.moc"
kt::TrackerView::scrapeClicked
virtual void scrapeClicked()
Definition: trackerview.cpp:145
trackermodel.h
kt::TrackerView::updateClicked
virtual void updateClicked()
Definition: trackerview.cpp:137
kt::TrackerView::update
void update()
Definition: trackerview.cpp:163
QWidget
kt::TrackerView::restoreClicked
virtual void restoreClicked()
Definition: trackerview.cpp:130
kt::TrackerModel
Definition: trackermodel.h:40
kt::TrackerView::loadState
void loadState(KSharedConfigPtr cfg)
Definition: trackerview.cpp:217
kt::TrackerView::removeClicked
virtual void removeClicked()
Definition: trackerview.cpp:109
trackerview.h
kt::TrackerView::addClicked
virtual void addClicked()
Definition: trackerview.cpp:78
kt::TrackerModel::update
void update()
Definition: trackermodel.cpp:59
kt::TrackerModel::rowCount
virtual int rowCount(const QModelIndex &parent) const
Definition: trackermodel.cpp:76
kt::TrackerModel::tracker
bt::TrackerInterface * tracker(const QModelIndex &idx)
Get a tracker given a model index.
Definition: trackermodel.cpp:225
kt::TrackerView::currentChanged
void currentChanged(const QModelIndex &current, const QModelIndex &previous)
Definition: trackerview.cpp:192
QSortFilterProxyModel
kt::TrackerView::changeClicked
virtual void changeClicked()
Definition: trackerview.cpp:118
kt::TrackerView::saveState
void saveState(KSharedConfigPtr cfg)
Definition: trackerview.cpp:210
kt::TrackerModel::changeTC
void changeTC(bt::TorrentInterface *tc)
Definition: trackermodel.cpp:42
kt::TrackerView::changeTC
void changeTC(bt::TorrentInterface *ti)
Definition: trackerview.cpp:153
kt::TrackerView::~TrackerView
virtual ~TrackerView()
Definition: trackerview.cpp:74
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:53:17 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kget

Skip menu "kget"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal