Mercurial > hg > svgui
diff widgets/TransformFinder.cpp @ 416:f4487328320d
* Start work on TransformFinder dialog
author | Chris Cannam |
---|---|
date | Tue, 23 Sep 2008 13:39:25 +0000 |
parents | |
children | fbf9f53cf979 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/TransformFinder.cpp Tue Sep 23 13:39:25 2008 +0000 @@ -0,0 +1,126 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2008 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "TransformFinder.h" + +#include "transform/TransformFactory.h" + +#include <QVBoxLayout> +#include <QGridLayout> +#include <QLineEdit> +#include <QLabel> +#include <QDialogButtonBox> +#include <QScrollArea> + +TransformFinder::TransformFinder(QWidget *parent) : + QDialog(parent) +{ + setWindowTitle(tr("Find a Transform")); + + QGridLayout *mainGrid = new QGridLayout; + setLayout(mainGrid); + + mainGrid->addWidget(new QLabel(tr("Find:")), 0, 0); + + QLineEdit *searchField = new QLineEdit; + mainGrid->addWidget(searchField, 0, 1); + connect(searchField, SIGNAL(textChanged(const QString &)), + this, SLOT(searchTextChanged(const QString &))); + + m_resultsScroll = new QScrollArea; + mainGrid->addWidget(m_resultsScroll, 1, 0, 1, 2); + mainGrid->setRowStretch(1, 10); + + QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok | + QDialogButtonBox::Cancel); + mainGrid->addWidget(bb, 2, 0, 1, 2); + connect(bb, SIGNAL(accepted()), this, SLOT(accept())); + connect(bb, SIGNAL(rejected()), this, SLOT(reject())); + + resize(500, 400); //!!! +} + +TransformFinder::~TransformFinder() +{ +} + +void +TransformFinder::searchTextChanged(const QString &text) +{ + std::cerr << "text is " << text.toStdString() << std::endl; + + QStringList keywords = text.split(' ', QString::SkipEmptyParts); + TransformFactory::SearchResults results = + TransformFactory::getInstance()->search(keywords); + + std::cerr << results.size() << " result(s)..." << std::endl; + + std::set<TransformFactory::Match> sorted; + for (TransformFactory::SearchResults::const_iterator j = results.begin(); + j != results.end(); ++j) { + sorted.insert(j->second); + } + + int i = 0; +/* + for (std::set<TransformFactory::Match>::const_iterator j = sorted.begin(); + j != sorted.end(); ++j) { + std::cerr << i++ << ": " << j->transform.toStdString() << ": "; + for (TransformFactory::Match::FragmentMap::const_iterator k = + j->fragments.begin(); + k != j->fragments.end(); ++k) { + std::cerr << k->first.toStdString() << ": " + << k->second.toStdString() << " "; + } + std::cerr << "(" << j->score << ")" << std::endl; + } +*/ + QFrame *resultsFrame = new QFrame; + QVBoxLayout *resultsLayout = new QVBoxLayout; + resultsFrame->setLayout(resultsLayout); + + i = 0; + int maxResults = 40; + + for (std::set<TransformFactory::Match>::const_iterator j = sorted.end(); + j != sorted.begin(); ) { + --j; + QString labelText; + TransformDescription desc = + TransformFactory::getInstance()->getTransformDescription(j->transform); + labelText += tr("%2<br><small>").arg(desc.name); + labelText += "..."; + for (TransformFactory::Match::FragmentMap::const_iterator k = + j->fragments.begin(); + k != j->fragments.end(); ++k) { + labelText += k->second; + labelText += "... "; + } + labelText += tr("</small>"); + resultsLayout->addWidget(new QLabel(labelText)); + if (++i == maxResults) break; + } + + QWidget *oldWidget = m_resultsScroll->takeWidget(); + m_resultsScroll->setWidget(resultsFrame); + delete oldWidget; +} + +TransformId +TransformFinder::getTransform() const +{ + return ""; +} +