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