void SettingsWindow::onSliderChangePosition(MyGUI::ScrollBar* scroller, size_t pos) { if (getSettingType(scroller) == "Slider") { std::string valueStr; if (getSettingValueType(scroller) == "Float") { float value = pos / float(scroller->getScrollRange()-1); float min,max; getSettingMinMax(scroller, min, max); value = min + (max-min) * value; Settings::Manager::setFloat(getSettingName(scroller), getSettingCategory(scroller), value); valueStr = MyGUI::utility::toString(int(value)); } else { Settings::Manager::setInt(getSettingName(scroller), getSettingCategory(scroller), pos); valueStr = MyGUI::utility::toString(pos); } updateSliderLabel(scroller, valueStr); apply(); } }
void SettingsWindow::configureWidgets(MyGUI::Widget* widget) { MyGUI::EnumeratorWidgetPtr widgets = widget->getEnumerator(); while (widgets.next()) { MyGUI::Widget* current = widgets.current(); std::string type = getSettingType(current); if (type == checkButtonType) { std::string initialValue = Settings::Manager::getBool(getSettingName(current), getSettingCategory(current)) ? "#{sOn}" : "#{sOff}"; current->castType<MyGUI::Button>()->setCaptionWithReplacing(initialValue); current->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onButtonToggled); } if (type == sliderType) { MyGUI::ScrollBar* scroll = current->castType<MyGUI::ScrollBar>(); std::string valueStr; if (getSettingValueType(current) == "Float") { // TODO: ScrollBar isn't meant for this. should probably use a dedicated FloatSlider widget float min,max; getSettingMinMax(scroll, min, max); float value = Settings::Manager::getFloat(getSettingName(current), getSettingCategory(current)); valueStr = MyGUI::utility::toString((int)value); value = std::max(min, std::min(value, max)); value = (value-min)/(max-min); scroll->setScrollPosition(static_cast<size_t>(value * (scroll->getScrollRange() - 1))); } else { int value = Settings::Manager::getInt(getSettingName(current), getSettingCategory(current)); valueStr = MyGUI::utility::toString(value); scroll->setScrollPosition(value); } scroll->eventScrollChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onSliderChangePosition); updateSliderLabel(scroll, valueStr); } configureWidgets(current); } }
bool JointItem::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); int key = keyEvent->key(); if(key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up || key == Qt::Key_Down || key == Qt::Key_PageUp || key == Qt::Key_PageDown) { QSlider *slider; QLabel *label; if(obj == ui->sliderPositionPosition) { motionDone = false; slider = ui->sliderPositionPosition; label = ui->labelPositionPosition; if(keyEvent->type() == QEvent::KeyPress) { onSliderPositionPressed(); } if(keyEvent->type() == QEvent::KeyRelease) { onSliderPositionReleased(); } } if(obj == ui->sliderPositionVelocity) { motionDone = false; slider = ui->sliderPositionVelocity; label = ui->labelPositionVelocity; } if(obj == ui->sliderPositionDirect) { motionDone = false; slider = ui->sliderPositionDirect; label = ui->labelPositionDirectPosition; if(keyEvent->type() == QEvent::KeyPress) { onSliderPositionPressed(); } if(keyEvent->type() == QEvent::KeyRelease) { onSliderPositionReleased(); } } if(obj == ui->sliderMixedPosition) { motionDone = false; slider = ui->sliderMixedPosition; label = ui->labelMixedPosition; if(keyEvent->type() == QEvent::KeyPress) { onSliderPositionPressed(); } if(keyEvent->type() == QEvent::KeyRelease) { onSliderPositionReleased(); } } if(obj == ui->sliderMixedVelocity) { slider = ui->sliderMixedVelocity; label = ui->labelMixedVelocity; } if(obj == ui->sliderTorqueTorque) { slider = ui->sliderTorqueTorque; label = ui->labelTorqueTorque; if(keyEvent->type() == QEvent::KeyPress) { onSliderTorquePressed(); } if(keyEvent->type() == QEvent::KeyRelease) { onSliderTorqueReleased(); } } if(obj == ui->sliderOpenloopOutput) { slider = ui->sliderOpenloopOutput; label = ui->labelOpenLoopOutput; if(keyEvent->type() == QEvent::KeyPress) { onSliderOpenloopPressed(); } if(keyEvent->type() == QEvent::KeyRelease) { onSliderOpenloopReleased(); } } if(obj == ui->sliderVelocityVelocity) { slider = ui->sliderVelocityVelocity; label = ui->labelVelocityVelocity; if(keyEvent->type() == QEvent::KeyPress) { onSliderVelocityPressed(); } if(keyEvent->type() == QEvent::KeyRelease) { onSliderVelocityReleased(); } } if(keyEvent->type() == QEvent::KeyPress) { if(key == Qt::Key_Left || key == Qt::Key_Down) { slider->setValue(slider->value() - 1); } if(key == Qt::Key_Right || key == Qt::Key_Up) { slider->setValue(slider->value() + 1); } if(key == Qt::Key_PageUp) { slider->setValue(slider->value() + 10); } if(key == Qt::Key_PageDown) { slider->setValue(slider->value() - 10); } if(obj == ui->sliderTorqueTorque) { updateSliderTorqueLabel(slider,label,slider->value()); } else { updateSliderLabel(slider,label,slider->value()); } } return true; } return QObject::eventFilter(obj, event); } else { // standard event processing return QObject::eventFilter(obj, event); } }