Index: installer/src/installer-lib/interaction.h |
=================================================================== |
--- a/installer/src/installer-lib/interaction.h |
+++ b/installer/src/installer-lib/interaction.h |
@@ -1,8 +1,104 @@ |
/** |
- * \file interaction.h User interaction classes. Message boxes and translations. |
- */ |
+* \file interaction.h User interaction classes. Message boxes and translations. |
+*/ |
#ifndef INTERACTION_H |
#define INTERACTION_H |
+#include <string> |
+ |
+#include "session.h" |
+ |
+#include <Windows.h> |
+#include <Msi.h> |
+#include <MsiQuery.h> |
+ |
+/** |
+* A modal dialog box as displayable from within a custom action. |
+* |
+* The only fully user interface element that the Windows Installer supports for use within custom actions is a small set of modal dialog boxes. |
+* The Windows Installer provides the call MsiProcessMessage, overloaded by a set of message type constants. |
+* This class represents those messages with user-provided messages; these ultimately call MessageBox. |
+* |
+* \sa |
+* * MSDN [MsiProcessMessage function](http://msdn.microsoft.com/en-us/library/windows/desktop/aa370354%28v=vs.85%29.aspx) |
+* * MSDN [Sending Messages to Windows Installer Using MsiProcessMessage](http://msdn.microsoft.com/en-us/library/windows/desktop/aa371614%28v=vs.85%29.aspx) |
+*/ |
+class Installer_Message_Box |
+ : public Message |
+{ |
+public: |
+ typedef enum |
+ { |
+ default_box = 0, |
+ error_box = INSTALLMESSAGE::INSTALLMESSAGE_ERROR, |
+ warning_box = INSTALLMESSAGE::INSTALLMESSAGE_WARNING, |
+ user_box = INSTALLMESSAGE::INSTALLMESSAGE_USER |
+ } |
+ box_type ; |
+ |
+ typedef enum |
+ { |
+ default_buttonset = 0, |
+ ok = MB_OK, |
+ ok_cancel = MB_OKCANCEL, |
+ abort_retry_ignore = MB_ABORTRETRYIGNORE, |
+ yes_no_cancel = MB_YESNOCANCEL, |
+ yes_no = MB_YESNO, |
+ retry_cancel = MB_RETRYCANCEL |
+ } |
+ buttonset_type ; |
+ |
+ typedef enum |
+ { |
+ default_default_button = 0, ///< use the default button |
+ default_button_one = MB_DEFBUTTON1, |
+ default_button_two = MB_DEFBUTTON2, |
+ default_button_three = MB_DEFBUTTON3 |
+ } |
+ default_button_type ; |
+ |
+ typedef enum |
+ { |
+ default_icon = 0, ///< use the default icon associated with the box_type |
+ warning_icon = MB_ICONWARNING, ///< exclamation point |
+ information_icon = MB_ICONINFORMATION, ///< lowercase letter "i" in a circle |
+ error_icon = MB_ICONERROR ///< stop sign |
+ } |
+ icon_type ; |
+ |
+ /** |
+ * Ordinary constructor, wide string |
+ */ |
+ Installer_Message_Box( |
+ std::wstring message, |
+ box_type box = box_type::user_box, |
+ buttonset_type buttonset = buttonset_type::default_buttonset, |
+ default_button_type default_button = default_button_type::default_default_button, |
+ icon_type icon = icon_type::default_icon |
+ ) ; |
+ |
+ /** |
+ * Ordinary constructor, regular string |
+ */ |
+ Installer_Message_Box( |
+ std::string message, |
+ box_type box = box_type::user_box, |
+ buttonset_type buttonset = buttonset_type::default_buttonset, |
+ default_button_type default_button = default_button_type::default_default_button, |
+ icon_type icon = icon_type::default_icon |
+ ) ; |
+} ; |
+ |
+/** |
+* Error for any non-handled return value from Session.write_message(). |
+*/ |
+struct unexpected_return_value_from_message_box |
+ : std::logic_error |
+{ |
+ unexpected_return_value_from_message_box() |
+ : std::logic_error( "Unexpected return value from message box." ) |
+ {} |
+} ; |
+ |
#endif |