From 72a132bbcd59575c7e16b6d9c7d497dbf9d60efe Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 1 Mar 2023 14:56:34 +0100 Subject: [PATCH] Remove the 'sdi' example It is essentially the same as the other mainwindow examples, showing how to create a text editor. The only special code here is the tiling of the different main windows, which - without any documentation or explanation - is neither very helpful, nor relevant in 2023. Change-Id: I48b92b1cf057f586e0d2842d1c0a3312154e9a13 Reviewed-by: Axel Spoerl (cherry picked from commit 3c104c279911419f3d0a9e6f3ac050e6f3968e7e) Reviewed-by: Volker Hilsheimer --- doc/src/images/sdi-example.png | Bin 28749 -> 0 bytes examples/widgets/doc/src/application.qdoc | 5 +- examples/widgets/doc/src/sdi.qdoc | 13 - examples/widgets/mainwindows/CMakeLists.txt | 1 - examples/widgets/mainwindows/mainwindows.pro | 3 +- .../widgets/mainwindows/sdi/CMakeLists.txt | 54 --- .../widgets/mainwindows/sdi/images/copy.png | Bin 1338 -> 0 bytes .../widgets/mainwindows/sdi/images/cut.png | Bin 1323 -> 0 bytes .../widgets/mainwindows/sdi/images/new.png | Bin 852 -> 0 bytes .../widgets/mainwindows/sdi/images/open.png | Bin 2073 -> 0 bytes .../widgets/mainwindows/sdi/images/paste.png | Bin 1645 -> 0 bytes .../widgets/mainwindows/sdi/images/save.png | Bin 2699 -> 0 bytes examples/widgets/mainwindows/sdi/main.cpp | 37 -- .../widgets/mainwindows/sdi/mainwindow.cpp | 443 ------------------ examples/widgets/mainwindows/sdi/mainwindow.h | 70 --- examples/widgets/mainwindows/sdi/sdi.pro | 11 - examples/widgets/mainwindows/sdi/sdi.qrc | 10 - src/widgets/kernel/qwidget.cpp | 2 +- src/widgets/widgets/qmainwindow.cpp | 2 +- 19 files changed, 5 insertions(+), 646 deletions(-) delete mode 100644 doc/src/images/sdi-example.png delete mode 100644 examples/widgets/doc/src/sdi.qdoc delete mode 100644 examples/widgets/mainwindows/sdi/CMakeLists.txt delete mode 100644 examples/widgets/mainwindows/sdi/images/copy.png delete mode 100644 examples/widgets/mainwindows/sdi/images/cut.png delete mode 100644 examples/widgets/mainwindows/sdi/images/new.png delete mode 100644 examples/widgets/mainwindows/sdi/images/open.png delete mode 100644 examples/widgets/mainwindows/sdi/images/paste.png delete mode 100644 examples/widgets/mainwindows/sdi/images/save.png delete mode 100644 examples/widgets/mainwindows/sdi/main.cpp delete mode 100644 examples/widgets/mainwindows/sdi/mainwindow.cpp delete mode 100644 examples/widgets/mainwindows/sdi/mainwindow.h delete mode 100644 examples/widgets/mainwindows/sdi/sdi.pro delete mode 100644 examples/widgets/mainwindows/sdi/sdi.qrc diff --git a/doc/src/images/sdi-example.png b/doc/src/images/sdi-example.png deleted file mode 100644 index 8cd7aa01288b16083c8765ab6741120f8ac1d6bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28749 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 diff --git a/examples/widgets/doc/src/application.qdoc b/examples/widgets/doc/src/application.qdoc index 0c6839bf4a6..43073a8152f 100644 --- a/examples/widgets/doc/src/application.qdoc +++ b/examples/widgets/doc/src/application.qdoc @@ -27,9 +27,8 @@ To keep the example simple, recently opened files aren't shown in the \uicontrol{File} menu, even though this feature is desired in 90% of applications. Furthermore, this example can only load one file at a - time. The \l{mainwindows/sdi}{SDI} and \l{mainwindows/mdi}{MDI} examples - show how to lift these restrictions and how to implement recently opened files - handling. + time. The \l{mainwindows/mdi}{MDI} example shows how to lift these + restrictions and how to implement recently opened files handling. \section1 MainWindow Class Definition diff --git a/examples/widgets/doc/src/sdi.qdoc b/examples/widgets/doc/src/sdi.qdoc deleted file mode 100644 index eebb50cbfee..00000000000 --- a/examples/widgets/doc/src/sdi.qdoc +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example mainwindows/sdi - \title SDI Example - \ingroup examples-mainwindow - - \brief The SDI example shows how to create a Single Document Interface. It uses a number of - top-level windows to display the contents of different text files. - - \image sdi-example.png -*/ diff --git a/examples/widgets/mainwindows/CMakeLists.txt b/examples/widgets/mainwindows/CMakeLists.txt index 93c9e235145..f8457d50a72 100644 --- a/examples/widgets/mainwindows/CMakeLists.txt +++ b/examples/widgets/mainwindows/CMakeLists.txt @@ -6,4 +6,3 @@ qt_internal_add_example(dockwidgets) qt_internal_add_example(mainwindow) qt_internal_add_example(mdi) qt_internal_add_example(menus) -qt_internal_add_example(sdi) diff --git a/examples/widgets/mainwindows/mainwindows.pro b/examples/widgets/mainwindows/mainwindows.pro index dcda89abaf6..7a53cc6fa75 100644 --- a/examples/widgets/mainwindows/mainwindows.pro +++ b/examples/widgets/mainwindows/mainwindows.pro @@ -3,5 +3,4 @@ SUBDIRS = application \ dockwidgets \ mainwindow \ mdi \ - menus \ - sdi + menus diff --git a/examples/widgets/mainwindows/sdi/CMakeLists.txt b/examples/widgets/mainwindows/sdi/CMakeLists.txt deleted file mode 100644 index f43822dfbd8..00000000000 --- a/examples/widgets/mainwindows/sdi/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(sdi LANGUAGES CXX) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/mainwindows/sdi") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) - -qt_standard_project_setup() - -qt_add_executable(sdi - main.cpp - mainwindow.cpp mainwindow.h -) - -set_target_properties(sdi PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(sdi PRIVATE - Qt6::Core - Qt6::Gui - Qt6::Widgets -) - -# Resources: -set(sdi_resource_files - "images/copy.png" - "images/cut.png" - "images/new.png" - "images/open.png" - "images/paste.png" - "images/save.png" -) - -qt_add_resources(sdi "sdi" - PREFIX - "/" - FILES - ${sdi_resource_files} -) - -install(TARGETS sdi - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/widgets/mainwindows/sdi/images/copy.png b/examples/widgets/mainwindows/sdi/images/copy.png deleted file mode 100644 index 2aeb28288f58ddffdd1d75115f170c5bf2773814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmV-A1;zS_P)3P|jKV4ArrNQZsr&q&3Fam_48Lh`MiYI|sB6GiaYuZZ? zasnKC=d9Ws*vOa?K!llv;~9}LDH=;*C6q)snnH7j#=aB8{{oN_lX)cZ$XJrkAB0_u z!sQ7f5=*1>!|zQrby)$h>)1Bcke)jH%(>@ZE)hRgo<&7f4Jw)5udTzKv5Ch3thOcm zx#)*$6jZ zxjE=2CQwjNfFaFqeBMc>`320FTpYmRPeJsB@I$Z8%>Zil0#HL{*yW1HLMx&9BQ>hew>g`42C!b-4K{%G& zPNKpdi`TSeSQ5jt zz}D6l-wA<00HP?u@AqSEZ4IXsmC*dI=c&nj!3&r@K%3kE+d(!rH~Ds?RumQ0==)XR zsU3kw0Ovao0D#OTfFv_dBoZhqui^lIxB!co0iZTo)dw&I|ClF}JUvZG$*D>XptrLF zi9N;m7cj8^d~x*v0Ho^4m=ue}P^PGYdPu;S8Mtc&=A4=P=T~F|kkV6X0*FSV+&mNt zp}4dH*9HaLW{2dU0UTt+1SmUX21q@ea}t@;xj-PrWmUM?EueooW3GLWY2c%FnE?J> zJ*6hCuC8*3w@NB-xmUnF8@PU+0q)ELXD;m%K&qWYi;j}haZKLWGrnrG9>`fBl6@D%o`^aXzvlAyk=W}Pc`B^ahku5Y4`j}CIOJCBx$u% zLNX5qgK)WA+>l;M=(ES;f!poI@e{8lpM9a6Ogos0nT|fmct-%0O2q-B6)w#;8B$U@ z_bIi*;ou_U#l=Mq_2TiDT=X8flj*JiEiEl>>0qJM(w7a5mzS5}^Z8)2+4y~FX^BG+ z0F4U^3(c|s(4vx3lM#*SPTzP`J2hanT6y)<3jNMtFeLKw^6s-|9N8B@Q&W>$nrBK+ zA`_~b#ukg2H$b09M@J)VZEfEC{CpGp+d-zXy_)|gKy!05p8`rp5L7=^KR-Xu>(*#A zk-EA%=fkvJOdl{E&Bk~~0Hsptb~>HBVoFMHK9sb+zTTOWlOvfHXH#`n0F8}}Zi~f& wfq{WYZEdYHH#b*S)7=30e@0BgL78sX-$OZ87=>`i1ONa407*qoM6N<$g6NH5LI3~& diff --git a/examples/widgets/mainwindows/sdi/images/cut.png b/examples/widgets/mainwindows/sdi/images/cut.png deleted file mode 100644 index 54638e9386dc8af40dcc9a3ee2f57c62e248e406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323 zcmV+`1=RY9P)J0(1!|L=@Q+aTEb7Mu4u}WZlMQB24&|#EVDBq0{%sj+Z+)GGQx0 zAcdU1Fi0-lfEhqCt9ecIzWZ_$Xk-SF1YV<2^ak#QNA=LXgUd}Io1OMRbT7RYGCd%P zKS-r48v%?ldBMA#h)c%T#wHG+5V`$A{>3XcMvM|%P6Cssr>70f(>b}AV>T2D(&VEn zK_HANo+{rrN9){swakg0Ktz^QgDWfxHbzJY6ZK>&doEN10r&$qzrYSODpcQMh*H%o zSOat&76=4-MOF34plx)*)N}VCzH?EPkgku=6VK(8gNL*Np3E)-)CS$Jnai-RudhD8 z(qOgQ?SS}sjv4h}*IqNacG`39XxPWcN1v;!unrFm!4QYC z_Acj^H}`jQVc5OsUVtxVnxKZ?sWw9Q@B`QxpVZH#=NgKbEq?xOmsA>SUtb@%(9v@T zVsaH$PQ-_o)Qm6`=@qvgI2;Z@q}CZRo`stQer>5G8e5my4CXEh^CT4CHjaC}9?{K0 z$O&($1U%8bR;v{dcYhm%^O9V6PFgxKporEb{=Djv}7NhUQZ#8TNvL0_NhN zpdjG!cwn(uKwDk``_Co}Ev8e>XOzzgOoQTEd*;Gmnz9rW3I&M8V#v(QgrcG%P^;C@ z+1bfp?EcBQ$=j!OF1OE1fUdXLDR2(JYL~2dh{}J0;wgy^K9?&YTb2(8W8+7JA12t6 za%7Hg8ovjl(FiTAE%3|0ARIXHz6G;l!311sgoTBKM%*UnGOR4mGqn@!JL9_3Gp~Z> z{(6Z9p5FXo8}~etjeBORPg}}0?N~!YJv1~lfTgz=G8Dzb^Xb54Jd))oo;F?OoGLPS zee{DaT5J+A3>zitarZCFC+`J^U;fkNL<>x4^vOPTl^zTR1GKld!`H@^F|L6LX7M&{ zIA}acIyz>{0a00^F4~fx%15b|k+|p_1^WSy+Zxk*z z((l+8X-U2;oygOcJEspZj3vh3pSpKnaW$YpY_$lC`IPbC@H0!Ad}tF|z0RZAYfnh` z3=gmm{_}^(`7iFdNp1l4dp_;=2p%dvUFBG+@kd(qwpj}i9kWBpkvIuC`Kgv6`dk_f h&$IvkH~dc%_#Nkm8M#Em0nY#c002ovPDHLkV1hsWYZL$g diff --git a/examples/widgets/mainwindows/sdi/images/new.png b/examples/widgets/mainwindows/sdi/images/new.png deleted file mode 100644 index 12131b01008a3ec29ec69f8b3f65c4b3c15b60d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmV-a1FQUrP)IE2xvpcKl890$E8eWxeF8o0mWjmIG{M&7eWO9CVRojsy7@;&dpQ!a9t0J7gPX(5I|>76wd9YM;~Wq>Ghkp6rY@= zsi|pt_x=M#qtRtve?bMn?-1>_C5DBX;{}vm&C%raD|#~il%B<2&`e?uix*V@+JPAL z6CgbQkZR2~6*sGtFK$zbV~w|k*M3m}@OjM5T^_Z^d)w}xJHF(IUAVpO;*`oW;C1B2 zbys585IO4RGepz@rv~8kI;}Y(n3!mCfS7AgQ=I?+DlNG&;!abH5Df(KZTl#;d_@48 zJKJjfX^uQ>h#Iar6M#C8w^So4*Tn<|1^_iEoENLSCA-QKz)fKe6)JLW%zjz|XlmW9 z@suY3Q`{VJZCgNKnyVajp6h`@6-N=kYKbun)^`LT3}hx^wrO>XsHzE2w#B^A1Ngov zV}~hV3>btQ09#E(0CWRWn5~q>9Op*n90161U8$i6fc^Yd5_2;F2sIc&=-PaaDX2~W zTL1&dm}fQw05ax<-uM>_{4Cgt02pUFPqb7NBbWjJ0t`O;#ZxHoL%3#1_iOo5hu6MT z0mxO4x=yW24v?>f-nYV%Jx`{y-lMT`>)O!u6_~SbsQ_#=q-z-e;1PdX7gN*|3t4aE z?!Drr!OKg0ZH#q?HK_Wx9NlHvJdYn4{+`bsH@(TacqVT~0BG|6fti$^=|8_20YcOC e{Jor>rG5iZY$c(Rl?rzN0000RP)CWtKz1rEEwa&Ubd$6s{da=&VIP1;2`BM0`Wb;D z{M-!)vd0-ix#k=pmKgFxQgYk(eOi$0QlJD2NbOI5d5567avIIj< zv@<}9dj`!tE;Q@xs8{wNhf{?zUNu9!u=J3D!C+h_ze{}K1V|htI6?j0>T@UYxhDij zhnKMl|M#(rT!AcZ}eF)wgP_d zAX10jekLr}U#(CrCA<(opAbNs2#S{v>vbjZBPMG2>Dlh2!oC#Mk@9m9Zc z2%^^3CBjkLC=!RpAFqNhVw6pZB#Q!^oqj*T-F(Vw$mLX*nO_ zNX-3DeeTpEomGUYnz~IsN92z9JUkMF)7=lf!HB}*Vw`?29z6pA^e+N~guKQ7E$%u) zC{dC3_66}y+`oN81yr%;K@{IH8|1O-3y*riL6}qGd@SEo}8X#Q_kq zZ|eG3QMpHgF(8Pc07FLLD$kpMaaUZZl&Qk=tr>Kq76&g@g}Kbh`}mD}bLg zSob6#9DIaI(-=7VVTPPm{Z+FbtPVT4Iv?2~9(pg}6TG@z0w%t}gOqRBIG>z~1AjdP zW3QR%ZYsA%*Mp?X$w>b?i;UGgQ?+sSsoXX8X`%zES@sOGBngFV;lVB@d3_10@@V;lg>dY2BN>v^RZ2^?j@k8NdQ$X;_ z_a$H}ZfeJ=gha#~If~qTHdcoJ4Lhqwh-3dbkKgY5JsSA}oWGEOlkpdDqpb%S#7{~T>2A7M zsP8QLl$cN`w?OF*Jo#7bDJpj@!Dj^fwz=d)jlRsXTKwbW85}(HH?VT^u<$rb~rBzaiB|lB=W)A?(%51dO$!?mU^ ze8O#IHd*n50bG}w!BKl4^90wps7K`#)>4RXJ_(`usyx1v$_9j`-;Pq{6K%jV&lNRO%>FPb&x$A5bBEmwG~ zsNAo;tlZJ!2;Bu-bsyf#uSL0b05WG_^}?r@soeJn(y81#_yhC8@e_i|9PXV^3ptdy z4Z_G4qZfz6FCzC2|JrSe-C>#48@AYMyIwNBFNyyFX1QPd5r93<00000NkvXXu0mjf DP*&js diff --git a/examples/widgets/mainwindows/sdi/images/paste.png b/examples/widgets/mainwindows/sdi/images/paste.png deleted file mode 100644 index c14425cad1ff1b2c5628be5769c9e9e52b78635f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1645 zcmV-z29o)SP)3Gx zefpoBhy8x@pP6$JN-2UQgm?vbp2urQDfM^OC?_DeL%RWJmr}mQV`N#@2O9RfK(_`t z{}ccw{I~7(;$U4wL~hQBiYr&HP+e1vKmedn2xTZiDQ44YUa1!^ytGbiJMka6M}vG@ zLrgqP2loG9i`^_G_)0Q7JWOR}B`e8wT^_)0sjwm&qAGGfr|N;V0|+ezNTCh%UA#yx zm%}d>QA&}|=UH4_q);eO)MK@^wUhx^fcS#;fB^tDLmDAYR7=GY}hKA6kOPAcP zuC561)~X!<6GT-k!gJLz@}5tjD3MBG2|?Jgh=y$Das?8ijz6FOD-BH>0V2R=mW1#7 zc%Dafb+w*QOZ4j1tA~UTD5c(75x}xR0JbfV+O`xp2&58N!i*b_Ou6iP^*huzHW7R; z!Gvcr8OqDc&1OD!?ARu~e-17|ECJBj*{Kd4I;3nN2w4!eEgZ+jLQu5L8XEw|vWPgA zt^#0Lco4wc+#EGEH3lFWjdJA3kD9q>HlpG95}EZ=m1y-ptN)rjt$|Ez*CB`q|1$rgVVB? zrhTuowc{78+xt2VFSK*}&LsW){Unn~lv3vU`0?ZDx~wzj&Yk1v(W4wbe3;(eUJ{9f z1T3Ky+yU+X&gS^%luv8N&-msq-zN6;H<^5HH8r836d;2i zMi$(072p5qZ>Vh8NaE}}Opji}iIlOmc?X+Yw)07OC1VMf&t~%6oz60$?T8IbC+FC= zE6VyM05f|%YwGIi0L*nNl`;TID-fW$T5#c=V<;@j=Em6&k5ZJ9d&7MsWd+;Xe@so= z%X~bXX3}54&3G)#YcF^p0JU^FLZOfeE#2xLjsYt8K48JdxS&uRBOHrUx22Yncy@gS z>8!_S|DTwyyiCjXgSZP}yn>`ylz7@9$3iWtfa7VPmemyj0M^GtgvulQziMM4o~aCT z;opPo+4&R7qYk+;M*}DWVQT;uOChBkB`_)#q+A6+Sfwh=^&|RlY=-e!kMI5ZkKD@C z;6z-a5gX5w6g>yi0i}>q@=$770agVN2uuwG7@cUt@bD?; zK3j0A)Rg|7%OH8oYxFCwW^r%olu$Hy-NXMuhl?5?;8OW$_d zPbP%{KnOr#TKwMNV7j}zJEh->%p}lW?Q_jx?V5KpZV_N`@cndOUtjvnnKP!vrO=Of r0*SSrV$g&__6vQz4|I&^4Jxf00000NkvXXu0mjfT=)$w diff --git a/examples/widgets/mainwindows/sdi/images/save.png b/examples/widgets/mainwindows/sdi/images/save.png deleted file mode 100644 index e65a29d5f1735d95d5e96fce818e251fbbc88ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2699 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 FV1kc9>)`+Z diff --git a/examples/widgets/mainwindows/sdi/main.cpp b/examples/widgets/mainwindows/sdi/main.cpp deleted file mode 100644 index 139bc456904..00000000000 --- a/examples/widgets/mainwindows/sdi/main.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include -#include - -#include "mainwindow.h" - -int main(int argc, char *argv[]) -{ - Q_INIT_RESOURCE(sdi); - QApplication app(argc, argv); - QCoreApplication::setApplicationName("SDI Example"); - QCoreApplication::setOrganizationName("QtProject"); - QCoreApplication::setApplicationVersion(QT_VERSION_STR); - QCommandLineParser parser; - parser.setApplicationDescription(QCoreApplication::applicationName()); - parser.addHelpOption(); - parser.addVersionOption(); - parser.addPositionalArgument("file", "The file(s) to open."); - parser.process(app); - - MainWindow *mainWin = nullptr; - const QStringList posArgs = parser.positionalArguments(); - for (const QString &file : posArgs) { - MainWindow *newWin = new MainWindow(file); - newWin->tile(mainWin); - newWin->show(); - mainWin = newWin; - } - - if (!mainWin) - mainWin = new MainWindow; - mainWin->show(); - - return app.exec(); -} diff --git a/examples/widgets/mainwindows/sdi/mainwindow.cpp b/examples/widgets/mainwindows/sdi/mainwindow.cpp deleted file mode 100644 index 734a793035f..00000000000 --- a/examples/widgets/mainwindows/sdi/mainwindow.cpp +++ /dev/null @@ -1,443 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include - -#include "mainwindow.h" - -MainWindow::MainWindow() -{ - init(); - setCurrentFile(QString()); -} - -MainWindow::MainWindow(const QString &fileName) -{ - init(); - loadFile(fileName); -} - -void MainWindow::closeEvent(QCloseEvent *event) -{ - if (maybeSave()) { - writeSettings(); - event->accept(); - } else { - event->ignore(); - } -} - -void MainWindow::newFile() -{ - MainWindow *other = new MainWindow; - other->tile(this); - other->show(); -} - -void MainWindow::open() -{ - const QString fileName = QFileDialog::getOpenFileName(this); - if (!fileName.isEmpty()) - openFile(fileName); -} - -void MainWindow::openFile(const QString &fileName) -{ - MainWindow *existing = findMainWindow(fileName); - if (existing) { - existing->show(); - existing->raise(); - existing->activateWindow(); - return; - } - - if (isUntitled && textEdit->document()->isEmpty() && !isWindowModified()) { - loadFile(fileName); - return; - } - - MainWindow *other = new MainWindow(fileName); - if (other->isUntitled) { - delete other; - return; - } - other->tile(this); - other->show(); -} - -bool MainWindow::save() -{ - return isUntitled ? saveAs() : saveFile(curFile); -} - -bool MainWindow::saveAs() -{ - QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), - curFile); - if (fileName.isEmpty()) - return false; - - return saveFile(fileName); -} - -void MainWindow::about() -{ - QMessageBox::about(this, tr("About SDI"), - tr("The SDI example demonstrates how to write single " - "document interface applications using Qt.")); -} - -void MainWindow::documentWasModified() -{ - setWindowModified(true); -} - -void MainWindow::init() -{ - setAttribute(Qt::WA_DeleteOnClose); - - isUntitled = true; - - textEdit = new QTextEdit; - setCentralWidget(textEdit); - - createActions(); - createStatusBar(); - - readSettings(); - - connect(textEdit->document(), &QTextDocument::contentsChanged, - this, &MainWindow::documentWasModified); - - setUnifiedTitleAndToolBarOnMac(true); -} - -void MainWindow::tile(const QMainWindow *previous) -{ - if (!previous) - return; - int topFrameWidth = previous->geometry().top() - previous->pos().y(); - if (!topFrameWidth) - topFrameWidth = 40; - const QPoint pos = previous->pos() + 2 * QPoint(topFrameWidth, topFrameWidth); - if (screen()->availableGeometry().contains(rect().bottomRight() + pos)) - move(pos); -} - -void MainWindow::createActions() -{ - QMenu *fileMenu = menuBar()->addMenu(tr("&File")); - QToolBar *fileToolBar = addToolBar(tr("File")); - - const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/images/new.png")); - QAction *newAct = new QAction(newIcon, tr("&New"), this); - newAct->setShortcuts(QKeySequence::New); - newAct->setStatusTip(tr("Create a new file")); - connect(newAct, &QAction::triggered, this, &MainWindow::newFile); - fileMenu->addAction(newAct); - fileToolBar->addAction(newAct); - - const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png")); - QAction *openAct = new QAction(openIcon, tr("&Open..."), this); - openAct->setShortcuts(QKeySequence::Open); - openAct->setStatusTip(tr("Open an existing file")); - connect(openAct, &QAction::triggered, this, &MainWindow::open); - fileMenu->addAction(openAct); - fileToolBar->addAction(openAct); - - const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(":/images/save.png")); - QAction *saveAct = new QAction(saveIcon, tr("&Save"), this); - saveAct->setShortcuts(QKeySequence::Save); - saveAct->setStatusTip(tr("Save the document to disk")); - connect(saveAct, &QAction::triggered, this, &MainWindow::save); - fileMenu->addAction(saveAct); - fileToolBar->addAction(saveAct); - - const QIcon saveAsIcon = QIcon::fromTheme("document-save-as"); - QAction *saveAsAct = fileMenu->addAction(saveAsIcon, tr("Save &As..."), this, &MainWindow::saveAs); - saveAsAct->setShortcuts(QKeySequence::SaveAs); - saveAsAct->setStatusTip(tr("Save the document under a new name")); - - fileMenu->addSeparator(); - - QMenu *recentMenu = fileMenu->addMenu(tr("Recent...")); - connect(recentMenu, &QMenu::aboutToShow, this, &MainWindow::updateRecentFileActions); - recentFileSubMenuAct = recentMenu->menuAction(); - - for (int i = 0; i < MaxRecentFiles; ++i) { - recentFileActs[i] = recentMenu->addAction(QString(), this, &MainWindow::openRecentFile); - recentFileActs[i]->setVisible(false); - } - - recentFileSeparator = fileMenu->addSeparator(); - - setRecentFilesVisible(MainWindow::hasRecentFiles()); - - QAction *closeAct = fileMenu->addAction(tr("&Close"), this, &QWidget::close); - closeAct->setShortcut(tr("Ctrl+W")); - closeAct->setStatusTip(tr("Close this window")); - - const QIcon exitIcon = QIcon::fromTheme("application-exit"); - QAction *exitAct = fileMenu->addAction(exitIcon, tr("E&xit"), qApp, &QApplication::quit); - exitAct->setShortcuts(QKeySequence::Quit); - exitAct->setStatusTip(tr("Exit the application")); - - QMenu *editMenu = menuBar()->addMenu(tr("&Edit")); - QToolBar *editToolBar = addToolBar(tr("Edit")); - -#ifndef QT_NO_CLIPBOARD - const QIcon cutIcon = QIcon::fromTheme("edit-cut", QIcon(":/images/cut.png")); - QAction *cutAct = new QAction(cutIcon, tr("Cu&t"), this); - cutAct->setShortcuts(QKeySequence::Cut); - cutAct->setStatusTip(tr("Cut the current selection's contents to the " - "clipboard")); - connect(cutAct, &QAction::triggered, textEdit, &QTextEdit::cut); - editMenu->addAction(cutAct); - editToolBar->addAction(cutAct); - - const QIcon copyIcon = QIcon::fromTheme("edit-copy", QIcon(":/images/copy.png")); - QAction *copyAct = new QAction(copyIcon, tr("&Copy"), this); - copyAct->setShortcuts(QKeySequence::Copy); - copyAct->setStatusTip(tr("Copy the current selection's contents to the " - "clipboard")); - connect(copyAct, &QAction::triggered, textEdit, &QTextEdit::copy); - editMenu->addAction(copyAct); - editToolBar->addAction(copyAct); - - const QIcon pasteIcon = QIcon::fromTheme("edit-paste", QIcon(":/images/paste.png")); - QAction *pasteAct = new QAction(pasteIcon, tr("&Paste"), this); - pasteAct->setShortcuts(QKeySequence::Paste); - pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current " - "selection")); - connect(pasteAct, &QAction::triggered, textEdit, &QTextEdit::paste); - editMenu->addAction(pasteAct); - editToolBar->addAction(pasteAct); - - menuBar()->addSeparator(); -#endif // !QT_NO_CLIPBOARD - - QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); - QAction *aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::about); - aboutAct->setStatusTip(tr("Show the application's About box")); - - QAction *aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt); - aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); - -#ifndef QT_NO_CLIPBOARD - cutAct->setEnabled(false); - copyAct->setEnabled(false); - connect(textEdit, &QTextEdit::copyAvailable, cutAct, &QAction::setEnabled); - connect(textEdit, &QTextEdit::copyAvailable, copyAct, &QAction::setEnabled); -#endif // !QT_NO_CLIPBOARD -} - -void MainWindow::createStatusBar() -{ - statusBar()->showMessage(tr("Ready")); -} - -void MainWindow::readSettings() -{ - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray(); - if (geometry.isEmpty()) { - const QRect availableGeometry = screen()->availableGeometry(); - resize(availableGeometry.width() / 3, availableGeometry.height() / 2); - move((availableGeometry.width() - width()) / 2, - (availableGeometry.height() - height()) / 2); - } else { - restoreGeometry(geometry); - } -} - -void MainWindow::writeSettings() -{ - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - settings.setValue("geometry", saveGeometry()); -} - -bool MainWindow::maybeSave() -{ - if (!textEdit->document()->isModified()) - return true; - const QMessageBox::StandardButton ret - = QMessageBox::warning(this, tr("SDI"), - tr("The document has been modified.\n" - "Do you want to save your changes?"), - QMessageBox::Save | QMessageBox::Discard - | QMessageBox::Cancel); - switch (ret) { - case QMessageBox::Save: - return save(); - case QMessageBox::Cancel: - return false; - default: - break; - } - return true; -} - -void MainWindow::loadFile(const QString &fileName) -{ - - QFile file(fileName); - if (!file.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::warning(this, tr("SDI"), - tr("Cannot read file %1:\n%2.") - .arg(QDir::toNativeSeparators(fileName), file.errorString())); - return; - } - - QTextStream in(&file); - QGuiApplication::setOverrideCursor(Qt::WaitCursor); - textEdit->setPlainText(in.readAll()); - QGuiApplication::restoreOverrideCursor(); - - setCurrentFile(fileName); - statusBar()->showMessage(tr("File loaded"), 2000); -} - -void MainWindow::setRecentFilesVisible(bool visible) -{ - recentFileSubMenuAct->setVisible(visible); - recentFileSeparator->setVisible(visible); -} - -static inline QString recentFilesKey() { return QStringLiteral("recentFileList"); } -static inline QString fileKey() { return QStringLiteral("file"); } - -static QStringList readRecentFiles(QSettings &settings) -{ - QStringList result; - const int count = settings.beginReadArray(recentFilesKey()); - for (int i = 0; i < count; ++i) { - settings.setArrayIndex(i); - result.append(settings.value(fileKey()).toString()); - } - settings.endArray(); - return result; -} - -static void writeRecentFiles(const QStringList &files, QSettings &settings) -{ - const int count = files.size(); - settings.beginWriteArray(recentFilesKey()); - for (int i = 0; i < count; ++i) { - settings.setArrayIndex(i); - settings.setValue(fileKey(), files.at(i)); - } - settings.endArray(); -} - -bool MainWindow::hasRecentFiles() -{ - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - const int count = settings.beginReadArray(recentFilesKey()); - settings.endArray(); - return count > 0; -} - -void MainWindow::prependToRecentFiles(const QString &fileName) -{ - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - - const QStringList oldRecentFiles = readRecentFiles(settings); - QStringList recentFiles = oldRecentFiles; - recentFiles.removeAll(fileName); - recentFiles.prepend(fileName); - if (oldRecentFiles != recentFiles) - writeRecentFiles(recentFiles, settings); - - setRecentFilesVisible(!recentFiles.isEmpty()); -} - -void MainWindow::updateRecentFileActions() -{ - QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName()); - - const QStringList recentFiles = readRecentFiles(settings); - const int count = qMin(int(MaxRecentFiles), recentFiles.size()); - int i = 0; - for ( ; i < count; ++i) { - const QString fileName = MainWindow::strippedName(recentFiles.at(i)); - recentFileActs[i]->setText(tr("&%1 %2").arg(i + 1).arg(fileName)); - recentFileActs[i]->setData(recentFiles.at(i)); - recentFileActs[i]->setVisible(true); - } - for ( ; i < MaxRecentFiles; ++i) - recentFileActs[i]->setVisible(false); -} - -void MainWindow::openRecentFile() -{ - if (const QAction *action = qobject_cast(sender())) - openFile(action->data().toString()); -} - -bool MainWindow::saveFile(const QString &fileName) -{ - QString errorMessage; - - QGuiApplication::setOverrideCursor(Qt::WaitCursor); - QSaveFile file(fileName); - if (file.open(QFile::WriteOnly | QFile::Text)) { - QTextStream out(&file); - out << textEdit->toPlainText(); - if (!file.commit()) { - errorMessage = tr("Cannot write file %1:\n%2.") - .arg(QDir::toNativeSeparators(fileName), file.errorString()); - } - } else { - errorMessage = tr("Cannot open file %1 for writing:\n%2.") - .arg(QDir::toNativeSeparators(fileName), file.errorString()); - } - QGuiApplication::restoreOverrideCursor(); - - if (!errorMessage.isEmpty()) { - QMessageBox::warning(this, tr("SDI"), errorMessage); - return false; - } - - setCurrentFile(fileName); - statusBar()->showMessage(tr("File saved"), 2000); - return true; -} - -void MainWindow::setCurrentFile(const QString &fileName) -{ - static int sequenceNumber = 1; - - isUntitled = fileName.isEmpty(); - if (isUntitled) { - curFile = tr("document%1.txt").arg(sequenceNumber++); - } else { - curFile = QFileInfo(fileName).canonicalFilePath(); - } - - textEdit->document()->setModified(false); - setWindowModified(false); - - if (!isUntitled && windowFilePath() != curFile) - MainWindow::prependToRecentFiles(curFile); - - setWindowFilePath(curFile); -} - -QString MainWindow::strippedName(const QString &fullFileName) -{ - return QFileInfo(fullFileName).fileName(); -} - -MainWindow *MainWindow::findMainWindow(const QString &fileName) const -{ - QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath(); - - const QList topLevelWidgets = QApplication::topLevelWidgets(); - for (QWidget *widget : topLevelWidgets) { - MainWindow *mainWin = qobject_cast(widget); - if (mainWin && mainWin->curFile == canonicalFilePath) - return mainWin; - } - - return nullptr; -} diff --git a/examples/widgets/mainwindows/sdi/mainwindow.h b/examples/widgets/mainwindows/sdi/mainwindow.h deleted file mode 100644 index 44062cb4a27..00000000000 --- a/examples/widgets/mainwindows/sdi/mainwindow.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include -#include - -QT_BEGIN_NAMESPACE -class QAction; -class QMenu; -class QTextEdit; -QT_END_NAMESPACE - -//! [class definition with macro] -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - MainWindow(); -//! [class definition with macro] - explicit MainWindow(const QString &fileName); - - void tile(const QMainWindow *previous); - -protected: - void closeEvent(QCloseEvent *event) override; - -private slots: - void newFile(); - void open(); - bool save(); - bool saveAs(); - void updateRecentFileActions(); - void openRecentFile(); - void about(); - void documentWasModified(); - -private: - enum { MaxRecentFiles = 5 }; - - void init(); - void createActions(); - void createStatusBar(); - void readSettings(); - void writeSettings(); - bool maybeSave(); - void openFile(const QString &fileName); - void loadFile(const QString &fileName); - static bool hasRecentFiles(); - void prependToRecentFiles(const QString &fileName); - void setRecentFilesVisible(bool visible); - bool saveFile(const QString &fileName); - void setCurrentFile(const QString &fileName); - static QString strippedName(const QString &fullFileName); - MainWindow *findMainWindow(const QString &fileName) const; - - QTextEdit *textEdit; - - QAction *recentFileActs[MaxRecentFiles]; - QAction *recentFileSeparator; - QAction *recentFileSubMenuAct; - - QString curFile; - bool isUntitled; -}; - -#endif diff --git a/examples/widgets/mainwindows/sdi/sdi.pro b/examples/widgets/mainwindows/sdi/sdi.pro deleted file mode 100644 index 30d07b06654..00000000000 --- a/examples/widgets/mainwindows/sdi/sdi.pro +++ /dev/null @@ -1,11 +0,0 @@ -QT += widgets -requires(qtConfig(filedialog)) - -HEADERS = mainwindow.h -SOURCES = main.cpp \ - mainwindow.cpp -RESOURCES = sdi.qrc - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/sdi -INSTALLS += target diff --git a/examples/widgets/mainwindows/sdi/sdi.qrc b/examples/widgets/mainwindows/sdi/sdi.qrc deleted file mode 100644 index 0a776fab4d3..00000000000 --- a/examples/widgets/mainwindows/sdi/sdi.qrc +++ /dev/null @@ -1,10 +0,0 @@ - - - images/copy.png - images/cut.png - images/new.png - images/open.png - images/paste.png - images/save.png - - diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 501fee2d19a..a1382a11076 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -11480,7 +11480,7 @@ void QWidgetPrivate::setWindowOpacity_sys(qreal level) its parent because other children of the parent might have been modified. - \sa windowTitle, {Qt Widgets - Application Example}, {SDI Example}, + \sa windowTitle, {Qt Widgets - Application Example}, {MDI Example} */ bool QWidget::isWindowModified() const diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 256e97396b4..a5f7973994f 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -278,7 +278,7 @@ void QMainWindowPrivate::init() \sa QMenuBar, QToolBar, QStatusBar, QDockWidget, {Qt Widgets - Application Example}, {Dock Widgets Example}, - {MDI Example}, {SDI Example}, {Menus Example} + {MDI Example}, {Menus Example} */ /*!