From 81471d8132441473b904294ed840d49b8ca2fd33 Mon Sep 17 00:00:00 2001 From: Vorpal Date: Sun, 8 Jun 2025 11:01:12 +0300 Subject: [PATCH] init --- FC_utils.pro | 30 +++++++ extlist.cpp | 59 ++++++++++++++ extlist.h | 33 ++++++++ extlist.ui | 97 ++++++++++++++++++++++ icons.qrc | 10 +++ icons/logout-52.png | Bin 0 -> 697 bytes icons/loop.png | Bin 0 -> 21339 bytes icons/open-file-48.png | Bin 0 -> 609 bytes icons/save-50.png | Bin 0 -> 379 bytes icons/save-as-64.png | Bin 0 -> 696 bytes icons/start-64.png | Bin 0 -> 1297 bytes main.cpp | 13 +++ widget.cpp | 177 +++++++++++++++++++++++++++++++++++++++++ widget.h | 117 +++++++++++++++++++++++++++ widget.ui | 149 ++++++++++++++++++++++++++++++++++ 15 files changed, 685 insertions(+) create mode 100644 FC_utils.pro create mode 100644 extlist.cpp create mode 100644 extlist.h create mode 100644 extlist.ui create mode 100644 icons.qrc create mode 100644 icons/logout-52.png create mode 100644 icons/loop.png create mode 100644 icons/open-file-48.png create mode 100644 icons/save-50.png create mode 100644 icons/save-as-64.png create mode 100644 icons/start-64.png create mode 100644 main.cpp create mode 100644 widget.cpp create mode 100644 widget.h create mode 100644 widget.ui diff --git a/FC_utils.pro b/FC_utils.pro new file mode 100644 index 0000000..a237778 --- /dev/null +++ b/FC_utils.pro @@ -0,0 +1,30 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++17 + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + extlist.cpp \ + main.cpp \ + widget.cpp + +HEADERS += \ + extlist.h \ + widget.h + +FORMS += \ + extlist.ui \ + widget.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +RESOURCES += \ + icons.qrc diff --git a/extlist.cpp b/extlist.cpp new file mode 100644 index 0000000..ecad9ef --- /dev/null +++ b/extlist.cpp @@ -0,0 +1,59 @@ +#include "extlist.h" +#include "ui_extlist.h" +#include + + +extList::extList(QStringList *sl, QWidget *parent) + : QDialog(parent) + , ui(new Ui::extList), m_sl(sl) { + ui->setupUi(this); + ui->listWidget->addItems(*m_sl); +} + +extList::~extList() { + delete ui; +} + +void extList::on_pushButton_4_clicked() { + m_sl->clear(); + for (int i=0; i< ui->listWidget->count(); ++i) { + m_sl->push_back(ui->listWidget->item(i)->text()); + } + accept(); +} + + +void extList::on_pushButton_5_clicked() { + reject(); +} + + +void extList::on_pushButton_3_clicked() { + ui->listWidget->clear(); + ui->listWidget->addItem("report"); +} + + +void extList::on_pushButton_clicked() { + QString text; + bool ok; + QString value = QInputDialog::getText(this, tr("Ввод данных"), + tr("Введите расширение файла"), QLineEdit::Normal, + text, &ok, Qt::Popup); + + if (ok && !value.isEmpty()) { + ok = false; + auto ret = ui->listWidget->findItems(value, Qt::MatchFixedString); + if (ret.empty()) ui->listWidget->addItem(value); + } +} + +void extList::on_pushButton_2_clicked() { + auto sels = ui->listWidget->selectedItems(); + for (auto &cur: sels) { + if (cur->text() == "report") continue; + + ui->listWidget->takeItem(ui->listWidget->row(cur)); + } +} + diff --git a/extlist.h b/extlist.h new file mode 100644 index 0000000..7d9ba15 --- /dev/null +++ b/extlist.h @@ -0,0 +1,33 @@ +#ifndef EXTLIST_H +#define EXTLIST_H + +#include + +namespace Ui { +class extList; +} + +class extList : public QDialog +{ + Q_OBJECT + +public: + explicit extList(QStringList *sl=nullptr, QWidget *parent = nullptr); + ~extList(); + +private slots: + void on_pushButton_4_clicked(); + + void on_pushButton_5_clicked(); + void on_pushButton_3_clicked(); + + void on_pushButton_clicked(); + + void on_pushButton_2_clicked(); + +private: + Ui::extList *ui; + QStringList *m_sl; +}; + +#endif // EXTLIST_H diff --git a/extlist.ui b/extlist.ui new file mode 100644 index 0000000..042840f --- /dev/null +++ b/extlist.ui @@ -0,0 +1,97 @@ + + + extList + + + + 0 + 0 + 422 + 368 + + + + Игнорируемые расширения файлов + + + + + 350 + 50 + 51 + 41 + + + + + + + + + + + 350 + 110 + 51 + 41 + + + + - + + + + + + 20 + 30 + 311 + 321 + + + + 1 + + + + + + 350 + 170 + 51 + 41 + + + + Reset + + + + + + 350 + 230 + 51 + 41 + + + + Ok + + + + + + 350 + 290 + 51 + 41 + + + + Cancel + + + + + + diff --git a/icons.qrc b/icons.qrc new file mode 100644 index 0000000..72f0355 --- /dev/null +++ b/icons.qrc @@ -0,0 +1,10 @@ + + + icons/logout-52.png + icons/open-file-48.png + icons/save-50.png + icons/save-as-64.png + icons/start-64.png + icons/loop.png + + diff --git a/icons/logout-52.png b/icons/logout-52.png new file mode 100644 index 0000000000000000000000000000000000000000..83af84b1704d6411639b8a37b86696ad26e4fed4 GIT binary patch literal 697 zcmV;q0!ICbP)xVtnQBXVXO-R2*_oZ0?wxI>ptIh3>!EsU zs+$rb$GCU)7)iWC3SX0gp;5>_7bzGf+TEUwB`@CDF!!UAq+riCL?)bsfsLsgjLl4g zV9X>`nM~PZw&>tZCRB904A7e?M-rZ~jy8p7V;yZ81-sKg_-bxPB;jz<$s%C>7(eKo znl2RhP0VZQG>ZkBsTxlUGKB32U+94ahMJkJk&NYAo(l%ZBxU`8W%p7rKqi6uL4CXt z43J5_RlkgchamxxeQpZ^h!hNC30s9=nhrz~KC^@ig<+ZuL=xYzUOzn-Oc|iyKCH3C ztEBK_Fs)BnD_WY_cXL{oPU`>illsw3CqlJ2Eub?2^CgyW*_lvnj&pQ^yMmL#w|sAH zeQ6&_Na5Gep0OT{Dp@EGjn-y?EZtMEw|GnoCijqQBM%J~itV@y|*G~4# zxcI%V&-eF74?XUEjWeF-dCu#+UPRqC)F!*icohHuGF=@FV*r4H|AhiXaPY^z@5l-G zgV;mI+zWsx9^n5$(uln8gC8;_mp|$L5&>;N#;X>ipEz%g)BbLDc=3Q`V+3 zBLJ`ix*FH-`ev{H_Gz-b_v>P3a8l~u2TJyR&c8Qlk~t%9CD8T8i>eUmn6MA)5*0-R zztu_sRFUk_M?f1iRFK`aF!Cc2zX5@UVrZiOR`$Uu*Yz9Erlu86vjt}Vt)-;#{=-!>Yv&No3TBdXA7^%;&pR(N z1L1|tAm1WPUq$zawW`wi{?17waR_u@*|DgR6XwjQXdHVtGa9JQCZ8c@4lYEuE< zX7Ex?LVQlI7DNlGUo^Q|#VFxe7v9a=2j==na1JZE02-XTcFs10qoRDJPl8_rzaSm; zG`q4=Eqs*xu&%$pds4wt3d(t)O@`FD+N2@mW%k7qySMCSy-gS)2CP9v{Kn`f`XJs_ zJ<3Tw9Gt^m;DUmS9p=%h0TQ0FJac-8EGX0P5$x6dheUhFpR7<1{OCD3RZPZy#&cHs zMRD#;htDzKNj77I_;1qE;jaB(_i;Z zUQxMk6m60p^JDSx*eCg(s!wDipYd0}HdtzIB3X?+yu)mR4nys#1oXT_iEK`r`DVRb zzctC3%9khzZoU^Fub1**LJ7q|ei6T{>iOk^0k(3m_mX8uNu$!DTH^6fot z54#=b&AKf9;(K{Iq%J@auV2)VYFa(_h@hTXOfYXg4C! zjyS5VIZCQ*s5d8*_O0+L+oPV)G&6~eK}xJ|%&)z2ZR0saH!Wr^8k|zLi(rMx4m8Gv z<#yF`_pd~Fi?S_R#Yn5l0Mse*jvbxyg!0$^fU+fK63CZ}CkX9{7BMbK1gLN1FdnO7 zWH>ycays_>=(%F`$dE;twqCml5!CGnmLEY*vAmvkI-bz`OIA8xd+jm^_Xiu}47nYr zAIge~<_>&$j;km#xDeNKY0{{)bgWR|GV>THm(J~+8=qIO%<yz>_w@@%b6}6yW24KdwWTLOjy5Phue9mg0fM^+A%*$znw>Nu9z6J#2S&aTV4ni zgVKkYTRPKA@NL-^wUj{KKHQ@|OOlQ2md`mky2jI-R==|`A9^zNcPwQWfwtBE-Wd1r zh{7Wu(YxP?DbZ*r1m=%8U20W)O|e^s%X@?HS9?6bsvci!N64@4vvP zI%MAsCHkprGXsr?5-|{U-E`!**>(n4X#!}qs469GTE5+dCX%T4%Bi1`?kiT>DKjup zG6&IN&yHaeaQuUZ@5~J4`?Eb!nSNtj83Ibo=Gmwhe)QBy@%9ZxVa3RMd*wWYTac9q z=iB5m_+A1;nU&iBGe<$RB$?N)l-Fyt}iGK3i<%7pv4YUcN7lNf>dT%VvwV zbmLjZPvMmTszSp~kN(LO61cquC2Oc+il7}_K4~K9NsPC7!!4eJ{uZ`N7_mcANAWk^ z=9oYR*d|yVVrcC@6Sg>@SDKluz$lM6x-oN5)HU}nEObsb zA!4^&bGI0t-*c>!s%OCv;RPMa1f|RJmLnI)9Wd~tH+BtRX5v9#mk$Yku~*JVNRE?F zW^hjOmD#f8R&xO|lS5LvJ=5F#{!r#QjwKJ`UUqa>UbkhA^y05DoH@AbOou+^5Z5Fj z%t~TJ@-Fh!>QIXk%JwzV^;l(fv~^VI z9Sh<4QAhlyIu;D^UYwM><=W52mOXCoxCJKoa2)jO)uhsR6MLk0w5UsLW%_quRlN)= zi9r??NhFg23{ZNZMg5hCq~Kt`v7aPHHp-RT45dYOEmz0|Q|lGBZZJlr9qAh{>%g_@Hr@S!G(PG$B6>;2YCMV{ibQH1f{f@ZJLgXcWa}& z;Y{fQFh-`C@p@u96S_m zM@W9UqmjSMuQF=A9`Kl$5k2fE_OGlYm3mbB5`71g!>9-SdcxZmrj{OAr zIP}^%NaX0V37+VGDU4^|L7jjIq78XDAm4inr?h2JBnc`KlV(=Dj_drmy5@foE5*~) zch8%6Zel$eBz-UV}np$L^LFo1h!XyXo}?{9>Os8^dmE zPwFv0^OBq}Sym;?) zq){?V+m|sr75d?2c?rsbOf#FAyBYyj67OlY02)|;*l3xp3*c|>Z5zBy<$aGcx5H!f?VB3+vb>*Hv{U4}-@JrLoHc=}{xVbG?ut znjPvhng#CcgpuVlR&q;fQ@eVy0uhkY?OXttWRRY%q2k$-jSYjrOgDpn$i~rE>3}BC ztEL{We&6{86ufFF$&4doPzOtp|7hkw7=s-fZRd~;zYoGHwFsUM_lx?~=aJNA>Ni#; zA2Ca3?d!w$@4W$;da+{|id8oE3RvOoF7S-%SPOcHfBm<0vKHm}(XrUYsO&6ac)zK$ zmUvocLuK}~n5pB9)3TRRIwO+&6~dZAXeSHw|0I^D)(~rp)dN>gm-H|^g3`EcC;Gh7 zQFVFZ(omA3$DD;~9vQ`|v8B_c+AcJ~gI0%1JCDA>gUpjtj;xShI35E^gaFZF6fj$}fMlW5x2euZw&C z#ESi{q?RIadgdZ7EAhER#P2iVLhi14b}~pAhGgn-lX~m9hc)oi14Hh^osEYj> z`Bwa)0M2fwn)3e4%@Hv97(07GAz>&eKV=pb1lBIk|1@LQZFyLG!F1#<8|_2F6V8n( ze>=dy`deaLP=fWadO~{3BGW*GRNbIMuQa!R2@;{QTTY0YljGQa-|j2=m0EY^Kqq2` z7z4Zks10I%oyP@wE=f8$%ncUAzy4s{lH@D$Q$$%;h$=Uh#@ ze7VHuj1rXS*SufJbr1~c_Jx~rP=6z(vt^)c77zNKeAc2B306MowbVnlTk}6j)!~za zwsqXwOfJ^ja`iIYZnv2SDgHWayBlwXqcDs(9$BWry!PGzS|`rMK%ID-m>rZspv?x$ zlj+AJfW~Mb-K^{ao%L$AUPg$g3u17_bY4wijMFNM0opie#yS9QOfDN*+ny0awk?Cr zXj=0e|AOQAcgk(r+nB2L0nVNnCUmCfXh~SJXhDLL;C3@cba(lUa;Q{UPX@Ww`iMjV zx%A??J*K*OZlb)(W%#MZo$v54EW<_QPWYDEiJ<;cdKVBURhR-p!^)PRukl z4*$mgK|QxMuQI5K*7_~DaarY$CJ=UPXdm(AQ+(CB6^mA8t_HI_Q4RtvmVmj2_SE#K1(DD#Y0-al{g@fOYk-N{_eG{GIH4 zg_Dn~+R7ACJtOIl)LJ=bt4;r=Fd`p5R*PtEe_bZgzry6n63s-lKRbI~Kyn2xuWaY0y;9d0t$F+4s!?t<{r;t3+j~#1Rl&ck}^GtJu z`fHJ?Q`8t?0k87cmWMg2OwcU)ZqEng4eu4dgrUe~GmAkM!Rvy88n4vf}d28K)%TH`?+L&cwwg7b~8|Snqs>y8> zR;lkb&X%6@;%S6R^LH{uzI?E8p*WXxWPyBSz26gX&(#{VP68O>ZZl7Ez6bFH83i^m zLqpu|mOFiTGZF)ui8z==e5T*V2h}puexRyy$}sJp56_3GMh(!c7+ROan522e3B@d5 zW7#xGdq^Gy4@&5oc+5&p{NTo6wJrG-?m>^Qabyn@18>qT&`j9RVe<}56V0Eln;`m@ z7*tvK`#q0}oYtQ^PDHPhSZ3Wkk(%Q3)F=0IO=JX6e3ds6J@~dk zy;>=uAvG3FPn)knl_vSmQ^4NHL1*|7ot77O>RC;b!o^e|`Ke=09i7Z87?$TGb&f7( z(Baz++H=l|@Q9X8tae-X7;uXC0h(q~MnF<3X9Z z!Ed16PFLtYLx9M_NPL*8o2#84&q7mT9R1CV>tHnkVy7rKV=n9tX*VLn^KYOo)-0lV47Jj_$*5N1A*OZtUL}>St?3{B|AjVcuoO7W@h}$C~FYEZ* zm&_kEWa_8fEwK)#Y}svJNC>@asJHAh?i=rYu_hgs3QE|g)$$TWd#WeeOv)sA2d>FoiuxYY+zugGf@Uv`{nXbAOwmss`ZRZ#Du_Kz0g)sTGlMVP< zSpSp(RKv(#d%+lTx3(}_rD12KoztbyZbip9;k9}l1lGVhg+g)jf)Ry16~rFnGJd&x zRlWCxGCx7KOG;Zj8Xr0SRC$Uk7(zewR;;e-6)5rNO=c(}%;KC7h+AfiF_AR*OZuc% z3Yz%=oFJSdUuPGf_<4i(sq$T-br&Ah{`FYds`a`P6`HGzIL+PLh_3gjA>j*5mS={M zZDY)g?PlgX$ToEwP2lTlT}Oo+Z4z|3|MH`{b1LfEIw~9=80wk#Y@}zy^y9al=*Fz7 zh7H=MOUW7h0JvWvRx0j?3$Tfy%4HM(N%jk@`Y954*GM#Ff&dvP7muz+_Aq>~RPcOy zuqW9{ChJ8u3)C3d$XN%33tUiT=eS9`JEfZp@7>iIH_XFnx@g;6E9CfT7t;D?1NWV! zPuyvl@f&2jr_=#s^nLSH3w4YYIKwgdiyxv|>ie!ehf)xP6QlEYY9x!FWBvrRo&_2;z^)iJ4 z1|q>i#^lFiL+x=E)f~o;Kr6tV?tfoS$Z5NuXr7&?SuQLya#cI;yNhnH8sxJ>@-uxK z?j*_HU;ERQyVqF7?Xs@5pYd={mT?#l21tUn)0bdK#$rfFG*?D0I9Ix#6#3}7UIXfR z6%#HfzfJ7{m{8gZb9_FN9yo#Fb1jMG@&jJyw7J9FNR;o*<^7H)DI=}2X-YC$;-tRmNpK%V?<5U( zOWt1?E}eOx|6&$6(j?W-cI{bi?k9CP94_w0P3W96E>|&#U;EbbVQj80s@m0tAYw{< z+1{ie(q5q7plp|71w+x_ByLIO~EVM$hIv6YwO7W4Aoeo?_jU5sU zMOWME(RvfpdT+zOIRldzyDKs74sZWDuk}$m`ht8S4n@tiR8*=yN z6L}+tx7r#SlJ-2y;iy2$Gtsv<=5ZCQ-h?9oup!x$>xi4SU*@G3R>Gv}B|GYPIXM}s z=9>PXe=w|HHB-yz{=PnAzBTe3hNT}CBPi!SAGv5Pd)vcFMMc$fXXkk!#4_jlr#peF zkG``Tefjkq_BI*pLDDE0K(+rwn^7e!Q(~`SGrl{YB6dB3yCY6~WjnHpD334WaRv1w9u zC{2{|5fe@@8-0Q9=Kzg7Xt=;2Y382FZ8`s*bhENV-9QEi6nzA3VNn-;oiy8^-KVq1n$2{}=Z2D6pTIlhZiJjsK$k-PY9yq8Wolpbn+HbdZy4sRx{c zfRMKSUdz|&gxJORkqR0bMTW=Euby*K*aRrpW_Ciero>re(+jm-Y~kzzl9}}(YVcy$ zZF;H%%(!(goqT5f6#_z|`c9P#3T%TM5J+`lhwe!bbMy_RXb|kE6cO-y+G{fTFBI~0rR370Sf!S%r8JS8JN)SEP>Qg z5lRcM82dW=f22$^0TF3Q!){=12k4TaySniNLgH&cL*U z5x=H^?X+`8J&y}HIL6Fd@Jp72gbTU+z@WpgbOptvK~hv0v$}Osq>!+adAp~13lBI< zealM%{gbNuGekGI(!Aw;y!{N|8-+#Jrz`ZQyL9+TIN}!zFtu%A;L{qgVP2!Je%jB> z(h~@`HYbP6MyJm?oOoUDJmTaW)^OwhH$TlRp{bWB&S8rqcbEh~q;DpuoptCiwXa{A zpusG`gnee*784vO!Gw;UO>lDp9?lV2H%BtC+VGEQ$AD36@ZE5ZM@}?4os-)^OEad` zzP*(Cn6{=~ir4X~p8SCD-!?LEx1t+DCde_nE;;${txN|uclqq)VB%SY5~I;y6Nh1P zlOBO-6Q@*E2_J0vwhP)8BbA_6qogE1|4Y)vmz#<)ajB?uCgrIT8c@9(TYIgjy~=hb z=D%qbj-^L$dL7}`4B>!l=hZDtmuzxSS2QRWl%$TZJ%h@mhWp7xKz{5Da3pD(Wcn z5vPMPUFw4nDawDmErh4%kLI>0H$n^R+*DmBh*Tr5Jp%D^vnOo&O{HBj7H#P@T2;`* z$fH^bn#<Dluh_fk0R1=s0IW3K8(H+6FBMeBJE|WZP7NeK4Ki z&+oeEsi;;VOuZqfSC#XPQvG_K=)e5e&!DPT))~2Ek%YVxJ^gQJ@p2XmYc%(`tE4)l zA%Y8~0o`B|+b;M+JBISuYY)J$IlUz*fYvD5+1LV!`46f(r<$bF^2!_aY!dRbakft{ zZIU7xuSil+9h4UPlRWdhcpp`XfN_>Z2SoT;X7~?)M!Q#0FinC}9gRbF$}4PSnmhpl z6bU01e#RU}9eHFNp1q0G5s|brt{M0EXk_EReL^2_N-ruf2%DV(}l08M{(#EBN9A zRVeK^y_rIanV$c5!=?C3*^7D&mtI6LafNN&%zM6hMaKz_IyPnWRJ64?266C$7qJ3k z<*My?D?NYrH;Bwpz+1l{HLj_53MXys2F3yZI`=tTnUbe|&#yIEY~(mx7-< zkbdOVdLad*Rk5HaB}^5+c_xu9qf}$^nKiOem}#U-=Js z+z&8=9y8I@lm2RS|G<-xvoLIZW~%6SeV^gH+NDkHdkr0PJ6Nt{zV zOa&D9#6tw10ys`MG{irtbZQ*)6|CSd0nn4AFs4ns?)G=quKCs@(_>O~p+{FNgaWN7 zLZNCgRQEwh`2?>8bKhDIeI@uxcS#DsoTs#Wh&Z?D-t#RQ2T|EjMdQnGWEC?`{^-lT z46O`6GRSfsl)}48%r!g`31*+z$U_8ByWMB@HIe?VEbMK?m7%(KWBbWcDz_{_OIp}W z6Vzx%GSkKVpl!;B>IT1hS9(r?`(-%KmNEjaZ|uIVF~jTOQ>3>q=ubMd07vOv8<=>X zh*fd$u#2e&M||a-I8(zvVA85jKzDs=iiGd;E1*c zm@>7xqum3m>x#t7zQ_P-!t#MS03!igdRsMvtS8h^J{kbPoz5>z~=bPwS za-ep7-L=c`jf8Cc9a2J-3ovJx_cxoJTrYbA&+lLWd`RC(18nm+iT~F7y6reU#u+-( zuE!F8z@i2{dZc ze#?5xSAVMlqGPLaA@}40B%4)@WO#mc7?K4v`pOji)2B9H>C3H7>a1h*&mEJSMrLp zZGaSfNz^2w&On;DNJ@*!X2vda?Md7v=>h z!zvhEQHf53_xl#yoG3wI%s32T;>fMaUTw8wUwZX~uZ8P?N3OowCr~{YiSqTBGC*?_ z^6yBaqiK)n02_bh3k%z`ouIm|T!VKRf3#MaDYT_=>yiUA{lysL)p5AeMa_}TqsEhQ4{0vHhdQozbi~d)N6g7oX9y_^AxB1`cz+IXA5==4?^7W~vdMKa7y%G_e~VO88A%+0 zXp*4XTWPbuNm{n6Ab1T~BJK}-yJ)%k%9hIdFByRT{GWoN5{^IVrGbaB1J_7nAIh)1f3u{}F0hi}k-qdaGL&#VBfFw^!vJpgqeUkbSdNM`q&CJJsU zP6|>4jEf*}R=Bt6HR!{i71YEUN9rtQvfP-ek}GkZ-j(2|Ublku4G;+SUQ*)}fDFwUT`B+z_)D`bdZdy;(yLANlZ~e`{$9Z6R zl8BH3$~+m7@`FO4oigv#$N-lTxZKMQJMbp}hZryX{Rq*iA-SAQ*Yjg#N&NwOy#Vf z!{S7yo~`l*Kk%b_Xu1~^(?k@U7DZ_S0`}M}RN_}UjW`HY---W>$K_-lnqCdd4TM=s zMAL$z-k@8#d9ePjLtpPA5i;|Bg*ly0P)W<) z!vvJR^1;w;d(FsQUwpVJB%90h2KZN5!`VmKn=Oj)>34t=W5(z!B_1#LjzG>do*K^+ z=Ak-v&O%=ZA1;#3TN0OEBHzU~xw59;q=}_e1KO19y{|!r1QBqLGxoi^Mbu*9d%}yT zx9XP$`$SU+@ny*;Qpf(P@qwmadgGHVN3Yolyu#Wm_+=;qFh+`>oMLLAl;82Wq5?ux zi{&ekytK<*fisGqm_9&a3?SWKy%Q&f_q4BSP73n<&p4*`cVy}@3;@!5H2PA~9|KMs z{GK!qU)M_k*ixGR=&xFbOx>&olHLj~dWpJWrAkJmeS$XNP2g_V^aiA?#QaOHk)t*f z+VEspP&wt@g1woRSX55)-q9-B1d&|SmZ5n}c{W>l-b#jia6*P;h2YabV(|sXwe-jx69KMm!HJ15!p{53Wc798p7ny0xmS7QO}=u2;2Yp;P{9bnlM` zoL$2iK$*#1mX2BuZU~;I!)>I%6J>gvuN(xjk-NMg>n=W@ z5#WEBx)r|{>A1uJobr@D+6oL>sGBOi7z@sm=sQ-idY)yxva_!L< zkskoTyLAF2^nn(>>>ZYuji-`E1U;M|OU0GTgWbkUruddr-{qyzTd1UzxQt>+@V&@-G8l~I%Sk>K=Equjyetc2MiO!@#&$dob zPF@x!02UJhRxLpE{!$;+WkuYIq7z0`nJhh5{@^nXgi^kT0Q(4#kBYb|b1$we%#jB* zFKjIrAT;Yo@t}DA9qW1r%9kPyobE|)n}$l(J~ImPzX^`dJ(k($!3ZBS9g^j4{UHG> zDH0oS{!VGiuVO&9HNkK#?-KpLTg5{_`&Tj~e7K06`qp^n z?wK+G0FKkftFHc!g)Rs$Xas6O9m_#A$V*v3H3A>*xC&y1F$2i^xNn;bQI7ce5?vnu?Fi&sTTY?rAF1+I(g3p+Tqm}9MvB^OG9s)azxSBw zLSRk%vJn$YHo>qWC2^zCD~YV2tnSMfms{;Oihcv(JcM!OA7sG*Zt}w(=`3&;pyEH3 z41Dsde01{>+jmz~)vwOg&Ih9rGITRHKyEd@k24+JmmGwK5zSq&9xjpmBKY_ej^$te z=5

