ManaPlus
Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes

#include <npcdialog.h>

Inheritance diagram for NpcDialog:
Window ActionListener ExtendedListModel ConfigListener BasicContainer2 MouseListener WidgetListener ListModel BasicContainer Widget WidgetDeathListener Widget2

Public Member Functions

 NpcDialog (const BeingId npcId)
 
 ~NpcDialog ()
 
void postInit ()
 
void action (const ActionEvent &event)
 
void addText (const std::string &string, const bool save)
 
void showNextButton ()
 
void showCloseButton ()
 
void nextDialog ()
 
void closeDialog ()
 
int getNumberOfElements ()
 
std::string getElementAt (int i)
 
const ImagegetImageAt (int i)
 
void choiceRequest ()
 
void addChoice (const std::string &)
 
void parseListItems (const std::string &itemString)
 
void textRequest (const std::string &defaultText)
 
bool isInputFocused () const
 
bool isTextInputFocused () const
 
void integerRequest (const int defaultValue, const int min, const int max)
 
void itemRequest (const int size)
 
void itemIndexRequest (const int size)
 
void itemCraftRequest (const int size)
 
void move (const int amount)
 
void setVisible (Visible visible)
 
void optionChanged (const std::string &name)
 
void saveCamera ()
 
void restoreCamera ()
 
void refocus ()
 
void showAvatar (const BeingTypeId avatarId)
 
void setAvatarDirection (const uint8_t direction)
 
void setAvatarAction (const int actionId)
 
void logic ()
 
void clearRows ()
 
void mousePressed (MouseEvent &event)
 
int isCloseState () const
 
void setSkin (const std::string &skin)
 
void addCraftItem (Item *const item, const int amount, const int slot)
 
NpcInputStateT getInputState ()
 
void copyToClipboard (const int x, const int y) const
 
- Public Member Functions inherited from Window
 Window (const std::string &caption, const Modal modal, Window *const parent, std::string skin)
 
 ~Window ()
 
void draw (Graphics *const graphics)
 
void safeDraw (Graphics *const graphics)
 
void setContentSize (int width, int height)
 
void setLocationRelativeTo (const Widget *const widget)
 
void setLocationHorisontallyRelativeTo (const Widget *const widget)
 
void setLocationRelativeTo (const ImagePosition::Type &position, int offsetX, int offsetY)
 
void setResizable (const bool resize)
 
void redraw ()
 
void widgetResized (const Event &event)
 
void widgetMoved (const Event &event)
 
void widgetHidden (const Event &event)
 
void setCloseButton (const bool flag)
 
bool getCloseButton () const
 
void setAllowClose (const bool b)
 
bool getAlowClose () const
 
bool isResizable () const
 
void setMinWidth (const int width)
 
int getMinWidth () const
 
void setMinHeight (const int height)
 
int getMinHeight () const
 
void setMaxWidth (const int width)
 
int getMaxWidth () const
 
void setMaxHeight (const int height)
 
int getMaxHeight () const
 
void setShowTitle (bool flag)
 
void setStickyButton (const bool flag)
 
void setSticky (const bool sticky)
 
bool isSticky () const
 
void setStickyButtonLock (const bool sticky)
 
bool isStickyButtonLock () const
 
void setVisible (const Visible visible, const bool forceSticky)
 
bool isDefaultVisible () const
 
void setDefaultVisible (const bool save)
 
bool willSaveVisible () const
 
void setSaveVisible (const bool save)
 
WindowgetParentWindow () const
 
virtual void scheduleDelete ()
 
void mouseDragged (MouseEvent &event)
 
void mouseMoved (MouseEvent &event)
 
void mouseReleased (MouseEvent &event)
 
void mouseExited (MouseEvent &event)
 
void mouseEntered (MouseEvent &event)
 
void updateResizeHandler (MouseEvent &event)
 
void setWindowName (const std::string &name)
 
const std::string & getWindowName () const
 
void loadWindowState ()
 
void saveWindowState ()
 
void setDefaultSize (const int defaultX, const int defaultY, int defaultWidth, int defaultHeight)
 
void setDefaultSize ()
 
void setDefaultSize (const int defaultWidth, const int defaultHeight, const ImagePosition::Type &position, const int offsetx, const int offsetY)
 
virtual void resetToDefaultSize ()
 
void adjustPositionAfterResize (const int oldScreenWidth, const int oldScreenHeight)
 
LayoutgetLayout ()
 
void clearLayout ()
 
void reflowLayout (int w, int h)
 
LayoutCellplace (const int x, const int y, Widget *const wg, const int w, const int h)
 
ContainerPlacer getPlacer (const int x, const int y)
 
void center ()
 
void centerHorisontally ()
 
virtual void close ()
 
void setModal (const Modal modal)
 
Rect getWindowArea () const
 
bool isResizeAllowed (const MouseEvent &event) const
 
void setCaptionFont (Font *font)
 
void enableVisibleSound (bool b)
 
bool isWindowVisible () const
 
void setPadding (int padding)
 
int getPadding () const
 
void setTitleBarHeight (unsigned int height)
 
unsigned int getTitleBarHeight () const
 
void setCaption (const std::string &caption)
 
const std::string & getCaption () const
 
void setAlignment (Graphics::Alignment alignment)
 
Graphics::Alignment getAlignment () const
 
void setMovable (Move movable)
 
bool isMovable () const
 
Rect getChildrenArea ()
 
virtual void resizeToContent ()
 
- Public Member Functions inherited from BasicContainer2
 BasicContainer2 (const Widget2 *const widget)
 
 ~BasicContainer2 ()
 
void setOpaque (Opaque opaque)
 
bool isOpaque () const
 
virtual void add (Widget *const widget)
 
void addXY (Widget *const widget, const int x, const int y)
 
- Public Member Functions inherited from BasicContainer
 BasicContainer (const Widget2 *const widget)
 
 ~BasicContainer ()
 
void showWidgetPart (Widget *const widget, const Rect &area)
 
void moveToTop (Widget *const widget)
 
void moveToBottom (Widget *const widget)
 
void focusNext ()
 
void focusPrevious ()
 
void setFocusHandler (FocusHandler *const focusHandler)
 
void setInternalFocusHandler (FocusHandler *const focusHandler)
 
WidgetgetWidgetAt (int x, int y)
 
void death (const Event &event)
 
WidgetfindFirstWidget (const std::set< Widget * > &list)
 
void add (Widget *const widget)
 
virtual void remove (Widget *const widget)
 
virtual void clear ()
 
- Public Member Functions inherited from Widget
 Widget (const Widget2 *const widget)
 
 ~Widget ()
 
virtual void drawFrame (Graphics *graphics)
 
virtual void safeDrawFrame (Graphics *graphics)
 
void setFrameSize (const unsigned int frameSize)
 
unsigned int getFrameSize () const
 
WidgetgetParent () const
 
void setWidth (const int width)
 
int getWidth () const
 
void setHeight (const int height)
 
int getHeight () const
 
void setSize (const int width, const int height)
 
void setX (const int x)
 
int getX () const
 
void setY (const int y)
 
int getY () const
 
void setPosition (const int x, const int y)
 
void setDimension (const Rect &dimension)
 
const RectgetDimension () const
 
void setFocusable (const bool focusable)
 
bool isFocusable () const
 
virtual bool isFocused () const
 
void setEnabled (const bool enabled)
 
bool isEnabled () const
 
void setVisible (Visible visible)
 
bool isVisible () const
 
void setBaseColor (const Color &color)
 
const ColorgetBaseColor () const
 
void setForegroundColor (const Color &color)
 
const ColorgetForegroundColor () const
 
void setBackgroundColor (const Color &color)
 
const ColorgetBackgroundColor () const
 
virtual void requestFocus ()
 
virtual void requestMoveToTop ()
 
virtual void requestMoveToBottom ()
 
FocusHandlergetFocusHandler ()
 
void addActionListener (ActionListener *const actionListener)
 
void removeActionListener (ActionListener *const actionListener)
 
void addDeathListener (WidgetDeathListener *const deathListener)
 
void removeDeathListener (WidgetDeathListener *const deathListener)
 
void addMouseListener (MouseListener *const mouseListener)
 
void removeMouseListener (MouseListener *const mouseListener)
 
void addKeyListener (KeyListener *const keyListener)
 
void removeKeyListener (KeyListener *const keyListener)
 
void addFocusListener (FocusListener *const focusListener)
 
void removeFocusListener (FocusListener *const focusListener)
 
void addWidgetListener (WidgetListener *const widgetListener)
 
void removeWidgetListener (WidgetListener *const widgetListener)
 
void setActionEventId (const std::string &actionEventId)
 
const std::string & getActionEventId () const
 
virtual void getAbsolutePosition (int &x, int &y) const
 
virtual void setParent (Widget *parent)
 
FontgetFont () const
 
void setFont (Font *const font)
 
virtual void fontChanged ()
 
bool isTabInEnabled () const
 
void setTabInEnabled (const bool enabled)
 
bool isTabOutEnabled () const
 
void setTabOutEnabled (const bool enabled)
 
void requestModalFocus ()
 
virtual void requestModalMouseInputFocus ()
 
virtual void releaseModalFocus ()
 
virtual void releaseModalMouseInputFocus ()
 
virtual bool isModalFocused () const
 
virtual bool isModalMouseInputFocused () const
 
const std::list< MouseListener * > & getMouseListeners () const A_CONST
 
const std::list< KeyListener * > & getKeyListeners () const A_CONST
 
const std::list< FocusListener * > & getFocusListeners () const A_CONST
 
virtual FocusHandlergetInternalFocusHandler ()
 
void setInternalFocusHandler (FocusHandler *const internalFocusHandler)
 
void setId (const std::string &id)
 
const std::string & getId () const
 
virtual void showPart (const Rect &rectangle)
 
bool isAllowLogic () const
 
void setMouseConsume (const bool b)
 
bool isMouseConsume () const
 
void setRedraw (const bool b)
 
virtual bool isSelectable () const
 
void setSelectable (const bool selectable)
 
void windowResized ()
 
- Public Member Functions inherited from Widget2
virtual ~Widget2 ()
 
const ColorgetThemeColor (const ThemeColorIdT type, const unsigned int alpha) const A_INLINE
 
const ColorgetThemeCharColor (const signed char c, bool &valid) const A_INLINE
 
virtual void setWidget2 (const Widget2 *const widget)
 
void setPalette (int palette)
 
void checkPalette ()
 
void setForegroundColor2 (const Color &color)
 
WidgetgetWindow () const
 
virtual void setWindow (Widget *const window)
 
- Public Member Functions inherited from WidgetDeathListener
virtual ~WidgetDeathListener ()
 
- Public Member Functions inherited from MouseListener
virtual ~MouseListener ()
 
virtual void mouseClicked (MouseEvent &event)
 
virtual void mouseWheelMovedUp (MouseEvent &event)
 
virtual void mouseWheelMovedDown (MouseEvent &event)
 
- Public Member Functions inherited from WidgetListener
virtual ~WidgetListener ()
 
virtual void widgetShown (const Event &event)
 
- Public Member Functions inherited from ActionListener
virtual ~ActionListener ()
 
- Public Member Functions inherited from ExtendedListModel
 ExtendedListModel ()
 
- Public Member Functions inherited from ListModel
 ListModel ()
 
virtual ~ListModel ()
 
- Public Member Functions inherited from ConfigListener
 ConfigListener ()
 
virtual ~ConfigListener ()
 

