From 02e45e32ae6734100fa1d6f769148e0b551c034b Mon Sep 17 00:00:00 2001 From: Niels Sascha Reedijk Date: Sun, 1 Mar 2020 08:32:05 +0000 Subject: [PATCH] HaikuBook: Initial documentation for BNotification The implementation file contained some documentation. This has been moved to the Haiku Book (and is rewritten in most cases). The documentation gives some insight on how the notification_server works. Change-Id: I82bafcf57101d4882bdf07e7f731df9cd8adc861 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2299 Reviewed-by: Adrien Destugues --- docs/user/Doxyfile | 1 + docs/user/app/Notification.dox | 903 +++++++++++------- .../app/images/notification_error_type.png | Bin 0 -> 3758 bytes docs/user/app/images/notification_group.png | Bin 0 -> 17422 bytes .../images/notification_important_type.png | Bin 0 -> 4013 bytes .../images/notification_information_type.png | Bin 0 -> 3861 bytes docs/user/app/images/notification_intro.png | Bin 0 -> 12038 bytes .../app/images/notification_progress_type.png | Bin 0 -> 4975 bytes src/kits/app/Notification.cpp | 102 -- 9 files changed, 574 insertions(+), 432 deletions(-) create mode 100644 docs/user/app/images/notification_error_type.png create mode 100644 docs/user/app/images/notification_group.png create mode 100644 docs/user/app/images/notification_important_type.png create mode 100644 docs/user/app/images/notification_information_type.png create mode 100644 docs/user/app/images/notification_intro.png create mode 100644 docs/user/app/images/notification_progress_type.png diff --git a/docs/user/Doxyfile b/docs/user/Doxyfile index 2d2a17692b..02efc59172 100644 --- a/docs/user/Doxyfile +++ b/docs/user/Doxyfile @@ -955,6 +955,7 @@ EXAMPLE_RECURSIVE = NO # \image command). IMAGE_PATH = . \ + app/images \ interface/images \ keyboard \ midi2/images \ diff --git a/docs/user/app/Notification.dox b/docs/user/app/Notification.dox index e57f807786..d6f587caa7 100644 --- a/docs/user/app/Notification.dox +++ b/docs/user/app/Notification.dox @@ -1,330 +1,573 @@ -/* - * Copyright 2019 Haiku, Inc. All rights reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Niels Sascha Reedijk, niels.reedijk@gmail.com - * - * Corresponds to: - * headers/os/app/Notification.h hrev51445 - * src/kits/app/Notification.cpp hrev52287 - */ - - - /*! - \file Notification.h - \ingroup app - \ingroup libbe - \brief Provides BNotification class and the notification_type enum. -*/ - - -///// notification_type enum ///// - - -/*! - \enum notification_type - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \var notification_type::B_INFORMATION_NOTIFICATION - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \var notification_type::B_IMPORTANT_NOTIFICATION - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \var notification_type::B_ERROR_NOTIFICATION - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \var notification_type::B_PROGRESS_NOTIFICATION - \brief Undocumented - - \since Haiku R1 -*/ - - -///// BNotification class ///// - - -/*! - \class BNotification - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn BNotification::BNotification(notification_type type) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn BNotification::BNotification(BMessage* archive) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn virtual BNotification::~BNotification() - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn status_t BNotification::InitCheck() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn static BArchivable* BNotification::Instantiate(BMessage* archive) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn virtual status_t BNotification::Archive(BMessage* archive, - bool deep = true) const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::SourceSignature() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::SourceName() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn notification_type BNotification::Type() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::Group() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn void BNotification::SetGroup(const BString& group) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::Title() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn void BNotification::SetTitle(const BString& title) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::Content() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn void BNotification::SetContent(const BString& content) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::MessageID() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn void BNotification::SetMessageID(const BString& id) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn float BNotification::Progress() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn void BNotification::SetProgress(float progress) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::OnClickApp() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn void BNotification::SetOnClickApp(const BString& app) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const entry_ref* BNotification::OnClickFile() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn status_t BNotification::SetOnClickFile(const entry_ref* file) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn status_t BNotification::AddOnClickRef(const entry_ref* ref) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn int32 BNotification::CountOnClickRefs() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const entry_ref* BNotification::OnClickRefAt(int32 index) const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn status_t BNotification::AddOnClickArg(const BString& arg) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn int32 BNotification::CountOnClickArgs() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const char* BNotification::OnClickArgAt(int32 index) const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn const BBitmap* BNotification::Icon() const - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn status_t BNotification::SetIcon(const BBitmap* icon) - \brief Undocumented - - \since Haiku R1 -*/ - - -/*! - \fn status_t BNotification::Send(bigtime_t timeout = -1) - \brief Undocumented - - \since Haiku R1 -*/ +/* + * Copyright 2019-2020 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Niels Sascha Reedijk, niels.reedijk@gmail.com + * + * Corresponds to: + * headers/os/app/Notification.h hrev51445 + * src/kits/app/Notification.cpp hrev52287 + */ + + + /*! + \file Notification.h + \ingroup app + \ingroup libbe + \brief Provides BNotification class and the notification_type enum. +*/ + + +///// notification_type enum ///// + + +/*! + \enum notification_type + \brief Visual style of the notification. + + \since Haiku R1 +*/ + + +/*! + \var notification_type::B_INFORMATION_NOTIFICATION + \brief Information type + + This will have the notification appear with a grey side bar. + + \image html notification_information_type.png + + \since Haiku R1 +*/ + + +/*! + \var notification_type::B_IMPORTANT_NOTIFICATION + \brief Important type + + This will have the notification appear with a blue side bar. + + \image html notification_important_type.png + + \since Haiku R1 +*/ + + +/*! + \var notification_type::B_ERROR_NOTIFICATION + \brief Error type + + This will have the notification appear with a red side bar. + + \image html notification_error_type.png + + \since Haiku R1 +*/ + + +/*! + \var notification_type::B_PROGRESS_NOTIFICATION + \brief Progress type + + This will have the notification appear with a progress bar. + + \image html notification_progress_type.png + + \since Haiku R1 +*/ + + +///// BNotification class ///// + + +/*! + \class BNotification + \brief Construct system-default notifications to be displayed to the user. + + Haiku provides a notification system that allows you to display messages to + the user. There is quite some flexibility in how the message is presented. + You may use this class to build and send the notification. The properties + you can set are: + - The \link BNotification::BNotification() type of notification\endlink, + which can be an information message, a warning, an error, or a progress + message. + - The \link BNotification::SetGroup() group\endlink, which allows you to + organize notification display into different categories. + - A \link BNotification::SetTitle() title\endlink, which is a distinct + text element at the top of a notification view. + - The \link BNotification::SetContent() content\endlink, which is the text + message that is shown to the user. + - A \link BNotification::SetMessageID() message identifier\endlink that + allows you to modify the contents of a message that is being displayed, + which is particularly useful for progress notifications. + - For progress notifications, the + \link BNotification::SetProgress() percentage of completion\endlink can be + set. + - By default the notification uses the application's icon, but you may + set an \link BNotification::SetIcon() alternative icon\endlink. + - Finally there are a few ways you can configure the actions that happen + when a user clicks the notification. More on that below. + + For example, with the following code, you may display a notification: + + \code{.cpp} + BNotification notification(B_PROGRESS_NOTIFICATION); + notification.SetGroup("Group"); + notification.SetTitle("Title"); + notification.SetContent("This is the content"); + notification.SetMessageID("mainwindow_progress") + notification.SetProgress(0.5); + notification.Send(); + \endcode + + \p + + \image html notification_intro.png + + Note that in the previous code example, we set a + \link BNotification::SetMessageID message identifier\endlink, which will + allow to update the notification when we have progressed. The use would be: + + \code{.cpp} + // After sending the notification, you retain ownership so that you can update it + notification.SetProgress(0.7); + + // In order to display the update, you send it again + notification.Send(); + \endcode + + Furthermore, it is possible to support some form of follow-up action, when + the user clicks the notification. First of all, you need to choose whether + you want to \link BNotification::SetOnClickApp() open a specific + application\endlink, or whether you want to + \link BNotification::SetOnClickFile() open a specific file\endlink and have + the system determine which application fits that. Additionally, you may + specify \link BNotification::AddOnClickArg() command line arguments\endlink + or pass additional \link BNotification::AddOnClickRef() file + references\endlink for the receiving application to process. + + Finally, a note about the \c notification_server and how it groups and + handles messages coming from your application. The system is aware of the + source of the notifications, and identifies your application by it's + signature. That means that the identification of your application is + consistent, even if it is restarted, or if you have multiple instances + running. This impacts the \link BNotification::SetGroup() grouping\endlink + functionality and the \link BNotification::SetMessageID() message + updating\endlink functionality. If you have an application that can have + multiple instances, you will need to make sure that you properly manage + your group names and identifiers if you want to keep things separate. + + \since Haiku R1 +*/ + + +/*! + \fn BNotification::BNotification(notification_type type) + \brief Construct an empty message, with the specified \a type. + + The type influences the style of the notification view. See the + \ref notification_type enumerator for details. + + \since Haiku R1 +*/ + + +/*! + \fn BNotification::BNotification(BMessage* archive) + \brief Construct a notification from an archive. + + \since Haiku R1 +*/ + + +/*! + \fn virtual BNotification::~BNotification() + \brief Frees all resources associated with the object. + + \since Haiku R1 +*/ + + +/*! + \fn status_t BNotification::InitCheck() const + \brief Returns the status of the constructor. + + \since Haiku R1 +*/ + + +/*! + \fn static BArchivable* BNotification::Instantiate(BMessage* archive) + \brief Returns a new BNotification object from \a archive. + + This class implements the archiving API, and as such, you can + build a new BNotification object from a previously created + BMessage archive. However, if the message doesn't contain an archived data + for a BNotification object, this method returns \c NULL. + + \returns BNotification object from \a archive or \c NULL if it doesn't + contain a valid BNotification object. + + \since Haiku R1 +*/ + + +/*! + \fn virtual status_t BNotification::Archive(BMessage* archive, + bool deep = true) const + \brief Archives the BNotification in the \c archive. + + \see BArchivable::Archive(), Instantiate() static function. + \returns \c B_OK: if everything went fine, or other errors that describe why + archiving has failed. + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::SourceSignature() const + \brief Returns signature of the application where the notification + originated. + + When you build your own notifications, this will contain the signature of + the current application. If you receive notifications from other + applications, it will include theirs. + + \returns Signature of the source application. + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::SourceName() const + \brief Returns the name of the application where the notification + originated. + + When you build your own notifications, this will contain the name of + the current application. If you receive notifications from other + applications, it will include theirs. + + \returns Name of the source application. + + \since Haiku R1 +*/ + + +/*! + \fn notification_type BNotification::Type() const + \brief Returns the type of the notification. + + \returns A value of the \c notification_type enum that represents + notification type. + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::Group() const + \brief Returns the group of the notification. + + \see BNotification::SetGroup() for more information about groups. + + \returns The string of the notification's group. + + \since Haiku R1 +*/ + + +/*! + \fn void BNotification::SetGroup(const BString& group) + \brief Set a group for the notifcation. + + The default behaviour of the \c notification_server is group the visible + notifications per running application, and then in order in which they have + been received. There may be situations where you want to override that + behavior and group related notifications. When you set a group name, the + \c notification_server will create a box with the \c group name as label, + and insert all related notifications in that box. + + \image html notification_group.png + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::Title() const + \brief Returns the title of the notification. + + \returns The title of the notification as a string. + + \since Haiku R1 +*/ + + +/*! + \fn void BNotification::SetTitle(const BString& title) + \brief Set a title for the notification. + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::Content() const + \brief Returns the message of the notification. + + \returns The message of the notification as a string. + + \since Haiku R1 +*/ + + +/*! + \fn void BNotification::SetContent(const BString& content) + \brief Set a message for the notification. + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::MessageID() const + \brief Returns the identifier of the notification. + + \see BNotification::SetMessageID() for the purpose of having an identifier. + + \returns The identifier of the notification as a string. + + \since Haiku R1 +*/ + + +/*! + \fn void BNotification::SetMessageID(const BString& id) + \brief Sets notification's message identifier. + + If you want to update the contents of an existing notification, you can + set a identifier for this message. When you send a new or updated message + with the same identifier, the \c notification_server will update the + existing message with the new content. + + In order to effectively use this feature, you will have to make sure the + identifier is unique within the current application. + + \since Haiku R1 +*/ + + +/*! + \fn float BNotification::Progress() const + \brief Returns the progress for the notification. + + \see BNotification::SetProgress() for more information about this value. + + \returns A value between 0.0 and 1.0 if notification's type is + \c B_PROGRESS_NOTIFICATION, or otherwise -1. + + \since Haiku R1 +*/ + + +/*! + \fn void BNotification::SetProgress(float progress) + \brief Sets progress information. + + When you are building a notification of the type \c B_PROGRESS_NOTIFICATION + the notification view will show a progress bar and a label that + expresses the progress in a percentage. Using this method you can set + what the bar and label express. + + The valid range is between 0.0 and 1.0. If \c progress is lower than 0.0 + (i.e. negative), the value will be set to 0.0. If it is higher than 1.0, + it will be set to 1.0. + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::OnClickApp() const + \brief Returns the signature of the application that will be called when + the notification is clicked. + + \see More information about this property in BNotification::SetOnClickApp(). + + \since Haiku R1 +*/ + + +/*! + \fn void BNotification::SetOnClickApp(const BString& app) + \brief Set which application should be called when the notification is + clicked by the user. + + The value \c app should be a valid application signature, for example + \c 'application/x-vnd.Haiku-StyledEdit'. + + Using this property has precedence on when BNotification::SetOnClickFile() + is used. If you want interacting with the notification opening a specific + file, then you should use this method in combination with + BNotification::AddOnClickRef(). + + \see Additional actions and parameters can be set through + BNotification::SetOnClickFile(), BNotification::AddOnClickRef() + and BNotification::AddOnClickArg(). + + \since Haiku R1 +*/ + + +/*! + \fn const entry_ref* BNotification::OnClickFile() const + \brief Returns the reference to the file that will be opened when the + notification is clicked. + + \see More information about this property in BNotification::SetOnClickFile(). + + \since Haiku R1 +*/ + + +/*! + \fn status_t BNotification::SetOnClickFile(const entry_ref* file) + \brief Set which file should be opened when the notification is + clicked by the user. + + The file will be opened by the default application for this file type. + + You cannot use this action in combination with + BNotification::SetOnClickApp(). If you use this way of setting an action, + this action will be ignored. + + \see Additional actions and parameters can be set through + BNotification::SetOnClickApp(), BNotification::AddOnClickRef() + and BNotification::AddOnClickArg(). + + \since Haiku R1 +*/ + + +/*! + \fn status_t BNotification::AddOnClickRef(const entry_ref* ref) + \brief Add a \c ref to the list of arguments passed when a user clicks the + notification. + + This method allows you to construct a list of refs, that will be sent to + the application specified by BNotification::AddOnClickApp(), or the one + that is associated with BNotification::AddOnClickFile(). The refs will be + handled by the application's BApplication::RefsReceived() hook method. + + \since Haiku R1 +*/ + + +/*! + \fn int32 BNotification::CountOnClickRefs() const + \brief Returns the number of refs to be passed when the user clicks on + the notification. + + \see BNotification::AddOnClickRef() + + \since Haiku R1 +*/ + + +/*! + \fn const entry_ref* BNotification::OnClickRefAt(int32 index) const + \brief Returns the ref that is stored at \c index. + + \see BNotification::AddOnClickRef() + + \since Haiku R1 +*/ + + +/*! + \fn status_t BNotification::AddOnClickArg(const BString& arg) + \brief Add to a list of arguments that are passed to an application when + the user clicks on the notification. + + This method allows you to construct a list of arguments, that will be sent + to the application specified by BNotification::AddOnClickApp(), or the one + that is associated with BNotification::AddOnClickFile(). The args will be + handled by the application's BApplication::ArgvReceived() hook method. + + \since Haiku R1 +*/ + + +/*! + \fn int32 BNotification::CountOnClickArgs() const + \brief Returns the number of args to be passed when the user clicks on + the notification. + + \see BNotification::AddOnClickArg() + + \since Haiku R1 +*/ + + +/*! + \fn const char* BNotification::OnClickArgAt(int32 index) const + \brief Returns the arg that is stored at \c index. + + \see BNotification::AddOnClickArg() + \since Haiku R1 +*/ + + +/*! + \fn const BBitmap* BNotification::Icon() const + \brief Returns the icon for the notification. + + \see BNotification::SetIcon() for more information on this property. + + \return Returns a borrowed unchangeable reference to the icon. + + \since Haiku R1 +*/ + + +/*! + \fn status_t BNotification::SetIcon(const BBitmap* icon) + \brief Set the icon of the notification. + + Set the icon for the notification. By default, the application icon is + used. This method makes a copy of the \a icon. + + \param icon The icon that should be displayed with the notification. + \returns \c B_OK if everything went fine, \c B_NO_MEMORY when the \a icon + could not be copied, or another error if something else went + wrong. + + \since Haiku R1 +*/ + + +/*! + \fn status_t BNotification::Send(bigtime_t timeout = -1) + \brief Send the notification to the notification_server. + + The notification is delivered asynchronously to the notification_server, + which will display it according to its settings and filters. + + After sending, you retain ownership of the notification. The advantage is + that you can re-use the notification at a later moment, or use the object to + update the notification. See BNotification::SetMessageID() about updating + displayed notifications. If you allocate the notification on the heap, be + sure to free the memory. + + \param timeout The \a timeout in microsecond that the notification should + be displayed. If you want to use the default timing, use the default + argument or pass \c -1. + \returns \c B_OK if everything went fine, \c B_BAD_PORT_ID if there was a + problem connecting to the \c notification_server, or any other + errors if something went wrong transmitting the notification. + + \since Haiku R1 +*/ diff --git a/docs/user/app/images/notification_error_type.png b/docs/user/app/images/notification_error_type.png new file mode 100644 index 0000000000000000000000000000000000000000..11036eb0113dc66bd5b574c38cfb5ad1f58de25f GIT binary patch literal 3758 zcmb7HXFMBR)Q@V_?h_h&RE#KUwJ1uBSfzuCQ0pmLyHY}>W^FZEGd0>2rACEPBUbGg zeW(#?kD3ugL=o#vzrA1H5ATO_&pp52J>%ZE&BBIgaO z_&BWB;o;%U01}_90$3Rm!wbwx6;b8nQ*5=C1UFPY|78q?M~NFH&(n={3m|Q2#C9?` ze=ae~^3fv!i-!;W-Fm^^>t(X70=K-7jWa!ceR_d`^+WnlBuYSYjUVW~Im z*FEbV|=38H3f~1wJLukrmAW+cPG5}Ra~5W?2qT(b1n98dy5d1 ztm69a`_6r%uv#T~`2p*4dqYDeu(-H?ATW5 zhVE}p;~riTt!UiRKyHlP-9Jp7b|l;_jep$1l+Bb&~0tPJzIbt4d9AJ?Wt%WElkoBMS>IE^h9WoE%Ro7m%>2##Rw| z@zUaiE5;zuO`VDA`3B|Zy4ZG6wDUDc7C~JzcUAy{ ~&Yat7Ra`E+?gA z9q4~EdHS*0SV}5ez!!&Rfdrmw?TPDQ-F;zlT_0aH!=!P5ebg^6d1|6ZE|{P-&_!x@1|8aLz_y zSdBd7lPUJghrD0p5z5|7%Sj@(`u#21qhau`kCH@7IvEeDHigJ0u| zZCKm_QDx=-^_E!g3_?4#Zh*wZ@`@3R``R}-cIS-oZ({GvXO6sNG@GH*oM72`G$XF7 zm6QQ_z7o52Fje_j+B{=yXUQchGvo2`&%A@+6|-O({`TX6T=frW+~(C>KmSHddpBg= z9CwYwi!nW7^971?Qj4JR!8{JNQ*N=AoORm1TYFPjcf`y}E5;#fb;_XK~Tl!wV zn9bH^1a&ztdgbMtT2%4THI5--q0=6Dde=9^Y5NHYhqrtv`Yw|g$jovht>isuyzGJ+gSY6z6ue*4)5nk{70;1FRq zGG?9zfexPI9Y{7!7c!MqDCux%dJk#H3i+*T_0EyN89}K zz6j;0orZs&n~V-wZ7h-4ICscJP<3Q-UW>n1FD}h2N$)Gv{ke|P_EH!=xzf5Ek*U73 zNxLj`>Zaz^767sf__e1=jW1UJ>%~i^^@~hv;y-B~8}so_UehT_XQzRz{d1;W8=lF5 z0Ri7E&e#b5%>sdIg*+9NWJFYYX8siwP_(=IFWL^%lGg!?m9U+zMm?#GT_Jx(hP(jd zw}UZAd0Wf%^l8QtZeQjLVkL-965QY{7W&-*!WwI}O`H8$X_5Kwah19-TM9aOnys#l*rmfSLhY>}BZ)Z6sp7)U<}gDQx%WZ7ba2#f(313_E{5z0#+jorl;wdSosk(yKS9OLuks79_2_vw_}bKuw-ufROJc!)|AEUones?>(Z zqJ7-faSAnSMALIWd|txbCyF@q^tJr{C7>W{o2sBkGM%3&llHmMwcb-sC$znufdSP& zUbmE#lo}@El9IX-`LBDBjt*BbN+^npJuZp=I#Z6C&)7-(+$o{gRo5|SQ)Ov+nO}>y zZ2e&H_SvoB;bEEB7>fGOmXIT2IO=d2{ndZNs);&mTECoWOFfdF*-aG3<1+lYZ z)vou04;Eq@9AmJ)%MkM^9PuT)3tyAxxO_YdR#|02Sf4s_$54}Ujm*y2{ zL^`iwN3zq!+Vy&MQff41i?eIAKt;g-^oAD8kovv}+^`OU;< z|3xCvg<>m{<2_X?rmjA*wpYAyfOg)VZKhf8&jwYrG}DM>gx{pB`{^E~kvog=mPx+X zA{s_lwfk~&*zGGCh%&;Xv#*njTh0kM^rIDwj(EDP$v^nK4!l@cL)AlvrldZdD?@6t zjm;z|uFyE&DL-LVrtRa!J&LPb21SGvQrVDpKc2zcK#Q$gsdC3Nkotyz%~ILdI+XXj zsXmotLUYiI0$5kweJpZx_JBDJZ7JQNuM>tZ#y`U32N88^kBJEZdf(b}0?H1GB!xx5U7=dNA9<|Q=$=r@3zwNfMs3$ke^w?eZ z#crKkNECdLb}ETp7%8utEoC%|kx?Ff`wyFWU5i+)Ee9wh(lkcZmvfuEa!0IUr8k6j zygTThQROqItz{m%`u>GL&?x3svNBx4@#uGXAWEKz9 z!YLH?$|Me!C{nIZ>LQKy&8L18ET=_A3a%~+wfH%3gkaFeKa@+F12!L>u+ESss`r)x z(DL?)S^`ghe$=IXCC9++@nNK|cw{tk%DZkoeuwrJ2jLg##^X2O=kQ5_pB>Mqz@f__ zw#sst8}6y0gdzCdRaUCA&eEGF3+>Tct6XLBqz3n~-~vz}MJ7FX75%-JSX?Y!;D5D* zb>O|`XT~>i#zoh&k&C*g2G~tlZMLyw_dFQvn5!cBzd<#h1JvaXJAICl{5wZ+{a@Jo m|8tB+)HS3-I*ITzhEL?ij?qGakMtQ6U}A6&iq-o!;(q`^T3rhO literal 0 HcmV?d00001 diff --git a/docs/user/app/images/notification_group.png b/docs/user/app/images/notification_group.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2e63364182b7543ba75b52f2b1c66c7b512605 GIT binary patch literal 17422 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 literal 0 HcmV?d00001 diff --git a/docs/user/app/images/notification_information_type.png b/docs/user/app/images/notification_information_type.png new file mode 100644 index 0000000000000000000000000000000000000000..552cf6f97008188f1ea8c3b6efb944c134906f27 GIT binary patch literal 3861 zcma)9XH*l)){R_>fPz7KAaq4Q+EuEEK&TOE38959C=d(~ngmdk5~PT9#BfDw0tvl@ zUM@vMK@q#I{;L0SnA%+OG1b)skiPP*QUR^2hM@)kP#VvC>Oe=ujA%Ve9{_;)`k!(Mkdes^ z0I(4BAsVm%+s!FPG&>wjzx|9v>-{2AC_$t^ih0i102ad#&PVgFkXRT=&*U*~y_8bK znKT$JE&)!Gq+Cw1k}w9(db3x*q)3@m(4{){R3fpFr2IeB?MJ||0duIC6twU7#SH=DxBX1J|#*v^G>2LbyHnkT@NfQ(grjkm|#s!P4xL`AUiwz>}0JE zMb*N>B5HdZ-QM2b>{8C-ZvMHa$338WU=`zda#^}dXToeg`M$0-nIRSZj zqqDPx`E5+O_21hdK*+$W+_KFUMV28U_Z3j%IYeo%ogdmCLXdTS+Q!CjJw=4w#8Z26 z%iFE5DD$ykwx%1#3D7$=yA;eSo42=je-+9)hELhl&frBiKM;sy<(VHZca0}ea*lV+ z?Y}LlM%nS7O?BKd%j14i357znV6Y@og#i?rke-fPS$Q&VC7d0hZ)DUt@JZJf;k7;6 zLP1@epHWUm^Nj@dRtB`HkKRo_-S!8G71Sdkwa#eZz?RUQsE}BTn3IisH`cIa5gH%Z zU2q?0;`3HWd}il%dTLdM9(;J#2!xBG2`AMbA8fk+-=Uk^LY&=->Z7_~3&u=;fE8u; zUA!1B>dT8iNy@n2idWasgSfm)N?KqfA7ka}O7}O$zNd)@6Q(G>>!T=9VIRi;V8Sgq zs*faYssn>7GQ#p=5maN-@(6^bCC`r^KS~0Bxj4JJf{Gy!U-znQ6~7H`+vlrdufvlZ z>@U8isXyZc2W`k<&ySXseAkjnIe{ko8K;79<)@vgb|JWf%{IA{MfLgNO9LhUa6kTP zlWCxeYi}2^DEDM#IZb-S01kLyvfjcCcO%CU60$=LXaXI{(H&L)_2qAF zrGErMCab_somUVok4-e-ggnXQ>&~_8oNt&Fb;6zY&J-O6lJtUgkix=thMczEW#jp} zE}vr8xhJLJ4lR~Ew%hb+nV4_6(nxXD)Jx0plE(NdE6+y|OmZH-o;OM(a7ilZhM~sO z&m-tXFvI8QSU{qz4`Ix)=AiSF$6;ObVq1xYYM>_+vhYd2t>?#O(?ovGAh}7pnb!1O z#U#GW_-|&6;*wud5euK7Rjk>cdAF$9qz&TNJtTfg@iF#w-}z(}o1e1xPs zo%Bs<$QWq^R+(I6zQ-u-Ueb6Qm_W`ecK47d!qR+MyF7d;Pg1^)VjG@<$2{rIAyo%{ z?Kgxh5cON3EQ!}R-^0U`o_F!md;!^Vz*93JBN9VAz=0uNwfZ=)TJ$nL=uzMLw&@T; z`vs4ay-IT!Oiv%(4QTL4h9QTIgKxR?;bR+u4%f)+K;T`g0A#JVcIc2R)P^QSdS>Hk zg+T!Ps%&};ATb*14~qSnZMZL1{4I;t7JQGpbGW!I3Mf(%u;ZAMpTF)W?3T_eR-ZHe zoO)&CR(_fUTx9il{St7zhv-6JohcH{)R#t^mQQ>_n_77{(-UO=^K08)8u#P|#_{|$ zqtf2-IyaCr;_2pIm``)g@MCh)pR&)gxILBG;BXhR%Z;;ihs%Kyq+ac{x=`((Ac zMw1Ds6w{{kC1B^W-)7xwwtNGlIzlr{>;^|#e%;E0>^0z{kY!n&2$nXjh9Hryxfi!Z zX%k9IRcau%2iklynFY(Zg2f&8fDg((^aIs~nzjkra2-#6D|!7FEhz0nd}wiJqVG7pZX4 zJyTk}wK`h+l7>v%8#5+&2XQvzOOrEk&J3uME43 z?`meX4bqvcDBc4L1p8j{G3ONYu@gP#z5dFt*m`}IX?^%=!Ylfg0RqP)f%v) z8zt)^d$TifV8 z(?rA*3vMe8E)f}_OGn+^qqUCL%M?DmfHNT8vPcKXw!JCH-3<+Z(;^Aa9+ zzuyHD4e_Bw zjcEJAF0TeMhKKd2c3B!(*D4{F$;xj-Su^$Vi==K&^1|G9cgNksL+U4GT^jqVS5e2k zH$}!St}*yzP2^%Rt$eA>wGX_ow6qpD7FxFHK=9sAm2>Kt?Y^0HC*@vrbhPY~enF=~ zze-fr)_v>`+|7`~D#e4wf0_rB<{r~pXw$jSre-vxVClMaA@N{zfu{o;?%v_wPUJ3IxM;!cbD)vpeIJ z?y+L{g(@Gr^E-fKtIc(2H`tQY5hjXqd{=godZV zY#EsU?k{!H^_Z*yrl+TOWSsjhfADwg&A59E5&Tw}t{&Rx8A^@4)Mxoo{Z0p{=5RX5 zcY@q>9=-ZKe|=vk9vq9Bs9NEb--3cm_$W@(+=)Iop~ zWj#h^8|pEurVaSFv)rnFMI|wcGQwWF5?08jS-m*FW zQOH_rICDZ`qEm%Uab71iIKo6^;{^WQyRc4yP@8A@8;SFs@#_am(_HM_r(jz)W6Joh zIkF=+|Kv&0LXV{~z4?+ikI%?1OaFuxEFheA-d^K|t#U2DS>8hpb92tGcs2K;Rl9F$ zD(Kl4_p5UrvOSRR{h-QqIO)T>)cZd2_wRt3!7BBWjq)@luk6No-e+PyE!Te@zE%&GmoO8m0IWSt^ax&tUP4IBU;ZIy>wR-NEKW zew}+3b{FRvx?Wt}Uubr7O6?sfwKu;GIifJMH%SnYS!sF2;M5XErvuF$2j^F95-F^~ z-NEs?Gbjsi@lUcl>LeT9`#DIu-Ba0sU zel-?-A<6i-iZ@*QSYPLQDCG@{t}F|CX4|CM#c+#QvK7@Cx|83Z+x<8z=3l+kr3jE` zzl{BsY6F>?#pYGakB^byFl{viPiKO^7o+f;U)|22nUT<)y*1A=7|X73;`h4lGb8*x zOEp~vD!GXO6PP!zJ}wj#j$xI{iB9yP8O$Z2*!BZGHR+pj%f=dl6sbJYq2l@AvKOz! zty}stBWwp8O2fc-captMnL?$9N*6=w#wL^0qidwyOU|@GA&$ScLcR zlz?qs4^->gcf|1Mfn)*SVb%6tj>2EryBJkSF4e?Yx5eg`>?@~JH)|;VTcnu=P$I^# zVZ*O31PBvzRa*1F`gTJJfEiD745mU3QTS?2B1k`~o4FI3lI!?(*1F6Y2UbdDdNN#O zNhy}zAIm$wr%3MV(whoSl7@SEl@3@nbv_kWZgL$uVSiaBQ*cE6&=&--zqjX9+Ou2V zY`1K9MV-t!Ei603Xw%G-qGuPXWj$@4A&bK!BiFfJ*AuJpcNp8MJZf*W^A*2B7l<>H z@zY444U&QxnAeUC)*L^cY&xAosA<2K>QQ*!tr`L!s)TcJapkKsCVS>!BAqw75r&5* zStz%a#zZ6dM5TK^Lq|h(@w(UAFFxYCYkeu7Qi+#yf;D=HCg+t{ts>V*Hmu4s8b6YC z7*wJiy(-&kYWwf+9shN8@l~BE|CwNw<{WFm#|^J7Bz;#wjtp?bfMQJ!NGN`8)8LNc zQTxLx?G8c?n-cbS2{n*n?$)P{d3ggBE694 zF6*7aeWkl7I}|+&UxB0mPiE>#lAKmL%~Lz$Uv7idyffFtbcbXKng-TwQdaE<7SPT|3<{RKW#YkFWY-ummt?N^Ogh5F$1 zaf?;Ew?;FSef9ulF~~F9UB+BKqUh9op;`W#(Kxm@Q`rn5csLW<1P(ZGD?(8=t0wlE z;uY)Ho@ZuMkrm_*M5o%4B@t^zG>h9DNA@@R59sb@-B6usdbLn8##GW5)JpF=% zPQQd27+_|Bz@xLn`ZeLLkRdt*GKb9x4NQ=UGiLjLnLOJct%jqjvAp(eVPUiXM)?1S lX~74APWY%U(H9qgUA^1U`ym_6PnEI&eeFjOlBRvwe*g$Pb=Lp@ literal 0 HcmV?d00001 diff --git a/docs/user/app/images/notification_intro.png b/docs/user/app/images/notification_intro.png new file mode 100644 index 0000000000000000000000000000000000000000..b30d45d10013858760489e3e6576ff28da831bd6 GIT binary patch literal 12038 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 BqRapQ literal 0 HcmV?d00001 diff --git a/src/kits/app/Notification.cpp b/src/kits/app/Notification.cpp index d49c288a98..53a2ef890d 100644 --- a/src/kits/app/Notification.cpp +++ b/src/kits/app/Notification.cpp @@ -140,8 +140,6 @@ BNotification::~BNotification() } -/*! \brief Returns initialization status. - */ status_t BNotification::InitCheck() const { @@ -149,16 +147,6 @@ BNotification::InitCheck() const } -/*! \brief Returns a new BNotification object from @archive. - - Returns a new BNotification object, allocated by new and created - with the version of the constructor that takes BMessage archive. - However, if the message doesn't contain an archived data for a - BNotification object, this method returns NULL. - - \return BNotification object from @archive or NULL if it doesn't - contain a valid BNotification object. -*/ BArchivable* BNotification::Instantiate(BMessage* archive) { @@ -169,13 +157,6 @@ BNotification::Instantiate(BMessage* archive) } -/*! \brief Archives the BNotification in the BMessages @archive. - - \sa BArchivable::Archive(), Instantiate() static function. - \return - - \c B_OK: Everything went fine. - - \c Other errors: Archiving has failed. -*/ status_t BNotification::Archive(BMessage* archive, bool deep) const { @@ -241,10 +222,6 @@ BNotification::Archive(BMessage* archive, bool deep) const } -/*! \brief Returns source application signature. - - \return Source application signature. -*/ const char* BNotification::SourceSignature() const { @@ -252,10 +229,6 @@ BNotification::SourceSignature() const } -/*! \brief Returns source application name. - - \return Source application name. -*/ const char* BNotification::SourceName() const { @@ -263,11 +236,6 @@ BNotification::SourceName() const } -/*! \brief Notification's type. - - \return A value of the notification_type enum that represents - notification type. -*/ notification_type BNotification::Type() const { @@ -275,10 +243,6 @@ BNotification::Type() const } -/*! \brief Returns notification's group. - - \return Notification's group. -*/ const char* BNotification::Group() const { @@ -288,10 +252,6 @@ BNotification::Group() const } -/*! \brief Sets notification's group. - - Notifications can be grouped together setting the same group. -*/ void BNotification::SetGroup(const BString& group) { @@ -299,10 +259,6 @@ BNotification::SetGroup(const BString& group) } -/*! \brief Returns notification's title. - - \return Notification's title. -*/ const char* BNotification::Title() const { @@ -312,8 +268,6 @@ BNotification::Title() const } -/*! \brief Set notification's title. -*/ void BNotification::SetTitle(const BString& title) { @@ -321,10 +275,6 @@ BNotification::SetTitle(const BString& title) } -/*! \brief Returns notification's message. - - \return Notification's message. -*/ const char* BNotification::Content() const { @@ -334,8 +284,6 @@ BNotification::Content() const } -/*! \brief Sets notification's message. -*/ void BNotification::SetContent(const BString& content) { @@ -343,10 +291,6 @@ BNotification::SetContent(const BString& content) } -/*! \brief Returns notification's message identifier. - - \return Notification's message identifier. -*/ const char* BNotification::MessageID() const { @@ -356,8 +300,6 @@ BNotification::MessageID() const } -/*! \brief Sets notification's message identifier. -*/ void BNotification::SetMessageID(const BString& id) { @@ -365,16 +307,6 @@ BNotification::SetMessageID(const BString& id) } -/*! \brief Returns progress information. - - If notification's type is \c B_PROGRESS_NOTIFICATION, returns a value - between 0.0 and 1.0 that represent progress percentage. - - If notification's type is not \c B_PROGRESS_NOTIFICATION, returns -1. - - \return Percentage if notification's type is B_PROGRESS_NOTIFICATION - or otherwise -1. -*/ float BNotification::Progress() const { @@ -384,13 +316,6 @@ BNotification::Progress() const } -/*! \brief Sets progress information. - - Sets progress percentage, this information will be used only - if notification's type is \c B_PROGRESS_NOTIFICATION. - - The value of @progress must be between 0.0 and 1.0. -*/ void BNotification::SetProgress(float progress) { @@ -495,10 +420,6 @@ BNotification::OnClickArgAt(int32 index) const } -/*! \brief Notification's icon. - - \return Notification's icon. -*/ const BBitmap* BNotification::Icon() const { @@ -506,17 +427,6 @@ BNotification::Icon() const } -/*! \brief Sets notification's icon. - - Sets notification's icon. - This method does not assume ownership of @icon. - - \param icon Icon - \return - - \c B_OK: Everything went fine. - - \c B_NO_MEMORY: Allocation of @icon copy has failed. - - \c Other errors: Creation of @icon copy failed for some reason. -*/ status_t BNotification::SetIcon(const BBitmap* icon) { @@ -534,18 +444,6 @@ BNotification::SetIcon(const BBitmap* icon) } -/*! \brief Sends a notification to the notification_server. - - The notification is delivered asynchronously to the notification_server, - which will display it according to its settings and filters. - - \param timeout Microseconds after the message fades out. - \return - - \c B_OK: Everything went fine. - - \c B_BAD_PORT_ID: A connection to notification_server could not be - established or the server is not up and running anymore. - - \c Other errors: Building the message from the notification failed. -*/ status_t BNotification::Send(bigtime_t timeout) {