;#&o$*M!_<7wTi8cN`xE8?P{Sm#OgYy{NXMz^@XD3uxj>e1EQUUh0oKo%5Dj z&4T6qCvQJ70aIyekobE{#WW92#g1Gqdm*053Z!PLx7=39r}FN9CQIsV(b)5?28gq% zh47vw-ONS^)tVptym&j>MnD({ZB~lQt_91l)_XKLf4`+kMHSr>|l z7*f#`_QTI+fsL{g-=oX(pY3C7ZBcO@jI8{DBo>#qX#|&~ z{%mzB9d+mQxuxy1ebF|*>x9vim=~=H8?^4e>~s5L6zI$(jQ1NLqHn0=4Pg~>|6oCJ zR7@xubQd01!zQXZft#f9bZq5coBdR@)*ny(?LU56I*#%VB$?8}H~EK~Te3+51dX3l zEcx0wH@!O8Yk+)eE&C`%ZfDm8hQMl^krPs>SW{o3<8WaMY)xlD5d8rp;LBFO?+B&S z0XN#ufuJ+X!3PC#mByu>m>3efQMOb2=Dw&G;*?l)@}(|{3u;b;QsG+qJKCp;6dEyX zb&!f?-#(Gwg(PYj$R`2tmzr@E zcHi!{cA;Z)ky5xHWK*|qlaqs@GU4?sdgb@Akf9#9(v;W;hw3F3ttMX_&B?5cp4Fo-4@4VKM9QI;-q$k)!F#| zvJil~+2dGKU#ygZw?qm`eMT2=L82F*^R@Qwyw-SHw$32Y0@eiy_M!{O6wVL6;qQ;{ zbRMzvHsP(`#r69Mj!Ld&&1Z=3zsn`nkOMNq=!}k-N?HDyg&hod1qFn9^V&4g?7YkW zs{3wch#R~WLd{9Wj7Bc}${P>Kb3D#fP1J)~pGyABE|Kt(k2%abevZE=9Ig+5N7$`X zN=39Gq?8@wFpI+gAdYlKh-vp%+#PQBqgnvFjUl^JW|%0|@M+hV&wLh{b9&1l71#S^ zim%B;c)bNdetA{3!!1r|w}ijr^SIS{^t;y`4p_^oL33j=+G9WCo~A};fYlRY#31%F zTw8m<#?rBI?`}Wy@1C!ainind1dYPL1@{wACq{faIXb)cyZ&|k!h(_wD-9=lDGKXZY%l7M42*uB-i<554! z7V8s|1olJaT9Xd4>-o+hMnCd|I9L88Og;v@R|G<~G~MdO$J56ca_6R~sS*_Dc%TmD zl7Hx52up@9d;T%fc6kQ@PzZ`9MuonNK&HI-Y*2~61NY_0?AE@UKdt?J?6AnJVk$+3 z+`yb7?6`_oZ(?1b4s;wB^Srs*;M!oU03#iP&O!q_Q0H5Pnv=P{?@UC zgw5a#cJ_`}QnaesSJox&s`(6|FlK8}h+A1>df8qSbKlJaE)Fpcsvx;g+_}LU* znG0@~uy?m;8T`G<)|}7cEi7`xL0#j@Yo}>oK9xOs5|E3sQ=k1971LJBB&Rv>gXHT0 z5td6+3$_K`Nd{02Ua-T#teHD|oeg@SjcdC|wP3~-Xo1`oCdVEk@)GSFs6CyP3wi>s zuma7}!0f7Gq7uCJEeuqlfJb+IQe$uqSMiBlu-IgI6O97?9v)~7`Hh^4Qh_UWPq13D z%4pNNfITM^X}3Jxk@&MuGCK9#&+rOE0!cmtW0V)L?GRjo5ZB7bTi~@mP|I}jT3>Wm zp>qp6M7j&ou3?i#{`VIs!32|m_o%v34Qd6WdoJG~0G3L$-B)~>p^YTSvfKo!slhnD zoPFK8_|F1ywq4_PeCdp-`>%CIq~>vs8>#Zu1hGBO-2DFKTKek3Wsv^#kF5e|SA05I zwXyD{osNe~AL*yxzdOW(E4I7x&lMSDB?n;(8~$a1J$lR5FPkY+?T8Qc)*pc@Fa(WF z&8rSK5kzwYIxXIe1Un%#syR?%IlxuR$Wg!gx39Q=Zt{o$%(_u39wo<-g!yaS8e$;z zor{xGLS%qI_{94ea^+7)J?U=Iho|6bQ(!lr$Pb}fj&DDa zE!<|h_G-%i)89`JAfF;hYLd2se8Y0-AsY#grpBV(x!x$xwjF7o^{)%WREl<$zq@k@ z_!I^H!!W@e%GPOwhD;B9{No48C1%=i;C2tot8+Q6Z~$^GNx4H8Ao>Wi^A;`D94mo0Si7rrs#mp zW98ro^W4)lhc7--J4yAXMp&i}#j?~gdcmK#_|b|AQ0s%k*V%*Faz3&`|J4U~P44UnE; z8|^-lJv^KlI}gkWrk;fg9;zf#fDSuV>fcr`?4aSh!K0(x%KfkdQLu^MSvpxQ+_jpu5 zhS^T)hX<`ZWwm$VZIB$IBm@WlgfVMpPiuSG(;_wI|5aTjZiUKzlpK*H z2>ck*Az8~qukOf(eh83P8uQxe^D=&b02NjZB+?aM4;_rW~L3UdoBtb$C|*0&u3V^Yvf=zg4fe(6 zeJU9>H?OGXxnNOm?=I*@;GV{zBwvvSWpDK7f$#UC!n4aQ>ho6yQGXfU^!QcY@mUKA-%zieVtj6Jv+jyznzPK6Bu--Hyh7LO5{)ljss^ti zN5#_-dzAhJ&z?lQce8gUn*abELgLWXHd=e>SH}j9rk}h-?Q7z0BIP~Y3`xFv zsT)3ORd*)K)Aozr|MZ5vNtXhX6jcMi3rp?u#{772PPJg?dIgfbVvi{Ev^7ksp zHa2#;ap0bKO?1a?x};nm+ECf#C`rL@r#K%i@Mad+U&&JEL`A2WbZkIIy)YZ0qKiZQ zp{;hM)%E2+Ey&eB!pSL0KZ;wS6G=;R6Pnxsd-kc@ywD($iuJl0#UR-?9-^PXwfWyc zj!Iw9jlE!8QBNiy_%?k)#n4d(8I?-+(yG+4Hfx>GjpxK(%jP_WtIy7|f(V?+UO5*s{$BO$pExAf4A4baiJ~%>uYz1?O)3Z7 zgO>YOk3KU%$>a#he~aXzqDK7~HMblCXWjV}d>xYd8=5V`(TNa$#{EO^g;IDLF842+S~sXy}kk~W8fqNaq`_)HqlnOf_JFB z7aSrMP|dzlb#qM~`X0iD%@gVa6DhSc z5b-&!ZNt2X7oFEhhPQ688CZ1Pv98iJ$tJU;^%xiuID+VC?Lph`Q`QnRS^l{izKcY| z6o2$KC>Q=>z9|ulN(dG^*mFSs{%|iKj+2opj{L}{CXrSD`-;lB(q}9a__rD~spo9j zX&>7xK_~q*=!b=dzF{=8O}$7Z=1~QgMr3(Z6sd)Mi_~kq5q(wdo5}zal9Zv#?qg5J z;L31PJ$hm+zt$_E@GEl`11^MB*^=(DOyTW$$|D(fk&T#ys}CvapFZ}3Rj@F0SfMD$ zZc!BEXgI=XRxGd7q}sJzx%fEDD9VfGwEm(_Lb7%T{oTy;iiO-_6XXcNFhJUAUox{p zBx2Da0RNgpqEfaZKOAz=b}5#K3FRhXG)%M^g5a||(nGztImm=$d3(o_V%qlh343VK zs3Zmytl<3tvv#z9z;--yj&{Q6jvm(Zbsq0AL;#a~N14gvx6U>^pQ|w4Fh&7h9r;f^ z{mWNNL_gCD(P_z$Am%yiJ%;m~V}afYHO<98(31)ZBj7$GPE@uqTYy%WcyU1MtsKBY zd0qDzZTdR(FPb?>*+L^;QnE59;1+a_9mJEXG$wezfK|RPKR~EmK{6a3GMO+(hBExF zZ`?F67OXAO3zKtJiT?{dL5%odlF`S^0xn1xKCFNE8**xrTzB8d8jbTvh$-sL_b&2< zZ420QZtO4FS_kU_4%Dw64=LsytY3{7^?(XoEVF4^bo=oSps3(WCj4pNzoU!-V!7P` z#q02@*s|=1do)1E?c7oMkl4RU^oX)04cigO=>sRvoZ{%mD%Hr@*F9E!vdM28q$wCi z;_&ly(bXvknu-h>p#6FgxRt0($(AKhlbb~O7kLKCi1{h#T^!ea`ziZT#`)X8<)9Xd zbE^e1b$T6zC!lszn{t^p(LTqe%TmXUdnVR3aa{b4#1bto z`|d4K2&X=sK>F`Y7_J%Md4hgX4tE;o^b>@g;Ay2!(z!^_(iH=btG7hj+$q++U0-8( zQ^73X!{4rUr-ge-SoRZ}^9-;K&CrdevJA^~qf7n}^M3)H4rB45jTIWF%q)X*S)g%F zrkxsKAL}fxb5s$Ha~-e{yQXaeLWPVXX;eS*yaCunBB+ewTEuj%{vjxFtz)Ln^xvh6 zp6$N*``{lDnq)uXEJm4)-59bC7$N1f7}d`UK4^54l=BndI>QJ(5N0rp|Iu2%h`Q*| z1gH2n|7g)#hSJ7!K!st9H-M2clIIOGYZ*j4 z_4wc)37I8+(}|g%$M6b5iHu~WVTQcn4M3JiIdf3X0X7-NI29mUdiL(H>8R%gcP=U(mE>W#R`NojQ?G0X=j*J@Ol7myI^<&kYzH0r)gsd z!e5P}j3LIKHSVVhx^U2XPDQ9e+1omc+c}NXTN}8I7>iNkBbbFs_GG+_;XTtFdB_`p z9FWnxN*g5z&Bjss0S{`NdAisyy3UR^FeLN*xW9E4w{sfj3kb_luEF-6h61x>1eeJ` zwi)KgTiyWVh>YfKwo(B+Wt{~$kKU}%2Fk62xWc1#lmLrS_Oj06I+j`6KLuEha-wmZ zttelUa%LLm$ZOsJ6Pp2>VGb1r8zP8q@?U{C8T zZpU;UMH*)s!t*G@tn&b?h%rRUX|fJd2=Z*sYPe~FVJMFij+4$5xQE_Mm%(hb4&(Am z=9_ z4n>)-4J^<&hgyem(WY_AQ2qeyVV%W&lGbw)@6!Uz0(x5K0ooA0DEXG@MldhMb-abxUSO%hGw4m``{lkT0`H=y8h+B7p?PTtVb9t z!}*DIkV54bdLtsJlrt0M0${Uso{YXIw~{2O$k-%bn@DCMLL=#+0F)snv zV7ry?_L}Lz$ugXJ>mY^98vtWc&ZEQ_NI2#Nq$#DOcv>5{Uu!wQI*tps%;eVjKp*QY z?%%YY<491Aavy~1b3B**D3>zd*4LV^0tg9hVo%zbi*UYmmXFy0%w}JHE(2(_4&%Z_ zlMK&1^WWV%ONf}R0?;aUr#I7q>j}qm{ts;du9o3cS_g4yeg_~Vq>O*c2>t{37O>Si z&vyC&vw4dZ8fUb17#AMez!;Q8_~0K3s>C$GCG_THU4-Ol^aCg2WI%$9OCSch@Br%A@5JPCfD#7^XV z4uCdsFzw6$E(3~kS!)-qM!8T%u+%z;>zLmG2ss(fTvC(*FIs2Wfj+=>#8{;XruiX5 z`Arjy&&>As-?I^|p|2*mk#=4Nt{{wqzw#@#aDos1;pcY%B0}TzCdN!)I^k{H{tnzo zib^RrKKRIGmBtxIj3@BHzcaFa2SDTOL5!<`>wx~*eC;gSfN-S@<5BA%u5-Krh!{;! z0aPL!Vx46t{tDbgA0Co{Y_ksIxTr2mh|yg$6*IIG7YufXP7L+yu*-cHnmU@O>G`ChIV6*Leew2UHQ7xD@55 zgm;3__BJBiLy9|PIIFG0xR25V6A&H+imkImQWqKkZDIf^rU4fcjb`glq_|v0@U(Rh z*L^+*AP64ivI;J zCH#Z`Hk6;R4}*O0&mVr#%|qJAS-_pZVb)o?;5p!S+IU3D*B&Ul+bpDG>w(J5 zv0)^S|+c>|E=bO}R9aSt%S zI!hO|194z3yYZy&Cy+bZ$a%oSKo9FIc|n*&DUZ{{NYVrU1ftc113X2FtGo%%Z{7eD z09{E>-eoGv_kcaD^X!7xQSPG$l~Teg>oEC5lbnz606zF!)^V(96PEy$M0fs&>z-{0za+&h8OpoXVVpg00Nh7t6N3?E zqYSssl11BqhlnvvN_fXQj0Ii7*HM0r5B`N}F-1(3A^gQUhzk#I0Nf5~BjXT$44h(} zC5zS)W1^JMY#k&>+Q@$*+=CDPJF*4nZ5<+qmLq&mN~yLE;=;!p0N0_+M8R{3@gtOD ztn*~a2f#Qfqscl*5Pa}2STCa7KpBtwJQ&vzZvfn<(&ZGhmCI3n032kUCkx&r#_{?7 zI6#;14V1g_!M~8KL72%}?w5(QTZeJs<_&=BG+j;~wlEptTHs*oJl%A!lya$ch+NTT zuE-4j{uwU}Yfx^YKb10oR_ib>8vNqmx=dHnllM3u<@*rXM+5CBM@t!Ntb=5mHgP$^ z9Q>PqAy|X(Gqy6vPtkN;(i@6IO%X9Ju?~@Kx`Znc=Hj32 zeD^BCWcqQ8lyI95{%%+J9RSyDs>EpG3}XBMB6Q9<)JQ26)*-URZ~GU7XAy2=D-Zi7 zKCZj`LgBJT6``5&z;}RQ)_FSNO)2F->k!$XO?(UCcKkD)k5a%>z%5cr(mIUGAAYfL zIiX898MqR-2-wXyPDlPJrR-%LqPw)2$tZW>pXYqj3jCIKX3H>Munyz$k6$ocPU#Z% zN0>~y83@}F!VOYFf9nw4q0LMIevW^Z^M~>l!d)o8kW$uJ$8q_~FB&cox{{u3U?Rdb zglC?>AEkuTtwZc8ZRWp#pW&b5e6b4U=k(%U8OSEs6Fs?9p1K>hImoNz7GT?lmZvZ8ql@d-3piWk4 zGoyeipvXFl>#}Vqi-1a6`GYUxbJn~8aG|2h=|d~$lD;c2l-&FuO`()YDNA$k+Bu_f zdee)Qz|q!OT$j9nQb`dH%3$8K4&&U1ya8~br7awTaxpN8>~1-HoebgTEWTbKw3*2W zcU$Lhow6Qy47gv0u*^D)b35VPA;*| z;ehlv{e{5q*uugn|G#pD%^LuhH*^_C(Z*p2eGuMd3ol7I8?19>gD&OEzS^{@`$T(-#RtOizF=g0}64YdwYV1(yT{($flr}IbOq{rnOZvdQ& zf*60J-8w|xdk3KorG_FF%W1r39mu&{@&>@UD2VY_QfvVFSx3nutq4m=QG-&$-+4wR zdYk16htC0UE+Vvr2Y|0x=ZLV)z%rBsF_IL~;xCdc^b(U`00KAg{W-bL9!j18oC_g{Y& mv7T1eQNnr=-@DMcF#CV4a<8jSjK0000ug!ON zxoN^~bt+-}_P6Fo67W%KIBz$rj++LA;ljT*pQ?oMyAnJzs*c7B5Z1W`bQH;^q2Adj z0VTM-Q3Be(jj!fA+hEiTMhe_;jR)qRl*m^i{VL#Q4#?m_|%S#aQC7xN`_Us zCfvIee**;fhm-ekAV>2$TBR$|0_J897!f1gl{v)=fmLT8I9G|q3rQteCSdkjFfl!s9|Wy1ahuVVfZPGmtAVi<6$AV v7CvewREt7*)qJ%(dGm!rp-?Ck++_F#NGHpt5Nk#*00000NkvXXu0mjfjQbJB literal 0 HcmV?d00001 diff --git a/icons/save-50.png b/icons/save-50.png new file mode 100644 index 0000000000000000000000000000000000000000..f78bd737df1edaae683ddd41aa4b310d355ff3a3 GIT binary patch literal 379 zcmV->0fhdEP)4UZ`LSawnI}z?!kL$E6f1H71VLzx&DRSi^<}iWGNFxA>f3(84Ej(?#1p_* zX*~9laU}tP;d(MByWPw^EEHP=yUU~}g56|7i@4U~|6c&@WYQJEb~0&;U~`%DMewoD zj6%c^-bNw9P5Ka#sU_lqhZ3>*DuY1S-ST5F5hnFp-Y|%SR(}JEq){Lu6h8%)L@54~ zXGw&nl89D6K{v&Gm6dx{aFLJ_ZFYEY(R%?;u!vMhBA#IxtqK_}&#;VEg^ZSGSVn8i zqXloSg@*g~F&YsQ`7rd!yB>_jGq_+<#gJcm9c$n8hk?S7x+KuBttC z-UZa#AeOcdP{KRH_+1(A8#PZ4nj-|ivfT#=;ivy&2;n>7=5>pE_O8z{!ZSknHA?}? zcy~}NA^6dbaCUv3wHil-;6ru-EG`}&7EcI%wj-STH@CT87~f_kAR&ZrMwYO=w2)4v zc?n>=x>?)}5-x>ZN_a0D0k*ufAdFu|kkG9O31N)FxK?`s35$4gt4iOW2?^oG6=D1x z>MkH*1gC`X+qjv~rsjo^gMeu=AsYd6lb}NuIu8MJk)R_8DEp!4q&1;10b0`Y*IosR(S9F1@ENZ2G3(lY~VEgs8D0OOi4 zTpmS&P~%$IE?B<=!siykj-C@E!IL(@`H;H=Ay~B)JkWEnB79NUj@vHLkT zcMHSILiPz&r?Ys1S3|nP=a4%}@Mw59fz^;ZTkI1agzdl}3BvfX%zw4aoxc*`eOh?u eWlMyE>5D&nzWNEd#$K5K0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^DS16z6k00eRM3n7qkH6RI^VB&)i1j!_V5~5M_ z=&rhcr|NVbozs)tMLhozFj3slqgZ6LqRi3V^o{J3? zTxnFpC|2QcTn#4TYB+`KnUpG61eY4sU!iM=lht`0fAW%8#|P_C&nqm)9JKD1jG7SZ_kRwRzu%|# zBbmQ_@V-Yv!vM=M2j)>W6!hn49OphhwA$xro$@BF$bo=QOT$^Rrq)M zd4dT5hggm|cuOl8bz)=eg&o$OBHsiApR*iuU=8q%Y}An-zsS-v4SSu*O(&t7Ng8TPjT z1nhO=g~Tqf9CM%r{3;oB<^vLtG1x}(lY?b;goY)SV-7rx70IYGk4!*D1n=A}kjQ10 zV-EayO)~1tV)FMYZoZWAZYZ|_tR|<%xfCF{whn)&@KUZ zdV5=FOCkXd(_mf;q1Ns2%3MpGU<-k_l-Us)Toyt(Err44{w&MaI-cm?Eq7_|65W=< z)nHaK>W$bG#aGX#-)-jj;}9AgHbZ%Bhlw{|)5**Y9oL@Qh958Meu-$s4%^|JUWg=j z-{Z!Q{=c=M)@RJwbIGXrcQpFPTvt8xaX1Zt5}XXFozCE zMokDC?U&P0uUzht7{~fqjydRWCCO+fkxrDc9COegi;~e!qE?j)EXN#Y{_k-D`cUT{ zkice+W!M9TYORJlhAJFp8TOzPm^LpWPMZ|79_)RBWw?QkoJmd!&KigBj`W~p-aA8& z#Nub3j`ec*en2w<7Bz)GElLl{dE{>gY6;XGiZ~{4Of{@s9^!EG1D(Lc2s?@vvDzBQ zNt32Je2#b<@JvC?jaH2HD0rFn4tNq(1T;h^GmxZ7Tu-A<&fxPW++V`?WpE8#-xCq8 zbJ=oQhw5g(nI;>lE!ZU6 + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QApplication::setOrganizationName("TOR"); + QApplication::setApplicationName("FC_utils"); + Widget w; + w.show(); + return a.exec(); +} diff --git a/widget.cpp b/widget.cpp new file mode 100644 index 0000000..7b1da1e --- /dev/null +++ b/widget.cpp @@ -0,0 +1,177 @@ +#include "widget.h" +#include "ui_widget.h" +#include "extlist.h" +#include +Widget::Widget(QWidget *parent) + : QWidget(parent) + , ui(new Ui::Widget) +{ + ui->setupUi(this); + + setFixedSize(width(), height()); + + QSettings settings; + QVariant sett = settings.value("extTypes", QVariant(QStringList("report"))); + m_exceptTypes = sett.toStringList(); + + m_path = QDir::currentPath(); + setWindowTitle(m_path); + + ui->pushButton->setIcon(QIcon(":/res/icons/open-file-48.png")); + ui->pushButton->setIconSize(QSize(28, 28)); + ui->pushButton->setToolTip("Выбрать папку..."); + + ui->progressBar->setValue(0); + + ui->pushButton_2->setEnabled(true); + ui->pushButton_2->setIcon(QIcon(":/res/icons/start-64.png")); + ui->pushButton_2->setIconSize(QSize(28,28)); + ui->pushButton_2->setToolTip("Исключения"); + + ui->pushButton_3->setEnabled(true); + ui->pushButton_3->setIcon(QIcon(":/res/icons/save-50.png")); + ui->pushButton_3->setIconSize(QSize(26, 26)); + ui->pushButton_3->setToolTip("Сохранить"); + + ui->pushButton_4->setEnabled(true); + ui->pushButton_4->setIcon(QIcon(":/res/icons/logout-52.png")); + ui->pushButton_4->setToolTip("Выход"); + ui->pushButton_4->setIconSize(QSize(26, 22)); + + ui->pushButton_5->setEnabled(true); + ui->pushButton_5->setIcon(QIcon(":/res/icons/loop.png")); + ui->pushButton_5->setIconSize(QSize(24, 23)); + ui->pushButton_5->setToolTip("Обновить"); + connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(calcDir())); + + connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(close())); + connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(calcDir())); + + // m_exceptTypes.push_back("report"); + + QTimer::singleShot(300, this, &Widget::calcDir); +} + + +Widget::~Widget() +{ + delete ui; +} + +void Widget::on_pushButton_clicked() +{ + QString dirName = QFileDialog::getExistingDirectory(this, "Выбор папки", m_path); + + if (!dirName.isEmpty()) { + m_path = dirName; + setWindowTitle(m_path); + ui->progressBar->setValue(0); + QTimer::singleShot(200, this, &Widget::calcDir); + } +} + +void Widget::calcDir() { + QDir dir(m_path); + QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files, QDir::Name); + + const int n = fileInfoList.size(); + + QJsonObject rootObj; + QJsonObject filesSet; + + int cnt=0; + foreach (const QFileInfo& fileInfo, fileInfoList) { + int curProgress = cnt*100/n; + ++cnt; + ui->progressBar->setValue(curProgress); + QApplication::processEvents(); + QJsonObject fileObj, fileRecord; + QString filePath = fileInfo.filePath(); + QString createDate = fileInfo.birthTime().toString("hh:mm:ss dd-MMM-yyyy"); + QString lastModifyDate = fileInfo.lastModified().toString("hh:mm:ss dd-MMM-yyyy"); + qint64 fileSize = fileInfo.size(); + + QString fileName = fileInfo.fileName(); + bool flagCorrectFile = true; + foreach (const QString& ext, m_exceptTypes) { + QString s1 = "." + ext.toLower(); + QString s2 = fileName.right(ext.length()+1).toLower(); + if (s1 == s2) { + flagCorrectFile = false; + break; + } + } + if (!flagCorrectFile) continue; + + QString crcString = "NaN"; + qint64 crcValue = 0; + if (ui->comboBox->currentIndex()==0) { + QCryptographicHash hash(QCryptographicHash::Md5); + QFile file(filePath); + if (file.open(QIODevice::ReadOnly)) { + hash.addData(&file); + file.close(); + crcString = QString(hash.result().toHex()); + } + } + if (ui->comboBox->currentIndex()==1) { + QFile file(filePath); + if (file.open(QIODevice::ReadOnly)) { + QByteArray arr = file.readAll(); + file.close(); + crcValue = (qint64)calcCrc32(arr); + crcString = QString::number(crcValue, 16).toUpper(); + while (crcString.length()<8) crcString.prepend('0'); + } + } + // Собираем информацию + fileObj.insert("Create Date", createDate); + fileObj.insert("LastModify Date", lastModifyDate); + fileObj.insert("Size", fileSize); + fileObj.insert("CRC", crcString ); + rootObj.insert(fileName, fileObj); + } + QJsonDocument doc(rootObj); + QString jsonString = "Количество файлов - " + QString::number(rootObj.count()) + "\n" + + doc.toJson(QJsonDocument::Indented); + ui->textEdit->setPlainText(jsonString); + ui->progressBar->setValue(100); + m_jDoc.swap(doc); +} +quint32 Widget::calcCrc32(QByteArray &arr) { + quint32 crc32 = 0xffffffff; + for(auto x: arr) { + crc32 = (crc32 >> 8) ^ CRC32Table[(crc32 ^ x) & 0xff]; + } + crc32 ^= 0xffffffff; + + return crc32; +} + +void Widget::on_pushButton_3_clicked() +{ + QString name = m_path+ "/" +QDateTime::currentDateTime().toString("yyyy-MM-dd_hhmmss")+".report"; + QFile file(name); + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::critical(this, tr("Сохранение отчета"), tr("Ошибка создания файла")); + return; + } + QString data = m_jDoc.toJson(QJsonDocument::Indented); + file.write(data.toLocal8Bit()); + file.close(); + QMessageBox::information(this, tr("Сохранение отчета"), tr("Файл успешно сохранен\n")+name); +} + +void Widget::on_pushButton_2_clicked() +{ + extList dialog(&m_exceptTypes, this); + auto ret = dialog.exec(); + if (ret != QDialog::Accepted) return; + + QSettings sett; + const QVariant val(m_exceptTypes); + sett.setValue("extTypes", val); + QTimer::singleShot(300, this, SLOT(calcDir())); + +} + diff --git a/widget.h b/widget.h new file mode 100644 index 0000000..d7b4fc9 --- /dev/null +++ b/widget.h @@ -0,0 +1,117 @@ +#ifndef WIDGET_H +#define WIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE +namespace Ui { +class Widget; +} +QT_END_NAMESPACE + +const int BUFSIZE = 256; + +const quint32 CRC32Table[BUFSIZE] = + { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, + 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, + 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, + 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, + 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, + 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, + 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, + 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, + 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, + 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, + 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, + 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; + +class Widget : public QWidget +{ + Q_OBJECT + +public: + Widget(QWidget *parent = nullptr); + ~Widget(); + +private slots: + void on_pushButton_clicked(); + void calcDir(); + + void on_pushButton_3_clicked(); + + void on_pushButton_2_clicked(); + +private: + Ui::Widget *ui; + QString m_path; + QJsonDocument m_jDoc; + quint32 calcCrc32(QByteArray &arr); + + QStringList m_exceptTypes; +}; +#endif // WIDGET_H diff --git a/widget.ui b/widget.ui new file mode 100644 index 0000000..3b3bb29 --- /dev/null +++ b/widget.ui @@ -0,0 +1,149 @@ + + + Widget + + + + 0 + 0 + 610 + 849 + + + + FC_Utils + + + + + 20 + 20 + 51 + 41 + + + + + + + + + + 300 + 20 + 51 + 41 + + + + + + + + + + 160 + 20 + 51 + 41 + + + + + + + + + + 230 + 20 + 51 + 41 + + + + + + + + + + 20 + 110 + 261 + 23 + + + + 0 + + + + + + 200 + 70 + 82 + 28 + + + + 0 + + + + MD5 + + + + + CRC-32 + + + + + + + 20 + 75 + 181 + 20 + + + + Алгоритм контр. суммы + + + + + + 20 + 150 + 571 + 681 + + + + Qt::ScrollBarAlwaysOn + + + false + + + + + + 90 + 20 + 51 + 41 + + + + + + + + + +