1 /*
2 * The ManaPlus Client
3 * Copyright (C) 2009 The Mana World Development Team
4 * Copyright (C) 2011-2019 The ManaPlus Developers
5 * Copyright (C) 2009-2021 Andrei Karas
6 *
7 * This file is part of The ManaPlus Client.
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23 #include "gui/windows/editdialog.h"
24
25 #include "gui/widgets/button.h"
26
27 #include "utils/foreach.h"
28 #include "utils/gettext.h"
29
30 #include "debug.h"
31
EditDialog(const std::string & restrict title,const std::string & restrict msg,const std::string & restrict eventOk,const int width,Window * const parent,const Modal modal)32 EditDialog::EditDialog(const std::string &restrict title,
33 const std::string &restrict msg,
34 const std::string &restrict eventOk,
35 const int width,
36 Window *const parent,
37 const Modal modal) :
38 Window(title, modal, parent, "edit.xml"),
39 ActionListener(),
40 mEventOk(eventOk),
41 mTextField(new TextField(this, std::string(), LoseFocusOnTab_true,
42 nullptr, std::string(), false))
43 {
44 mDefaultWidth = width;
45 mTextField->setText(msg);
46 }
47
postInit()48 void EditDialog::postInit()
49 {
50 Window::postInit();
51 Button *const okButton = new Button(this,
52 // TRANSLATORS: edit dialog label
53 _("OK"),
54 mEventOk,
55 BUTTON_SKIN,
56 this);
57
58 const int pad = getPadding();
59 const int pad2 = pad * 2;
60 mTextField->setPosition(pad, pad);
61 mTextField->setWidth(mDefaultWidth - pad2);
62 const int buttonPadding = getOption("buttonPadding", 8)
63 + mTextField->getHeight();
64 setContentSize(mDefaultWidth, okButton->getHeight()
65 + buttonPadding + pad2);
66 okButton->setPosition((mDefaultWidth - okButton->getWidth()) / 2,
67 buttonPadding + pad);
68
69 add(mTextField);
70 add(okButton);
71
72 center();
73 setVisible(Visible_true);
74 okButton->requestFocus();
75 }
76
action(const ActionEvent & event)77 void EditDialog::action(const ActionEvent &event)
78 {
79 // Proxy button events to our listeners
80 FOR_EACH (ActionListenerIterator, i, mActionListeners)
81 (*i)->action(event);
82
83 if (event.getId() == mEventOk)
84 scheduleDelete();
85 }
86