Static Public Member Functions

static bool isAnyInputFocused ()
 
static bool isActive ()
 
static NpcDialoggetActive ()
 
static void closeAll ()
 
static void destroyAll ()
 
static void clearDialogs ()
 
- Static Public Member Functions inherited from Window
static void setWindowContainer (WindowContainer *const windowContainer)
 
- Static Public Member Functions inherited from Widget
static void setGlobalFont (Font *const font)
 
static FontgetGloablFont ()
 
static void cleanGlobalFont ()
 
static bool widgetExists (const Widget *const widget)
 
static void distributeWindowResizeEvent ()
 
static WidgetcallPostInit (Widget *const widget)
 

Static Public Attributes

static NpcDialogs mNpcDialogs
 

Private Types

typedef std::list< NpcDialog * > DialogList
 

Private Member Functions

void buildLayout ()
 
void placeNormalControls ()
 
void placeMenuControls ()
 
void placeSkinControls ()
 
void placeTextInputControls ()
 
void placeIntInputControls ()
 
void placeItemInputControls ()
 
void createSkinControls ()
 
void deleteSkinControls ()
 

Static Private Member Functions

static void restoreVirtuals ()
 
static std::string complexItemToStr (const ComplexItem *const item)
 

Private Attributes

BeingId mNpcId
 
int mDefaultInt
 
std::string mDefaultString
 
BrowserBoxmTextBox
 
ScrollAreamScrollArea
 
std::string mText
 
std::string mNewText
 
StringVect mItems
 
std::vector< Image * > mImages
 
ExtendedListBoxmItemList
 
ScrollAreamListScrollArea
 
ContainermSkinContainer
 
ScrollAreamSkinScrollArea
 
ItemLinkHandlermItemLinkHandler
 
TextFieldmTextField
 
IntTextFieldmIntField
 
ButtonmPlusButton
 
ButtonmMinusButton
 
ButtonmClearButton
 
ButtonmButton
 
ButtonmButton2
 
ButtonmButton3
 
ButtonmResetButton
 
InventorymInventory
 
ComplexInventorymComplexInventory
 
ItemContainermItemContainer
 
ScrollAreamItemScrollArea
 
NpcInputStateT mInputState
 
NpcActionStateT mActionState
 
std::vector< Widget * > mSkinControls
 
std::string mSkinName
 
PlayerBoxmPlayerBox
 
BeingmAvatarBeing
 
const NpcDialogInfomDialogInfo
 
int mLastNextTime
 
int mCameraMode
 
int mCameraX
 
int mCameraY
 
bool mShowAvatar
 
bool mLogInteraction
 

Static Private Attributes

static DialogList instances
 

Additional Inherited Members

- Data Fields inherited from Widget
Visible mVisible
 
- Protected Types inherited from BasicContainer
typedef std::vector< Widget * > WidgetList
 
typedef WidgetList::iterator WidgetListIterator
 
typedef WidgetList::const_iterator WidgetListConstIterator
 
typedef WidgetList::reverse_iterator WidgetListReverseIterator
 
typedef WidgetList::const_reverse_iterator WidgetListCReverseIterator
 
- Protected Types inherited from Widget
typedef std::list< MouseListener * > MouseListenerList
 
typedef MouseListenerList::iterator MouseListenerIterator
 
typedef std::list< KeyListener * > KeyListenerList
 
typedef KeyListenerList::iterator KeyListenerIterator
 
typedef std::list< ActionListener * > ActionListenerList
 
typedef ActionListenerList::iterator ActionListenerIterator
 
typedef std::list< WidgetDeathListener * > WidgetDeathListenerList
 
typedef WidgetDeathListenerList::iterator WidgetDeathListenerIterator
 
typedef std::list< FocusListener * > FocusListenerList
 
typedef FocusListenerList::iterator FocusListenerIterator
 
typedef std::list< WidgetListener * > WidgetListenerList
 
typedef WidgetListenerList::iterator WidgetListenerIterator
 
- Protected Member Functions inherited from Window
bool canMove () const
 
int getOption (const std::string &name, const int def) const
 
bool getOptionBool (const std::string &name, const bool def) const
 
void setTitlePadding (const int p)
 
int getTitlePadding () const
 
- Protected Member Functions inherited from BasicContainer
virtual void drawChildren (Graphics *const graphics)
 
virtual void safeDrawChildren (Graphics *const graphics)
 
virtual void logicChildren ()
 
- Protected Member Functions inherited from Widget
void distributeActionEvent ()
 
void distributeResizedEvent ()
 
void distributeMovedEvent ()
 
void distributeHiddenEvent ()
 
void distributeShownEvent ()
 
- Protected Member Functions inherited from Widget2
 Widget2 (const Widget2 *const widget)
 
- Protected Member Functions inherited from WidgetDeathListener
 WidgetDeathListener ()
 
- Protected Member Functions inherited from MouseListener
 MouseListener ()
 
- Protected Member Functions inherited from WidgetListener
 WidgetListener ()
 
- Protected Member Functions inherited from ActionListener
 ActionListener ()
 
- Protected Attributes inherited from Window
std::string mCaption
 
Graphics::Alignment mAlignment
 
int mPadding
 
unsigned int mTitleBarHeight
 
Move mMovable
 
int mDragOffsetX
 
int mDragOffsetY
 
bool mMoved
 
SkinmSkin
 
int mDefaultX
 
int mDefaultY
 
int mDefaultWidth
 
int mDefaultHeight
 
int mCaptionOffsetX
 
int mCaptionOffsetY
 
bool mShowTitle
 
bool mLastRedraw
 
- Protected Attributes inherited from BasicContainer2
Opaque mOpaque
 
- Protected Attributes inherited from BasicContainer
WidgetList mWidgets
 
WidgetList mLogicWidgets
 
- Protected Attributes inherited from Widget
MouseListenerList mMouseListeners
 
KeyListenerList mKeyListeners
 
ActionListenerList mActionListeners
 
WidgetDeathListenerList mDeathListeners
 
FocusListenerList mFocusListeners
 
WidgetListenerList mWidgetListeners
 
Color mForegroundColor
 
Color mBackgroundColor
 
Color mBaseColor
 
Rect mDimension
 
std::string mActionEventId
 
std::string mId
 
FocusHandlermFocusHandler
 
FocusHandlermInternalFocusHandler
 
WidgetmParent
 
FontmCurrentFont
 
unsigned int mFrameSize
 
bool mFocusable
 
bool mTabIn
 
bool mTabOut
 
bool mEnabled
 
bool mAllowLogic
 
bool mMouseConsume
 
bool mRedraw
 
bool mSelectable
 
- Protected Attributes inherited from Widget2
int mPaletteOffset
 
WidgetmWindow
 
Color mForegroundColor2
 
- Static Protected Attributes inherited from Widget
static FontmGlobalFont = 0
 

Detailed Description

The npc dialog.

Definition at line 65 of file npcdialog.h.

Member Typedef Documentation

◆ DialogList

typedef std::list<NpcDialog*> NpcDialog::DialogList
private

Definition at line 247 of file npcdialog.h.

Constructor & Destructor Documentation

◆ NpcDialog()

NpcDialog::NpcDialog ( const BeingId  npcId)
explicit

Constructor.

See also
Window::Window

Definition at line 98 of file npcdialog.cpp.

