2021-09-10 10:02:59 +08:00
/*******************************************************************************
#
# Copyright (C) 2010-2013 Matteo Paonessa <matteo.paonessa@gmail.com>
#
# This file is part of the Caesium distribution.
#
# Caesium is free software; you can redistribute it and / or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# Caesium is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Caesium; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
#
# Author: Matteo Paonessa <matteo.paonessa@gmail.com>
#
# ****************************************************************************** /
# include "caesium.h"
# include "ui_caesium.h"
# include "preferences.h"
# include "about.h"
# include "startupupdater.h"
# include "global.h"
# include "exit.h"
# include "loadpreview.h"
# include "imageresize.h"
# include <QtWidgets/QStyleFactory>
# include <QtWidgets/QScrollBar>
# include <QtConcurrent/QtConcurrent>
# include <QFileDialog>
# include <QMessageBox>
# include <QCloseEvent>
# include <QUrl>
# include <QStandardPaths>
# include <QFile>
# include <QTextStream>
# include <QSettings>
# include <QNetworkReply>
# include <QNetworkAccessManager>
# include <QProgressDialog>
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# include <windows.h>
# include <tchar.h>
QTime t ;
int error_count = 0 , iteration_count = 0 , skipped_count ;
int current_index = - 1 ;
double scale_factor = 1.0 ;
bool preview_on = false ;
bool orig_on = true ;
bool cancelled = false ;
bool deleting = false ;
QString list_file , previous_list , parent_folder = " " , last_profile = settings . value ( " Settings/profile " ) . value < QString > ( ) ;
int item_count , saved_space ;
QImage currentImage ;
double img_ratio ;
WCHAR * m_qStringToWideChar ( const QString & str )
{
if ( str . isNull ( ) )
return 0 ;
WCHAR * result = new WCHAR [ str . length ( ) + 1 ] ;
for ( int i = 0 ; i < str . length ( ) ; + + i )
result [ i ] = str [ i ] . unicode ( ) ;
result [ str . length ( ) ] = 0 ;
return result ;
}
void m_startProcess ( QString argv )
{
WCHAR * exe = m_qStringToWideChar ( argv ) ;
STARTUPINFO si ;
PROCESS_INFORMATION pi ;
ZeroMemory ( & si , sizeof ( si ) ) ;
si . cb = sizeof ( si ) ;
ZeroMemory ( & pi , sizeof ( pi ) ) ;
if ( ! CreateProcessW ( NULL ,
exe ,
NULL ,
NULL ,
FALSE ,
CREATE_NO_WINDOW ,
NULL ,
NULL ,
& si ,
& pi )
)
{
return ;
}
WaitForSingleObject ( pi . hProcess , INFINITE ) ;
CloseHandle ( pi . hProcess ) ;
CloseHandle ( pi . hThread ) ;
}
void removeDir ( QString path )
{
QDir dir ( path ) ;
if ( dir . count ( ) = = 0 )
{
dir . rmdir ( path ) ;
}
else
{
QStringList entries = dir . entryList ( ) ;
for ( int i = 0 ; i < entries . count ( ) ; i + + )
{
dir . remove ( entries [ i ] ) ;
}
dir . rmdir ( path ) ;
}
}
QString loadLastDir ( )
{
QFile file ( " lst " ) ;
if ( file . open ( QIODevice : : ReadOnly ) )
{
QTextStream stream ( & file ) ;
return stream . readLine ( 0 ) ;
}
else
{
return " " ;
}
}
QString fixedSize ( int size , int flag )
{
double sizeD = ( double ) size ;
if ( flag = = 1 & & sizeD > 1024 * 1024 )
{
return QString : : number ( sizeD / 1024 / 1024 , ' f ' , 2 ) + " Mb " ;
}
if ( sizeD < 1024 & & sizeD > - 1 )
{
return QString : : number ( sizeD , ' f ' , 2 ) + " Bytes " ;
}
else
{
return QString : : number ( sizeD / 1024 , ' f ' , 2 ) + " Kb " ;
}
}
QString getRatio ( int origSize , int newSize )
{
int ratio = newSize * 100 / origSize ;
if ( ratio < = 100 )
{
return QString : : number ( ratio - 100 ) + " % " ;
}
else
{
return " + " + QString : : number ( ratio - 100 ) + " % " ;
}
}
QStringList findFilesRecursively ( QString directory_path , QStringList filters )
{
QStringList result ;
QDirIterator directory_walker ( directory_path , filters , QDir : : Files | QDir : : NoSymLinks , QDirIterator : : Subdirectories ) ;
directory_path . replace ( ' \\ ' , ' / ' ) ;
directory_path . append ( ' / ' ) ;
QString full_path ;
while ( directory_walker . hasNext ( ) )
{
directory_walker . next ( ) ;
full_path = directory_walker . fileInfo ( ) . filePath ( ) ;
result < < full_path . replace ( directory_path , " " , Qt : : CaseSensitive ) ;
}
return result ;
}
QString getFormattedResolution ( QString source )
{
return QString : : number ( QImageReader ( QFileInfo ( source ) . absoluteFilePath ( ) ) . size ( ) . width ( ) ) + " x " + QString : : number ( QImageReader ( QFileInfo ( source ) . absoluteFilePath ( ) ) . size ( ) . height ( ) ) ;
}
int percentageToInt ( QString percentage )
{
percentage . chop ( 1 ) ;
return percentage . toInt ( ) ;
}
QList < int > resolutionToInt ( QString resolution )
{
QList < int > list ;
list . append ( resolution . section ( ' x ' , 0 , 0 ) . toInt ( ) ) ;
list . append ( resolution . section ( ' x ' , 1 , 1 ) . toInt ( ) ) ;
return list ;
}
Caesium : : Caesium ( QWidget * parent ) :
QMainWindow ( parent ) ,
ui ( new Ui : : Caesium )
{
ui - > setupUi ( this ) ;
QDir : : setCurrent ( QFileInfo ( QCoreApplication : : arguments ( ) . at ( 0 ) ) . absolutePath ( ) ) ;
settings . setIniCodec ( " UTF-8 " ) ;
QApplication : : setStyle ( QStyleFactory : : create ( settings . value ( " Preferences/style " ) . value < QString > ( ) ) ) ;
QApplication : : setPalette ( QApplication : : style ( ) - > standardPalette ( ) ) ;
ui - > scrollArea1 - > verticalScrollBar ( ) - > setSliderDown ( false ) ;
ui - > scrollArea2 - > verticalScrollBar ( ) - > setSliderDown ( false ) ;
trayIcon = new QSystemTrayIcon ( QIcon ( " :/icons/caesium_icon.png " ) , this ) ;
trayIconMenu = new QMenu ( this ) ;
createTrayIcon ( ) ;
connect ( ui - > scrollArea1 - > verticalScrollBar ( ) , SIGNAL ( valueChanged ( int ) ) , ui - > scrollArea2 - > verticalScrollBar ( ) , SLOT ( setValue ( int ) ) ) ;
connect ( ui - > scrollArea2 - > verticalScrollBar ( ) , SIGNAL ( valueChanged ( int ) ) , ui - > scrollArea1 - > verticalScrollBar ( ) , SLOT ( setValue ( int ) ) ) ;
connect ( ui - > scrollArea1 - > horizontalScrollBar ( ) , SIGNAL ( valueChanged ( int ) ) , ui - > scrollArea2 - > horizontalScrollBar ( ) , SLOT ( setValue ( int ) ) ) ;
connect ( ui - > scrollArea2 - > horizontalScrollBar ( ) , SIGNAL ( valueChanged ( int ) ) , ui - > scrollArea1 - > horizontalScrollBar ( ) , SLOT ( setValue ( int ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( countUpdate ( ) ) , this , SLOT ( countUpdate ( ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( structure ( QString ) ) , this , SLOT ( dropWidgetStructure ( QString ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( preview ( ) ) , this , SLOT ( on_actionPreview_triggered ( ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( a_clear ( ) ) , this , SLOT ( on_actionClear_List_triggered ( ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( remove ( ) ) , this , SLOT ( on_actionRemove_Item_triggered ( ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( removeHDD ( ) ) , this , SLOT ( on_actionRemove_Item_From_List_and_Hard_Disk_triggered ( ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( add ( ) ) , this , SLOT ( on_actionAdd_Pictures_triggered ( ) ) ) ;
connect ( ui - > listTreeWidget , SIGNAL ( addFolder ( ) ) , this , SLOT ( on_actionOpen_Folder_triggered ( ) ) ) ;
connect ( ui - > heightSpinBox , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( adjustPercentage ( int ) ) ) ;
connect ( ui - > heightSpinBox , SIGNAL ( editingFinished ( ) ) , this , SLOT ( adjustWidth ( ) ) ) ;
connect ( ui - > widthSpinBox , SIGNAL ( valueChanged ( int ) ) , this , SLOT ( adjustPercentage ( int ) ) ) ;
connect ( ui - > widthSpinBox , SIGNAL ( editingFinished ( ) ) , this , SLOT ( adjustHeight ( ) ) ) ;
ui - > mainToolBar - > setVisible ( settings . value ( " Preferences/showtoolbar " ) . value < bool > ( ) ) ;
ui - > actionShow_Toolbar - > setChecked ( settings . value ( " Preferences/showtoolbar " ) . value < bool > ( ) ) ;
QActionGroup * actionGroup = new QActionGroup ( this ) ;
actionGroup - > addAction ( ui - > action24x24 ) ;
actionGroup - > addAction ( ui - > action32x32 ) ;
Caesium : : toolbarIconSize ( ) ;
ui - > updateButton - > setVisible ( false ) ;
ui - > suffixErrorLabel - > setVisible ( false ) ;
ui - > cantSetButton - > setVisible ( ui - > formatComboBox - > currentIndex ( ) ! = 0 & & ui - > formatComboBox - > currentIndex ( ) ! = 3 ) ;
QList < int > size ;
size < < 1 < < 170 ;
ui - > listTreeWidget - > setColumnWidth ( 0 , 170 ) ;
ui - > listTreeWidget - > setColumnWidth ( 1 , 70 ) ;
ui - > listTreeWidget - > setColumnWidth ( 2 , 70 ) ;
ui - > listTreeWidget - > setColumnWidth ( 3 , 70 ) ;
ui - > listTreeWidget - > setColumnWidth ( 4 , 65 ) ;
ui - > listTreeWidget - > setColumnWidth ( 5 , 70 ) ;
ui - > listTreeWidget - > setColumnWidth ( 6 , 100 ) ;
ui - > splitter - > setSizes ( size ) ;
imageLabel1 = new QLabel ;
imageLabel2 = new QLabel ;
ui - > scrollArea1 - > setWidget ( imageLabel1 ) ;
imageLabel1 - > setSizePolicy ( QSizePolicy : : Ignored , QSizePolicy : : Ignored ) ;
imageLabel1 - > setScaledContents ( true ) ;
ui - > scrollArea2 - > setWidget ( imageLabel2 ) ;
imageLabel2 - > setSizePolicy ( QSizePolicy : : Ignored , QSizePolicy : : Ignored ) ;
imageLabel2 - > setScaledContents ( true ) ;
ui - > scrollArea2 - > setWindowTitle ( " TITOLO " ) ;
QStringList lastDirArray = loadLastDir ( ) . split ( " | " ) ;
if ( lastDirArray . at ( 0 ) = = " 1 " )
{
ui - > outputLineEdit - > setText ( lastDirArray . at ( 1 ) ) ;
ui - > rememberDirectoryCheckBox - > setChecked ( true ) ;
}
if ( settings . value ( " Preferences/loadprofile " ) . value < bool > ( ) )
{
Caesium : : profileLoadEngine ( last_profile ) ;
}
ui - > deleteOriginalPushButton - > setVisible ( settings . value ( " Preferences/delete " ) . value < bool > ( ) ) ;
Caesium : : checkForUpdateStartup ( ) ;
out_folder = ui - > outputLineEdit - > text ( ) ;
countUpdate ( ) ;
if ( QCoreApplication : : arguments ( ) . count ( ) > 1 )
{
Caesium : : profileLoadEngine ( QApplication : : arguments ( ) . at ( 1 ) ) ;
}
if ( settings . value ( " Preferences/restorelayout " ) . value < bool > ( ) )
{
Caesium : : loadLayout ( ) ;
}
Caesium : : openList ( ) ;
if ( settings . value ( " Preferences/style " ) . value < QString > ( ) = = " " )
{
settings . setValue ( " Preferences/style " , " WindowsVista " ) ;
settings . setValue ( " Preferences/style_index " , 2 ) ;
}
srand ( time ( NULL ) ) ;
QDir caesiumTemp ( QDir : : tempPath ( ) + " / " + " _caesium_ " ) ;
if ( ! caesiumTemp . exists ( ) )
{
caesiumTemp . mkpath ( QDir : : tempPath ( ) + " / " + " _caesium_ " ) ;
}
if ( settings . value ( " Preferences/loadlastlist " ) . value < bool > ( ) )
{
Caesium : : openList ( QDir : : tempPath ( ) + " /_caesium_/tmplst " ) ;
}
}
Caesium : : ~ Caesium ( )
{
delete ui ;
}
void Caesium : : adjustScrollbars ( int v , int h , int p )
{
ui - > scrollArea1 - > verticalScrollBar ( ) - > setValue ( v + p ) ;
ui - > scrollArea1 - > horizontalScrollBar ( ) - > setValue ( h + p ) ;
}
bool Caesium : : duplicateCheck ( QString name , QString dir )
{
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
if ( name = = ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 0 ) & & dir = = ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) )
{
return false ;
}
}
return true ;
}
QStringList Caesium : : loadImages ( )
{
QStringList imageList ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
imageList + = ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) ;
}
return imageList ;
}
QStringList Caesium : : loadQuality ( )
{
QStringList qualityList ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
if ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 4 ) ! = " " )
{
qualityList + = ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 4 ) ;
}
else
{
qualityList + = QString : : number ( ui - > qualitySlider - > value ( ) ) ;
}
}
return qualityList ;
}
QList < int > Caesium : : loadWidth ( )
{
QList < int > w_list ;
QList < int > list ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
if ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 6 ) ! = " " )
{
list = resolutionToInt ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 6 ) ) ;
w_list + = list . at ( 0 ) ;
}
else
{
w_list + = - 1 ;
}
}
return w_list ;
}
QList < int > Caesium : : loadHeight ( )
{
QList < int > h_list ;
QList < int > list ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
if ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 6 ) ! = " " )
{
list = resolutionToInt ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 6 ) ) ;
h_list + = list . at ( 1 ) ;
}
else
{
h_list + = - 1 ;
}
}
return h_list ;
}
void Caesium : : closeEvent ( QCloseEvent * event )
{
if ( settings . value ( " Preferences/restorelayout " ) . value < bool > ( ) )
{
settings . setValue ( " Layout/geometry " , saveGeometry ( ) ) ;
settings . setValue ( " Layout/state " , saveState ( ) ) ;
}
if ( settings . value ( " Preferences/promptexit " ) . value < bool > ( ) )
{
exit = new Exit ( this ) ;
if ( exit - > exec ( ) = = 1 )
{
lstSave ( ) ;
settings . setValue ( " Settings/profile " , last_profile ) ;
Caesium : : saveList ( QDir : : tempPath ( ) + " \\ _caesium_ \\ tmplst " ) ;
//event->setAccepted(true);
}
else
{
event - > setAccepted ( false ) ;
}
}
else
{
lstSave ( ) ;
settings . setValue ( " Settings/profile " , last_profile ) ;
Caesium : : saveList ( QDir : : tempPath ( ) + " /_caesium_/tmplst " ) ;
//event->setAccepted(true);
}
}
void Caesium : : on_actionAdd_Pictures_triggered ( )
{
QStringList filePaths ;
QString dir = ( settings . value ( " Settings/dir " ) . value < QString > ( ) ) ;
QString path ;
if ( dir = = " " )
{
dir = QStandardPaths : : standardLocations ( QStandardPaths : : PicturesLocation ) . at ( 0 ) ;
}
filePaths = QFileDialog : : getOpenFileNames (
this , tr ( " Select file(s) " ) , dir , tr ( " Supported Images (*.bmp *.jpg *.jpeg *.tif *.tiff *.png *.ppm *.xbm *.xpm);;PNG Files (*.png);;JPEG Files (*.jpg *.jpeg);;BMP Files (*.bmp);;TIFF Files (*.tif *.tiff);;PPM Files (*.ppm);;XBM Files (*.xbm);;XPM Files (*.xpm) " ) ) ;
if ( filePaths . size ( ) ! = 0 )
{
ui - > progressBar - > setMaximum ( filePaths . size ( ) ) ;
}
for ( int i = filePaths . size ( ) - 1 ; i > 0 - 1 ; i - - )
{
QFileInfo * fileInfo = new QFileInfo ( filePaths . at ( i ) ) ;
QStringList infoList ;
if ( Caesium : : duplicateCheck ( fileInfo - > fileName ( ) , fileInfo - > absoluteFilePath ( ) ) )
{
infoList < < fileInfo - > fileName ( ) < < fixedSize ( fileInfo - > size ( ) , 0 ) < < " " < < " " < < " " < < getFormattedResolution ( fileInfo - > absoluteFilePath ( ) ) < < " " < < fileInfo - > absoluteFilePath ( ) ;
QTreeWidgetItem * item = new QTreeWidgetItem ( infoList , 0 ) ;
item - > setIcon ( 0 , QIcon ( " :/icons/added.png " ) ) ;
ui - > listTreeWidget - > insertTopLevelItem ( 0 , item ) ;
ui - > progressBar - > setValue ( filePaths . size ( ) - i ) ;
path = fileInfo - > path ( ) ;
}
}
if ( path ! = " " )
{
settings . setValue ( " Settings/dir " , path ) ;
}
if ( parent_folder = = " " )
{
parent_folder = path ;
}
ui - > keepStructureCheckBox - > setEnabled ( Caesium : : checkParentFolder ( parent_folder , path ) ) ;
countUpdate ( ) ;
ui - > progressBar - > setValue ( 0 ) ;
}
void Caesium : : on_actionOpen_Folder_triggered ( )
{
QString dir = ( settings . value ( " Settings/dir " ) . value < QString > ( ) ) ;
if ( dir = = " " )
{
dir = QStandardPaths : : standardLocations ( QStandardPaths : : PicturesLocation ) . at ( 0 ) ;
}
QString directory = QFileDialog : : getExistingDirectory ( this , tr ( " Open Directory " ) ,
dir ,
QFileDialog : : ShowDirsOnly
| QFileDialog : : DontResolveSymlinks ) ;
QStringList filters , fileList ;
filters < < " *.bmp " < < " *.jpg " < < " *.jpeg " < < " *.tif " < < " *.png " < < " *.ppm " < < " *.xbm " < < " *.xpm " ;
if ( settings . value ( " Preferences/scansubdir " ) . value < bool > ( ) )
{
fileList = findFilesRecursively ( directory , filters ) ;
}
else
{
QDir qDir ( directory ) ;
qDir . setNameFilters ( filters ) ;
fileList = qDir . entryList ( filters ) ;
}
if ( fileList . size ( ) ! = 0 )
{
ui - > progressBar - > setMaximum ( fileList . size ( ) ) ;
}
for ( int i = fileList . size ( ) - 1 ; i > 0 - 1 ; i - - )
{
QFileInfo * fileInfo = new QFileInfo ( directory + " / " + fileList . at ( i ) ) ;
QStringList infoList ;
if ( Caesium : : duplicateCheck ( fileInfo - > fileName ( ) , fileInfo - > absoluteFilePath ( ) ) )
{
infoList < < fileInfo - > fileName ( ) < < fixedSize ( fileInfo - > size ( ) , 0 ) < < " " < < " " < < " " < < getFormattedResolution ( fileInfo - > absoluteFilePath ( ) ) < < " " < < fileInfo - > absoluteFilePath ( ) ;
QTreeWidgetItem * item = new QTreeWidgetItem ( infoList , 0 ) ;
item - > setIcon ( 0 , QIcon ( " :/icons/added.png " ) ) ;
ui - > listTreeWidget - > insertTopLevelItem ( 0 , item ) ;
ui - > progressBar - > setValue ( fileList . size ( ) - i ) ;
}
}
if ( directory ! = " " )
{
settings . setValue ( " Settings/dir " , directory ) ;
}
if ( parent_folder = = " " )
{
parent_folder = directory ;
}
ui - > keepStructureCheckBox - > setEnabled ( Caesium : : checkParentFolder ( parent_folder , directory ) ) ;
countUpdate ( ) ;
ui - > progressBar - > setValue ( 0 ) ;
}
void Caesium : : on_actionExit_triggered ( )
{
this - > close ( ) ;
}
void Caesium : : on_actionAbout_triggered ( )
{
about = new AboutDialog ( this ) ;
about - > show ( ) ;
}
void Caesium : : on_addButton_clicked ( )
{
Caesium : : on_actionAdd_Pictures_triggered ( ) ;
}
void Caesium : : on_actionRemove_Item_triggered ( )
{
deleting = true ;
int index = 0 ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
if ( ui - > listTreeWidget - > topLevelItem ( i ) - > isSelected ( ) )
{
ui - > listTreeWidget - > takeTopLevelItem ( i ) ;
i - - ;
index = i ;
}
}
if ( ui - > listTreeWidget - > topLevelItemCount ( ) ! = 0 & & index > 0 )
{
ui - > listTreeWidget - > topLevelItem ( index ) - > setSelected ( true ) ;
}
else
{
imageLabel1 - > setPixmap ( QPixmap ( " " ) ) ;
imageLabel2 - > setPixmap ( QPixmap ( " " ) ) ;
}
countUpdate ( ) ;
imageLabel1 - > adjustSize ( ) ;
imageLabel2 - > adjustSize ( ) ;
if ( ui - > listTreeWidget - > topLevelItemCount ( ) = = 0 )
{
parent_folder = " " ;
ui - > keepStructureCheckBox - > setEnabled ( true ) ;
}
}
void Caesium : : on_removeButton_clicked ( )
{
Caesium : : on_actionRemove_Item_triggered ( ) ;
}
void Caesium : : on_actionClear_List_triggered ( )
{
ui - > listTreeWidget - > clear ( ) ;
imageLabel1 - > setPixmap ( QPixmap ( " " ) ) ;
imageLabel2 - > setPixmap ( QPixmap ( " " ) ) ;
countUpdate ( ) ;
imageLabel1 - > adjustSize ( ) ;
imageLabel2 - > adjustSize ( ) ;
parent_folder = " " ;
ui - > keepStructureCheckBox - > setEnabled ( true ) ;
}
void Caesium : : on_actionWebsite_triggered ( )
{
QDesktopServices : : openUrl ( QUrl ( " http://caesium.sourceforge.net " ) ) ;
}
void Caesium : : on_actionOnline_Support_triggered ( )
{
QDesktopServices : : openUrl ( QUrl ( " http://caesium.sourceforge.net/support.html " ) ) ;
}
void Caesium : : on_actionDonate_to_Caesium_triggered ( )
{
QDesktopServices : : openUrl ( QUrl ( " http://sourceforge.net/donate/index.php?group_id=336104 " ) ) ;
}
void Caesium : : on_browseToolButton_clicked ( )
{
QString outputPath = QFileDialog : : getExistingDirectory ( this , tr ( " Select output directory " ) ,
" /home " ,
QFileDialog : : ShowDirsOnly
| QFileDialog : : DontResolveSymlinks ) ;
if ( outputPath ! = " " )
{
ui - > outputLineEdit - > setText ( outputPath ) ;
}
}
void Caesium : : on_sameFolderCheckBox_clicked ( bool checked )
{
if ( checked & & ui - > suffixLineEdit - > text ( ) = = " " )
{
ui - > suffixLineEdit - > setText ( " _compressed " ) ;
}
same_folder_flag = checked ;
}
void Caesium : : on_undoButton_clicked ( )
{
ui - > suffixLineEdit - > setText ( " " ) ;
}
void Caesium : : on_formatComboBox_currentIndexChanged ( int index )
{
ui - > qualityLabel - > setEnabled ( index = = 0 | | index = = 3 ) ;
ui - > qualitySlider - > setEnabled ( index = = 0 | | index = = 3 ) ;
ui - > qualitySpinBox - > setEnabled ( index = = 0 | | index = = 3 ) ;
ui - > sameLevelCheckBox - > setEnabled ( index = = 0 | | index = = 3 ) ;
ui - > setQualityButton - > setEnabled ( index = = 0 | | index = = 3 ) ;
ui - > cantSetButton - > setVisible ( index ! = 0 & & index ! = 3 ) ;
}
void Caesium : : on_cantSetButton_clicked ( )
{
QMessageBox : : information ( this , tr ( " Info " ) ,
tr ( " PNG and BMP are loseless formats, and \n can't be compressed like JPG do. \n Caesium will set the quality level automatically \n for those formats. " ) , QMessageBox : : Ok ) ;
}
void Caesium : : on_setQualityButton_clicked ( )
{
if ( ui - > sameLevelCheckBox - > isChecked ( ) )
{
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
ui - > listTreeWidget - > topLevelItem ( i ) - > setText ( 4 , QString : : number ( ui - > qualitySlider - > value ( ) ) ) ;
}
}
else if ( ui - > listTreeWidget - > selectedItems ( ) . count ( ) ! = 0 )
{
for ( int i = 0 ; i < ui - > listTreeWidget - > selectedItems ( ) . count ( ) ; i + + )
{
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 4 , QString : : number ( ui - > qualitySlider - > value ( ) ) ) ;
}
}
}
void Caesium : : on_actionPreview_triggered ( )
{
QtConcurrent : : run ( this , & Caesium : : runPreview ) ;
}
void Caesium : : on_previewButton_clicked ( )
{
Caesium : : on_actionPreview_triggered ( ) ;
}
void Caesium : : on_listTreeWidget_itemSelectionChanged ( )
{
preview_on = false ;
if ( ui - > listTreeWidget - > selectedItems ( ) . count ( ) > 1 )
{
return ;
}
emit loadThreadStop ( ) ;
scale_factor = 1.0 ;
QMovie * movie = new QMovie ( " :/icons/loading.gif " ) ;
if ( ui - > listTreeWidget - > selectedItems ( ) . count ( ) ! = 0 & & ui - > listTreeWidget - > selectedItems ( ) . count ( ) < 2 )
{
imageLabel1 - > setMovie ( movie ) ;
movie - > start ( ) ;
imageLabel1 - > setGeometry ( 0 , 0 , 32 , 32 ) ;
QThread * loadThread = new LoadPreview ( ui - > listTreeWidget - > selectedItems ( ) . at ( 0 ) - > text ( 7 ) , this ) ;
connect ( this , SIGNAL ( loadThreadStop ( ) ) , loadThread , SLOT ( quit ( ) ) ) ;
connect ( loadThread , SIGNAL ( imageLoaded1 ( QImage ) ) , this , SLOT ( setImageToLabel1 ( QImage ) ) ) ;
connect ( loadThread , SIGNAL ( imageLoaded2 ( QImage ) ) , this , SLOT ( setImageToLabel2 ( QImage ) ) ) ;
connect ( loadThread , SIGNAL ( clearSignal ( ) ) , imageLabel2 , SLOT ( clear ( ) ) ) ;
connect ( loadThread , SIGNAL ( loadingCompressedPreview ( ) ) , this , SLOT ( loadingCompressedPreview ( ) ) ) ;
connect ( loadThread , SIGNAL ( finished ( ) ) , this , SLOT ( adjustPreviewView ( ) ) ) ;
loadThread - > start ( ) ;
//preview_on = false;
Caesium : : enableButtons ( true ) ;
if ( ui - > autoPreviewCheckBox - > isChecked ( ) )
{
Caesium : : on_previewButton_clicked ( ) ;
}
}
else if ( ui - > listTreeWidget - > selectedItems ( ) . count ( ) = = 0 )
{
Caesium : : enableButtons ( false ) ;
}
}
void Caesium : : on_actionSave_List_As_triggered ( )
{
QString fileName = QFileDialog : : getSaveFileName ( this , tr ( " Save as... " ) , QString : : null , tr ( " Caesium List (*.clf) " ) ) ;
Caesium : : saveList ( fileName ) ;
opened_list = fileName ;
}
void Caesium : : on_actionOpen_List_triggered ( )
{
QString listName = QFileDialog : : getOpenFileName ( this , tr ( " Open a list file... " ) , QString : : null , tr ( " Caesium List (*.clf) " ) ) ;
Caesium : : openList ( listName ) ;
}
void Caesium : : on_actionAbout_Qt_triggered ( )
{
QMessageBox : : aboutQt ( this , tr ( " About Qt " ) ) ;
}
void Caesium : : on_actionCheck_for_Updates_triggered ( )
{
ui - > actionCheck_for_Updates - > setEnabled ( false ) ;
updater = new Updater ( this ) ;
updater - > show ( ) ;
ui - > actionCheck_for_Updates - > setEnabled ( true ) ;
}
void Caesium : : checkForUpdateStartup ( )
{
if ( ! settings . value ( " Preferences/startupupdt " ) . value < bool > ( ) )
{
return ;
}
ui - > actionCheck_for_Updates - > setEnabled ( false ) ;
QThread * updtThread = new StartupUpdater ( this ) ;
connect ( updtThread , SIGNAL ( showLabel ( bool ) ) , this , SLOT ( showVersionLabel ( bool ) ) ) ;
updtThread - > start ( ) ;
}
void Caesium : : showVersionLabel ( bool flag )
{
ui - > actionCheck_for_Updates - > setEnabled ( true ) ;
if ( flag )
{
ui - > updateButton - > setVisible ( true ) ;
}
else
{
ui - > updateButton - > setVisible ( false ) ;
}
}
void Caesium : : on_actionShow_Toolbar_toggled ( bool t_checked )
{
ui - > mainToolBar - > setVisible ( t_checked ) ;
settings . setValue ( " Preferences/showtoolbar " , t_checked ) ;
}
void Caesium : : on_updateButton_clicked ( )
{
Caesium : : on_actionCheck_for_Updates_triggered ( ) ;
}
void Caesium : : on_actionCompress_triggered ( )
{
cancelled = false ;
error_count = 0 ;
iteration_count = 0 ;
skipped_count = 0 ;
t . start ( ) ;
QString outputDir = ui - > outputLineEdit - > text ( ) ;
QString format = ui - > formatComboBox - > currentText ( ) . toLower ( ) ;
if ( ui - > formatComboBox - > currentIndex ( ) = = 3 )
{
format = " null " ;
}
QString suffix = ui - > suffixLineEdit - > text ( ) ;
bool checked = ui - > sameFolderCheckBox - > isChecked ( ) ;
bool resize = ui - > resizeGroupBox - > isChecked ( ) ;
bool fixed ;
bool ratio = ui - > keepRatioCheckBox - > isChecked ( ) ;
bool noEnlarge = ui - > noEnlargeCheckBox - > isChecked ( ) ;
bool structure = ui - > keepStructureCheckBox - > isChecked ( ) ;
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 )
{
fixed = true ;
}
else
{
fixed = false ;
}
if ( ( outputDir ! = " " | | checked = = true ) | | ( settings . value ( " Preferences/defaultpath " ) . value < bool > ( ) & & outputDir = = " " ) )
{
if ( ui - > listTreeWidget - > topLevelItemCount ( ) ! = 0 )
{
if ( outputDir = = " " )
{
outputDir = settings . value ( " Settings/path " ) . value < QString > ( ) ;
}
else if ( ! QDir ( outputDir ) . exists ( ) )
{
int r = Caesium : : outputFolderCreation ( ) ;
if ( r = = 0 )
{
if ( ! QDir ( ) . mkdir ( outputDir ) )
{
QMessageBox : : critical ( this , tr ( " Error " ) ,
tr ( " Failed to create the directory. \n Aborting. " ) ,
QMessageBox : : Ok ) ;
return ;
}
}
else
{
return ;
}
}
ui - > progressBar - > setMaximum ( ui - > listTreeWidget - > topLevelItemCount ( ) ) ;
QStringList imageList = loadImages ( ) ;
QStringList qualityList = loadQuality ( ) ;
QList < int > w_list = loadWidth ( ) ;
QList < int > h_list = loadHeight ( ) ;
QThread * compThread = new CompressionThread ( imageList , parent_folder , outputDir , format , suffix , qualityList , checked , w_list , h_list , fixed , ratio , noEnlarge , resize , structure , this ) ;
connect ( compThread , SIGNAL ( updateUI ( int , int , QString ) ) , this , SLOT ( updateUI ( int , int , QString ) ) ) ;
connect ( compThread , SIGNAL ( processingIcon ( int , QString ) ) , this , SLOT ( processingIcon ( int , QString ) ) ) ;
connect ( compThread , SIGNAL ( errorMessageBox ( ) ) , this , SLOT ( errorMessageBox ( ) ) ) ;
connect ( compThread , SIGNAL ( finished ( ) ) , this , SLOT ( showMessageBox ( ) ) ) ;
connect ( ui - > cancelButton , SIGNAL ( clicked ( ) ) , compThread , SLOT ( terminate ( ) ) ) ;
compThread - > start ( ) ;
ui - > actionCompress - > setEnabled ( false ) ;
ui - > compressButton - > setEnabled ( false ) ;
ui - > cancelButton - > setEnabled ( true ) ;
}
else
{
QMessageBox : : critical ( this , tr ( " Error " ) , tr ( " The list is empty! Fill it! " ) , QMessageBox : : Ok ) ;
}
}
else
{
QMessageBox : : critical ( this , tr ( " Error " ) , tr ( " Set an Output Directory first! " ) , QMessageBox : : Ok ) ;
}
}
void Caesium : : showMessageBox ( )
{
this - > show ( ) ;
ui - > cancelButton - > setEnabled ( false ) ;
ui - > actionCompress - > setEnabled ( true ) ;
ui - > compressButton - > setEnabled ( true ) ;
double time = t . elapsed ( ) ;
if ( settings . value ( " Preferences/delete " ) . value < bool > ( ) & & ui - > sameFolderCheckBox - > isChecked ( ) & & ! ui - > suffixLineEdit - > text ( ) . isEmpty ( ) )
{
ui - > progressLabel - > setText ( tr ( " Deleting original files... " ) ) ;
ui - > progressBar - > setMaximum ( ui - > listTreeWidget - > topLevelItemCount ( ) ) ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
if ( ! settings . value ( " Preferences/dontextension " ) . value < bool > ( ) )
{
if ( QFile : : exists ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) ) & & percentageToInt ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 3 ) ) < 0 )
{
QFile : : remove ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) ) ;
ui - > progressBar - > setValue ( i + 1 ) ;
}
}
else if ( settings . value ( " Preferences/dontextension " ) . value < bool > ( ) & & ( QFileInfo ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) ) . suffix ( ) . toLower ( ) = = ui - > formatComboBox - > currentText ( ) . toLower ( ) | | ui - > formatComboBox - > currentIndex ( ) = = 3 ) )
{
if ( QFile : : exists ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) ) & & percentageToInt ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 3 ) ) < 0 )
{
QFile : : remove ( ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) ) ;
ui - > progressBar - > setValue ( i + 1 ) ;
}
}
}
}
countUpdate ( ) ;
if ( ! cancelled )
{
QMessageBox : : information ( this , tr ( " Compression done! " ) , tr ( " Compression finished! \n - " )
+ QString : : number ( ui - > listTreeWidget - > topLevelItemCount ( ) - skipped_count - error_count ) + tr ( " compressed \n - " )
+ QString : : number ( skipped_count ) + tr ( " skipped \n - " )
+ QString : : number ( error_count ) + tr ( " error(s) \n Time elapsed: " )
+ QString : : number ( time / 1000 , ' f ' , 2 ) + " s. "
+ tr ( " \n Saved space: " ) + fixedSize ( saved_space , 1 ) , QMessageBox : : Ok ) ;
}
saved_space = 0 ;
}
void Caesium : : updateUI ( int i , int newSize , QString ratio )
{
if ( newSize < 0 )
{
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setIcon ( 0 , QIcon ( " :/icons/skipped.png " ) ) ;
skipped_count + + ;
newSize = 0 ;
}
else if ( newSize = = 0 )
{
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setIcon ( 0 , QIcon ( " :/icons/error.png " ) ) ;
error_count + + ;
}
else
{
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setIcon ( 0 , QIcon ( " :/icons/done.png " ) ) ;
saved_space + = QFileInfo ( ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > text ( 7 ) ) . size ( ) - newSize ;
}
ui - > progressBar - > setValue ( i ) ;
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setText ( 2 , fixedSize ( newSize , 0 ) ) ;
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setText ( 3 , ratio ) ;
QString chopped_ratio = ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > text ( 3 ) ;
chopped_ratio . chop ( 1 ) ;
if ( chopped_ratio . toInt ( ) > 0 )
{
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setTextColor ( 3 , QColor : : fromRgb ( 255 , 0 , 0 , 255 ) ) ;
}
else
{
ui - > listTreeWidget - > topLevelItem ( i - 1 ) - > setTextColor ( 3 , QColor : : fromRgb ( 0 , 0 , 0 , 255 ) ) ;
}
}
void Caesium : : processingIcon ( int i , QString name )
{
iteration_count = i ;
ui - > listTreeWidget - > scrollToItem ( ui - > listTreeWidget - > topLevelItem ( i - 1 ) , QAbstractItemView : : EnsureVisible ) ;
ui - > progressLabel - > setText ( " ( " + QString : : number ( i + 1 ) + " / " + QString : : number ( ui - > listTreeWidget - > topLevelItemCount ( ) ) + " ) "
+ tr ( " Processing: " ) + name ) ;
ui - > listTreeWidget - > topLevelItem ( i ) - > setIcon ( 0 , QIcon ( " :/icons/processing.png " ) ) ;
}
void Caesium : : on_cancelButton_clicked ( )
{
ui - > actionCompress - > setEnabled ( true ) ;
ui - > compressButton - > setEnabled ( true ) ;
ui - > listTreeWidget - > topLevelItem ( iteration_count ) - > setIcon ( 0 , QIcon ( " :/icons/error.png " ) ) ;
ui - > progressBar - > setValue ( 0 ) ;
cancelled = true ;
}
void Caesium : : on_suffixLineEdit_textChanged ( QString text )
{
QRegExp rx ( " [ \\ /|:*<>] " ) ;
if ( text . contains ( rx ) )
{
ui - > suffixErrorLabel - > setVisible ( true ) ;
ui - > actionCompress - > setEnabled ( false ) ;
ui - > compressButton - > setEnabled ( false ) ;
}
else if ( ! text . contains ( rx ) & & ui - > listTreeWidget - > topLevelItemCount ( ) ! = 0 )
{
ui - > suffixErrorLabel - > setVisible ( false ) ;
ui - > actionCompress - > setEnabled ( true ) ;
ui - > compressButton - > setEnabled ( true ) ;
}
else
{
ui - > suffixErrorLabel - > setVisible ( false ) ;
ui - > actionCompress - > setEnabled ( false ) ;
ui - > compressButton - > setEnabled ( false ) ;
}
}
void Caesium : : fitWindow ( )
{
ui - > zoomInToolButton - > setEnabled ( false ) ;
ui - > zoomOutToolButton - > setEnabled ( false ) ;
scale_factor = 1.0 ;
imageLabel1 - > resize ( ui - > scrollArea1 - > size ( ) ) ;
ui - > scrollArea1 - > setVerticalScrollBarPolicy ( Qt : : ScrollBarAlwaysOff ) ;
ui - > scrollArea1 - > setHorizontalScrollBarPolicy ( Qt : : ScrollBarAlwaysOff ) ;
ui - > scrollArea2 - > setVerticalScrollBarPolicy ( Qt : : ScrollBarAlwaysOff ) ;
ui - > scrollArea2 - > setHorizontalScrollBarPolicy ( Qt : : ScrollBarAlwaysOff ) ;
double ratio = ( double ) currentImage . width ( ) / ( double ) currentImage . height ( ) ;
double s_ratio = ( double ) ui - > scrollArea1 - > width ( ) / ( double ) ui - > scrollArea1 - > height ( ) ;
if ( ( ratio > = 1.0 & & ratio > = s_ratio ) | | ( ratio < 1.0 & & ratio > = s_ratio ) )
{
imageLabel1 - > resize ( ui - > scrollArea1 - > width ( ) , ui - > scrollArea1 - > width ( ) / ratio ) ;
imageLabel2 - > resize ( ui - > scrollArea1 - > width ( ) , ui - > scrollArea1 - > width ( ) / ratio ) ;
}
else
{
imageLabel1 - > resize ( ui - > scrollArea1 - > height ( ) * ratio , ui - > scrollArea1 - > height ( ) ) ;
imageLabel2 - > resize ( ui - > scrollArea1 - > height ( ) * ratio , ui - > scrollArea1 - > height ( ) ) ;
}
orig_on = false ;
}
void Caesium : : originalSize ( )
{
scale_factor = 1.0 ;
ui - > scrollArea1 - > setVerticalScrollBarPolicy ( Qt : : ScrollBarAsNeeded ) ;
ui - > scrollArea1 - > setHorizontalScrollBarPolicy ( Qt : : ScrollBarAsNeeded ) ;
ui - > scrollArea2 - > setVerticalScrollBarPolicy ( Qt : : ScrollBarAsNeeded ) ;
ui - > scrollArea2 - > setHorizontalScrollBarPolicy ( Qt : : ScrollBarAsNeeded ) ;
ui - > zoomInToolButton - > setEnabled ( true ) ;
ui - > zoomOutToolButton - > setEnabled ( true ) ;
imageLabel1 - > adjustSize ( ) ;
imageLabel2 - > adjustSize ( ) ;
orig_on = true ;
}
void Caesium : : on_fitToolButton_clicked ( )
{
Caesium : : fitWindow ( ) ;
}
void Caesium : : on_originalToolButton_clicked ( )
{
Caesium : : originalSize ( ) ;
}
void Caesium : : on_actionSettings_triggered ( )
{
pf = new Preferences ( this ) ;
pf - > show ( ) ;
connect ( pf , SIGNAL ( finished ( int ) ) , this , SLOT ( afterPFUpdate ( ) ) ) ;
}
void Caesium : : scaleImage ( double factor )
{
scale_factor * = factor ;
2021-09-10 10:11:29 +08:00
imageLabel1 - > resize ( scale_factor * imageLabel1 - > pixmap ( Qt : : ReturnByValue ) . size ( ) ) ;
2021-09-10 10:02:59 +08:00
if ( preview_on )
{
//imageLabel2->resize(scale_factor * imageLabel2->pixmap()->size());
}
}
void Caesium : : on_zoomInToolButton_clicked ( )
{
Caesium : : scaleImage ( 1.25 ) ;
ui - > zoomInToolButton - > setEnabled ( scale_factor < 2.0 ) ;
ui - > zoomOutToolButton - > setEnabled ( scale_factor > 0.2 ) ;
}
void Caesium : : on_zoomOutToolButton_clicked ( )
{
Caesium : : scaleImage ( 0.8 ) ;
ui - > zoomInToolButton - > setEnabled ( scale_factor < 2.0 ) ;
ui - > zoomOutToolButton - > setEnabled ( scale_factor > 0.2 ) ;
}
void Caesium : : enableButtons ( bool flag )
{
ui - > zoomInToolButton - > setEnabled ( flag ) ;
ui - > zoomOutToolButton - > setEnabled ( flag ) ;
ui - > fitToolButton - > setEnabled ( flag ) ;
ui - > originalToolButton - > setEnabled ( flag ) ;
}
void Caesium : : countUpdate ( )
{
ui - > progressLabel - > setText ( tr ( " Item count: " ) + QString : : number ( ui - > listTreeWidget - > topLevelItemCount ( ) ) ) ;
ui - > actionClear_List - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > actionCompress - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > compressButton - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > actionPreview - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > actionRemove_Item - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > actionRemove_Item_From_List_and_Hard_Disk - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > removeButton - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > previewButton - > setEnabled ( ui - > listTreeWidget - > topLevelItemCount ( ) > 0 ) ;
ui - > actionSave_List - > setEnabled ( ( ui - > listTreeWidget - > topLevelItemCount ( ) ! = item_count | | QString : : compare ( opened_list , previous_list ) ! = 0 ) & & opened_list ! = " " ) ;
item_count = ui - > listTreeWidget - > topLevelItemCount ( ) ;
if ( opened_list ! = " " & & QFileInfo ( opened_list ) . baseName ( ) ! = " tmplst " )
{
this - > setWindowTitle ( QFileInfo ( opened_list ) . baseName ( ) + tr ( " - Caesium - Image Compressor " ) ) ;
}
previous_list = opened_list ;
}
void Caesium : : afterPFUpdate ( )
{
ui - > deleteOriginalPushButton - > setVisible ( settings . value ( " Preferences/delete " ) . value < bool > ( ) ) ;
}
void Caesium : : on_outputLineEdit_textChanged ( QString folder )
{
out_folder = folder ;
}
void Caesium : : on_actionRemove_Item_From_List_and_Hard_Disk_triggered ( )
{
QMessageBox * msg = new QMessageBox ( this ) ;
msg - > setIcon ( QMessageBox : : Warning ) ;
msg - > setWindowTitle ( tr ( " Warning " ) ) ;
msg - > setText ( tr ( " This action will delete the selected files PERMANENTLY. \n Are you sure you want to continue? " ) ) ;
msg - > addButton ( tr ( " Yes " ) , QMessageBox : : YesRole ) ;
msg - > addButton ( tr ( " No " ) , QMessageBox : : NoRole ) ;
int r = msg - > exec ( ) ;
if ( r = = 0 )
{
QFile file ;
for ( int i = 0 ; i < ui - > listTreeWidget - > selectedItems ( ) . count ( ) ; i + + )
{
file . setFileName ( ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 7 ) ) ;
file . remove ( ) ;
}
Caesium : : on_removeButton_clicked ( ) ;
}
else
{
return ;
}
}
int Caesium : : outputFolderCreation ( )
{
QMessageBox * msg = new QMessageBox ( this ) ;
msg - > setIcon ( QMessageBox : : Warning ) ;
msg - > setWindowTitle ( tr ( " Warning " ) ) ;
msg - > setText ( tr ( " The output folder doesn't exists. \n Do you want to create it? " ) ) ;
msg - > addButton ( tr ( " Yes " ) , QMessageBox : : YesRole ) ;
msg - > addButton ( tr ( " Cancel " ) , QMessageBox : : NoRole ) ;
return msg - > exec ( ) ;
}
void Caesium : : openList ( )
{
if ( QCoreApplication : : arguments ( ) . count ( ) < = 1 | | QFileInfo ( QCoreApplication : : arguments ( ) . at ( 1 ) ) . suffix ( ) ! = " clf " )
{
return ;
}
QString listName = QCoreApplication : : arguments ( ) . at ( 1 ) ;
QFile list ( listName ) ;
if ( list . open ( QIODevice : : ReadOnly ) )
{
ui - > listTreeWidget - > clear ( ) ;
QTextStream stream ( & list ) ;
QString line = stream . readLine ( 0 ) ;
while ( line ! = QString : : null )
{
QStringList splittedLine = line . split ( " | " ) ;
if ( splittedLine . count ( ) ! = 7 )
{
splittedLine . insert ( 5 , " " ) ;
}
QTreeWidgetItem * item = new QTreeWidgetItem ( splittedLine , 0 ) ;
item - > setIcon ( 0 , QIcon ( " :/icons/added.png " ) ) ;
ui - > listTreeWidget - > insertTopLevelItem ( 0 , item ) ;
line = stream . readLine ( 0 ) ;
}
}
Caesium : : countUpdate ( ) ;
opened_list = listName ;
}
void Caesium : : lstSave ( )
{
QFile file ( " lst " ) ;
if ( file . open ( QIODevice : : WriteOnly ) )
{
QTextStream stream ( & file ) ;
if ( ui - > rememberDirectoryCheckBox - > isChecked ( ) )
{
stream < < " 1| " < < ui - > outputLineEdit - > text ( ) < < endl ;
}
else
{
stream < < " 0| " < < ui - > outputLineEdit - > text ( ) < < endl ;
}
}
QString tempFolder = QDir : : tempPath ( ) ;
QDir caesiumTemp ( tempFolder + " / " + " _caesium_ " ) ;
/*if (caesiumTemp.exists())
{
removeDir ( tempFolder + " / " + " _caesium_ " ) ;
} */
}
void Caesium : : on_actionSave_List_triggered ( )
{
if ( opened_list = = " " )
{
Caesium : : on_actionSave_List_As_triggered ( ) ;
ui - > actionSave_List - > setEnabled ( false ) ;
return ;
}
Caesium : : saveList ( opened_list ) ;
ui - > actionSave_List - > setEnabled ( false ) ;
}
void Caesium : : toolbarIconSize ( )
{
QString size = settings . value ( " Settings/iconsize " ) . value < QString > ( ) ;
ui - > mainToolBar - > setIconSize ( QSize ( size . split ( ' x ' ) . at ( 0 ) . toInt ( ) , ( size . split ( ' x ' ) . at ( 0 ) . toInt ( ) ) ) ) ;
int int_size = size . split ( ' x ' ) . at ( 0 ) . toInt ( ) ;
switch ( int_size )
{
case 24 : ui - > action24x24 - > setChecked ( true ) ;
break ;
case 32 : ui - > action32x32 - > setChecked ( true ) ;
break ;
default : ui - > action32x32 - > setChecked ( true ) ;
}
}
void Caesium : : on_action32x32_triggered ( )
{
ui - > action32x32 - > setChecked ( true ) ;
settings . setValue ( " Settings/iconsize " , ui - > action32x32 - > text ( ) ) ;
ui - > mainToolBar - > setIconSize ( QSize ( ui - > action32x32 - > text ( ) . split ( ' x ' ) . at ( 0 ) . toInt ( ) , ui - > action32x32 - > text ( ) . split ( ' x ' ) . at ( 0 ) . toInt ( ) ) ) ;
}
void Caesium : : on_action24x24_triggered ( )
{
ui - > action24x24 - > setChecked ( true ) ;
settings . setValue ( " Settings/iconsize " , ui - > action24x24 - > text ( ) ) ;
ui - > mainToolBar - > setIconSize ( QSize ( ui - > action24x24 - > text ( ) . split ( ' x ' ) . at ( 0 ) . toInt ( ) , ui - > action24x24 - > text ( ) . split ( ' x ' ) . at ( 0 ) . toInt ( ) ) ) ;
}
void Caesium : : on_actionSave_Profile_triggered ( )
{
QString fileName = QFileDialog : : getSaveFileName ( this , tr ( " Save as... " ) , QStandardPaths : : standardLocations ( QStandardPaths : : DocumentsLocation ) . at ( 0 ) , tr ( " Caesium Profile (*.cpf) " ) ) ;
if ( fileName ! = " " )
{
QSettings profile ( fileName , QSettings : : IniFormat ) ;
profile . setIniCodec ( " UTF-8 " ) ;
profile . setValue ( " Profile/quality " , ui - > qualitySlider - > value ( ) ) ;
profile . setValue ( " Profile/same_quality " , ui - > sameLevelCheckBox - > isChecked ( ) ) ;
profile . setValue ( " Profile/format " , ui - > formatComboBox - > currentIndex ( ) ) ;
profile . setValue ( " Profile/output " , ui - > outputLineEdit - > text ( ) ) ;
profile . setValue ( " Profile/same_folder " , ui - > sameFolderCheckBox - > isChecked ( ) ) ;
profile . setValue ( " Profile/suffix " , ui - > suffixLineEdit - > text ( ) ) ;
profile . setValue ( " Profile/resize " , ui - > resizeGroupBox - > isChecked ( ) ) ;
profile . setValue ( " Profile/resize_mode " , ui - > methodComboBox - > currentIndex ( ) ) ;
profile . setValue ( " Profile/width " , ui - > widthSpinBox - > value ( ) ) ;
profile . setValue ( " Profile/height " , ui - > heightSpinBox - > value ( ) ) ;
profile . setValue ( " Profile/same_resize " , ui - > sameResolutionCheckBox - > isChecked ( ) ) ;
profile . setValue ( " Profile/keep_ratio " , ui - > keepRatioCheckBox - > isChecked ( ) ) ;
profile . setValue ( " Profile/no_enlarge " , ui - > noEnlargeCheckBox - > isChecked ( ) ) ;
profile . setValue ( " Profile/keep_structure " , ui - > keepStructureCheckBox - > isChecked ( ) ) ;
}
last_profile = fileName ;
}
void Caesium : : on_actionLoad_Profile_triggered ( )
{
QString fileName = QFileDialog : : getOpenFileName ( this , tr ( " Select a profile file... " ) , QStandardPaths : : standardLocations ( QStandardPaths : : DocumentsLocation ) . at ( 0 ) , tr ( " Caesium Profile (*.cpf) " ) ) ;
if ( fileName ! = " " )
{
Caesium : : profileLoadEngine ( fileName ) ;
}
}
void Caesium : : profileLoadEngine ( QString fileName )
{
if ( fileName ! = " " )
{
QSettings profile ( fileName , QSettings : : IniFormat ) ;
profile . setIniCodec ( " UTF-8 " ) ;
ui - > qualitySlider - > setValue ( profile . value ( " Profile/quality " ) . value < int > ( ) ) ;
ui - > sameLevelCheckBox - > setChecked ( profile . value ( " Profile/same_quality " ) . value < bool > ( ) ) ;
ui - > formatComboBox - > setCurrentIndex ( profile . value ( " Profile/format " ) . value < int > ( ) ) ;
ui - > outputLineEdit - > setText ( profile . value ( " Profile/output " ) . value < QString > ( ) ) ;
ui - > sameFolderCheckBox - > setChecked ( profile . value ( " Profile/same_folder " ) . value < bool > ( ) ) ;
ui - > suffixLineEdit - > setText ( profile . value ( " Profile/suffix " ) . value < QString > ( ) ) ;
ui - > resizeGroupBox - > setChecked ( profile . value ( " Profile/resize " ) . value < bool > ( ) ) ;
ui - > methodComboBox - > setCurrentIndex ( profile . value ( " Profile/resize_mode " ) . value < int > ( ) ) ;
ui - > widthSpinBox - > setValue ( profile . value ( " Profile/width " ) . value < int > ( ) ) ;
ui - > heightSpinBox - > setValue ( profile . value ( " Profile/height " ) . value < int > ( ) ) ;
ui - > sameResolutionCheckBox - > setChecked ( profile . value ( " Profile/same_resize " ) . value < bool > ( ) ) ;
ui - > keepRatioCheckBox - > setChecked ( profile . value ( " Profile/keep_ratio " ) . value < bool > ( ) ) ;
ui - > noEnlargeCheckBox - > setChecked ( profile . value ( " Profile/no_enlarge " ) . value < bool > ( ) ) ;
ui - > keepStructureCheckBox - > setChecked ( profile . value ( " Profile/keep_structure " ) . value < bool > ( ) ) ;
last_profile = fileName ;
}
else
{
ui - > qualitySlider - > setValue ( 80 ) ;
}
}
void Caesium : : on_compressButton_clicked ( )
{
Caesium : : on_actionCompress_triggered ( ) ;
}
void Caesium : : setImageToLabel1 ( QImage image )
{
currentImage = image ;
imageLabel1 - > setPixmap ( QPixmap : : fromImage ( image ) ) ;
}
void Caesium : : setImageToLabel2 ( QImage image )
{
imageLabel2 - > setPixmap ( QPixmap : : fromImage ( image ) ) ;
}
void Caesium : : adjustPreviewView ( )
{
if ( ! deleting )
{
img_ratio = ( double ) imageLabel1 - > pixmap ( ) - > width ( ) / imageLabel1 - > pixmap ( ) - > height ( ) ;
if ( ui - > listTreeWidget - > selectedItems ( ) . at ( 0 ) - > text ( 6 ) = = " " )
{
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 )
{
ui - > widthSpinBox - > setValue ( imageLabel1 - > pixmap ( ) - > width ( ) ) ;
ui - > heightSpinBox - > setValue ( imageLabel1 - > pixmap ( ) - > height ( ) ) ;
}
else
{
ui - > widthSpinBox - > setValue ( 100 ) ;
ui - > heightSpinBox - > setValue ( 100 ) ;
}
}
else if ( ui - > methodComboBox - > currentIndex ( ) = = 0 )
{
QList < int > wh = resolutionToInt ( ui - > listTreeWidget - > selectedItems ( ) . at ( 0 ) - > text ( 6 ) ) ;
ui - > widthSpinBox - > setValue ( wh . at ( 0 ) ) ;
ui - > heightSpinBox - > setValue ( wh . at ( 1 ) ) ;
}
else
{
QList < int > wh = resolutionToInt ( ui - > listTreeWidget - > selectedItems ( ) . at ( 0 ) - > text ( 6 ) ) ;
ui - > widthSpinBox - > setValue ( 100 * wh . at ( 0 ) / imageLabel1 - > pixmap ( ) - > width ( ) ) ;
ui - > heightSpinBox - > setValue ( 100 * wh . at ( 1 ) / imageLabel1 - > pixmap ( ) - > height ( ) ) ;
}
}
if ( settings . value ( " Preferences/imageview " ) . value < QString > ( ) = = " fit " )
{
Caesium : : fitWindow ( ) ;
orig_on = false ;
}
else
{
Caesium : : originalSize ( ) ;
orig_on = true ;
}
deleting = false ;
}
void Caesium : : loadingCompressedPreview ( )
{
QMovie * movie = new QMovie ( " :/icons/loading.gif " ) ;
imageLabel2 - > setMovie ( movie ) ;
movie - > start ( ) ;
imageLabel2 - > setGeometry ( 0 , 0 , 32 , 32 ) ;
}
void Caesium : : on_methodComboBox_currentIndexChanged ( int index )
{
ui - > noEnlargeCheckBox - > setEnabled ( index = = 0 ) ;
if ( index = = 0 )
{
ui - > heightSpinBox - > setSuffix ( " px " ) ;
ui - > widthSpinBox - > setSuffix ( " px " ) ;
}
else
{
ui - > heightSpinBox - > setSuffix ( " % " ) ;
ui - > widthSpinBox - > setSuffix ( " % " ) ;
ui - > widthSpinBox - > setValue ( 100 ) ;
ui - > heightSpinBox - > setValue ( 100 ) ;
}
}
void Caesium : : loadLayout ( )
{
this - > restoreGeometry ( settings . value ( " Layout/geometry " ) . toByteArray ( ) ) ;
this - > restoreState ( settings . value ( " Layout/state " ) . toByteArray ( ) ) ;
}
void Caesium : : on_actionMinimize_to_tray_triggered ( )
{
this - > hide ( ) ;
restoreAction - > setEnabled ( true ) ;
}
void Caesium : : trayIconHandle ( QSystemTrayIcon : : ActivationReason reason )
{
switch ( reason )
{
case QSystemTrayIcon : : Trigger :
break ;
case QSystemTrayIcon : : DoubleClick :
this - > show ( ) ;
restoreAction - > setEnabled ( false ) ;
break ;
case QSystemTrayIcon : : MiddleClick :
break ;
default : ;
}
}
void Caesium : : createTrayIcon ( )
{
trayIcon - > show ( ) ;
restoreAction = new QAction ( QIcon ( " :/icons/undo.png " ) , tr ( " Restore " ) , this ) ;
trayIconMenu - > addAction ( restoreAction ) ;
restoreAction - > setEnabled ( false ) ;
trayIconMenu - > addSeparator ( ) ;
closeFromTrayAction = new QAction ( QIcon ( " :/icons/exit.png " ) , tr ( " Close " ) , this ) ;
trayIconMenu - > addAction ( closeFromTrayAction ) ;
trayIcon - > setContextMenu ( trayIconMenu ) ;
connect ( trayIcon , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( trayIconHandle ( QSystemTrayIcon : : ActivationReason ) ) ) ;
connect ( closeFromTrayAction , SIGNAL ( triggered ( ) ) , this , SLOT ( close ( ) ) ) ;
connect ( restoreAction , SIGNAL ( triggered ( ) ) , this , SLOT ( show ( ) ) ) ;
connect ( restoreAction , SIGNAL ( triggered ( bool ) ) , restoreAction , SLOT ( setEnabled ( bool ) ) ) ;
}
void Caesium : : adjustPercentage ( int value )
{
if ( ui - > methodComboBox - > currentIndex ( ) = = 1 & & ui - > keepRatioCheckBox - > isChecked ( ) )
{
ui - > heightSpinBox - > setValue ( value ) ;
ui - > widthSpinBox - > setValue ( value ) ;
}
}
void Caesium : : adjustHeight ( )
{
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 & & ui - > keepRatioCheckBox - > isChecked ( ) )
{
ui - > heightSpinBox - > setValue ( ui - > widthSpinBox - > value ( ) / img_ratio ) ;
}
}
void Caesium : : adjustWidth ( )
{
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 & & ui - > keepRatioCheckBox - > isChecked ( ) )
{
ui - > widthSpinBox - > setValue ( ui - > heightSpinBox - > value ( ) * img_ratio ) ;
}
}
void Caesium : : on_keepRatioCheckBox_toggled ( bool checked )
{
if ( checked & & ui - > methodComboBox - > currentIndex ( ) = = 1 )
{
ui - > widthSpinBox - > setValue ( ui - > heightSpinBox - > value ( ) ) ;
}
else if ( checked & & ui - > methodComboBox - > currentIndex ( ) = = 0 & & img_ratio ! = 0 )
{
ui - > heightSpinBox - > setValue ( ( double ) ui - > widthSpinBox - > value ( ) / ( double ) img_ratio ) ;
}
}
void Caesium : : runPreview ( )
{
ImageResize imgResize ;
bool resize = ui - > resizeGroupBox - > isChecked ( ) ;
bool fixed ;
int w = ui - > widthSpinBox - > value ( ) ;
int h = ui - > heightSpinBox - > value ( ) ;
bool ratio = ui - > keepRatioCheckBox - > isChecked ( ) ;
bool noEnlarge = ui - > noEnlargeCheckBox - > isChecked ( ) ;
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 )
{
fixed = true ;
}
else
{
fixed = false ;
}
QString tempFolder = QDir : : tempPath ( ) ;
QDir caesiumTemp ( tempFolder + " / " + " _caesium_ " ) ;
if ( ! caesiumTemp . exists ( ) )
{
caesiumTemp . mkpath ( tempFolder + " / " + " _caesium_ " ) ;
}
if ( ui - > listTreeWidget - > selectedItems ( ) . count ( ) ! = 0 )
{
for ( int i = 0 ; i < ui - > listTreeWidget - > selectedItems ( ) . count ( ) ; i + + )
{
QString rndString = ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 0 ) ;
QFileInfo info ( tempFolder + " /_caesium_/ " + rndString + " .cae " ) ;
QFileInfo orig ( ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 7 ) ) ;
QImage image ( ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 7 ) ) ;
if ( resize & & fixed )
{
image = imgResize . fixedResize ( image , w , h , ratio , noEnlarge ) ;
}
else if ( resize & & fixed = = false )
{
int new_w = image . width ( ) * w / 100 ;
int new_h = image . height ( ) * h / 100 ;
image = imgResize . pergentageResize ( image , new_w , new_h ) ;
}
if ( ui - > formatComboBox - > currentIndex ( ) = = 0 )
{
image . save ( tempFolder + " /_caesium_/ " + rndString + " .cae " , ui - > formatComboBox - > currentText ( ) . toLower ( ) . toLatin1 ( ) , ui - > qualitySlider - > value ( ) ) ;
}
else if ( ui - > formatComboBox - > currentIndex ( ) = = 3 )
{
if ( orig . suffix ( ) . toLatin1 ( ) . toLower ( ) = = " jpg " )
{
image . save ( tempFolder + " /_caesium_/ " + rndString + " .cae " , " jpg " , ui - > qualitySlider - > value ( ) ) ;
}
else
{
image . save ( tempFolder + " /_caesium_/ " + rndString + " .cae " , orig . suffix ( ) . toLatin1 ( ) , 1 ) ;
}
}
else
{
image . save ( tempFolder + " /_caesium_/ " + rndString + " .cae " , ui - > formatComboBox - > currentText ( ) . toLower ( ) . toLatin1 ( ) , 1 ) ;
}
if ( settings . value ( " Preferences/exif " ) . value < bool > ( ) )
{
QString exec = " tools \\ exif_copy.exe \" " + ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 7 ) + " \" \" " + tempFolder + " /_caesium_/ " + rndString + " .cae \" " ;
m_startProcess ( exec ) ;
}
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 2 , fixedSize ( info . size ( ) , 0 ) ) ;
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 3 , getRatio ( orig . size ( ) , info . size ( ) ) ) ;
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 4 , QString : : number ( ui - > qualitySlider - > value ( ) ) ) ;
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 6 , QString : : number ( image . width ( ) ) + " x " + QString : : number ( image . height ( ) ) ) ;
}
preview_on = true ;
if ( settings . value ( " Preferences/imageview " ) . value < QString > ( ) = = " fit " | | ! orig_on )
{
Caesium : : fitWindow ( ) ;
}
else
{
Caesium : : scaleImage ( 1.0 ) ;
}
QThread * loadThread = new LoadPreview ( ui - > listTreeWidget - > selectedItems ( ) . at ( 0 ) - > text ( 7 ) , this ) ;
connect ( loadThread , SIGNAL ( imageLoaded2 ( QImage ) ) , this , SLOT ( setImageToLabel2 ( QImage ) ) ) ;
connect ( loadThread , SIGNAL ( clearSignal ( ) ) , imageLabel2 , SLOT ( clear ( ) ) ) ;
connect ( loadThread , SIGNAL ( loadingCompressedPreview ( ) ) , this , SLOT ( loadingCompressedPreview ( ) ) ) ;
connect ( this , SIGNAL ( loadThreadStop ( ) ) , loadThread , SLOT ( terminate ( ) ) ) ;
connect ( loadThread , SIGNAL ( finished ( ) ) , this , SLOT ( adjustPreviewView ( ) ) ) ;
loadThread - > start ( ) ;
//preview_on = false;
Caesium : : enableButtons ( true ) ;
}
}
void Caesium : : on_setResolutionButton_clicked ( )
{
int w , h ;
if ( ui - > sameResolutionCheckBox - > isChecked ( ) )
{
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 )
{
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
ui - > listTreeWidget - > topLevelItem ( i ) - > setText ( 6 , QString : : number ( ui - > widthSpinBox - > value ( ) ) + " x " + QString : : number ( ui - > heightSpinBox - > value ( ) ) ) ;
}
}
else
{
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
w = ui - > widthSpinBox - > value ( ) * ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 5 ) . section ( ' x ' , 0 , 0 ) . toInt ( ) / 100 ;
h = ui - > heightSpinBox - > value ( ) * ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 5 ) . section ( ' x ' , 1 , 1 ) . toInt ( ) / 100 ;
ui - > listTreeWidget - > topLevelItem ( i ) - > setText ( 6 , QString : : number ( w ) + " x " + QString : : number ( h ) ) ;
}
}
}
else if ( ui - > listTreeWidget - > selectedItems ( ) . count ( ) ! = 0 )
{
if ( ui - > methodComboBox - > currentIndex ( ) = = 0 )
{
for ( int i = 0 ; i < ui - > listTreeWidget - > selectedItems ( ) . count ( ) ; i + + )
{
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 6 , QString : : number ( ui - > widthSpinBox - > value ( ) ) + " x " + QString : : number ( ui - > heightSpinBox - > value ( ) ) ) ;
}
}
else
{
for ( int i = 0 ; i < ui - > listTreeWidget - > selectedItems ( ) . count ( ) ; i + + )
{
w = ui - > widthSpinBox - > value ( ) * ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 5 ) . section ( ' x ' , 0 , 0 ) . toInt ( ) / 100 ;
h = ui - > heightSpinBox - > value ( ) * ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > text ( 5 ) . section ( ' x ' , 1 , 1 ) . toInt ( ) / 100 ;
ui - > listTreeWidget - > selectedItems ( ) . at ( i ) - > setText ( 6 , QString : : number ( w ) + " x " + QString : : number ( h ) ) ;
}
}
}
}
bool Caesium : : checkParentFolder ( QString set , QString new_folder )
{
if ( set = = " " )
{
return false ;
}
if ( set . contains ( new_folder , Qt : : CaseSensitive ) )
{
parent_folder = new_folder ;
return true ;
}
else if ( new_folder . contains ( set , Qt : : CaseSensitive ) )
{
return true ;
}
else if ( new_folder . section ( ' \\ ' , 0 , - 2 ) . compare ( set . section ( ' \\ ' , 0 , - 2 ) ) = = 0 | | new_folder . section ( ' / ' , 0 , - 2 ) . compare ( set . section ( ' / ' , 0 , - 2 ) ) = = 0 )
{
parent_folder = new_folder . section ( ' \\ ' , 0 , - 2 ) ;
if ( new_folder . section ( ' \\ ' , 0 , - 2 ) = = " " )
{
parent_folder = new_folder . section ( ' / ' , 0 , - 2 ) ;
}
return true ;
}
else
{
return false ;
}
}
void Caesium : : errorMessageBox ( )
{
QMessageBox : : critical ( this , tr ( " Error " ) , tr ( " Failed to create the directory structure. " ) , QMessageBox : : Ok ) ;
}
void Caesium : : dropWidgetStructure ( QString path )
{
if ( parent_folder = = " " )
{
parent_folder = path ;
}
ui - > keepStructureCheckBox - > setEnabled ( Caesium : : checkParentFolder ( parent_folder , path ) ) ;
}
void Caesium : : saveList ( QString path )
{
QFile file ( path ) ;
if ( file . open ( QIODevice : : WriteOnly ) )
{
QTextStream stream ( & file ) ;
for ( int i = 0 ; i < ui - > listTreeWidget - > topLevelItemCount ( ) ; i + + )
{
stream < < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 0 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 1 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 2 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 3 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 4 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 5 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 6 ) + " | "
< < ui - > listTreeWidget - > topLevelItem ( i ) - > text ( 7 ) + " | "
< < endl ;
}
}
}
void Caesium : : openList ( QString path )
{
QFile list ( path ) ;
if ( list . open ( QIODevice : : ReadOnly ) )
{
ui - > listTreeWidget - > clear ( ) ;
QTextStream stream ( & list ) ;
QString line = stream . readLine ( 0 ) ;
while ( line ! = QString : : null )
{
QStringList splittedLine = line . split ( " | " ) ;
QTreeWidgetItem * item = new QTreeWidgetItem ( splittedLine , 0 ) ;
item - > setIcon ( 0 , QIcon ( " :/icons/added.png " ) ) ;
ui - > listTreeWidget - > insertTopLevelItem ( 0 , item ) ;
line = stream . readLine ( 0 ) ;
}
}
opened_list = path ;
Caesium : : countUpdate ( ) ;
}