• 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
  • checksumsearch
dlgchecksumsearch.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 * Copyright (C) 2009 Matthias Fuchs <mat69@gmx.net> *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
18 ***************************************************************************/
19 
20 #include "dlgchecksumsearch.h"
21 
22 #include "kget_export.h"
23 
24 #include "core/verifier.h"
25 
26 #include "checksumsearch.h"
27 #include "checksumsearchsettings.h"
28 
29 #include <QtGui/QSortFilterProxyModel>
30 #include <QtGui/QStandardItemModel>
31 #include <QtGui/QStringListModel>
32 
33 KGET_EXPORT_PLUGIN_CONFIG(DlgChecksumSettingsWidget)
34 
35 const KUrl ChecksumSearchAddDlg::URL = KUrl("http://www.example.com/file.zip");
36 
37 ChecksumSearchAddDlg::ChecksumSearchAddDlg(QStringListModel *modesModel, QStringListModel *typesModel, QWidget *parent, Qt::WFlags flags)
38  : KDialog(parent, flags),
39  m_modesModel(modesModel),
40  m_typesModel(typesModel)
41 {
42  setCaption(i18n("Add item"));
43  showButtonSeparator(true);
44  QWidget *widget = new QWidget(this);
45  ui.setupUi(widget);
46  setMainWidget(widget);
47 
48  if (m_modesModel)
49  {
50  ui.mode->setModel(m_modesModel);
51  }
52  if (m_typesModel)
53  {
54  ui.type->setModel(m_typesModel);
55  }
56 
57  slotUpdate();
58 
59  connect(ui.change, SIGNAL(textChanged(QString)), this, SLOT(slotUpdate()));
60  connect(ui.mode, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdate()));
61  connect(this, SIGNAL(accepted()), this, SLOT(slotAccpeted()));
62 }
63 
64 void ChecksumSearchAddDlg::slotUpdate()
65 {
66  enableButtonOk(!ui.change->text().isEmpty());
67 
68  const ChecksumSearch::UrlChangeMode mode = static_cast<ChecksumSearch::UrlChangeMode>(ui.mode->currentIndex());
69  const KUrl modifiedUrl = ChecksumSearch::createUrl(URL, ui.change->text(), mode);
70  const QString text = i18n("%1 would become %2", URL.prettyUrl(), modifiedUrl.prettyUrl());
71  ui.label->setText(text);
72 }
73 
74 void ChecksumSearchAddDlg::slotAccpeted()
75 {
76  emit addItem(ui.change->text(), ui.mode->currentIndex(), ui.type->currentText());
77 }
78 
79 ChecksumDelegate::ChecksumDelegate(QObject *parent)
80  : QStyledItemDelegate(parent),
81  m_modesModel(0),
82  m_typesModel(0)
83 {
84 }
85 
86 ChecksumDelegate::ChecksumDelegate(QStringListModel *modesModel, QStringListModel *typesModel, QObject *parent)
87  : QStyledItemDelegate(parent),
88  m_modesModel(modesModel),
89  m_typesModel(typesModel)
90 {
91 }
92 
93 QWidget *ChecksumDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
94 {
95  Q_UNUSED(option)
96 
97  if (index.isValid())
98  {
99  if (index.column() == 0l)
100  {
101  KLineEdit *line = new KLineEdit(parent);
102 
103  return line;
104  }
105  else if (index.column() == 1)
106  {
107  if (m_modesModel)
108  {
109  KComboBox *modesBox = new KComboBox(parent);
110  modesBox->setModel(m_modesModel);
111 
112  return modesBox;
113  }
114  }
115  else if (index.column() == 2)
116  {
117  if (m_typesModel)
118  {
119  KComboBox *typesBox = new KComboBox(parent);
120  typesBox->setModel(m_typesModel);
121 
122  return typesBox;
123  }
124  }
125  }
126 
127  return 0;
128 }
129 
130 void ChecksumDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
131 {
132  if (index.isValid() && editor) {
133  if (index.column() == 0) {
134  KLineEdit *line = static_cast<KLineEdit*>(editor);
135  line->setText(index.data(Qt::EditRole).toString());
136  } else if (index.column() == 1) {
137  KComboBox *modesBox = static_cast<KComboBox*>(editor);
138  const QString mode = index.data(Qt::EditRole).toString();
139  modesBox->setCurrentIndex(modesBox->findText(mode));
140  } else if (index.column() == 2) {
141  KComboBox *typesBox = static_cast<KComboBox*>(editor);
142  const QString type = index.data(Qt::EditRole).toString();
143  typesBox->setCurrentIndex(typesBox->findText(type));
144  }
145  }
146 }
147 
148 void ChecksumDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
149 {
150  if (index.isValid() && editor && model)
151  {
152  if (index.column() == 0)
153  {
154  KLineEdit *line = static_cast<KLineEdit*>(editor);
155  if (!line->text().isEmpty())
156  {
157  model->setData(index, line->text());
158  }
159  }
160  else if (index.column() == 1)
161  {
162  KComboBox *modesBox = static_cast<KComboBox*>(editor);
163  model->setData(index, modesBox->currentText());
164  model->setData(index, modesBox->currentIndex(), Qt::UserRole);
165  }
166  else if (index.column() == 2)
167  {
168  KComboBox *typesBox = static_cast<KComboBox*>(editor);
169  model->setData(index, typesBox->currentText());
170  }
171  }
172 }
173 
174 void ChecksumDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
175 {
176  Q_UNUSED(index)
177  editor->setGeometry(option.rect);
178 }
179 
180 DlgChecksumSettingsWidget::DlgChecksumSettingsWidget(QWidget *parent, const QVariantList &args)
181  : KCModule(KGetFactory::componentData(), parent, args)
182 {
183  ui.setupUi(this);
184 
185  m_modes = ChecksumSearch::urlChangeModes();
186  m_modesModel = new QStringListModel(m_modes, this);
187  QStringList types = Verifier::supportedVerficationTypes();
188  types.insert(0, QString());
189  m_typesModel = new QStringListModel(types, this);
190 
191  m_model = new QStandardItemModel(0, 3, this);
192  m_model->setHeaderData(0, Qt::Horizontal, i18nc("the string that is used to modify an url", "Change string"));
193  m_model->setHeaderData(1, Qt::Horizontal, i18nc("the mode defines how the url should be changed", "Change mode"));
194  m_model->setHeaderData(2, Qt::Horizontal, i18nc("the type of the checksum e.g. md5", "Checksum type"));
195 
196  m_proxy = new QSortFilterProxyModel(this);
197  m_proxy->setSourceModel(m_model);
198  m_proxy->setSortCaseSensitivity(Qt::CaseInsensitive);
199 
200  ui.treeView->setModel(m_proxy);
201  ChecksumDelegate *delegate = new ChecksumDelegate(m_modesModel, m_typesModel, this);
202  ui.treeView->setItemDelegate(delegate);
203  ui.treeView->sortByColumn(2, Qt::AscendingOrder);
204  ui.add->setGuiItem(KStandardGuiItem::add());
205  ui.remove->setGuiItem(KStandardGuiItem::remove());
206  slotUpdate();
207 
208  connect(ui.add, SIGNAL(clicked()), this, SLOT(slotAdd()));
209  connect(ui.remove, SIGNAL(clicked()), this, SLOT(slotRemove()));
210  connect(ui.treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(slotUpdate()));
211  connect(m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(changed()));
212  connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(changed()));
213  connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(changed()));
214 }
215 
216 DlgChecksumSettingsWidget::~DlgChecksumSettingsWidget()
217 {
218 }
219 
220 void DlgChecksumSettingsWidget::slotAdd()
221 {
222  ChecksumSearchAddDlg *dialog = new ChecksumSearchAddDlg(m_modesModel, m_typesModel, this);
223  connect(dialog, SIGNAL(addItem(QString,int,QString)), this, SLOT(slotAddItem(QString,int,QString)));
224 
225  dialog->show();
226 }
227 
228 void DlgChecksumSettingsWidget::slotRemove()
229 {
230  while (ui.treeView->selectionModel()->hasSelection()) {
231  const QModelIndex index = ui.treeView->selectionModel()->selectedRows().first();
232  m_model->removeRow(m_proxy->mapToSource(index).row());
233  }
234 }
235 
236 void DlgChecksumSettingsWidget::slotAddItem(const QString &change, int mode, const QString &type)
237 {
238  QStandardItem *item = new QStandardItem(m_modes.value(mode));
239  item->setData(QVariant(mode), Qt::UserRole);
240 
241  QList<QStandardItem*> items;
242  items << new QStandardItem(change);
243  items << item;
244  items << new QStandardItem(type);
245  m_model->insertRow(m_model->rowCount(), items);
246 }
247 
248 void DlgChecksumSettingsWidget::slotUpdate()
249 {
250  ui.remove->setEnabled(ui.treeView->selectionModel()->hasSelection());
251 }
252 
253 void DlgChecksumSettingsWidget::load()
254 {
255  QStringList changes = ChecksumSearchSettings::self()->searchStrings();
256  QList<int> modes = ChecksumSearchSettings::self()->urlChangeModeList();
257  QStringList types = ChecksumSearchSettings::self()->checksumTypeList();
258 
259  for(int i = 0; i < changes.size(); ++i)
260  {
261  slotAddItem(changes.at(i), modes.at(i), types.at(i));
262  }
263 }
264 
265 void DlgChecksumSettingsWidget::save()
266 {
267  kDebug(5001);
268  QStringList changes;
269  QList<int> modes;
270  QStringList types;
271 
272  for (int row = 0; row < m_model->rowCount(); ++row)
273  {
274  changes.append(m_model->data(m_model->index(row, 0)).toString());
275  modes.append(m_model->data(m_model->index(row, 1), Qt::UserRole).toInt());
276  types.append(m_model->data(m_model->index(row, 2)).toString());
277  }
278 
279  ChecksumSearchSettings::self()->setSearchStrings(changes);
280  ChecksumSearchSettings::self()->setUrlChangeModeList(modes);
281  ChecksumSearchSettings::self()->setChecksumTypeList(types);
282 
283  ChecksumSearchSettings::self()->writeConfig();
284 }
285 
286 #include "dlgchecksumsearch.moc"
ChecksumSearch::createUrl
static KUrl createUrl(const KUrl &src, const QString &change, UrlChangeMode mode)
Returns a modified url according to the parameters.
Definition: checksumsearch.cpp:166
checksumsearchsettings.h
ChecksumDelegate::updateEditorGeometry
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
Definition: dlgchecksumsearch.cpp:174
ChecksumSearchSettings::searchStrings
static QStringList searchStrings()
Get List of the available search engines.
Definition: checksumsearchsettings.h:30
ChecksumSearch::urlChangeModes
static QStringList urlChangeModes()
Returns the available mode-names.
Definition: checksumsearch.h:50
ChecksumSearch::UrlChangeMode
UrlChangeMode
Used to define in whiche way the url should be changed to try and find Checksums. ...
Definition: checksumsearch.h:40
checksumsearch.h
QWidget
ChecksumSearchSettings::setUrlChangeModeList
static void setUrlChangeModeList(const QList< int > &v)
Set List of the available search engine URLs.
Definition: checksumsearchsettings.h:39
QStandardItemModel
Verifier::supportedVerficationTypes
static QStringList supportedVerficationTypes()
Returns the supported verification types.
Definition: verifier.cpp:216
KDialog
ChecksumDelegate::setModelData
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
Definition: dlgchecksumsearch.cpp:148
ChecksumSearchAddDlg
Definition: dlgchecksumsearch.h:36
QObject
QStyledItemDelegate
DlgChecksumSettingsWidget::~DlgChecksumSettingsWidget
~DlgChecksumSettingsWidget()
Definition: dlgchecksumsearch.cpp:216
ChecksumDelegate::createEditor
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
Definition: dlgchecksumsearch.cpp:93
ChecksumSearchSettings::checksumTypeList
static QStringList checksumTypeList()
Get List of the available search engine URLs.
Definition: checksumsearchsettings.h:68
kget_export.h
ChecksumSearchSettings::urlChangeModeList
static QList< int > urlChangeModeList()
Get List of the available search engine URLs.
Definition: checksumsearchsettings.h:49
ChecksumDelegate::setEditorData
void setEditorData(QWidget *editor, const QModelIndex &index) const
Definition: dlgchecksumsearch.cpp:130
verifier.h
QAbstractItemModel
dlgchecksumsearch.h
QSortFilterProxyModel
ChecksumSearchSettings::setSearchStrings
static void setSearchStrings(const QStringList &v)
Set List of the available search engines.
Definition: checksumsearchsettings.h:20
DlgChecksumSettingsWidget
Definition: dlgchecksumsearch.h:88
DlgChecksumSettingsWidget::load
void load()
Definition: dlgchecksumsearch.cpp:253
ChecksumDelegate
Definition: dlgchecksumsearch.h:70
ChecksumDelegate::ChecksumDelegate
ChecksumDelegate(QObject *parent=0)
Definition: dlgchecksumsearch.cpp:79
ChecksumSearchSettings::self
static ChecksumSearchSettings * self()
Definition: checksumsearchsettings.cpp:17
ChecksumSearchSettings::setChecksumTypeList
static void setChecksumTypeList(const QStringList &v)
Set List of the available search engine URLs.
Definition: checksumsearchsettings.h:58
QStandardItem
DlgChecksumSettingsWidget::DlgChecksumSettingsWidget
DlgChecksumSettingsWidget(QWidget *parent=0, const QVariantList &args=QVariantList())
Definition: dlgchecksumsearch.cpp:180
ChecksumSearchAddDlg::addItem
void addItem(const QString &change, int mode, const QString &type)
Emitted when the dialog gets accepted.
KCModule
DlgChecksumSettingsWidget::save
void save()
Definition: dlgchecksumsearch.cpp:265
KGET_EXPORT_PLUGIN_CONFIG
#define KGET_EXPORT_PLUGIN_CONFIG(classname)
Definition: kget_export.h:44
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