98  :
99  // TRANSLATORS: npc dialog name
100  Window(_("NPC"), Modal_false, nullptr, "npc.xml"),
101  ActionListener(),
102  mNpcId(npcId),
103  mDefaultInt(0),
104  mDefaultString(),
105  mTextBox(new BrowserBox(this, Opaque_true,
106  "browserbox.xml")),
107  mScrollArea(new ScrollArea(this, mTextBox,
108  fromBool(getOptionBool("showtextbackground", false), Opaque),
109  "npc_textbackground.xml")),
110  mText(),
111  mNewText(),
112  mItems(),
113  mImages(),
115  this, this, "extendedlistbox.xml", 13)),
117  fromBool(getOptionBool("showlistbackground", false), Opaque),
118  "npc_listbackground.xml")),
119  mSkinContainer(new Container(this)),
121  fromBool(getOptionBool("showlistbackground", false), Opaque),
122  "npc_listbackground.xml")),
124  mTextField(new TextField(this, std::string(), LoseFocusOnTab_true,
125  nullptr, std::string(), false)),
126  mIntField(new IntTextField(this, 0, 0, 0, Enable_true, 0)),
127  // TRANSLATORS: npc dialog button
128  mPlusButton(new Button(this, _("+"), "inc", BUTTON_SKIN, this)),
129  // TRANSLATORS: npc dialog button
130  mMinusButton(new Button(this, _("-"), "dec", BUTTON_SKIN, this)),
131  // TRANSLATORS: npc dialog button
132  mClearButton(new Button(this, _("Clear"), "clear", BUTTON_SKIN, this)),
133  mButton(new Button(this, "", "ok", BUTTON_SKIN, this)),
134  // TRANSLATORS: npc dialog button
135  mButton2(new Button(this, _("Close"), "close", BUTTON_SKIN, this)),
136  // TRANSLATORS: npc dialog button
137  mButton3(new Button(this, _("Add"), "add", BUTTON_SKIN, this)),
138  // TRANSLATORS: npc dialog button
139  mResetButton(new Button(this, _("Reset"), "reset", BUTTON_SKIN, this)),
145  fromBool(getOptionBool("showitemsbackground", false), Opaque),
146  "npc_listbackground.xml")),
149  mSkinControls(),
150  mSkinName(),
151  mPlayerBox(new PlayerBox(nullptr, std::string(), std::string())),
152  mAvatarBeing(nullptr),
153  mDialogInfo(nullptr),
154  mLastNextTime(0),
155  mCameraMode(-1),
156  mCameraX(0),
157  mCameraY(0),
158  mShowAvatar(false),
159  mLogInteraction(config.getBoolValue("logNpcInGui"))
160 {
161  // Basic Window Setup
162  setWindowName("NpcText");
163  setResizable(true);
164  setFocusable(true);
165  setStickyButtonLock(true);
166 
167  setMinWidth(200);
168  setMinHeight(150);
169 
170  setDefaultSize(300, 578, ImagePosition::LOWER_LEFT, 0, 0);
171 
172  mPlayerBox->setWidth(70);
173  mPlayerBox->setHeight(100);
174 
175  // Setup output text box
177  mTextBox->setMaxRow(config.getIntValue("ChatLogLength"));
179  mTextBox->setProcessVars(true);
181  mTextBox->setEnableKeys(true);
182  mTextBox->setEnableTabs(true);
183  mTextBox->setEnableImages(true);
184 
187 
188  // Setup listbox
194  if (gui->getNpcFont()->getHeight() < 20)
195  mItemList->setRowHeight(20);
196  else
198 
199  setContentSize(260, 175);
207 
208  const Font *const fnt = mButton->getFont();
209  int width = std::max(fnt->getWidth(CAPTION_WAITING),
210  fnt->getWidth(CAPTION_NEXT));
211  width = std::max(width, fnt->getWidth(CAPTION_CLOSE));
212  width = std::max(width, fnt->getWidth(CAPTION_SUBMIT));
213  mButton->setWidth(8 + width);
214 
215  // Place widgets
216  buildLayout();
217 
218  center();
219  loadWindowState();
220 
221  instances.push_back(this);
222 }
#define fromBool(val, name)
Definition: booldefines.h:49
const std::string BUTTON_SKIN
Definition: button.h:89
void setMaxRow(unsigned max)
Definition: browserbox.h:81
void setEnableTabs(const bool n)
Definition: browserbox.h:142
void setLinkHandler(LinkHandler *linkHandler)
Definition: browserbox.cpp:166
void setEnableImages(const bool n)
Definition: browserbox.h:136
void setEnableKeys(const bool n)
Definition: browserbox.h:139
void setOpaque(Opaque opaque)
Definition: browserbox.h:75
void setProcessVars(const bool n)
Definition: browserbox.h:133
Definition: button.h:102
bool getBoolValue(const std::string &key) const
int getIntValue(const std::string &key) const
Definition: font.h:90
int getHeight() const
Definition: font.cpp:362
int getWidth(const std::string &text) const
Definition: font.cpp:334
Font * getNpcFont() const
Definition: gui.h:178
void setDistributeMousePressed(const bool b)
Definition: listbox.h:141
void setRowHeight(unsigned int n)
Definition: listbox.h:159
void setWrappingEnabled(const bool wrappingEnabled)
Definition: listbox.h:223
ExtendedListBox * mItemList
Definition: npcdialog.h:286
static DialogList instances
Definition: npcdialog.h:248
std::string mSkinName
Definition: npcdialog.h:315
bool mLogInteraction
Definition: npcdialog.h:324
std::string mNewText
Definition: npcdialog.h:281
BrowserBox * mTextBox
Definition: npcdialog.h:278
Button * mButton2
Definition: npcdialog.h:301
Button * mMinusButton
Definition: npcdialog.h:296
ScrollArea * mItemScrollArea
Definition: npcdialog.h:310
int mCameraX
Definition: npcdialog.h:321
ComplexInventory * mComplexInventory
Definition: npcdialog.h:308
const NpcDialogInfo * mDialogInfo
Definition: npcdialog.h:318
TextField * mTextField
Definition: npcdialog.h:293
Inventory * mInventory
Definition: npcdialog.h:307
PlayerBox * mPlayerBox
Definition: npcdialog.h:316
IntTextField * mIntField
Definition: npcdialog.h:294
Button * mClearButton
Definition: npcdialog.h:297
Being * mAvatarBeing
Definition: npcdialog.h:317
ItemLinkHandler * mItemLinkHandler
Definition: npcdialog.h:290
void buildLayout()
Definition: npcdialog.cpp:1052
int mDefaultInt
Definition: npcdialog.h:274
Button * mButton
Definition: npcdialog.h:300
std::string mText
Definition: npcdialog.h:280
int mLastNextTime
Definition: npcdialog.h:319
ScrollArea * mListScrollArea
Definition: npcdialog.h:287
Button * mButton3
Definition: npcdialog.h:302
bool mShowAvatar
Definition: npcdialog.h:323
std::vector< Image * > mImages
Definition: npcdialog.h:285
Button * mResetButton
Definition: npcdialog.h:305
ScrollArea * mSkinScrollArea
Definition: npcdialog.h:289
NpcInputStateT mInputState
Definition: npcdialog.h:312
std::string mDefaultString
Definition: npcdialog.h:275
StringVect mItems
Definition: npcdialog.h:284
ScrollArea * mScrollArea
Definition: npcdialog.h:279
NpcActionStateT mActionState
Definition: npcdialog.h:313
Button * mPlusButton
Definition: npcdialog.h:295
std::vector< Widget * > mSkinControls
Definition: npcdialog.h:314
int mCameraMode
Definition: npcdialog.h:320
BeingId mNpcId
Definition: npcdialog.h:272
ItemContainer * mItemContainer
Definition: npcdialog.h:309
Container * mSkinContainer
Definition: npcdialog.h:288
int mCameraY
Definition: npcdialog.h:322
void setVerticalScrollPolicy(const ScrollPolicy vPolicy)
void setScrollPolicy(const ScrollPolicy hPolicy, const ScrollPolicy vPolicy)
void setHorizontalScrollPolicy(const ScrollPolicy hPolicy)
void setVisible(Visible visible)
Definition: widget.cpp:225
void setFocusable(const bool focusable)
Definition: widget.cpp:192
void setWidth(const int width)
Definition: widget.cpp:133
void setFont(Font *const font)
Definition: widget.cpp:349
void setHeight(const int height)
Definition: widget.cpp:140
void setActionEventId(const std::string &actionEventId)
Definition: widget.h:596
Font * getFont() const
Definition: widget.cpp:331
void addActionListener(ActionListener *const actionListener)
Definition: widget.cpp:252
void center()
Definition: window.cpp:1417
void setResizable(const bool resize)
Definition: window.cpp:627
bool getOptionBool(const std::string &name, const bool def) const
Definition: window.cpp:1466
void setContentSize(int width, int height)
Definition: window.cpp:492
void setWindowName(const std::string &name)
Definition: window.h:355
Window(const std::string &caption, const Modal modal, Window *const parent, std::string skin)
Definition: window.cpp:109
void setMinHeight(const int height)
Definition: window.cpp:604
void setMinWidth(const int width)
Definition: window.cpp:591
void setStickyButtonLock(const bool sticky)
Definition: window.cpp:772
void setDefaultSize()
Definition: window.cpp:1198
void loadWindowState()
Definition: window.cpp:1087
Configuration config
#define CREATEWIDGETR(type,...)
Definition: createwidget.h:36
const bool Enable_true
Definition: enable.h:30
const bool ForceQuantity_false
Definition: forcequantity.h:30
#define _(s)
Definition: gettext.h:35
Gui * gui
Definition: gui.cpp:111
const bool LoseFocusOnTab_true
const bool Modal_false
Definition: modal.h:30
#define CAPTION_CLOSE
Definition: npcdialog.cpp:89
#define CAPTION_WAITING
Definition: npcdialog.cpp:85
#define CAPTION_NEXT
Definition: npcdialog.cpp:87
#define CAPTION_SUBMIT
Definition: npcdialog.cpp:91
const bool Opaque_false
Definition: opaque.h:30
const bool Opaque_true
Definition: opaque.h:30
bool Opaque
Definition: opaque.h:30
const bool ShowEmptyRows_true
Definition: showemptyrows.h:30
const bool Visible_true
Definition: visible.h:30

References Widget::addActionListener(), buildLayout(), CAPTION_CLOSE, CAPTION_NEXT, CAPTION_SUBMIT, CAPTION_WAITING, Window::center(), config, Widget::getFont(), Font::getHeight(), Configuration::getIntValue(), Gui::getNpcFont(), Font::getWidth(), gui, instances, Window::loadWindowState(), ImagePosition::LOWER_LEFT, mButton, mIntField, mItemLinkHandler, mItemList, mItemScrollArea, mListScrollArea, mPlayerBox, mScrollArea, mSkinScrollArea, mTextBox, mTextField, Opaque_false, Widget::setActionEventId(), Window::setContentSize(), Window::setDefaultSize(), ListBox::setDistributeMousePressed(), BrowserBox::setEnableImages(), BrowserBox::setEnableKeys(), BrowserBox::setEnableTabs(), Widget::setFocusable(), Widget::setFont(), Widget::setHeight(), ScrollArea::setHorizontalScrollPolicy(), BrowserBox::setLinkHandler(), BrowserBox::setMaxRow(), Window::setMinHeight(), Window::setMinWidth(), BrowserBox::setOpaque(), BrowserBox::setProcessVars(), Window::setResizable(), ListBox::setRowHeight(), ScrollArea::setScrollPolicy(), Window::setStickyButtonLock(), ScrollArea::setVerticalScrollPolicy(), Widget::setVisible(), Widget::setWidth(), Window::setWindowName(), ListBox::setWrappingEnabled(), ScrollArea::SHOW_ALWAYS, ScrollArea::SHOW_NEVER, and Visible_true.

◆ ~NpcDialog()

NpcDialog::~NpcDialog ( )

Definition at line 246 of file npcdialog.cpp.

247 {
248  config.removeListeners(this);
250  clearLayout();
251 
252  if (mPlayerBox != nullptr)
253  {
254  delete mPlayerBox->getBeing();
255  delete mPlayerBox;
256  }
257 
259 
279 
281  {
282  if (*it != nullptr)
283  (*it)->decRef();
284  }
285 
286  mImages.clear();
287 
288  instances.remove(this);
289 }
void removeListeners(ConfigListener *const listener)
void deleteSkinControls()
Definition: npcdialog.cpp:1270
Being * getBeing()
Definition: playerbox.h:92
void clearLayout()
Definition: window.cpp:1372
#define delete2(var)
Definition: delete2.h:25
#define FOR_EACH(type, iter, array)
Definition: foreach.h:25
#define CHECKLISTENERS
Definition: localconsts.h:277
std::vector< Image * >::iterator ImageVectorIter
Definition: npcdialog.cpp:96

References CHECKLISTENERS, Window::clearLayout(), config, delete2, deleteSkinControls(), FOR_EACH, PlayerBox::getBeing(), instances, mButton, mButton2, mButton3, mClearButton, mComplexInventory, mImages, mIntField, mInventory, mItemContainer, mItemLinkHandler, mItemList, mItemScrollArea, mListScrollArea, mMinusButton, mPlayerBox, mPlusButton, mResetButton, mScrollArea, mSkinScrollArea, mTextBox, mTextField, and Configuration::removeListeners().

Member Function Documentation

◆ action()

void NpcDialog::action ( const ActionEvent event)
virtual

Called when receiving actions from the widgets.

Implements ActionListener.

Definition at line 319 of file npcdialog.cpp.

