xref: /haiku/src/add-ons/translators/psd/ConfigView.cpp (revision 04a0e9c7b68cbe3a43d38e2bca8e860fd80936fb)
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