diff options
author | Ken Moore <ken@pcbsd.org> | 2015-04-27 10:33:15 -0400 |
---|---|---|
committer | Ken Moore <ken@pcbsd.org> | 2015-04-27 10:33:15 -0400 |
commit | f4943623c0af7e28f22c1da09bbb31ee593ea00a (patch) | |
tree | 14dd17ef4e9c77c0892b7c68009cb557c6881012 /lumina-search | |
parent | Add support for system-defined default non-mime applications in the luminaDes... (diff) | |
download | lumina-f4943623c0af7e28f22c1da09bbb31ee593ea00a.tar.gz lumina-f4943623c0af7e28f22c1da09bbb31ee593ea00a.tar.bz2 lumina-f4943623c0af7e28f22c1da09bbb31ee593ea00a.zip |
Add new variability for lumina-search:
1) New CLI Usage Flags: lumina-search [-no-excludes] [-dir [<path>]] [-search <term>]
These flags allow for a ton of variability with the utility: such as intantly setting the search dir/parameters, or starting a search for an app/dir/file right away.
2) Also put a new checkbox on the config UI to determine whether to save setttings as the new defaults or to use them temporarily. This allows for temporary setting of the search dir/excludes.
3) Make sure to list the current search dir and whether there are any excluded dirs ("Smart" mode) within the status bar when a file search is selected.
Diffstat (limited to 'lumina-search')
-rw-r--r-- | lumina-search/ConfigUI.cpp | 2 | ||||
-rw-r--r-- | lumina-search/ConfigUI.h | 1 | ||||
-rw-r--r-- | lumina-search/ConfigUI.ui | 37 | ||||
-rw-r--r-- | lumina-search/MainUI.cpp | 52 | ||||
-rw-r--r-- | lumina-search/MainUI.h | 9 | ||||
-rw-r--r-- | lumina-search/main.cpp | 44 |
6 files changed, 132 insertions, 13 deletions
diff --git a/lumina-search/ConfigUI.cpp b/lumina-search/ConfigUI.cpp index ada82946..18480984 100644 --- a/lumina-search/ConfigUI.cpp +++ b/lumina-search/ConfigUI.cpp @@ -24,6 +24,7 @@ ConfigUI::ConfigUI(QWidget *parent) : QDialog(parent), ui(new Ui::ConfigUI){ ui->tool_getStartDir->setIcon( LXDG::findIcon("folder","") ); ui->tool_adddirs->setIcon( LXDG::findIcon("list-add","") ); ui->tool_rmdir->setIcon( LXDG::findIcon("list-remove","") ); + newDefaults = false; } ConfigUI::~ConfigUI(){ @@ -74,6 +75,7 @@ void ConfigUI::on_buttonBox_accepted(){ } dirs.removeDuplicates(); newSkipDirs = dirs; + newDefaults = ui->check_setDefaults->isChecked(); this->close(); } diff --git a/lumina-search/ConfigUI.h b/lumina-search/ConfigUI.h index 0ee385c5..173fd6c7 100644 --- a/lumina-search/ConfigUI.h +++ b/lumina-search/ConfigUI.h @@ -21,6 +21,7 @@ public: QString newStartDir; QStringList newSkipDirs; + bool newDefaults; private: Ui::ConfigUI *ui; diff --git a/lumina-search/ConfigUI.ui b/lumina-search/ConfigUI.ui index 95d3a4ad..6a3060e0 100644 --- a/lumina-search/ConfigUI.ui +++ b/lumina-search/ConfigUI.ui @@ -112,11 +112,38 @@ </widget> </item> <item row="3" column="0" colspan="2"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set> - </property> - </widget> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QCheckBox" name="check_setDefaults"> + <property name="text"> + <string>Save as Defaults</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set> + </property> + </widget> + </item> + </layout> </item> </layout> </widget> diff --git a/lumina-search/MainUI.cpp b/lumina-search/MainUI.cpp index 6597f589..8f90d536 100644 --- a/lumina-search/MainUI.cpp +++ b/lumina-search/MainUI.cpp @@ -47,7 +47,7 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){ settings = new QSettings("LuminaDE", "lumina-search",this); searcher->startDir = settings->value("StartSearchDir", QDir::homePath()).toString(); searcher->skipDirs = settings->value("SkipSearchDirs", QStringList()).toStringList(); - + updateDefaultStatusTip(); this->show(); workthread->start(); QTimer::singleShot(0,this, SLOT(setupIcons()) ); @@ -67,6 +67,38 @@ void MainUI::setupIcons(){ ui->tool_configure->setIcon( LXDG::findIcon("configure","") ); } +// =============== +// PUBLIC FUNCTIONS (for input handling primarily) +// =============== +void MainUI::disableExcludes(){ + searcher->skipDirs.clear(); + updateDefaultStatusTip(); +} + +void MainUI::setSearchDirectory(QString path){ + ui->radio_files->setChecked(true); + searcher->startDir = path; + updateDefaultStatusTip(); +} + +void MainUI::setSearchTerm(QString text){ + ui->line_search->setText(text); +} + +//============== +// PRIVATE +//============== +void MainUI::updateDefaultStatusTip(){ + if(ui->radio_files->isChecked()){ + QString txt = tr("Search: %1 -- Smart: %2"); + QString dir = searcher->startDir; + dir.replace(QDir::homePath(), "~"); + QString smart = searcher->skipDirs.isEmpty() ? tr("Off"): tr("On"); + txt = txt.arg(dir,smart); + ui->statusbar->showMessage(txt); + } +} + //============== // PRIVATE SLOTS //============== @@ -90,19 +122,23 @@ void MainUI::searchTypeChanged(){ void MainUI::configureSearch(){ ConfigUI dlg(this); - dlg.loadInitialValues( searcher->startDir, searcher->skipDirs); + dlg.loadInitialValues( settings->value("StartSearchDir",QDir::homePath()).toString(), settings->value("SkipSearchDirs",QStringList()).toStringList()); dlg.exec(); if(dlg.newStartDir.isEmpty()){ return; }//cancelled QString startdir = dlg.newStartDir; QStringList skipdirs = dlg.newSkipDirs; - //Save these values for later - settings->setValue("StartSearchDir", startdir); - settings->setValue("SkipSearchDirs", skipdirs); - + //Save these values for later (if selected) + if(dlg.newDefaults){ + //save these values as the new defaults + settings->setValue("StartSearchDir", startdir); + settings->setValue("SkipSearchDirs", skipdirs); + } + //Set these values in the searcher searcher->startDir = startdir; searcher->skipDirs = skipdirs; + updateDefaultStatusTip(); } void MainUI::searchChanged(){ @@ -114,7 +150,7 @@ void MainUI::searchChanged(){ void MainUI::startSearch(){ ui->listWidget->clear(); stopSearch(); //just in case a search is still running - if(ui->line_search->text().isEmpty()){ return; } //nothing to search for + if(ui->line_search->text().isEmpty()){ updateDefaultStatusTip(); return; } //nothing to search for //emit the proper signal for the worker if(!workthread->isRunning()){ workthread->start(); } //make sure the thread is running @@ -153,6 +189,7 @@ void MainUI::stopSearch(){ searcher->StopSearch(); ui->tool_stop->setVisible(false); ui->tool_configure->setVisible(ui->radio_files->isChecked()); + updateDefaultStatusTip(); } void MainUI::searchMessage(QString msg){ @@ -162,4 +199,5 @@ void MainUI::searchMessage(QString msg){ void MainUI::searchFinished(){ ui->tool_stop->setVisible(false); ui->tool_configure->setVisible(ui->radio_files->isChecked()); + updateDefaultStatusTip(); } diff --git a/lumina-search/MainUI.h b/lumina-search/MainUI.h index cd4a1db7..0a9f4acb 100644 --- a/lumina-search/MainUI.h +++ b/lumina-search/MainUI.h @@ -29,8 +29,13 @@ public: MainUI(); ~MainUI(); + void disableExcludes(); + void setSearchDirectory(QString path); + void setSearchTerm(QString text); + public slots: void setupIcons(); + void startSearch(); //emit the proper signal for the worker private: Ui::MainUI *ui; @@ -39,6 +44,8 @@ private: Worker *searcher; QSettings *settings; + void updateDefaultStatusTip(); + private slots: //Button Slots void closeApplication(){ @@ -52,7 +59,7 @@ private slots: void searchChanged(); //for active searching while typing //Worker Interaction - void startSearch(); //emit the proper signal for the worker + //void startSearch(); //Moved to a public slot void foundSearchItem(QString path); //To get the worker's results void stopSearch(); void searchMessage(QString); diff --git a/lumina-search/main.cpp b/lumina-search/main.cpp index 305c388b..f03bf04a 100644 --- a/lumina-search/main.cpp +++ b/lumina-search/main.cpp @@ -8,6 +8,12 @@ #include <LuminaThemes.h> #include <LuminaUtils.h> +//==== INPUT FORMAT ==== +// lumina-search [-no-excludes] [-dir [directory]] [-search <term>] +// -no-excludes: Don't exclude anything from this search +// -dir [directory]: Setup a file/dir search within the current working dir (or specified dir) +// -search <term>: Start a search with the given term +//=================== int main(int argc, char ** argv) { //qDebug() << "Init App..."; @@ -21,6 +27,44 @@ int main(int argc, char ** argv) MainUI w; QObject::connect(&theme,SIGNAL(updateIcons()), &w, SLOT(setupIcons()) ); w.show(); + if(argc>1){ + bool startsearch = false; + for(int i=1; i<argc; i++){ + QString val = QString(argv[i]).toLower(); + if( val == "-no-excludes"){ w.disableExcludes(); } + else if(val=="-dir"){ + //Check the next input value for a directory path + QString dir; + if( argc>(i+1) ){ dir = QString(argv[i+1]); } + //Check the input for validity + if(dir.startsWith("-")){dir.clear(); } //not a directory, just another input + else if(!dir.startsWith("/")){ //not an absolute path + dir = QDir::currentPath()+"/"+dir; + QFileInfo info(dir); + if( !info.exists() || !info.isDir() ){ dir.clear(); } //invalid relative dir + } + + if(dir.isEmpty()){ dir= QDir::currentPath(); } //use the current directory + else{ i++; } //using the next input value - skip it for the next iteration + w.setSearchDirectory( dir ); + + }else if(val=="-search"){ + //Check the next input value for a text string + QString text; + if( argc>(i+1) ){ text = QString(argv[i+1]); } + //Check the input for validity + if( !text.isEmpty() ){ + i++; //using the next input value - skip it for the next iteration + w.setSearchTerm( text ); + startsearch = true; + } + } + }//end loop over inputs + if(startsearch){ + //A CLI search was requested, go ahead and start it now + QTimer::singleShot(10, &w, SLOT(startSearch())); + } + } //end check for input arguments return a.exec(); } |