320 {
321  const std::string &eventId = event.getId();
322  if (eventId == "ok")
323  {
325  {
327  return;
328 
329  nextDialog();
330  addText(std::string(), false);
331  }
334  {
335  if (cutInWindow != nullptr)
336  cutInWindow->hide();
337  closeDialog();
338  }
340  {
341  std::string printText; // Text that will get printed
342  // in the textbox
343  switch (mInputState)
344  {
345  case NpcInputState::LIST:
346  {
347  if (mDialogInfo != nullptr)
348  return;
349  if (gui != nullptr)
350  gui->resetClickCount();
351  const int selectedIndex = mItemList->getSelected();
352 
353  if (selectedIndex >= CAST_S32(mItems.size())
354  || selectedIndex < 0
357  {
358  return;
359  }
360  unsigned char choice = CAST_U8(
361  selectedIndex + 1);
362  printText = mItems[selectedIndex];
363 
364  npcHandler->listInput(mNpcId, choice);
365  break;
366  }
368  {
371  {
372  return;
373  }
374  printText = mTextField->getText();
375  npcHandler->stringInput(mNpcId, printText);
376  break;
377  }
379  {
382  {
383  return;
384  }
385  printText = strprintf("%d", mIntField->getValue());
388  break;
389  }
390  case NpcInputState::ITEM:
391  {
392  restoreVirtuals();
395  {
396  return;
397  }
398 
399  std::string str;
400  const int sz = mInventory->getSize();
401  if (sz == 0)
402  {
403  str = "0,0";
404  }
405  else
406  {
407  const Item *item = mInventory->getItem(0);
408  if (item != nullptr)
409  {
410  str = strprintf("%d,%d", item->getId(),
411  toInt(item->getColor(), int));
412  }
413  else
414  {
415  str = "0,0";
416  }
417  for (int f = 1; f < sz; f ++)
418  {
419  str.append(";");
420  item = mInventory->getItem(f);
421  if (item != nullptr)
422  {
423  str.append(strprintf("%d,%d", item->getId(),
424  toInt(item->getColor(), int)));
425  }
426  else
427  {
428  str.append("0,0");
429  }
430  }
431  }
432 
433  // need send selected item
435  mInventory->clear();
436  break;
437  }
439  {
440  restoreVirtuals();
443  {
444  return;
445  }
446 
447  std::string str;
448  const int sz = mInventory->getSize();
449  if (sz == 0)
450  {
451  str = "-1";
452  }
453  else
454  {
455  const Item *item = mInventory->getItem(0);
456  if (item != nullptr)
457  {
458  str = strprintf("%d", item->getTag());
459  }
460  else
461  {
462  str = "-1";
463  }
464  for (int f = 1; f < sz; f ++)
465  {
466  str.append(";");
467  item = mInventory->getItem(f);
468  if (item != nullptr)
469  str.append(strprintf("%d", item->getTag()));
470  else
471  str.append("-1");
472  }
473  }
474 
475  // need send selected item
477  mInventory->clear();
478  break;
479  }
481  {
482  restoreVirtuals();
485  {
486  return;
487  }
488 
489  std::string str;
490  const int sz = mComplexInventory->getSize();
491  if (sz == 0)
492  {
493  str.clear();
494  }
495  else
496  {
497  const ComplexItem *item = dynamic_cast<ComplexItem*>(
499  str = complexItemToStr(item);
500  for (int f = 1; f < sz; f ++)
501  {
502  str.append("|");
503  item = dynamic_cast<ComplexItem*>(
505  str.append(complexItemToStr(item));
506  }
507  }
508 
509  // need send selected item
511  mInventory->clear();
512  break;
513  }
514 
515  case NpcInputState::NONE:
516  default:
517  break;
518  }
522  {
523  // addText will auto remove the input layout
524  addText(strprintf("> \"%s\"", printText.c_str()), false);
525  }
526  mNewText.clear();
527  }
528 
529  if (!mLogInteraction)
530  mTextBox->clearRows();
531  }
532  else if (eventId == "reset")
533  {
534  switch (mInputState)
535  {
538  break;
541  break;
542  case NpcInputState::ITEM:
544  mInventory->clear();
545  break;
548  break;
549  case NpcInputState::NONE:
550  case NpcInputState::LIST:
551  default:
552  break;
553  }
554  }
555  else if (eventId == "inc")
556  {
558  }
559  else if (eventId == "dec")
560  {
562  }
563  else if (eventId == "clear")
564  {
565  switch (mInputState)
566  {
567  case NpcInputState::ITEM:
569  mInventory->clear();
570  break;
573  break;
576  case NpcInputState::LIST:
577  case NpcInputState::NONE:
578  default:
579  clearRows();
580  break;
581  }
582  }
583  else if (eventId == "close")
584  {
585  restoreVirtuals();
587  {
588  switch (mInputState)
589  {
590  case NpcInputState::ITEM:
591  npcHandler->stringInput(mNpcId, "0,0");
592  break;
594  npcHandler->stringInput(mNpcId, "-1");
595  break;
598  break;
601  case NpcInputState::NONE:
602  case NpcInputState::LIST:
603  default:
604  npcHandler->listInput(mNpcId, 255);
605  break;
606  }
607  if (cutInWindow != nullptr)
608  cutInWindow->hide();
609  closeDialog();
610  }
611  }
612  else if (eventId == "add")
613  {
614  if (inventoryWindow != nullptr)
615  {
616  Item *const item = inventoryWindow->getSelectedItem();
617  Inventory *const inventory = PlayerInfo::getInventory();
618  if (inventory != nullptr)
619  {
621  {
622  if (mComplexInventory->addVirtualItem(item, -1, 1))
623  inventory->virtualRemove(item, 1);
624  }
625  else
626  {
627  if (mInventory->addVirtualItem(item, -1, 1))
628  inventory->virtualRemove(item, 1);
629  }
630  }
631  }
632  }
633  else if (eventId.find("skin_") == 0)
634  {
635  const std::string cmd = eventId.substr(5);
636  std::string printText;
637  int cnt = 0;
639  {
640  if (cmd == *it)
641  {
642  npcHandler->listInput(mNpcId, CAST_U8(cnt + 1));
643  printText = mItems[cnt];
644 
648  {
649  // addText will auto remove the input layout
650  addText(strprintf("> \"%s\"", printText.c_str()), false);
651  }
652  mNewText.clear();
653  break;
654  }
655  cnt ++;
656  }
657  }
658 }
#define CAST_S32
Definition: cast.h:30
#define CAST_U8
Definition: cast.h:27
void clearRows()
Definition: browserbox.cpp:359
bool addVirtualItem(const Item *const item, int index, const int amount)
void resetClickCount()
Definition: gui.cpp:980
void setValue(const int value)
int getValue() const
Item * getSelectedItem() const
void virtualRemove(Item *const item, const int amount)
Definition: inventory.cpp:485
void clear()
Definition: inventory.cpp:238
Item * getItem(const int index) const
Definition: inventory.cpp:83
unsigned getSize() const
Definition: inventory.h:76
virtual bool addVirtualItem(const Item *const item, int index, const int amount)
Definition: inventory.cpp:439
Definition: item.h:50
int getTag() const
Definition: item.h:231
int getId() const
Definition: item.h:81
ItemColor getColor() const
Definition: item.h:181
int getSelected() const
Definition: listbox.h:168
virtual void stringInput(const BeingId npcId, const std::string &value) const =0
virtual void listInput(const BeingId npcId, const unsigned char value) const =0
virtual void integerInput(const BeingId npcId, const int value) const =0
void nextDialog()
Definition: npcdialog.cpp:660
void addText(const std::string &string, const bool save)
Definition: npcdialog.cpp:291
static std::string complexItemToStr(const ComplexItem *const item)
Definition: npcdialog.cpp:1351
static void restoreVirtuals()
Definition: npcdialog.cpp:1344
void clearRows()
Definition: npcdialog.cpp:1212
void closeDialog()
Definition: npcdialog.cpp:665
const std::string & getText() const
Definition: textfield.h:224
void setText(const std::string &text)
Definition: textfield.cpp:803
CutInWindow * cutInWindow
Definition: cutinwindow.cpp:37
#define toInt(val, name)
Definition: intdefines.h:47
InventoryWindow * inventoryWindow
bool limitPackets(const PacketTypeT type)
@ PACKET_NPC_INPUT
Definition: packettype.h:34
@ PACKET_NPC_NEXT
Definition: packettype.h:32
Inventory * getInventory()
Definition: playerinfo.cpp:195
Net::NpcHandler * npcHandler
Definition: net.cpp:93
std::string strprintf(const char *const format,...)
StringVect::const_iterator StringVectCIter
Definition: stringvector.h:31

References addText(), ComplexInventory::addVirtualItem(), Inventory::addVirtualItem(), CAST_S32, CAST_U8, Inventory::clear(), BrowserBox::clearRows(), clearRows(), NpcActionState::CLOSE, closeDialog(), complexItemToStr(), cutInWindow, FOR_EACH, Item::getColor(), Item::getId(), PlayerInfo::getInventory(), Inventory::getItem(), ListBox::getSelected(), InventoryWindow::getSelectedItem(), Inventory::getSize(), Item::getTag(), TextField::getText(), IntTextField::getValue(), gui, CutInWindow::hide(), NpcActionState::INPUT, NpcInputState::INTEGER, Net::NpcHandler::integerInput(), inventoryWindow, NpcInputState::ITEM, NpcInputState::ITEM_CRAFT, NpcInputState::ITEM_INDEX, PacketLimiter::limitPackets(), NpcInputState::LIST, Net::NpcHandler::listInput(), mActionState, mComplexInventory, mDefaultInt, mDefaultString, mDialogInfo, mInputState, mIntField, mInventory, mItemList, mItems, mLogInteraction, mNewText, mNpcId, mTextBox, mTextField, NpcActionState::NEXT, nextDialog(), NpcInputState::NONE, npcHandler, PacketType::PACKET_NPC_INPUT, PacketType::PACKET_NPC_NEXT, Gui::resetClickCount(), restoreVirtuals(), TextField::setText(), IntTextField::setValue(), NpcInputState::STRING, Net::NpcHandler::stringInput(), strprintf(), toInt, Inventory::virtualRemove(), and NpcActionState::WAIT.

◆ addChoice()

void NpcDialog::addChoice ( const std::string &  choice)

Adds a choice to the list box.

Definition at line 700 of file npcdialog.cpp.

701 {
702  mItems.push_back(choice);
703  mImages.push_back(nullptr);
704 }

References mImages, and mItems.

◆ addCraftItem()

void NpcDialog::addCraftItem ( Item *const  item,
const int  amount,
const int  slot 
)

Definition at line 1382 of file npcdialog.cpp.

1385 {
1387  return;
1388 
1389  Inventory *const inventory = PlayerInfo::getInventory();
1390 
1391  if (inventory == nullptr)
1392  return;
1393 
1395  item,
1396  slot,
1397  amount))
1398  {
1399  inventory->virtualRemove(item, amount);
1400  }
1401 }

References ComplexInventory::addVirtualItem(), PlayerInfo::getInventory(), NpcInputState::ITEM_CRAFT, mComplexInventory, mInputState, and Inventory::virtualRemove().

Referenced by ItemAmountWindow::finish(), and InventoryWindow::moveItemToCraft().

◆ addText()

void NpcDialog::addText ( const std::string &  string,
const bool  save 
)

Sets the text shows in the dialog.

Parameters
stringThe new text. Adds the text to the text shows in the dialog. Also adds a newline to the end.
stringThe text to add.

Definition at line 291 of file npcdialog.cpp.

292 {
293  if (save || mLogInteraction)
294  {
295  if (mText.size() > 5000)
296  mText.clear();
297 
298  mNewText.append(text);
299  mTextBox->addRow(text,
300  false);
301  }
304  buildLayout();
305 }
void addRow(const std::string &row, const bool atTop)
Definition: browserbox.cpp:171
void setVerticalScrollAmount(const int vScroll)
int getVerticalMaxScroll()

References BrowserBox::addRow(), buildLayout(), ScrollArea::getVerticalMaxScroll(), mActionState, mLogInteraction, mNewText, mScrollArea, mText, mTextBox, ScrollArea::setVerticalScrollAmount(), and NpcActionState::WAIT.

Referenced by action(), and Ea::NpcRecv::processNpcMessage().

◆ buildLayout()

void NpcDialog::buildLayout ( )
private

Definition at line 1052 of file npcdialog.cpp.

1053 {
1054  clearLayout();
1055 
1057  {
1060  else if (mActionState == NpcActionState::NEXT)
1062  else if (mActionState == NpcActionState::CLOSE)
1065  }
1066  else if (mInputState != NpcInputState::NONE)
1067  {
1069  switch (mInputState)
1070  {
1071  case NpcInputState::LIST:
1072  if (mDialogInfo == nullptr)
1074  else
1076  mItemList->setSelected(-1);
1077  break;
1078 
1079  case NpcInputState::STRING:
1081  break;
1082 
1085  break;
1086 
1087  case NpcInputState::ITEM:
1091  break;
1092 
1093  case NpcInputState::NONE:
1094  default:
1095  break;
1096  }
1097  }
1098 
1099  Layout &layout = getLayout();
1100  layout.setRowHeight(1, LayoutType::SET);
1101  redraw();
1103 }
void setCaption(const std::string &caption)
Definition: button.h:214
void setRowHeight(const int n, const int h)
Definition: layoutcell.cpp:128
Definition: layout.h:45
void setSelected(const int selected)
Definition: listbox.cpp:399
void placeIntInputControls()
Definition: npcdialog.cpp:969
void placeMenuControls()
Definition: npcdialog.cpp:892
void placeSkinControls()
Definition: npcdialog.cpp:913
void placeNormalControls()
Definition: npcdialog.cpp:875
void placeTextInputControls()
Definition: npcdialog.cpp:948
void placeItemInputControls()
Definition: npcdialog.cpp:994
Layout & getLayout()
Definition: window.cpp:1365
void redraw()
Definition: window.cpp:1406

References CAPTION_CLOSE, CAPTION_NEXT, CAPTION_SUBMIT, CAPTION_WAITING, Window::clearLayout(), NpcActionState::CLOSE, Window::getLayout(), ScrollArea::getVerticalMaxScroll(), NpcActionState::INPUT, NpcInputState::INTEGER, NpcInputState::ITEM, NpcInputState::ITEM_CRAFT, NpcInputState::ITEM_INDEX, NpcInputState::LIST, mActionState, mButton, mDialogInfo, mInputState, mItemList, mScrollArea, NpcActionState::NEXT, NpcInputState::NONE, placeIntInputControls(), placeItemInputControls(), placeMenuControls(), placeNormalControls(), placeSkinControls(), placeTextInputControls(), Window::redraw(), LayoutType::SET, Button::setCaption(), LayoutCell::setRowHeight(), ListBox::setSelected(), ScrollArea::setVerticalScrollAmount(), NpcInputState::STRING, and NpcActionState::WAIT.

Referenced by addText(), choiceRequest(), integerRequest(), itemCraftRequest(), itemIndexRequest(), itemRequest(), logic(), NpcDialog(), showAvatar(), showCloseButton(), showNextButton(), and textRequest().

◆ choiceRequest()

void NpcDialog::choiceRequest ( )

Makes this dialog request a choice selection from the user.

Definition at line 686 of file npcdialog.cpp.

687 {
688  mItems.clear();
690  {
691  if (*it != nullptr)
692  (*it)->decRef();
693  }
694  mImages.clear();
697  buildLayout();
698 }

References buildLayout(), FOR_EACH, NpcActionState::INPUT, NpcInputState::LIST, mActionState, mImages, mInputState, and mItems.

Referenced by Ea::NpcRecv::processNpcChoice().

◆ clearDialogs()

void NpcDialog::clearDialogs ( )
static

Definition at line 1217 of file npcdialog.cpp.

1218 {
1219  NpcDialogs::iterator it = mNpcDialogs.begin();
1220  const NpcDialogs::iterator it_end = mNpcDialogs.end();
1221  while (it != it_end)
1222  {
1223  delete (*it).second;
1224  ++ it;
1225  }
1226  mNpcDialogs.clear();
1227 }
static NpcDialogs mNpcDialogs
Definition: npcdialog.h:242

References mNpcDialogs.

Referenced by PlayerPostDeathListener::action(), and DialogsManager::closeDialogs().

◆ clearRows()

void NpcDialog::clearRows ( )

Definition at line 1212 of file npcdialog.cpp.

1213 {
1214  mTextBox->clearRows();
1215 }

References BrowserBox::clearRows(), and mTextBox.

Referenced by action(), and Ea::NpcRecv::processNpcCommand().

◆ closeAll()

void NpcDialog::closeAll ( )
static

Closes all instances.

Definition at line 866 of file npcdialog.cpp.

867 {
868  FOR_EACH (DialogList::const_iterator, it, instances)
869  {
870  if (*it != nullptr)
871  (*it)->close();
872  }
873 }

References FOR_EACH, and instances.

Referenced by DialogsManager::closeDialogs().

◆ closeDialog()

void NpcDialog::closeDialog ( )

Notifies the server that the client has performed a close action.

Definition at line 665 of file npcdialog.cpp.

666 {
667  restoreCamera();
669 }
virtual void closeDialog(const BeingId npcId)=0
void restoreCamera()
Definition: npcdialog.cpp:1115

References Net::NpcHandler::closeDialog(), mNpcId, npcHandler, and restoreCamera().

Referenced by action(), and Actions::closeMoveNpcDialog().

◆ complexItemToStr()

std::string NpcDialog::complexItemToStr ( const ComplexItem *const  item)
staticprivate

Definition at line 1351 of file npcdialog.cpp.

1352 {
1353  std::string str;
1354  if (item != nullptr)
1355  {
1356  const STD_VECTOR<Item*> &items = item->getChilds();
1357  const size_t sz = items.size();
1358  if (sz == 0U)
1359  return str;
1360 
1361  const Item *item2 = items[0];
1362 
1363  str = strprintf("%d,%d",
1364  item2->getInvIndex(),
1365  item2->getQuantity());
1366  for (size_t f = 1; f < sz; f ++)
1367  {
1368  str.append(";");
1369  item2 = items[f];
1370  str.append(strprintf("%d,%d",
1371  item2->getInvIndex(),
1372  item2->getQuantity()));
1373  }
1374  }
1375  else
1376  {
1377  str.clear();
1378  }
1379  return str;
1380 }
const std::vector< Item * > & getChilds() const
Definition: complexitem.h:59
int getQuantity() const
Definition: item.h:105
int getInvIndex() const
Definition: item.h:165

References ComplexItem::getChilds(), Item::getInvIndex(), Item::getQuantity(), and strprintf().

Referenced by action().

◆ copyToClipboard()

void NpcDialog::copyToClipboard ( const int  x,
const int  y 
) const

Definition at line 1245 of file npcdialog.cpp.

1246 {
1247  std::string str = mTextBox->getTextAtPos(x, y);
1248  sendBuffer(str);
1249 }
std::string getTextAtPos(const int x, const int y) const
Definition: browserbox.cpp:870
bool sendBuffer(const std::string &text)
Definition: copynpaste.cpp:518

References BrowserBox::getTextAtPos(), mTextBox, sendBuffer(), x, and y.

◆ createSkinControls()

void NpcDialog::createSkinControls ( )
private

Definition at line 1275 of file npcdialog.cpp.

1276 {
1278 
1279  if (mDialogInfo == nullptr)
1280  return;
1281 
1282  FOR_EACH (STD_VECTOR<NpcImageInfo*>::const_iterator,
1283  it,
1285  {
1286  const NpcImageInfo *const info = *it;
1287  Image *const image = Theme::getImageFromTheme(info->name);
1288  if (image != nullptr)
1289  {
1290  Icon *const icon = new Icon(this, image, AutoRelease_true);
1291  icon->setPosition(info->x, info->y);
1292  mSkinContainer->add(icon);
1293  }
1294  }
1295  FOR_EACH (STD_VECTOR<NpcTextInfo*>::const_iterator,
1296  it,
1298  {
1299  const NpcTextInfo *const info = *it;
1300  BrowserBox *box = new BrowserBox(this,
1301  Opaque_true,
1302  "browserbox.xml");
1303  box->setOpaque(Opaque_false);
1304  box->setMaxRow(config.getIntValue("ChatLogLength"));
1306  box->setProcessVars(true);
1307  box->setFont(gui->getNpcFont());
1308  box->setEnableKeys(true);
1309  box->setEnableTabs(true);
1310  box->setPosition(info->x, info->y);
1311  mSkinContainer->add(box);
1312  box->setWidth(info->width);
1313  box->setHeight(info->height);
1314  StringVect parts;
1315  splitToStringVector(parts, info->text, '\n');
1316  FOR_EACH (StringVectCIter, it2, parts)
1317  {
1318  box->addRow(*it2,
1319  false);
1320  }
1321  }
1322  FOR_EACH (STD_VECTOR<NpcButtonInfo*>::const_iterator,
1323  it,
1325  {
1326  const NpcButtonInfo *const info = *it;
1327  Button *const button = new Button(this,
1328  BUTTON_SKIN);
1329  button->setCaption(info->name);
1330  button->setActionEventId("skin_" + info->value);
1331  button->addActionListener(this);
1332  button->setPosition(info->x, info->y);
1333  if (!info->image.empty())
1334  {
1335  button->setImageWidth(info->imageWidth);
1336  button->setImageHeight(info->imageHeight);
1337  button->loadImageSet(info->image);
1338  }
1339  mSkinContainer->add(button);
1340  button->adjustSize();
1341  }
1342 }
const bool AutoRelease_true
Definition: autorelease.h:30
virtual void add(Widget *const widget)
void setImageWidth(const int width)
Definition: button.h:258
void adjustSize()
Definition: button.cpp:799
void setImageHeight(const int height)
Definition: button.h:261
void loadImageSet(const std::string &imageName)
Definition: button.cpp:395
Definition: icon.h:41
static Image * getImageFromTheme(const std::string &path)
Definition: theme.cpp:655
void setPosition(const int x, const int y)
Definition: widget.cpp:161
bool info(InputEvent &event)
Definition: commands.cpp:57
void splitToStringVector(StringVect &tokens, const std::string &text, const char separator)
std::vector< std::string > StringVect
Definition: stringvector.h:29
NpcDialogMenuInfo menu
Definition: npcdialoginfo.h:42
std::vector< NpcImageInfo * > images
std::vector< NpcButtonInfo * > buttons
std::vector< NpcTextInfo * > texts

References BasicContainer2::add(), Widget::addActionListener(), BrowserBox::addRow(), Button::adjustSize(), AutoRelease_true, BUTTON_SKIN, NpcDialogMenuInfo::buttons, config, deleteSkinControls(), FOR_EACH, Theme::getImageFromTheme(), Configuration::getIntValue(), Gui::getNpcFont(), gui, NpcDialogMenuInfo::images, Actions::info(), Button::loadImageSet(), mDialogInfo, NpcDialogInfo::menu, mItemLinkHandler, mSkinContainer, Opaque_false, Opaque_true, Widget::setActionEventId(), Button::setCaption(), BrowserBox::setEnableKeys(), BrowserBox::setEnableTabs(), Widget::setFont(), Widget::setHeight(), Button::setImageHeight(), Button::setImageWidth(), BrowserBox::setLinkHandler(), BrowserBox::setMaxRow(), BrowserBox::setOpaque(), Widget::setPosition(), BrowserBox::setProcessVars(), Widget::setWidth(), splitToStringVector(), and NpcDialogMenuInfo::texts.

Referenced by placeSkinControls().

◆ deleteSkinControls()

void NpcDialog::deleteSkinControls ( )
private

Definition at line 1270 of file npcdialog.cpp.

1271 {
1273 }
void removeControls()
Definition: container.cpp:43

References mSkinContainer, and Container::removeControls().

Referenced by createSkinControls(), and ~NpcDialog().

◆ destroyAll()

static void NpcDialog::destroyAll ( )
static

Closes all instances and destroy also net handler dialogs.

◆ getActive()

NpcDialog * NpcDialog::getActive ( )
static

Returns the first active instance. Useful for pushing user interaction.

Definition at line 852 of file npcdialog.cpp.

853 {
854  if (instances.size() == 1)
855  return instances.front();
856 
857  FOR_EACH (DialogList::const_iterator, it, instances)
858  {
859  if (((*it) != nullptr) && (*it)->isFocused())
860  return (*it);
861  }
862 
863  return nullptr;
864 }

References FOR_EACH, and instances.

Referenced by Actions::closeMoveNpcDialog(), Game::handleMove(), and InputManager::updateConditionMask().

◆ getElementAt()

std::string NpcDialog::getElementAt ( int  i)
virtual

Returns the name of item number i of the choices list.

Implements ListModel.

Definition at line 676 of file npcdialog.cpp.

677 {
678  return mItems[i];
679 }

References mItems.

◆ getImageAt()

const Image * NpcDialog::getImageAt ( int  i)
virtual

Returns the image of item number i of the choices list.

Implements ExtendedListModel.

Definition at line 681 of file npcdialog.cpp.

682 {
683  return mImages[i];
684 }

References mImages.

◆ getInputState()

NpcInputStateT NpcDialog::getInputState ( )
inline

Definition at line 237 of file npcdialog.h.

238  { return mInputState; }

References mInputState.

Referenced by InventoryWindow::moveItemToCraft(), and PopupMenu::showPopup().

◆ getNumberOfElements()

int NpcDialog::getNumberOfElements ( )
virtual

Returns the number of items in the choices list.

Implements ListModel.

Definition at line 671 of file npcdialog.cpp.

672 {
673  return CAST_S32(mItems.size());
674 }

References CAST_S32, and mItems.

◆ integerRequest()

void NpcDialog::integerRequest ( const int  defaultValue,
const int  min,
const int  max 
)

Requests a interger from the user.

Definition at line 779 of file npcdialog.cpp.

782 {
785  mDefaultInt = defaultValue;
786  mIntField->setRange(min, max);
787  mIntField->setValue(defaultValue);
788  buildLayout();
789 }
void setRange(const int minimum, const int maximum)

References buildLayout(), NpcActionState::INPUT, NpcInputState::INTEGER, mActionState, mDefaultInt, mInputState, mIntField, IntTextField::setRange(), and IntTextField::setValue().

Referenced by Ea::NpcRecv::processNpcIntInput().

◆ isActive()

static bool NpcDialog::isActive ( )
inlinestatic

Returns true if any instances exist.

Definition at line 191 of file npcdialog.h.

192  { return !instances.empty(); }

References instances.

Referenced by PlayerInfo::isTalking().

◆ isAnyInputFocused()

bool NpcDialog::isAnyInputFocused ( )
static

Definition at line 768 of file npcdialog.cpp.

769 {
770  FOR_EACH (DialogList::const_iterator, it, instances)
771  {
772  if (((*it) != nullptr) && (*it)->isInputFocused())
773  return true;
774  }
775 
776  return false;
777 }

References FOR_EACH, and instances.

Referenced by InputManager::updateConditionMask().

◆ isCloseState()

int NpcDialog::isCloseState ( ) const
inline

Definition at line 228 of file npcdialog.h.

229  { return static_cast<int>(mActionState == NpcActionState::CLOSE); }

References NpcActionState::CLOSE, and mActionState.

Referenced by Actions::closeMoveNpcDialog().

◆ isInputFocused()

bool NpcDialog::isInputFocused ( ) const

Definition at line 762 of file npcdialog.cpp.

763 {
764  return mTextField->isFocused() || mIntField->isFocused()
765  || mItemList->isFocused();
766 }
virtual bool isFocused() const
Definition: widget.cpp:184

References Widget::isFocused(), mIntField, mItemList, and mTextField.

◆ isTextInputFocused()

bool NpcDialog::isTextInputFocused ( ) const

Definition at line 757 of file npcdialog.cpp.

758 {
759  return mTextField->isFocused();
760 }

References Widget::isFocused(), and mTextField.

◆ itemCraftRequest()

void NpcDialog::itemCraftRequest ( const int  size)

◆ itemIndexRequest()

void NpcDialog::itemIndexRequest ( const int  size)

◆ itemRequest()

void NpcDialog::itemRequest ( const int  size)

◆ logic()

void NpcDialog::logic ( )
virtual

Called for all widgets in the gui each time Gui::logic is called. You can do logic stuff here like playing an animation.

See also
Gui::logic

Reimplemented from BasicContainer.

Definition at line 1191 of file npcdialog.cpp.

1192 {
1193  BLOCK_START("NpcDialog::logic")
1194  Window::logic();
1195  if (mShowAvatar && (mAvatarBeing != nullptr))
1196  {
1197  mAvatarBeing->logic();
1198  if (mPlayerBox->getWidth() < CAST_S32(3 * getPadding()))
1199  {
1200  const Sprite *const sprite = mAvatarBeing->mSprites[0];
1201  if (sprite != nullptr)
1202  {
1203  mPlayerBox->setWidth(sprite->getWidth() + 2 * getPadding());
1204  mPlayerBox->setHeight(sprite->getHeight() + 2 * getPadding());
1205  buildLayout();
1206  }
1207  }
1208  }
1209  BLOCK_END("NpcDialog::logic")
1210 }
void logic()
Definition: being.cpp:1834
std::vector< Sprite * > mSprites
void logic()
Definition: npcdialog.cpp:1191
Definition: sprite.h:34
virtual int getHeight() const =0
virtual int getWidth() const =0
int getWidth() const
Definition: widget.h:221
Definition: window.h:102
int getPadding() const
Definition: window.h:504
if(!vert) return
#define BLOCK_END(name)
Definition: perfomance.h:80
#define BLOCK_START(name)
Definition: perfomance.h:79

References BLOCK_END, BLOCK_START, buildLayout(), CAST_S32, Sprite::getHeight(), Window::getPadding(), Widget::getWidth(), Sprite::getWidth(), Being::logic(), BasicContainer::logic(), mAvatarBeing, mPlayerBox, mShowAvatar, CompoundSprite::mSprites, Widget::setHeight(), and Widget::setWidth().

◆ mousePressed()

void NpcDialog::mousePressed ( MouseEvent event)
virtual

Starts window resizing when appropriate.

Reimplemented from Window.

Definition at line 1229 of file npcdialog.cpp.

1230 {
1231  Window::mousePressed(event);
1232  if (event.getButton() == MouseButton::RIGHT
1233  && event.getSource() == mTextBox)
1234  {
1235  event.consume();
1236  if (popupMenu != nullptr)
1237  {
1239  viewport->mMouseX,
1240  viewport->mMouseY);
1241  }
1242  }
1243 }
Widget * getSource() const
Definition: event.h:104
MouseButtonT getButton() const
Definition: mouseevent.h:116
void showNpcDialogPopup(const BeingId npcId, const int x, const int y)
Definition: popupmenu.cpp:2244
int mMouseX
Definition: viewport.h:154
int mMouseY
Definition: viewport.h:155
void mousePressed(MouseEvent &event)
Definition: window.cpp:836
Viewport * viewport
Definition: viewport.cpp:36
PopupMenu * popupMenu
Definition: popupmenu.cpp:103

References MouseEvent::getButton(), Event::getSource(), Viewport::mMouseX, Viewport::mMouseY, mNpcId, Window::mousePressed(), mTextBox, popupMenu, MouseButton::RIGHT, PopupMenu::showNpcDialogPopup(), and viewport.

◆ move()

void NpcDialog::move ( const int  amount)

◆ nextDialog()

void NpcDialog::nextDialog ( )

Notifies the server that client has performed a next action.

Definition at line 660 of file npcdialog.cpp.

661 {
663 }
virtual void nextDialog(const BeingId npcId) const =0

References mNpcId, Net::NpcHandler::nextDialog(), and npcHandler.

Referenced by action().

◆ optionChanged()

void NpcDialog::optionChanged ( const std::string &  name)
virtual

Called when an option changed. The config listener will have to be registered to the option name first.

Implements ConfigListener.

Definition at line 846 of file npcdialog.cpp.

847 {
848  if (name == "logNpcInGui")
849  mLogInteraction = config.getBoolValue("logNpcInGui");
850 }

References config, Configuration::getBoolValue(), and mLogInteraction.

◆ parseListItems()

void NpcDialog::parseListItems ( const std::string &  itemString)

Fills the options list for an NPC dialog.

Parameters
itemStringA string with the options separated with colons.

Definition at line 706 of file npcdialog.cpp.

707 {
708  std::istringstream iss(itemString);
709  std::string tmp;
710  const std::string path = paths.getStringValue("guiIcons");
711  while (getline(iss, tmp, ':'))
712  {
713  if (tmp.empty())
714  continue;
715  const size_t pos = tmp.find('|');
716  if (pos == std::string::npos)
717  {
718  mItems.push_back(tmp);
719  mImages.push_back(nullptr);
720  }
721  else
722  {
723  mItems.push_back(tmp.substr(pos + 1));
724  Image *const img = Loader::getImage(pathJoin(path,
725  std::string(tmp.substr(0, pos)).append(".png")));
726  mImages.push_back(img);
727  }
728  }
729 
730  if (!mItems.empty())
731  {
734  }
735  else
736  {
737  mItemList->setSelected(-1);
738  }
739 }
std::string getStringValue(const std::string &key) const
virtual void requestFocus()
Definition: widget.cpp:204
Configuration paths
Image * getImage(const std::string &idPath)
Definition: imageloader.cpp:86
std::string pathJoin(std::string str1, const std::string &str2)

References Loader::getImage(), Configuration::getStringValue(), mImages, mItemList, mItems, pathJoin(), paths, Widget::requestFocus(), and ListBox::setSelected().

Referenced by Ea::NpcRecv::processNpcChoice().

◆ placeIntInputControls()

void NpcDialog::placeIntInputControls ( )
private

Definition at line 969 of file npcdialog.cpp.

970 {
971  if (mShowAvatar)
972  {
973  place(0, 0, mPlayerBox, 1, 1);
974  place(1, 0, mScrollArea, 6, 3);
975  place(1, 3, mMinusButton, 1, 1);
976  place(2, 3, mIntField, 4, 1);
977  place(6, 3, mPlusButton, 1, 1);
978  place(1, 4, mResetButton, 2, 1);
979  place(3, 4, mClearButton, 2, 1);
980  place(5, 4, mButton, 2, 1);
981  }
982  else
983  {
984  place(0, 0, mScrollArea, 6, 3);
985  place(0, 3, mMinusButton, 1, 1);
986  place(1, 3, mIntField, 4, 1);
987  place(5, 3, mPlusButton, 1, 1);
988  place(0, 4, mResetButton, 2, 1);
989  place(2, 4, mClearButton, 2, 1);
990  place(4, 4, mButton, 2, 1);
991  }
992 }
LayoutCell & place(const int x, const int y, Widget *const wg, const int w, const int h)
Definition: window.cpp:1384

References mButton, mClearButton, mIntField, mMinusButton, mPlayerBox, mPlusButton, mResetButton, mScrollArea, mShowAvatar, and Window::place().

Referenced by buildLayout().

◆ placeItemInputControls()

void NpcDialog::placeItemInputControls ( )
private

Definition at line 994 of file npcdialog.cpp.

995 {
996  if (mDialogInfo != nullptr)
997  {
1000  }
1001  else
1002  {
1003  mItemContainer->setCellBackgroundImage("inventory_cell.xml");
1004  mItemContainer->setMaxColumns(10000);
1005  }
1006 
1009  else
1011 
1012  if ((mDialogInfo != nullptr) && mDialogInfo->hideText)
1013  {
1014  if (mShowAvatar)
1015  {
1016  place(0, 0, mPlayerBox, 1, 1);
1017  place(1, 0, mItemScrollArea, 7, 3);
1018  place(1, 3, mButton3, 2, 1);
1019  place(3, 3, mClearButton, 2, 1);
1020  place(5, 3, mButton, 2, 1);
1021  }
1022  else
1023  {
1024  place(0, 0, mItemScrollArea, 6, 3);
1025  place(0, 3, mButton3, 2, 1);
1026  place(2, 3, mClearButton, 2, 1);
1027  place(4, 3, mButton, 2, 1);
1028  }
1029  }
1030  else
1031  {
1032  if (mShowAvatar)
1033  {
1034  place(0, 0, mPlayerBox, 1, 1);
1035  place(1, 0, mScrollArea, 6, 3);
1036  place(0, 3, mItemScrollArea, 7, 3);
1037  place(1, 6, mButton3, 2, 1);
1038  place(3, 6, mClearButton, 2, 1);
1039  place(5, 6, mButton, 2, 1);
1040  }
1041  else
1042  {
1043  place(0, 0, mScrollArea, 6, 3);
1044  place(0, 3, mItemScrollArea, 6, 3);
1045  place(0, 6, mButton3, 2, 1);
1046  place(2, 6, mClearButton, 2, 1);
1047  place(4, 6, mButton, 2, 1);
1048  }
1049  }
1050 }
void setCellBackgroundImage(const std::string &xmlName)
void setInventory(Inventory *const inventory)
void setMaxColumns(const int maxColumns)
NpcInventoryInfo inventory
Definition: npcdialoginfo.h:43

References NpcInventoryInfo::cell, NpcInventoryInfo::columns, NpcDialogInfo::hideText, NpcDialogInfo::inventory, NpcInputState::ITEM_CRAFT, mButton, mButton3, mClearButton, mComplexInventory, mDialogInfo, mInputState, mInventory, mItemContainer, mItemScrollArea, mPlayerBox, mScrollArea, mShowAvatar, Window::place(), ItemContainer::setCellBackgroundImage(), ItemContainer::setInventory(), and ItemContainer::setMaxColumns().

Referenced by buildLayout().

◆ placeMenuControls()

void NpcDialog::placeMenuControls ( )
private

Definition at line 892 of file npcdialog.cpp.

893 {
894  if (mShowAvatar)
895  {
896  place(0, 0, mPlayerBox, 1, 1);
897  place(1, 0, mScrollArea, 6, 3);
898  place(0, 3, mListScrollArea, 7, 3);
899  place(1, 6, mButton2, 2, 1);
900  place(3, 6, mClearButton, 2, 1);
901  place(5, 6, mButton, 2, 1);
902  }
903  else
904  {
905  place(0, 0, mScrollArea, 6, 3);
906  place(0, 3, mListScrollArea, 6, 3);
907  place(0, 6, mButton2, 2, 1);
908  place(2, 6, mClearButton, 2, 1);
909  place(4, 6, mButton, 2, 1);
910  }
911 }

References mButton, mButton2, mClearButton, mListScrollArea, mPlayerBox, mScrollArea, mShowAvatar, and Window::place().

Referenced by buildLayout().

◆ placeNormalControls()

void NpcDialog::placeNormalControls ( )
private

Definition at line 875 of file npcdialog.cpp.

876 {
877  if (mShowAvatar)
878  {
879  place(0, 0, mPlayerBox, 1, 1);
880  place(1, 0, mScrollArea, 5, 3);
881  place(4, 3, mClearButton, 1, 1);
882  place(5, 3, mButton, 1, 1);
883  }
884  else
885  {
886  place(0, 0, mScrollArea, 5, 3);
887  place(3, 3, mClearButton, 1, 1);
888  place(4, 3, mButton, 1, 1);
889  }
890 }

References mButton, mClearButton, mPlayerBox, mScrollArea, mShowAvatar, and Window::place().

Referenced by buildLayout().

◆ placeSkinControls()

void NpcDialog::placeSkinControls ( )
private

Definition at line 913 of file npcdialog.cpp.

914 {
916  if ((mDialogInfo != nullptr) && mDialogInfo->hideText)
917  {
918  if (mShowAvatar)
919  {
920  place(0, 0, mPlayerBox, 1, 1);
921  place(1, 0, mSkinScrollArea, 7, 3);
922  place(1, 3, mButton2, 2, 1);
923  }
924  else
925  {
926  place(0, 0, mSkinScrollArea, 6, 3);
927  place(0, 3, mButton2, 2, 1);
928  }
929  }
930  else
931  {
932  if (mShowAvatar)
933  {
934  place(0, 0, mPlayerBox, 1, 1);
935  place(1, 0, mScrollArea, 6, 3);
936  place(0, 3, mSkinScrollArea, 7, 3);
937  place(1, 6, mButton2, 2, 1);
938  }
939  else
940  {
941  place(0, 0, mScrollArea, 6, 3);
942  place(0, 3, mSkinScrollArea, 6, 3);
943  place(0, 6, mButton2, 2, 1);
944  }
945  }
946 }
void createSkinControls()
Definition: npcdialog.cpp:1275

References createSkinControls(), NpcDialogInfo::hideText, mButton2, mDialogInfo, mPlayerBox, mScrollArea, mShowAvatar, mSkinScrollArea, and Window::place().

Referenced by buildLayout().

◆ placeTextInputControls()

void NpcDialog::placeTextInputControls ( )
private

Definition at line 948 of file npcdialog.cpp.

949 {
950  if (mShowAvatar)
951  {
952  place(0, 0, mPlayerBox, 1, 1);
953  place(1, 0, mScrollArea, 6, 3);
954  place(1, 3, mTextField, 6, 1);
955  place(1, 4, mResetButton, 2, 1);
956  place(3, 4, mClearButton, 2, 1);
957  place(5, 4, mButton, 2, 1);
958  }
959  else
960  {
961  place(0, 0, mScrollArea, 6, 3);
962  place(0, 3, mTextField, 6, 1);
963  place(0, 4, mResetButton, 2, 1);
964  place(2, 4, mClearButton, 2, 1);
965  place(4, 4, mButton, 2, 1);
966  }
967 }

References mButton, mClearButton, mPlayerBox, mResetButton, mScrollArea, mShowAvatar, mTextField, and Window::place().

Referenced by buildLayout().

◆ postInit()

void NpcDialog::postInit ( )
virtual

Reimplemented from Window.

Definition at line 224 of file npcdialog.cpp.

225 {
228  requestFocus();
229  enableVisibleSound(true);
231 
232  if (actorManager != nullptr)
233  {
234  const Being *const being = actorManager->findBeing(mNpcId);
235  if (being != nullptr)
236  {
238  being->getSubType(), BeingTypeId)));
239  setCaption(being->getName());
240  }
241  }
242 
243  config.addListener("logNpcInGui", this);
244 }
ActorManager * actorManager
int BeingTypeId
Definition: beingtypeid.h:30
Being * findBeing(const BeingId id) const
Definition: being.h:96
BeingTypeId getSubType() const
Definition: being.h:400
const std::string & getName() const
Definition: being.h:232
void addListener(const std::string &key, ConfigListener *const listener)
void setVisible(Visible visible)
Definition: npcdialog.cpp:838
void showAvatar(const BeingTypeId avatarId)
Definition: npcdialog.cpp:1130
void playGuiSound(const std::string &name)
void setCaption(const std::string &caption)
Definition: window.h:531
void postInit()
Definition: window.cpp:249
void enableVisibleSound(bool b)
Definition: window.h:481
#define fromInt(val, name)
Definition: intdefines.h:46
BeingTypeId getAvatarFor(const BeingTypeId id)
Definition: npcdb.cpp:201
static const std::string SOUND_SHOW_WINDOW
Definition: sound.h:37
SoundManager soundManager

