From a47ae0d08e2ca865018860b26e65da3658a5e7aa Mon Sep 17 00:00:00 2001 From: Gerasim Troeglazov <3dEyes@gmail.com> Date: Fri, 20 Dec 2013 09:26:59 +0000 Subject: [PATCH] PSDTranslator: Add compression settings --- src/add-ons/translators/psd/ConfigView.cpp | 43 ++++++++++++++++++- src/add-ons/translators/psd/ConfigView.h | 10 ++++- src/add-ons/translators/psd/PSDTranslator.cpp | 10 +++-- src/add-ons/translators/psd/PSDTranslator.h | 2 + 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/add-ons/translators/psd/ConfigView.cpp b/src/add-ons/translators/psd/ConfigView.cpp index 0279493bed..9380080766 100644 --- a/src/add-ons/translators/psd/ConfigView.cpp +++ b/src/add-ons/translators/psd/ConfigView.cpp @@ -9,18 +9,36 @@ #include #include #include +#include +#include #include +#include "PSDLoader.h" + ConfigView::ConfigView(TranslatorSettings *settings) : BGroupView("PSDTranslator Settings", B_VERTICAL, 0) { fSettings = settings; + BPopUpMenu* popupMenu = new BPopUpMenu("popup_compression"); + + uint32 currentCompression = + fSettings->SetGetInt32(PSD_SETTING_COMPRESSION); + + _AddItemToMenu(popupMenu, "Uncompressed", + PSD_COMPRESSED_RAW, currentCompression); + _AddItemToMenu(popupMenu, "RLE", + PSD_COMPRESSED_RLE, currentCompression); + + fCompressionField = new BMenuField("compression", + "Compression: ", popupMenu); + BAlignment leftAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_UNSET); - BStringView *stringView = new BStringView("title", "Photoshop image translator"); + BStringView *stringView = new BStringView("title", + "Photoshop image translator"); stringView->SetFont(be_bold_font); stringView->SetExplicitAlignment(leftAlignment); AddChild(stringView); @@ -47,6 +65,8 @@ ConfigView::ConfigView(TranslatorSettings *settings) B_UTF8_COPYRIGHT "2012-2013 Gerasim Troeglazov <3dEyes@gmail.com>"); stringView->SetExplicitAlignment(leftAlignment); AddChild(stringView); + + AddChild(fCompressionField); AddChild(BSpaceLayoutItem::CreateGlue()); GroupLayout()->SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, @@ -65,6 +85,7 @@ ConfigView::~ConfigView() void ConfigView::AllAttached() { + fCompressionField->Menu()->SetTargetForItems(this); } @@ -72,7 +93,27 @@ void ConfigView::MessageReceived(BMessage* message) { switch (message->what) { + case MSG_COMPRESSION_CHANGED: { + int32 value; + if (message->FindInt32("value", &value) >= B_OK) { + fSettings->SetGetInt32(PSD_SETTING_COMPRESSION, &value); + fSettings->SaveSettings(); + } + break; + } default: BView::MessageReceived(message); } } + + +void +ConfigView::_AddItemToMenu(BMenu* menu, const char* label, + uint32 value, uint32 current_value) +{ + BMessage* message = new BMessage(MSG_COMPRESSION_CHANGED); + message->AddInt32("value", value); + BMenuItem* item = new BMenuItem(label, message); + item->SetMarked(value == current_value); + menu->AddItem(item); +} diff --git a/src/add-ons/translators/psd/ConfigView.h b/src/add-ons/translators/psd/ConfigView.h index cbf43d4112..c390288bff 100644 --- a/src/add-ons/translators/psd/ConfigView.h +++ b/src/add-ons/translators/psd/ConfigView.h @@ -13,7 +13,10 @@ #include #include #include - +#include + +#define MSG_COMPRESSION_CHANGED 'cchg' + class ConfigView : public BGroupView { public: ConfigView(TranslatorSettings *settings); @@ -23,7 +26,12 @@ class ConfigView : public BGroupView { virtual void MessageReceived(BMessage* message); private: + void _AddItemToMenu(BMenu* menu, const char* label, + uint32 value, uint32 current_value); + BTextView* fCopyrightView; + BMenuField* fCompressionField; + TranslatorSettings *fSettings; }; diff --git a/src/add-ons/translators/psd/PSDTranslator.cpp b/src/add-ons/translators/psd/PSDTranslator.cpp index 466bad807c..52beccbd91 100644 --- a/src/add-ons/translators/psd/PSDTranslator.cpp +++ b/src/add-ons/translators/psd/PSDTranslator.cpp @@ -60,7 +60,8 @@ static const translation_format sOutputFormats[] = { static const TranSetting sDefaultSettings[] = { {B_TRANSLATOR_EXT_HEADER_ONLY, TRAN_SETTING_BOOL, false}, - {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false} + {B_TRANSLATOR_EXT_DATA_ONLY, TRAN_SETTING_BOOL, false}, + {PSD_SETTING_COMPRESSION, TRAN_SETTING_INT32, PSD_COMPRESSED_RLE} }; const uint32 kNumInputFormats = sizeof(sInputFormats) @@ -142,8 +143,11 @@ PSDTranslator::DerivedTranslate(BPositionIO *source, { if (outType == PSD_IMAGE_FORMAT) { PSDWriter psdFile(source); - psdFile.SetCompression(PSD_COMPRESSED_RLE); - return psdFile.Encode(target); + uint32 compression = + fSettings->SetGetInt32(PSD_SETTING_COMPRESSION); + psdFile.SetCompression(compression); + if (psdFile.IsReady()) + return psdFile.Encode(target); } return B_NO_TRANSLATOR; } diff --git a/src/add-ons/translators/psd/PSDTranslator.h b/src/add-ons/translators/psd/PSDTranslator.h index eaeb82bd27..6b7ce32eaa 100644 --- a/src/add-ons/translators/psd/PSDTranslator.h +++ b/src/add-ons/translators/psd/PSDTranslator.h @@ -21,6 +21,8 @@ #define DOCUMENT_COUNT "/documentCount" #define DOCUMENT_INDEX "/documentIndex" +#define PSD_SETTING_COMPRESSION "psd /compression" + #define PSD_TRANSLATOR_VERSION B_TRANSLATION_MAKE_VERSION(1, 2, 1) #define PSD_IMAGE_FORMAT 'PSD '