aboutsummaryrefslogtreecommitdiff
path: root/lumina-search
diff options
context:
space:
mode:
authorKen Moore <ken@pcbsd.org>2015-04-27 10:33:15 -0400
committerKen Moore <ken@pcbsd.org>2015-04-27 10:33:15 -0400
commitf4943623c0af7e28f22c1da09bbb31ee593ea00a (patch)
tree14dd17ef4e9c77c0892b7c68009cb557c6881012 /lumina-search
parentAdd support for system-defined default non-mime applications in the luminaDes... (diff)
downloadlumina-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.cpp2
-rw-r--r--lumina-search/ConfigUI.h1
-rw-r--r--lumina-search/ConfigUI.ui37
-rw-r--r--lumina-search/MainUI.cpp52
-rw-r--r--lumina-search/MainUI.h9
-rw-r--r--lumina-search/main.cpp44
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();
}
bgstack15