References actorManager, Configuration::addListener(), config, Window::enableVisibleSound(), ActorManager::findBeing(), fromInt, NPCDB::getAvatarFor(), Being::getName(), Being::getSubType(), mNpcId, SoundManager::playGuiSound(), Window::postInit(), Widget::requestFocus(), Window::setCaption(), setVisible(), showAvatar(), SOUND_SHOW_WINDOW, soundManager, and Visible_true.

◆ refocus()

void NpcDialog::refocus ( )

Definition at line 741 of file npcdialog.cpp.

742 {
743  if (!mItems.empty())
744  mItemList->refocus();
745 }
void refocus()
Definition: listbox.cpp:365

References mItemList, mItems, and ListBox::refocus().

Referenced by Actions::closeMoveNpcDialog().

◆ restoreCamera()

void NpcDialog::restoreCamera ( )

Definition at line 1115 of file npcdialog.cpp.

1116 {
1117  if ((viewport == nullptr) || mCameraMode == -1)
1118  return;
1119 
1122  if (mCameraMode != 0)
1123  {
1126  }
1127  mCameraMode = -1;
1128 }
unsigned int cameraMode
Definition: settings.h:144
void setCameraRelativeX(const int n)
Definition: viewport.h:146
void toggleCameraMode()
Definition: viewport.cpp:255
void setCameraRelativeY(const int n)
Definition: viewport.h:149
Settings settings
Definition: settings.cpp:32

