1 /* 2 * Copyright 2013, Gerasim Troeglazov, 3dEyes@gmail.com. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 #include "ConfigView.h" 7 #include "PSDTranslator.h" 8 9 #include <StringView.h> 10 #include <SpaceLayoutItem.h> 11 #include <ControlLook.h> 12 #include <PopUpMenu.h> 13 #include <MenuItem.h> 14 15 #include <stdio.h> 16 17 #include "PSDLoader.h" 18 19 20 ConfigView::ConfigView(TranslatorSettings *settings) 21 : BGroupView("PSDTranslator Settings", B_VERTICAL, 0) 22 { 23 fSettings = settings; 24 25 BPopUpMenu* compressionPopupMenu = new BPopUpMenu("popup_compression"); 26 27 uint32 currentCompression = 28 fSettings->SetGetInt32(PSD_SETTING_COMPRESSION); 29 30 _AddItemToMenu(compressionPopupMenu, "Uncompressed", 31 MSG_COMPRESSION_CHANGED, PSD_COMPRESSED_RAW, currentCompression); 32 _AddItemToMenu(compressionPopupMenu, "RLE", 33 MSG_COMPRESSION_CHANGED, PSD_COMPRESSED_RLE, currentCompression); 34 35 fCompressionField = new BMenuField("compression", 36 "Compression: ", compressionPopupMenu); 37 38 BPopUpMenu* versionPopupMenu = new BPopUpMenu("popup_version"); 39 40 uint32 currentVersion = 41 fSettings->SetGetInt32(PSD_SETTING_VERSION); 42 43 _AddItemToMenu(versionPopupMenu, "Photoshop Document (PSD File)", 44 MSG_VERSION_CHANGED, PSD_FILE, currentVersion); 45 _AddItemToMenu(versionPopupMenu, "Photoshop Big Document (PSB File)", 46 MSG_VERSION_CHANGED, PSB_FILE, currentVersion); 47 48 fVersionField = new BMenuField("version", 49 "Format: ", versionPopupMenu); 50 51 BAlignment leftAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_UNSET); 52 53 BStringView *stringView = new BStringView("title", 54 "Photoshop image translator"); 55 stringView->SetFont(be_bold_font); 56 stringView->SetExplicitAlignment(leftAlignment); 57 AddChild(stringView); 58 59 float spacing = be_control_look->DefaultItemSpacing(); 60 AddChild(BSpaceLayoutItem::CreateVerticalStrut(spacing)); 61 62 char version[256]; 63 sprintf(version, "Version %d.%d.%d, %s", 64 int(B_TRANSLATION_MAJOR_VERSION(PSD_TRANSLATOR_VERSION)), 65 int(B_TRANSLATION_MINOR_VERSION(PSD_TRANSLATOR_VERSION)), 66 int(B_TRANSLATION_REVISION_VERSION(PSD_TRANSLATOR_VERSION)), 67 __DATE__); 68 stringView = new BStringView("version", version); 69 stringView->SetExplicitAlignment(leftAlignment); 70 AddChild(stringView); 71 72 stringView = new BStringView("copyright", 73 B_UTF8_COPYRIGHT "2005-2013 Haiku Inc."); 74 stringView->SetExplicitAlignment(leftAlignment); 75 AddChild(stringView); 76 77 stringView = new BStringView("my_copyright", 78 B_UTF8_COPYRIGHT "2012-2013 Gerasim Troeglazov <3dEyes@gmail.com>"); 79 stringView->SetExplicitAlignment(leftAlignment); 80 AddChild(stringView); 81 82 AddChild(fVersionField); 83 84 AddChild(fCompressionField); 85 86 AddChild(BSpaceLayoutItem::CreateGlue()); 87 GroupLayout()->SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, 88 B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING); 89 90 SetExplicitPreferredSize(GroupLayout()->MinSize()); 91 } 92 93 94 ConfigView::~ConfigView() 95 { 96 fSettings->Release(); 97 } 98 99 100 void 101 ConfigView::AllAttached() 102 { 103 fCompressionField->Menu()->SetTargetForItems(this); 104 fVersionField->Menu()->SetTargetForItems(this); 105 } 106 107 108 void 109 ConfigView::MessageReceived(BMessage* message) 110 { 111 switch (message->what) { 112 case MSG_COMPRESSION_CHANGED: { 113 int32 value; 114 if (message->FindInt32("value", &value) >= B_OK) { 115 fSettings->SetGetInt32(PSD_SETTING_COMPRESSION, &value); 116 fSettings->SaveSettings(); 117 } 118 break; 119 } 120 case MSG_VERSION_CHANGED: { 121 int32 value; 122 if (message->FindInt32("value", &value) >= B_OK) { 123 fSettings->SetGetInt32(PSD_SETTING_VERSION, &value); 124 fSettings->SaveSettings(); 125 } 126 break; 127 } 128 default: 129 BView::MessageReceived(message); 130 } 131 } 132 133 134 void 135 ConfigView::_AddItemToMenu(BMenu* menu, const char* label, 136 uint32 mess, uint32 value, uint32 current_value) 137 { 138 BMessage* message = new BMessage(mess); 139 message->AddInt32("value", value); 140 BMenuItem* item = new BMenuItem(label, message); 141 item->SetMarked(value == current_value); 142 menu->AddItem(item); 143 } 144