| Chris@416 | 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */ | 
| Chris@416 | 2 | 
| Chris@416 | 3 /* | 
| Chris@416 | 4     Sonic Visualiser | 
| Chris@416 | 5     An audio file viewer and annotation editor. | 
| Chris@416 | 6     Centre for Digital Music, Queen Mary, University of London. | 
| Chris@416 | 7     This file copyright 2008 QMUL. | 
| Chris@416 | 8 | 
| Chris@416 | 9     This program is free software; you can redistribute it and/or | 
| Chris@416 | 10     modify it under the terms of the GNU General Public License as | 
| Chris@416 | 11     published by the Free Software Foundation; either version 2 of the | 
| Chris@416 | 12     License, or (at your option) any later version.  See the file | 
| Chris@416 | 13     COPYING included with this distribution for more information. | 
| Chris@416 | 14 */ | 
| Chris@416 | 15 | 
| Chris@416 | 16 #include "TransformFinder.h" | 
| Chris@416 | 17 | 
| Chris@416 | 18 #include "transform/TransformFactory.h" | 
| Chris@416 | 19 | 
| Chris@416 | 20 #include <QVBoxLayout> | 
| Chris@416 | 21 #include <QGridLayout> | 
| Chris@416 | 22 #include <QLineEdit> | 
| Chris@416 | 23 #include <QLabel> | 
| Chris@416 | 24 #include <QDialogButtonBox> | 
| Chris@416 | 25 #include <QScrollArea> | 
| Chris@416 | 26 | 
| Chris@416 | 27 TransformFinder::TransformFinder(QWidget *parent) : | 
| Chris@416 | 28     QDialog(parent) | 
| Chris@416 | 29 { | 
| Chris@416 | 30     setWindowTitle(tr("Find a Transform")); | 
| Chris@416 | 31 | 
| Chris@416 | 32     QGridLayout *mainGrid = new QGridLayout; | 
| Chris@416 | 33     setLayout(mainGrid); | 
| Chris@416 | 34 | 
| Chris@416 | 35     mainGrid->addWidget(new QLabel(tr("Find:")), 0, 0); | 
| Chris@416 | 36 | 
| Chris@416 | 37     QLineEdit *searchField = new QLineEdit; | 
| Chris@416 | 38     mainGrid->addWidget(searchField, 0, 1); | 
| Chris@416 | 39     connect(searchField, SIGNAL(textChanged(const QString &)), | 
| Chris@416 | 40             this, SLOT(searchTextChanged(const QString &))); | 
| Chris@416 | 41 | 
| Chris@416 | 42     m_resultsScroll = new QScrollArea; | 
| Chris@416 | 43     mainGrid->addWidget(m_resultsScroll, 1, 0, 1, 2); | 
| Chris@416 | 44     mainGrid->setRowStretch(1, 10); | 
| Chris@416 | 45 | 
| Chris@416 | 46     QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok | | 
| Chris@416 | 47                                                 QDialogButtonBox::Cancel); | 
| Chris@416 | 48     mainGrid->addWidget(bb, 2, 0, 1, 2); | 
| Chris@416 | 49     connect(bb, SIGNAL(accepted()), this, SLOT(accept())); | 
| Chris@416 | 50     connect(bb, SIGNAL(rejected()), this, SLOT(reject())); | 
| Chris@416 | 51 | 
| Chris@416 | 52     resize(500, 400); //!!! | 
| Chris@416 | 53 } | 
| Chris@416 | 54 | 
| Chris@416 | 55 TransformFinder::~TransformFinder() | 
| Chris@416 | 56 { | 
| Chris@416 | 57 } | 
| Chris@416 | 58 | 
| Chris@416 | 59 void | 
| Chris@416 | 60 TransformFinder::searchTextChanged(const QString &text) | 
| Chris@416 | 61 { | 
| Chris@416 | 62     std::cerr << "text is " << text.toStdString() << std::endl; | 
| Chris@416 | 63 | 
| Chris@416 | 64     QStringList keywords = text.split(' ', QString::SkipEmptyParts); | 
| Chris@416 | 65     TransformFactory::SearchResults results = | 
| Chris@416 | 66         TransformFactory::getInstance()->search(keywords); | 
| Chris@416 | 67 | 
| Chris@416 | 68     std::cerr << results.size() << " result(s)..." << std::endl; | 
| Chris@416 | 69 | 
| Chris@416 | 70     std::set<TransformFactory::Match> sorted; | 
| Chris@416 | 71     for (TransformFactory::SearchResults::const_iterator j = results.begin(); | 
| Chris@416 | 72          j != results.end(); ++j) { | 
| Chris@416 | 73         sorted.insert(j->second); | 
| Chris@416 | 74     } | 
| Chris@416 | 75 | 
| Chris@416 | 76     int i = 0; | 
| Chris@416 | 77 /* | 
| Chris@416 | 78     for (std::set<TransformFactory::Match>::const_iterator j = sorted.begin(); | 
| Chris@416 | 79          j != sorted.end(); ++j) { | 
| Chris@416 | 80         std::cerr << i++ << ": " << j->transform.toStdString() << ": "; | 
| Chris@416 | 81         for (TransformFactory::Match::FragmentMap::const_iterator k = | 
| Chris@416 | 82                  j->fragments.begin(); | 
| Chris@416 | 83              k != j->fragments.end(); ++k) { | 
| Chris@416 | 84             std::cerr << k->first.toStdString() << ": " | 
| Chris@416 | 85                       << k->second.toStdString() << " "; | 
| Chris@416 | 86         } | 
| Chris@416 | 87         std::cerr << "(" << j->score << ")" << std::endl; | 
| Chris@416 | 88     } | 
| Chris@416 | 89 */ | 
| Chris@416 | 90     QFrame *resultsFrame = new QFrame; | 
| Chris@416 | 91     QVBoxLayout *resultsLayout = new QVBoxLayout; | 
| Chris@416 | 92     resultsFrame->setLayout(resultsLayout); | 
| Chris@416 | 93 | 
| Chris@416 | 94     i = 0; | 
| Chris@416 | 95     int maxResults = 40; | 
| Chris@416 | 96 | 
| Chris@416 | 97     for (std::set<TransformFactory::Match>::const_iterator j = sorted.end(); | 
| Chris@416 | 98          j != sorted.begin(); ) { | 
| Chris@416 | 99         --j; | 
| Chris@416 | 100         QString labelText; | 
| Chris@416 | 101         TransformDescription desc = | 
| Chris@416 | 102             TransformFactory::getInstance()->getTransformDescription(j->transform); | 
| Chris@416 | 103         labelText += tr("%2<br><small>").arg(desc.name); | 
| Chris@416 | 104         labelText += "..."; | 
| Chris@416 | 105         for (TransformFactory::Match::FragmentMap::const_iterator k = | 
| Chris@416 | 106                  j->fragments.begin(); | 
| Chris@416 | 107              k != j->fragments.end(); ++k) { | 
| Chris@416 | 108             labelText += k->second; | 
| Chris@416 | 109             labelText += "... "; | 
| Chris@416 | 110         } | 
| Chris@416 | 111         labelText += tr("</small>"); | 
| Chris@416 | 112         resultsLayout->addWidget(new QLabel(labelText)); | 
| Chris@416 | 113         if (++i == maxResults) break; | 
| Chris@416 | 114     } | 
| Chris@416 | 115 | 
| Chris@416 | 116     QWidget *oldWidget = m_resultsScroll->takeWidget(); | 
| Chris@416 | 117     m_resultsScroll->setWidget(resultsFrame); | 
| Chris@416 | 118     delete oldWidget; | 
| Chris@416 | 119 } | 
| Chris@416 | 120 | 
| Chris@416 | 121 TransformId | 
| Chris@416 | 122 TransformFinder::getTransform() const | 
| Chris@416 | 123 { | 
| Chris@416 | 124     return ""; | 
| Chris@416 | 125 } | 
| Chris@416 | 126 |