SearchQueryView.cpp

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 2006-2007 by Peter Dimov.
00004 
00005 This file is part of Calitko (http://www.calitko.org).
00006 
00007 Calitko is free software; you can redistribute it and/or modify
00008 it under the terms of the GNU General Public License as published by
00009 the Free Software Foundation; either version 2 of the License, or
00010 (at your option) any later version.
00011 
00012 Calitko is distributed in the hope that it will be useful,
00013 but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Calitko; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021 */
00022 
00023 #include "Qt.h"
00024 #include "SearchQueryView.h"
00025 
00026 using UIs::Searching::  SearchQueryView;
00027 
00028 void SearchQueryView::LoadXMLSchemas ()
00029 {
00030     QDir        xmlDirectory ("./xml/");
00031     QStringList xmlFileFilter ("*.xsd");
00032 
00033     QStringList xmls = xmlDirectory.entryList (xmlFileFilter, QDir::Files,
00034                                                QDir::Name);
00035 
00036     for (int xmlIdx = 0; xmlIdx < xmls.size (); xmlIdx++) {
00037         AdvancedSearchWidget    *advSearchWidget = new AdvancedSearchWidget (
00038             xmlDirectory.absoluteFilePath (xmls[xmlIdx]));
00039 
00040         advSearchWidget->setVisible (false);
00041         if (advSearchWidget->title () != "") {
00042             addWidget (advSearchWidget);
00043             typeComboBox->addItem (advSearchWidget->title (),
00044                                    qVariantFromValue < QWidget * > (advSearchWidget));
00045         } else {
00046             delete advSearchWidget;
00047         }
00048     }
00049 }
00050 
00051 SearchQueryView::SearchQueryView (QObject *)
00052  :  searchText (0), searchButton (0), stopSearchButton (0), buttonLayout (0),
00053     typeComboBox (0), advancedButton(0), advancedSearchWidget (0)
00054 {
00055     QGroupBox   *simpleSearchGroupBox = new QGroupBox ("Simple");
00056     QVBoxLayout *groupLayout = new QVBoxLayout (simpleSearchGroupBox);
00057 
00058     searchButton = new QPushButton ("Start Search");
00059     searchButton->setIcon (QIcon ("Icons/resume.png"));
00060     searchButton->setAutoDefault (true);
00061     searchButton->setDefault (true);
00062     searchButton->setEnabled (true);
00063     stopSearchButton = new QPushButton ("Stop Search");
00064     stopSearchButton->setIcon (QIcon ("Icons/pause.png"));
00065     stopSearchButton->setEnabled (false);
00066 
00067     // Connecting slots
00068     QObject::connect (searchButton, SIGNAL (pressed ()), this,
00069                       SLOT (startSearchButtonPressed (void)));
00070     QObject::connect (stopSearchButton, SIGNAL (pressed ()), this,
00071                       SLOT (stopSearchButtonPressed (void)));
00072 
00073     buttonLayout = new QHBoxLayout ();
00074     buttonLayout->addStretch (1);
00075     buttonLayout->addWidget (searchButton);
00076     buttonLayout->addWidget (stopSearchButton);
00077     buttonLayout->addStretch (1);
00078 
00079     searchText = new QLineEdit (0);
00080     QObject::connect (searchText, SIGNAL (returnPressed ()), searchButton,
00081                       SLOT (animateClick ()));
00082 
00083     typeComboBox = new QComboBox ();
00084     advancedButton = new QPushButton (tr("Advanced..."));
00085     advancedButton->setCheckable (true);
00086     advancedButton->setDisabled (true);
00087 
00088     QHBoxLayout *typeLayout = new QHBoxLayout ();
00089     typeLayout->addWidget (typeComboBox);
00090     typeLayout->addWidget (advancedButton);
00091 
00092     groupLayout->addWidget (searchText);
00093     groupLayout->addLayout (typeLayout);
00094     groupLayout->addLayout (buttonLayout);
00095 
00096     // add all layouts and widgets to QueryView
00097     addWidget (simpleSearchGroupBox);
00098 
00099     typeComboBox->addItem (tr("Any type"), QVariant ());
00100 
00101     QObject::connect (typeComboBox, SIGNAL (currentIndexChanged (int)), this,
00102                       SLOT (typeIndexChanged (int)));
00103 
00104     advancedSearchWidget = 0;
00105     LoadXMLSchemas ();
00106     addItem (new QSpacerItem (10, 100, QSizePolicy::Minimum,
00107              QSizePolicy::Expanding));
00108 }
00109 
00110 SearchQueryView::~SearchQueryView ()
00111 {
00112     advancedSearchWidget = 0;
00113     delete searchButton;
00114     delete stopSearchButton;
00115     delete buttonLayout;
00116 }
00117 
00118 const QString SearchQueryView::query () const
00119 {
00120     return searchText->text ();
00121 }
00122 
00123 void SearchQueryView::startSearchButtonPressed ()
00124 {
00125     if (query () == "") {
00126         QMessageBox::warning (parentWidget (), tr ("Warning!"),
00127                               tr ("Query string can't be empty!"));
00128     } else {
00129         searchButton->setEnabled (false);
00130         stopSearchButton->setEnabled (true);
00131         searchText->setEnabled (false);
00132 
00133         if (advancedSearchWidget != 0)
00134             advancedSearchWidget->setEnabled (false);
00135 
00136         emit    startSearch ();
00137     }
00138 }
00139 
00140 void SearchQueryView::stopSearchButtonPressed ()
00141 {
00142     searchButton->setEnabled (true);
00143     stopSearchButton->setEnabled (false);
00144     searchText->setEnabled (true);
00145 
00146     if (advancedSearchWidget != 0)
00147         advancedSearchWidget->setEnabled (true);
00148 
00149     emit    stopSearch ();
00150 }
00151 
00152 void SearchQueryView::typeIndexChanged (int index)
00153 {
00154     if (advancedSearchWidget != 0) {
00155         QObject::disconnect (advancedButton, SIGNAL (toggled (bool)),
00156                              advancedSearchWidget, SLOT (setVisible (bool)));
00157         advancedSearchWidget->setVisible (false);
00158     }
00159 
00160     QVariant    itemdata = typeComboBox->itemData (index);
00161     if (!itemdata.isNull ()) {
00162         advancedSearchWidget = itemdata.value < QWidget * > ();
00163         QObject::connect (advancedButton, SIGNAL (toggled (bool)),
00164                           advancedSearchWidget, SLOT (setVisible (bool)));
00165         advancedButton->setDisabled (false);
00166         if (advancedButton->isChecked ())
00167             advancedSearchWidget->setVisible (true);
00168     } else {
00169         advancedSearchWidget = 0;
00170         advancedButton->setDisabled (true);
00171     }
00172 }
00173 
00174 void SearchQueryView::setAuthorMetaInfo (QString)
00175 {
00176     // \todo add transfer to searcher, or change signal receiver
00177 }
00178 
00179 void SearchQueryView::setAlbumMetaInfo (QString)
00180 {
00181     // \todo add transfer to searcher, or change signal receiver
00182 }
00183 
00184 void SearchQueryView::setGenreMetaInfo (QString)
00185 {
00186     // \todo add transfer to searcher, or change signal receiver
00187 }
00188 
00189 void SearchQueryView::setBitrateMetaInfo (QString)
00190 {
00191     // \todo add transfer to searcher, or change signal receiver
00192 }
00193 
00194 void SearchQueryView::setDurationMetaInfo (QString)
00195 {
00196     // \todo add transfer to searcher, or change signal receiver
00197 }
00198 
00199 void SearchQueryView::setWidthMetaInfo (QString)
00200 {
00201     // \todo add transfer to searcher, or change signal receiver
00202 }
00203 
00204 void SearchQueryView::setHeightMetaInfo (QString)
00205 {
00206     // \todo add transfer to searcher, or change signal receiver
00207 }