References Settings::cameraMode, CAST_S32, mCameraMode, mCameraX, mCameraY, Viewport::setCameraRelativeX(), Viewport::setCameraRelativeY(), settings, Viewport::toggleCameraMode(), and viewport.

Referenced by closeDialog(), EAthena::NpcHandler::getNpc(), TmwAthena::NpcHandler::getNpc(), and Ea::NpcRecv::processNpcCommand().

◆ restoreVirtuals()

void NpcDialog::restoreVirtuals ( )
staticprivate

Definition at line 1344 of file npcdialog.cpp.

1345 {
1346  Inventory *const inventory = PlayerInfo::getInventory();
1347  if (inventory != nullptr)
1348  inventory->restoreVirtuals();
1349 }
void restoreVirtuals()
Definition: inventory.cpp:500

References PlayerInfo::getInventory(), and Inventory::restoreVirtuals().

Referenced by action().

◆ saveCamera()

void NpcDialog::saveCamera ( )

Definition at line 1105 of file npcdialog.cpp.

1106 {
1107  if ((viewport == nullptr) || mCameraMode >= 0)
1108  return;
1109 
1113 }
int getCameraRelativeY() const
Definition: viewport.h:143
int getCameraRelativeX() const
Definition: viewport.h:140

References Settings::cameraMode, CAST_S32, Viewport::getCameraRelativeX(), Viewport::getCameraRelativeY(), mCameraMode, mCameraX, mCameraY, settings, and viewport.

