summaryrefslogtreecommitdiffstats
path: root/kexi/widget/kexidbdrivercombobox.cpp
blob: e1719576962a9c085cc284245fcf5fd67b6db067 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* This file is part of the KDE project
   Copyright (C) 2005 Jaroslaw Staniek <js@iidea.pl>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
*/

#include "kexidbdrivercombobox.h"

#include <tqlistbox.h>

#include <kiconloader.h>

KexiDBDriverComboBox::KexiDBDriverComboBox(TQWidget* parent, const KexiDB::Driver::InfoMap& driversInfo, 
	Options options)
 : KComboBox(parent, "KexiDBDriverComboBox")
{
	//retrieve list of drivers and sort it: file-based first, then server-based
	TQStringList captionsForFileBasedDrivers, captionsForServerBasedDrivers;
	TQMap<TQString,TQString> fileBasedDriversDict, serverBasedDriversDict; //a map from caption to name
	foreach(KexiDB::Driver::InfoMap::ConstIterator, it, driversInfo) {
		if (it.data().fileBased) {
			captionsForFileBasedDrivers += it.data().caption;
			fileBasedDriversDict[it.data().caption] = it.data().name.lower();
		}
		else {
			captionsForServerBasedDrivers += it.data().caption;
			serverBasedDriversDict[it.data().caption] = it.data().name.lower();
		}
	}
	captionsForFileBasedDrivers.sort();
	captionsForServerBasedDrivers.sort();
	//insert file-based
	if (options & ShowFileDrivers) {
		foreach(TQStringList::ConstIterator, it, captionsForFileBasedDrivers) {
			const KexiDB::Driver::Info& info = driversInfo[ fileBasedDriversDict[ *it ] ];
			//! @todo change this if better icon is available
			insertItem( SmallIcon("gear"), info.caption );
			m_driversMap.insert(info.caption, info.name.lower());
		}
	}
	//insert server-based
	if (options & ShowServerDrivers) {
		foreach(TQStringList::ConstIterator, it, captionsForServerBasedDrivers) {
			const KexiDB::Driver::Info& info = driversInfo[ serverBasedDriversDict[ *it ] ];
			//! @todo change this if better icon is available
			insertItem( SmallIcon("gear"), info.caption );
			m_driversMap.insert(info.caption, info.name.lower());
		}
	}
//	if (listBox())
//		listBox()->sort();

	// Build the names list after sorting
	for (int i=0; i<count(); i++)
		m_driverNames += m_driversMap[ text(i) ];
}

KexiDBDriverComboBox::~KexiDBDriverComboBox()
{
}

TQString KexiDBDriverComboBox::selectedDriverName() const
{
	TQMapConstIterator<TQString,TQString> it( m_driversMap.find( text( currentItem() ) ) );
	if (it==m_driversMap.constEnd())
		return TQString();
	return it.data();
}

void KexiDBDriverComboBox::setDriverName(const TQString& driverName)
{
	int index = m_driverNames.findIndex( driverName.lower() );
	if (index==-1) {
		return;
	}
	setCurrentItem(index);
}

#include "kexidbdrivercombobox.moc"