From a277e193346487d849fdd4623659ba72e211e5d5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 28 Sep 2024 19:28:07 -0400 Subject: [PATCH] Add linking buttons to grid settings --- forms/gridsettingsdialog.ui | 114 ++++++++++++++++++++++++-------- include/ui/gridsettingsdialog.h | 6 ++ resources/icons/link.ico | Bin 0 -> 1282 bytes resources/icons/link_broken.ico | Bin 0 -> 2069 bytes resources/images.qrc | 2 + src/ui/gridsettingsdialog.cpp | 68 ++++++++++++++----- 6 files changed, 147 insertions(+), 43 deletions(-) create mode 100755 resources/icons/link.ico create mode 100755 resources/icons/link_broken.ico diff --git a/forms/gridsettingsdialog.ui b/forms/gridsettingsdialog.ui index 73411742..8673a9b3 100644 --- a/forms/gridsettingsdialog.ui +++ b/forms/gridsettingsdialog.ui @@ -86,30 +86,60 @@ Dimensions (in pixels) - - - + + + - Width + ... + + + + :/icons/link_broken.ico + :/icons/link.ico:/icons/link_broken.ico + + + true + + + true + + + QToolButton::ToolButtonPopupMode::InstantPopup + + + true - - - - Height - - - - - + + 1 - + + + Height + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Width + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + 1 @@ -123,26 +153,56 @@ Offset (in pixels) - - - - - X - - - - + + Y + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + X + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + - - + + + + ... + + + + :/icons/link_broken.ico + :/icons/link.ico:/icons/link_broken.ico + + + true + + + true + + + QToolButton::ToolButtonPopupMode::InstantPopup + + + true + + @@ -188,6 +248,8 @@ 1 - + + + diff --git a/include/ui/gridsettingsdialog.h b/include/ui/gridsettingsdialog.h index 9c64f29d..cd04a048 100644 --- a/include/ui/gridsettingsdialog.h +++ b/include/ui/gridsettingsdialog.h @@ -24,8 +24,14 @@ private: Ui::GridSettingsDialog *ui; GridSettings *settings; GridSettings originalSettings; + bool dimensionsLinked = true; + bool offsetsLinked = true; void reset(bool force = false); + void setWidth(int value); + void setHeight(int value); + void setOffsetX(int value); + void setOffsetY(int value); private slots: void dialogButtonClicked(QAbstractButton *button); diff --git a/resources/icons/link.ico b/resources/icons/link.ico new file mode 100755 index 0000000000000000000000000000000000000000..b0c35b59a32a35922e235ce13cfaea86fb337aa3 GIT binary patch literal 1282 zcmV+d1^xPoP)20c}Tt0!?8C z=xDn*fBM6aEEdGD1Q?8M&Y9_)i5akqKa4SPh|I~&Y>66U;$^0z!)-+4-0+8)a_I%U zEl{ADC53V5Mi*U6ZE3c)r#Ij4^t1vi!Z=-alJ}&^cTS)8d%x#>pXcx*kqA7@D}~&6 zJYKT@m)F|XS&}XiT?~c8d7)qsBB3zQ0s3OgyG?s>Js5wGR3OO-@Y_329w;g(R99>( z2cOpuF1H)(4hKw6O~ahc25s*je-xjiA4CHD*7gq$$cl>8H8s^>7#;>{#tH%24?=+u zBvL8ZY&U?Sti2z9cxpGPL`pJuz8GAqGl1D_2Ghj&r{+JenN(%vZ}@266FE6KnAB`7 zJ}(Q+YtOLuHVAAbFlu>?>CD>Xxb$L#{SQhBQJ&=DPBID+pZ;MLWYpw%0&4X0q{ z`gF%1zyGGk^}ESPAT<;U!MyVyu>XA< z_x1fmj>aCF1Dr`1!U?C>YN4>G0Cv{Z!slO}2A|IdTedvevmCrX3Vw^-eIywi0GG?@ zk|^X^yXtm;`b-yGy*dJ~A3X|$aQ%bYMBsNY!pRuLsc#>9XLj>ujF8&{$uO ztrlk3&RI$mtJ;5(+H>LDIb6T_)#)#`&CT6x%Fo{j8Ch9iw>wA$=96Md?@={$GOU^C zW_vie|CLv_%jJp=GG6-!w5V#-5>?}x0HbPNpP$$zKnwNJBJh}`eionYQh%=AnbHH2hq1bORO`x*Qe6b9y2~yrUDVF8gVkKsoJ_d9XpCe_*>rGa>6K)xosNU38rrDURE=u_q!PIp#RnS>pWGl6ZY7)`u~t>%ngG*^7}*$k7@6$xtXb8P skwA z>43aYs3lk-Ckl>Y1yT7@F`jF{;8kK7!bYLId{iR=9Eoy4aIus+^^mx_uAh#{B@sKm(<1yx1Ee$b^Nd&4yW3w(gU zNi^&qrlMG(fS*(j0UmfFj!z_k0LdK>x)Ukx6j#8F2oedP8-eJF1Bp}*Pbv`vK0a6^ znp_Z14QB*=jD?(N*hCnXQ3(X4Qi)f7jhD(32q1+*ArRdNZf-aPfm5VQV6F-$QLI@| zU_c7KTquKuQVC#C7Kp}e-HNsE$@n|FbZNB5}5(Xg=vr=KrR&nA5x|Y7x&`1sNP4e zU~w9D}z0mZ${eipeXA=3@6ncibZ??F5^H~Y+)(~^x>5v3J35UIcAK&7rn-lnCtei=1u}x0%FhkmF6tX4#Xf(r>&_jp zKIL8X$isq3`ABudi2GIFU7O9w&vE34m025I2cMR7=d@8Y(={QMhjs;dcJa&JDjq4f zb)7q9RF-mFB*`+;wgSd;T(jFeD$s)-+`|2i}D)pB9$)H)~Ry}1?m1pzV z(Ce9W%HYKK;Om(a5Awb^{&}Qb|6c8E-HQ9$-l_9XHS61tO}~F+6O7)QqPhPvGe=Zh z5%6Q6fWUV>ody61~LTN-!mqYAou==*m3-u$<^Bx zI6=#hN6TG)18X`b4QDcyHBBDT@~twna+YKLXB91Zbw2s@Nxk=6q3aIIR^`qF{PqxF+EF_-2_I{nRbn%NF!TdGTA#W$wOQDG z{c7pMUw#a_Lae^a?7%sWrnG3R;~l=p-Z=KMjqa0H@5PFDQZ<$y+y}Xl-q*&4u3Mq^ zxIn{X9rJRI_^O2O6`4~0o$jXpJ4Z@Uf`FX7gTGOwL9ZN7VdUQwjLxw8pCFS;0tckVw=w zsj7M^_Z3gv$*pAO3J{GO3 z5A6NfvSp2hKzOTp2?U3S_vmg%3^N`c2#C!;ebn?O&qy88FY#h=dKc3;%fg1}w6q@Gy)e$-TMtV&5(h_;X}ZQ@4m~8~0{g*) z>wL`qZ$H~H*grE9644k5Fz=NyboP+|MKTypi7pBsMEO#fg;6+KS-U)efXDgXcg literal 0 HcmV?d00001 diff --git a/resources/images.qrc b/resources/images.qrc index 73ed0620..26f51f42 100644 --- a/resources/images.qrc +++ b/resources/images.qrc @@ -17,6 +17,8 @@ icons/folder_map.ico icons/folder.ico icons/help.ico + icons/link_broken.ico + icons/link.ico icons/map_edited.ico icons/map_opened.ico icons/map.ico diff --git a/src/ui/gridsettingsdialog.cpp b/src/ui/gridsettingsdialog.cpp index bfc814bc..3ce0d4df 100644 --- a/src/ui/gridsettingsdialog.cpp +++ b/src/ui/gridsettingsdialog.cpp @@ -1,8 +1,6 @@ #include "ui_gridsettingsdialog.h" #include "gridsettingsdialog.h" -// TODO: Add linking chain button to width/height -// TODO: Add "snap to metatile" check box? // TODO: Save settings in config // TODO: Look into custom painting to improve performance // TODO: Add tooltips @@ -31,6 +29,9 @@ GridSettingsDialog::GridSettingsDialog(GridSettings *settings, QWidget *parent) ui->spinBox_X->setMaximum(INT_MAX); ui->spinBox_Y->setMaximum(INT_MAX); + ui->button_LinkDimensions->setChecked(this->dimensionsLinked); + ui->button_LinkOffsets->setChecked(this->offsetsLinked); + // Initialize the settings if (!this->settings) this->settings = new GridSettings; // TODO: Don't leak this @@ -38,6 +39,8 @@ GridSettingsDialog::GridSettingsDialog(GridSettings *settings, QWidget *parent) reset(true); connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &GridSettingsDialog::dialogButtonClicked); + connect(ui->button_LinkDimensions, &QAbstractButton::toggled, [this](bool on) { this->dimensionsLinked = on; }); + connect(ui->button_LinkOffsets, &QAbstractButton::toggled, [this](bool on) { this->offsetsLinked = on; }); connect(ui->colorInput, &ColorInputWidget::colorChanged, this, &GridSettingsDialog::onColorChanged); } @@ -50,20 +53,15 @@ void GridSettingsDialog::reset(bool force) { return; *this->settings = this->originalSettings; - // Avoid sending changedGridSettings multiple times - const QSignalBlocker b_Width(ui->spinBox_Width); - const QSignalBlocker b_Height(ui->spinBox_Height); - const QSignalBlocker b_X(ui->spinBox_X); - const QSignalBlocker b_Y(ui->spinBox_Y); - const QSignalBlocker b_Style(ui->comboBox_Style); - const QSignalBlocker b_Color(ui->colorInput); + setWidth(this->settings->width); + setHeight(this->settings->height); + setOffsetX(this->settings->offsetX); + setOffsetY(this->settings->offsetY); - ui->spinBox_Width->setValue(this->settings->width); - ui->spinBox_Height->setValue(this->settings->height); - ui->spinBox_X->setValue(this->settings->offsetX); - ui->spinBox_Y->setValue(this->settings->offsetY); + const QSignalBlocker b_Color(ui->colorInput); ui->colorInput->setColor(this->settings->color.rgb()); + const QSignalBlocker b_Style(ui->comboBox_Style); // TODO: Debug //ui->comboBox_Style->setCurrentIndex(ui->comboBox_Style->findData(static_cast(this->settings->style))); for (const auto &pair : penStyleMap) { @@ -76,23 +74,59 @@ void GridSettingsDialog::reset(bool force) { emit changedGridSettings(); } -void GridSettingsDialog::on_spinBox_Width_valueChanged(int value) { +void GridSettingsDialog::setWidth(int value) { + const QSignalBlocker b(ui->spinBox_Width); + ui->spinBox_Width->setValue(value); this->settings->width = value; +} + +void GridSettingsDialog::setHeight(int value) { + const QSignalBlocker b(ui->spinBox_Height); + ui->spinBox_Height->setValue(value); + this->settings->height = value; +} + +void GridSettingsDialog::setOffsetX(int value) { + const QSignalBlocker b(ui->spinBox_X); + ui->spinBox_X->setValue(value); + this->settings->offsetX = value; +} + +void GridSettingsDialog::setOffsetY(int value) { + const QSignalBlocker b(ui->spinBox_Y); + ui->spinBox_Y->setValue(value); + this->settings->offsetY = value; +} + +void GridSettingsDialog::on_spinBox_Width_valueChanged(int value) { + setWidth(value); + if (this->dimensionsLinked) + setHeight(value); + emit changedGridSettings(); } void GridSettingsDialog::on_spinBox_Height_valueChanged(int value) { - this->settings->height = value; + setHeight(value); + if (this->dimensionsLinked) + setWidth(value); + emit changedGridSettings(); } void GridSettingsDialog::on_spinBox_X_valueChanged(int value) { - this->settings->offsetX = value; + setOffsetX(value); + if (this->offsetsLinked) + setOffsetY(value); + emit changedGridSettings(); } void GridSettingsDialog::on_spinBox_Y_valueChanged(int value) { - this->settings->offsetY = value; + setOffsetY(value); + if (this->offsetsLinked) + setOffsetX(value); + emit changedGridSettings(); }