From ba6062b92515d7febc0bfdc7b4c2e244a4c5960d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sun, 27 Nov 2022 21:10:43 +0100 Subject: [PATCH] Enale loading all image types that Qt can load --- imageringlist.cpp | 9 ++++----- imageringlist.h | 3 ++- mainwindow.cpp | 26 +++++++++++++++++++++++--- mainwindow.h | 2 ++ translations/tenmon_en.qm | Bin 8984 -> 8435 bytes translations/tenmon_en.ts | 14 +++++++++++--- translations/tenmon_fr.qm | Bin 10062 -> 9505 bytes translations/tenmon_fr.ts | 14 +++++++++++--- translations/tenmon_sk.qm | Bin 9594 -> 9049 bytes translations/tenmon_sk.ts | 14 +++++++++++--- 10 files changed, 64 insertions(+), 18 deletions(-) diff --git a/imageringlist.cpp b/imageringlist.cpp index 4331945..8db6cea 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -98,12 +98,14 @@ void Image::thumbnailLoadFinish(void *rawImage) emit thumbnailLoaded(this); } -ImageRingList::ImageRingList(Database *database, QObject *parent) : QAbstractItemModel(parent) +ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter, QObject *parent) : QAbstractItemModel(parent) , m_liveMode(false) , m_analyzeLevel(None) , m_database(database) + , m_nameFilter(nameFilter) { connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString))); + m_nameFilter.replaceInStrings(QRegExp("^"), "*."); m_thumbPool = new QThreadPool(this); } @@ -122,10 +124,7 @@ bool ImageRingList::setDir(const QString path, const QString ¤tFile) if(dir.exists()) { - QStringList nameFilter; - nameFilter << "*.jpg" << "*.jpeg" << "*.png" << "*.cr2" << "*.nef" << "*.dng" << "*.fit" << "*.fits" << "*.xisf"; - - QStringList list = dir.entryList(nameFilter, QDir::Files | QDir::Readable, m_liveMode ? QDir::Time : QDir::Name | QDir::IgnoreCase); + QStringList list = dir.entryList(m_nameFilter, QDir::Files | QDir::Readable, m_liveMode ? QDir::Time : QDir::Name | QDir::IgnoreCase); QStringList absolutePaths; foreach(const QString &file, list) { diff --git a/imageringlist.h b/imageringlist.h index 0140547..74197a2 100644 --- a/imageringlist.h +++ b/imageringlist.h @@ -60,8 +60,9 @@ class ImageRingList : public QAbstractItemModel AnalyzeLevel m_analyzeLevel; QThreadPool *m_thumbPool; Database *m_database; + QStringList m_nameFilter; public: - explicit ImageRingList(Database *database, QObject *parent = 0); + explicit ImageRingList(Database *database, const QStringList &nameFilter, QObject *parent = 0); ~ImageRingList() override; bool setDir(const QString path, const QString ¤tFile = QString()); void setFile(const QString &file); diff --git a/mainwindow.cpp b/mainwindow.cpp index 7792933..2ed2d0b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include #endif int MainWindow::socketPair[2] = {0, 0}; @@ -37,6 +39,24 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) SettingsDialog::loadSettings(); + QStringList nameFilter; + _saveFilter = tr("FITS (*.fits *.fit);;XISF (*.xisf);;"); + _openFilter = tr("Images ("); + QMimeDatabase db; + auto supportedFormats = QImageReader::supportedMimeTypes(); + QStringList filters; + for(auto format : supportedFormats) + { + QMimeType mimeType = db.mimeTypeForName(format); + _saveFilter.append(mimeType.filterString() + ";;"); + _openFilter.append("*."); + _openFilter.append(mimeType.suffixes().join(" *.")); + _openFilter.append(" "); + nameFilter.append(mimeType.suffixes()); + } + _openFilter.append("*.fit *.fits *.xisf *.cr2 *.nef *.dng)"); + nameFilter.append({"fit", "fits", "xisf", "cr2", "nef", "dng"}); + m_info = new ImageInfo(this); QDockWidget *infoDock = new QDockWidget(tr("Image info"), this); infoDock->setWidget(m_info); @@ -62,7 +82,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) connect(m_stretchPanel, &StretchToolbar::invert, m_imageGL->imageWidget(), &ImageWidget::invert); connect(m_stretchPanel, &StretchToolbar::superPixel, m_imageGL->imageWidget(), &ImageWidget::superPixel); - m_ringList = new ImageRingList(m_database, this); + 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))); @@ -372,7 +392,7 @@ void MainWindow::loadFile() QString file = QFileDialog::getOpenFileName(this, tr("Open file"), _lastDir, - tr("Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF)"), + _openFilter, nullptr, QFileDialog::DontUseNativeDialog); loadFile(file); @@ -428,7 +448,7 @@ void MainWindow::saveAs() QString file = QFileDialog::getSaveFileName(this, tr("Save as"), _lastDir, - tr("JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF)"), + _saveFilter, &selectedFilter); auto filterToFormat = [](const QString &file, const QString &filter) -> const char* { diff --git a/mainwindow.h b/mainwindow.h index a70acac..ff85bac 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -28,6 +28,8 @@ class MainWindow : public QMainWindow QSocketNotifier *socketNotifier; QString _lastDir; bool _maximized; + QString _openFilter; + QString _saveFilter; public: MainWindow(QWidget *parent = 0); ~MainWindow() override; diff --git a/translations/tenmon_en.qm b/translations/tenmon_en.qm index d4c1f4bfb306a21e3829f7943075b23abb701ee1..74122ffb63c44481f7c7789904a50311a4a10e41 100644 GIT binary patch delta 950 zcmZuudq`7p7(Ms73jj}RL#g#$NX;zR+d#tFewI~xS zds1XCO-VE}nHmI{X;A%{1wn?;d+DC@2MjxpI`w4Z%@Hlw(1^oUfk`p{E-#Rbuko_kj6^g3-6J zaCHI@H5!Y~<^$0au{gFJVCP`P1FFl>$llio2zIRfejSJ{LB}&XYcd$bbHr;_P!|pk z%YIWcQ-5gy&^~6und#Ks%Jj`51Qb+*d9{%TEVZn=PeuPT*sZr-)08a=YD?Hs%`{>+ zv8CT4TYA~LCvHGL$a#D|Qa!-!X}8h*bnZC+iM(ZV!QL-`v7bA?vJ!qs3%I)NaIj1UL-DpxBoDv!SyI!RHL^DRADWOq5?D#E>dx7iG+Ed2AC9i%s%|M>GO z)!zw5)l-V6MljtClYO1wxDyGrQE)z=Pr_uOX3`bF;1%jTIdn0`%R=XjBjlh=L6cGF zzD_xgnJ(ro?Wg=diRGOK0QFb#(1gphXq$quwc_cw71UoKR{x~S)z^t{+Q=E#C%zdb z-quyM>#=mIOV27BlcEBnp4ny57| z0P&?}PQ?_;1)BXS5(Sy42|T2L<6djRd+ap6KoYCx(c0}&hMoM4?vnDykbllDmF~Do zYb??=*M5>+D&60G4v;ib3qu!T7*x>mLtCtRM7g#rDAj8Z_9h|?@-A)Lk{lwQ(M^pf z{b<#1J|9CqF6m2he^H>H^@DHgY4GhLVBCg=qg-v2e;u4~!2>s}D8eS>VLb}z+lFMM zz)Q7a_~`ualmrJoS=8mG-v4#&q%I%zjxg0E1R}kOPM61RwI!!`i;8{L5lC_v99b^6 zGg94I1$)))G$wg@?-HC<`wGB4Nv2IU{= AeEn91=KZWIc76rurd2fe>ExLKtLL`}FpAdE# ze&=+r2)&o4f&81oz|-%LcS|_-Yb8*8P&j^=Yw>M^sPGD5*c&(lm}7>)bRV^P&2aic z6feTnM&}tO+;14q&j(CJhKrA$1F+ig+w2Sr=tRe{F%G_5EI+EqIVt)t)&lmG;=biW zY^X~-5_y3QjEY~cdXo)rSJCMe#}84!g%M*z=m!dJNtfwel|{qGJy&;tLD* z{8T)J4%r5CMA7@-}Oa#y-J9nRQV2MQ?8i0$Qu ze_7CGyMFZq6MxF5<$nESw{XBxu@rs;5J4CoG($!VaoTpSWO^;=KpWcUF&T{fJN$u2 z*wZY>;&Qu3j<Y6K!IGCLT>P!7`M>i;YMy;?aCrTP4t{`5Rc$ zmu0o`d}G#+-^FRnw4-KHeWi+0V+(hZDeX`lLa5DdDSnN%3L&WZRjAiW2FdYfPw?B+ zII1>kkvW}|l2HyD=9v;ro7C38rdX4l^eij&ZcH?J6e}x`XjSZnb{}o4+(;YGL>gN< z=+h<%TUwIJPF<)rV`~%$1r=LWuN(~4_-U&%5nclQ%vF?nqk*u$gx@yOvMVn=n>Umi z!rajJ-hnDk3Cj8NP#kqwm3Q}zs5>feZgiFRfA#O|s@!NQtIVATkhvV~Ztm5szAnUR tHPNU*NqM JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) - JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) + JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) Reindex files @@ -324,7 +324,7 @@ Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) - Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) + Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) Edit @@ -332,12 +332,20 @@ FITS header editor - FITS header editor + FITS header editor Settings Settings + + Images ( + Images ( + + + FITS (*.fits *.fit);;XISF (*.xisf);; + FITS image (*.fits *.fit);;XISF image (*.xisf);; + MarkedFiles diff --git a/translations/tenmon_fr.qm b/translations/tenmon_fr.qm index cc1362b556523e377964138962d1137a8aaf98fa..977175888a971748bc716d9e3d7dfec0968f6341 100644 GIT binary patch delta 950 zcmZvZYe-XZ7{;HS>vYH6+-6$lRw}c?%rK%s_g1q|Yop9A<{(AM5~eAEjnpzI(zUXZ zZfc5QQE5eVu@Emo(dvz39Hu*)t5LNe&_$5_wqdN|4~X^a`j~079hn7 zOo#_oyNFKT%qZO&aKi}z*Dq6@3cH}aS9!e=qwE>5XAy)j7**2 z`)TqTk1AU0-vXNFiq6IJsd`lLbRiLt8Dvnr%;SJaCF6W5(*G=`;NmNq7LchaWr|fv zl>Ln<{z_9q%9#uIoq&ED>+*O=^&ne%&r1F6Y!&y3yp^!N$6o+L6MK5yA$Xy-vX?(D z2Fz9Lm6k&!JD=mn6T?OBxZ^eu{DQ0V9|rhE+^s-5*>w}w6RWwN&`>~W;ddAGn02V8K%j9la+ z3pvI8ar+qwHlIzKiv)S4#+8xYPEp`8+Wqi8zZx^K_KPzXe$87amv<82qp`&fo Hn4$XxsPyVk delta 1471 zcmZWoZERCz6n=WYx~_L$?bb4eYsWOQF*g~S5F0e^qq7|;Wo@)FaVhk66kToBjx8j5 zlS$|gKd@F57FjYj2vH1-L1H!qGpA!h_63P?`!^&p0Yiwx#3h zd7je_IHz47l@{y?@82H3PfHp#|W z@H3Nu`5>wqZUC!(Qho7tG;c2l^vAH}$WEYmJ6z`P0A>I$e@*$49eC~C^MGK$j=xU= zYsPWf9Rl)z@oCD7$2G990Q-dMjq5d~h2K;CX4UJnHPUiFj4+RC&K|oCcm-Ed#T|Bh17!cq4J1DX_!qgc z86Vz2ah!rz>A~~dq|pdum2tDrjRSCUH}5S|gL2+*W`gEz_g(1CQ2GyR=wp&PE31|#_CP^O~~Dnb6}2Glw8WWu$4qA3g>RL5IfA~h5L($WpiFv z+rPkL&3U($&eFrb(od^=EO}V0ADLuzqPYrF2q1(QBy^z@RysWiDS0K!Vl>ztUXOLR zWnUfo?Ok9taOiLGG?CFYz6&O2F z@}~1@>`9+|bmO6#iY$^A0)6Fujt+mj6t%9atlkr8w<=arTqLa6U7fXL!%~oJAe9M* zVic2&lIsaYl^dtKDP_FAw1% z;YamXg{gpzK2{P&6+^|X+=hCi;vUjgasOBT!L5q*$!S#{EI+lF%w8VVti|ajrWwJA seTB_tRd`cQ)r}66OOd5qS}o;BS%tfTOpE7pu%tzDo7prnW%L#N2WZ?*ng9R* diff --git a/translations/tenmon_fr.ts b/translations/tenmon_fr.ts index eaa9dbf..bed7586 100644 --- a/translations/tenmon_fr.ts +++ b/translations/tenmon_fr.ts @@ -304,7 +304,7 @@ JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) - JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) + JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) Reindex files @@ -324,7 +324,7 @@ Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) - Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) + Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) Edit @@ -332,12 +332,20 @@ FITS header editor - Éditeur d'en-tête FITS + Éditeur d'en-tête FITS Settings Réglages + + Images ( + Images ( + + + FITS (*.fits *.fit);;XISF (*.xisf);; + FITS image (*.fits *.fit);;XISF image (*.xisf);; + MarkedFiles diff --git a/translations/tenmon_sk.qm b/translations/tenmon_sk.qm index a31e555432a5fb7549649c26fa4f10940f03f177..a9650782a2c4dca4db99a39bea09e39fc41eab5f 100644 GIT binary patch delta 934 zcmZ8fYe-XJ7=CtcGk3PR&COf2Nd{VBW*Fu&!)&nhP+9#b`%^{`WF=Vy=A~B;M8x6n@O|HN-ske2;T3NzHPbblfea5| z_ztYL10f;axkgP7xPdr;J0_vB)9WwNZ9|&H7IcXmOeX)dw zDy&>T15gAa{X`B8=8+L{A7I>A(@y&#!`N7M1K_)`>Gx$ItN>k4X)SJ$!N>wEFJVxk zcii9!E|ImI{{X1NWZkKYfzWQ*%O!+>gaM7R*LfTeQO($1%ISPIv*+p?QoAXk>Jj5s zBoO-*1Jv;mr0*6wnV>khW~el(z}VUKWM$lW5=+dBm4YS@Og)$l-B#5R9Q z1*X4cuV1MKgh-B`BtGKmtapIGh1@ycQL5?}*YPZi;>HoKBh2RfIvpVQbI+5y$nOH~ z^XL!S@8LD_Csa=}uWjz8_@TV{+C-@*dCT+VKu{fjYW77y8_qY`v*}`V4*o&nVMC^gw|X+9{wn|0L#P`GP}zN@Oa!A!_MKr2jOLxMlQDSo z^A&*`UQnq4%?4j@?w^hQ~%cAF`BR&1^_-({MF7_&Lc zYO_pi7CK$IwDft!;MNoB1ZJl8ADJE4KQa98r~vEEE!(!bOwmL)_#C?1t+D#_pg%>k B?WzC( delta 1451 zcmZWpe{2(V6#w*k*RH)QrPs9^n`=Auk8P3-1{kEtNVc_0=Tf?L;`{;2wzi{FO0!lv zmS_zii$8*lQ-X~yL5G4u*ce6)2xbnai3)6s2_#0{G%*6<52pqV>btwPE-{yTzrOFi z@B4h-<*s`FY(C(yYy>Ezo z)8a4SE=>dW9;|Hq2`Df)n#@X>n!-iVghx`AQ`{6(JtObVMnqr|K?A22&~mC4TQ!ctPpRIfYGa=!yf^|Y>>17JHy42AWtyq_ zI%@o_N0mk z!m~wp?L5uTZq!}-=PjDss;?P(1#sH*T|@U$`ychUGIYJD*Wdb#wB05RF^;=U*A0;` zzo50eV0f~NrYuMqUfMZJ?QR=p#%~kL&r25=d%CEFH$FB)p!V<$yH`{9PJVB-KOlc*AlDznDDl5FJQ0< zX9nM(tt<#tV{6_FW+uB?nCBHxWyP-OJWE2_DAGu@M`w zbJ6@%=ihXp!F*%>G&SBz-&Xm8R3+3*OlY6u%@yzR9TzNiXn_h)($Pni711qom4xK%^E;7jYPhv838n9k7V1E_X65)~yFUy8DxzO+Nl5A8Wv<9-3WmHvn_=4U_J){YX zD7A{`T1W98YdR#<}N{5=abRX)8k|+7h&U6mETA2f%+cELKg#O%VjvAn? wIY5B&yb#Drx7#JdqnJt$ITTYcQ7lV}>{7JDCkDN8YL+AgvhwAbtS!s`1>jjo3;+NC diff --git a/translations/tenmon_sk.ts b/translations/tenmon_sk.ts index 5fffd7a..aa9534c 100644 --- a/translations/tenmon_sk.ts +++ b/translations/tenmon_sk.ts @@ -317,7 +317,7 @@ JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) - JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) + JPEG (*.jpg *.JPG);; PNG (*.png *.PNG);;FITS (*.fits *.FITS);;XISF (*.xisf *.XISF) Reindex files @@ -337,7 +337,7 @@ Images (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) - Obrázky (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) + Obrázky (*.jpg *.jpeg *.png *.cr2 *.nef *.dng *.fit *.fits *.xisf *.JPG *.JPEG *.PNG *.CR2 *.NEF *.DNG *.FIT *.FITS *.XISF) Edit @@ -345,12 +345,20 @@ FITS header editor - Editor FITS hlavičky + Editor FITS hlavičky Settings Nastavenia + + Images ( + Obrázky ( + + + FITS (*.fits *.fit);;XISF (*.xisf);; + Obrázok FITS (*.fits *.fit);;Obrázok XISF (*.xisf);; + MarkedFiles