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