X-Git-Url: https://vaikene.ee/gitweb/highlight.css?a=blobdiff_plain;f=src%2Fapps%2FFileFinder%2FGUI%2Fgui.cpp;h=e664dd7703d484f06e62890ee6ccc8f73a2f04c9;hb=c3f12950e16f519639cf987baf4f590abe6a0c2e;hp=a849da970d2e2cf4da6da630ee2d39dfbc0848b6;hpb=e73fe47c7bba8066feeb68b0f1568f3ac493f50c;p=evaf diff --git a/src/apps/FileFinder/GUI/gui.cpp b/src/apps/FileFinder/GUI/gui.cpp index a849da9..e664dd7 100644 --- a/src/apps/FileFinder/GUI/gui.cpp +++ b/src/apps/FileFinder/GUI/gui.cpp @@ -75,12 +75,16 @@ void FileFinder::GUI::Internal::MainWidget::keyPressEvent(QKeyEvent * e) //------------------------------------------------------------------- +int const FileFinder::GUI::Module::MaxHistoryItems = 20; + FileFinder::GUI::Module::Module() : Plugins::iPlugin() , mReady(false) , mFinder(0) , mOpenFileAction(0) , mOpenDirectoryAction(0) + , mCopyNameAction(0) + , mCopyAllNamesAction(0) , wMain(0) , wDirectory(0) , wRecursive(0) @@ -116,7 +120,7 @@ bool FileFinder::GUI::Module::init(QString const & args) // Create the main widget for this window wMain = new Internal::MainWidget; connect(wMain, SIGNAL(quit()), qApp, SLOT(quit())); - win->addWidget(wMain); + win->addPanel("FileFinder", wMain); // Create actions for the window and widgets on it createActions(); @@ -138,6 +142,8 @@ void FileFinder::GUI::Module::done() { mReady = false; + mFinder = 0; + /* * Widgets are deleted by the SdiWindow module. We use wMain to track calls to done() without * proper init(). @@ -155,27 +161,27 @@ void FileFinder::GUI::Module::saveHistory() QSettings settings(VER_COMPANY_NAME_STR, Common::iApp::instance()->name()); QStringList t; - for (int i = 0; i < wDirectory->count(); ++i) + for (int i = 0; i < wDirectory->count() && i < MaxHistoryItems; ++i) t.append(wDirectory->itemText(i)); settings.setValue("FileFinder/Directories", t); t.clear(); - for (int i = 0; i < wIncludeNames->count(); ++i) + for (int i = 0; i < wIncludeNames->count() && i < MaxHistoryItems; ++i) t.append(wIncludeNames->itemText(i)); settings.setValue("FileFinder/IncludeNames", t); t.clear(); - for (int i = 0; i < wExcludeNames->count(); ++i) + for (int i = 0; i < wExcludeNames->count() && i < MaxHistoryItems; ++i) t.append(wExcludeNames->itemText(i)); settings.setValue("FileFinder/ExcludeNames", t); t.clear(); - for (int i = 0; i < wIncludeContent->count(); ++i) + for (int i = 0; i < wIncludeContent->count() && i < MaxHistoryItems; ++i) t.append(wIncludeContent->itemText(i)); settings.setValue("FileFinder/IncludeContent", t); t.clear(); - for (int i = 0; i < wExcludeContent->count(); ++i) + for (int i = 0; i < wExcludeContent->count() && i < MaxHistoryItems; ++i) t.append(wExcludeContent->itemText(i)); settings.setValue("FileFinder/ExcludeContent", t); @@ -187,6 +193,7 @@ void FileFinder::GUI::Module::loadHistory() wDirectory->addItems(settings.value("FileFinder/Directories").toStringList()); wDirectory->setEditText(QDir::currentPath()); + mDirModel->setRootPath(QDir::currentPath()); wIncludeNames->addItems(settings.value("FileFinder/IncludeNames").toStringList()); wIncludeNames->setEditText(""); @@ -216,12 +223,17 @@ void FileFinder::GUI::Module::createWidgets() wDirectory->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); wDirectory->setEditable(true); wDirectory->setInsertPolicy(QComboBox::InsertAtTop); + QCompleter * completer = new QCompleter(wMain); + mDirModel = new QFileSystemModel(wMain); + mDirModel->setFilter(QDir::AllDirs | QDir::Dirs | QDir::NoDotAndDotDot); + completer->setModel(mDirModel); + wDirectory->setCompleter(completer); l->setBuddy(wDirectory); hbox->addWidget(wDirectory); - QPushButton * btn = new QPushButton(tr("&Browse")); - connect(btn, SIGNAL(clicked()), this, SLOT(browseDirectory())); - hbox->addWidget(btn); + wBrowse = new QPushButton(tr("&Browse")); + connect(wBrowse, SIGNAL(clicked()), this, SLOT(browseDirectory())); + hbox->addWidget(wBrowse); wRecursive = new QCheckBox(tr("&Recursive")); wRecursive->setChecked(true); @@ -271,8 +283,7 @@ void FileFinder::GUI::Module::createWidgets() wResults = new QListWidget; wResults->setContextMenuPolicy(Qt::ActionsContextMenu); - wResults->addAction(mOpenFileAction); - wResults->addAction(mOpenDirectoryAction); + wResults->addActions(QList() << mOpenFileAction << mOpenDirectoryAction << mCopyNameAction << mCopyAllNamesAction); connect(wResults, SIGNAL(currentRowChanged(int)), this, SLOT(currentRowChanged(int))); connect(wResults, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(openFile(QModelIndex))); vbox->addWidget(wResults); @@ -286,7 +297,7 @@ void FileFinder::GUI::Module::createWidgets() connect(wFind, SIGNAL(clicked()), this, SLOT(find())); hbox->addWidget(wFind); - btn = new QPushButton(tr("&Close")); + QPushButton * btn = new QPushButton(tr("&Close")); connect(btn, SIGNAL(clicked()), qApp, SLOT(quit())); hbox->addWidget(btn); } @@ -305,6 +316,14 @@ void FileFinder::GUI::Module::createActions() mOpenDirectoryAction = new QAction(tr("Open &location"), wMain); mOpenDirectoryAction->setEnabled(false); connect(mOpenDirectoryAction, SIGNAL(triggered()), this, SLOT(openDirectory())); + + mCopyNameAction = new QAction(tr("&Copy name"), wMain); + mCopyNameAction->setEnabled(false); + connect(mCopyNameAction, SIGNAL(triggered()), this, SLOT(copyName())); + + mCopyAllNamesAction = new QAction(tr("Copy &all names"), wMain); + connect(mCopyAllNamesAction, SIGNAL(triggered()), this, SLOT(copyAllNames())); + } void FileFinder::GUI::Module::browseDirectory() @@ -323,7 +342,27 @@ void FileFinder::GUI::Module::find() } else { wResults->clear(); - + + if (wDirectory->findText(wDirectory->currentText()) == -1) + wDirectory->insertItem(0, wDirectory->currentText()); + if (wIncludeNames->findText(wIncludeNames->currentText()) == -1) + wIncludeNames->insertItem(0, wIncludeNames->currentText()); + if (wExcludeNames->findText(wExcludeNames->currentText()) == -1) + wExcludeNames->insertItem(0, wExcludeNames->currentText()); + if (wIncludeContent->findText(wIncludeContent->currentText()) == -1) + wIncludeContent->insertItem(0, wIncludeContent->currentText()); + if (wExcludeContent->findText(wExcludeContent->currentText()) == -1) + wExcludeContent->insertItem(0, wExcludeContent->currentText()); + + // Disable input fields + wDirectory->setEnabled(false); + wBrowse->setEnabled(false); + wRecursive->setEnabled(false); + wIncludeNames->setEnabled(false); + wExcludeNames->setEnabled(false); + wIncludeContent->setEnabled(false); + wExcludeContent->setEnabled(false); + mFinder->search(wDirectory->currentText(), wRecursive->isChecked(), FileFinder::Filter( @@ -351,6 +390,15 @@ void FileFinder::GUI::Module::finished(bool canceled) { Q_UNUSED(canceled) + // Enable input fields + wDirectory->setEnabled(true); + wBrowse->setEnabled(true); + wRecursive->setEnabled(true); + wIncludeNames->setEnabled(true); + wExcludeNames->setEnabled(true); + wIncludeContent->setEnabled(true); + wExcludeContent->setEnabled(true); + wFind->setText(tr("&Search")); } @@ -358,19 +406,52 @@ void FileFinder::GUI::Module::currentRowChanged(int currentRow) { mOpenFileAction->setEnabled(currentRow >= 0); mOpenDirectoryAction->setEnabled(currentRow >= 0); + mCopyNameAction->setEnabled(currentRow >= 0); } void FileFinder::GUI::Module::openFile(QModelIndex const & index) { Q_UNUSED(index) - if (wResults->currentItem()) - QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(wResults->currentItem()->text()))); + if (wResults->currentItem()) { + QString t = wResults->currentItem()->text(); + t.replace("?", "\0453f"); + QDesktopServices::openUrl(QUrl::fromEncoded(QString("file:///%1").arg(t).toUtf8())); + } } void FileFinder::GUI::Module::openDirectory() { if (wResults->currentItem()) { - QFileInfo fi(wResults->currentItem()->text()); - QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(fi.path()))); + QString t = wResults->currentItem()->text(); + t.replace("?", "\0453f"); + QFileInfo fi(t); + QDesktopServices::openUrl(QUrl::fromEncoded(QString("file:///%1").arg(fi.path()).toUtf8())); + } +} + +void FileFinder::GUI::Module::copyName() +{ + if (wResults->currentItem()) { + QClipboard * cb = QApplication::clipboard(); + if (cb) + cb->setText(wResults->currentItem()->text()); + } +} + +void FileFinder::GUI::Module::copyAllNames() +{ +#ifdef Q_OS_WIN32 + static char const * const EOLN = "\r\n"; +#else + static char const * const EOLN = "\n"; +#endif + + QString t; + for (int i = 0; i < wResults->count(); ++i) + t.append(wResults->item(i)->text() + EOLN); + if (!t.isEmpty()) { + QClipboard * cb = QApplication::clipboard(); + if (cb) + cb->setText(t); } }