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 29using namespace BPrivate; 30 31 32const uint32 kMsgOpenIMAPFolder = '&OIF'; 33 34 35class ConfigView : public MailProtocolConfigView { 36public: 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 47private: 48 MailFileConfigView* fFileView; 49 BButton* fFolderButton; 50}; 51 52 53ConfigView::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 87ConfigView::~ConfigView() 88{ 89} 90 91 92status_t 93ConfigView::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 103void 104ConfigView::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 125void 126ConfigView::AttachedToWindow() 127{ 128 fFolderButton->SetTarget(this); 129} 130 131 132// #pragma mark - 133 134 135BMailSettingsView* 136instantiate_protocol_settings_view(const BMailAccountSettings& accountSettings, 137 const BMailProtocolSettings& settings) 138{ 139 return new ConfigView(accountSettings, settings); 140} 141