From 794a013e9beece2ee9d01a9f1f745b10e360b601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 30 Oct 2012 20:30:50 +0100 Subject: [PATCH] Adapted fortune filter to the new mail API. --- .../outbound_filters/fortune/ConfigView.cpp | 89 +++++++------------ .../outbound_filters/fortune/ConfigView.h | 35 ++++---- .../outbound_filters/fortune/Jamfile | 2 +- .../outbound_filters/fortune/filter.cpp | 77 +++++++++++----- 4 files changed, 106 insertions(+), 97 deletions(-) diff --git a/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.cpp b/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.cpp index be7d4bd86a..03d32cf40e 100644 --- a/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.cpp +++ b/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.cpp @@ -1,17 +1,21 @@ -/* ConfigView - the configuration view for the Fortune filter -** -** Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved. -*/ +/* + * Copyright 2004-2012, Haiku, Inc. All rights reserved. + * Copyright 2001, Dr. Zoidberg Enterprises. All rights reserved. + * + * Distributed under the terms of the MIT License. + */ #include "ConfigView.h" #include -#include -#include +#include #include +#include +#include -#include + +using namespace BPrivate; #undef B_TRANSLATION_CONTEXT @@ -20,74 +24,45 @@ ConfigView::ConfigView() : - BView(BRect(0, 0, 20, 20), "fortune_filter", B_FOLLOW_LEFT | B_FOLLOW_TOP, - 0) + BView("fortune_filter", 0) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - // determine font height - font_height fontHeight; - GetFontHeight(&fontHeight); - float itemHeight = (int32)(fontHeight.ascent + fontHeight.descent - + fontHeight.leading) + 13; + fFileView = new MailFileConfigView(B_TRANSLATE("Fortune file:"), + "fortune_file", false, "", B_FILE_NODE); + fTagControl = new BTextControl("tag_line", B_TRANSLATE("Tag line:"), + NULL, NULL); - BRect rect(5,4,250,25); - rect.bottom = rect.top - 2 + itemHeight; - BMailFileConfigView *fview = new BMailFileConfigView( - B_TRANSLATE("Fortune file:"), "fortune_file", false, "", B_FILE_NODE); - AddChild(fview); - - rect.top = rect.bottom + 8; - rect.bottom = rect.top - 2 + itemHeight; - BTextControl * control = new BTextControl(rect, "tag_line", - B_TRANSLATE("Tag line:"), NULL, NULL); - control->SetDivider(control->StringWidth(control->Label()) + 6); - AddChild(control); - - ResizeToPreferred(); + BLayoutBuilder::Group<>(this, B_VERTICAL) + .Add(fFileView) + .Add(fTagControl); } -void ConfigView::SetTo(const BMessage *archive) +void +ConfigView::SetTo(const BMessage* archive) { - BMailFileConfigView* control = (BMailFileConfigView*)FindView( - "fortune_file"); - if (control != NULL) - control->SetTo(archive, NULL); + fFileView->SetTo(archive, NULL); BString path = archive->FindString("tag_line"); if (!archive->HasString("tag_line")) path = B_TRANSLATE("Fortune cookie says:\n\n"); path.Truncate(path.Length() - 2); - if (BTextControl *control = (BTextControl *)FindView("tag_line")) - control->SetText(path.String()); + fTagControl->SetText(path.String()); } -status_t ConfigView::Archive(BMessage *into,bool) const +status_t +ConfigView::Archive(BMessage* into, bool /*deep*/) const { - if (BMailFileConfigView *control = (BMailFileConfigView - *)FindView("fortune_file")) - { - control->Archive(into); - } + fFileView->Archive(into); + + BString line = fTagControl->Text(); + if (line != B_EMPTY_STRING) + line << "\n\n"; + if (into->ReplaceString("tag_line", line.String()) != B_OK) + into->AddString("tag_line", line.String()); - if (BTextControl *control = (BTextControl *)FindView("tag_line")) - { - BString line = control->Text(); - if (line != B_EMPTY_STRING) - line << "\n\n"; - if (into->ReplaceString("tag_line", line.String()) != B_OK) - into->AddString("tag_line", line.String()); - } return B_OK; } - - -void ConfigView::GetPreferredSize(float *width, float *height) -{ - *width = 258; - *height = (ChildAt(0)->Bounds().Height() + 8) * CountChildren(); -} - diff --git a/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.h b/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.h index 5f4d0efc25..9ff3cd0b6d 100644 --- a/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.h +++ b/src/add-ons/mail_daemon/outbound_filters/fortune/ConfigView.h @@ -1,22 +1,27 @@ -#ifndef CONFIG_VIEW -#define CONFIG_VIEW -/* ConfigView - the configuration view for the Folder filter -** -** Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved. -*/ +/* + * Copyright 2004-2012, Haiku, Inc. All rights reserved. + * Copyright 2001, Dr. Zoidberg Enterprises. All rights reserved. + * + * Distributed under the terms of the MIT License. + */ +#ifndef CONFIG_VIEW_H +#define CONFIG_VIEW_H -#include +#include -class ConfigView : public BView -{ - public: - ConfigView(); - void SetTo(const BMessage *archive); +class ConfigView : public BView { +public: + ConfigView(); + void SetTo(const BMessage* archive); - virtual status_t Archive(BMessage *into, bool deep = true) const; - virtual void GetPreferredSize(float *width, float *height); + virtual status_t Archive(BMessage* into, bool deep = true) const; + +private: + BPrivate::MailFileConfigView* fFileView; + BTextControl* fTagControl; }; -#endif /* CONFIG_VIEW */ + +#endif // CONFIG_VIEW_H diff --git a/src/add-ons/mail_daemon/outbound_filters/fortune/Jamfile b/src/add-ons/mail_daemon/outbound_filters/fortune/Jamfile index d80d0b537c..44dcf8cd7f 100644 --- a/src/add-ons/mail_daemon/outbound_filters/fortune/Jamfile +++ b/src/add-ons/mail_daemon/outbound_filters/fortune/Jamfile @@ -1,6 +1,5 @@ SubDir HAIKU_TOP src add-ons mail_daemon outbound_filters fortune ; - UsePrivateHeaders mail shared ; UsePublicHeaders [ FDirName add-ons mail_daemon ] ; @@ -19,4 +18,5 @@ DoCatalogs Fortune : x-vnd.Haiku-Fortune : ConfigView.cpp + filter.cpp ; diff --git a/src/add-ons/mail_daemon/outbound_filters/fortune/filter.cpp b/src/add-ons/mail_daemon/outbound_filters/fortune/filter.cpp index e737a2e2b1..63560bcbb3 100644 --- a/src/add-ons/mail_daemon/outbound_filters/fortune/filter.cpp +++ b/src/add-ons/mail_daemon/outbound_filters/fortune/filter.cpp @@ -1,15 +1,21 @@ -/* Add Fortune - adds fortunes to your mail -** -** Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved. -*/ +/* + * Copyright 2004-2012, Haiku, Inc. All rights reserved. + * Copyright 2001, Dr. Zoidberg Enterprises. All rights reserved. + * + * Distributed under the terms of the MIT License. + */ + + +//! Adds fortunes to your mail #include "ConfigView.h" +#include #include #include #include -#include +#include #include #include @@ -17,46 +23,59 @@ #include "NodeMessage.h" -class FortuneFilter : public MailFilter -{ +#undef B_TRANSLATION_CONTEXT +#define B_TRANSLATION_CONTEXT "FortuneFilter" + + +class FortuneFilter : public BMailFilter { public: - FortuneFilter(MailProtocol& protocol, - AddonSettings* settings); - void MessageReadyToSend(const entry_ref& ref, + FortuneFilter(BMailProtocol& protocol, + BMailAddOnSettings* settings); + + virtual BString DescriptiveName() const; + + virtual void MessageReadyToSend(const entry_ref& ref, BFile* file); }; -FortuneFilter::FortuneFilter(MailProtocol& protocol, AddonSettings* settings) +FortuneFilter::FortuneFilter(BMailProtocol& protocol, + BMailAddOnSettings* settings) : - MailFilter(protocol, settings) + BMailFilter(protocol, settings) { } +BString +FortuneFilter::DescriptiveName() const +{ + return filter_name(); +} + + void FortuneFilter::MessageReadyToSend(const entry_ref& ref, BFile* file) { // What we want to do here is to change the message body. To do that we use the // framework we already have by creating a new BEmailMessage based on the // BPositionIO, changing the message body and rendering it back to disk. Of course - // this method ends up not being super-efficient, but it works. Ideas on how to + // this method ends up not being super-efficient, but it works. Ideas on how to // improve this are welcome. BString fortuneFile; BString tagLine; - const BMessage* settings = &fAddonSettings->Settings(); // Obtain relevant settings - settings->FindString("fortune_file", &fortuneFile); - settings->FindString("tag_line", &tagLine); - + fSettings->FindString("fortune_file", &fortuneFile); + fSettings->FindString("tag_line", &tagLine); + // Add command to be executed fortuneFile.Prepend("/bin/fortune "); - + char buffer[768]; FILE *fd; - + fd = popen(fortuneFile.String(), "r"); if (!fd) { printf("Could not open pipe to fortune!\n"); @@ -83,18 +102,28 @@ FortuneFilter::MessageReadyToSend(const entry_ref& ref, BFile* file) } -MailFilter* -instantiate_mailfilter(MailProtocol& protocol, AddonSettings* settings) +// #pragma mark - + + +BString +filter_name() +{ + return B_TRANSLATE("Fortune"); +} + + +BMailFilter* +instantiate_filter(BMailProtocol& protocol, BMailAddOnSettings* settings) { return new FortuneFilter(protocol, settings); } BView* -instantiate_filter_config_panel(AddonSettings& settings) +instantiate_filter_config_panel(BMailAddOnSettings& settings) { - ConfigView *view = new ConfigView(); - view->SetTo(&settings.Settings()); + ConfigView* view = new ConfigView(); + view->SetTo(&settings); return view; }