1 /* ScummVM - Graphic Adventure Engine
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
28 #include "gui/widget.h"
29 #include "common/str.h"
30 #include "common/array.h"
35 kPopUpItemSelectedCmd
= 'POPs'
39 * Popup or dropdown widget which, when clicked, "pop up" a list of items and
40 * lets the user pick on of them.
42 * Implementation wise, when the user selects an item, then a kPopUpItemSelectedCmd
43 * is broadcast, with data being equal to the tag value of the selected entry.
45 class PopUpWidget
: public Widget
, public CommandSender
{
46 friend class PopUpDialog
;
47 typedef Common::String String
;
53 typedef Common::Array
<Entry
> EntryList
;
62 PopUpWidget(GuiObject
*boss
, const String
&name
);
64 void handleMouseDown(int x
, int y
, int button
, int clickCount
);
65 void handleMouseWheel(int x
, int y
, int direction
);
67 void appendEntry(const String
&entry
, uint32 tag
= (uint32
)-1);
70 /** Select the entry at the given index. */
71 void setSelected(int item
);
73 /** Select the first entry matching the given tag. */
74 void setSelectedTag(uint32 tag
);
76 int getSelected() const { return _selectedItem
; }
77 uint32
getSelectedTag() const { return (_selectedItem
>= 0) ? _entries
[_selectedItem
].tag
: (uint32
)-1; }
78 const String
& getSelectedString() const { return (_selectedItem
>= 0) ? _entries
[_selectedItem
].name
: String::emptyString
; }
80 void handleMouseEntered(int button
) { setFlags(WIDGET_HILITED
); draw(); }
81 void handleMouseLeft(int button
) { clearFlags(WIDGET_HILITED
); draw(); }
83 virtual void reflowLayout();
88 } // End of namespace GUI