⛏️ index : haiku.git

/*
 * Copyright 2013, Gerasim Troeglazov, 3dEyes@gmail.com. All rights reserved.
 * Distributed under the terms of the MIT License.
 */

#include "ConfigView.h"

#include <Catalog.h>
#include <LayoutBuilder.h>
#include <MenuItem.h>
#include <PopUpMenu.h>
#include <StringView.h>

#include <stdio.h>

#include "PSDLoader.h"
#include "PSDTranslator.h"

#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "PSDConfig"


ConfigView::ConfigView(TranslatorSettings *settings)
	: BGroupView(B_TRANSLATE("PSDTranslator Settings"), B_VERTICAL, 0)
{
	fSettings = settings;

	BPopUpMenu* compressionPopupMenu = new BPopUpMenu("popup_compression");

	uint32 currentCompression =
		fSettings->SetGetInt32(PSD_SETTING_COMPRESSION);

	_AddItemToMenu(compressionPopupMenu, B_TRANSLATE("Uncompressed"),
		MSG_COMPRESSION_CHANGED, PSD_COMPRESSED_RAW, currentCompression);
	_AddItemToMenu(compressionPopupMenu, B_TRANSLATE("RLE"),
		MSG_COMPRESSION_CHANGED, PSD_COMPRESSED_RLE, currentCompression);

	fCompressionField = new BMenuField("compression",
		B_TRANSLATE("Compression: "), compressionPopupMenu);
	fCompressionField->SetAlignment(B_ALIGN_RIGHT);

	BPopUpMenu* versionPopupMenu = new BPopUpMenu("popup_version");

	uint32 currentVersion =
		fSettings->SetGetInt32(PSD_SETTING_VERSION);

	_AddItemToMenu(versionPopupMenu,
		B_TRANSLATE("Photoshop Document (PSD file)"), MSG_VERSION_CHANGED,
		PSD_FILE, currentVersion);
	_AddItemToMenu(versionPopupMenu,
		B_TRANSLATE("Photoshop Big Document (PSB file)"), MSG_VERSION_CHANGED,
		PSB_FILE, currentVersion);

	fVersionField = new BMenuField("version",
		B_TRANSLATE("Format: "), versionPopupMenu);
	fVersionField->SetAlignment(B_ALIGN_RIGHT);

	BStringView *titleView = new BStringView("title",
		B_TRANSLATE("Photoshop image translator"));
	titleView->SetFont(be_bold_font);

	char version[256];
	sprintf(version, B_TRANSLATE("Version %d.%d.%d, %s"),
		int(B_TRANSLATION_MAJOR_VERSION(PSD_TRANSLATOR_VERSION)),
		int(B_TRANSLATION_MINOR_VERSION(PSD_TRANSLATOR_VERSION)),
		int(B_TRANSLATION_REVISION_VERSION(PSD_TRANSLATOR_VERSION)),
		__DATE__);

	BStringView *versionView = new BStringView("version", version);
	BStringView *copyrightView = new BStringView("copyright",
		B_UTF8_COPYRIGHT "2005-2013 Haiku Inc.");
	BStringView *copyright2View = new BStringView("my_copyright",
		B_UTF8_COPYRIGHT "2012-2013 Gerasim Troeglazov <3dEyes@gmail.com>");

	BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
		.SetInsets(B_USE_DEFAULT_SPACING)
		.Add(titleView)
		.Add(versionView)
		.Add(copyrightView)
		.AddGlue()
		.AddGrid(10.0f, 5.0f)
			.Add(fVersionField->CreateLabelLayoutItem(), 0, 0)
			.AddGroup(B_HORIZONTAL, 0.0f, 1, 0)
				.Add(fVersionField->CreateMenuBarLayoutItem(), 0.0f)
				.AddGlue()
				.End()
			.Add(fCompressionField->CreateLabelLayoutItem(), 0, 1)
			.AddGroup(B_HORIZONTAL, 0.0f, 1, 1)
				.Add(fCompressionField->CreateMenuBarLayoutItem(), 0.0f)
				.AddGlue()
				.End()
		.End()
		.AddGlue()
		.Add(copyright2View);
}


ConfigView::~ConfigView()
{
	fSettings->Release();
}


void
ConfigView::AllAttached()
{
	fCompressionField->Menu()->SetTargetForItems(this);
	fVersionField->Menu()->SetTargetForItems(this);
}


void
ConfigView::MessageReceived(BMessage* message)
{
	switch (message->what) {
		case MSG_COMPRESSION_CHANGED: {
			int32 value;
			if (message->FindInt32("value", &value) >= B_OK) {
				fSettings->SetGetInt32(PSD_SETTING_COMPRESSION, &value);
				fSettings->SaveSettings();
			}
			break;
		}
		case MSG_VERSION_CHANGED: {
			int32 value;
			if (message->FindInt32("value", &value) >= B_OK) {
				fSettings->SetGetInt32(PSD_SETTING_VERSION, &value);
				fSettings->SaveSettings();
			}
			break;
		}
		default:
			BView::MessageReceived(message);
	}
}


void
ConfigView::_AddItemToMenu(BMenu* menu, const char* label,
	uint32 mess, uint32 value, uint32 current_value)
{
	BMessage* message = new BMessage(mess);
	message->AddInt32("value", value);
	BMenuItem* item = new BMenuItem(label, message);
	item->SetMarked(value == current_value);
	menu->AddItem(item);
}