summaryrefslogtreecommitdiffstats
path: root/src/message-context.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/message-context.h')
-rw-r--r--src/message-context.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/message-context.h b/src/message-context.h
new file mode 100644
index 0000000..cfe155a
--- /dev/null
+++ b/src/message-context.h
@@ -0,0 +1,121 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/** \file
+ * Interface for locally managing a current status message
+ */
+
+/*
+ * Authors:
+ * MenTaLguY <mental@rydia.net>
+ *
+ * Copyright (C) 2004 MenTaLguY
+ *
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+#ifndef SEEN_INKSCAPE_MESSAGE_CONTEXT_H
+#define SEEN_INKSCAPE_MESSAGE_CONTEXT_H
+
+#include <cstdarg>
+#include <memory>
+#include <glib.h>
+
+#include "message.h"
+
+namespace Inkscape {
+
+class MessageStack;
+
+/** A convenience class for working with MessageStacks.
+ *
+ * In general, a particular piece of code will only want to display
+ * one status message at a time. This class takes care of tracking
+ * a "current" message id in a particular stack for us, and provides
+ * a convenient means to remove or replace it.
+ *
+ * @see Inkscape::MessageStack
+ */
+class MessageContext {
+public:
+ /** Constructs an Inkscape::MessageContext referencing a particular
+ * Inkscape::MessageStack, which will be used for our messages
+ *
+ * MessageContexts retain references to the MessageStacks they use.
+ *
+ * @param stack the Inkscape::MessageStack to use for our messages
+ */
+ MessageContext(std::shared_ptr<MessageStack> stack);
+ ~MessageContext();
+
+ /** @brief pushes a message on the stack, replacing our old message
+ *
+ * @param type the message type
+ * @param message the message text
+ */
+ void set(MessageType type, char const *message);
+
+ /** @brief pushes a message on the stack using prinf-style formatting,
+ * and replacing our old message
+ *
+ * @param type the message type
+ * @param format a printf-style formatting string
+ */
+ void setF(MessageType type, char const *format, ...) G_GNUC_PRINTF(3,4);
+
+ /** @brief pushes a message on the stack using printf-style formatting,
+ * and a stdarg argument list
+ *
+ * @param type the message type
+ * @param format a printf-style formatting string
+ * @param args printf-style arguments
+ */
+ void setVF(MessageType type, char const *format, va_list args);
+
+ /** @brief pushes a message onto the stack for a brief period of time
+ * without disturbing our "current" message
+ *
+ * @param type the message type
+ * @param message the message text
+ */
+ void flash(MessageType type, char const *message);
+
+ /** @brief pushes a message onto the stack for a brief period of time
+ * using printf-style formatting, without disturbing our current
+ * message
+ *
+ * @param type the message type
+ * @param format a printf-style formatting string
+ */
+ void flashF(MessageType type, char const *format, ...) G_GNUC_PRINTF(3,4);
+
+ /** @brief pushes a message onto the stack for a brief period of time
+ * using printf-style formatting and a stdarg argument list;
+ * it does not disturb our "current" message
+ *
+ * @param type the message type
+ * @param format a printf-style formatting string
+ * @param args printf-style arguments
+ */
+ void flashVF(MessageType type, char const *format, va_list args);
+
+ /** @brief removes our current message from the stack */
+ void clear();
+
+private:
+ std::shared_ptr<MessageStack> _stack; ///< the message stack to use
+ MessageId _message_id; ///< our current message id, or 0
+ MessageId _flash_message_id; ///< current flashed message id, or 0
+};
+
+}
+
+#endif
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :