From f820365eed7e956e67e6122a8a5ab529e7df9474 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 29 Apr 2015 14:01:37 +0300 Subject: Fix time in mail view window. Also fix possible leaks in mail windows. --- src/gui/windows/mailedit.cpp | 3 ++- src/gui/windows/mailview.cpp | 23 ++++++++++++++++------- src/gui/windows/mailview.h | 3 ++- src/gui/windows/mailwindow.cpp | 22 ++++++++++++++++++++-- src/gui/windows/mailwindow.h | 3 ++- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/gui/windows/mailedit.cpp b/src/gui/windows/mailedit.cpp index ba3972992..5bb669b72 100644 --- a/src/gui/windows/mailedit.cpp +++ b/src/gui/windows/mailedit.cpp @@ -40,6 +40,7 @@ #include "gui/widgets/scrollarea.h" #include "gui/widgets/textfield.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/stringutils.h" @@ -106,7 +107,6 @@ MailEdit::MailEdit() : placer(1, 1, mSubjectField, 3); placer(0, 2, mMoneyLabel); placer(1, 2, mMoneyField, 3); -// placer(0, 3, mItemScrollArea, 3); placer(0, 3, mItemLabel); placer(1, 3, mItemScrollArea, 2, 2); placer(3, 4, mAddButton, 1); @@ -123,6 +123,7 @@ MailEdit::MailEdit() : MailEdit::~MailEdit() { mailEditWindow = nullptr; + delete2(mInventory); } void MailEdit::action(const ActionEvent &event) diff --git a/src/gui/windows/mailview.cpp b/src/gui/windows/mailview.cpp index 4c252c89d..32a207acf 100644 --- a/src/gui/windows/mailview.cpp +++ b/src/gui/windows/mailview.cpp @@ -36,6 +36,7 @@ #include "gui/widgets/layouttype.h" #include "gui/widgets/textfield.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/stringutils.h" @@ -47,9 +48,11 @@ #include "debug.h" +MailView *mailViewWindow = nullptr; + MailView::MailView(const MailMessage *const message) : // TRANSLATORS: mail view window name - Window(_("View mail"), true, nullptr, "mailview.xml"), + Window(_("View mail"), false, nullptr, "mailview.xml"), ActionListener(), mMessage(message), // TRANSLATORS: mail view window button @@ -70,9 +73,8 @@ MailView::MailView(const MailMessage *const message) : mMessageLabel(new Label(this, strprintf("%s %s", _("Message:"), message->text.c_str()))), // TRANSLATORS: mail view window label - mItemLabel(new Label(this, std::string(_("Item:")).append(" "))), - mMessageField(new TextField(this)), - mIcon(new Icon(this, nullptr)) + mItemLabel(nullptr), + mIcon(nullptr) { setWindowName("MailView"); setCloseButton(true); @@ -89,8 +91,6 @@ MailView::MailView(const MailMessage *const message) : ContainerPlacer placer; placer = getPlacer(0, 0); - mMessageField->setWidth(100); - int n = 0; placer(0, n++, mTimeLabel); placer(0, n++, mFromLabel); @@ -111,7 +111,8 @@ MailView::MailView(const MailMessage *const message) : paths.getStringValue("itemIcons").append( item.getDisplay().image), item.getDyeColorsString(1))); - mIcon->setImage(image); + mIcon = new Icon(this, image); + mItemLabel = new Label(this, std::string(_("Item:")).append(" ")); placer(0, n, mItemLabel); placer(1, n++, mIcon); } @@ -125,6 +126,14 @@ MailView::MailView(const MailMessage *const message) : MailView::~MailView() { + if (mIcon) + { + Image *const image = mIcon->getImage(); + if (image) + image->decRef(); + } + delete2(mMessage); + mailViewWindow = nullptr; } void MailView::action(const ActionEvent &event) diff --git a/src/gui/windows/mailview.h b/src/gui/windows/mailview.h index 803dbc3d5..8d1ddde78 100644 --- a/src/gui/windows/mailview.h +++ b/src/gui/windows/mailview.h @@ -56,9 +56,10 @@ class MailView final : public Window, Label *mSubjectLabel; Label *mMessageLabel; Label *mItemLabel; - TextField *mMessageField; Icon *mIcon; }; +extern MailView *mailViewWindow; + #endif // EATHENA_SUPPORT #endif // GUI_WINDOWS_MAILVIEW_H diff --git a/src/gui/windows/mailwindow.cpp b/src/gui/windows/mailwindow.cpp index ef6444405..1d0bbca62 100644 --- a/src/gui/windows/mailwindow.cpp +++ b/src/gui/windows/mailwindow.cpp @@ -51,6 +51,7 @@ MailWindow::MailWindow() : Window(_("Mail"), false, nullptr, "mail.xml"), ActionListener(), mMessages(), + mMessagesMap(), mMailModel(new ExtendedNamesModel), mListBox(new ExtendedListBox(this, mMailModel, "extendedlistbox.xml")), // TRANSLATORS: mail window button @@ -98,6 +99,8 @@ MailWindow::~MailWindow() { delete_all(mMessages); delete2(mMailModel); + delete2(mailViewWindow); + delete2(mailEditWindow); } void MailWindow::action(const ActionEvent &event) @@ -126,19 +129,34 @@ void MailWindow::clear() { delete_all(mMessages); mMessages.clear(); + mMessagesMap.clear(); mMailModel->clear(); mListBox->setSelected(-1); } void MailWindow::addMail(MailMessage *const message) { + if (!message) + return; mMessages.push_back(message); mMailModel->add(strprintf("%s %s", message->unread ? " " : "U", message->title.c_str())); + mMessagesMap[message->id] = message; } -void MailWindow::showMessage(const MailMessage *const mail) +void MailWindow::showMessage(MailMessage *const mail) { - new MailView(mail); + if (!mail) + return; + const std::map::const_iterator + it = mMessagesMap.find(mail->id); + if (it != mMessagesMap.end()) + { + const MailMessage *const mail2 = (*it).second; + mail->time = mail2->time; + mail->strTime = mail2->strTime; + } + delete mailViewWindow; + mailViewWindow = new MailView(mail); } diff --git a/src/gui/windows/mailwindow.h b/src/gui/windows/mailwindow.h index b92b21d9e..236b3c7e1 100644 --- a/src/gui/windows/mailwindow.h +++ b/src/gui/windows/mailwindow.h @@ -54,10 +54,11 @@ class MailWindow final : public Window, void clear(); - void showMessage(const MailMessage *const mail); + void showMessage(MailMessage *const mail); private: std::vector mMessages; + std::map mMessagesMap; ExtendedNamesModel *mMailModel; ExtendedListBox *mListBox; Button *mRefreshButton; -- cgit v1.2.3-60-g2f50