summaryrefslogtreecommitdiff
path: root/vcl/inc/jsdialog/jsdialogbuilder.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/inc/jsdialog/jsdialogbuilder.hxx')
-rw-r--r--vcl/inc/jsdialog/jsdialogbuilder.hxx61
1 files changed, 58 insertions, 3 deletions
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index c228967eb0f5..13e9db2a178e 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -28,6 +28,7 @@
#include <boost/property_tree/ptree_fwd.hpp>
#include <deque>
+#include <unordered_map>
class ToolBox;
class SfxViewShell;
@@ -35,6 +36,7 @@ class VclMultiLineEdit;
class IconView;
typedef std::map<OString, weld::Widget*> WidgetMap;
+typedef std::unordered_map<std::string, OUString> ActionDataMap;
namespace jsdialog
{
@@ -42,10 +44,51 @@ enum MessageType
{
FullUpdate,
WidgetUpdate,
- Close
+ Close,
+ Action
};
}
+class JSDialogMessageInfo
+{
+public:
+ jsdialog::MessageType m_eType;
+ VclPtr<vcl::Window> m_pWindow;
+ std::unique_ptr<ActionDataMap> m_pData;
+
+private:
+ void copy(const JSDialogMessageInfo& rInfo)
+ {
+ this->m_eType = rInfo.m_eType;
+ this->m_pWindow = rInfo.m_pWindow;
+ if (rInfo.m_pData)
+ {
+ std::unique_ptr<ActionDataMap> pData(new ActionDataMap(*rInfo.m_pData));
+ this->m_pData = std::move(pData);
+ }
+ }
+
+public:
+ JSDialogMessageInfo(jsdialog::MessageType eType, VclPtr<vcl::Window> pWindow,
+ std::unique_ptr<ActionDataMap> pData)
+ : m_eType(eType)
+ , m_pWindow(pWindow)
+ , m_pData(std::move(pData))
+ {
+ }
+
+ JSDialogMessageInfo(const JSDialogMessageInfo& rInfo) { copy(rInfo); }
+
+ JSDialogMessageInfo& operator=(JSDialogMessageInfo aInfo)
+ {
+ if (this == &aInfo)
+ return *this;
+
+ copy(aInfo);
+ return *this;
+ }
+};
+
class JSDialogNotifyIdle : public Idle
{
// used to send message
@@ -56,7 +99,7 @@ class JSDialogNotifyIdle : public Idle
std::string m_LastNotificationMessage;
bool m_bForce;
- std::deque<std::pair<jsdialog::MessageType, VclPtr<vcl::Window>>> m_aMessageQueue;
+ std::deque<JSDialogMessageInfo> m_aMessageQueue;
public:
JSDialogNotifyIdle(VclPtr<vcl::Window> aNotifierWindow, VclPtr<vcl::Window> aContentWindow,
@@ -66,13 +109,16 @@ public:
void clearQueue();
void forceUpdate();
- void sendMessage(jsdialog::MessageType eType, VclPtr<vcl::Window> pWindow);
+ void sendMessage(jsdialog::MessageType eType, VclPtr<vcl::Window> pWindow,
+ std::unique_ptr<ActionDataMap> pData = nullptr);
private:
void send(const boost::property_tree::ptree& rTree);
boost::property_tree::ptree generateFullUpdate() const;
boost::property_tree::ptree generateWidgetUpdate(VclPtr<vcl::Window> pWindow) const;
boost::property_tree::ptree generateCloseMessage() const;
+ boost::property_tree::ptree generateActionMessage(VclPtr<vcl::Window> pWindow,
+ std::unique_ptr<ActionDataMap> pData) const;
};
class VCL_DLLPUBLIC JSDialogSender
@@ -92,6 +138,7 @@ public:
virtual void sendFullUpdate(bool bForce = false);
void sendClose();
virtual void sendUpdate(VclPtr<vcl::Window> pWindow, bool bForce = false);
+ virtual void sendAction(VclPtr<vcl::Window> pWindow, std::unique_ptr<ActionDataMap> pData);
void flush() { mpIdleNotify->Invoke(); }
protected:
@@ -234,6 +281,8 @@ public:
virtual void sendUpdate(bool bForce = false) = 0;
virtual void sendFullUpdate(bool bForce = false) = 0;
+
+ virtual void sendAction(std::unique_ptr<ActionDataMap> pData) = 0;
};
template <class BaseInstanceClass, class VclClass>
@@ -323,6 +372,12 @@ public:
if ((!m_bIsFreezed || bForce) && m_pSender)
m_pSender->sendFullUpdate(bForce);
}
+
+ virtual void sendAction(std::unique_ptr<ActionDataMap> pData) override
+ {
+ if (!m_bIsFreezed && m_pSender && pData)
+ m_pSender->sendAction(BaseInstanceClass::m_xWidget, std::move(pData));
+ }
};
class VCL_DLLPUBLIC JSDialog : public JSWidget<SalInstanceDialog, ::Dialog>