1/* 2 * Copyright 2004-2012, Haiku, Inc. All rights reserved. 3 * Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved. 4 * 5 * Distributed under the terms of the MIT License. 6 */ 7 8 9//! A file configuration view for filters 10 11 12#include <FileConfigView.h> 13 14#include <stdio.h> 15 16#include <Button.h> 17#include <Catalog.h> 18#include <GroupLayout.h> 19#include <MailSettingsView.h> 20#include <Message.h> 21#include <Path.h> 22#include <String.h> 23#include <TextControl.h> 24 25 26#undef B_TRANSLATION_CONTEXT 27#define B_TRANSLATION_CONTEXT "MailKit" 28 29 30static const uint32 kMsgSelectButton = 'fsel'; 31 32 33namespace BPrivate { 34 35 36FileControl::FileControl(const char* name, const char* label, 37 const char* pathOfFile, uint32 flavors) 38 : 39 BView(name, 0) 40{ 41 SetViewUIColor(B_PANEL_BACKGROUND_COLOR); 42 SetLayout(new BGroupLayout(B_HORIZONTAL)); 43 44 fText = new BTextControl("file_path", label, pathOfFile, NULL); 45 AddChild(fText); 46 47 fButton = new BButton("select_file", B_TRANSLATE("Select" B_UTF8_ELLIPSIS), 48 new BMessage(kMsgSelectButton)); 49 AddChild(fButton); 50 51 fPanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL, flavors, false); 52} 53 54 55FileControl::~FileControl() 56{ 57 delete fPanel; 58} 59 60 61void 62FileControl::AttachedToWindow() 63{ 64 fButton->SetTarget(this); 65 fPanel->SetTarget(this); 66} 67 68 69void 70FileControl::MessageReceived(BMessage* msg) 71{ 72 switch (msg->what) { 73 case kMsgSelectButton: 74 { 75 fPanel->Hide(); 76 77 BPath path(fText->Text()); 78 if (path.InitCheck() == B_OK && path.GetParent(&path) == B_OK) 79 fPanel->SetPanelDirectory(path.Path()); 80 81 fPanel->Show(); 82 break; 83 } 84 case B_REFS_RECEIVED: 85 { 86 entry_ref ref; 87 if (msg->FindRef("refs", &ref) == B_OK) { 88 BEntry entry(&ref); 89 if (entry.InitCheck() == B_OK) { 90 BPath path; 91 entry.GetPath(&path); 92 93 fText->SetText(path.Path()); 94 } 95 } 96 break; 97 } 98 99 default: 100 BView::MessageReceived(msg); 101 break; 102 } 103} 104 105 106void 107FileControl::SetText(const char* pathOfFile) 108{ 109 fText->SetText(pathOfFile); 110} 111 112 113const char* 114FileControl::Text() const 115{ 116 return fText->Text(); 117} 118 119 120void 121FileControl::SetEnabled(bool enabled) 122{ 123 fText->SetEnabled(enabled); 124 fButton->SetEnabled(enabled); 125} 126 127 128// #pragma mark - 129 130 131MailFileConfigView::MailFileConfigView(const char* label, const char* name, 132 bool useMeta, const char* defaultPath, uint32 flavors) 133 : 134 FileControl(name, label, defaultPath, flavors), 135 fUseMeta(useMeta), 136 fName(name) 137{ 138} 139 140 141void 142MailFileConfigView::SetTo(const BMessage* archive, BMessage* meta) 143{ 144 SetText((fUseMeta ? meta : archive)->FindString(fName)); 145 fMeta = meta; 146} 147 148 149status_t 150MailFileConfigView::SaveInto(BMailAddOnSettings& settings) const 151{ 152 BMessage* archive = fUseMeta ? fMeta : &settings; 153 return archive->SetString(fName, Text()); 154} 155 156 157} // namespace BPrivate 158