X-Git-Url: http://git.johnwright.org/?p=fmit.git;a=blobdiff_plain;f=src%2Fmodules%2FDialView.cpp;fp=src%2Fmodules%2FDialView.cpp;h=576e712985457e205fc3201956fa79cef2688781;hp=0be471e50822bcf2db67b89d4a5440b46fefaa4e;hb=a8fb82288feb6b258f2c04312f0c36ba8d79b494;hpb=adfba0402927438a1869f1e716bcf0e25574ce1e diff --git a/src/modules/DialView.cpp b/src/modules/DialView.cpp index 0be471e..576e712 100644 --- a/src/modules/DialView.cpp +++ b/src/modules/DialView.cpp @@ -3,70 +3,82 @@ #include using namespace std; #include -#include +#include #include #include +#include +#include #include 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(); }