diff --git a/.gitignore b/.gitignore index 80681ca..23c667a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ nbproject *.a *.orig *.*~ +moc_* +ui_* diff --git a/CMakeLists.txt b/CMakeLists.txt index 7bca3ba..bb508ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -set(project "JAA") +project("JAA") cmake_policy(SET CMP0020 NEW) @@ -13,6 +13,9 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP") +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -ggdb -Wall -Wextra") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++0x -g -fno-omit-frame-pointer -Wall -Wextra -pedantic -Weverything -Wnosystem-headers") endif() find_package(Qt5Widgets REQUIRED) @@ -25,20 +28,17 @@ add_subdirectory(Compressor) include_directories(${CMAKE_SOURCE_DIR}) +set(${PROJECT_NAME}_SRC main.cpp) +add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_SRC}) -set(${project}_SRC main.cpp) - -add_executable(${project} ${${project}_SRC}) +qt5_use_modules(${PROJECT_NAME} Widgets Gui Core) -qt5_use_modules(${project} Widgets Gui Core) - -target_link_libraries(${project} +target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES} - ${project}_face - ${project}_compressor - ${project}_codec + ${PROJECT_NAME}_face + ${PROJECT_NAME}_compressor + ${PROJECT_NAME}_codec ) - -add_dependencies(${project} ${project}_face) +add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_face) diff --git a/Compressor/CMakeLists.txt b/Compressor/CMakeLists.txt index 3917b9a..f374e94 100644 --- a/Compressor/CMakeLists.txt +++ b/Compressor/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_policy(SET CMP0020 NEW) find_package(Qt5Widgets REQUIRED) add_definitions(${QT5_DEFINITIONS}) -set(${project}_compressor_SRC +set(${PROJECT_NAME}_compressor_SRC compressor.cpp ) @@ -16,15 +16,15 @@ add_subdirectory(FilesTable) add_subdirectory(CRC) -add_library(${project}_compressor STATIC - ${${project}_compressor_SRC} +add_library(${PROJECT_NAME}_compressor STATIC + ${${PROJECT_NAME}_compressor_SRC} ) -qt5_use_modules(${project}_compressor Widgets Gui Core) +qt5_use_modules(${PROJECT_NAME}_compressor Widgets Gui Core) -target_link_libraries(${project}_compressor - ${project}_codec - ${project}_datablock - ${project}_filestable - ${project}_crc +target_link_libraries(${PROJECT_NAME}_compressor + ${PROJECT_NAME}_codec + ${PROJECT_NAME}_datablock + ${PROJECT_NAME}_filestable + ${PROJECT_NAME}_crc ) diff --git a/Compressor/CRC/CMakeLists.txt b/Compressor/CRC/CMakeLists.txt index 39d398e..00f4ab2 100644 --- a/Compressor/CRC/CMakeLists.txt +++ b/Compressor/CRC/CMakeLists.txt @@ -1,16 +1,16 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_crc_SRC +set(${PROJECT_NAME}_crc_SRC crc.cpp ) include_directories(${CMAKE_SOURCE_DIR}) -add_library(${project}_crc STATIC - ${${project}_crc_SRC} +add_library(${PROJECT_NAME}_crc STATIC + ${${PROJECT_NAME}_crc_SRC} ) -target_link_libraries(${project}_crc +target_link_libraries(${PROJECT_NAME}_crc ) diff --git a/Compressor/CRC/crc.cpp b/Compressor/CRC/crc.cpp index 050ee61..7b66216 100644 --- a/Compressor/CRC/crc.cpp +++ b/Compressor/CRC/crc.cpp @@ -1,6 +1,5 @@ #include "crc.h" -#include -#include + /* Name : CRC-32 Poly : 0x04C11DB7 x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 diff --git a/Compressor/CRC/crc.h b/Compressor/CRC/crc.h index d2c3c62..a100698 100644 --- a/Compressor/CRC/crc.h +++ b/Compressor/CRC/crc.h @@ -1,9 +1,6 @@ -#ifndef CRC_H -#define CRC_H +#pragma once -#include +#include #include uint_least32_t crc32(const unsigned char * buf, size_t len); - -#endif /* CRC_H */ \ No newline at end of file diff --git a/Compressor/Codec/CMakeLists.txt b/Compressor/Codec/CMakeLists.txt index 5ba99a2..e1f5a42 100644 --- a/Compressor/Codec/CMakeLists.txt +++ b/Compressor/Codec/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_codec_SRC +set(${PROJECT_NAME}_codec_SRC codecAbstract.cpp codec.cpp ) @@ -10,13 +10,13 @@ include_directories(${CMAKE_SOURCE_DIR}) add_subdirectory(Codecs) -add_library(${project}_codec STATIC - ${${project}_codec_SRC} +add_library(${PROJECT_NAME}_codec STATIC + ${${PROJECT_NAME}_codec_SRC} ) -target_link_libraries(${project}_codec - ${project}_codec_bwt - ${project}_codec_huff - ${project}_codec_mtf - ${project}_codec_rle +target_link_libraries(${PROJECT_NAME}_codec + ${PROJECT_NAME}_codec_bwt + ${PROJECT_NAME}_codec_huff + ${PROJECT_NAME}_codec_mtf + ${PROJECT_NAME}_codec_rle ) diff --git a/Compressor/Codec/Codecs/BWT/CMakeLists.txt b/Compressor/Codec/Codecs/BWT/CMakeLists.txt index 7d87c0e..fb63f37 100644 --- a/Compressor/Codec/Codecs/BWT/CMakeLists.txt +++ b/Compressor/Codec/Codecs/BWT/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_codec_bwt_SRC +set(${PROJECT_NAME}_codec_bwt_SRC codecBWT.cpp ) @@ -9,10 +9,10 @@ include_directories(${CMAKE_SOURCE_DIR}) add_subdirectory(divsuf) -add_library(${project}_codec_bwt STATIC - ${${project}_codec_bwt_SRC} +add_library(${PROJECT_NAME}_codec_bwt STATIC + ${${PROJECT_NAME}_codec_bwt_SRC} ) -target_link_libraries(${project}_codec_bwt - ${project}_divsuf +target_link_libraries(${PROJECT_NAME}_codec_bwt + ${PROJECT_NAME}_divsuf ) diff --git a/Compressor/Codec/Codecs/BWT/divsuf/CMakeLists.txt b/Compressor/Codec/Codecs/BWT/divsuf/CMakeLists.txt index 224fa6c..225a5aa 100644 --- a/Compressor/Codec/Codecs/BWT/divsuf/CMakeLists.txt +++ b/Compressor/Codec/Codecs/BWT/divsuf/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_divsuf_SRC +set(${PROJECT_NAME}_divsuf_SRC divsufsort.cpp sssort.cpp trsort.cpp @@ -9,10 +9,10 @@ set(${project}_divsuf_SRC include_directories(${CMAKE_SOURCE_DIR}) -add_library(${project}_divsuf STATIC - ${${project}_divsuf_SRC} +add_library(${PROJECT_NAME}_divsuf STATIC + ${${PROJECT_NAME}_divsuf_SRC} ) -target_link_libraries(${project}_divsuf +target_link_libraries(${PROJECT_NAME}_divsuf ) diff --git a/Compressor/Codec/Codecs/HUFF/CMakeLists.txt b/Compressor/Codec/Codecs/HUFF/CMakeLists.txt index b7bf284..6de0a67 100644 --- a/Compressor/Codec/Codecs/HUFF/CMakeLists.txt +++ b/Compressor/Codec/Codecs/HUFF/CMakeLists.txt @@ -1,15 +1,15 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_codec_huff_SRC +set(${PROJECT_NAME}_codec_huff_SRC codecHUFF.cpp shclib.cpp ) include_directories(${CMAKE_SOURCE_DIR}) -add_library(${project}_codec_huff STATIC - ${${project}_codec_huff_SRC} +add_library(${PROJECT_NAME}_codec_huff STATIC + ${${PROJECT_NAME}_codec_huff_SRC} ) -target_link_libraries(${project}_codec_huff +target_link_libraries(${PROJECT_NAME}_codec_huff ) diff --git a/Compressor/Codec/Codecs/MTF/CMakeLists.txt b/Compressor/Codec/Codecs/MTF/CMakeLists.txt index ae1359b..374d387 100644 --- a/Compressor/Codec/Codecs/MTF/CMakeLists.txt +++ b/Compressor/Codec/Codecs/MTF/CMakeLists.txt @@ -1,14 +1,14 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_codec_mtf_SRC +set(${PROJECT_NAME}_codec_mtf_SRC codecMTF.cpp ) include_directories(${CMAKE_SOURCE_DIR}) -add_library(${project}_codec_mtf STATIC - ${${project}_codec_mtf_SRC} +add_library(${PROJECT_NAME}_codec_mtf STATIC + ${${PROJECT_NAME}_codec_mtf_SRC} ) -target_link_libraries(${project}_codec_mtf +target_link_libraries(${PROJECT_NAME}_codec_mtf ) diff --git a/Compressor/Codec/Codecs/RLE/CMakeLists.txt b/Compressor/Codec/Codecs/RLE/CMakeLists.txt index 57fef6f..3cc4957 100644 --- a/Compressor/Codec/Codecs/RLE/CMakeLists.txt +++ b/Compressor/Codec/Codecs/RLE/CMakeLists.txt @@ -1,14 +1,14 @@ cmake_minimum_required(VERSION 2.8) -set(${project}_codec_rle_SRC +set(${PROJECT_NAME}_codec_rle_SRC codecRLE.cpp ) include_directories(${CMAKE_SOURCE_DIR}) -add_library(${project}_codec_rle STATIC - ${${project}_codec_rle_SRC} +add_library(${PROJECT_NAME}_codec_rle STATIC + ${${PROJECT_NAME}_codec_rle_SRC} ) -target_link_libraries(${project}_codec_rle +target_link_libraries(${PROJECT_NAME}_codec_rle ) diff --git a/Compressor/Codec/Codecs/RLE/codecRLE.cpp b/Compressor/Codec/Codecs/RLE/codecRLE.cpp index 547913c..a11d0fc 100644 --- a/Compressor/Codec/Codecs/RLE/codecRLE.cpp +++ b/Compressor/Codec/Codecs/RLE/codecRLE.cpp @@ -19,6 +19,8 @@ #include +#include + Codec_RLE::Codec_RLE() { } Codec_RLE::~Codec_RLE() { } diff --git a/Compressor/Codec/codec.h b/Compressor/Codec/codec.h index d2ae744..dd2ff43 100644 --- a/Compressor/Codec/codec.h +++ b/Compressor/Codec/codec.h @@ -15,20 +15,19 @@ * along with this program. If not, see . * ******************************************************************************/ -#ifndef CODEC_H -#define CODEC_H +#pragma once -#include "Codecs/BWT/codecBWT.h" -#include "Codecs/MTF/codecMTF.h" -#include "Codecs/RLE/codecRLE.h" -#include "Codecs/HUFF/codecHUFF.h" +#include "Compressor/Codec/Codecs/BWT/codecBWT.h" +#include "Compressor/Codec/Codecs/MTF/codecMTF.h" +#include "Compressor/Codec/Codecs/RLE/codecRLE.h" +#include "Compressor/Codec/Codecs/HUFF/codecHUFF.h" + +class Codec : public virtual Codec_BWT, public virtual Codec_HUFF, + public virtual Codec_MTF, public virtual Codec_RLE { -class Codec : public virtual Codec_BWT, public virtual Codec_HUFF, public virtual Codec_MTF, public virtual Codec_RLE { public: Codec(); virtual ~Codec(); -private: +private: }; - -#endif /* CODEC_H */ diff --git a/Compressor/Codec/codecAbstract.cpp b/Compressor/Codec/codecAbstract.cpp index 0123c05..681700b 100644 --- a/Compressor/Codec/codecAbstract.cpp +++ b/Compressor/Codec/codecAbstract.cpp @@ -16,8 +16,9 @@ ******************************************************************************/ #include "codecAbstract.h" -#include "../DataBlock/dataBlock.h" -#include "../DataBlock/dataBlockHeader.h" + +#include "Compressor/DataBlock/dataBlock.h" +#include "Compressor/DataBlock/dataBlockHeader.h" Codec_abstract::Codec_abstract() : data(0), decodedDataSize(0), encodedDataSize(0), codecParams(0) { } @@ -48,4 +49,4 @@ Codec_abstract::recordOutHeader(DataBlockHeader *outHeader, uint64_t id) { outHeader->setDecodedDataSize(decodedDataSize); outHeader->setEncodedDataSize(encodedDataSize); outHeader->setCodecParams(codecParams); -} \ No newline at end of file +} diff --git a/Compressor/DataBlock/CMakeLists.txt b/Compressor/DataBlock/CMakeLists.txt index 5306237..6e81413 100644 --- a/Compressor/DataBlock/CMakeLists.txt +++ b/Compressor/DataBlock/CMakeLists.txt @@ -7,7 +7,7 @@ find_package(Qt5Widgets REQUIRED) add_definitions(${QT5_DEFINITIONS}) -set(${project}_datablock_SRC +set(${PROJECT_NAME}_datablock_SRC dataBlock.cpp dataBlockHeader.cpp readerDataBlockHeader.cpp @@ -16,12 +16,12 @@ set(${project}_datablock_SRC include_directories(${CMAKE_SOURCE_DIR}) -add_library(${project}_datablock STATIC - ${${project}_datablock_SRC} +add_library(${PROJECT_NAME}_datablock STATIC + ${${PROJECT_NAME}_datablock_SRC} ) -qt5_use_modules(${project}_datablock Widgets Gui Core OpenGL) +qt5_use_modules(${PROJECT_NAME}_datablock Widgets Gui Core OpenGL) -target_link_libraries(${project}_datablock +target_link_libraries(${PROJECT_NAME}_datablock ${QT_LIBRARIES} ) diff --git a/Compressor/DataBlock/dataBlock.cpp b/Compressor/DataBlock/dataBlock.cpp index 10e5be3..9f330f2 100644 --- a/Compressor/DataBlock/dataBlock.cpp +++ b/Compressor/DataBlock/dataBlock.cpp @@ -37,7 +37,7 @@ dataSize(0), nBytesToRead(setBlockSize), header(new DataBlockHeader()), outBlock(new dataT(setBlockSize * 2)), recoveryMode(false) { } -DataBlock::DataBlock() : data(new vector < unsigned char >), dataSize(0), nBytesToRead(0), +DataBlock::DataBlock() : data(new dataT), dataSize(0), nBytesToRead(0), header(new DataBlockHeader()), outBlock(NULL), recoveryMode(false) { data->reserve(MIN_RAW_BLOCK_SIZE); } diff --git a/Compressor/DataBlock/dataBlock.h b/Compressor/DataBlock/dataBlock.h index 225a1b8..78b657c 100644 --- a/Compressor/DataBlock/dataBlock.h +++ b/Compressor/DataBlock/dataBlock.h @@ -15,21 +15,13 @@ * along with this program. If not, see . * ******************************************************************************/ -#ifndef DATABLOCK_H -#define DATABLOCK_H +#pragma once -#include "../private/consts.h" -#include "../CRC/crc.h" +#include "Compressor/private/consts.h" -#include -#include -#include #include -#include -using namespace std; - -typedef vector < unsigned char > dataT; +typedef std::vector dataT; class QFile; class DataBlockHeader; @@ -72,7 +64,4 @@ class DataBlock { bool recoveryMode; uint32_t calcCRC(); - }; - -#endif /* DATABLOCK_H */ diff --git a/Compressor/FilesTable/CMakeLists.txt b/Compressor/FilesTable/CMakeLists.txt index 8e066cf..91cc6b0 100644 --- a/Compressor/FilesTable/CMakeLists.txt +++ b/Compressor/FilesTable/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 2.8) find_package(Boost REQUIRED ) -set(${project}_filestable_SRC +set(${PROJECT_NAME}_filestable_SRC fileBlocksInfo.cpp filesTable.cpp ) @@ -14,9 +14,9 @@ include_directories( ) -add_library(${project}_filestable STATIC - ${${project}_filestable_SRC} +add_library(${PROJECT_NAME}_filestable STATIC + ${${PROJECT_NAME}_filestable_SRC} ) -target_link_libraries(${project}_filestable +target_link_libraries(${PROJECT_NAME}_filestable ) diff --git a/Compressor/compressor.cpp b/Compressor/compressor.cpp index b818446..606cbfa 100644 --- a/Compressor/compressor.cpp +++ b/Compressor/compressor.cpp @@ -34,9 +34,9 @@ void CompressorStatus::showInfo(ErrorCode, const QString&, unsigned int) { } Compressor::Compressor(CompressorStatus *status) -: codec(), block(NULL), status(status), currReadBytesCount(0), -decodedDataSize(0), encodedDataSize(0), totalProcessingTime(0), -source_data_size(0), blocksTable(), defaultCompressSequence() { + : codec(), block(NULL), status(status), currReadBytesCount(0), + decodedDataSize(0), encodedDataSize(0), totalProcessingTime(0), + sourceDataSize(0), blocksTable(), defaultCompressSequence() { defaultCompressSequence.push_back(RLE); defaultCompressSequence.push_back(BWT); @@ -126,8 +126,8 @@ Compressor::compress( //compress current file if (!block->readRAW(fin)) break; - source_data_size = header->getDecodedDataSize(); - currReadBytesCount += source_data_size; + sourceDataSize = header->getDecodedDataSize(); + currReadBytesCount += sourceDataSize; header->setFileName(iFileNames[*i].toUtf8().constData()); header->setPart(part++); @@ -142,13 +142,13 @@ Compressor::compress( header->setFileName(iFileNames[*i].toUtf8().constData()); encodedDataSize += header->getEncodedDataSize(); - header->setRAWDataSize(source_data_size); + header->setRAWDataSize(sourceDataSize); header->setPart(part - 1); header->setPartsCount(partsCount); block->write(fout); showEncodingProgress(iFileNames[*i], - speed(source_data_size, stoptTime - startTime)); + speed(sourceDataSize, stoptTime - startTime)); } fin.close(); diff --git a/Compressor/compressor.h b/Compressor/compressor.h index 5cd99a7..2ced8b7 100644 --- a/Compressor/compressor.h +++ b/Compressor/compressor.h @@ -15,10 +15,9 @@ * along with this program. If not, see . * ******************************************************************************/ -#ifndef COMPRESSOR_H -#define COMPRESSOR_H +#pragma once -#include "./Codec/codec.h" +#include "Compressor/Codec/codec.h" #include "FilesTable/filesTable.h" #include "DataBlock/dataBlockHeader.h" @@ -29,8 +28,8 @@ #include class CompressorStatus { -public: +public: CompressorStatus() : runStatus(RUN) { }; @@ -127,7 +126,7 @@ class Compressor { off_t decodedDataSize; off_t encodedDataSize; uint32_t totalProcessingTime; - unsigned int source_data_size; + unsigned int sourceDataSize; FilesTable blocksTable; CompressorStatus::ErrorCode error; vector contents; @@ -257,5 +256,3 @@ Compressor::showInfo(CompressorStatus::ErrorCode errorCode, static_cast(strlen(currFileName))); if (status) status->showInfo(errorCode, fileName, id); } - -#endif /* COMPRESSOR_H */ diff --git a/GUI/CMakeLists.txt b/GUI/CMakeLists.txt index ceedd38..74ea016 100644 --- a/GUI/CMakeLists.txt +++ b/GUI/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_policy(SET CMP0020 NEW) find_package(Qt5Widgets REQUIRED) add_definitions(${QT5_DEFINITIONS}) -set(${project}_face_SRC +set(${PROJECT_NAME}_face_SRC compressSettingsPanel.cpp compressorThread.cpp dataUnitsToQString.cpp @@ -15,7 +15,7 @@ set(${project}_face_SRC statInfoW.cpp ) -set(${project}_face_HEADERS +set(${PROJECT_NAME}_face_HEADERS compressSettingsPanel.h compressorThread.h decompressSetingsPanel.h @@ -24,28 +24,26 @@ set(${project}_face_HEADERS statInfoW.h ) -set(${project}_face_FORMS +set(${PROJECT_NAME}_face_FORMS face.ui ) - -QT5_WRAP_UI(${project}_face_FORMS_HEADERS ${${project}_face_FORMS}) -QT5_WRAP_CPP(${project}_face_HEADERS_MOC ${${project}_face_HEADERS}) +QT5_WRAP_UI(${PROJECT_NAME}_face_FORMS_HEADERS ${${PROJECT_NAME}_face_FORMS}) +QT5_WRAP_CPP(${PROJECT_NAME}_face_HEADERS_MOC ${${PROJECT_NAME}_face_HEADERS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_SOURCE_DIR}) - -add_library(${project}_face STATIC - ${${project}_face_SRC} - ${${project}_face_FORMS_HEADERS} - ${${project}_face_HEADERS_MOC} +add_library(${PROJECT_NAME}_face STATIC + ${${PROJECT_NAME}_face_SRC} + ${${PROJECT_NAME}_face_FORMS_HEADERS} + ${${PROJECT_NAME}_face_HEADERS_MOC} ) -qt5_use_modules(${project}_face Widgets Gui Core) +qt5_use_modules(${PROJECT_NAME}_face Widgets Gui Core) -target_link_libraries(${project}_face +target_link_libraries(${PROJECT_NAME}_face ${QT_LIBRARIES} - ${project}_compressor + ${PROJECT_NAME}_compressor ) diff --git a/GUI/face.cpp b/GUI/face.cpp index cd2c8f2..eeb1909 100644 --- a/GUI/face.cpp +++ b/GUI/face.cpp @@ -31,38 +31,112 @@ #include #include -Face::Face() : sourceFileNames() { - widget = new Ui::face; - widget->setupUi(this); - - filelist = new FileList; - setCentralWidget(filelist); - - compressSettingsPanel = new CompressSettingsPanel; - compressSettingsDock = new QDockWidget(tr("Compress Settings"), this); - compressSettingsDock->setAllowedAreas(Qt::LeftDockWidgetArea); - compressSettingsDock->setWidget(compressSettingsPanel); - addDockWidget(Qt::LeftDockWidgetArea, compressSettingsDock); +struct Face::Private { + CompressSettingsPanel *compressSettingsPanel; + DecompressSettingsPanel *decompressSettingsPanel; + + StatInfoW *statInfoW; + + CompressorThread *compressThread; + CompressorThread *decompressThread; + CompressorThread *listArchiveThread; + + Ui::face *widget; + Compressor *compressor; + + QToolBar *actionToolBar; + + FileList *filelist; + + QStringList sourceFileNames; + QStringList encodedfileNames; + + QString destFileName; + QString destDirName; + + QDir compressBaseDir; + QDir decompressBaseDir; + + QDockWidget *compressSettingsDock; + QDockWidget *decompressSettingsDock; + + QAction *selectFilesToCompressAction; + QAction *selectFileToDecompressAction; + QAction *compressAction; + QAction *decompressAction; + QAction *exitAction; + QAction *aboutAction; + QAction *aboutQtAction; + + QMenu *fileMenu; + QMenu *helpMenu; + + QProgressDialog *compressingProgressDialog; + QProgressDialog *decompressingProgressDialog; + QProgressDialog *listArchiveContentsProgressDialog; + + bool brokenFileWarningShown; + + QList< Compressor::CoderTypes> compressSequence; + unsigned int blockSize; + bool keepBrokenFiles; + + + Private(QMainWindow* parent) : + compressSettingsPanel(new CompressSettingsPanel()), + decompressSettingsPanel(new DecompressSettingsPanel()), + statInfoW(new StatInfoW(parent)), + m_parent(parent), + compressThread(new CompressorThread()), + decompressThread(new CompressorThread()), + listArchiveThread(new CompressorThread()), + widget(new Ui::face()), + filelist(new FileList()) + { + compressSettingsDock = new QDockWidget(tr("Compress Settings"), m_parent); + decompressSettingsDock = new QDockWidget(tr("Decompress Settings"), m_parent); + + compressingProgressDialog = new QProgressDialog("Compressing files...", + "Abort", 0, 100, m_parent); + decompressingProgressDialog = new QProgressDialog("Decompressing files...", + "Abort", 0, 100, m_parent); + listArchiveContentsProgressDialog = new QProgressDialog("Reading archive contents...", + "Abort", 0, 100, m_parent); + + widget->setupUi(m_parent); + + selectFilesToCompressAction = new QAction(tr("Select files to compress"), + m_parent); + selectFileToDecompressAction = new QAction(tr("Select file to decompress"), + m_parent); + + compressAction = new QAction(tr("Compress"), m_parent); + decompressAction = new QAction(tr("Decompress"), m_parent); + exitAction = new QAction(tr("E&xit"), m_parent); + aboutQtAction = new QAction(QIcon(":/images/qt.png"), tr("About &Qt"), + m_parent); + aboutAction = new QAction(QIcon(":/images/qt.png"), tr("About"), m_parent); + } - compressSettingsDock->hide(); +private: + QMainWindow* m_parent; +}; - decompressSettingsPanel = new DecompressSettingsPanel; - decompressSettingsDock = new QDockWidget(tr("Decompress Settings"), this); - decompressSettingsDock->setAllowedAreas(Qt::LeftDockWidgetArea); - decompressSettingsDock->setWidget(decompressSettingsPanel); - addDockWidget(Qt::LeftDockWidgetArea, decompressSettingsDock); +Face::Face() : d(new Private(this)) { + setCentralWidget(d->filelist); - decompressSettingsDock->hide(); + + d->compressSettingsDock->setAllowedAreas(Qt::LeftDockWidgetArea); + d->compressSettingsDock->setWidget(d->compressSettingsPanel); + addDockWidget(Qt::LeftDockWidgetArea, d->compressSettingsDock); - statInfoW = new StatInfoW(this); + d->compressSettingsDock->hide(); - compressThread = new CompressorThread; - decompressThread = new CompressorThread; - listArchiveThread = new CompressorThread; + d->decompressSettingsDock->setAllowedAreas(Qt::LeftDockWidgetArea); + d->decompressSettingsDock->setWidget(d->decompressSettingsPanel); + addDockWidget(Qt::LeftDockWidgetArea, d->decompressSettingsDock); - compressingProgressDialog = new QProgressDialog("Compressing files...", "Abort", 0, 100, this); - decompressingProgressDialog = new QProgressDialog("Decompressing files...", "Abort", 0, 100, this); - listArchiveContentsProgressDialog = new QProgressDialog("Reading archive contents...", "Abort", 0, 100, this); + d->decompressSettingsDock->hide(); qRegisterMetaType< CTCompressorStatus::ErrorCode > ("CTCompressorStatus::ErrorCode"); qRegisterMetaType< Compressor::Stat > ("Compressor::Stat"); @@ -75,10 +149,6 @@ Face::Face() : sourceFileNames() { } Face::~Face() { - delete compressingProgressDialog; - delete decompressingProgressDialog; - delete statInfoW; - delete widget; } void @@ -93,64 +163,53 @@ Face::about() { void Face::activateCompressMode() { - decompressAction->setEnabled(false); - compressAction->setEnabled(true); - compressSettingsDock->show(); - decompressSettingsDock->hide(); + d->decompressAction->setEnabled(false); + d->compressAction->setEnabled(true); + d->compressSettingsDock->show(); + d->decompressSettingsDock->hide(); } void Face::activateDecompressMode() { - compressAction->setEnabled(false); - decompressAction->setEnabled(true); - decompressSettingsDock->show(); - compressSettingsDock->hide(); + d->compressAction->setEnabled(false); + d->decompressAction->setEnabled(true); + d->decompressSettingsDock->show(); + d->compressSettingsDock->hide(); } void Face::createActions() { - selectFilesToCompressAction = new QAction(tr("Select files to compress"), this); - connect(selectFilesToCompressAction, SIGNAL(triggered()), this, SLOT(selectFilesToCompress())); - - selectFileToDecompressAction = new QAction(tr("Select file to decompress"), this); - connect(selectFileToDecompressAction, SIGNAL(triggered()), this, SLOT(selectFileToDecompress())); - - compressAction = new QAction(tr("Compress"), this); - compressAction->setEnabled(false); - connect(compressAction, SIGNAL(triggered()), this, SLOT(compress())); + connect(d->selectFilesToCompressAction, SIGNAL(triggered()), this, SLOT(selectFilesToCompress())); + connect(d->selectFileToDecompressAction, SIGNAL(triggered()), this, SLOT(selectFileToDecompress())); - decompressAction = new QAction(tr("Decompress"), this); - decompressAction->setEnabled(false); - connect(decompressAction, SIGNAL(triggered()), this, SLOT(decompress())); + d->compressAction->setEnabled(false); + d->decompressAction->setEnabled(false); - exitAction = new QAction(tr("E&xit"), this); - connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); - - aboutQtAction = new QAction(QIcon(":/images/qt.png"), tr("About &Qt"), this); - connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); - - aboutAction = new QAction(QIcon(":/images/qt.png"), tr("About"), this); - connect(aboutAction, SIGNAL(triggered()), this, SLOT(about())); + connect(d->compressAction, SIGNAL(triggered()), this, SLOT(compress())); + connect(d->decompressAction, SIGNAL(triggered()), this, SLOT(decompress())); + connect(d->exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(d->aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + connect(d->aboutAction, SIGNAL(triggered()), this, SLOT(about())); } void Face::createToolBars() { - actionToolBar = addToolBar(tr("Action")); - actionToolBar->addAction(compressAction); - actionToolBar->addAction(decompressAction); + d->actionToolBar = addToolBar(tr("Action")); + d->actionToolBar->addAction(d->compressAction); + d->actionToolBar->addAction(d->decompressAction); } void Face::createMenus() { - fileMenu = menuBar()->addMenu(tr("File")); - fileMenu->addAction(selectFilesToCompressAction); - fileMenu->addAction(selectFileToDecompressAction); - fileMenu->addSeparator(); - fileMenu->addAction(exitAction); - - helpMenu = menuBar()->addMenu(tr("Help")); - helpMenu->addAction(aboutAction); - helpMenu->addAction(aboutQtAction); + d->fileMenu = menuBar()->addMenu(tr("File")); + d->fileMenu->addAction(d->selectFilesToCompressAction); + d->fileMenu->addAction(d->selectFileToDecompressAction); + d->fileMenu->addSeparator(); + d->fileMenu->addAction(d->exitAction); + + d->helpMenu = menuBar()->addMenu(tr("Help")); + d->helpMenu->addAction(d->aboutAction); + d->helpMenu->addAction(d->aboutQtAction); } void @@ -159,16 +218,17 @@ Face::compress() { destFileDialog.setWindowTitle("Select Output File"); if (destFileDialog.exec()) - destFileName = destFileDialog.selectedFiles()[0]; + d->destFileName = destFileDialog.selectedFiles()[0]; else return; - compressingProgressDialog->setWindowModality(Qt::WindowModal); - compressingProgressDialog->setAutoClose(false); - compressingProgressDialog->reset(); + d->compressingProgressDialog->setWindowModality(Qt::WindowModal); + d->compressingProgressDialog->setAutoClose(false); + d->compressingProgressDialog->reset(); - compressThread->initCompress(sourceFileNames, destFileName, blockSize, compressBaseDir, compressSequence); - compressingProgressDialog->show(); - compressThread->start(); + d->compressThread->initCompress(d->sourceFileNames, d->destFileName, + d->blockSize, d->compressBaseDir, d->compressSequence); + d->compressingProgressDialog->show(); + d->compressThread->start(); } void @@ -178,46 +238,52 @@ Face::decompress() { destDirDialog.setWindowTitle("Select Output Folder"); if (destDirDialog.exec()) - destDirName = destDirDialog.selectedFiles()[0]; + d->destDirName = destDirDialog.selectedFiles()[0]; else return; - while (!QDir::setCurrent(destDirName)) { - QMessageBox::critical(this, "Error!", "Cannot change folder to " + destDirName + "\nPlease select other folder!"); + while (!QDir::setCurrent(d->destDirName)) { + QMessageBox::critical(this, "Error!", "Cannot change folder to " + + d->destDirName + "\nPlease select other folder!"); + if (destDirDialog.exec()) - destDirName = destDirDialog.selectedFiles()[0]; + d->destDirName = destDirDialog.selectedFiles()[0]; else return; } - decompressingProgressDialog->setWindowModality(Qt::WindowModal); - decompressingProgressDialog->setAutoClose(false); - decompressingProgressDialog->reset(); - decompressThread->initDecompress(encodedfileNames[0], keepBrokenFiles); - decompressingProgressDialog->show(); - decompressThread->start(); + d->decompressingProgressDialog->setWindowModality(Qt::WindowModal); + d->decompressingProgressDialog->setAutoClose(false); + d->decompressingProgressDialog->reset(); + + d->decompressThread->initDecompress(d->encodedfileNames[0], d->keepBrokenFiles); + d->decompressingProgressDialog->show(); + d->decompressThread->start(); } void Face::displayCompressStatus(int progress, QString fileName, float speed) { - compressingProgressDialog->setValue(progress); - compressingProgressDialog->setLabelText("Current file: " + fileName + "\n" + "Speed: " + DataUnitsToQString::convertDataSpeed(speed, 2)); + d->compressingProgressDialog->setValue(progress); + d->compressingProgressDialog->setLabelText("Current file: " + fileName + "\n" + + "Speed: " + DataUnitsToQString::convertDataSpeed(speed, 2)); } void Face::displayDecompressStatus(int progress, QString fileName, float speed) { - decompressingProgressDialog->setValue(progress); - decompressingProgressDialog->setLabelText("Current file: " + fileName + "\n" + "Speed: " + DataUnitsToQString::convertDataSpeed(speed, 2)); + d->decompressingProgressDialog->setValue(progress); + d->decompressingProgressDialog->setLabelText("Current file: " + fileName + "\n" + + "Speed: " + DataUnitsToQString::convertDataSpeed(speed, 2)); } void Face::displayListStatus(int progress, QString fileName, float speed) { - listArchiveContentsProgressDialog->setValue(progress); - listArchiveContentsProgressDialog->setLabelText("Current file: " + fileName + "\n" + "Speed: " + DataUnitsToQString::convertDataSpeed(speed, 2)); + d->listArchiveContentsProgressDialog->setValue(progress); + d->listArchiveContentsProgressDialog->setLabelText("Current file: " + fileName + "\n" + + "Speed: " + DataUnitsToQString::convertDataSpeed(speed, 2)); } void Face::initSettings() { - compressSequence.clear(); - compressSequence << Compressor::RLE << + d->compressSequence.clear(); + d->compressSequence << Compressor::RLE << Compressor::BWT << Compressor::MTF << Compressor::RLE << @@ -225,21 +291,21 @@ Face::initSettings() { Compressor::NONE << Compressor::NONE << Compressor::NONE; - blockSize = 900000; - compressSettingsPanel->set(blockSize / 1000, compressSequence); - keepBrokenFiles = true; - decompressSettingsPanel->set(keepBrokenFiles); + d->blockSize = 900000; + d->compressSettingsPanel->set(d->blockSize / 1000, d->compressSequence); + d->keepBrokenFiles = true; + d->decompressSettingsPanel->set(d->keepBrokenFiles); } void Face::listArchiveContents() { - brokenFileWarningShown = false; - listArchiveContentsProgressDialog->setWindowModality(Qt::WindowModal); - listArchiveContentsProgressDialog->setAutoClose(false); + d->brokenFileWarningShown = false; + d->listArchiveContentsProgressDialog->setWindowModality(Qt::WindowModal); + d->listArchiveContentsProgressDialog->setAutoClose(false); - listArchiveThread->initList(encodedfileNames[0]); - listArchiveContentsProgressDialog->show(); - listArchiveThread->start(); + d->listArchiveThread->initList(d->encodedfileNames[0]); + d->listArchiveContentsProgressDialog->show(); + d->listArchiveThread->start(); } void @@ -249,20 +315,21 @@ Face::selectFilesToCompress() { openFileToCompressDialog.setWindowTitle("Select Files To Compress"); if (openFileToCompressDialog.exec()) { - sourceFileNames = openFileToCompressDialog.selectedFiles(); - compressBaseDir = openFileToCompressDialog.directory(); + d->sourceFileNames = openFileToCompressDialog.selectedFiles(); + d->compressBaseDir = openFileToCompressDialog.directory(); } else return; - while (!QDir::setCurrent(compressBaseDir.absolutePath() + "/")) { + while (!QDir::setCurrent(d->compressBaseDir.absolutePath() + "/")) { QMessageBox::critical(this, "Error!", - "Folder " + compressBaseDir.path() + " is not accessible\nPlease select other files!"); + "Folder " + d->compressBaseDir.path() + + " is not accessible\nPlease select other files!"); if (openFileToCompressDialog.exec()) { - sourceFileNames = openFileToCompressDialog.selectedFiles(); - compressBaseDir = openFileToCompressDialog.directory(); + d->sourceFileNames = openFileToCompressDialog.selectedFiles(); + d->compressBaseDir = openFileToCompressDialog.directory(); } else return; } - filelist->setFileList(sourceFileNames, compressBaseDir); + d->filelist->setFileList(d->sourceFileNames, d->compressBaseDir); activateCompressMode(); } @@ -271,8 +338,8 @@ Face::selectFileToDecompress() { QFileDialog openFileToDecompressDialog; openFileToDecompressDialog.setWindowTitle(tr("Select File To Decompress")); if (openFileToDecompressDialog.exec()) { - encodedfileNames = openFileToDecompressDialog.selectedFiles(); - decompressBaseDir = openFileToDecompressDialog.directory(); + d->encodedfileNames = openFileToDecompressDialog.selectedFiles(); + d->decompressBaseDir = openFileToDecompressDialog.directory(); listArchiveContents(); activateDecompressMode(); } @@ -280,68 +347,68 @@ Face::selectFileToDecompress() { void Face::setCompressSettings(unsigned int blockSize, QList< Compressor::CoderTypes> compressSequence) { - this->compressSequence = compressSequence; - this->blockSize = 1000 * blockSize; + d->compressSequence = compressSequence; + d->blockSize = 1000 * blockSize; } void Face::setDecompressSettings(bool keepBrokenFiles) { - this->keepBrokenFiles = keepBrokenFiles; + d->keepBrokenFiles = keepBrokenFiles; } void Face::setupWidgetsConnections() { - connect(compressSettingsPanel, SIGNAL(settingsChanged(unsigned int, QList< Compressor::CoderTypes>)), this, SLOT(setCompressSettings(unsigned int, QList< Compressor::CoderTypes>))); - connect(compressSettingsPanel, SIGNAL(resetToDefaults()), this, SLOT(initSettings())); - - connect(decompressSettingsPanel, SIGNAL(settingsChanged(bool)), this, SLOT(setDecompressSettings(bool))); - connect(decompressSettingsPanel, SIGNAL(resetToDefaults()), this, SLOT(initSettings())); - - connect(compressThread, SIGNAL(progressChanged(int, QString, float)), this, SLOT(displayCompressStatus(int, QString, float))); - connect(compressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), this, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString))); - connect(compressingProgressDialog, SIGNAL(canceled()), compressThread, SLOT(stop())); - connect(compressThread, SIGNAL(finished()), compressingProgressDialog, SLOT(reject())); - connect(compressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), filelist, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString, unsigned int))); - connect(compressThread, SIGNAL(statInfo(Compressor::Stat)), this, SLOT(showCompressStatInfo(Compressor::Stat))); - - connect(decompressThread, SIGNAL(progressChanged(int, QString, float)), this, SLOT(displayDecompressStatus(int, QString, float))); - connect(decompressingProgressDialog, SIGNAL(canceled()), decompressThread, SLOT(stop())); - connect(decompressThread, SIGNAL(finished()), decompressingProgressDialog, SLOT(reject())); - connect(decompressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), filelist, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString, unsigned int))); - connect(decompressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), this, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString))); - connect(decompressThread, SIGNAL(statInfo(Compressor::Stat)), this, SLOT(showDecompressStatInfo(Compressor::Stat))); - - connect(listArchiveThread, SIGNAL(progressChanged(int, QString, float)), this, SLOT(displayListStatus(int, QString, float))); - connect(listArchiveContentsProgressDialog, SIGNAL(canceled()), listArchiveThread, SLOT(stop())); - connect(listArchiveThread, SIGNAL(finished()), listArchiveContentsProgressDialog, SLOT(reject())); - connect(listArchiveThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), this, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString))); - connect(listArchiveThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), filelist, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString, unsigned int))); - connect(listArchiveThread, SIGNAL(started()), filelist, SLOT(init())); + connect(d->compressSettingsPanel, SIGNAL(settingsChanged(unsigned int, QList< Compressor::CoderTypes>)), this, SLOT(setCompressSettings(unsigned int, QList< Compressor::CoderTypes>))); + connect(d->compressSettingsPanel, SIGNAL(resetToDefaults()), this, SLOT(initSettings())); + + connect(d->decompressSettingsPanel, SIGNAL(settingsChanged(bool)), this, SLOT(setDecompressSettings(bool))); + connect(d->decompressSettingsPanel, SIGNAL(resetToDefaults()), this, SLOT(initSettings())); + + connect(d->compressThread, SIGNAL(progressChanged(int, QString, float)), this, SLOT(displayCompressStatus(int, QString, float))); + connect(d->compressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), this, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString))); + connect(d->compressingProgressDialog, SIGNAL(canceled()), d->compressThread, SLOT(stop())); + connect(d->compressThread, SIGNAL(finished()), d->compressingProgressDialog, SLOT(reject())); + connect(d->compressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), d->filelist, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString, unsigned int))); + connect(d->compressThread, SIGNAL(statInfo(Compressor::Stat)), this, SLOT(showCompressStatInfo(Compressor::Stat))); + + connect(d->decompressThread, SIGNAL(progressChanged(int, QString, float)), this, SLOT(displayDecompressStatus(int, QString, float))); + connect(d->decompressingProgressDialog, SIGNAL(canceled()), d->decompressThread, SLOT(stop())); + connect(d->decompressThread, SIGNAL(finished()), d->decompressingProgressDialog, SLOT(reject())); + connect(d->decompressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), d->filelist, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString, unsigned int))); + connect(d->decompressThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), this, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString))); + connect(d->decompressThread, SIGNAL(statInfo(Compressor::Stat)), this, SLOT(showDecompressStatInfo(Compressor::Stat))); + + connect(d->listArchiveThread, SIGNAL(progressChanged(int, QString, float)), this, SLOT(displayListStatus(int, QString, float))); + connect(d->listArchiveContentsProgressDialog, SIGNAL(canceled()), d->listArchiveThread, SLOT(stop())); + connect(d->listArchiveThread, SIGNAL(finished()), d->listArchiveContentsProgressDialog, SLOT(reject())); + connect(d->listArchiveThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), this, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString))); + connect(d->listArchiveThread, SIGNAL(info(CTCompressorStatus::ErrorCode, QString, unsigned int)), d->filelist, SLOT(showInfo(CTCompressorStatus::ErrorCode, QString, unsigned int))); + connect(d->listArchiveThread, SIGNAL(started()), d->filelist, SLOT(init())); } void Face::showCompressStatInfo(Compressor::Stat stat) { - if (!compressingProgressDialog->wasCanceled()) { + if (!d->compressingProgressDialog->wasCanceled()) { StatInfoW::StatInfo statInfo; statInfo.speed = stat.speed; - statInfo.blockSize = blockSize; - statInfo.compressSequence = compressSequence; + statInfo.blockSize = d->blockSize; + statInfo.compressSequence = d->compressSequence; statInfo.inputSize = stat.decodedSize; statInfo.outputSize = stat.encodedSize; - statInfoW->showInfo(statInfo); - statInfoW->setWindowTitle("Compressing Statistics"); + d->statInfoW->showInfo(statInfo); + d->statInfoW->setWindowTitle("Compressing Statistics"); - statInfoW->show(); + d->statInfoW->show(); } } void Face::showDecompressStatInfo(Compressor::Stat stat) { - if (!decompressingProgressDialog->wasCanceled()) { + if (!d->decompressingProgressDialog->wasCanceled()) { StatInfoW::StatInfo statInfo; statInfo.speed = stat.speed; - statInfo.blockSize = blockSize; + statInfo.blockSize = d->blockSize; QList< Compressor::CoderTypes> emptySeq; @@ -349,10 +416,10 @@ Face::showDecompressStatInfo(Compressor::Stat stat) { statInfo.inputSize = stat.encodedSize; statInfo.outputSize = stat.decodedSize; - statInfoW->showInfo(statInfo); - statInfoW->setWindowTitle("Decompressing Statistics"); + d->statInfoW->showInfo(statInfo); + d->statInfoW->setWindowTitle("Decompressing Statistics"); - statInfoW->show(); + d->statInfoW->show(); } } @@ -367,8 +434,8 @@ Face::showInfo(CTCompressorStatus::ErrorCode error, QString fileName) { break; case CTCompressorStatus::INPUT_FILE_CORRUPTED: { - if (!brokenFileWarningShown) { - brokenFileWarningShown = true; + if (!d->brokenFileWarningShown) { + d->brokenFileWarningShown = true; QMessageBox::warning(this, "Error!", "Input File Corrupted!"); } } diff --git a/GUI/face.h b/GUI/face.h index 7ee6400..a4ae137 100644 --- a/GUI/face.h +++ b/GUI/face.h @@ -15,19 +15,12 @@ * along with this program. If not, see . * ******************************************************************************/ -#ifndef _FACE_H -#define _FACE_H +#pragma once #include "compressorThread.h" #include -class FileList; -class QProgressDialog; -class CompressSettingsPanel; -class DecompressSettingsPanel; -class StatInfoW; - namespace Ui { class face; @@ -57,53 +50,9 @@ public slots: void setDecompressSettings(bool keepBrokenFiles); private: - CompressSettingsPanel *compressSettingsPanel; - DecompressSettingsPanel *decompressSettingsPanel; - - StatInfoW *statInfoW; - - CompressorThread *compressThread; - CompressorThread *decompressThread; - CompressorThread *listArchiveThread; - Ui::face *widget; - Compressor *compressor; - - QToolBar *actionToolBar; - - FileList *filelist; - - QStringList sourceFileNames; - QStringList encodedfileNames; - - QString destFileName; - QString destDirName; - - QDir compressBaseDir; - QDir decompressBaseDir; + struct Private; - QDockWidget *compressSettingsDock; - QDockWidget *decompressSettingsDock; - - QAction *selectFilesToCompressAction; - QAction *selectFileToDecompressAction; - QAction *compressAction; - QAction *decompressAction; - QAction *exitAction; - QAction *aboutAction; - QAction *aboutQtAction; - - QMenu *fileMenu; - QMenu *helpMenu; - - QProgressDialog *compressingProgressDialog; - QProgressDialog *decompressingProgressDialog; - QProgressDialog *listArchiveContentsProgressDialog; - - bool brokenFileWarningShown; - - QList< Compressor::CoderTypes> compressSequence; - unsigned int blockSize; - bool keepBrokenFiles; + std::unique_ptr d; void createActions(); void createToolBars(); @@ -115,6 +64,3 @@ public slots: private slots: void initSettings(); }; - - -#endif /* _FACE_H */