#!/usr/bin/env qore # This is basically a direct port of the QT widget example # "sliders" to Qore using Qore's "qt" module. # Note that Qore's "qt" module requires QT 4.3 or above # use the "qt-gui" module %requires qt-gui # this is an object-oriented program; the application class is "sliders_example" %exec-class sliders_example # require all variables to be explicitly declared %require-our # enable all parse warnings %enable-all-warnings class Window inherits QWidget { constructor() : QWidget() { $.horizontalSliders = new SlidersGroup(Qt::Horizontal, TR("Horizontal")); $.verticalSliders = new SlidersGroup(Qt::Vertical, TR("Vertical")); $.stackedWidget = new QStackedWidget(); $.stackedWidget.addWidget($.horizontalSliders); $.stackedWidget.addWidget($.verticalSliders); $.createControls(TR("Controls")); $.verticalSliders.connect($.horizontalSliders, SIGNAL("valueChanged(int)"), SLOT("setValue(int)")); $.valueSpinBox.connect($.verticalSliders, SIGNAL("valueChanged(int)"), SLOT("setValue(int)")); $.horizontalSliders.connect($.valueSpinBox, SIGNAL("valueChanged(int)"), SLOT("setValue(int)")); my $layout = new QHBoxLayout(); $layout.addWidget($.controlsGroup); $layout.addWidget($.stackedWidget); $.setLayout($layout); $.minimumSpinBox.setValue(0); $.maximumSpinBox.setValue(20); $.valueSpinBox.setValue(5); $.setWindowTitle(TR("Sliders")); } createControls($title) { $.controlsGroup = new QGroupBox($title); $.minimumLabel = new QLabel(TR("Minimum value:")); $.maximumLabel = new QLabel(TR("Maximum value:")); $.valueLabel = new QLabel(TR("Current value:")); $.invertedAppearance = new QCheckBox(TR("Inverted appearance")); $.invertedKeyBindings = new QCheckBox(TR("Inverted key bindings")); $.minimumSpinBox = new QSpinBox(); $.minimumSpinBox.setRange(-100, 100); $.minimumSpinBox.setSingleStep(1); $.maximumSpinBox = new QSpinBox(); $.maximumSpinBox.setRange(-100, 100); $.maximumSpinBox.setSingleStep(1); $.valueSpinBox = new QSpinBox(); $.valueSpinBox.setRange(-100, 100); $.valueSpinBox.setSingleStep(1); $.orientationCombo = new QComboBox(); $.orientationCombo.addItem(TR("Horizontal slider-like widgets")); $.orientationCombo.addItem(TR("Vertical slider-like widgets")); $.stackedWidget.connect($.orientationCombo, SIGNAL("activated(int)"), SLOT("setCurrentIndex(int)")); $.horizontalSliders.connect($.minimumSpinBox, SIGNAL("valueChanged(int)"), SLOT("setMinimum(int)")); $.verticalSliders.connect($.minimumSpinBox, SIGNAL("valueChanged(int)"), SLOT("setMinimum(int)")); $.horizontalSliders.connect($.maximumSpinBox, SIGNAL("valueChanged(int)"), SLOT("setMaximum(int)")); $.verticalSliders.connect($.maximumSpinBox, SIGNAL("valueChanged(int)"), SLOT("setMaximum(int)")); $.horizontalSliders.connect($.invertedAppearance, SIGNAL("toggled(bool)"), SLOT("invertAppearance(bool)")); $.verticalSliders.connect($.invertedAppearance, SIGNAL("toggled(bool)"), SLOT("invertAppearance(bool)")); $.horizontalSliders.connect($.invertedKeyBindings, SIGNAL("toggled(bool)"), SLOT("invertKeyBindings(bool)")); $.verticalSliders.connect($.invertedKeyBindings, SIGNAL("toggled(bool)"), SLOT("invertKeyBindings(bool)")); my $controlsLayout = new QGridLayout(); $controlsLayout.addWidget($.minimumLabel, 0, 0); $controlsLayout.addWidget($.maximumLabel, 1, 0); $controlsLayout.addWidget($.valueLabel, 2, 0); $controlsLayout.addWidget($.minimumSpinBox, 0, 1); $controlsLayout.addWidget($.maximumSpinBox, 1, 1); $controlsLayout.addWidget($.valueSpinBox, 2, 1); $controlsLayout.addWidget($.invertedAppearance, 0, 2); $controlsLayout.addWidget($.invertedKeyBindings, 1, 2); $controlsLayout.addWidget($.orientationCombo, 3, 0, 1, 3); $.controlsGroup.setLayout($controlsLayout); } } class SlidersGroup inherits QGroupBox { constructor($orientation, $title, $parent) : QGroupBox($title, $parent) { $.createSignal("valueChanged(int)"); $.slider = new QSlider($orientation); $.slider.setFocusPolicy(Qt::StrongFocus); $.slider.setTickPosition(QSlider::TicksBothSides); $.slider.setTickInterval(10); $.slider.setSingleStep(1); $.scrollBar = new QScrollBar($orientation); $.scrollBar.setFocusPolicy(Qt::StrongFocus); $.dial = new QDial(); $.dial.setFocusPolicy(Qt::StrongFocus); $.scrollBar.connect($.slider, SIGNAL("valueChanged(int)"), SLOT("setValue(int)")); $.dial.connect($.scrollBar, SIGNAL("valueChanged(int)"), SLOT("setValue(int)")); $.slider.connect($.dial, SIGNAL("valueChanged(int)"), SLOT("setValue(int)")); $.connect($.dial, SIGNAL("valueChanged(int)"), SIGNAL("valueChanged(int)")); my $direction; if ($orientation == Qt::Horizontal) $direction = QBoxLayout::TopToBottom; else $direction = QBoxLayout::LeftToRight; my $slidersLayout = new QBoxLayout($direction); $slidersLayout.addWidget($.slider); $slidersLayout.addWidget($.scrollBar); $slidersLayout.addWidget($.dial); $.setLayout($slidersLayout); } setValue($value) { $.slider.setValue($value); } setMinimum($value) { $.slider.setMinimum($value); $.scrollBar.setMinimum($value); $.dial.setMinimum($value); } setMaximum($value) { $.slider.setMaximum($value); $.scrollBar.setMaximum($value); $.dial.setMaximum($value); } invertAppearance($invert) { $.slider.setInvertedAppearance($invert); $.scrollBar.setInvertedAppearance($invert); $.dial.setInvertedAppearance($invert); } invertKeyBindings($invert) { $.slider.setInvertedControls($invert); $.scrollBar.setInvertedControls($invert); $.dial.setInvertedControls($invert); } } class sliders_example inherits QApplication { constructor() { my $window = new Window(); $window.show(); $.exec(); } }