#include "SGIView.h"
#include <stdio.h>
#include <string.h>
#include <Catalog.h>
#include <LayoutBuilder.h>
#include <MenuBar.h>
#include <MenuField.h>
#include <MenuItem.h>
#include <PopUpMenu.h>
#include <String.h>
#include <StringView.h>
#include <Window.h>
#include "SGIImage.h"
#include "SGITranslator.h"
const char* author = "Stephan Aßmus, <stippi@yellowbites.com>";
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "SGIView"
void
add_menu_item(BMenu* menu,
uint32 compression,
const char* label,
uint32 currentCompression)
{
BMessage* message = new BMessage(SGIView::MSG_COMPRESSION_CHANGED);
message->AddInt32("value", compression);
BMenuItem* item = new BMenuItem(label, message);
item->SetMarked(currentCompression == compression);
menu->AddItem(item);
}
SGIView::SGIView(const char* name, uint32 flags, TranslatorSettings* settings)
:
BView(name, flags, new BGroupLayout(B_VERTICAL)),
fSettings(settings)
{
BPopUpMenu* menu = new BPopUpMenu("pick compression");
uint32 currentCompression =
fSettings->SetGetInt32(SGI_SETTING_COMPRESSION);
add_menu_item(menu, SGI_COMP_NONE, B_TRANSLATE("None"),
currentCompression);
add_menu_item(menu, SGI_COMP_RLE, B_TRANSLATE("RLE"), currentCompression);
fCompressionMF = new BMenuField("compression",
B_TRANSLATE("Use compression:"), menu);
BAlignment labelAlignment(B_ALIGN_LEFT, B_ALIGN_NO_VERTICAL);
BStringView* titleView = new BStringView("title",
B_TRANSLATE("SGI image translator"));
titleView->SetFont(be_bold_font);
titleView->SetExplicitAlignment(labelAlignment);
char detail[100];
sprintf(detail, B_TRANSLATE("Version %d.%d.%d, %s"),
static_cast<int>(B_TRANSLATION_MAJOR_VERSION(SGI_TRANSLATOR_VERSION)),
static_cast<int>(B_TRANSLATION_MINOR_VERSION(SGI_TRANSLATOR_VERSION)),
static_cast<int>(B_TRANSLATION_REVISION_VERSION(
SGI_TRANSLATOR_VERSION)), __DATE__);
BStringView* detailView = new BStringView("details", detail);
detailView->SetExplicitAlignment(labelAlignment);
BStringView* infoView = new BStringView("info",
BString(B_TRANSLATE("written by:\n"))
.Append(author)
.Append(B_TRANSLATE("\nbased on GIMP SGI plugin v1.5:\n"))
.Append(kSGICopyright).String());
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
.SetInsets(B_USE_DEFAULT_SPACING)
.Add(titleView)
.Add(detailView)
.AddGlue()
.AddGroup(B_HORIZONTAL)
.Add(fCompressionMF)
.AddGlue()
.End()
.AddGlue()
.Add(infoView);
}
SGIView::~SGIView()
{
fSettings->Release();
}
void
SGIView::AllAttached()
{
fCompressionMF->Menu()->SetTargetForItems(this);
}
void
SGIView::MessageReceived(BMessage* message)
{
switch (message->what) {
case MSG_COMPRESSION_CHANGED: {
int32 value;
if (message->FindInt32("value", &value) >= B_OK) {
fSettings->SetGetInt32(SGI_SETTING_COMPRESSION, &value);
fSettings->SaveSettings();
}
break;
}
default:
BView::MessageReceived(message);
}
}