Import upstream version 0.99.2
[fmit.git] / src / modules / DialView.cpp
index 0be471e..576e712 100644 (file)
@@ -3,70 +3,82 @@
 #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)
@@ -157,13 +169,13 @@ void DialView::setError(float error)
        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());
@@ -174,7 +186,7 @@ void DialView::drawContents(QPainter* pp)
        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())
        {
@@ -203,14 +215,14 @@ void DialView::drawContents(QPainter* pp)
 //     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;
@@ -226,7 +238,7 @@ void DialView::drawContents(QPainter* pp)
 
        // 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;
@@ -251,7 +263,7 @@ void DialView::drawContents(QPainter* pp)
        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));
@@ -284,6 +296,4 @@ void DialView::drawContents(QPainter* pp)
                p.setPen(pen2);
                p.drawLine(mid_point, final_point);
        }
-
-       p.flush();
 }