• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

SolidModules

backendchooser.cpp

Go to the documentation of this file.
00001 /*  This file is part of the KDE project
00002     Copyright (C) 2006 Kevin Ottens <ervin@kde.org>
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008 
00009     This program is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012     GNU General Public License for more details.
00013 
00014     You should have received a copy of the GNU General Public License
00015     along with this program; if not, write to the Free Software
00016     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00017     02110-1301, USA.
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"

SolidModules

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

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libplasma
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal