1/*****************************************************************************/
2// TGAView
3// Written by Michael Wilber, Haiku Translation Kit Team
4// Use of Layout API added by Maxime Simon, maxime.simon@gmail.com, 2009.
5//
6// TGAView.cpp
7//
8// This BView based object displays information about the TGATranslator.
9//
10//
11// Copyright (c) 2002 Haiku Project
12//
13// Permission is hereby granted, free of charge, to any person obtaining a
14// copy of this software and associated documentation files (the "Software"),
15// to deal in the Software without restriction, including without limitation
16// the rights to use, copy, modify, merge, publish, distribute, sublicense,
17// and/or sell copies of the Software, and to permit persons to whom the
18// Software is furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included
21// in all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29// DEALINGS IN THE SOFTWARE.
30/*****************************************************************************/
31
32#include <Catalog.h>
33#include <LayoutBuilder.h>
34
35#include <stdio.h>
36#include <string.h>
37
38#include "TGAView.h"
39#include "TGATranslator.h"
40
41#undef B_TRANSLATION_CONTEXT
42#define B_TRANSLATION_CONTEXT "TGAView"
43
44
45TGAView::TGAView(const char *name, uint32 flags, TranslatorSettings *settings)
46	:
47	BView(name, flags),
48	fSettings(settings)
49{
50	SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
51
52 	fTitle = new BStringView("title", B_TRANSLATE("TGA image translator"));
53 	fTitle->SetFont(be_bold_font);
54
55 	char detail[100];
56 	sprintf(detail, B_TRANSLATE("Version %d.%d.%d, %s"),
57 		static_cast<int>(B_TRANSLATION_MAJOR_VERSION(TGA_TRANSLATOR_VERSION)),
58 		static_cast<int>(B_TRANSLATION_MINOR_VERSION(TGA_TRANSLATOR_VERSION)),
59 		static_cast<int>(B_TRANSLATION_REVISION_VERSION(
60 			TGA_TRANSLATOR_VERSION)), __DATE__);
61 	fDetail = new BStringView("detail", detail);
62 	fWrittenBy = new BStringView("writtenby",
63 		B_TRANSLATE("Written by the Haiku Translation Kit Team"));
64
65 	fpchkIgnoreAlpha = new BCheckBox(B_TRANSLATE("Ignore TGA alpha channel"),
66		new BMessage(CHANGE_IGNORE_ALPHA));
67 	int32 val = (fSettings->SetGetBool(TGA_SETTING_IGNORE_ALPHA)) ? 1 : 0;
68 	fpchkIgnoreAlpha->SetValue(val);
69 	fpchkIgnoreAlpha->SetViewColor(ViewColor());
70
71 	fpchkRLE = new BCheckBox(B_TRANSLATE("Save with RLE compression"),
72		new BMessage(CHANGE_RLE));
73 	val = (fSettings->SetGetBool(TGA_SETTING_RLE)) ? 1 : 0;
74 	fpchkRLE->SetValue(val);
75 	fpchkRLE->SetViewColor(ViewColor());
76
77 	// Build the layout
78	BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
79		.SetInsets(B_USE_DEFAULT_SPACING)
80 		.Add(fTitle)
81 		.Add(fDetail)
82 		.AddGlue()
83 		.Add(fpchkIgnoreAlpha)
84 		.Add(fpchkRLE)
85 		.AddGlue()
86		.Add(fWrittenBy);
87}
88
89
90TGAView::~TGAView()
91{
92	fSettings->Release();
93}
94
95
96void
97TGAView::AllAttached()
98{
99	fpchkIgnoreAlpha->SetTarget(this);
100	fpchkRLE->SetTarget(this);
101}
102
103
104void
105TGAView::MessageReceived(BMessage* message)
106{
107	switch (message->what) {
108		case CHANGE_IGNORE_ALPHA:
109		{
110			bool ignoreAlpha = fpchkIgnoreAlpha->Value() == B_CONTROL_ON;
111			fSettings->SetGetBool(TGA_SETTING_IGNORE_ALPHA, &ignoreAlpha);
112			fSettings->SaveSettings();
113		}	break;
114
115		case CHANGE_RLE:
116		{
117			bool saveWithRLE = fpchkRLE->Value() == B_CONTROL_ON;
118			fSettings->SetGetBool(TGA_SETTING_RLE, &saveWithRLE);
119			fSettings->SaveSettings();
120		}	break;
121
122		default:
123			BView::MessageReceived(message);
124			break;
125	}
126}
127
128