SolidModules
backendchooser.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "backendchooser.h"
00022
00023 #include <kservicetypeprofile.h>
00024 #include <kservicetype.h>
00025 #include <kservicetypetrader.h>
00026 #include <kconfig.h>
00027 #include <QStringList>
00028 #include <QListWidgetItem>
00029 #include <kapplication.h>
00030 #include <kicon.h>
00031 #include <QList>
00032
00033
00034 static bool equals(const KService::List &list1, const KService::List &list2)
00035 {
00036 if (list1.size()!=list2.size())
00037 {
00038 return false;
00039 }
00040
00041 for (int i=0; i<list1.size(); ++i)
00042 {
00043 if (list1[i]->name()!=list2[i]->name())
00044 {
00045 return false;
00046 }
00047 }
00048
00049 return true;
00050 }
00051
00052
00053 BackendChooser::BackendChooser(QWidget *parent, const QString &backendType)
00054 : QWidget(parent), m_backendType(backendType)
00055 {
00056 m_ui.setupUi(this);
00057
00058 connect(m_ui.listView, SIGNAL(itemSelectionChanged()),
00059 this, SLOT(slotSelectionChanged()));
00060 connect(m_ui.upButton, SIGNAL(clicked()),
00061 this, SLOT(slotUpClicked()));
00062 connect(m_ui.downButton, SIGNAL(clicked()),
00063 this, SLOT(slotDownClicked()));
00064
00065 KServiceType::Ptr service_type = KServiceType::serviceType(backendType);
00066
00067 QString title = service_type->comment();
00068
00069 if (title.isEmpty())
00070 {
00071 title = backendType;
00072 }
00073
00074 m_ui.groupBox->setTitle(title);
00075 }
00076
00077 void BackendChooser::load()
00078 {
00079 m_initServices = KServiceTypeTrader::self()->query(m_backendType, "Type == 'Service'");
00080
00081 loadServicesInView(m_initServices);
00082 }
00083
00084 void BackendChooser::loadServicesInView(const KService::List &services)
00085 {
00086 m_services.clear();
00087 m_ui.listView->clear();
00088
00089 foreach (KService::Ptr service, services)
00090 {
00091 m_ui.listView->addItem(service->name());
00092 m_services[service->name()] = service;
00093 }
00094
00095 m_ui.listView->setItemSelected(m_ui.listView->item(0), true);
00096 }
00097
00098 KService::List BackendChooser::servicesFromView()
00099 {
00100 KService::List services;
00101
00102 int count = m_ui.listView->count();
00103
00104 for (int i=0; i<count; ++i)
00105 {
00106 QListWidgetItem *item = m_ui.listView->item(i);
00107 KService::Ptr service = m_services[item->text()];
00108 services.append(service);
00109 }
00110
00111 return services;
00112 }
00113
00114 void BackendChooser::save()
00115 {
00116 if (!equals(m_initServices, servicesFromView()))
00117 {
00118 m_initServices = servicesFromView();
00119 KServiceTypeProfile::writeServiceTypeProfile(m_backendType, m_initServices);
00120 emit changed(false);
00121 }
00122 }
00123
00124 void BackendChooser::defaults()
00125 {
00126 KService::List currentServices = servicesFromView();
00127 KService::List defaultServices = KServiceTypeTrader::self()->defaultOffers(m_backendType, "Type == 'Service'");
00128
00129 if (!equals(currentServices, defaultServices))
00130 {
00131 loadServicesInView(KServiceTypeTrader::self()->defaultOffers(m_backendType, "Type == 'Service'"));
00132 emit changed(!equals(m_initServices, servicesFromView()));
00133 }
00134 }
00135
00136 void BackendChooser::slotSelectionChanged()
00137 {
00138 KService::Ptr service;
00139
00140 for (int i=0; i<m_ui.listView->count(); ++i)
00141 {
00142 QListWidgetItem *item = m_ui.listView->item(i);
00143
00144 if (m_ui.listView->isItemSelected(item))
00145 {
00146 service = m_services[item->text()];
00147 break;
00148 }
00149 }
00150
00151 if (service)
00152 {
00153 m_ui.iconLabel->setPixmap(KIcon(service->icon()).pixmap(32));
00154 m_ui.nameLabel->setText(service->name());
00155 m_ui.commentLabel->setText(service->comment());
00156 m_ui.versionLabel->setText(service->property("X-KDE-SolidBackendInfo-Version").toString());
00157 }
00158 }
00159
00160 void BackendChooser::slotUpClicked()
00161 {
00162 QList<QListWidgetItem *> selectedList = m_ui.listView->selectedItems();
00163
00164 foreach (QListWidgetItem *selected, selectedList)
00165 {
00166 int row = m_ui.listView->row(selected);
00167
00168 if (row > 0)
00169 {
00170 QListWidgetItem *taken = m_ui.listView->takeItem(row - 1);
00171 m_ui.listView->insertItem(row, taken);
00172
00173 emit changed(!equals(m_initServices, servicesFromView()));
00174 return;
00175 }
00176 }
00177 }
00178
00179 void BackendChooser::slotDownClicked()
00180 {
00181 QList<QListWidgetItem *> selectedList = m_ui.listView->selectedItems();
00182
00183 foreach (QListWidgetItem *selected, selectedList)
00184 {
00185 int row = m_ui.listView->row(selected);
00186
00187 if (row + 1 < m_ui.listView->count())
00188 {
00189 QListWidgetItem *taken = m_ui.listView->takeItem(row + 1);
00190 m_ui.listView->insertItem(row, taken);
00191
00192 emit changed(!equals(m_initServices, servicesFromView()));
00193 return;
00194 }
00195 }
00196 }
00197
00198 #include "backendchooser.moc"