# HG changeset patch # User Chris Cannam # Date 1186763810 0 # Node ID 919740b20cc95a7665a3315df2345eb36316a4d3 # Parent 15b8a4bfe855cff1d28f7d32f0bdb6d713f1188c * Better abbreviation modes for layer names in pane (and input model combo of plugin parameter dialog) * Avoid crash when loading SV file containing model derived from nonexistent model (shouldn't happen of course, but see bug #1771769) * Remember last-used input model in plugin parameter dialog * Don't override a layer colour loaded from a session file with the generated default colour when attaching it to a view diff -r 15b8a4bfe855 -r 919740b20cc9 layer/SingleColourLayer.cpp --- a/layer/SingleColourLayer.cpp Thu Aug 09 14:40:03 2007 +0000 +++ b/layer/SingleColourLayer.cpp Fri Aug 10 16:36:50 2007 +0000 @@ -25,7 +25,8 @@ SingleColourLayer::m_colourRefCount; SingleColourLayer::SingleColourLayer() : - m_colour(0) + m_colour(0), + m_colourExplicitlySet(false) { setDefaultColourFor(0); } @@ -117,6 +118,8 @@ void SingleColourLayer::setDefaultColourFor(View *v) { + if (m_colourExplicitlySet) return; + bool dark = false; if (v) { dark = !v->hasLightBackground(); @@ -185,6 +188,8 @@ void SingleColourLayer::setBaseColour(int colour) { + m_colourExplicitlySet = true; + if (m_colour == colour) return; if (m_colourRefCount.find(m_colour) != m_colourRefCount.end() && @@ -270,5 +275,12 @@ QString darkbg = attributes.value("darkBackground"); m_colour = ColourDatabase::getInstance()->putStringValues (colourName, colourSpec, darkbg); + if (m_colourRefCount.find(m_colour) == m_colourRefCount.end()) { + m_colourRefCount[m_colour] = 1; + } else { + m_colourRefCount[m_colour]++; + } + m_colourExplicitlySet = true; + flagBaseColourChanged(); } diff -r 15b8a4bfe855 -r 919740b20cc9 layer/SingleColourLayer.h --- a/layer/SingleColourLayer.h Thu Aug 09 14:40:03 2007 +0000 +++ b/layer/SingleColourLayer.h Fri Aug 10 16:36:50 2007 +0000 @@ -67,6 +67,7 @@ static ColourRefCount m_colourRefCount; int m_colour; + bool m_colourExplicitlySet; }; #endif diff -r 15b8a4bfe855 -r 919740b20cc9 view/Pane.cpp --- a/view/Pane.cpp Thu Aug 09 14:40:03 2007 +0000 +++ b/view/Pane.cpp Fri Aug 10 16:36:50 2007 +0000 @@ -21,6 +21,7 @@ #include "base/Profiler.h" #include "ViewManager.h" #include "base/CommandHistory.h" +#include "base/TextAbbrev.h" #include "layer/WaveformLayer.h" #include @@ -714,31 +715,14 @@ return; } - std::vector texts; - int maxTextWidth = 0; + QStringList texts; + for (LayerList::iterator i = m_layers.begin(); i != m_layers.end(); ++i) { + texts.push_back((*i)->getLayerPresentationName()); + } - for (LayerList::iterator i = m_layers.begin(); i != m_layers.end(); ++i) { - - QString text = (*i)->getLayerPresentationName(); - int tw = paint.fontMetrics().width(text); - bool reduced = false; - while (tw > width() / 3 && text.length() > 4) { - if (!reduced && text.length() > 8) { - text = text.left(text.length() - 4); - } else { - text = text.left(text.length() - 2); - } - reduced = true; - tw = paint.fontMetrics().width(text + "..."); - } - if (reduced) { - texts.push_back(text + "..."); - } else { - texts.push_back(text); - } - if (tw > maxTextWidth) maxTextWidth = tw; - } - + int maxTextWidth = width() / 3; + texts = TextAbbrev::abbreviate(texts, paint.fontMetrics(), maxTextWidth); + int lly = height() - 6; int llx = width() - maxTextWidth - 5; diff -r 15b8a4bfe855 -r 919740b20cc9 widgets/PluginParameterDialog.cpp --- a/widgets/PluginParameterDialog.cpp Thu Aug 09 14:40:03 2007 +0000 +++ b/widgets/PluginParameterDialog.cpp Fri Aug 10 16:36:50 2007 +0000 @@ -18,6 +18,8 @@ #include "PluginParameterBox.h" #include "WindowTypeSelector.h" +#include "base/TextAbbrev.h" + #include "vamp-sdk/Plugin.h" #include "vamp-sdk/PluginHostAdapter.h" @@ -228,7 +230,7 @@ QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); hbox->addWidget(bb); - connect(bb, SIGNAL(accepted()), this, SLOT(accept())); + connect(bb, SIGNAL(accepted()), this, SLOT(dialogAccepted())); connect(bb, SIGNAL(rejected()), this, SLOT(reject())); setAdvancedVisible(m_advancedVisible); @@ -429,16 +431,36 @@ PluginParameterDialog::setCandidateInputModels(const QStringList &models) { m_inputModels->clear(); - m_inputModels->insertItems(0, models); - connect(m_inputModels, SIGNAL(activated(const QString &)), - this, SIGNAL(inputModelChanged(QString))); + + QSettings settings; + settings.beginGroup("PluginParameterDialog"); + QString lastModel = settings.value("lastinputmodel").toString(); + settings.endGroup(); + + m_inputModelList = models; + m_inputModels->addItems(TextAbbrev::abbreviate(models, 80)); + + if (lastModel != "") { + for (int i = 0; i < models.size(); ++i) { + if (lastModel == models[i]) { + m_inputModels->setCurrentIndex(i); + break; + } + } + } + + connect(m_inputModels, SIGNAL(activated(int)), + this, SLOT(inputModelComboChanged(int))); m_inputModelBox->show(); } QString PluginParameterDialog::getInputModel() const { - return m_inputModels->currentText(); + if (!m_inputModels || !m_inputModels->isVisible()) return ""; + int i = m_inputModels->currentIndex(); + if (i >= m_inputModelList.size()) return ""; + return m_inputModelList[i]; } void @@ -521,3 +543,26 @@ m_channel = index - 1; } +void +PluginParameterDialog::inputModelComboChanged(int index) +{ + if (index >= m_inputModelList.size()) return; + emit inputModelChanged(m_inputModelList[index]); +} + +void +PluginParameterDialog::dialogAccepted() +{ + if (!m_inputModels || !m_inputModels->isVisible()) { + accept(); + return; + } + + QSettings settings; + settings.beginGroup("PluginParameterDialog"); + settings.setValue("lastinputmodel", getInputModel()); + settings.endGroup(); + + accept(); +} + diff -r 15b8a4bfe855 -r 919740b20cc9 widgets/PluginParameterDialog.h --- a/widgets/PluginParameterDialog.h Thu Aug 09 14:40:03 2007 +0000 +++ b/widgets/PluginParameterDialog.h Fri Aug 10 16:36:50 2007 +0000 @@ -78,6 +78,8 @@ void windowTypeChanged(WindowType type); void advancedToggled(); void setAdvancedVisible(bool); + void inputModelComboChanged(int); + void dialogAccepted(); protected: Vamp::PluginBase *m_plugin; @@ -102,6 +104,7 @@ QGroupBox *m_inputModelBox; QComboBox *m_inputModels; + QStringList m_inputModelList; QPushButton *m_advancedButton; QWidget *m_advanced;