1 /* This file is part of the KDE project
3 Copyright (C) 2007 Urs Wolfer <uwolfer @ kde.org>
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
11 #include "dlgdirectories.h"
12 #include "selectdirectoryitemdelegate.h"
16 #include <QHeaderView>
18 #include <KMessageBox>
20 DlgDirectories::DlgDirectories(QWidget
*parent
)
24 addButton
->setIcon(KIcon("list-add"));
25 removeButton
->setIcon(KIcon("list-remove"));
26 changeButton
->setIcon(KIcon("edit-rename"));
28 defaultFolderRequester
->setMode(KFile::Directory
| KFile::ExistingOnly
| KFile::LocalOnly
);
30 folderForExtensionList
->verticalHeader()->setVisible(false);
31 folderForExtensionList
->horizontalHeader()->setClickable(false);
32 folderForExtensionList
->horizontalHeader()->setMovable(false);
33 folderForExtensionList
->horizontalHeader()->setResizeMode(QHeaderView::Fixed
);
34 folderForExtensionList
->resizeColumnToContents (0 );
35 folderForExtensionList
->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch
);
36 folderForExtensionList
->setItemDelegateForColumn(1, new SelectDirectoryItemDelegate(parent
));
39 connect(addButton
, SIGNAL(clicked()), SLOT(addButtonClicked()));
40 connect(removeButton
, SIGNAL(clicked()), SLOT(removeButtonClicked()));
41 connect(changeButton
, SIGNAL(clicked()), SLOT(changeButtonClicked()));
42 connect(kcfg_EnableExceptions
, SIGNAL(toggled(bool)), defaultFolderGroupBox
, SLOT(setEnabled(bool)));
43 connect(kcfg_UseDefaultDirectory
, SIGNAL(toggled(bool)), defaultFolderRequester
, SLOT(setEnabled(bool)));
44 connect(folderForExtensionList
->selectionModel(),
45 SIGNAL(selectionChanged(const QItemSelection
&, const QItemSelection
&)),
46 SLOT(listItemClicked(const QItemSelection
&, const QItemSelection
&)));
47 connect(folderForExtensionList
, SIGNAL(cellChanged(int, int)), SLOT(slotExtensionDataChanged(int, int)));
52 DlgDirectories::~DlgDirectories()
56 void DlgDirectories::readConfig()
58 const QStringList list
= Settings::extensionsFolderList();
59 QStringList::ConstIterator it
= list
.begin();
60 const QStringList::ConstIterator end
= list
.end();
62 // odd list items are regular expressions for extensions
67 addFolderForExtensionItem(rexp
, path
);
70 if (Settings::useDefaultDirectory())
71 kcfg_UseDefaultDirectory
->click();
73 askRadioButton
->click();
75 defaultFolderRequester
->setUrl(Settings::defaultDirectory());
76 connect(defaultFolderRequester
, SIGNAL(textChanged(QString
)), SLOT(saveSettings()));
79 void DlgDirectories::saveSettings()
81 Settings::setDefaultDirectory(defaultFolderRequester
->url().prettyUrl());
85 for(int row
=0;row
<folderForExtensionList
->rowCount();row
++) {
86 QString extension
= folderForExtensionList
->item(row
, 0)->text();
87 QString path
= folderForExtensionList
->item(row
, 1)->text();
89 if (!extension
.isEmpty() && !path
.isEmpty()) {
90 list
.append(extension
);
95 Settings::setExtensionsFolderList(list
);
96 Settings::self()->writeConfig();
99 void DlgDirectories::addButtonClicked()
101 int newRow
= folderForExtensionList
->rowCount();
102 folderForExtensionList
->setRowCount(newRow
+ 1);
104 folderForExtensionList
->setItem(newRow
, 0, new QTableWidgetItem("*.*"));
105 folderForExtensionList
->setItem(newRow
, 1, new QTableWidgetItem(""));
107 folderForExtensionList
->edit(folderForExtensionList
->model()->index(newRow
, 0));
108 folderForExtensionList
->selectRow(newRow
);
111 void DlgDirectories::removeButtonClicked()
113 int row
= folderForExtensionList
->currentRow();
114 folderForExtensionList
->removeRow(row
);
117 folderForExtensionList
->clearSelection();
118 changeButton
->setEnabled(false);
119 removeButton
->setEnabled(false);
122 void DlgDirectories::changeButtonClicked()
124 int row
= folderForExtensionList
->currentRow();
125 int column
= folderForExtensionList
->currentColumn();
126 folderForExtensionList
->edit(folderForExtensionList
->model()->index(row
, column
));
129 void DlgDirectories::listItemClicked(const QItemSelection
&selected
, const QItemSelection
&deselected
)
134 changeButton
->setEnabled(true);
135 removeButton
->setEnabled(true);
138 void DlgDirectories::addFolderForExtensionItem(const QString
&extension
, const QString
&folder
)
140 if (extension
.isEmpty() || folder
.isEmpty()) {
141 KMessageBox::error(this, i18n("Folder and extension can not be empty."), i18n("Error"));
145 int newRow
= folderForExtensionList
->rowCount();
146 folderForExtensionList
->setRowCount(newRow
+ 1);
148 folderForExtensionList
->setItem(newRow
, 0, new QTableWidgetItem(extension
));
149 folderForExtensionList
->setItem(newRow
, 1, new QTableWidgetItem(folder
));
151 folderForExtensionList
->clearSelection();
152 folderForExtensionList
->sortItems(0, Qt::AscendingOrder
);
154 changeButton
->setEnabled(false);
155 removeButton
->setEnabled(false);
158 void DlgDirectories::slotExtensionDataChanged(int row
, int column
)
162 if(folderForExtensionList
->item(row
, 0) && folderForExtensionList
->item(row
, 1)) {
163 // we check if the extension isn't empty and the path is correct before call saveSettings
164 QString extension
= folderForExtensionList
->item(row
, 0)->text();
165 QString path
= folderForExtensionList
->item(row
, 1)->text();
167 if (!extension
.isEmpty() && !path
.isEmpty()) {
173 #include "dlgdirectories.moc"