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
30 static const uint32 kMsgSelectButton = 'fsel';
31
32
33 namespace BPrivate {
34
35
FileControl(const char * name,const char * label,const char * pathOfFile,uint32 flavors)36 FileControl::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
~FileControl()55 FileControl::~FileControl()
56 {
57 delete fPanel;
58 }
59
60
61 void
AttachedToWindow()62 FileControl::AttachedToWindow()
63 {
64 fButton->SetTarget(this);
65 fPanel->SetTarget(this);
66 }
67
68
69 void
MessageReceived(BMessage * msg)70 FileControl::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
106 void
SetText(const char * pathOfFile)107 FileControl::SetText(const char* pathOfFile)
108 {
109 fText->SetText(pathOfFile);
110 }
111
112
113 const char*
Text() const114 FileControl::Text() const
115 {
116 return fText->Text();
117 }
118
119
120 void
SetEnabled(bool enabled)121 FileControl::SetEnabled(bool enabled)
122 {
123 fText->SetEnabled(enabled);
124 fButton->SetEnabled(enabled);
125 }
126
127
128 // #pragma mark -
129
130
MailFileConfigView(const char * label,const char * name,bool useMeta,const char * defaultPath,uint32 flavors)131 MailFileConfigView::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
141 void
SetTo(const BMessage * archive,BMessage * meta)142 MailFileConfigView::SetTo(const BMessage* archive, BMessage* meta)
143 {
144 SetText((fUseMeta ? meta : archive)->FindString(fName));
145 fMeta = meta;
146 }
147
148
149 status_t
SaveInto(BMailAddOnSettings & settings) const150 MailFileConfigView::SaveInto(BMailAddOnSettings& settings) const
151 {
152 BMessage* archive = fUseMeta ? fMeta : &settings;
153 return archive->SetString(fName, Text());
154 }
155
156
157 } // namespace BPrivate
158