From 44f725f61fcaf2b224c2331c44c9202cd522f4f7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 16 Aug 2023 07:11:07 -0400 Subject: [PATCH] add tooltips, add run/stop/image buttons to status bar, replace run/stop icons --- tools/lammps-gui/CMakeLists.txt | 2 +- tools/lammps-gui/emblem-default.png | Bin 3591 -> 0 bytes tools/lammps-gui/imageviewer.cpp | 20 ++++++++++++++++---- tools/lammps-gui/lammpsgui.cpp | 16 ++++++++++++++++ tools/lammps-gui/lammpsgui.qrc | 2 +- tools/lammps-gui/lammpsgui.ui | 2 +- tools/lammps-gui/process-stop.png | Bin 2287 -> 3982 bytes tools/lammps-gui/system-run.png | Bin 0 -> 4065 bytes 8 files changed, 35 insertions(+), 7 deletions(-) delete mode 100644 tools/lammps-gui/emblem-default.png create mode 100644 tools/lammps-gui/system-run.png diff --git a/tools/lammps-gui/CMakeLists.txt b/tools/lammps-gui/CMakeLists.txt index 28169adf36..0746a4fe33 100644 --- a/tools/lammps-gui/CMakeLists.txt +++ b/tools/lammps-gui/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(lammps-gui VERSION 1.2.0 LANGUAGES CXX) +project(lammps-gui VERSION 1.2.1 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) diff --git a/tools/lammps-gui/emblem-default.png b/tools/lammps-gui/emblem-default.png deleted file mode 100644 index 84fe175a0e00654a6707b2dddcbb7cb29984b816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3591 zcmV+i4*2njP){UcJtgUBv}#&O#+9OLbdeW(kfW` zP>KhuMy*;Ot!@9P^?}m*fL5y>>rs!jN@bnJY*oBX>Hx~!1|5+3Oe3DQS3N*C1C z%u8J||7u^TqzdIll?VnZ5%88^bZP(tW8KWU&@*@%dz$_-+0oVJghbweMxQ2%`V1oz z`JWM3u$nmCe(7FH$V2nzUhKST(Q@}?4a*?Q3XXKXhM~!Bj7It~8tunqYy?H#auoYQ zDDspuQej+Jbu~s9sXfPb;&1!6M_W2h#@Mu9t{qdK+`O5p|5XBuKdG!D1drE*=N5c; z`MsW*rPbKivJ(e8{)(Ql77+GJ_QPgHdK51GHM$X0m(9n*@KRh_dn1}p{{zqN_{mi7 zVAl{-^657=CSN-51jsjtw75h0p3m+7OyjM0dl%F!!JnF*!RsyC8Bh&O_sr6u`KS{} z|6`!%KQujRX);u!a7b=kH}7^_U4I*PHEqLlJANKbBx8>p*r2XIZv+;6jubc(@|Ma_ z^_BOm`ntEddkvs+ z85tYe9v@d54{xT4|A;`tCyBp+Nc%6UzqI;;%kFjUcxxk$bnRxq4bYjk%C8 z+-=E45=jX6x*=_fVdnp{eou7bk}(&b^Y6#EV(b1Nz)&?zsMPopZd28+2Yg6 zqgA2Vm#@6`4%epL-$nOGOGe|8G3xh51Vmudn?)r3U6PrH7_vLn`zE&R{SiL8;(m8= zpls!}YrH@BmkID}<0~k7F925ruiL&WjxffS zzJu6%YA4oy=x3g?u=~Duf75^0ITN_xKH_4-<13dodYjsJ<7n4D!#&6t5h9QaBuyw+ zLMBN;e#Tl6jnD7*6yv(Nji?MX;F|Eqh_{eDw)7iBIVS>vDe1o2ss?XKAc)tGzi464 zyoA`sw3(SGt!*N#hwT4b#BEM6=BX&I#k!R*pl-$``a7<#`2;+Q-{E%pH=LEgJ3d1S zi6lLE%_TSbb|2dYRZCf(2eP7&ZC3bAFX!mr1~x0I#@zEOuf(_BzZ0Rt8pA@B+`F*4Ol$Ef&)(HfQ=wh=`e?vRLOl zPq6wOU&8&%H^L#ivVe>C7Y3Kf4i|afv;>%Z%49g^SCmzwt-o2=0@$v6b&uw`r$&*| z%smjz`W?Sy$$@*WeHQq7rtpk8YTsx( z;)!SuK7C^I-Bc{E)itVG-WMCr zzlaGbcRM_Y#3pk+Yy%ChYs0Ho%wCE0x4eupUsYx*m*T+#*KEejf;uA#(8t9UEAaLA z>}1VNC@*+bRdo}Im^K>iL-XLPm>5cV^AaEwB~FKn5tzvFa4r$5Hzprm@(>|u?3 z;*GDa#YANEyqxPK5(ynV2W^fV=*Hb^@N)B087wY`8&hn3G7t9WU&Ipak0mDAgB~G0 z!s?oY`$O%!u=Y3a#Td_6|G{N?-ZT!L&-vJ&K81a)JB8E>CLs@|q7z)hUDIqOq^@Xu z55XL`eqD`_u*eXn&Fz~o;SU3TG!AiJiP68oa%eiaF&%cxH7nd znX=!`U&u7=j{~EEP!QVlWpKI`q2Y$*4Gq@TK#v4P zYhN?IwCP54549l{i)CrrT$Cbc(?k+~KfVRu+3|5Ek`Y$?A^0 z1ol2j-%cju{S%R41dBtESt`wvj%tyhnc|ct)H!%cms97!DV>A~a=Lqw#BcXLh9_SA zA|sm6-(yznOcdBVLS+@`8|mPgvB`d>n%xg*WK;J*N3ycK8j4HOx5MJG2Q>g|nbErM z8E(T@H{XJ`zN0!=yV*%ZqLcXPE1$>j5BxYY4^?xIT6j&G8JvaQ{>~`tQ+|2Ien6E{ zKReyps(M^LloXZdB=~k*6TNPRST*Hk5g8os#n*nf3N5`&Ii456k4*IA(HB3C*G@d2 znMV_%ngP$yRg{OJ(ggYjd)0)dJ$pt12Y*gmRibS?(RM6eQ&A6xThh&pgf1at@=OF$ zA^?h!$pNg}dOJ>Z9morw%WeJhAH?zQ{aKNu!n)$0^G?p?Q81g~IM#B6?eFQg4{xBu zXKm`0xcX3MM@NcxLR@=JorDaTO-KdZYgzY#oERZq>C)!?(fw9sGU4(jY>m zm1sWNG$m1b|Lea&?5t;_#A-&R#dj(%RfK0;*-&5SKGx3U5RD_1pv>6DD@k>O?L3DV zeJ>IEUf$oC_ma^c{0W8e$@#h6uIht~F%RNKk! z(f+2?6>Qn`@^*nINwbv_Nr(hY@RG63=H{rrp7rT-l;2j(E-$UCo9pZy?O)SHJWvzVM@ySTY`1iD>Kh?GQq-`C}q}s_-JgfXSk>9kotk%eP}npCymi0Vw^MZ z4Zd|slLOu`XW?7~Yp+o@6qXerg5(OgA0ds{WKc z$~%|10X!iPFiDtF!gLW32{;WBZf3rs*{GX!nesVTfwXA$f|*KrsFZkIY_A@lK!jN$ z#j;h3ZRXS@((+{KS9Y*$k0cY(6yl>e+Wn^X!f2~@j6F7Hm`NaElTiLOU?Y%kAuBc# zK7Q!H%+E*W*rHNKrnpwR)LTL?fJ9hFL>0C$Q;H(fR7#cD8j%SlNj65N261wvg&r6@ zsU2Y=m@s-=K8_o}rv%U27q6N(3kh|=PDB>WVUXcOJVHb~hItLCIhgZ3-ZGT9yplgY zp-o0cFsdappkf9Hef4or6tNi$MiYcF(Fdpql-3mgebM{|Pqe24h)`setCheckable(true); + dossao->setToolTip("Toggle SSAO rendering"); auto *doanti = new QPushButton(QIcon(":/antialias.png"), ""); doanti->setCheckable(true); + doanti->setToolTip("Toggle anti-aliasing"); auto *dobox = new QPushButton(QIcon(":/system-box.png"), ""); dobox->setCheckable(true); + dobox->setToolTip("Toggle displaying box"); auto *doaxes = new QPushButton(QIcon(":/axes-img.png"), ""); doaxes->setCheckable(true); + doaxes->setToolTip("Toggle displaying axes"); auto *zoomin = new QPushButton(QIcon(":/gtk-zoom-in.png"), ""); + zoomin->setToolTip("Zoom in by 10 percent"); auto *zoomout = new QPushButton(QIcon(":/gtk-zoom-out.png"), ""); + zoomout->setToolTip("Zoom out by 10 percent"); auto *rotleft = new QPushButton(QIcon(":/object-rotate-left.png"), ""); + rotleft->setToolTip("Rotate left by 15 degrees"); auto *rotright = new QPushButton(QIcon(":/object-rotate-right.png"), ""); + rotright->setToolTip("Rotate right by 15 degrees"); auto *rotup = new QPushButton(QIcon(":/gtk-go-up.png"), ""); + rotup->setToolTip("Rotate up by 15 degrees"); auto *rotdown = new QPushButton(QIcon(":/gtk-go-down.png"), ""); + rotdown->setToolTip("Rotate down by 15 degrees"); auto *reset = new QPushButton(QIcon(":/gtk-zoom-fit.png"), ""); + reset->setToolTip("Reset view to defaults"); auto *combo = new QComboBox; combo->setObjectName("group"); + combo->setToolTip("Select group to display"); int ngroup = lammps->id_count("group"); char gname[64]; for (int i = 0; i < ngroup; ++i) { @@ -215,28 +227,28 @@ void ImageViewer::do_zoom_out() void ImageViewer::do_rot_left() { - vrot -= 15; + vrot -= 10; if (vrot < -180) vrot += 360; createImage(); } void ImageViewer::do_rot_right() { - vrot += 15; + vrot += 10; if (vrot > 180) vrot -= 360; createImage(); } void ImageViewer::do_rot_down() { - hrot -= 15; + hrot -= 10; if (hrot < 0) hrot += 360; createImage(); } void ImageViewer::do_rot_up() { - hrot += 15; + hrot += 10; if (hrot > 360) hrot -= 360; createImage(); } diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp index d4daf198e9..e3b7979a53 100644 --- a/tools/lammps-gui/lammpsgui.cpp +++ b/tools/lammps-gui/lammpsgui.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -241,7 +242,22 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) : auto pix = QPixmap(":/lammps-icon-128x128.png"); lammpsstatus->setPixmap(pix.scaled(22, 22, Qt::KeepAspectRatio)); ui->statusbar->addWidget(lammpsstatus); + lammpsstatus->setToolTip("LAMMPS instance is active"); lammpsstatus->hide(); + + auto *lammpsrun = new QPushButton(QIcon(":/system-run.png"),""); + auto *lammpsstop = new QPushButton(QIcon(":/process-stop.png"), ""); + auto *lammpsimage = new QPushButton(QIcon(":/emblem-photos.png"), ""); + lammpsrun->setToolTip("Run LAMMPS on input"); + lammpsstop->setToolTip("Stop LAMMPS"); + lammpsimage->setToolTip("Create snapshot image"); + ui->statusbar->addWidget(lammpsrun); + ui->statusbar->addWidget(lammpsstop); + ui->statusbar->addWidget(lammpsimage); + connect(lammpsrun, &QPushButton::released, this, &LammpsGui::run_buffer); + connect(lammpsstop, &QPushButton::released, this, &LammpsGui::stop_run); + connect(lammpsimage, &QPushButton::released, this, &LammpsGui::render_image); + status = new QLabel("Ready."); status->setFixedWidth(300); ui->statusbar->addWidget(status); diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc index 88526719f0..826252ccd5 100644 --- a/tools/lammps-gui/lammpsgui.qrc +++ b/tools/lammps-gui/lammpsgui.qrc @@ -33,7 +33,7 @@ help-about.png emblem-photos.png process-stop.png - emblem-default.png + system-run.png window-close.png application-plot.png application-calc.png diff --git a/tools/lammps-gui/lammpsgui.ui b/tools/lammps-gui/lammpsgui.ui index 6bda61dbb4..635ec25db6 100644 --- a/tools/lammps-gui/lammpsgui.ui +++ b/tools/lammps-gui/lammpsgui.ui @@ -212,7 +212,7 @@ - + &Run LAMMPS diff --git a/tools/lammps-gui/process-stop.png b/tools/lammps-gui/process-stop.png index 5f547cfee3f58ad10fd7f3ae211f5502aa488576..b85df6bcabe41b94dfdcdae2293ae3f73938f58d 100644 GIT binary patch literal 3982 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 YXm?e3rshHKSw(=pw#kh;Eti=80PVb6tN;K2 delta 2275 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 literal 0 HcmV?d00001