From 072f39dfc98c8b7a5a584b0381972552617f07f0 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Thu, 23 Apr 2015 19:57:11 +0300
Subject: Add incomplete mail window.

---
 src/gui/models/extendednamesmodel.h |   3 ++
 src/gui/windowmenu.cpp              |   4 ++
 src/gui/windows/mailwindow.cpp      | 101 ++++++++++++++++++++++++++++++++++++
 src/gui/windows/mailwindow.h        |  63 ++++++++++++++++++++++
 4 files changed, 171 insertions(+)
 create mode 100644 src/gui/windows/mailwindow.cpp
 create mode 100644 src/gui/windows/mailwindow.h

(limited to 'src/gui')

diff --git a/src/gui/models/extendednamesmodel.h b/src/gui/models/extendednamesmodel.h
index 76f30bf8f..dc0ee770d 100644
--- a/src/gui/models/extendednamesmodel.h
+++ b/src/gui/models/extendednamesmodel.h
@@ -49,6 +49,9 @@ class ExtendedNamesModel notfinal : public ExtendedListModel
         size_t size() A_WARN_UNUSED
         { return mNames.size(); }
 
+        void add(const std::string &str)
+        { mNames.push_back(str); }
+
         void clear();
 
     protected:
diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp
index 7fc8be84c..9a48fec7c 100644
--- a/src/gui/windowmenu.cpp
+++ b/src/gui/windowmenu.cpp
@@ -148,6 +148,10 @@ WindowMenu::WindowMenu(const Widget2 *const widget) :
     addButton(N_("BA"),
         // TRANSLATORS: full button name
         _("Bank"), x, h, InputAction::WINDOW_BANK, false);
+    // TRANSLATORS: short button name for mail window.
+    addButton(N_("MA"),
+        // TRANSLATORS: full button name
+        _("Mail"), x, h, InputAction::WINDOW_MAIL, false),
     // TRANSLATORS: short button name for debug window.
     addButton(N_("DBG"),
         // TRANSLATORS: full button name
diff --git a/src/gui/windows/mailwindow.cpp b/src/gui/windows/mailwindow.cpp
new file mode 100644
index 000000000..774ea655c
--- /dev/null
+++ b/src/gui/windows/mailwindow.cpp
@@ -0,0 +1,101 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gui/windows/mailwindow.h"
+
+#include "net/mailhandler.h"
+
+#include "gui/models/extendednamesmodel.h"
+
+#include "gui/windows/setupwindow.h"
+
+#include "gui/widgets/button.h"
+#include "gui/widgets/containerplacer.h"
+#include "gui/widgets/extendedlistbox.h"
+#include "gui/widgets/label.h"
+#include "gui/widgets/layout.h"
+#include "gui/widgets/layouttype.h"
+
+#include "utils/gettext.h"
+#include "utils/stringutils.h"
+
+#include "debug.h"
+
+MailWindow *mailWindow = nullptr;
+
+MailWindow::MailWindow() :
+    // TRANSLATORS: mail window name
+    Window(_("Mail"), false, nullptr, "mail.xml"),
+    ActionListener(),
+    mMailModel(new ExtendedNamesModel),
+    mListBox(new ExtendedListBox(this, mMailModel, "extendedlistbox.xml")),
+    // TRANSLATORS: mail window button
+    mRefreshButton(new Button(this, _("Refresh"), "refresh", this)),
+    // TRANSLATORS: mail window button
+    mNewButton(new Button(this, _("New"), "new", this)),
+    // TRANSLATORS: mail window button
+    mDeleteButton(new Button(this, _("Delete"), "delete", this)),
+    // TRANSLATORS: mail window button
+    mOpenButton(new Button(this, _("Open"), "open", this))
+{
+    mListBox->postInit();
+    setWindowName("Mail");
+    setCloseButton(true);
+    setResizable(true);
+    setCloseButton(true);
+    setSaveVisible(true);
+    setStickyButtonLock(true);
+
+    if (setupWindow)
+        setupWindow->registerWindowForReset(this);
+
+    setDefaultSize(387, 307, ImageRect::CENTER);
+    setMinWidth(310);
+    setMinHeight(179);
+    center();
+
+    ContainerPlacer placer;
+    placer = getPlacer(0, 0);
+
+    placer(0, 0, mListBox, 4, 4).setPadding(3);
+    placer(4, 0, mRefreshButton);
+    placer(4, 1, mOpenButton);
+    placer(4, 2, mNewButton);
+    placer(4, 3, mDeleteButton);
+
+    Layout &layout = getLayout();
+    layout.setRowHeight(0, LayoutType::SET);
+
+    loadWindowState();
+    enableVisibleSound(true);
+}
+
+MailWindow::~MailWindow()
+{
+}
+
+void MailWindow::action(const ActionEvent &event)
+{
+    const std::string &eventId = event.getId();
+    if (eventId == "refresh")
+    {
+        mailHandler->refresh();
+    }
+}
diff --git a/src/gui/windows/mailwindow.h b/src/gui/windows/mailwindow.h
new file mode 100644
index 000000000..5bab5bbd7
--- /dev/null
+++ b/src/gui/windows/mailwindow.h
@@ -0,0 +1,63 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GUI_WINDOWS_MAILWINDOW_H
+#define GUI_WINDOWS_MAILWINDOW_H
+
+#ifdef EATHENA_SUPPORT
+
+#include "gui/widgets/window.h"
+
+#include "listeners/actionlistener.h"
+
+class Button;
+class ExtendedListBox;
+class ExtendedNamesModel;
+
+/**
+ * A dialog to choose between buying or selling at a shop.
+ *
+ * \ingroup Interface
+ */
+class MailWindow final : public Window,
+                         public ActionListener
+{
+    public:
+        MailWindow();
+
+        A_DELETE_COPY(MailWindow)
+
+        ~MailWindow();
+
+        void action(const ActionEvent &event) override final;
+
+    private:
+        ExtendedNamesModel *mMailModel;
+        ExtendedListBox *mListBox;
+        Button *mRefreshButton;
+        Button *mNewButton;
+        Button *mDeleteButton;
+        Button *mOpenButton;
+};
+
+extern MailWindow *mailWindow;
+
+#endif  // EATHENA_SUPPORT
+#endif  // GUI_WINDOWS_MAILWINDOW_H
-- 
cgit v1.2.3-70-g09d2