00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "dlgdirectories.h"
00012 #include "selectdirectoryitemdelegate.h"
00013
00014 #include "settings.h"
00015
00016 #include <QHeaderView>
00017
00018 #include <KMessageBox>
00019
00020 DlgDirectories::DlgDirectories(QWidget *parent)
00021 : QWidget(parent)
00022 {
00023 setupUi(this);
00024 addButton->setIcon(KIcon("list-add"));
00025 removeButton->setIcon(KIcon("list-remove"));
00026 changeButton->setIcon(KIcon("edit-rename"));
00027
00028 defaultFolderRequester->setMode(KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly);
00029
00030 folderForExtensionList->verticalHeader()->setVisible(false);
00031 folderForExtensionList->horizontalHeader()->setClickable(false);
00032 folderForExtensionList->horizontalHeader()->setMovable(false);
00033 folderForExtensionList->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
00034 folderForExtensionList->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch);
00035 folderForExtensionList->setItemDelegateForColumn(1, new SelectDirectoryItemDelegate(parent));
00036
00037
00038 connect(addButton, SIGNAL(clicked()), SLOT(addButtonClicked()));
00039 connect(removeButton, SIGNAL(clicked()), SLOT(removeButtonClicked()));
00040 connect(changeButton, SIGNAL(clicked()), SLOT(changeButtonClicked()));
00041 connect(kcfg_EnableExceptions, SIGNAL(toggled(bool)), defaultFolderGroupBox, SLOT(setEnabled(bool)));
00042 connect(kcfg_UseDefaultDirectory, SIGNAL(toggled(bool)), defaultFolderRequester, SLOT(setEnabled(bool)));
00043 connect(folderForExtensionList->selectionModel(),
00044 SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection&)),
00045 SLOT(listItemClicked(const QItemSelection &, const QItemSelection&)));
00046 connect(folderForExtensionList, SIGNAL(cellChanged(int, int)), SLOT(slotExtensionDataChanged(int, int)));
00047
00048 readConfig();
00049 }
00050
00051 DlgDirectories::~DlgDirectories()
00052 {
00053 }
00054
00055 void DlgDirectories::readConfig()
00056 {
00057 QStringList list = Settings::extensionsFolderList();
00058 QStringList::Iterator it = list.begin();
00059 QStringList::Iterator end = list.end();
00060 while (it != end) {
00061
00062 QString rexp = *it;
00063 ++it;
00064 QString path = *it;
00065 ++it;
00066 addFolderForExtensionItem(rexp, path);
00067 }
00068
00069 if (Settings::useDefaultDirectory())
00070 kcfg_UseDefaultDirectory->click();
00071 else
00072 askRadioButton->click();
00073
00074 defaultFolderRequester->setUrl(Settings::defaultDirectory());
00075 connect(defaultFolderRequester, SIGNAL(textChanged(QString)), SLOT(saveSettings()));
00076 }
00077
00078 void DlgDirectories::saveSettings()
00079 {
00080 Settings::setDefaultDirectory(defaultFolderRequester->url().url());
00081
00082 QStringList list;
00083
00084 for(int row=0;row<folderForExtensionList->rowCount();row++) {
00085 QString extension = folderForExtensionList->item(row, 0)->text();
00086 QString path = folderForExtensionList->item(row, 1)->text();
00087
00088 if (!extension.isEmpty() && !path.isEmpty()) {
00089 list.append(extension);
00090 list.append(path);
00091 }
00092 }
00093
00094 Settings::setExtensionsFolderList(list);
00095 Settings::self()->writeConfig();
00096 }
00097
00098 void DlgDirectories::addButtonClicked()
00099 {
00100 int newRow = folderForExtensionList->rowCount();
00101 folderForExtensionList->setRowCount(newRow + 1);
00102
00103 folderForExtensionList->setItem(newRow, 0, new QTableWidgetItem("*.*"));
00104 folderForExtensionList->setItem(newRow, 1, new QTableWidgetItem(""));
00105
00106 folderForExtensionList->edit(folderForExtensionList->model()->index(newRow, 0));
00107 folderForExtensionList->selectRow(newRow);
00108 }
00109
00110 void DlgDirectories::removeButtonClicked()
00111 {
00112 int row = folderForExtensionList->currentRow();
00113 folderForExtensionList->removeRow(row);
00114 saveSettings();
00115
00116 folderForExtensionList->clearSelection();
00117 changeButton->setEnabled(false);
00118 removeButton->setEnabled(false);
00119 }
00120
00121 void DlgDirectories::changeButtonClicked()
00122 {
00123 int row = folderForExtensionList->currentRow();
00124 int column = folderForExtensionList->currentColumn();
00125 folderForExtensionList->edit(folderForExtensionList->model()->index(row, column));
00126 }
00127
00128 void DlgDirectories::listItemClicked(const QItemSelection &selected, const QItemSelection &deselected)
00129 {
00130 Q_UNUSED(selected)
00131 Q_UNUSED(deselected)
00132
00133 changeButton->setEnabled(true);
00134 removeButton->setEnabled(true);
00135 }
00136
00137 void DlgDirectories::addFolderForExtensionItem(const QString &extension, const QString &folder)
00138 {
00139 if (extension.isEmpty() || folder.isEmpty()) {
00140 KMessageBox::error(this, i18n("Folder and extension can not be empty."), i18n("Error"));
00141 return;
00142 }
00143
00144 int newRow = folderForExtensionList->rowCount();
00145 folderForExtensionList->setRowCount(newRow + 1);
00146
00147 folderForExtensionList->setItem(newRow, 0, new QTableWidgetItem(extension));
00148 folderForExtensionList->setItem(newRow, 1, new QTableWidgetItem(folder));
00149
00150 folderForExtensionList->clearSelection();
00151 folderForExtensionList->sortItems(0, Qt::AscendingOrder);
00152
00153 changeButton->setEnabled(false);
00154 removeButton->setEnabled(false);
00155 }
00156
00157 void DlgDirectories::slotExtensionDataChanged(int row, int column)
00158 {
00159 Q_UNUSED(column)
00160
00161 if(folderForExtensionList->item(row, 0) && folderForExtensionList->item(row, 1)) {
00162
00163 QString extension = folderForExtensionList->item(row, 0)->text();
00164 QString path = folderForExtensionList->item(row, 1)->text();
00165
00166 if (!extension.isEmpty() && !path.isEmpty()) {
00167 saveSettings();
00168 }
00169 }
00170 }
00171
00172 #include "dlgdirectories.moc"