void MailDaemonApp::_InitAccount(BMailAccountSettings& settings) { account_protocols account; // inbound if (settings.IsInboundEnabled()) { account.inboundProtocol = _CreateInboundProtocol(settings, account.inboundImage); } else { account.inboundProtocol = NULL; } if (account.inboundProtocol) { DefaultNotifier* notifier = new DefaultNotifier(settings.Name(), true, fErrorLogWindow, fNotifyMode); account.inboundProtocol->SetMailNotifier(notifier); account.inboundThread = new InboundProtocolThread( account.inboundProtocol); account.inboundThread->Run(); } // outbound if (settings.IsOutboundEnabled()) { account.outboundProtocol = _CreateOutboundProtocol(settings, account.outboundImage); } else { account.outboundProtocol = NULL; } if (account.outboundProtocol) { DefaultNotifier* notifier = new DefaultNotifier(settings.Name(), false, fErrorLogWindow, fNotifyMode); account.outboundProtocol->SetMailNotifier(notifier); account.outboundThread = new OutboundProtocolThread( account.outboundProtocol); account.outboundThread->Run(); } printf("account name %s, id %i, in %p, out %p\n", settings.Name(), (int)settings.AccountID(), account.inboundProtocol, account.outboundProtocol); if (!account.inboundProtocol && !account.outboundProtocol) return; fAccounts[settings.AccountID()] = account; }
void ConfigWindow::MessageReceived(BMessage *msg) { float fontFactor = be_plain_font->Size() / 12.0f; BRect autoConfigRect(0, 0, 400 * fontFactor, 300 * fontFactor); BRect frame; AutoConfigWindow *autoConfigWindow = NULL; switch (msg->what) { case B_COLORS_UPDATED: { rgb_color textColor; if (msg->FindColor(ui_color_name(B_PANEL_TEXT_COLOR), &textColor) == B_OK) { BFont font; fHowToTextView->SetFontAndColor(&font, 0, &textColor); } break; } case kMsgAccountsRightClicked: { BPoint point; msg->FindPoint("point", &point); int32 index = msg->FindInt32("index"); AccountItem* clickedItem = dynamic_cast<AccountItem*>( fAccountsListView->ItemAt(index)); if (clickedItem == NULL || clickedItem->Type() != ACCOUNT_ITEM) break; BPopUpMenu rightClickMenu("accounts", false, false); BMenuItem* inMenuItem = new BMenuItem(B_TRANSLATE("Incoming"), NULL); BMenuItem* outMenuItem = new BMenuItem(B_TRANSLATE("Outgoing"), NULL); rightClickMenu.AddItem(inMenuItem); rightClickMenu.AddItem(outMenuItem); BMailAccountSettings* settings = clickedItem->Account(); if (settings->IsInboundEnabled()) inMenuItem->SetMarked(true); if (settings->IsOutboundEnabled()) outMenuItem->SetMarked(true); BMenuItem* selectedItem = rightClickMenu.Go(point); if (selectedItem == NULL) break; if (selectedItem == inMenuItem) { AccountItem* item = dynamic_cast<AccountItem*>( fAccountsListView->ItemAt(index + 1)); if (item == NULL) break; if (settings->IsInboundEnabled()) { settings->SetInboundEnabled(false); item->SetEnabled(false); } else { settings->SetInboundEnabled(true); item->SetEnabled(true); } } else { AccountItem* item = dynamic_cast<AccountItem*>( fAccountsListView->ItemAt(index + 2)); if (item == NULL) break; if (settings->IsOutboundEnabled()) { settings->SetOutboundEnabled(false); item->SetEnabled(false); } else { settings->SetOutboundEnabled(true); item->SetEnabled(true); } } } case kMsgAccountSelected: { int32 index; if (msg->FindInt32("index", &index) != B_OK || index < 0) { // deselect current item _ReplaceConfigView(_BuildHowToView()); break; } AccountItem* item = (AccountItem*)fAccountsListView->ItemAt(index); if (item != NULL) _AccountSelected(item); break; } case kMsgAddAccount: { frame = Frame(); autoConfigRect.OffsetTo( frame.left + (frame.Width() - autoConfigRect.Width()) / 2, frame.top + (frame.Width() - autoConfigRect.Height()) / 2); autoConfigWindow = new AutoConfigWindow(autoConfigRect, this); autoConfigWindow->Show(); break; } case kMsgRemoveAccount: { int32 index = fAccountsListView->CurrentSelection(); if (index >= 0) { AccountItem *item = (AccountItem *)fAccountsListView->ItemAt( index); if (item != NULL) { _RemoveAccount(item->Account()); _ReplaceConfigView(_BuildHowToView()); } } break; } case kMsgIntervalUnitChanged: { int32 index; if (msg->FindInt32("index",&index) == B_OK) fIntervalControl->SetEnabled(index != 0); break; } case kMsgShowStatusWindowChanged: { // the status window stuff is the only "live" setting BMessenger messenger("application/x-vnd.Be-POST"); if (messenger.IsValid()) messenger.SendMessage(msg); break; } case kMsgRevertSettings: _RevertToLastSettings(); break; case kMsgSaveSettings: fSaveSettings = true; _SaveSettings(); AccountUpdated(fLastSelectedAccount); _ReplaceConfigView(_BuildHowToView()); fAccountsListView->DeselectAll(); break; default: BWindow::MessageReceived(msg); break; } }