xref: /haiku/src/add-ons/mail_daemon/inbound_protocols/imap/ConfigView.cpp (revision 9980b6b47c8f81fb6324ee25e707448180c9151a)
19192d4dcSAxel Dörfler /*
2*c9fb410eSAxel Dörfler  * Copyright 2001-2013, Haiku, Inc. All rights reserved.
39192d4dcSAxel Dörfler  * Copyright 2001-2002 Dr. Zoidberg Enterprises. All rights reserved.
49192d4dcSAxel Dörfler  * Copyright 2011, Clemens Zeidler <haiku@clemens-zeidler.de>
59192d4dcSAxel Dörfler  *
69192d4dcSAxel Dörfler  * Distributed under the terms of the MIT License.
79192d4dcSAxel Dörfler  */
89192d4dcSAxel Dörfler 
99192d4dcSAxel Dörfler 
109192d4dcSAxel Dörfler #include <Button.h>
119192d4dcSAxel Dörfler #include <Catalog.h>
12715bf3d1SAxel Dörfler #include <GridLayout.h>
13715bf3d1SAxel Dörfler #include <Path.h>
149192d4dcSAxel Dörfler #include <TextControl.h>
159192d4dcSAxel Dörfler 
16715bf3d1SAxel Dörfler #include <MailFilter.h>
179192d4dcSAxel Dörfler 
189192d4dcSAxel Dörfler #include <FileConfigView.h>
199192d4dcSAxel Dörfler #include <ProtocolConfigView.h>
209192d4dcSAxel Dörfler #include <MailPrivate.h>
219192d4dcSAxel Dörfler 
229192d4dcSAxel Dörfler #include "FolderConfigWindow.h"
239192d4dcSAxel Dörfler 
249192d4dcSAxel Dörfler 
259192d4dcSAxel Dörfler #undef B_TRANSLATION_CONTEXT
269192d4dcSAxel Dörfler #define B_TRANSLATION_CONTEXT "imap_config"
279192d4dcSAxel Dörfler 
289192d4dcSAxel Dörfler 
29715bf3d1SAxel Dörfler using namespace BPrivate;
30715bf3d1SAxel Dörfler 
31715bf3d1SAxel Dörfler 
329192d4dcSAxel Dörfler const uint32 kMsgOpenIMAPFolder = '&OIF';
339192d4dcSAxel Dörfler 
349192d4dcSAxel Dörfler 
35715bf3d1SAxel Dörfler class ConfigView : public MailProtocolConfigView {
369192d4dcSAxel Dörfler public:
37792843e8SAxel Dörfler 								ConfigView(
38792843e8SAxel Dörfler 									const BMailAccountSettings& accountSettings,
39792843e8SAxel Dörfler 									const BMailProtocolSettings& settings);
409192d4dcSAxel Dörfler 	virtual						~ConfigView();
41715bf3d1SAxel Dörfler 
42792843e8SAxel Dörfler 	virtual status_t			SaveInto(BMailAddOnSettings& settings) const;
439192d4dcSAxel Dörfler 
449192d4dcSAxel Dörfler 	virtual	void				MessageReceived(BMessage* message);
459192d4dcSAxel Dörfler 	virtual void				AttachedToWindow();
469192d4dcSAxel Dörfler 
479192d4dcSAxel Dörfler private:
48715bf3d1SAxel Dörfler 			MailFileConfigView*	fFileView;
49715bf3d1SAxel Dörfler 			BButton*			fFolderButton;
509192d4dcSAxel Dörfler };
519192d4dcSAxel Dörfler 
529192d4dcSAxel Dörfler 
ConfigView(const BMailAccountSettings & accountSettings,const BMailProtocolSettings & settings)53792843e8SAxel Dörfler ConfigView::ConfigView(const BMailAccountSettings& accountSettings,
54792843e8SAxel Dörfler 	const BMailProtocolSettings& settings)
559192d4dcSAxel Dörfler 	:
56715bf3d1SAxel Dörfler 	MailProtocolConfigView(B_MAIL_PROTOCOL_HAS_USERNAME
579192d4dcSAxel Dörfler 		| B_MAIL_PROTOCOL_HAS_PASSWORD | B_MAIL_PROTOCOL_HAS_HOSTNAME
589192d4dcSAxel Dörfler 		| B_MAIL_PROTOCOL_CAN_LEAVE_MAIL_ON_SERVER
599192d4dcSAxel Dörfler 		| B_MAIL_PROTOCOL_PARTIAL_DOWNLOAD
609192d4dcSAxel Dörfler 	 	| B_MAIL_PROTOCOL_HAS_FLAVORS
61792843e8SAxel Dörfler 	 )
629192d4dcSAxel Dörfler {
639192d4dcSAxel Dörfler 	AddFlavor(B_TRANSLATE("No encryption"));
649192d4dcSAxel Dörfler 	AddFlavor(B_TRANSLATE("SSL"));
659192d4dcSAxel Dörfler 
66792843e8SAxel Dörfler 	SetTo(settings);
679192d4dcSAxel Dörfler 
689192d4dcSAxel Dörfler 	((BControl*)(FindView("leave_mail_on_server")))->SetValue(B_CONTROL_ON);
699192d4dcSAxel Dörfler 	((BControl*)(FindView("leave_mail_on_server")))->Hide();
709192d4dcSAxel Dörfler 
71715bf3d1SAxel Dörfler 	fFolderButton = new BButton("IMAP Folders", B_TRANSLATE(
724235da30SAxel Dörfler 		"Configure IMAP Folders"), new BMessage(kMsgOpenIMAPFolder));
73715bf3d1SAxel Dörfler 	Layout()->AddView(fFolderButton, 0, Layout()->CountRows(), 2);
749192d4dcSAxel Dörfler 
759192d4dcSAxel Dörfler 	BPath defaultFolder = BPrivate::default_mail_directory();
76792843e8SAxel Dörfler 	defaultFolder.Append(accountSettings.Name());
779192d4dcSAxel Dörfler 
78715bf3d1SAxel Dörfler 	fFileView = new MailFileConfigView(B_TRANSLATE("Destination:"),
799192d4dcSAxel Dörfler 		"destination", false, defaultFolder.Path());
80792843e8SAxel Dörfler 	fFileView->SetTo(&settings, NULL);
819192d4dcSAxel Dörfler 
82715bf3d1SAxel Dörfler 	Layout()->AddView(fFileView, 0, Layout()->CountRows(),
83715bf3d1SAxel Dörfler 		Layout()->CountColumns());
849192d4dcSAxel Dörfler }
859192d4dcSAxel Dörfler 
869192d4dcSAxel Dörfler 
~ConfigView()879192d4dcSAxel Dörfler ConfigView::~ConfigView()
889192d4dcSAxel Dörfler {
899192d4dcSAxel Dörfler }
909192d4dcSAxel Dörfler 
919192d4dcSAxel Dörfler 
929192d4dcSAxel Dörfler status_t
SaveInto(BMailAddOnSettings & settings) const93792843e8SAxel Dörfler ConfigView::SaveInto(BMailAddOnSettings& settings) const
949192d4dcSAxel Dörfler {
95792843e8SAxel Dörfler 	status_t status = fFileView->SaveInto(settings);
96792843e8SAxel Dörfler 	if (status != B_OK)
97792843e8SAxel Dörfler 		return status;
98792843e8SAxel Dörfler 
99792843e8SAxel Dörfler 	return MailProtocolConfigView::SaveInto(settings);
1009192d4dcSAxel Dörfler }
1019192d4dcSAxel Dörfler 
1029192d4dcSAxel Dörfler 
1039192d4dcSAxel Dörfler void
MessageReceived(BMessage * message)1049192d4dcSAxel Dörfler ConfigView::MessageReceived(BMessage* message)
1059192d4dcSAxel Dörfler {
1069192d4dcSAxel Dörfler 	switch (message->what) {
1079192d4dcSAxel Dörfler 		case kMsgOpenIMAPFolder:
1089192d4dcSAxel Dörfler 		{
109*c9fb410eSAxel Dörfler 			// Retrieve current settings
110*c9fb410eSAxel Dörfler 			BMailAddOnSettings settings;
111*c9fb410eSAxel Dörfler 			SaveInto(settings);
112*c9fb410eSAxel Dörfler 
1139192d4dcSAxel Dörfler 			BWindow* window = new FolderConfigWindow(Window()->Frame(),
1149192d4dcSAxel Dörfler 				settings);
1159192d4dcSAxel Dörfler 			window->Show();
1169192d4dcSAxel Dörfler 			break;
1179192d4dcSAxel Dörfler 		}
1189192d4dcSAxel Dörfler 
1199192d4dcSAxel Dörfler 		default:
120715bf3d1SAxel Dörfler 			MailProtocolConfigView::MessageReceived(message);
1219192d4dcSAxel Dörfler 	}
1229192d4dcSAxel Dörfler }
1239192d4dcSAxel Dörfler 
1249192d4dcSAxel Dörfler 
1259192d4dcSAxel Dörfler void
AttachedToWindow()1269192d4dcSAxel Dörfler ConfigView::AttachedToWindow()
1279192d4dcSAxel Dörfler {
128715bf3d1SAxel Dörfler 	fFolderButton->SetTarget(this);
1299192d4dcSAxel Dörfler }
1309192d4dcSAxel Dörfler 
1319192d4dcSAxel Dörfler 
1329192d4dcSAxel Dörfler // #pragma mark -
1339192d4dcSAxel Dörfler 
1349192d4dcSAxel Dörfler 
135792843e8SAxel Dörfler BMailSettingsView*
instantiate_protocol_settings_view(const BMailAccountSettings & accountSettings,const BMailProtocolSettings & settings)136792843e8SAxel Dörfler instantiate_protocol_settings_view(const BMailAccountSettings& accountSettings,
137792843e8SAxel Dörfler 	const BMailProtocolSettings& settings)
1389192d4dcSAxel Dörfler {
139792843e8SAxel Dörfler 	return new ConfigView(accountSettings, settings);
1409192d4dcSAxel Dörfler }
141