File indexing completed on 2024-04-14 14:30:07

0001 #include "krulertest.h"
0002 
0003 #include <KRuler>
0004 
0005 #include <QApplication>
0006 #include <QButtonGroup>
0007 #include <QDoubleSpinBox>
0008 #include <QGroupBox>
0009 #include <QKeyEvent>
0010 #include <QLabel>
0011 #include <QLayout>
0012 #include <QSpinBox>
0013 
0014 /*
0015 void
0016 MyCheckBox::mouseReleaseEvent(QMouseEvent *e )
0017 {
0018   QButton::mouseReleaseEvent(e);
0019   if ();
0020 }
0021 */
0022 
0023 MouseWidget::MouseWidget(QWidget *parent)
0024     : QFrame(parent)
0025 {
0026 }
0027 
0028 void MouseWidget::mousePressEvent(QMouseEvent *e)
0029 {
0030     mouseButtonDown = true;
0031     Q_EMIT newXPos(e->x());
0032     Q_EMIT newYPos(e->y());
0033 }
0034 
0035 void MouseWidget::mouseReleaseEvent(QMouseEvent *)
0036 {
0037     mouseButtonDown = false;
0038 }
0039 
0040 void MouseWidget::mouseMoveEvent(QMouseEvent *e)
0041 {
0042     if (mouseButtonDown) {
0043         Q_EMIT newXPos(e->x());
0044         Q_EMIT newYPos(e->y());
0045     }
0046 }
0047 
0048 void MouseWidget::resizeEvent(QResizeEvent *r)
0049 {
0050     Q_EMIT newWidth(r->size().width());
0051     Q_EMIT newHeight(r->size().height());
0052 }
0053 
0054 KRulerTest::KRulerTest()
0055     : QWidget(nullptr)
0056 {
0057     QVBoxLayout *topLayout = new QVBoxLayout(this);
0058     mainframe = new QFrame(this);
0059     topLayout->addWidget(mainframe);
0060 
0061     layout = new QGridLayout(mainframe);
0062 
0063     miniwidget = new QFrame(mainframe);
0064     miniwidget->setFrameStyle(QFrame::WinPanel | QFrame::Raised);
0065     bigwidget = new MouseWidget(mainframe);
0066     bigwidget->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
0067 
0068     //  QRect bwrect = bigwidget->frameRect();
0069     //  qDebug("big rect: top%i left%i bottom%i right%i",
0070     //    bwrect.top(), bwrect.left(), bwrect.bottom(), bwrect.right());
0071     hruler = new KRuler(Qt::Horizontal, mainframe);
0072     //  hruler->setRange( bwrect.left(), bwrect.right() );
0073     hruler->setRange(0, 1000);
0074     //  hruler->setOffset( bwrect.left() - bigwidget->frameRect().left() );
0075     hruler->setOffset(0);
0076 
0077     vruler = new KRuler(Qt::Vertical, mainframe);
0078     vruler->setOffset(0);
0079     vruler->setRange(0, 1000);
0080 
0081     connect(bigwidget, &MouseWidget::newXPos, hruler, &KRuler::slotNewValue);
0082     connect(bigwidget, &MouseWidget::newYPos, vruler, &KRuler::slotNewValue);
0083     connect(bigwidget, &MouseWidget::newWidth, this, &KRulerTest::slotNewWidth);
0084     connect(bigwidget, &MouseWidget::newHeight, this, &KRulerTest::slotNewHeight);
0085 
0086     layout->addWidget(miniwidget, 0, 0);
0087     layout->addWidget(hruler, 0, 1);
0088     layout->addWidget(vruler, 1, 0);
0089     layout->addWidget(bigwidget, 1, 1);
0090 
0091     mouse_message = new QLabel(QStringLiteral("Press and hold mouse button\nfor pointer movement"), bigwidget);
0092     mouse_message->adjustSize();
0093     mouse_message->move(4, 4);
0094 
0095     showMarks = new QGroupBox(QStringLiteral("Show which marks ?"), bigwidget);
0096     showMarks->setFixedSize(140, 160);
0097     showMarks->move(330, 4);
0098     showTM = new QCheckBox(QStringLiteral("show tiny marks"), showMarks);
0099     showTM->adjustSize();
0100     showTM->move(5, 15);
0101     showTM->setChecked(true);
0102     connect(showTM, &QCheckBox::toggled, this, &KRulerTest::slotSetTinyMarks);
0103     showLM = new QCheckBox(QStringLiteral("show little marks"), showMarks);
0104     showLM->adjustSize();
0105     showLM->move(5, 35);
0106     showLM->setChecked(true);
0107     connect(showLM, &QCheckBox::toggled, this, &KRulerTest::slotSetLittleMarks);
0108     showMM = new QCheckBox(QStringLiteral("show medium marks"), showMarks);
0109     showMM->adjustSize();
0110     showMM->move(5, 55);
0111     showMM->setChecked(true);
0112     connect(showMM, &QCheckBox::toggled, this, &KRulerTest::slotSetMediumMarks);
0113     showBM = new QCheckBox(QStringLiteral("show big marks"), showMarks);
0114     showBM->adjustSize();
0115     showBM->move(5, 75);
0116     showBM->setChecked(true);
0117     connect(showBM, &QCheckBox::toggled, this, &KRulerTest::slotSetBigMarks);
0118     showEM = new QCheckBox(QStringLiteral("show end marks"), showMarks);
0119     showEM->adjustSize();
0120     showEM->move(5, 95);
0121     showEM->setChecked(true);
0122     connect(showEM, &QCheckBox::toggled, this, &KRulerTest::slotSetEndMarks);
0123     showPT = new QCheckBox(QStringLiteral("show ruler pointer"), showMarks);
0124     showPT->adjustSize();
0125     showPT->move(5, 115);
0126     showPT->setChecked(true);
0127     connect(showPT, &QCheckBox::toggled, this, &KRulerTest::slotSetRulerPointer);
0128     fixLen = new QCheckBox(QStringLiteral("fix ruler length"), showMarks);
0129     fixLen->adjustSize();
0130     fixLen->move(5, 135);
0131     fixLen->setChecked(true);
0132     connect(fixLen, &QCheckBox::toggled, this, &KRulerTest::slotFixRulerLength);
0133     connect(fixLen, &QCheckBox::toggled, this, &KRulerTest::slotCheckLength);
0134 
0135     lineEdit = new QGroupBox(QStringLiteral("Value of begin/end"), bigwidget);
0136     lineEdit->setFixedSize(140, 80);
0137     lineEdit->move(330, 4 + 160);
0138     beginMark = new QSpinBox(lineEdit);
0139     beginMark->setValue(0);
0140     beginMark->setRange(-1000, 1000);
0141     beginMark->move(5, 15);
0142     beginMark->setFixedSize(beginMark->sizeHint());
0143     connect(beginMark, qOverload<int>(&QSpinBox::valueChanged), hruler, &KRuler::slotNewOffset);
0144     connect(beginMark, qOverload<int>(&QSpinBox::valueChanged), vruler, &KRuler::slotNewOffset);
0145     endMark = new QSpinBox(lineEdit);
0146     endMark->setValue(0);
0147     endMark->setRange(-1000, 1000);
0148     endMark->move(5, 35);
0149     endMark->setFixedSize(endMark->sizeHint());
0150     connect(endMark, qOverload<int>(&QSpinBox::valueChanged), hruler, &KRuler::slotEndOffset);
0151     connect(endMark, qOverload<int>(&QSpinBox::valueChanged), vruler, &KRuler::slotEndOffset);
0152     lengthInput = new QSpinBox(lineEdit);
0153     lengthInput->setValue(0);
0154     lengthInput->setRange(-1000, 1000);
0155     lengthInput->move(5, 55);
0156     lengthInput->setFixedSize(lengthInput->sizeHint());
0157     connect(lengthInput, qOverload<int>(&QSpinBox::valueChanged), hruler, &KRuler::slotEndOffset);
0158     connect(lengthInput, qOverload<int>(&QSpinBox::valueChanged), vruler, &KRuler::slotEndOffset);
0159 
0160     vertrot = new QGroupBox(QStringLiteral("Value of rotate translate for Vert."), bigwidget);
0161     vertrot->setFixedSize(140, 80);
0162     vertrot->move(330, 4 + 160 + 80 + 4);
0163     transX = new QDoubleSpinBox(vertrot);
0164     transX->setValue(0.0);
0165     transX->setRange(-1000, 1000);
0166     transX->setSingleStep(1);
0167     transX->move(5, 15);
0168     transX->setFixedSize(transX->sizeHint());
0169     // transX->setLabel("transx", AlignLeft);
0170     connect(transX, qOverload<double>(&QDoubleSpinBox::valueChanged), this, &KRulerTest::slotSetXTrans);
0171     transY = new QDoubleSpinBox(vertrot);
0172     transY->setValue(-12.0);
0173     transY->setRange(-1000, 1000);
0174     transY->setSingleStep(1);
0175     transY->move(5, 35);
0176     transY->setFixedSize(transY->sizeHint());
0177     // transY->setLabel("transy", AlignLeft);
0178     connect(transY, qOverload<double>(&QDoubleSpinBox::valueChanged), this, &KRulerTest::slotSetYTrans);
0179     rotV = new QDoubleSpinBox(vertrot);
0180     rotV->setValue(90.0);
0181     rotV->setRange(-1000, 1000);
0182     rotV->setSingleStep(1);
0183     rotV->move(5, 55);
0184     rotV->setFixedSize(rotV->sizeHint());
0185     // rotV->setLabel("rot", AlignLeft);
0186     connect(rotV, qOverload<double>(&QDoubleSpinBox::valueChanged), this, &KRulerTest::slotSetRotate);
0187 
0188     metricstyle = new QGroupBox(QStringLiteral("metric styles"), bigwidget);
0189 
0190     QButtonGroup *metricstyleButtons = new QButtonGroup(bigwidget);
0191 
0192     metricstyle->setFixedSize(100, 120);
0193     metricstyle->move(330 - 110, 4);
0194     pixelmetric = new QRadioButton(QStringLiteral("pixel"), metricstyle);
0195     pixelmetric->adjustSize();
0196     pixelmetric->move(5, 15);
0197     metricstyleButtons->addButton(pixelmetric, (int)KRuler::Pixel);
0198     inchmetric = new QRadioButton(QStringLiteral("inch"), metricstyle);
0199     inchmetric->adjustSize();
0200     inchmetric->move(5, 35);
0201     metricstyleButtons->addButton(inchmetric, (int)KRuler::Inch);
0202     mmmetric = new QRadioButton(QStringLiteral("millimeter"), metricstyle);
0203     mmmetric->adjustSize();
0204     mmmetric->move(5, 55);
0205     metricstyleButtons->addButton(mmmetric, (int)KRuler::Millimetres);
0206     cmmetric = new QRadioButton(QStringLiteral("centimeter"), metricstyle);
0207     cmmetric->adjustSize();
0208     cmmetric->move(5, 75);
0209     metricstyleButtons->addButton(cmmetric, (int)KRuler::Centimetres);
0210     mmetric = new QRadioButton(QStringLiteral("meter"), metricstyle);
0211     mmetric->adjustSize();
0212     mmetric->move(5, 95);
0213     metricstyleButtons->addButton(mmetric, (int)KRuler::Metres);
0214     connect(metricstyleButtons, &QButtonGroup::buttonClicked, this, [this, metricstyleButtons](QAbstractButton *button) {
0215         slotSetMStyle(metricstyleButtons->id(button));
0216     });
0217 
0218     slotUpdateShowMarks();
0219 }
0220 
0221 KRulerTest::~KRulerTest()
0222 {
0223     delete layout;
0224     delete hruler;
0225     delete vruler;
0226     delete miniwidget;
0227     delete bigwidget;
0228     delete mainframe;
0229 }
0230 
0231 void KRulerTest::slotNewWidth(int width)
0232 {
0233     hruler->setMaximum(width);
0234 }
0235 
0236 void KRulerTest::slotNewHeight(int height)
0237 {
0238     vruler->setMaximum(height);
0239 }
0240 
0241 void KRulerTest::slotSetTinyMarks(bool set)
0242 {
0243     hruler->setShowTinyMarks(set);
0244     vruler->setShowTinyMarks(set);
0245 }
0246 
0247 void KRulerTest::slotSetLittleMarks(bool set)
0248 {
0249     hruler->setShowLittleMarks(set);
0250     vruler->setShowLittleMarks(set);
0251 }
0252 
0253 void KRulerTest::slotSetMediumMarks(bool set)
0254 {
0255     hruler->setShowMediumMarks(set);
0256     vruler->setShowMediumMarks(set);
0257 }
0258 
0259 void KRulerTest::slotSetBigMarks(bool set)
0260 {
0261     hruler->setShowBigMarks(set);
0262     vruler->setShowBigMarks(set);
0263 }
0264 
0265 void KRulerTest::slotSetEndMarks(bool set)
0266 {
0267     hruler->setShowEndMarks(set);
0268     vruler->setShowEndMarks(set);
0269 }
0270 
0271 void KRulerTest::slotSetRulerPointer(bool set)
0272 {
0273     hruler->setShowPointer(set);
0274     vruler->setShowPointer(set);
0275 }
0276 
0277 void KRulerTest::slotSetRulerLength(int len)
0278 {
0279     hruler->setLength(len);
0280     vruler->setLength(len);
0281 }
0282 
0283 void KRulerTest::slotFixRulerLength(bool fix)
0284 {
0285     hruler->setLengthFixed(fix);
0286     vruler->setLengthFixed(fix);
0287 }
0288 
0289 void KRulerTest::slotSetMStyle(int style)
0290 {
0291     hruler->setRulerMetricStyle((KRuler::MetricStyle)style);
0292     vruler->setRulerMetricStyle((KRuler::MetricStyle)style);
0293     slotUpdateShowMarks();
0294 }
0295 
0296 void KRulerTest::slotUpdateShowMarks()
0297 {
0298     showTM->setChecked(hruler->showTinyMarks());
0299     showLM->setChecked(hruler->showLittleMarks());
0300     showMM->setChecked(hruler->showMediumMarks());
0301     showBM->setChecked(hruler->showBigMarks());
0302     showEM->setChecked(hruler->showEndMarks());
0303 }
0304 
0305 void KRulerTest::slotCheckLength(bool fixlen)
0306 {
0307     Q_UNUSED(fixlen);
0308     beginMark->setValue(hruler->offset());
0309     endMark->setValue(hruler->endOffset());
0310     lengthInput->setValue(hruler->length());
0311 }
0312 
0313 void KRulerTest::slotSetRotate(double d)
0314 {
0315     Q_UNUSED(d);
0316 #ifdef KRULER_ROTATE_TEST
0317     vruler->rotate = d;
0318     vruler->update();
0319     // debug("rotate %.1f", d);
0320 #endif
0321 }
0322 
0323 void KRulerTest::slotSetXTrans(double d)
0324 {
0325     Q_UNUSED(d);
0326 #ifdef KRULER_ROTATE_TEST
0327     vruler->xtrans = d;
0328     vruler->update();
0329     // debug("trans x %.1f", d);
0330 #endif
0331 }
0332 
0333 void KRulerTest::slotSetYTrans(double d)
0334 {
0335     Q_UNUSED(d);
0336 #ifdef KRULER_ROTATE_TEST
0337     vruler->ytrans = d;
0338     vruler->update();
0339     // debug("trans y %.1f", d);
0340 #endif
0341 }
0342 
0343 /* --- MAIN -----------------------*/
0344 int main(int argc, char **argv)
0345 {
0346     QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
0347     QApplication::setApplicationName(QStringLiteral("test"));
0348     QApplication *testapp;
0349     KRulerTest *window;
0350 
0351     testapp = new QApplication(argc, argv);
0352     testapp->setFont(QFont(QStringLiteral("Helvetica"), 12));
0353 
0354     window = new KRulerTest();
0355     window->setWindowTitle(QStringLiteral("KRulerTest"));
0356     window->resize(800, 600);
0357     window->show();
0358     return testapp->exec();
0359 }
0360 
0361 #include "moc_krulertest.cpp"