OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
dialogue.hpp
Go to the documentation of this file.
1 #ifndef MWGUI_DIALOGE_H
2 #define MWGUI_DIALOGE_H
3 
4 #include "windowbase.hpp"
5 #include "referenceinterface.hpp"
6 
7 #include "bookpage.hpp"
8 
9 #include "../mwdialogue/keywordsearch.hpp"
10 
11 #include <MyGUI_Delegate.h>
12 
13 namespace Gui
14 {
15  class MWList;
16 }
17 
18 namespace MWGui
19 {
20  class WindowManager;
21 }
22 
23 namespace MWGui
24 {
25  class ResponseCallback;
26 
28  {
29  public:
31 
32  virtual void onOpen();
33 
34  virtual MyGUI::Widget* getDefaultKeyFocus();
35 
36  private:
37  std::unique_ptr<ResponseCallback> mCallback;
38 
39  MyGUI::Button* mCancelButton;
40  MyGUI::Button* mAdmireButton;
41  MyGUI::Button* mIntimidateButton;
42  MyGUI::Button* mTauntButton;
43  MyGUI::Button* mBribe10Button;
44  MyGUI::Button* mBribe100Button;
45  MyGUI::Button* mBribe1000Button;
46  MyGUI::TextBox* mGoldLabel;
47 
48  void onCancel (MyGUI::Widget* sender);
49  void onPersuade (MyGUI::Widget* sender);
50  };
51 
52 
53  struct Link
54  {
55  virtual ~Link() {}
56  virtual void activated () = 0;
57  };
58 
59  struct Topic : Link
60  {
61  typedef MyGUI::delegates::CMultiDelegate1<const std::string&> EventHandle_TopicId;
63  Topic(const std::string& id) : mTopicId(id) {}
64  std::string mTopicId;
65  virtual void activated ();
66  };
67 
68  struct Choice : Link
69  {
70  typedef MyGUI::delegates::CMultiDelegate1<int> EventHandle_ChoiceId;
72  Choice(int id) : mChoiceId(id) {}
73  int mChoiceId;
74  virtual void activated ();
75  };
76 
77  struct Goodbye : Link
78  {
79  typedef MyGUI::delegates::CMultiDelegate0 Event_Activated;
81  virtual void activated ();
82  };
83 
85 
86  struct DialogueText
87  {
88  virtual ~DialogueText() {}
89  virtual void write (BookTypesetter::Ptr typesetter, KeywordSearchT* keywordSearch, std::map<std::string, Link*>& topicLinks) const = 0;
90  std::string mText;
91  };
92 
94  {
95  Response(const std::string& text, const std::string& title = "", bool needMargin = true);
96  virtual void write (BookTypesetter::Ptr typesetter, KeywordSearchT* keywordSearch, std::map<std::string, Link*>& topicLinks) const;
97  void addTopicLink (BookTypesetter::Ptr typesetter, intptr_t topicId, size_t begin, size_t end) const;
98  std::string mTitle;
100  };
101 
103  {
104  Message(const std::string& text);
105  virtual void write (BookTypesetter::Ptr typesetter, KeywordSearchT* keywordSearch, std::map<std::string, Link*>& topicLinks) const;
106  };
107 
109  {
110  public:
111  DialogueWindow();
112  ~DialogueWindow();
113 
114  void onTradeComplete();
115 
116  virtual bool exit();
117 
118  // Events
119  typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
120 
122 
123  void setPtr(const MWWorld::Ptr& actor);
124 
125  void setKeywords(std::list<std::string> keyWord);
126 
127  void addResponse (const std::string& title, const std::string& text, bool needMargin = true);
128 
129  void addMessageBox(const std::string& text);
130 
131  void onFrame(float dt);
132  void clear() { resetReference(); }
133 
134  void updateTopics();
135 
136  protected:
137  void updateTopicsPane();
138  bool isCompanion(const MWWorld::Ptr& actor);
139  bool isCompanion();
140 
141  void onSelectListItem(const std::string& topic, int id);
142  void onByeClicked(MyGUI::Widget* _sender);
143  void onMouseWheel(MyGUI::Widget* _sender, int _rel);
144  void onWindowResize(MyGUI::Window* _sender);
145  void onTopicActivated(const std::string& topicId);
146  void onChoiceActivated(int id);
147  void onGoodbyeActivated();
148 
149  void onScrollbarMoved (MyGUI::ScrollBar* sender, size_t pos);
150 
151  void updateHistory(bool scrollbar=false);
152 
153  virtual void onReferenceUnavailable();
154 
155  private:
156  void updateDisposition();
157  void restock();
158  void deleteLater();
159 
161  std::list<std::string> mKeywords;
162 
163  std::vector<DialogueText*> mHistoryContents;
164  std::vector<std::pair<std::string, int> > mChoices;
165  bool mGoodbye;
166 
167  std::vector<Link*> mLinks;
168  std::map<std::string, Link*> mTopicLinks;
169 
170  std::vector<Link*> mDeleteLater;
171 
173 
176  MyGUI::ScrollBar* mScrollBar;
177  MyGUI::ProgressBar* mDispositionBar;
178  MyGUI::TextBox* mDispositionText;
179  MyGUI::Button* mGoodbyeButton;
180 
182 
183  MyGUI::IntSize mCurrentWindowSize;
184 
185  std::unique_ptr<ResponseCallback> mCallback;
186  std::unique_ptr<ResponseCallback> mGreetingCallback;
187  };
188 }
189 #endif
PersuasionDialog(ResponseCallback *callback)
Definition: dialogue.cpp:59
void onCancel(MyGUI::Widget *sender)
Definition: dialogue.cpp:81
void onByeClicked(MyGUI::Widget *_sender)
Definition: dialogue.cpp:355
void addResponse(const std::string &title, const std::string &text, bool needMargin=true)
Definition: dialogue.cpp:670
bool mIsCompanion
Definition: dialogue.hpp:160
virtual MyGUI::Widget * getDefaultKeyFocus()
Definition: dialogue.cpp:120
Event_Activated eventActivated
Definition: dialogue.hpp:80
virtual void onReferenceUnavailable()
called when reference has become unavailable
Definition: dialogue.cpp:712
bool isCompanion()
Definition: dialogue.cpp:736
MyGUI::Button * mGoodbyeButton
Definition: dialogue.hpp:179
int mChoiceId
Definition: dialogue.hpp:73
MyGUI::TextBox * mDispositionText
Definition: dialogue.hpp:178
void setKeywords(std::list< std::string > keyWord)
Definition: dialogue.cpp:479
std::map< std::string, Link * > mTopicLinks
Definition: dialogue.hpp:168
void onMouseWheel(MyGUI::Widget *_sender, int _rel)
Definition: dialogue.cpp:346
KeywordSearchT mKeywordSearch
Definition: dialogue.hpp:172
a very simple list widget that supports word-wrapping entries
Definition: list.hpp:12
void deleteLater()
Definition: dialogue.cpp:472
MyGUI::Button * mCancelButton
Definition: dialogue.hpp:39
void updateHistory(bool scrollbar=false)
Definition: dialogue.cpp:551
Definition: dialogue.hpp:27
std::string mTitle
Definition: dialogue.hpp:98
MyGUI::TextBox * mGoldLabel
Definition: dialogue.hpp:46
MyGUI::delegates::CMultiDelegate0 Event_Activated
Definition: dialogue.hpp:79
BookPage * mHistory
Definition: dialogue.hpp:174
MyGUI::delegates::CMultiDelegate1< int > EventHandle_ChoiceId
Definition: dialogue.hpp:70
void notifyLinkClicked(TypesetBook::InteractiveId link)
Definition: dialogue.cpp:633
bool mGoodbye
Definition: dialogue.hpp:165
DialogueWindow()
Definition: dialogue.cpp:269
Definition: dialogue.hpp:77
EventHandle_TopicId eventTopicActivated
Definition: dialogue.hpp:62
void onTradeComplete()
Definition: dialogue.cpp:316
std::shared_ptr< BookTypesetter > Ptr
Definition: bookpage.hpp:80
void onWindowResize(MyGUI::Window *_sender)
Definition: dialogue.cpp:336
std::vector< Link * > mLinks
Definition: dialogue.hpp:167
MyGUI::Button * mBribe1000Button
Definition: dialogue.hpp:45
void updateDisposition()
Definition: dialogue.cpp:683
Definition: dialogue.hpp:108
MyGUI::Button * mIntimidateButton
Definition: dialogue.hpp:41
void addTopicLink(BookTypesetter::Ptr typesetter, intptr_t topicId, size_t begin, size_t end) const
Definition: dialogue.cpp:222
Topic(const std::string &id)
Definition: dialogue.hpp:63
MyGUI::Button * mTauntButton
Definition: dialogue.hpp:42
Definition: dialogue.hpp:86
Definition: dialogue.cpp:34
Gui::MWList * mTopicsList
Definition: dialogue.hpp:175
Response(const std::string &text, const std::string &title="", bool needMargin=true)
Definition: dialogue.cpp:127
virtual void activated()
Definition: dialogue.cpp:249
virtual void activated()
Definition: dialogue.cpp:261
std::vector< std::pair< std::string, int > > mChoices
Definition: dialogue.hpp:164
std::string mTopicId
Definition: dialogue.hpp:64
void updateTopics()
Definition: dialogue.cpp:731
std::unique_ptr< ResponseCallback > mCallback
Definition: dialogue.hpp:185
virtual void onOpen()
Notify that window has been made visible.
Definition: dialogue.cpp:105
MyGUI::IntSize mCurrentWindowSize
Definition: dialogue.hpp:183
void onGoodbyeActivated()
Definition: dialogue.cpp:658
Definition: dialogue.hpp:68
EventHandle_ChoiceId eventChoiceActivated
Definition: dialogue.hpp:71
virtual void write(BookTypesetter::Ptr typesetter, KeywordSearchT *keywordSearch, std::map< std::string, Link * > &topicLinks) const
Definition: dialogue.cpp:239
MyGUI::delegates::CMultiDelegate1< const std::string & > EventHandle_TopicId
Definition: dialogue.hpp:61
std::list< std::string > mKeywords
Definition: dialogue.hpp:161
virtual ~DialogueText()
Definition: dialogue.hpp:88
bool mNeedMargin
Definition: dialogue.hpp:99
void addMessageBox(const std::string &text)
Definition: dialogue.cpp:677
MyGUI::delegates::CMultiDelegate0 EventHandle_Void
Definition: dialogue.hpp:119
Definition: dialogue.hpp:93
MWDialogue::KeywordSearch< std::string, intptr_t > KeywordSearchT
Definition: dialogue.hpp:84
MyGUI::Button * mBribe10Button
Definition: dialogue.hpp:43
std::unique_ptr< ResponseCallback > mGreetingCallback
Definition: dialogue.hpp:186
Choice(int id)
Definition: dialogue.hpp:72
void onPersuade(MyGUI::Widget *sender)
Definition: dialogue.cpp:86
Message(const std::string &text)
Definition: dialogue.cpp:234
virtual void activated()
Definition: dialogue.cpp:255
void onScrollbarMoved(MyGUI::ScrollBar *sender, size_t pos)
Definition: dialogue.cpp:665
Definition: windowbase.hpp:21
~DialogueWindow()
Definition: dialogue.cpp:305
MyGUI::ScrollBar * mScrollBar
Definition: dialogue.hpp:176
An interface to the BookPage widget.
Definition: bookpage.hpp:147
void restock()
Definition: dialogue.cpp:458
std::vector< DialogueText * > mHistoryContents
Definition: dialogue.hpp:163
void onFrame(float dt)
Called every frame if the window is in an active GUI mode.
Definition: dialogue.cpp:717
void onChoiceActivated(int id)
Definition: dialogue.cpp:647
std::unique_ptr< ResponseCallback > mCallback
Definition: dialogue.hpp:37
this class is intended for GUI interfaces that access an MW-Reference for example dialogue window acc...
Definition: referenceinterface.hpp:12
Definition: dialogue.hpp:59
PersuasionDialog mPersuasionDialog
Definition: dialogue.hpp:181
std::vector< Link * > mDeleteLater
Definition: dialogue.hpp:170
MyGUI::Button * mBribe100Button
Definition: dialogue.hpp:44
std::string mText
Definition: dialogue.hpp:90
void onTopicActivated(const std::string &topicId)
Definition: dialogue.cpp:638
virtual bool exit()
Gracefully exits the window.
Definition: dialogue.cpp:321
virtual void write(BookTypesetter::Ptr typesetter, KeywordSearchT *keywordSearch, std::map< std::string, Link * > &topicLinks) const =0
MyGUI::Button * mAdmireButton
Definition: dialogue.hpp:40
void setPtr(const MWWorld::Ptr &actor)
Open this object in the GUI, for windows that support it.
Definition: dialogue.cpp:411
Pointer to a LiveCellRef.
Definition: ptr.hpp:19
void updateTopicsPane()
Definition: dialogue.cpp:489
void clear()
Clear any state specific to the running game.
Definition: dialogue.hpp:132
void onSelectListItem(const std::string &topic, int id)
Definition: dialogue.cpp:361
virtual void write(BookTypesetter::Ptr typesetter, KeywordSearchT *keywordSearch, std::map< std::string, Link * > &topicLinks) const
Definition: dialogue.cpp:133
Definition: dialogue.hpp:102
virtual void resetReference()
Definition: referenceinterface.hpp:20
MyGUI::ProgressBar * mDispositionBar
Definition: dialogue.hpp:177
Definition: windowbase.hpp:61