summaryrefslogtreecommitdiff
path: root/src/libaudqt
diff options
context:
space:
mode:
authorMateusz Łukasik <mati75@linuxmint.pl>2016-04-03 13:42:15 +0200
committerMateusz Łukasik <mati75@linuxmint.pl>2016-04-03 13:42:15 +0200
commit6f99159ef80694a47b9e7acae189efa7702b3148 (patch)
tree80a1dd972eaf8d828d1cf8b12c3487a794a57097 /src/libaudqt
parent7f08dcfc78675bed63f962f6d01cfb18264e12c7 (diff)
Imported Upstream version 3.7.2
Diffstat (limited to 'src/libaudqt')
-rw-r--r--src/libaudqt/prefs-builder.cc5
-rw-r--r--src/libaudqt/prefs-plugin.cc35
-rw-r--r--src/libaudqt/prefs-widget.cc56
-rw-r--r--src/libaudqt/prefs-widget.h32
4 files changed, 80 insertions, 48 deletions
diff --git a/src/libaudqt/prefs-builder.cc b/src/libaudqt/prefs-builder.cc
index 7ff1605..33cd0e9 100644
--- a/src/libaudqt/prefs-builder.cc
+++ b/src/libaudqt/prefs-builder.cc
@@ -84,7 +84,7 @@ void prefs_populate (QBoxLayout * layout, ArrayRef<PreferencesWidget> widgets, c
/* enable/disable child widgets */
if (parent_widget)
- parent_widget->update ();
+ parent_widget->update_from_cfg ();
parent_widget = nullptr;
}
@@ -191,6 +191,7 @@ void prefs_populate (QBoxLayout * layout, ArrayRef<PreferencesWidget> widgets, c
{
QFrame * f = new QFrame;
f->setFrameShape (w.data.separator.horizontal ? QFrame::HLine : QFrame::VLine);
+ f->setFrameShadow (QFrame::Sunken);
layout->addWidget (f);
break;
}
@@ -204,7 +205,7 @@ void prefs_populate (QBoxLayout * layout, ArrayRef<PreferencesWidget> widgets, c
/* enable/disable child widgets */
if (parent_widget)
- parent_widget->update ();
+ parent_widget->update_from_cfg ();
}
} // namespace audqt
diff --git a/src/libaudqt/prefs-plugin.cc b/src/libaudqt/prefs-plugin.cc
index 0853f45..8b38950 100644
--- a/src/libaudqt/prefs-plugin.cc
+++ b/src/libaudqt/prefs-plugin.cc
@@ -78,7 +78,7 @@ EXPORT void plugin_prefs (PluginHandle * ph)
{
ConfigWindow * cw = find_config_window (ph);
- if (cw)
+ if (cw && cw->root)
{
window_bring_to_front (cw->root);
return;
@@ -92,15 +92,25 @@ EXPORT void plugin_prefs (PluginHandle * ph)
if (! p)
return;
- cw = new ConfigWindow;
- config_windows.append (cw);
+ if (! cw)
+ {
+ cw = new ConfigWindow {ph};
+ config_windows.append (cw);
+ }
- cw->ph = ph;
cw->root = new QDialog;
+ cw->root->setAttribute (Qt::WA_DeleteOnClose);
if (p->init)
p->init ();
+ QObject::connect (cw->root, & QObject::destroyed, [p, cw] () {
+ if (p->cleanup)
+ p->cleanup ();
+
+ cw->root = nullptr;
+ });
+
const char * name = header->info.name;
if (header->info.domain)
name = dgettext (header->info.domain, name);
@@ -108,8 +118,9 @@ EXPORT void plugin_prefs (PluginHandle * ph)
cw->root->setWindowTitle ((const char *) str_printf(_("%s Settings"), name));
QVBoxLayout * vbox = new QVBoxLayout (cw->root);
-
+ vbox->setContentsMargins (4, 4, 4, 4);
vbox->setSpacing (4);
+
prefs_populate (vbox, p->widgets, header->info.domain);
vbox->addStretch (1);
@@ -121,23 +132,19 @@ EXPORT void plugin_prefs (PluginHandle * ph)
bbox->button (QDialogButtonBox::Ok)->setText (translate_str (N_("_Set")));
bbox->button (QDialogButtonBox::Cancel)->setText (translate_str (N_("_Cancel")));
- QObject::connect (bbox, & QDialogButtonBox::accepted, [=] () {
- if (p->apply)
- p->apply ();
-
- cw->root->hide ();
+ QObject::connect (bbox, & QDialogButtonBox::accepted, [p, cw] () {
+ p->apply ();
+ cw->root->deleteLater ();
});
-
- QObject::connect (bbox, & QDialogButtonBox::rejected, cw->root, & QWidget::hide);
}
else
{
bbox->setStandardButtons (QDialogButtonBox::Close);
bbox->button (QDialogButtonBox::Close)->setText (translate_str (N_("_Close")));
-
- QObject::connect (bbox, & QDialogButtonBox::rejected, cw->root, & QWidget::hide);
}
+ QObject::connect (bbox, & QDialogButtonBox::rejected, cw->root, & QObject::deleteLater);
+
vbox->addWidget (bbox);
window_bring_to_front (cw->root);
diff --git a/src/libaudqt/prefs-widget.cc b/src/libaudqt/prefs-widget.cc
index fded84a..f4f2dfc 100644
--- a/src/libaudqt/prefs-widget.cc
+++ b/src/libaudqt/prefs-widget.cc
@@ -21,6 +21,7 @@
#include "libaudqt.h"
#include <assert.h>
+#include <math.h>
#include <QButtonGroup>
#include <QComboBox>
@@ -34,6 +35,21 @@
namespace audqt {
+HookableWidget::HookableWidget (const PreferencesWidget * parent, const char * domain) :
+ m_parent (parent), m_domain (domain)
+{
+ if (m_parent->cfg.hook)
+ hook.capture (new HookReceiver<HookableWidget>
+ {m_parent->cfg.hook, this, & HookableWidget::update_from_cfg});
+}
+
+void HookableWidget::update_from_cfg ()
+{
+ m_updating = true;
+ update ();
+ m_updating = false;
+}
+
/* button */
ButtonWidget::ButtonWidget (const PreferencesWidget * parent, const char * domain) :
QPushButton (translate_str (parent->label, domain))
@@ -49,6 +65,8 @@ BooleanWidget::BooleanWidget (const PreferencesWidget * parent, const char * dom
update ();
QObject::connect (this, & QCheckBox::stateChanged, [this] (int state) {
+ if (m_updating)
+ return;
m_parent->cfg.set_bool (state != Qt::Unchecked);
if (m_child_layout)
enable_layout (m_child_layout, state != Qt::Unchecked);
@@ -74,9 +92,11 @@ RadioButtonWidget::RadioButtonWidget (const PreferencesWidget * parent,
update ();
- QObject::connect (this, & QAbstractButton::clicked, [parent] (bool checked) {
+ QObject::connect (this, & QAbstractButton::toggled, [this] (bool checked) {
+ if (m_updating)
+ return;
if (checked)
- parent->cfg.set_int (parent->data.radio_btn.value);
+ m_parent->cfg.set_int (m_parent->data.radio_btn.value);
});
}
@@ -98,6 +118,8 @@ IntegerWidget::IntegerWidget (const PreferencesWidget * parent, const char * dom
if (parent->label)
layout->addWidget (new QLabel (translate_str (parent->label, domain)));
+ m_spinner->setRange ((int) m_parent->data.spin_btn.min, (int) m_parent->data.spin_btn.max);
+ m_spinner->setSingleStep ((int) m_parent->data.spin_btn.step);
layout->addWidget (m_spinner);
if (parent->data.spin_btn.right_label)
@@ -112,15 +134,14 @@ IntegerWidget::IntegerWidget (const PreferencesWidget * parent, const char * dom
* cast to the type of the correct valueChanged signal. --kaniini.
*/
void (QSpinBox::* signal) (int) = & QSpinBox::valueChanged;
- QObject::connect (m_spinner, signal, [parent] (int value) {
- parent->cfg.set_int (value);
+ QObject::connect (m_spinner, signal, [this] (int value) {
+ if (! m_updating)
+ m_parent->cfg.set_int (value);
});
}
void IntegerWidget::update ()
{
- m_spinner->setRange ((int) m_parent->data.spin_btn.min, (int) m_parent->data.spin_btn.max);
- m_spinner->setSingleStep ((int) m_parent->data.spin_btn.step);
m_spinner->setValue (m_parent->cfg.get_int ());
}
@@ -136,6 +157,12 @@ DoubleWidget::DoubleWidget (const PreferencesWidget * parent, const char * domai
if (parent->label)
layout->addWidget (new QLabel (translate_str (parent->label, domain)));
+ auto decimals_for = [] (double step)
+ { return aud::max (0, -(int) floor (log10 (step) + 0.01)); };
+
+ m_spinner->setDecimals (decimals_for (m_parent->data.spin_btn.step));
+ m_spinner->setRange (m_parent->data.spin_btn.min, m_parent->data.spin_btn.max);
+ m_spinner->setSingleStep (m_parent->data.spin_btn.step);
layout->addWidget (m_spinner);
if (parent->data.spin_btn.right_label)
@@ -146,15 +173,14 @@ DoubleWidget::DoubleWidget (const PreferencesWidget * parent, const char * domai
update ();
void (QDoubleSpinBox::* signal) (double) = & QDoubleSpinBox::valueChanged;
- QObject::connect (m_spinner, signal, [parent] (double value) {
- parent->cfg.set_float (value);
+ QObject::connect (m_spinner, signal, [this] (double value) {
+ if (! m_updating)
+ m_parent->cfg.set_float (value);
});
}
void DoubleWidget::update ()
{
- m_spinner->setRange (m_parent->data.spin_btn.min, m_parent->data.spin_btn.max);
- m_spinner->setSingleStep (m_parent->data.spin_btn.step);
m_spinner->setValue (m_parent->cfg.get_float ());
}
@@ -177,8 +203,9 @@ StringWidget::StringWidget (const PreferencesWidget * parent, const char * domai
update ();
- QObject::connect (m_lineedit, & QLineEdit::textChanged, [parent] (const QString & value) {
- parent->cfg.set_string (value.toUtf8 ());
+ QObject::connect (m_lineedit, & QLineEdit::textChanged, [this] (const QString & value) {
+ if (! m_updating)
+ m_parent->cfg.set_string (value.toUtf8 ());
});
}
@@ -206,6 +233,9 @@ ComboBoxWidget::ComboBoxWidget (const PreferencesWidget * parent, const char * d
void (QComboBox::* signal) (int) = & QComboBox::currentIndexChanged;
QObject::connect (m_combobox, signal, [this] (int idx) {
+ if (m_updating)
+ return;
+
QVariant data = m_combobox->itemData (idx);
switch (m_parent->cfg.type)
@@ -319,7 +349,7 @@ NotebookWidget::NotebookWidget (const PreferencesWidget * parent, const char * d
{
auto widget = new QWidget (this);
auto layout = new QVBoxLayout (widget);
- layout->setContentsMargins (0, 0, 0, 0);
+ layout->setContentsMargins (4, 4, 4, 4);
layout->setSpacing (4);
prefs_populate (layout, tab.widgets, domain);
diff --git a/src/libaudqt/prefs-widget.h b/src/libaudqt/prefs-widget.h
index 3603956..f4deb4f 100644
--- a/src/libaudqt/prefs-widget.h
+++ b/src/libaudqt/prefs-widget.h
@@ -50,22 +50,19 @@ namespace audqt {
*/
/* base class which provides plumbing for hooks. */
-class HookableWidget
-{
+class HookableWidget {
+public:
+ void update_from_cfg ();
+
protected:
- HookableWidget (const PreferencesWidget * parent, const char * domain) :
- m_parent (parent), m_domain (domain)
- {
- if (m_parent->cfg.hook)
- hook.capture (new HookReceiver<HookableWidget>
- {m_parent->cfg.hook, this, & HookableWidget::update});
- }
+ HookableWidget (const PreferencesWidget * parent, const char * domain);
virtual ~HookableWidget () {}
virtual void update () {}
const PreferencesWidget * const m_parent;
const char * const m_domain;
+ bool m_updating = false;
private:
SmartPtr<HookReceiver<HookableWidget>> hook;
@@ -78,15 +75,15 @@ public:
};
/* boolean widget (checkbox) */
-class BooleanWidget : public QCheckBox, HookableWidget {
+class BooleanWidget : public QCheckBox, public HookableWidget {
public:
BooleanWidget (const PreferencesWidget * parent, const char * domain);
- void update ();
void set_child_layout (QLayout * layout)
{ m_child_layout = layout; }
private:
+ void update ();
QLayout * m_child_layout = nullptr;
};
@@ -94,9 +91,8 @@ private:
class IntegerWidget : public QWidget, HookableWidget {
public:
IntegerWidget (const PreferencesWidget * parent, const char * domain);
- void update ();
-
private:
+ void update ();
QSpinBox * m_spinner;
};
@@ -105,6 +101,7 @@ class RadioButtonWidget : public QRadioButton, HookableWidget {
public:
RadioButtonWidget (const PreferencesWidget * parent, const char * domain,
QButtonGroup * btn_group);
+private:
void update ();
};
@@ -112,9 +109,8 @@ public:
class DoubleWidget : public QWidget, HookableWidget {
public:
DoubleWidget (const PreferencesWidget * parent, const char * domain);
- void update ();
-
private:
+ void update ();
QDoubleSpinBox * m_spinner;
};
@@ -122,9 +118,8 @@ private:
class StringWidget : public QWidget, HookableWidget {
public:
StringWidget (const PreferencesWidget * parent, const char * domain);
- void update ();
-
private:
+ void update ();
QLineEdit * m_lineedit;
};
@@ -132,9 +127,8 @@ private:
class ComboBoxWidget : public QWidget, HookableWidget {
public:
ComboBoxWidget (const PreferencesWidget * parent, const char * domain);
- void update ();
-
private:
+ void update ();
QComboBox * m_combobox;
};