Referenced by EAthena::NpcHandler::getNpc(), and TmwAthena::NpcHandler::getNpc().

◆ setAvatarAction()

void NpcDialog::setAvatarAction ( const int  actionId)

Definition at line 1184 of file npcdialog.cpp.

1185 {
1186  Being *const being = mPlayerBox->getBeing();
1187  if (being != nullptr)
1188  being->setAction(static_cast<BeingActionT>(actionId), 0);
1189 }
BeingAction ::T BeingActionT
Definition: beingaction.h:41
virtual void setAction(const BeingActionT &action, const int attackId)
Definition: being.cpp:1554

References PlayerBox::getBeing(), mPlayerBox, and Being::setAction().

Referenced by Ea::NpcRecv::processNpcCommand().

◆ setAvatarDirection()

void NpcDialog::setAvatarDirection ( const uint8_t  direction)

Definition at line 1177 of file npcdialog.cpp.

1178 {
1179  Being *const being = mPlayerBox->getBeing();
1180  if (being != nullptr)
1181  being->setDirection(direction);
1182 }
virtual void setDirection(const uint8_t direction)
Definition: being.cpp:1690

References PlayerBox::getBeing(), mPlayerBox, and Being::setDirection().

Referenced by Ea::NpcRecv::processNpcCommand().

