1
/* This file is part of the KDE project
2
Copyright (C) 2005-2015 Jarosław Staniek <staniek@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 library 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 GNU
12
Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public License
15
along with this library; see the file COPYING.LIB. If not, write to
16
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17
* Boston, MA 02110-1301, USA.
20
#include "kexidbdrivercombobox.h"
24
#include <KDbDriverManager>
25
#include <KDbDriverMetaData>
26
#include <KDbMessageHandler>
28
class KexiDBDriverComboBox::Private
33
QList<const KDbDriverMetaData*> drivers;
34
QStringList driverIds;
37
//! Used to sort driver items by visible name
38
bool compareByName(const KDbDriverMetaData* d1, const KDbDriverMetaData* d2)
40
return d1->name() < d2->name();
45
KexiDBDriverComboBox::KexiDBDriverComboBox(QWidget* parent, Options options)
49
// retrieve list of drivers and sort it: file-based first, then server-based
50
KDbDriverManager manager;
51
QList<const KDbDriverMetaData*> fileBasedDrivers, serverBasedDrivers;
52
foreach(const QString &id, manager.driverIds()) {
53
const KDbDriverMetaData* driverMetaData = manager.driverMetaData(id);
54
KDbMessageGuard mg(manager.resultable());
55
if (!driverMetaData) {
58
if (driverMetaData->isFileBased()) {
59
fileBasedDrivers.append(driverMetaData);
61
serverBasedDrivers.append(driverMetaData);
65
if (options & ShowFileDrivers) {
66
std::sort(fileBasedDrivers.begin(), fileBasedDrivers.end(), compareByName);
67
d->drivers += fileBasedDrivers;
69
if (options & ShowServerDrivers) {
70
std::sort(serverBasedDrivers.begin(), serverBasedDrivers.end(), compareByName);
71
d->drivers += serverBasedDrivers;
73
foreach(const KDbDriverMetaData* driverMetaData, d->drivers) {
74
//! @todo change this if better icon is available
75
addItem(koIcon("application-x-executable"), driverMetaData->name());
76
d->driverIds.append(driverMetaData->id());
80
KexiDBDriverComboBox::~KexiDBDriverComboBox()
85
QString KexiDBDriverComboBox::currentDriverId() const
87
const KDbDriverMetaData* driverMetaData = d->drivers.value(currentIndex());
88
return driverMetaData ? driverMetaData->id() : QString();
91
void KexiDBDriverComboBox::setCurrentDriverId(const QString& driverId)
93
const int index = d->driverIds.indexOf(driverId);
96
setCurrentIndex(index);