xref: /haiku/src/add-ons/mail_daemon/inbound_protocols/imap/ConfigView.cpp (revision 427edfcf0ddc74fc461c9355484d33fd4b027b70)
1 /*
2  * Copyright 2001-2013, Haiku, Inc. All rights reserved.
3  * Copyright 2001-2002 Dr. Zoidberg Enterprises. All rights reserved.
4  * Copyright 2011, Clemens Zeidler <haiku@clemens-zeidler.de>
5  *
6  * Distributed under the terms of the MIT License.
7  */
8 
9 
10 #include <Button.h>
11 #include <Catalog.h>
12 #include <GridLayout.h>
13 #include <Path.h>
14 #include <TextControl.h>
15 
16 #include <MailFilter.h>
17 
18 #include <FileConfigView.h>
19 #include <ProtocolConfigView.h>
20 #include <MailPrivate.h>
21 
22 #include "FolderConfigWindow.h"
23 
24 
25 #undef B_TRANSLATION_CONTEXT
26 #define B_TRANSLATION_CONTEXT "imap_config"
27 
28 
29 using namespace BPrivate;
30 
31 
32 const uint32 kMsgOpenIMAPFolder = '&OIF';
33 
34 
35 class ConfigView : public MailProtocolConfigView {
36 public:
37 								ConfigView(
38 									const BMailAccountSettings& accountSettings,
39 									const BMailProtocolSettings& settings);
40 	virtual						~ConfigView();
41 
42 	virtual status_t			SaveInto(BMailAddOnSettings& settings) const;
43 
44 	virtual	void				MessageReceived(BMessage* message);
45 	virtual void				AttachedToWindow();
46 
47 private:
48 			MailFileConfigView*	fFileView;
49 			BButton*			fFolderButton;
50 };
51 
52 
53 ConfigView::ConfigView(const BMailAccountSettings& accountSettings,
54 	const BMailProtocolSettings& settings)
55 	:
56 	MailProtocolConfigView(B_MAIL_PROTOCOL_HAS_USERNAME
57 		| B_MAIL_PROTOCOL_HAS_PASSWORD | B_MAIL_PROTOCOL_HAS_HOSTNAME
58 		| B_MAIL_PROTOCOL_CAN_LEAVE_MAIL_ON_SERVER
59 		| B_MAIL_PROTOCOL_PARTIAL_DOWNLOAD
60 	 	| B_MAIL_PROTOCOL_HAS_FLAVORS
61 	 )
62 {
63 	AddFlavor(B_TRANSLATE("No encryption"));
64 	AddFlavor(B_TRANSLATE("SSL"));
65 
66 	SetTo(settings);
67 
68 	((BControl*)(FindView("leave_mail_on_server")))->SetValue(B_CONTROL_ON);
69 	((BControl*)(FindView("leave_mail_on_server")))->Hide();
70 
71 	fFolderButton = new BButton("IMAP Folders", B_TRANSLATE(
72 		"Configure IMAP Folders"), new BMessage(kMsgOpenIMAPFolder));
73 	Layout()->AddView(fFolderButton, 0, Layout()->CountRows(), 2);
74 
75 	BPath defaultFolder = BPrivate::default_mail_directory();
76 	defaultFolder.Append(accountSettings.Name());
77 
78 	fFileView = new MailFileConfigView(B_TRANSLATE("Destination:"),
79 		"destination", false, defaultFolder.Path());
80 	fFileView->SetTo(&settings, NULL);
81 
82 	Layout()->AddView(fFileView, 0, Layout()->CountRows(),
83 		Layout()->CountColumns());
84 }
85 
86 
87 ConfigView::~ConfigView()
88 {
89 }
90 
91 
92 status_t
93 ConfigView::SaveInto(BMailAddOnSettings& settings) const
94 {
95 	status_t status = fFileView->SaveInto(settings);
96 	if (status != B_OK)
97 		return status;
98 
99 	return MailProtocolConfigView::SaveInto(settings);
100 }
101 
102 
103 void
104 ConfigView::MessageReceived(BMessage* message)
105 {
106 	switch (message->what) {
107 		case kMsgOpenIMAPFolder:
108 		{
109 			// Retrieve current settings
110 			BMailAddOnSettings settings;
111 			SaveInto(settings);
112 
113 			BWindow* window = new FolderConfigWindow(Window()->Frame(),
114 				settings);
115 			window->Show();
116 			break;
117 		}
118 
119 		default:
120 			MailProtocolConfigView::MessageReceived(message);
121 	}
122 }
123 
124 
125 void
126 ConfigView::AttachedToWindow()
127 {
128 	fFolderButton->SetTarget(this);
129 }
130 
131 
132 // #pragma mark -
133 
134 
135 BMailSettingsView*
136 instantiate_protocol_settings_view(const BMailAccountSettings& accountSettings,
137 	const BMailProtocolSettings& settings)
138 {
139 	return new ConfigView(accountSettings, settings);
140 }
141