Mercurial > hg > svgui
changeset 417:fbf9f53cf979
* Annoyingly not-really-working twist on things
author | Chris Cannam |
---|---|
date | Tue, 23 Sep 2008 16:42:43 +0000 |
parents | f4487328320d |
children | bd1e4ff5091d |
files | widgets/TransformFinder.cpp widgets/TransformFinder.h |
diffstat | 2 files changed, 40 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/widgets/TransformFinder.cpp Tue Sep 23 13:39:25 2008 +0000 +++ b/widgets/TransformFinder.cpp Tue Sep 23 16:42:43 2008 +0000 @@ -25,7 +25,9 @@ #include <QScrollArea> TransformFinder::TransformFinder(QWidget *parent) : - QDialog(parent) + QDialog(parent), + m_resultsFrame(0), + m_resultsLayout(0) { setWindowTitle(tr("Find a Transform")); @@ -87,16 +89,26 @@ std::cerr << "(" << j->score << ")" << std::endl; } */ - QFrame *resultsFrame = new QFrame; - QVBoxLayout *resultsLayout = new QVBoxLayout; - resultsFrame->setLayout(resultsLayout); + + if (!m_resultsLayout) { + std::cerr << "creating frame & layout" << std::endl; + m_resultsFrame = new QWidget; +// resultsFrame->setFrameStyle(QFrame::Sunken | QFrame::Box); + m_resultsLayout = new QVBoxLayout; + m_resultsFrame->setLayout(m_resultsLayout); + m_resultsScroll->setWidget(m_resultsFrame); + m_resultsFrame->show(); + } i = 0; int maxResults = 40; + int height = 0; + int width = 0; for (std::set<TransformFactory::Match>::const_iterator j = sorted.end(); j != sorted.begin(); ) { --j; + QString labelText; TransformDescription desc = TransformFactory::getInstance()->getTransformDescription(j->transform); @@ -109,13 +121,27 @@ labelText += "... "; } labelText += tr("</small>"); - resultsLayout->addWidget(new QLabel(labelText)); + + if (i >= m_labels.size()) { + QLabel *label = new QLabel(m_resultsFrame); + m_resultsLayout->addWidget(label); + m_labels.push_back(label); + } + m_labels[i]->setText(labelText); + QSize sh = m_labels[i]->sizeHint(); + std::cerr << "size hint for text \"" << labelText.toStdString() << "\" has height " << sh.height() << std::endl; + height += sh.height(); + if (sh.width() > width) width = sh.width(); + m_labels[i]->show(); + if (++i == maxResults) break; } - QWidget *oldWidget = m_resultsScroll->takeWidget(); - m_resultsScroll->setWidget(resultsFrame); - delete oldWidget; + std::cerr << "m_labels.size() = " << m_labels.size() << ", i = " << i << ", height = " << height << std::endl; + + while (i < m_labels.size()) m_labels[i++]->hide(); + + m_resultsFrame->resize(height, width); } TransformId
--- a/widgets/TransformFinder.h Tue Sep 23 13:39:25 2008 +0000 +++ b/widgets/TransformFinder.h Tue Sep 23 16:42:43 2008 +0000 @@ -18,10 +18,14 @@ #include <QDialog> +#include <vector> + #include "transform/Transform.h" class QVBoxLayout; class QScrollArea; +class QLabel; +class QWidget; class TransformFinder : public QDialog { @@ -38,7 +42,9 @@ protected: QScrollArea *m_resultsScroll; + QWidget *m_resultsFrame; QVBoxLayout *m_resultsLayout; + std::vector<QLabel *> m_labels; }; #endif