#include <iostream>
using namespace std;
#include <qpainter.h>
-#include <qpopupmenu.h>
+#include <qmenu.h>
#include <qtooltip.h>
#include <qlabel.h>
+#include <qwidgetaction.h>
+#include <qboxlayout.h>
#include <Music/Music.h>
DialView::DialView(QWidget* parent)
-: QFrame(parent, "DialView")
-, View("Dial", this)
+: QFrame(parent)
+, View(tr("Dial"), this)
{
m_error = 0.0f;
m_min_error = 0.0f;
m_max_error = 0.0f;
// settings
- setting_showTolerance = new QAction(this);
- setting_showTolerance->setMenuText(tr("Show tolerance"));
- setting_showTolerance->setToggleAction(true);
- setting_showTolerance->setOn(true);
+ setting_showTolerance = new QAction(tr("Show tolerance"), this);
+ setting_showTolerance->setCheckable(true);
+ setting_showTolerance->setChecked(true);
connect(setting_showTolerance, SIGNAL(toggled(bool)), this, SLOT(update()));
- setting_showTolerance->addTo(&m_popup_menu);
+ m_popup_menu.addAction(setting_showTolerance);
- setting_showTrace = new QAction(this);
- setting_showTrace->setMenuText(tr("Show trace"));
- setting_showTrace->setToggleAction(true);
- setting_showTrace->setOn(true);
+ setting_showTrace = new QAction(tr("Show trace"), this);
+ setting_showTrace->setCheckable(true);
+ setting_showTrace->setChecked(true);
connect(setting_showTrace, SIGNAL(toggled(bool)), this, SLOT(update()));
- setting_showTrace->addTo(&m_popup_menu);
+ m_popup_menu.addAction(setting_showTrace);
- setting_useCents = new QAction(this);
- setting_useCents->setMenuText(tr("Use cents"));
- setting_useCents->setToggleAction(true);
- setting_useCents->setOn(true);
+ setting_useCents = new QAction(tr("Use cents"), this);
+ setting_useCents->setCheckable(true);
+ setting_useCents->setChecked(true);
connect(setting_useCents, SIGNAL(toggled(bool)), this, SLOT(update()));
- setting_useCents->addTo(&m_popup_menu);
+ m_popup_menu.addAction(setting_useCents);
- m_popup_menu.insertItem(new Title(tr("Scale range"), &m_popup_menu));
- setting_spinScale = new QSpinBox(5, 100, 1, &m_popup_menu);
+ QHBoxLayout* scaleActionLayout = new QHBoxLayout(&m_popup_menu);
+
+ QLabel* scaleActionTitle = new QLabel(tr("Scale range"), &m_popup_menu);
+ scaleActionLayout->addWidget(scaleActionTitle);
+
+ setting_spinScale = new QSpinBox(&m_popup_menu);
+ setting_spinScale->setMinimum(5);
+ setting_spinScale->setMaximum(100);
+ setting_spinScale->setSingleStep(1);
setting_spinScale->setValue(50);
- QToolTip::add(setting_spinScale, tr("Scale range (in cents)"));
+ setting_spinScale->setToolTip(tr("Scale range (in cents)"));
connect(setting_spinScale, SIGNAL(valueChanged(int)), this, SLOT(update()));
- m_popup_menu.insertItem(setting_spinScale);
+ scaleActionLayout->addWidget(setting_spinScale);
+
+ QWidget* scaleActionWidget = new QWidget(&m_popup_menu);
+ scaleActionWidget->setLayout(scaleActionLayout);
+
+ QWidgetAction* scaleAction = new QWidgetAction(&m_popup_menu);
+ scaleAction->setDefaultWidget(scaleActionWidget);
+ m_popup_menu.addAction(scaleAction);
}
void DialView::save()
{
- s_settings->writeEntry("showTolerance", setting_showTolerance->isOn());
- s_settings->writeEntry("showTrace", setting_showTrace->isOn());
- s_settings->writeEntry("useCents", setting_useCents->isOn());
- s_settings->writeEntry("spinScale", setting_spinScale->value());
+ s_settings->setValue("showTolerance", setting_showTolerance->isChecked());
+ s_settings->setValue("showTrace", setting_showTrace->isChecked());
+ s_settings->setValue("useCents", setting_useCents->isChecked());
+ s_settings->setValue("spinScale", setting_spinScale->value());
}
void DialView::load()
{
- setting_showTolerance->setOn(s_settings->readBoolEntry("showTolerance", setting_showTolerance->isOn()));
- setting_showTrace->setOn(s_settings->readBoolEntry("showTrace", setting_showTrace->isOn()));
- setting_useCents->setOn(s_settings->readBoolEntry("useCents", setting_useCents->isOn()));
-
- setting_spinScale->setValue(s_settings->readNumEntry("spinScale", setting_spinScale->value()));
+ setting_showTolerance->setChecked(s_settings->value("showTolerance", setting_showTolerance->isChecked()).toBool());
+ setting_showTrace->setChecked(s_settings->value("showTrace", setting_showTrace->isChecked()).toBool());
+ setting_useCents->setChecked(s_settings->value("useCents", setting_useCents->isChecked()).toBool());
+ setting_spinScale->setValue(s_settings->value("spinScale", setting_spinScale->value()).toInt());
}
void DialView::clearSettings()
{
- s_settings->removeEntry("showTolerance");
- s_settings->removeEntry("showTrace");
- s_settings->removeEntry("useCents");
- s_settings->removeEntry("spinScale");
+ s_settings->remove("showTolerance");
+ s_settings->remove("showTrace");
+ s_settings->remove("useCents");
+ s_settings->remove("spinScale");
}
void DialView::drawTextTickCent(QPainter& p, int bigw, int bigh, int r)
repaint();
}
-void DialView::drawContents(QPainter* pp)
+void DialView::paintEvent(QPaintEvent* event)
{
- QPainter& p = *pp;
+ QPainter p(this);
float human_tol = Music::f2hf(441.0,440.0); // TODO
float scale;
- if(setting_useCents->isOn())
+ if(setting_useCents->isChecked())
scale = 50.0f/setting_spinScale->value();
else
scale = int(50/setting_spinScale->value());
QPoint c(width()/2,height());
QPoint unity_center = c+QPoint(p.fontMetrics().width("cent"),0);
QString unity;
- if(setting_useCents->isOn()) unity = "cents";
+ if(setting_useCents->isChecked()) unity = "cents";
else unity = "1/x";
if(height()>width())
{
// pen1.setStyle(Qt::DashLine);
// pen1.setWidth(2);
p.setPen(pen1);
- if(setting_showTolerance->isOn())
+ if(setting_showTolerance->isChecked())
{
float pie_deg = (150.0f/180.0f)*scale*human_tol*180;
p.drawPie(-pie_width,-pie_height,2*pie_width,2*pie_height, int((90-pie_deg)*16),int(2*pie_deg*16));
}
// draw min max
- if((m_error>-1.0f && m_error<1.0f) && setting_showTrace->isOn() && m_max_error-m_min_error>0.0)
+ if((m_error>-1.0f && m_error<1.0f) && setting_showTrace->isChecked() && m_max_error-m_min_error>0.0)
{
int line_width = ticks_size/4;
int mm_height = pie_height - line_width/2;
// draw text marks
p.setPen(QColor(0,0,0));
- if(setting_useCents->isOn())
+ if(setting_useCents->isChecked())
{
int grad = 10;
if(setting_spinScale->value() <= 25) grad=5;
int sh = bigh-p.fontMetrics().height()-ticks_size;
int bw = sw + ticks_size;
int bh = sh + ticks_size;
- if(setting_useCents->isOn())
+ if(setting_useCents->isChecked())
{
drawTicksCent(p, bigw, bigh, 10, ticks_size, ticks_size);
drawTicksCent(p, bigw, bigh, 5, ticks_size, int(ticks_size * 0.6));
p.setPen(pen2);
p.drawLine(mid_point, final_point);
}
-
- p.flush();
}