From fde15940864505be9ccbf50c18125141a9760390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sat, 11 Mar 2023 10:41:26 +0100 Subject: [PATCH] Add file list sorting --- filesystemwidget.cpp | 12 ++++++++++++ filesystemwidget.h | 3 +++ imageringlist.cpp | 27 ++++++++++++++++++++++++++- imageringlist.h | 5 +++++ libXISF | 2 +- mainwindow.cpp | 2 ++ translations/tenmon_en.qm | Bin 10400 -> 10596 bytes translations/tenmon_en.ts | 25 ++++++++++++++++++++++++- translations/tenmon_fr.qm | Bin 11886 -> 12072 bytes translations/tenmon_fr.ts | 25 ++++++++++++++++++++++++- translations/tenmon_sk.qm | Bin 11042 -> 11312 bytes translations/tenmon_sk.ts | 25 ++++++++++++++++++++++++- 12 files changed, 121 insertions(+), 5 deletions(-) diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 61b7e96..9a1ae3f 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -20,6 +20,18 @@ FilesystemWidget::FilesystemWidget(QAbstractItemModel *model, QWidget *parent) : connect(m_listView->selectionModel(), &QItemSelectionModel::currentChanged, this, &FilesystemWidget::fileClicked); } +void FilesystemWidget::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu menu; + menu.addAction(tr("Sort by filename"), [this](){ emit sortChanged(QDir::Name); }); + menu.addAction(tr("Sort by time"), [this](){ emit sortChanged(QDir::Time); }); + menu.addAction(tr("Sort by size"), [this](){ emit sortChanged(QDir::Size); }); + menu.addAction(tr("Sort by type"), [this](){ emit sortChanged(QDir::Type); }); + menu.addAction(tr("Reverse"), [this](){ emit reverseSort(); }); + + menu.exec(event->globalPos()); +} + void FilesystemWidget::selectFile(int row) { QModelIndex index = m_model->index(row, 0); diff --git a/filesystemwidget.h b/filesystemwidget.h index e0dd493..936b4cf 100644 --- a/filesystemwidget.h +++ b/filesystemwidget.h @@ -13,11 +13,14 @@ class FilesystemWidget : public QWidget QAbstractItemModel *m_model; public: explicit FilesystemWidget(QAbstractItemModel *model, QWidget *parent = nullptr); + void contextMenuEvent(QContextMenuEvent *event) override; private slots: void selectFile(int row); void fileClicked(const QModelIndex &index, const QModelIndex &); signals: void fileSelected(int row); + void sortChanged(QDir::SortFlag sort); + void reverseSort(); }; class Filetree : public QTreeView diff --git a/imageringlist.cpp b/imageringlist.cpp index 6423e84..a578f35 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -129,7 +129,9 @@ bool ImageRingList::setDir(const QString path, const QString ¤tFile) if(dir.exists()) { - QStringList list = dir.entryList(m_nameFilter, QDir::Files | QDir::Readable, m_liveMode ? QDir::Time : QDir::Name | QDir::IgnoreCase); + QDir::SortFlags sortFlags = m_liveMode ? QDir::Time : m_sort | QDir::IgnoreCase; + if(m_reversed)sortFlags |= QDir::Reversed; + QStringList list = dir.entryList(m_nameFilter, QDir::Files | QDir::Readable, sortFlags); QStringList absolutePaths; foreach(const QString &file, list) { @@ -377,6 +379,29 @@ void ImageRingList::setPreload(int width) m_width = newWidth; } +void ImageRingList::setSort(QDir::SortFlag sort) +{ + if(m_sort != sort) + { + m_sort = sort; + if(m_images.size()) + { + QString path = (*m_currImage)->name(); + setFile(path); + } + } +} + +void ImageRingList::reverseSort() +{ + m_reversed = !m_reversed; + if(m_images.size()) + { + QString path = (*m_currImage)->name(); + setFile(path); + } +} + void ImageRingList::setFiles(const QStringList files, const QString ¤tFile) { QThreadPool::globalInstance()->clear(); diff --git a/imageringlist.h b/imageringlist.h index 23b209a..0a8ccc5 100644 --- a/imageringlist.h +++ b/imageringlist.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "imageinfo.h" #include "rawimage.h" @@ -58,6 +59,8 @@ class ImageRingList : public QAbstractItemModel QList::iterator m_lastImage; QFileSystemWatcher m_fileSystemWatcher; bool m_liveMode; + QDir::SortFlag m_sort = QDir::Name; + bool m_reversed = false; AnalyzeLevel m_analyzeLevel; QThreadPool *m_thumbPool; Database *m_database; @@ -91,6 +94,8 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; public slots: void setPreload(int width); + void setSort(QDir::SortFlag sort); + void reverseSort(); protected: void setFiles(const QStringList files, const QString ¤tFile = QString()); QList::iterator increment(QList::iterator iter); diff --git a/libXISF b/libXISF index e1fe893..43533aa 160000 --- a/libXISF +++ b/libXISF @@ -1 +1 @@ -Subproject commit e1fe893e2ab9f8803e849b4e30ea1358cd9aad86 +Subproject commit 43533aa36310cce0a08a8e557d35267fc58fd1ff diff --git a/mainwindow.cpp b/mainwindow.cpp index 4a7a2ef..203553c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -88,6 +88,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) m_ringList = new ImageRingList(m_database, nameFilter, this); m_filesystem = new FilesystemWidget(m_ringList, this); connect(m_filesystem, SIGNAL(fileSelected(int)), this, SLOT(loadFile(int))); + connect(m_filesystem, &FilesystemWidget::sortChanged, m_ringList, &ImageRingList::setSort); + connect(m_filesystem, &FilesystemWidget::reverseSort, m_ringList, &ImageRingList::reverseSort); m_filetree = new Filetree(this); connect(m_filetree, &Filetree::fileSelected, this, static_cast(&MainWindow::loadFile)); diff --git a/translations/tenmon_en.qm b/translations/tenmon_en.qm index 5479138f3d522714d881129b03eea0d9736889c4..3834980b39002d0ffee8f23b3d444ade9ea1de5f 100644 GIT binary patch delta 1419 zcmb7CYfw~W7=8}tvbVFqvRsynTo#zItVpv&X)MtU#EhFIXcsn?+>%S|#%)G-Knn{c z4JMPq>1HtsBT1$O5g`apOd!}K)-S6GM$8|YGfX=4z^VSkH1%W8v*$bC_q@;LdneI5`Ya}AbdBFkxguaxH=v%1VifNM|BF)Fwq3M@ebWU* zi5$3C!@yi2GVnBcp4ZUyk>I?3h|WV3gyZl12n5^|`jS_YFhLl5kVr3cXy_9zJjVp0 z<9$ln#!2vth5_w9j9lCe%@RRSZ5@8c4I`2^k!-oU@DW| zZFrs0PfMM{n@BiF%pu;82CPcagCSllX*i$w}AuYy~O-{gPxiSC# zKngnJHExBD4yKI_le_5bTVvP4QVxdkas|6KtTGulk8bCY!c2 za-aWE)2_Qzo@+9_VmQW2d#9;y`w}|yng+*~GU^km(nR4w6RIU-cJMyca-YmQWLGUK zHuBv&uG-|==&V$IUd$SR4g4)%gYWkk!*Eu;;)RlTKzDU0*y)PCsob7Y&+FX z!Oi3x8rp4UkM2u4PSntH#r*QQI0~3DcR$K%L(IPSL^ZOaF2ABfL9DdfuYM+mMq@|) zrY;>P@o5(jzq}z`UDlB#^$0m($b=JR{FTDZXEciWFMsx3PaZG@=rWyU&QiCN3BrG^ zYn#(u>Gn7aA9v+H>+}dBSMA7}JLlnf2P*k2X!uGF_4;QOmwKWdmC*$}Rg_owFBG^XE18$5vSc1fBJ=6EAs2;rB-*zs Fe*mPmSKI&q delta 1243 zcmX9+Yfw~W7=D&>**go%A{PY?7aN-zB!r2HydYqj3`tT`f-wv1!YabHd$>$9va?2E z18M|jQBqW1DjEzjDi~rEL(7R<&5+ehQq8DX{?LAus6Fh?nRA}+d(Zp5-}5~0`^S^- z7QGth6Mh2?)DD1GrX3#Mb|?UTR?H`*pw0TCHEcJ*QI-@=*i`QJ3B zL4v?@Uk1@SuZg#vCBd6PG_2M*ZuL-k)R1Q2z2AZG7R~s^b-Z9mGrNJv)Bx%VG;_P? zK!QKS{mD-(SQo_btdK?{m1#Z?Y5a#5TBbw#&Tj{7*92R}1;D&si0rB--WH0zUJAS{ z>>VS~aE)+C{EN=)5IUxPH-Tj{!l^48fs}mV(~l2Q*#Y6Jqji9_Rg?mWm&G@>i~#z( zVsGbbwB9ccPd-Cuwh^BtHj5Jx5o}qEIQ7UG@?Iw{+_}a0ycDkej!tAs)>GqjMlWUe zFSTS)+BEeT9qX0e_C4?c5Lqep6+cHJz0$cr51WG+WsxRM((=T98SQgCFe8_3`+<%v z$nJ|&rmT?t=UyVQ4tam#`@H!1AjTQw*XQ@Ko?Y&~W2GY>$(KecRG5`7-D6&|N4vVU z3rO0f_1Rlfn3$-&(M^Wd9PN#7h*2AK=C&pvG*1^=Eb^dVw>c*t&>hk}btI2UD|Air zb|7p(H%~QVjhznYBK7SJvlN(SsC?AMc%h*hTEO5pbY5*? zOLqDUBda{@(SE~16ML(@U^JA>aGHNK=I(olOh=3*l`@C%TVrV#^DJwOEvY6ROftTr z?`NUY#__%BRPwX&{A>niXRS%@CQ+N)6fNCP0{@xTr_=KI6Q=T55)#r)jSa^*1HYIK zWc|&V^8IQ$zJ*M5XHB2IaFmLSreTejjIRYTQ8laDugQEYh+*~Sm#0&Bk!l`&f-Q?Y z9J(f+=I_(N-4+?6APhXyl+Ab*P65rSo6& zeS;<9m}an3>ssz>KrX6bM=h%0fENl}Tq|5Tn5_nORe^XT*EM_;M(xZinJ!Re9`t6pzEJ+C6G&XGco(;9^p>{6922GiCq) diff --git a/translations/tenmon_en.ts b/translations/tenmon_en.ts index a3330c8..2fb0a6a 100644 --- a/translations/tenmon_en.ts +++ b/translations/tenmon_en.ts @@ -41,6 +41,29 @@ File name + + FilesystemWidget + + Sort by filename + Sort by file name + + + Sort by time + Sort by time + + + Sort by size + Sort by size + + + Sort by type + Sort by type + + + Reverse + Reverse order + + Filetree @@ -515,7 +538,7 @@ Changes in settings will take effect after program restart. - Changes in settings will take effect after program restart. + Changes in settings will take effect after program restart. Don't use native file dialog diff --git a/translations/tenmon_fr.qm b/translations/tenmon_fr.qm index e757d16ec7777ed5058a483cec23fd9ad346bc6d..e8a1639a303305122119ad3412a1c8eaf9756844 100644 GIT binary patch delta 1437 zcmaJ=eN2>f9RED`yxej39B+3gf*{9Rf;lzALM>7>#3E5Rk`iq&4!uHPcPB44ya}W< z$d_P&C~RgXl}(dcB}&dfWHG_W2Cl6Qqv3pOrLC1jAGx*uA$Gfc?)g5y-{<#v`Q4rD zw$1y)JQ9Gl9w7VcL#j?_+Jyc|cl%7r)@#`UkSBJ|p3W*z{K$5SfbF{#YRBPaM1PB%fc$h0A>J zUnU@2SG{P=6zum}={zh`IQ{N*!19C8m6QlX92Ewa6X|6V4LV`y zRVEO9T~qw=FbTJK(Ne7`HPD&xyQcI$4>a{^PF%_WLgtC)_+AS5QM5E{2Lg_ZHkXS= zJ`gL;Q>f(yai4UXMiRsWS3JJ~q50yeu_R#bA@P%s_5wOtJkwG{M@C7WT-YNutvL%A zBc&ttZ!`K~siQxOl|>R?BCeBqOeR+Fr8Kbg0(Czp-5kHid8Ztp{f5
<+8(b%ZG z?Bv5r8s+4H)xgXH@?p=T?@@7|e8RSwLKe&2lO3M%V(1aMr;U-%DN;~3#0`DQE9<^v zV*8ZhK01r3QFe8|0jP(Rnuw!3xWbE(e=F~dR06X`mFDq4Ab3Q%)=8s^QMoq3b#YDF z1$!ER*hH--XHPU2wrKA*Q{jwr+PfEtq2KF_wPlR%fzH<^@zNaErL1@sFl^9eHm>63 z6m?}v24Mb0_j%-cAh1f;*V_$fp4N>OHv&;vKKXsDKu;8^YrVsu-}o(~bs1JxK1Sug8aC!B zj5NuR-N1FGU_)NpAqo{>kWN;8EAH>&|b4-Xzw1D=q1 z32W4VrI|#}5_P5=M`uIoGmF?w)P$NFLd9~rT3T|9i6pCUCGf8qlcv7Eh5`+>>Zdze z=sZI05L`?y--~nNjc)B%bR6PE^Fib8E725?ZtP5BwX=MD9}jO}MFW0?trk}Lv)|r{ z2pWk?^}984njJ21@CJ^zOVSF>rVymTi9CMou)={tl<=1mF4%SC026>V-CkmMy6j93 z{>hF4yQ|#gwr|_u$lGFf3nHfrVdEah&%UkHB(zo{Frz*lw9J Qwf5yoO?dmoN7}Ui0P6c+&;S4c delta 1285 zcmXX^dr(w$7(I9IW1q0`3Y3tGJj5QDMCC-72&E`mj_6RLwy+OKShn3om>k+f%Mi5^ zMv4hXOC6>x3}kXZkueOLj7L;s_>ZGg0|Vh7(rXIn>~6Dj_uTvYec$=ccfPM}$8^!V zaX#@Du+axB+6rtcAnt*flMLw2KrR2#zd48h+{ub+3~qXJ=R-MGn(`ODD4A@N@laY=fNH z?jOm#{M_&wI`+5xq3@wnz=90T{(8Uj(i)GmRT-L%sOSPmyJqQ%Gf;PQs=bG z4m1HvPHBCX14#^&wRc;nFe+Jl_iJM8N?k}p4Xv~4LJK4&nssZlp9S=nbz7Qq+37A_ zjk1|m7V5rSyoqs>x^Y)Cu((%mzfSArF@3p(4(K1zAKE=i0n-NS(~&$^45iQlrbI*I z#D4Bvwa;)d)y-KQGfdWSwz?6cVcYlI=9|Wxy5+#qLgO~8!e#u#Sk%P0u)W6pX(lE< zVXW7;lW2>vzc!s6tv6m9&ETl&O-c)e#%N42@>0OC%JfV+El;$WiWgFl*lnubeVV)W zx#{qVX*%fZGM&kz68$~X`PW*xMD?Z~!NZXZ1~H{2#H+nb<#j=f5JKJ>Nn)YyklyDx zvIVb(J{I3Z>xa$G<59FU-(0nG4oK)TADK^}unzOo?G6fQF5`lgh>T1^HdMIaMkQR0 zS?2UkhcqX2&T99?`%WMqHh6enf>K!EgoED|e4OwG&aHg+XIq$W;mtVD-T&wKIsK8= z0JlFw<+q(bTj1Ris5&0tDd(9Qh__;bJbpg6gWxZylAZnu?qRg2wgbE__QrNeEhP~A3<*W&i3 OHJVdnI^S5*ru`3)C_oqh diff --git a/translations/tenmon_fr.ts b/translations/tenmon_fr.ts index 8276f76..412bceb 100644 --- a/translations/tenmon_fr.ts +++ b/translations/tenmon_fr.ts @@ -41,6 +41,29 @@ Nom de fichier + + FilesystemWidget + + Sort by filename + Trier par nom de fichier + + + Sort by time + Trier par heure + + + Sort by size + Trier par taille + + + Sort by type + Trier par type + + + Reverse + Ordre inverse + + Filetree @@ -515,7 +538,7 @@ Changes in settings will take effect after program restart. - Les changements de paramètres prendront effet après le redémarrage du programme. + Les changements de paramètres prendront effet après le redémarrage du programme. Don't use native file dialog diff --git a/translations/tenmon_sk.qm b/translations/tenmon_sk.qm index 0596d70c3dea67f929378db44655fa5db7954c1b..bf6e8dcda6d7d05ce35c3ac284ba335d68c67cab 100644 GIT binary patch delta 1484 zcmaJ=eN5DK9DaWMUhcU2!EwNOyoemHQCXmpGH|4523DAXh9V}6BaRRl$NOeCk)#G_ z1qCs66QkV3K&aUS$r*?&5)9|SKV0Z)ni^YL{!z>xxUxTJ{Ppae+ts*ET%&m#ODCb3CKD9fb8!?^GV2~LvX-9981^#1T5a>#DHA9v^@lH z`x!5PlEw2WB%99xQY5y1&GRK!v18v?B&~ z5GeBAStl-9EiCc=77)L8qB<;C9~_}`{|uqK?Iz%TMi@wl2Lc;}@ijzxnL}N-FpQvjbL(K~t=@bDE)O{K(}VyfLvBhBKT za}?^mOgt#vqY)qRgUgQlfM34Ybt?gQ;O@J0=euXXK%S3hF0#Az69j)hkTwBc*7B z&O&08y@T&im|1x@=olB`x zLR265NkE^cKEIsZ1ofy{epD=PRLjfSnMk=O?eS4^19~=wPAGo^o%my^ delta 1241 zcmXX^dr*{h6g|uL*l!;^mR(*N@U1+8p`kKNM;a+G(_|!vP0dHR;sR^1FuMzjO|~PD zk1$IiL?)e4!(k>Hc{MuWphFNkI)Qu}=hyZipjucnabu;}J6uA3O($p9ay?0r8*R zfOb8kC5?b)YY@$+A!WbMeup5fTm(puAeHn3LU9nIW+9CX!;d%@o>~42Fz-YV=XYZD z#v~5RME=oj!2EQqiMa%X_^|Fgljt4q(gQ9YDe!G>)VJmV0QQT+IJn82FC) z(BCyk6gW@{qNPETVEKl9qJn5JX&f`hxp`c>ru*d2fH_1nn7fPvZfM3{CUTbmDt~Ei z?VtkIqajsa{=f$3f*9Ey;xlkF&3K4!mIF=JkTaJHf#~ysCF=?hW*4HGtAX$g!RGOB z!JmX(mq;{nr|_}(kjiWo4qf*@0%CiG&WT(g^@`B-#X&%}3SS?qry7P z&+csol3TQX``%;{nAT3Wk)ipfcKTaloT`L2)>69nlrWn}4=0tCue=KA7AbEYS z$&*oyJ#f#>)A4_0B}$pGb4E2X6_NqPMRs19-Bs%Fs5wrT>T!6zPFJZ%^*PJSRj>UW rhw3OPaTI%1dx_WKR;%2VrEYtL>UMa%cDFZ^b|S1Wc&R5p<(~W>V9GU= diff --git a/translations/tenmon_sk.ts b/translations/tenmon_sk.ts index f2576cd..00fefea 100644 --- a/translations/tenmon_sk.ts +++ b/translations/tenmon_sk.ts @@ -42,6 +42,29 @@ Meno súboru + + FilesystemWidget + + Sort by filename + Zoradiť podľa názvu súboru + + + Sort by time + Zoradiť podľa času + + + Sort by size + Zoradiť podľa veľkosti + + + Sort by type + Zoradiť podľa typu + + + Reverse + Otočit poradie + + Filetree @@ -516,7 +539,7 @@ Changes in settings will take effect after program restart. - Zmeny v nastaveniach sa prejavia po reštarte programu. + Zmeny v nastaveniach sa prejavia po reštarte programu. Don't use native file dialog