1
/* This file is part of the KDE project
2
Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Library General Public
6
License as published by the Free Software Foundation; either
7
version 2 of the License, or (at your option) any later version.
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.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
#include "backendchooser.h"
23
#include <kservicetypeprofile.h>
24
#include <kservicetype.h>
25
#include <kservicetypetrader.h>
27
#include <QStringList>
28
#include <QListWidgetItem>
29
#include <kapplication.h>
34
static bool equals(const KService::List &list1, const KService::List &list2)
36
if (list1.size()!=list2.size())
41
for (int i=0; i<list1.size(); ++i)
43
if (list1[i]->name()!=list2[i]->name())
53
BackendChooser::BackendChooser(QWidget *parent, const QString &backendType)
54
: QWidget(parent), m_backendType(backendType)
58
connect(m_ui.listView, SIGNAL(itemSelectionChanged()),
59
this, SLOT(slotSelectionChanged()));
60
connect(m_ui.upButton, SIGNAL(clicked()),
61
this, SLOT(slotUpClicked()));
62
connect(m_ui.downButton, SIGNAL(clicked()),
63
this, SLOT(slotDownClicked()));
65
KServiceType::Ptr service_type = KServiceType::serviceType(backendType);
69
title = service_type->comment();
77
m_ui.groupBox->setTitle(title);
80
void BackendChooser::load()
82
m_initServices = KServiceTypeTrader::self()->query(m_backendType, "Type == 'Service'");
84
loadServicesInView(m_initServices);
87
void BackendChooser::loadServicesInView(const KService::List &services)
90
m_ui.listView->clear();
92
foreach (KService::Ptr service, services)
94
m_ui.listView->addItem(service->name());
95
m_services[service->name()] = service;
98
m_ui.listView->setItemSelected(m_ui.listView->item(0), true);
101
KService::List BackendChooser::servicesFromView()
103
KService::List services;
105
int count = m_ui.listView->count();
107
for (int i=0; i<count; ++i)
109
QListWidgetItem *item = m_ui.listView->item(i);
110
KService::Ptr service = m_services[item->text()];
111
services.append(service);
117
void BackendChooser::save()
119
if (!equals(m_initServices, servicesFromView()))
121
m_initServices = servicesFromView();
122
KServiceTypeProfile::writeServiceTypeProfile(m_backendType, m_initServices);
127
void BackendChooser::defaults()
129
KService::List currentServices = servicesFromView();
130
KService::List defaultServices = KServiceTypeTrader::self()->defaultOffers(m_backendType, "Type == 'Service'");
132
if (!equals(currentServices, defaultServices))
134
loadServicesInView(KServiceTypeTrader::self()->defaultOffers(m_backendType, "Type == 'Service'"));
135
emit changed(!equals(m_initServices, servicesFromView()));
139
void BackendChooser::slotSelectionChanged()
141
KService::Ptr service;
143
for (int i=0; i<m_ui.listView->count(); ++i)
145
QListWidgetItem *item = m_ui.listView->item(i);
147
if (m_ui.listView->isItemSelected(item))
149
service = m_services[item->text()];
156
m_ui.iconLabel->setPixmap(KIcon(service->icon()).pixmap(32));
157
m_ui.nameLabel->setText(service->name());
158
m_ui.commentLabel->setText(service->comment());
159
m_ui.versionLabel->setText(service->property("X-KDE-SolidBackendInfo-Version").toString());
163
void BackendChooser::slotUpClicked()
165
QList<QListWidgetItem *> selectedList = m_ui.listView->selectedItems();
167
foreach (QListWidgetItem *selected, selectedList)
169
int row = m_ui.listView->row(selected);
173
QListWidgetItem *taken = m_ui.listView->takeItem(row - 1);
174
m_ui.listView->insertItem(row, taken);
176
emit changed(!equals(m_initServices, servicesFromView()));
182
void BackendChooser::slotDownClicked()
184
QList<QListWidgetItem *> selectedList = m_ui.listView->selectedItems();
186
foreach (QListWidgetItem *selected, selectedList)
188
int row = m_ui.listView->row(selected);
190
if (row + 1 < m_ui.listView->count())
192
QListWidgetItem *taken = m_ui.listView->takeItem(row + 1);
193
m_ui.listView->insertItem(row, taken);
195
emit changed(!equals(m_initServices, servicesFromView()));
201
#include "backendchooser.moc"