◆ setSkin()

void NpcDialog::setSkin ( const std::string &  skin)

Definition at line 1251 of file npcdialog.cpp.

1252 {
1253  if (skin.empty())
1254  {
1255  mSkinName = skin;
1256  mDialogInfo = nullptr;
1257  return;
1258  }
1259  const NpcDialogInfo *const dialog = NpcDialogDB::getDialog(skin);
1260  if (dialog == nullptr)
1261  {
1262  logger->log("Error: creating controls for not existing npc dialog %s",
1263  skin.c_str());
1264  return;
1265  }
1266  mSkinName = skin;
1267  mDialogInfo = dialog;
1268 }
void log(const char *const log_text,...)
Definition: logger.cpp:269
Logger * logger
Definition: logger.cpp:89
NpcDialogInfo * getDialog(const std::string &name)

References NpcDialogDB::getDialog(), Logger::log(), logger, mDialogInfo, and mSkinName.

Referenced by EAthena::NpcRecv::processNpcSkin().

◆ setVisible()

void NpcDialog::setVisible ( Visible  visible)
virtual

Overloads window setVisible by Guichan to allow sticky window handling.

Reimplemented from Window.

Definition at line 838 of file npcdialog.cpp.

839 {
840  Window::setVisible(visible);
841 
842  if (visible == Visible_false)
843  scheduleDelete();
844 }
virtual void setVisible(Visible visible)
Definition: window.cpp:778
virtual void scheduleDelete()
Definition: window.cpp:831
const bool Visible_false
Definition: visible.h:30

References Window::scheduleDelete(), Window::setVisible(), and Visible_false.

Referenced by postInit().

◆ showAvatar()

void NpcDialog::showAvatar ( const BeingTypeId  avatarId)

Definition at line 1130 of file npcdialog.cpp.

1131 {
1132  const bool needShow = (avatarId != BeingTypeId_zero);
1133  if (needShow)
1134  {
1135  delete mAvatarBeing;
1138  avatarId,
1139  nullptr);
1141  if (!mAvatarBeing->mSprites.empty())
1142  {
1143  mAvatarBeing->logic();
1144  const BeingInfo *const info = AvatarDB::get(avatarId);
1145  const int pad2 = 2 * mPadding;
1146  int width = 0;
1147  if (info != nullptr)
1148  {
1149  width = info->getWidth();
1150  mPlayerBox->setWidth(width + pad2);
1151  mPlayerBox->setHeight(info->getHeight() + pad2);
1152  }
1153  const Sprite *const sprite = mAvatarBeing->mSprites[0];
1154  if ((sprite != nullptr) && (width == 0))
1155  {
1156  mPlayerBox->setWidth(sprite->getWidth() + pad2);
1157  mPlayerBox->setHeight(sprite->getHeight() + pad2);
1158  }
1159  }
1160  }
1161  else
1162  {
1164  mPlayerBox->setPlayer(nullptr);
1165  }
1166  if (needShow != mShowAvatar)
1167  {
1168  mShowAvatar = needShow;
1169  buildLayout();
1170  }
1171  else
1172  {
1173  mShowAvatar = needShow;
1174  }
1175 }
const BeingId BeingId_zero
Definition: beingid.h:30
const BeingTypeId BeingTypeId_zero
Definition: beingtypeid.h:30
static Being * createBeing(const BeingId id, const ActorTypeT type, const BeingTypeId subtype, Map *const map)
Definition: being.cpp:5575
void setPlayer(Being *being)
Definition: playerbox.h:74
int mPadding
Definition: window.h:618
BeingInfo * get(const BeingTypeId id)
Definition: avatardb.cpp:141

References ActorType::Avatar, BeingId_zero, BeingTypeId_zero, buildLayout(), Being::createBeing(), delete2, AvatarDB::get(), Sprite::getHeight(), Sprite::getWidth(), Actions::info(), Being::logic(), mAvatarBeing, Window::mPadding, mPlayerBox, mShowAvatar, CompoundSprite::mSprites, Widget::setHeight(), PlayerBox::setPlayer(), and Widget::setWidth().

Referenced by postInit(), and Ea::NpcRecv::processNpcCommand().

◆ showCloseButton()

void NpcDialog::showCloseButton ( )

When called, the widget will show a "Close" button and will close the dialog when clicked.

Definition at line 313 of file npcdialog.cpp.

314 {
316  buildLayout();
317 }

References buildLayout(), NpcActionState::CLOSE, and mActionState.

Referenced by Ea::NpcRecv::processNpcClose().

◆ showNextButton()

void NpcDialog::showNextButton ( )

When called, the widget will show a "Next" button.

Definition at line 307 of file npcdialog.cpp.

308 {
310  buildLayout();
311 }

References buildLayout(), mActionState, and NpcActionState::NEXT.

Referenced by Ea::NpcRecv::processNpcNext().

◆ textRequest()

void NpcDialog::textRequest ( const std::string &  defaultText)

Requests a text string from the user.

Definition at line 747 of file npcdialog.cpp.

748 {
751  mDefaultString = defaultText;
752  mTextField->setText(defaultText);
753 
754  buildLayout();
755 }

References buildLayout(), NpcActionState::INPUT, mActionState, mDefaultString, mInputState, mTextField, TextField::setText(), and NpcInputState::STRING.

Referenced by Ea::NpcRecv::processNpcStrInput().

Field Documentation

◆ instances

NpcDialog::DialogList NpcDialog::instances
staticprivate

Definition at line 248 of file npcdialog.h.

Referenced by closeAll(), getActive(), isActive(), isAnyInputFocused(), NpcDialog(), and ~NpcDialog().

◆ mActionState

NpcActionStateT NpcDialog::mActionState
private

◆ mAvatarBeing

Being* NpcDialog::mAvatarBeing
private

Definition at line 317 of file npcdialog.h.

Referenced by logic(), and showAvatar().

◆ mButton

Button* NpcDialog::mButton
private

◆ mButton2

Button* NpcDialog::mButton2
private

Definition at line 301 of file npcdialog.h.

Referenced by placeMenuControls(), placeSkinControls(), and ~NpcDialog().

◆ mButton3

Button* NpcDialog::mButton3
private

Definition at line 302 of file npcdialog.h.

Referenced by placeItemInputControls(), and ~NpcDialog().

◆ mCameraMode

int NpcDialog::mCameraMode
private

Definition at line 320 of file npcdialog.h.

Referenced by restoreCamera(), and saveCamera().

◆ mCameraX

int NpcDialog::mCameraX
private

Definition at line 321 of file npcdialog.h.

Referenced by restoreCamera(), and saveCamera().

◆ mCameraY

int NpcDialog::mCameraY
private

Definition at line 322 of file npcdialog.h.

Referenced by restoreCamera(), and saveCamera().

◆ mClearButton

Button* NpcDialog::mClearButton
private

◆ mComplexInventory

ComplexInventory* NpcDialog::mComplexInventory
private

◆ mDefaultInt

int NpcDialog::mDefaultInt
private

Definition at line 274 of file npcdialog.h.

Referenced by action(), and integerRequest().

◆ mDefaultString

std::string NpcDialog::mDefaultString
private

Definition at line 275 of file npcdialog.h.

Referenced by action(), and textRequest().

◆ mDialogInfo

const NpcDialogInfo* NpcDialog::mDialogInfo
private

◆ mImages

std::vector<Image *> NpcDialog::mImages
private

Definition at line 285 of file npcdialog.h.

Referenced by addChoice(), choiceRequest(), getImageAt(), parseListItems(), and ~NpcDialog().

◆ mInputState

NpcInputStateT NpcDialog::mInputState
private

◆ mIntField

IntTextField* NpcDialog::mIntField
private

◆ mInventory

Inventory* NpcDialog::mInventory
private

◆ mItemContainer

ItemContainer* NpcDialog::mItemContainer
private

Definition at line 309 of file npcdialog.h.

Referenced by placeItemInputControls(), and ~NpcDialog().

◆ mItemLinkHandler

ItemLinkHandler* NpcDialog::mItemLinkHandler
private

Definition at line 290 of file npcdialog.h.

Referenced by createSkinControls(), NpcDialog(), and ~NpcDialog().

◆ mItemList

ExtendedListBox* NpcDialog::mItemList
private

◆ mItems

StringVect NpcDialog::mItems
private

◆ mItemScrollArea

ScrollArea* NpcDialog::mItemScrollArea
private

Definition at line 310 of file npcdialog.h.

Referenced by NpcDialog(), placeItemInputControls(), and ~NpcDialog().

◆ mLastNextTime

int NpcDialog::mLastNextTime
private

Definition at line 319 of file npcdialog.h.

◆ mListScrollArea

ScrollArea* NpcDialog::mListScrollArea
private

Definition at line 287 of file npcdialog.h.

Referenced by NpcDialog(), placeMenuControls(), and ~NpcDialog().

◆ mLogInteraction

bool NpcDialog::mLogInteraction
private

Definition at line 324 of file npcdialog.h.

Referenced by action(), addText(), and optionChanged().

◆ mMinusButton

Button* NpcDialog::mMinusButton
private

Definition at line 296 of file npcdialog.h.

Referenced by placeIntInputControls(), and ~NpcDialog().

◆ mNewText

std::string NpcDialog::mNewText
private

Definition at line 281 of file npcdialog.h.

Referenced by action(), and addText().

◆ mNpcDialogs

NpcDialogs NpcDialog::mNpcDialogs
static

◆ mNpcId

BeingId NpcDialog::mNpcId
private

Definition at line 272 of file npcdialog.h.

Referenced by action(), closeDialog(), mousePressed(), nextDialog(), and postInit().

◆ mPlayerBox

PlayerBox* NpcDialog::mPlayerBox
private

◆ mPlusButton

Button* NpcDialog::mPlusButton
private

Definition at line 295 of file npcdialog.h.

Referenced by placeIntInputControls(), and ~NpcDialog().

◆ mResetButton

Button* NpcDialog::mResetButton
private

Definition at line 305 of file npcdialog.h.

Referenced by placeIntInputControls(), placeTextInputControls(), and ~NpcDialog().

◆ mScrollArea

ScrollArea* NpcDialog::mScrollArea
private

◆ mShowAvatar

bool NpcDialog::mShowAvatar
private

◆ mSkinContainer

Container* NpcDialog::mSkinContainer
private

Definition at line 288 of file npcdialog.h.

Referenced by createSkinControls(), and deleteSkinControls().

◆ mSkinControls

std::vector<Widget*> NpcDialog::mSkinControls
private

Definition at line 314 of file npcdialog.h.

◆ mSkinName

std::string NpcDialog::mSkinName
private

Definition at line 315 of file npcdialog.h.

Referenced by setSkin().

◆ mSkinScrollArea

ScrollArea* NpcDialog::mSkinScrollArea
private

Definition at line 289 of file npcdialog.h.

Referenced by NpcDialog(), placeSkinControls(), and ~NpcDialog().

◆ mText

std::string NpcDialog::mText
private

Definition at line 280 of file npcdialog.h.

Referenced by addText().

◆ mTextBox

BrowserBox* NpcDialog::mTextBox
private

◆ mTextField

TextField* NpcDialog::mTextField
private

The documentation for this class was generated from the following files: