1/*
2 * Copyright 2009, Haiku, Inc.
3 * Distributed under the terms of the MIT license.
4 *
5 * Authors:
6 *		Michael Lotz, mmlr@mlotz.ch
7 */
8
9#include "HVIFView.h"
10#include "HVIFTranslator.h"
11
12#include <Catalog.h>
13#include <LayoutBuilder.h>
14#include <String.h>
15#include <StringView.h>
16
17#include <stdio.h>
18
19#define HVIF_SETTING_RENDER_SIZE_CHANGED	'rsch'
20
21#undef B_TRANSLATION_CONTEXT
22#define B_TRANSLATION_CONTEXT "HVIFView"
23
24
25HVIFView::HVIFView(const char* name, uint32 flags, TranslatorSettings *settings)
26	:
27	BView(name, flags, new BGroupLayout(B_VERTICAL)),
28	fSettings(settings)
29{
30	BAlignment labelAlignment(B_ALIGN_LEFT, B_ALIGN_NO_VERTICAL);
31
32	BStringView* title= new BStringView("title",
33		B_TRANSLATE("Haiku vector icon translator"));
34	title->SetFont(be_bold_font);
35	title->SetExplicitAlignment(labelAlignment);
36
37	char versionString[256];
38	snprintf(versionString, sizeof(versionString),
39		B_TRANSLATE("Version %d.%d.%d, %s"),
40		int(B_TRANSLATION_MAJOR_VERSION(HVIF_TRANSLATOR_VERSION)),
41		int(B_TRANSLATION_MINOR_VERSION(HVIF_TRANSLATOR_VERSION)),
42		int(B_TRANSLATION_REVISION_VERSION(HVIF_TRANSLATOR_VERSION)),
43		__DATE__);
44	BStringView* version = new BStringView("version", versionString);
45	version->SetExplicitAlignment(labelAlignment);
46
47	BStringView* copyright = new BStringView("copyright",
48		B_UTF8_COPYRIGHT"2009 Haiku Inc.");
49	copyright->SetExplicitAlignment(labelAlignment);
50
51
52	int32 renderSize = fSettings->SetGetInt32(HVIF_SETTING_RENDER_SIZE);
53	BString label = B_TRANSLATE("Render size:");
54	label << " " << renderSize;
55
56	fRenderSize = new BSlider("renderSize", label.String(),
57		NULL, 1, 32, B_HORIZONTAL);
58	fRenderSize->SetValue(renderSize / 8);
59	fRenderSize->SetHashMarks(B_HASH_MARKS_BOTTOM);
60	fRenderSize->SetHashMarkCount(16);
61	fRenderSize->SetModificationMessage(
62		new BMessage(HVIF_SETTING_RENDER_SIZE_CHANGED));
63	fRenderSize->SetExplicitAlignment(labelAlignment);
64
65	BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
66		.SetInsets(B_USE_DEFAULT_SPACING)
67		.Add(title)
68		.Add(version)
69		.Add(copyright)
70		.AddGlue()
71		.Add(fRenderSize)
72		.AddGlue();
73}
74
75
76HVIFView::~HVIFView()
77{
78	fSettings->Release();
79}
80
81
82void
83HVIFView::AttachedToWindow()
84{
85	fRenderSize->SetTarget(this);
86}
87
88
89void
90HVIFView::MessageReceived(BMessage *message)
91{
92	switch (message->what) {
93		case HVIF_SETTING_RENDER_SIZE_CHANGED:
94		{
95			int32 value = fRenderSize->Value();
96			if (value <= 0 || value > 32)
97				break;
98
99			value *= 8;
100			fSettings->SetGetInt32(HVIF_SETTING_RENDER_SIZE, &value);
101			fSettings->SaveSettings();
102
103			BString newLabel = B_TRANSLATE("Render size:");
104			newLabel << " " << value;
105			fRenderSize->SetLabel(newLabel.String());
106			return;
107		}
108	}
109
110	BView::MessageReceived(message);
111}
112