/*
* Copyright 2004-2012, Haiku, Inc. All rights reserved.
* Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved.
*
* Distributed under the terms of the MIT License.
*/
//! A file configuration view for filters
#include <FileConfigView.h>
#include <stdio.h>
#include <Button.h>
#include <Catalog.h>
#include <GroupLayout.h>
#include <MailSettingsView.h>
#include <Message.h>
#include <Path.h>
#include <String.h>
#include <TextControl.h>
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "MailKit"
static const uint32 kMsgSelectButton = 'fsel';
namespace BPrivate {
FileControl::FileControl(const char* name, const char* label,
const char* pathOfFile, uint32 flavors)
:
BView(name, 0)
{
SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
SetLayout(new BGroupLayout(B_HORIZONTAL));
fText = new BTextControl("file_path", label, pathOfFile, NULL);
AddChild(fText);
fButton = new BButton("select_file", B_TRANSLATE("Select" B_UTF8_ELLIPSIS),
new BMessage(kMsgSelectButton));
AddChild(fButton);
fPanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL, flavors, false);
}
FileControl::~FileControl()
{
delete fPanel;
}
void
FileControl::AttachedToWindow()
{
fButton->SetTarget(this);
fPanel->SetTarget(this);
}
void
FileControl::MessageReceived(BMessage* msg)
{
switch (msg->what) {
case kMsgSelectButton:
{
fPanel->Hide();
BPath path(fText->Text());
if (path.InitCheck() == B_OK && path.GetParent(&path) == B_OK)
fPanel->SetPanelDirectory(path.Path());
fPanel->Show();
break;
}
case B_REFS_RECEIVED:
{
entry_ref ref;
if (msg->FindRef("refs", &ref) == B_OK) {
BEntry entry(&ref);
if (entry.InitCheck() == B_OK) {
BPath path;
entry.GetPath(&path);
fText->SetText(path.Path());
}
}
break;
}
default:
BView::MessageReceived(msg);
break;
}
}
void
FileControl::SetText(const char* pathOfFile)
{
fText->SetText(pathOfFile);
}
const char*
FileControl::Text() const
{
return fText->Text();
}
void
FileControl::SetEnabled(bool enabled)
{
fText->SetEnabled(enabled);
fButton->SetEnabled(enabled);
}
// #pragma mark -
MailFileConfigView::MailFileConfigView(const char* label, const char* name,
bool useMeta, const char* defaultPath, uint32 flavors)
:
FileControl(name, label, defaultPath, flavors),
fUseMeta(useMeta),
fName(name)
{
}
void
MailFileConfigView::SetTo(const BMessage* archive, BMessage* meta)
{
SetText((fUseMeta ? meta : archive)->FindString(fName));
fMeta = meta;
}
status_t
MailFileConfigView::SaveInto(BMailAddOnSettings& settings) const
{
BMessage* archive = fUseMeta ? fMeta : &settings;
return archive->SetString(fName, Text());
}
} // namespace BPrivate
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: fMeta, _reserved.