aboutsummaryrefslogtreecommitdiff
path: root/gui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'gui/widgets')
-rw-r--r--gui/widgets/editable.cpp15
-rw-r--r--gui/widgets/scrollcontainer.cpp22
-rw-r--r--gui/widgets/scrollcontainer.h7
3 files changed, 33 insertions, 11 deletions
diff --git a/gui/widgets/editable.cpp b/gui/widgets/editable.cpp
index 4f7e584c14..02defe9a56 100644
--- a/gui/widgets/editable.cpp
+++ b/gui/widgets/editable.cpp
@@ -185,6 +185,21 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
forcecaret = true;
break;
+ case Common::KEYCODE_v:
+ if (g_system->hasFeature(OSystem::kFeatureClipboardSupport) && state.flags & Common::KBD_CTRL) {
+ if (g_system->hasTextInClipboard()) {
+ String text = g_system->getTextFromClipboard();
+ for (uint32 i = 0; i < text.size(); ++i) {
+ if (tryInsertChar(text[i], _caretPos))
+ ++_caretPos;
+ }
+ dirty = true;
+ }
+ } else {
+ defaultKeyDownHandler(state, dirty, forcecaret, handled);
+ }
+ break;
+
#ifdef MACOSX
// Let ctrl-a / ctrl-e move the caret to the start / end of the line.
//
diff --git a/gui/widgets/scrollcontainer.cpp b/gui/widgets/scrollcontainer.cpp
index 1b38478c11..9a7792730d 100644
--- a/gui/widgets/scrollcontainer.cpp
+++ b/gui/widgets/scrollcontainer.cpp
@@ -28,13 +28,13 @@
namespace GUI {
-ScrollContainerWidget::ScrollContainerWidget(GuiObject *boss, int x, int y, int w, int h)
- : Widget(boss, x, y, w, h) {
+ScrollContainerWidget::ScrollContainerWidget(GuiObject *boss, int x, int y, int w, int h, uint32 reflowCmd)
+ : Widget(boss, x, y, w, h), CommandSender(nullptr), _reflowCmd(reflowCmd) {
init();
}
-ScrollContainerWidget::ScrollContainerWidget(GuiObject *boss, const Common::String &name)
- : Widget(boss, name) {
+ScrollContainerWidget::ScrollContainerWidget(GuiObject *boss, const Common::String &name, uint32 reflowCmd)
+ : Widget(boss, name), CommandSender(nullptr), _reflowCmd(reflowCmd) {
init();
}
@@ -52,14 +52,14 @@ void ScrollContainerWidget::init() {
void ScrollContainerWidget::recalc() {
int scrollbarWidth = g_gui.xmlEval()->getVar("Globals.Scrollbar.Width", 0);
_limitH = _h;
-
+
//calculate virtual height
const int spacing = g_gui.xmlEval()->getVar("Global.Font.Height", 16); //on the bottom
int h = 0;
int min = spacing, max = 0;
Widget *ptr = _firstWidget;
while (ptr) {
- if (ptr != _verticalScroll) {
+ if (ptr != _verticalScroll && ptr->isVisible()) {
int y = ptr->getAbsY() - getChildY();
min = MIN(min, y - spacing);
max = MAX(max, y + ptr->getHeight() + spacing);
@@ -68,6 +68,8 @@ void ScrollContainerWidget::recalc() {
}
h = max - min;
+ if (h <= _limitH) _scrolledY = 0;
+
_verticalScroll->_numEntries = h;
_verticalScroll->_currentPos = _scrolledY;
_verticalScroll->_entriesPerPage = _limitH;
@@ -115,7 +117,10 @@ void ScrollContainerWidget::reflowLayout() {
ptr->reflowLayout();
ptr = ptr->next();
}
-
+
+ //hide and move widgets, if needed
+ sendCommand(_reflowCmd, 0);
+
//recalculate height
recalc();
@@ -124,7 +129,7 @@ void ScrollContainerWidget::reflowLayout() {
while (ptr) {
int y = ptr->getAbsY() - getChildY();
int h = ptr->getHeight();
- bool visible = true;
+ bool visible = ptr->isVisible();
if (y + h - _scrolledY < 0) visible = false;
if (y - _scrolledY > _limitH) visible = false;
ptr->setVisible(visible);
@@ -132,6 +137,7 @@ void ScrollContainerWidget::reflowLayout() {
}
_verticalScroll->setVisible(_verticalScroll->_numEntries > _limitH); //show when there is something to scroll
+ _verticalScroll->recalc();
}
void ScrollContainerWidget::drawWidget() {
diff --git a/gui/widgets/scrollcontainer.h b/gui/widgets/scrollcontainer.h
index 692c7e3507..c2d47370ee 100644
--- a/gui/widgets/scrollcontainer.h
+++ b/gui/widgets/scrollcontainer.h
@@ -29,16 +29,17 @@
namespace GUI {
-class ScrollContainerWidget: public Widget {
+class ScrollContainerWidget: public Widget, public CommandSender {
ScrollBarWidget *_verticalScroll;
int16 _scrolledX, _scrolledY;
uint16 _limitH;
+ uint32 _reflowCmd;
void recalc();
public:
- ScrollContainerWidget(GuiObject *boss, int x, int y, int w, int h);
- ScrollContainerWidget(GuiObject *boss, const Common::String &name);
+ ScrollContainerWidget(GuiObject *boss, int x, int y, int w, int h, uint32 reflowCmd = 0);
+ ScrollContainerWidget(GuiObject *boss, const Common::String &name, uint32 reflowCmd = 0);
~ScrollContainerWidget();
void init();