diff options
Diffstat (limited to 'src/gui')
89 files changed, 357 insertions, 162 deletions
diff --git a/src/gui/dialogsmanager.cpp b/src/gui/dialogsmanager.cpp index 2383d2bb0..a33872e5e 100644 --- a/src/gui/dialogsmanager.cpp +++ b/src/gui/dialogsmanager.cpp @@ -26,6 +26,8 @@ #include "configuration.h" #include "settings.h" +#include "being/localplayer.h" + #include "being/playerinfo.h" #include "const/sound.h" @@ -55,9 +57,9 @@ #include "debug.h" -#ifdef WIN32 +#ifdef _WIN32 #undef ERROR -#endif // WIN32 +#endif // _WIN32 Window *deathNotice = nullptr; DialogsManager *dialogsManager = nullptr; @@ -192,6 +194,11 @@ void DialogsManager::attributeChanged(const AttributesT id, const int total = CAST_S32(oldVal); if (newVal >= max && total < max) { + const std::string overweightMessage( + // TRANSLATORS: overweight message in speech bubble + _("Warning: You are overburdened," + " you have difficulty regenerating.")); + /* weightNoticeTime = cur_time + 5; CREATEWIDGETV(weightNotice, OkDialog, std::string(), @@ -208,9 +215,17 @@ void DialogsManager::attributeChanged(const AttributesT id, 260); weightNotice->addActionListener( &weightListener); + */ + if (localPlayer != nullptr) + localPlayer->setSpeech(overweightMessage); } else if (newVal < max && total >= max) { + const std::string underweightMessage( + // TRANSLATORS: overweight message in speech bubble + _("You are no longer overburdened," + " regeneration back to normal.")); + /* weightNoticeTime = cur_time + 5; CREATEWIDGETV(weightNotice, OkDialog, std::string(), @@ -227,6 +242,9 @@ void DialogsManager::attributeChanged(const AttributesT id, 260); weightNotice->addActionListener( &weightListener); + */ + if (localPlayer != nullptr) + localPlayer->setSpeech(underweightMessage); } } } diff --git a/src/gui/fonts/font.cpp b/src/gui/fonts/font.cpp index c39b74f16..acf6ec95d 100644 --- a/src/gui/fonts/font.cpp +++ b/src/gui/fonts/font.cpp @@ -85,6 +85,7 @@ #include "utils/checkutils.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "utils/sdlcheckutils.h" #include "utils/stringutils.h" #include "utils/timer.h" diff --git a/src/gui/fonts/textchunk.cpp b/src/gui/fonts/textchunk.cpp index 0256315c1..d88e175f8 100644 --- a/src/gui/fonts/textchunk.cpp +++ b/src/gui/fonts/textchunk.cpp @@ -33,6 +33,7 @@ #include "resources/image/image.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "utils/sdlcheckutils.h" #include "utils/stringutils.h" diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 5b767048c..85d2d47a7 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -101,6 +101,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" #include "utils/langs.h" +#include "utils/performance.h" #include "utils/sdlsharedhelper.h" #include "utils/timer.h" diff --git a/src/gui/models/colorlistmodel.h b/src/gui/models/colorlistmodel.h index 53844b8a2..9bec07b5c 100644 --- a/src/gui/models/colorlistmodel.h +++ b/src/gui/models/colorlistmodel.h @@ -71,7 +71,7 @@ class ColorListModel final : public ListModel int getNumberOfElements() override final { - return 14; + return NUM_ELEMENTS(COLOR_NAME); } std::string getElementAt(int i) override final diff --git a/src/gui/models/magicschoolmodel.h b/src/gui/models/magicschoolmodel.h index 05b71b2c8..96a433cf6 100644 --- a/src/gui/models/magicschoolmodel.h +++ b/src/gui/models/magicschoolmodel.h @@ -30,8 +30,6 @@ #include "localconsts.h" -#define NUM_ELEMENTS(a) sizeof(a) / sizeof(a[0]) - const char *MAGIC_SCHOOL_TEXT[] = { // TRANSLATORS: magic school diff --git a/src/gui/models/sortlistmodelbuy.h b/src/gui/models/sortlistmodelbuy.h index 573452a1d..8d5b316ae 100644 --- a/src/gui/models/sortlistmodelbuy.h +++ b/src/gui/models/sortlistmodelbuy.h @@ -28,9 +28,7 @@ #include "utils/gettext.h" -#define NUM_ELEMENTS(a) sizeof(a) / sizeof(a[0]) - -static const char *const SORT_NAME_BUY[8] = +static const char *const SORT_NAME_BUY[] = { // TRANSLATORS: buy dialog sort type. N_("unsorted"), @@ -47,7 +45,7 @@ static const char *const SORT_NAME_BUY[8] = // TRANSLATORS: buy dialog sort type. N_("by amount"), // TRANSLATORS: buy dialog sort type. - N_("by type") + N_("by type & slot"), }; class SortListModelBuy final : public ListModel diff --git a/src/gui/models/sortlistmodelinv.h b/src/gui/models/sortlistmodelinv.h index eaf5c323b..fdd6cdb50 100644 --- a/src/gui/models/sortlistmodelinv.h +++ b/src/gui/models/sortlistmodelinv.h @@ -27,9 +27,7 @@ #include "utils/gettext.h" -#define NUM_ELEMENTS(a) sizeof(a) / sizeof(a[0]) - -static const char *const SORT_NAME_INVENTORY[7] = +static const char *const SORT_NAME_INVENTORY[] = { // TRANSLATORS: inventory sort mode N_("default"), @@ -44,7 +42,7 @@ static const char *const SORT_NAME_INVENTORY[7] = // TRANSLATORS: inventory sort mode N_("by amount"), // TRANSLATORS: inventory sort mode - N_("by type") + N_("by type & slot"), }; class SortListModelInv final : public ListModel diff --git a/src/gui/models/targettypemodel.h b/src/gui/models/targettypemodel.h index 4453b6e45..837801600 100644 --- a/src/gui/models/targettypemodel.h +++ b/src/gui/models/targettypemodel.h @@ -48,7 +48,7 @@ class TargetTypeModel final : public ListModel int getNumberOfElements() override final { - return 3; + return NUM_ELEMENTS(TARGET_TYPE_TEXT); } std::string getElementAt(int i) override final diff --git a/src/gui/models/typelistmodel.h b/src/gui/models/typelistmodel.h index d32db564b..78ad39bfa 100644 --- a/src/gui/models/typelistmodel.h +++ b/src/gui/models/typelistmodel.h @@ -33,6 +33,16 @@ #define SERVER_TYPE_INDEX_OFFSET 1 #endif // TMWA_SUPPORT +// No translations here. +const char *SERVER_TYPE_TEXT[] = +{ +#ifdef TMWA_SUPPORT + "TMW Athena", +#endif // defined(TMWA_SUPPORT) + "Hercules", + "Evol2 Hercules", +}; + /** * Server Type List Model */ @@ -49,27 +59,19 @@ class TypeListModel final : public ListModel * Used to get number of line in the list */ int getNumberOfElements() override final A_WARN_UNUSED -#if defined(TMWA_SUPPORT) - { return 3; } -#else // defined(TMWA_SUPPORT) - { return 2; } -#endif // defined(TMWA_SUPPORT) + { + return NUM_ELEMENTS(SERVER_TYPE_TEXT); + } /** * Used to get an element from the list */ - std::string getElementAt(int elementIndex) + std::string getElementAt(int index) override final A_WARN_UNUSED { - switch (elementIndex) - { -#ifdef TMWA_SUPPORT - case 0: return "TMW Athena"; break; -#endif // defined(TMWA_SUPPORT) - case 1 - SERVER_TYPE_INDEX_OFFSET: return "Hercules"; break; - case 2 - SERVER_TYPE_INDEX_OFFSET: return "Evol2 Hercules"; break; - default: return "Unknown"; break; - } + if (0 <= index && index < getNumberOfElements()) + return SERVER_TYPE_TEXT[index]; + return "Unknown"; } }; diff --git a/src/gui/models/updatetypemodel.h b/src/gui/models/updatetypemodel.h index b30160133..5f111a2bd 100644 --- a/src/gui/models/updatetypemodel.h +++ b/src/gui/models/updatetypemodel.h @@ -47,7 +47,7 @@ class UpdateTypeModel final : public ListModel int getNumberOfElements() override final { - return 3; + return NUM_ELEMENTS(UPDATE_TYPE_TEXT); } std::string getElementAt(int i) override final diff --git a/src/gui/palette.cpp b/src/gui/palette.cpp index c98a9416e..f0f97b6f1 100644 --- a/src/gui/palette.cpp +++ b/src/gui/palette.cpp @@ -33,6 +33,11 @@ #include "debug.h" +// required by MSYS2 / Windows +#ifndef M_PI +#define M_PI 3.1415926535897932384626433832795 +#endif + const Color Palette::BLACK = Color(0, 0, 0, 255); Palette::Palettes Palette::mInstances; diff --git a/src/gui/popups/beingpopup.cpp b/src/gui/popups/beingpopup.cpp index caffcadad..639871ba9 100644 --- a/src/gui/popups/beingpopup.cpp +++ b/src/gui/popups/beingpopup.cpp @@ -40,6 +40,7 @@ #include "utils/gettext.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "debug.h" @@ -141,13 +142,13 @@ void BeingPopup::show(const int x, const int y, Being *const b) { ptr = mLabels[num]; // TRANSLATORS: being popup label - ptr->setCaption(strprintf(_("Hungry: %d"), + ptr->setCaption(strprintf(_("Satiation: %d"), info->hungry)); ptr->adjustSize(); num ++; ptr = mLabels[num]; // TRANSLATORS: being popup label - ptr->setCaption(strprintf(_("Intimacy: %d"), + ptr->setCaption(strprintf(_("Loyalty: %d"), info->intimacy)); ptr->adjustSize(); num ++; @@ -160,13 +161,13 @@ void BeingPopup::show(const int x, const int y, Being *const b) { ptr = mLabels[num]; // TRANSLATORS: being popup label - ptr->setCaption(strprintf(_("Hungry: %d"), + ptr->setCaption(strprintf(_("Satiation: %d"), info->hungry)); ptr->adjustSize(); num ++; ptr = mLabels[num]; // TRANSLATORS: being popup label - ptr->setCaption(strprintf(_("Intimacy: %d"), + ptr->setCaption(strprintf(_("Loyalty: %d"), info->intimacy)); ptr->adjustSize(); num ++; diff --git a/src/gui/sdlinput.cpp b/src/gui/sdlinput.cpp index 7eb0746ea..0f176258f 100644 --- a/src/gui/sdlinput.cpp +++ b/src/gui/sdlinput.cpp @@ -90,6 +90,8 @@ PRAGMA48(GCC diagnostic ignored "-Wshadow") #include <SDL_timer.h> PRAGMA48(GCC diagnostic pop) +#include "utils/performance.h" + #include "debug.h" #ifdef __SWITCH__ diff --git a/src/gui/widgets/avatarlistbox.cpp b/src/gui/widgets/avatarlistbox.cpp index c3c1dfd7f..95890c36b 100644 --- a/src/gui/widgets/avatarlistbox.cpp +++ b/src/gui/widgets/avatarlistbox.cpp @@ -48,6 +48,8 @@ #include "resources/map/map.h" +#include "utils/performance.h" + #include "debug.h" int AvatarListBox::instances = 0; diff --git a/src/gui/widgets/basiccontainer.cpp b/src/gui/widgets/basiccontainer.cpp index a3e140d5f..ec4c5c2d6 100644 --- a/src/gui/widgets/basiccontainer.cpp +++ b/src/gui/widgets/basiccontainer.cpp @@ -66,6 +66,7 @@ #include "utils/checkutils.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "render/graphics.h" diff --git a/src/gui/widgets/basiccontainer2.cpp b/src/gui/widgets/basiccontainer2.cpp index 63c98b42a..ab1457744 100644 --- a/src/gui/widgets/basiccontainer2.cpp +++ b/src/gui/widgets/basiccontainer2.cpp @@ -70,6 +70,8 @@ #include "render/graphics.h" +#include "utils/performance.h" + #include "debug.h" BasicContainer2::BasicContainer2(const Widget2 *const widget) : diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index 8503bda75..9b402bb89 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -47,6 +47,7 @@ #include "utils/browserboxtools.h" #include "utils/checkutils.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "utils/timer.h" #include "utils/translation/podict.h" diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp index 7642a122f..62d615dc9 100644 --- a/src/gui/widgets/button.cpp +++ b/src/gui/widgets/button.cpp @@ -83,6 +83,7 @@ #include "render/vertexes/imagecollection.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/checkbox.cpp b/src/gui/widgets/checkbox.cpp index ce5ac28b0..d1bee3665 100644 --- a/src/gui/widgets/checkbox.cpp +++ b/src/gui/widgets/checkbox.cpp @@ -79,6 +79,8 @@ #include "resources/image/image.h" +#include "utils/performance.h" + #include "debug.h" int CheckBox::instances = 0; diff --git a/src/gui/widgets/colorpage.cpp b/src/gui/widgets/colorpage.cpp index 5ed2fb8a0..dfa8b8258 100644 --- a/src/gui/widgets/colorpage.cpp +++ b/src/gui/widgets/colorpage.cpp @@ -29,6 +29,8 @@ #include "render/graphics.h" +#include "utils/performance.h" + #include "debug.h" ColorPage::ColorPage(const Widget2 *const widget, diff --git a/src/gui/widgets/desktop.cpp b/src/gui/widgets/desktop.cpp index 4d21c9983..c68b3bea2 100644 --- a/src/gui/widgets/desktop.cpp +++ b/src/gui/widgets/desktop.cpp @@ -44,6 +44,8 @@ #include "render/graphics.h" +#include "utils/performance.h" + #include "debug.h" Desktop *desktop = nullptr; diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp index e66bdafbe..48433320a 100644 --- a/src/gui/widgets/dropdown.cpp +++ b/src/gui/widgets/dropdown.cpp @@ -39,6 +39,8 @@ #include "resources/imagerect.h" +#include "utils/performance.h" + #include "debug.h" int DropDown::instances = 0; diff --git a/src/gui/widgets/emotepage.cpp b/src/gui/widgets/emotepage.cpp index 33cc1cdc3..ea461356f 100644 --- a/src/gui/widgets/emotepage.cpp +++ b/src/gui/widgets/emotepage.cpp @@ -31,6 +31,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/emoteshortcutcontainer.cpp b/src/gui/widgets/emoteshortcutcontainer.cpp index 789a3bed5..c086c828a 100644 --- a/src/gui/widgets/emoteshortcutcontainer.cpp +++ b/src/gui/widgets/emoteshortcutcontainer.cpp @@ -45,6 +45,7 @@ #include "resources/sprite/animatedsprite.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "debug.h" diff --git a/src/gui/widgets/extendedlistbox.cpp b/src/gui/widgets/extendedlistbox.cpp index 20c13e519..6f6c01fce 100644 --- a/src/gui/widgets/extendedlistbox.cpp +++ b/src/gui/widgets/extendedlistbox.cpp @@ -29,6 +29,8 @@ #include "render/graphics.h" +#include "utils/performance.h" + #include "debug.h" ExtendedListBox::ExtendedListBox(const Widget2 *const widget, diff --git a/src/gui/widgets/guitable.cpp b/src/gui/widgets/guitable.cpp index d3aff69f7..47e00ccc1 100644 --- a/src/gui/widgets/guitable.cpp +++ b/src/gui/widgets/guitable.cpp @@ -35,6 +35,7 @@ #include "utils/delete2.h" #include "utils/dtor.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/icon.cpp b/src/gui/widgets/icon.cpp index f5430a69c..5fd16af1b 100644 --- a/src/gui/widgets/icon.cpp +++ b/src/gui/widgets/icon.cpp @@ -31,6 +31,8 @@ #include "resources/loaders/imageloader.h" +#include "utils/performance.h" + #include "debug.h" Icon::Icon(const Widget2 *const widget, diff --git a/src/gui/widgets/itemcontainer.cpp b/src/gui/widgets/itemcontainer.cpp index 3b8f349e4..0e1bfda59 100644 --- a/src/gui/widgets/itemcontainer.cpp +++ b/src/gui/widgets/itemcontainer.cpp @@ -57,6 +57,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "render/vertexes/imagecollection.h" @@ -863,7 +864,7 @@ void ItemContainer::mouseReleased(MouseEvent &event) if (index == mSelectedIndex || mSelectedIndex == -1) return; if (inventoryWindow != nullptr) - inventoryWindow->combineItems(index, mSelectedIndex); + inventoryWindow->combineItems(mSelectedIndex, index); return; } else if (src == DragDropSource::Cart && diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp index 774cb92e6..888cb7e61 100644 --- a/src/gui/widgets/itemshortcutcontainer.cpp +++ b/src/gui/widgets/itemshortcutcontainer.cpp @@ -51,6 +51,7 @@ #include "const/resources/skill.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "debug.h" diff --git a/src/gui/widgets/label.cpp b/src/gui/widgets/label.cpp index 9ab506ac0..4e10d8819 100644 --- a/src/gui/widgets/label.cpp +++ b/src/gui/widgets/label.cpp @@ -70,6 +70,8 @@ #include "gui/fonts/font.h" +#include "utils/performance.h" + #include "debug.h" Skin *Label::mSkin = nullptr; diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp index 04c02f1ca..6b08174ce 100644 --- a/src/gui/widgets/listbox.cpp +++ b/src/gui/widgets/listbox.cpp @@ -79,6 +79,7 @@ #include "listeners/selectionlistener.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "render/graphics.h" diff --git a/src/gui/widgets/passwordfield.cpp b/src/gui/widgets/passwordfield.cpp index c24c1c41c..893a830c0 100644 --- a/src/gui/widgets/passwordfield.cpp +++ b/src/gui/widgets/passwordfield.cpp @@ -25,6 +25,8 @@ #include "gui/skin.h" +#include "utils/performance.h" + #include "debug.h" PasswordField::PasswordField(const Widget2 *const widget, diff --git a/src/gui/widgets/playerbox.cpp b/src/gui/widgets/playerbox.cpp index b02798a1b..75060e9be 100644 --- a/src/gui/widgets/playerbox.cpp +++ b/src/gui/widgets/playerbox.cpp @@ -34,6 +34,8 @@ #include "resources/image/image.h" +#include "utils/performance.h" + #include "debug.h" PlayerBox::PlayerBox(Widget2 *const widget, diff --git a/src/gui/widgets/popup.cpp b/src/gui/widgets/popup.cpp index c217bd0b7..2bd8f922e 100644 --- a/src/gui/widgets/popup.cpp +++ b/src/gui/widgets/popup.cpp @@ -30,6 +30,7 @@ #include "gui/widgets/windowcontainer.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "render/graphics.h" diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp index 8c7afe1cc..070488bf9 100644 --- a/src/gui/widgets/progressbar.cpp +++ b/src/gui/widgets/progressbar.cpp @@ -31,6 +31,7 @@ #include "gui/fonts/font.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "render/graphics.h" diff --git a/src/gui/widgets/progressindicator.cpp b/src/gui/widgets/progressindicator.cpp index 8dbe2b3b1..1fa579665 100644 --- a/src/gui/widgets/progressindicator.cpp +++ b/src/gui/widgets/progressindicator.cpp @@ -30,6 +30,7 @@ #include "resources/animation/simpleanimation.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/radiobutton.cpp b/src/gui/widgets/radiobutton.cpp index d313d9035..586695665 100644 --- a/src/gui/widgets/radiobutton.cpp +++ b/src/gui/widgets/radiobutton.cpp @@ -79,6 +79,8 @@ #include "resources/image/image.h" +#include "utils/performance.h" + #include "debug.h" int RadioButton::instances = 0; diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp index e054d461d..9e3b60466 100644 --- a/src/gui/widgets/scrollarea.cpp +++ b/src/gui/widgets/scrollarea.cpp @@ -72,6 +72,7 @@ #include "gui/skin.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "render/graphics.h" diff --git a/src/gui/widgets/shoplistbox.cpp b/src/gui/widgets/shoplistbox.cpp index 043b1b5bb..95ba47175 100644 --- a/src/gui/widgets/shoplistbox.cpp +++ b/src/gui/widgets/shoplistbox.cpp @@ -45,6 +45,8 @@ #include "resources/item/shopitem.h" +#include "utils/performance.h" + #include "debug.h" const int ITEM_ICON_SIZE = 32; diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp index 8ff7ac5c7..674be268e 100644 --- a/src/gui/widgets/slider.cpp +++ b/src/gui/widgets/slider.cpp @@ -73,6 +73,7 @@ #include "gui/gui.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "resources/imagerect.h" diff --git a/src/gui/widgets/sliderlist.cpp b/src/gui/widgets/sliderlist.cpp index a1b76cd28..178996d6c 100644 --- a/src/gui/widgets/sliderlist.cpp +++ b/src/gui/widgets/sliderlist.cpp @@ -30,6 +30,8 @@ #include "gui/widgets/button.h" #include "gui/widgets/label.h" +#include "utils/performance.h" + #include "debug.h" static const int buttonWidth = 27; diff --git a/src/gui/widgets/spellshortcutcontainer.cpp b/src/gui/widgets/spellshortcutcontainer.cpp index 14ac43597..1e3b02796 100644 --- a/src/gui/widgets/spellshortcutcontainer.cpp +++ b/src/gui/widgets/spellshortcutcontainer.cpp @@ -39,6 +39,8 @@ #include "gui/windows/shortcutwindow.h" +#include "utils/performance.h" + #include "debug.h" SpellShortcutContainer::SpellShortcutContainer(Widget2 *const widget, diff --git a/src/gui/widgets/staticbrowserbox.cpp b/src/gui/widgets/staticbrowserbox.cpp index 070cd5947..4501a4e70 100644 --- a/src/gui/widgets/staticbrowserbox.cpp +++ b/src/gui/widgets/staticbrowserbox.cpp @@ -47,6 +47,7 @@ #include "utils/browserboxtools.h" #include "utils/checkutils.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "utils/stdmove.h" #include "utils/stringutils.h" #include "utils/translation/podict.h" diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp index c56e114c1..3f053de39 100644 --- a/src/gui/widgets/tabbedarea.cpp +++ b/src/gui/widgets/tabbedarea.cpp @@ -74,6 +74,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/tabs/chat/chattab.cpp b/src/gui/widgets/tabs/chat/chattab.cpp index b1847cde1..b09e57585 100644 --- a/src/gui/widgets/tabs/chat/chattab.cpp +++ b/src/gui/widgets/tabs/chat/chattab.cpp @@ -38,6 +38,7 @@ #include "gui/windows/chatwindow.h" #include "gui/windows/helpwindow.h" +#include "gui/widgets/browserbox.h" #include "gui/widgets/scrollarea.h" #include "gui/widgets/itemlinkhandler.h" #include "gui/widgets/tabbedarea.h" @@ -51,9 +52,9 @@ #include "utils/delete2.h" #include "utils/gettext.h" -#ifdef WIN32 +#ifdef _WIN32 #include <sys/time.h> -#endif // WIN32 +#endif // _WIN32 #include <sstream> @@ -437,6 +438,16 @@ void ChatTab::clearText() mTextOutput->clearRows(); } +const std::list<std::string> &ChatTab::getRows() const +{ + return mTextOutput->getRows(); +} + +bool ChatTab::hasRows() const +{ + return mTextOutput->hasRows(); +} + void ChatTab::handleInput(const std::string &msg) { if (chatHandler) diff --git a/src/gui/widgets/tabs/chat/chattab.h b/src/gui/widgets/tabs/chat/chattab.h index a08429b24..3cab5f54d 100644 --- a/src/gui/widgets/tabs/chat/chattab.h +++ b/src/gui/widgets/tabs/chat/chattab.h @@ -31,12 +31,11 @@ #include "enums/simpletypes/online.h" #include "enums/simpletypes/tryremovecolors.h" -#include "gui/widgets/browserbox.h" - #include "gui/widgets/tabs/tab.h" #include "localconsts.h" +class BrowserBox; class ScrollArea; #define debugMsg(str) \ @@ -115,10 +114,23 @@ class ChatTab notfinal : public Tab /** * Clears the text from the tab + * @see BrowserBox::clearRows */ void clearText(); /** + * Returns lines of text from the widget, + * @see BrowserBox::getRows + */ + const std::list<std::string> &getRows() const A_WARN_UNUSED; + + /** + * true if the widget has any lines + * @see BrowserBox::hasRows + */ + bool hasRows() const A_WARN_UNUSED; + + /** * Handle special commands. Allows a tab to handle commands it * defines itself. * @@ -147,12 +159,6 @@ class ChatTab notfinal : public Tab void saveToLogFile(const std::string &msg) const; - const std::list<std::string> &getRows() const A_WARN_UNUSED - { return mTextOutput->getRows(); } - - bool hasRows() const A_WARN_UNUSED - { return mTextOutput->hasRows(); } - void loadFromLogFile(const std::string &name, const unsigned maxLines); diff --git a/src/gui/widgets/tabs/mapdebugtab.cpp b/src/gui/widgets/tabs/mapdebugtab.cpp index 4084115e5..6589f1a39 100644 --- a/src/gui/widgets/tabs/mapdebugtab.cpp +++ b/src/gui/widgets/tabs/mapdebugtab.cpp @@ -42,6 +42,7 @@ #include "resources/map/map.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "utils/timer.h" diff --git a/src/gui/widgets/tabs/netdebugtab.cpp b/src/gui/widgets/tabs/netdebugtab.cpp index 3f14f1cdd..bbee16d1e 100644 --- a/src/gui/widgets/tabs/netdebugtab.cpp +++ b/src/gui/widgets/tabs/netdebugtab.cpp @@ -30,6 +30,7 @@ #include "net/packetcounters.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "debug.h" diff --git a/src/gui/widgets/tabs/setup_misc.cpp b/src/gui/widgets/tabs/setup_misc.cpp index ea159e8cf..f874497b7 100644 --- a/src/gui/widgets/tabs/setup_misc.cpp +++ b/src/gui/widgets/tabs/setup_misc.cpp @@ -563,13 +563,13 @@ Setup_Misc::Setup_Misc(const Widget2 *const widget) : MainConfig_true); #endif // ANDROID -#ifndef WIN32 +#ifndef _WIN32 // TRANSLATORS: settings option new SetupItemTextField(_("Screenshot directory"), "", "screenshotDirectory3", this, "screenshotDirectory3Event", MainConfig_true, UseBase64_true); -#endif // WIN32 +#endif // _WIN32 // TRANSLATORS: settings option new SetupItemIntTextField(_("Network delay between sub servers"), diff --git a/src/gui/widgets/tabs/setup_video.cpp b/src/gui/widgets/tabs/setup_video.cpp index c980280e8..662e6f356 100644 --- a/src/gui/widgets/tabs/setup_video.cpp +++ b/src/gui/widgets/tabs/setup_video.cpp @@ -239,11 +239,11 @@ void Setup_Video::apply() * See http://libsdl.org/cgi/docwiki.cgi/SDL_SetVideoMode */ -#if defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#if defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) // checks for opengl usage if (intToRenderType(config.getIntValue("opengl")) == RENDER_SOFTWARE) { -#endif // defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#endif // defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) if (!WindowManager::setFullScreen(fullscreen)) { fullscreen = !fullscreen; @@ -267,7 +267,7 @@ void Setup_Video::apply() logger->safeError(errorMsg.str()); } } -#if defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#if defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) } else { @@ -284,7 +284,7 @@ void Setup_Video::apply() nullptr, 260); } -#endif // defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#endif // defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) config.setValue("screen", fullscreen); } @@ -415,7 +415,7 @@ void Setup_Video::action(const ActionEvent &event) if (width != mainGraphics->mActualWidth || height != mainGraphics->mActualHeight) { -#if defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#if defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) if (intToRenderType(config.getIntValue("opengl")) == RENDER_SOFTWARE) { @@ -459,11 +459,11 @@ void Setup_Video::action(const ActionEvent &event) 260); } } -#else // defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#else // defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) mainGraphics->setWindowSize(width, height); WindowManager::doResizeVideo(width, height, false); -#endif // defined(WIN32) || defined(__APPLE__) || defined(ANDROID) +#endif // defined(_WIN32) || defined(__APPLE__) || defined(ANDROID) } config.setValue("oldscreen", config.getBoolValue("screen")); diff --git a/src/gui/widgets/tabs/setup_visual.cpp b/src/gui/widgets/tabs/setup_visual.cpp index 7f0dcdae9..4ddf7ef71 100644 --- a/src/gui/widgets/tabs/setup_visual.cpp +++ b/src/gui/widgets/tabs/setup_visual.cpp @@ -230,12 +230,12 @@ Setup_Visual::Setup_Visual(const Widget2 *const widget) : "vsyncEvent", mVSyncList, 100, MainConfig_true); -#if defined(WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(__APPLE__) // TRANSLATORS: settings option new SetupItemCheckBox(_("Center game window"), "", "centerwindow", this, "centerwindowEvent", MainConfig_true); -#endif // defined(WIN32) || defined(__APPLE__) +#endif // defined(_WIN32) || defined(__APPLE__) // TRANSLATORS: settings option new SetupItemCheckBox(_("Allow screensaver to run"), @@ -269,7 +269,7 @@ void Setup_Visual::apply() { SetupTabScroll::apply(); WindowManager::applyGrabMode(); -#ifndef WIN32 +#ifndef _WIN32 WindowManager::applyScale(); -#endif // WIN32 +#endif // _WIN32 } diff --git a/src/gui/widgets/tabs/socialplayerstab.h b/src/gui/widgets/tabs/socialplayerstab.h index 029a24746..c3f9b4f1c 100644 --- a/src/gui/widgets/tabs/socialplayerstab.h +++ b/src/gui/widgets/tabs/socialplayerstab.h @@ -33,6 +33,7 @@ #include "utils/gettext.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "localconsts.h" diff --git a/src/gui/widgets/tabs/statdebugtab.cpp b/src/gui/widgets/tabs/statdebugtab.cpp index 63ce8aee8..f6d741a3f 100644 --- a/src/gui/widgets/tabs/statdebugtab.cpp +++ b/src/gui/widgets/tabs/statdebugtab.cpp @@ -31,6 +31,7 @@ #include "gui/windows/chatwindow.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "utils/perfstat.h" #include "utils/stringutils.h" #include "utils/timer.h" diff --git a/src/gui/widgets/tabs/tab.cpp b/src/gui/widgets/tabs/tab.cpp index 6e750b2cb..70e348b4c 100644 --- a/src/gui/widgets/tabs/tab.cpp +++ b/src/gui/widgets/tabs/tab.cpp @@ -81,6 +81,7 @@ #include "resources/image/image.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/tabs/targetdebugtab.cpp b/src/gui/widgets/tabs/targetdebugtab.cpp index 4c43d2b29..5db850d5d 100644 --- a/src/gui/widgets/tabs/targetdebugtab.cpp +++ b/src/gui/widgets/tabs/targetdebugtab.cpp @@ -28,6 +28,7 @@ #include "gui/widgets/layouthelper.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "debug.h" diff --git a/src/gui/widgets/textbox.cpp b/src/gui/widgets/textbox.cpp index e1f41855c..9a949a8b1 100644 --- a/src/gui/widgets/textbox.cpp +++ b/src/gui/widgets/textbox.cpp @@ -72,6 +72,8 @@ #include "render/graphics.h" +#include "utils/performance.h" + #include <sstream> #include "debug.h" diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp index 4fd7403d2..d8e9b0268 100644 --- a/src/gui/widgets/textfield.cpp +++ b/src/gui/widgets/textfield.cpp @@ -85,6 +85,7 @@ #include "input/inputmanager.h" #include "utils/copynpaste.h" +#include "utils/performance.h" #include "utils/stringutils.h" #ifndef USE_SDL2 diff --git a/src/gui/widgets/textpreview.cpp b/src/gui/widgets/textpreview.cpp index c1fec888d..4b1187205 100644 --- a/src/gui/widgets/textpreview.cpp +++ b/src/gui/widgets/textpreview.cpp @@ -32,6 +32,8 @@ #include "render/graphics.h" +#include "utils/performance.h" + #include "debug.h" int TextPreview::instances = 0; diff --git a/src/gui/widgets/virtshortcutcontainer.cpp b/src/gui/widgets/virtshortcutcontainer.cpp index a78feae65..fbc18976c 100644 --- a/src/gui/widgets/virtshortcutcontainer.cpp +++ b/src/gui/widgets/virtshortcutcontainer.cpp @@ -39,6 +39,7 @@ #include "gui/windows/inventorywindow.h" +#include "utils/performance.h" #include "utils/stringutils.h" #include "debug.h" diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index 46bb313e0..003044fcc 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -98,6 +98,7 @@ #include "utils/checkutils.h" #include "utils/delete2.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/widgets/windowcontainer.cpp b/src/gui/widgets/windowcontainer.cpp index feb0745db..ac3bf67d6 100644 --- a/src/gui/widgets/windowcontainer.cpp +++ b/src/gui/widgets/windowcontainer.cpp @@ -28,6 +28,7 @@ #include "utils/checkutils.h" #include "utils/dtor.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/windowmanager.cpp b/src/gui/windowmanager.cpp index a198efe8f..d6f7bedbb 100644 --- a/src/gui/windowmanager.cpp +++ b/src/gui/windowmanager.cpp @@ -91,9 +91,9 @@ PRAGMA48(GCC diagnostic ignored "-Wshadow") #include <SDL_image.h> -#ifdef WIN32 +#ifdef _WIN32 #include <SDL_syswm.h> -#endif // WIN32 +#endif // _WIN32 PRAGMA48(GCC diagnostic pop) #include "debug.h" @@ -419,17 +419,17 @@ void WindowManager::setIcon() { #if !defined(ANDROID) && !defined(__SWITCH__) std::string iconFile = branding.getValue("appIcon", "icons/manaplus"); -#ifdef WIN32 +#ifdef _WIN32 iconFile.append(".ico"); -#else // WIN32 +#else // _WIN32 iconFile.append(".png"); -#endif // WIN32 +#endif // _WIN32 iconFile = VirtFs::getPath(iconFile); logger->log("Loading icon from file: %s", iconFile.c_str()); -#ifdef WIN32 +#ifdef _WIN32 static SDL_SysWMinfo pInfo; if (mainGraphics) SDL::getWindowWMInfo(mainGraphics->getWindow(), &pInfo); @@ -458,17 +458,17 @@ void WindowManager::setIcon() if (icon) { -#ifdef WIN64 +#ifdef _WIN64 SetClassLongPtr(windowRef, GCLP_HICON, reinterpret_cast<LONG_PTR>(icon)); -#else // WIN64 +#else // _WIN64 SetClassLong(windowRef, GCL_HICON, reinterpret_cast<LONG>(icon)); -#endif // WIN64 +#endif // _WIN64 } -#else // WIN32 +#else // _WIN32 mIcon = MIMG_Load(iconFile.c_str()); if (mIcon != nullptr) @@ -482,7 +482,7 @@ void WindowManager::setIcon() SDL::SetWindowIcon(mainGraphics->getWindow(), mIcon); } -#endif // WIN32 +#endif // _WIN32 #endif // ANDROID } diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index 1f0d71096..64a70ea58 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -43,6 +43,7 @@ #include "utils/dtor.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "resources/imageset.h" @@ -149,7 +150,7 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : 11, // TRANSLATORS: long button name for cart window. _("Cart"), x, h, InputAction::WINDOW_CART, - Visible_true); + Visible_false); // TRANSLATORS: short button name for map window. addButton(N_("MAP"), 19, @@ -232,7 +233,7 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : 4, // TRANSLATORS: long button name for clan window. _("Clan"), x, h, InputAction::WINDOW_CLAN, - Visible_true); + Visible_false); // TRANSLATORS: short button name for server info window. addButton(N_("SI"), 8, @@ -489,6 +490,8 @@ void WindowMenu::updateButtons() void WindowMenu::loadButtons() { + // windowmenu<N> -> <button text> config keys tell which buttons are + // hidden. This overrides default visibility set in constructor. if (!mSmallWindow) { if (config.getValue("windowmenu0", "").empty()) diff --git a/src/gui/windows/charcreatedialog.cpp b/src/gui/windows/charcreatedialog.cpp index f35eb0874..9dd872bd7 100644 --- a/src/gui/windows/charcreatedialog.cpp +++ b/src/gui/windows/charcreatedialog.cpp @@ -51,6 +51,7 @@ #include "utils/delete2.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/windows/charselectdialog.cpp b/src/gui/windows/charselectdialog.cpp index 66e7a886d..c7a2e0eef 100644 --- a/src/gui/windows/charselectdialog.cpp +++ b/src/gui/windows/charselectdialog.cpp @@ -47,6 +47,7 @@ #include "net/character.h" #include "net/charserverhandler.h" #include "net/logindata.h" +#include "net/loginhandler.h" #ifdef TMWA_SUPPORT #include "net/net.h" #endif // TMWA_SUPPORT @@ -71,9 +72,13 @@ CharSelectDialog::CharSelectDialog(LoginData &data) : ActionListener(), KeyListener(), mLoginData(&data), - // TRANSLATORS: char select dialog. button. - mSwitchLoginButton(new Button(this, _("Switch"), "switch", - BUTTON_SKIN, this)), + mSwitchLoginButton(new Button(this, + (loginHandler != nullptr && loginHandler->getWorlds().size() > 1) + // TRANSLATORS: char select dialog. button. + ? _("Switch World") : _("Logout"), + "switch", + BUTTON_SKIN, + this)), // TRANSLATORS: char select dialog. button. mChangePasswordButton(new Button(this, _("Password"), "change_password", BUTTON_SKIN, this)), @@ -102,11 +107,11 @@ CharSelectDialog::CharSelectDialog(LoginData &data) : placer = getPlacer(0, 0); // disable logout using -S - int row = 0; + int column = 0; if (!settings.options.uniqueSession) - placer(row++, 0, mSwitchLoginButton, 1, 1); - placer(row++, 0, mChangePasswordButton, 1, 1); - placer(row++, 0, mDeleteButton, 1, 1); + placer(column++, 0, mSwitchLoginButton, 1, 1); + placer(column++, 0, mChangePasswordButton, 1, 1); + placer(column++, 0, mDeleteButton, 1, 1); #ifdef TMWA_SUPPORT if (Net::getNetworkType() != ServerType::TMWATHENA) #endif @@ -117,7 +122,7 @@ CharSelectDialog::CharSelectDialog(LoginData &data) : "rename", BUTTON_SKIN, this); - placer(row++, 0, mRenameButton, 1, 1); + placer(column++, 0, mRenameButton, 1, 1); } #ifdef TMWA_SUPPORT if (serverFeatures->havePincode()) @@ -129,9 +134,9 @@ CharSelectDialog::CharSelectDialog(LoginData &data) : "changepin", BUTTON_SKIN, this); - placer(row++, 0, mChangePinButton, 1, 1); + placer(column++, 0, mChangePinButton, 1, 1); } - placer(row++, 0, mInfoButton, 1, 1); + placer(column++, 0, mInfoButton, 1, 1); for (int i = 0; i < CAST_S32(mLoginData->characterSlots); i++) { @@ -307,12 +312,16 @@ void CharSelectDialog::action(const ActionEvent &event) return; if ((mDeleteDialog != nullptr) && mDeleteIndex != -1) { + const Net::Character *const character + = mCharacterEntries[mDeleteIndex]->getCharacter(); if (serverFeatures->haveEmailOnDelete()) { attemptCharacterDelete(mDeleteIndex, mDeleteDialog->getText()); mDeleteDialog = nullptr; } - else if (mDeleteDialog->getText() == LoginDialog::savedPassword) + else if (character != nullptr && + character->dummy != nullptr && + mDeleteDialog->getText() == character->dummy->getName()) { attemptCharacterDelete(mDeleteIndex, ""); mDeleteDialog = nullptr; @@ -323,7 +332,7 @@ void CharSelectDialog::action(const ActionEvent &event) // TRANSLATORS: error header _("Error"), // TRANSLATORS: error message - _("Incorrect password"), + _("Incorrect character name"), // TRANSLATORS: ok dialog button _("OK"), DialogType::ERROR, @@ -497,11 +506,11 @@ void CharSelectDialog::askPasswordForDeletion(const int index) { CREATEWIDGETV(mDeleteDialog, TextDialog, // TRANSLATORS: char deletion question. - _("Enter password for deleting character"), + _("Enter character name to confirm deleting the character"), // TRANSLATORS: email label. - _("Enter password:"), + _("Enter character name:"), this, - true); + false); } mDeleteDialog->setActionEventId("try delete character"); mDeleteDialog->addActionListener(this); @@ -616,7 +625,7 @@ bool CharSelectDialog::selectByName(const std::string &name, void CharSelectDialog::close() { - client->setState(State::SWITCH_LOGIN); + client->setState(State::SWITCH_WORLD); Window::close(); } diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp index 8c445adb4..71e94adc6 100644 --- a/src/gui/windows/chatwindow.cpp +++ b/src/gui/windows/chatwindow.cpp @@ -52,6 +52,7 @@ #include "gui/windows/setupwindow.h" #include "gui/windows/whoisonline.h" +#include "gui/widgets/browserbox.h" #include "gui/widgets/button.h" #include "gui/widgets/chatinput.h" #include "gui/widgets/createwidget.h" @@ -77,6 +78,7 @@ #include "utils/copynpaste.h" #include "utils/delete2.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "utils/translation/podict.h" diff --git a/src/gui/windows/clanwindow.cpp b/src/gui/windows/clanwindow.cpp index 3cd88b0c2..c64c81bb8 100644 --- a/src/gui/windows/clanwindow.cpp +++ b/src/gui/windows/clanwindow.cpp @@ -32,6 +32,7 @@ #include "utils/delete2.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/windows/connectiondialog.cpp b/src/gui/windows/connectiondialog.cpp index df13c6cc9..61392d914 100644 --- a/src/gui/windows/connectiondialog.cpp +++ b/src/gui/windows/connectiondialog.cpp @@ -29,6 +29,7 @@ #include "gui/widgets/progressindicator.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "client.h" diff --git a/src/gui/windows/debugwindow.cpp b/src/gui/windows/debugwindow.cpp index f750f5500..7a875efa5 100644 --- a/src/gui/windows/debugwindow.cpp +++ b/src/gui/windows/debugwindow.cpp @@ -37,6 +37,7 @@ #include "utils/delete2.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/windows/equipmentwindow.cpp b/src/gui/windows/equipmentwindow.cpp index 7aabce1db..f6c3cc643 100644 --- a/src/gui/windows/equipmentwindow.cpp +++ b/src/gui/windows/equipmentwindow.cpp @@ -51,6 +51,7 @@ #include "utils/dtor.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "net/inventoryhandler.h" diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp index ef6cee215..5681e8e04 100644 --- a/src/gui/windows/inventorywindow.cpp +++ b/src/gui/windows/inventorywindow.cpp @@ -1137,38 +1137,53 @@ void InventoryWindow::attributeChanged(const AttributesT id, } } -void InventoryWindow::combineItems(const int index1, - const int index2) +void InventoryWindow::combineItems(const int srcIndex, + const int dstIndex) { if (mInventory == nullptr) return; - const Item *item1 = mInventory->getItem(index1); - if (item1 == nullptr) + const Item *srcItem = mInventory->getItem(srcIndex); + if (srcItem == nullptr) return; - const Item *item2 = mInventory->getItem(index2); - if (item2 == nullptr) + const Item *dstItem = mInventory->getItem(dstIndex); + if (dstItem == nullptr) return; - if (item1->getType() != ItemType::Card) - { - const Item *tmpItem = item1; - item1 = item2; - item2 = tmpItem; - } + // Build up a total all-that-could-go-wrong list of messages. (note: + // this is a small subset of all the checks that hercules does). + // This way insertion will continue to work even if server removes + // some checks (I would prefer if the server sent failure messages + // itself, but it fails silently). + std::string question + = strprintf( + // TRANSLATORS: question dialog message + _("Insert %s into %s?"), + srcItem->getName().c_str(), + dstItem->getName().c_str()); + + if (srcItem->getType() != ItemType::Card) + // TRANSLATORS: failure reason appended to card insert question + (question += ' ') += _(" Item to be inserted may not be insertable."); + + if (dstItem->isEquipped() == Equipped_true) + // TRANSLATORS: failure reason appended to card insert question + (question += ' ') += _(" Destination item is equipped."); + + if (dstItem->isEquipment() == Equipm_false) + // TRANSLATORS: failure reason appended to card insert question + (question += " ") += _("Inserting into non-equipment items may fail."); ConfirmDialog *const confirmDlg = CREATEWIDGETR(ConfirmDialog, // TRANSLATORS: question dialog title _("Insert card request"), - // TRANSLATORS: question dialog message - strprintf(_("Insert %s into %s?"), - item1->getName().c_str(), - item2->getName().c_str()), + question, SOUND_REQUEST, false, Modal_true, nullptr); - insertCardListener.itemIndex = item2->getInvIndex(); - insertCardListener.cardIndex = item1->getInvIndex(); + + insertCardListener.itemIndex = dstItem->getInvIndex(); + insertCardListener.cardIndex = srcItem->getInvIndex(); confirmDlg->addActionListener(&insertCardListener); } diff --git a/src/gui/windows/inventorywindow.h b/src/gui/windows/inventorywindow.h index 96698d72f..0f4c13b46 100644 --- a/src/gui/windows/inventorywindow.h +++ b/src/gui/windows/inventorywindow.h @@ -158,8 +158,10 @@ class InventoryWindow final : public Window, const int64_t oldVal, const int64_t newVal) override final; - void combineItems(const int index1, - const int index2); + /* + * Attempt inserting one item (card) into another + */ + void combineItems(const int srcIndex, const int dstIndex); void moveItemToCraft(const int craftSlot); diff --git a/src/gui/windows/killstats.cpp b/src/gui/windows/killstats.cpp index cfe6886be..210c0d2bc 100644 --- a/src/gui/windows/killstats.cpp +++ b/src/gui/windows/killstats.cpp @@ -36,10 +36,11 @@ #include "being/playerinfo.h" #include "utils/gettext.h" +#include "utils/performance.h" -#ifdef WIN32 +#ifdef _WIN32 #include <sys/time.h> -#endif // WIN32 +#endif // _WIN32 #include "debug.h" diff --git a/src/gui/windows/maileditwindow.cpp b/src/gui/windows/maileditwindow.cpp index e7fad6aab..bd47710dc 100644 --- a/src/gui/windows/maileditwindow.cpp +++ b/src/gui/windows/maileditwindow.cpp @@ -67,7 +67,7 @@ MailEditWindow::MailEditWindow() : // TRANSLATORS: mail edit window label mMoneyLabel(new Label(this, _("Money:"))), // TRANSLATORS: mail edit window label - mItemLabel(new Label(this, _("Item:"))), + mItemLabel(new Label(this, _("Items:"))), // TRANSLATORS: mail edit window label mMessageLabel(new Label(this, _("Message:"))), mToField(new TextField(this, std::string(), LoseFocusOnTab_true, diff --git a/src/gui/windows/mailviewwindow.cpp b/src/gui/windows/mailviewwindow.cpp index e534ce4b4..bddd03f74 100644 --- a/src/gui/windows/mailviewwindow.cpp +++ b/src/gui/windows/mailviewwindow.cpp @@ -50,7 +50,7 @@ MailViewWindow *mailViewWindow = nullptr; MailViewWindow::MailViewWindow(MailMessage *const message, const int itemsCount) : // TRANSLATORS: mail view window name - Window(_("View mail"), Modal_false, nullptr, "mailview.xml"), + Window(_("View Mail"), Modal_false, nullptr, "mailview.xml"), ActionListener(), mMessage(message), mGetAttachButton(new Button(this, @@ -153,6 +153,8 @@ MailViewWindow::~MailViewWindow() { if (mUseMail2) { + if (mDeleted) + delete mMessage; mMessage = nullptr; } else @@ -282,3 +284,16 @@ void MailViewWindow::removeMoney(const int64_t mailId) if (mailWindow != nullptr) mailWindow->refreshMailNames(); } + +bool MailViewWindow::notifyDeleteAndTransferOwnership(const int64_t mailId) +{ + if (mailId != mMessage->id) + return false; + setCaption("View Mail (DELETED)"); + mDeleted = true; + // this mail's ID no longer exists, so it no longer has a defined + // predecessor or successor. + mPrevButton->setEnabled(false); + mNextButton->setEnabled(false); + return true; +} diff --git a/src/gui/windows/mailviewwindow.h b/src/gui/windows/mailviewwindow.h index e275a55ed..edb939b33 100644 --- a/src/gui/windows/mailviewwindow.h +++ b/src/gui/windows/mailviewwindow.h @@ -55,6 +55,13 @@ class MailViewWindow final : public Window, void removeMoney(const int64_t mailId); + /** + * notify view window that mail has been deleted. + * MailViewWindow will delete the message when it is destroyed. + * returns true if mailId is the one being viewed (and thus ownership + * was transfered). + */ + bool notifyDeleteAndTransferOwnership(const int64_t mailId); private: void updateAttachButton(); @@ -75,6 +82,7 @@ class MailViewWindow final : public Window, ItemContainer *mItemContainer; ScrollArea *mItemScrollArea; bool mUseMail2; + bool mDeleted = false; }; extern MailViewWindow *mailViewWindow; diff --git a/src/gui/windows/mailwindow.cpp b/src/gui/windows/mailwindow.cpp index 4f5f9cac5..cd3c8c6cf 100644 --- a/src/gui/windows/mailwindow.cpp +++ b/src/gui/windows/mailwindow.cpp @@ -92,25 +92,38 @@ MailWindow::MailWindow() : if (setupWindow != nullptr) setupWindow->registerWindowForReset(this); - setDefaultSize(310, 180, ImagePosition::CENTER, 0, 0); - setMinWidth(310); - setMinHeight(250); - center(); - + // use line wrapping of mail subjects, instead. mListScrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER); - - ContainerPlacer placer(nullptr, nullptr); - placer = getPlacer(0, 0); - - placer(0, 0, mListScrollArea, 4, 5).setPadding(3); - placer(4, 0, mRefreshButton, 1, 1); - placer(4, 1, mOpenButton, 1, 1); - placer(4, 2, mNewButton, 1, 1); - placer(4, 3, mDeleteButton, 1, 1); - placer(4, 4, mReturnButton, 1, 1); + // set reasonable minimum width for calculations below + mListScrollArea->setWidth(200); + + // at 0,0 and spawns/spans 4 columns and 6 rows + place(0, 0, mListScrollArea, 1, 6).setPadding(3); + // at column 5 and row 0... + place(1, 0, mRefreshButton, 1, 1); + place(1, 1, mOpenButton, 1, 1); + place(1, 2, mNewButton, 1, 1); + // Leave intentional gap in grid so that the button column (and thus, + // the whole window) can be resized without resizing any of the buttons. + // note: the empty cell still seems to enforce some padding, but this + // is fine. + place(1, 4, mDeleteButton, 1, 1); + place(1, 5, mReturnButton, 1, 1); Layout &layout = getLayout(); - layout.setRowHeight(0, LayoutType::SET); + // scrollarea column and 4th row eat all remaining available screen space. + layout.setColWidth(0, LayoutType::SET); + layout.setRowHeight(3, LayoutType::SET); + + // Enforce a minimum size. + int width = 0; + int height = 0; + layout.reflow(width, height); + setContentSize(width, height); + setMinWidth(getWidth()); + setMinHeight(getHeight()); + setDefaultSize(getWidth(), getHeight(), ImagePosition::CENTER, 0, 0); + center(); loadWindowState(); enableVisibleSound(true); @@ -244,7 +257,14 @@ void MailWindow::removeMail(const int64_t id) if ((message != nullptr) && message->id == id) { mMessages.erase(it); - delete message; + // passes ownership of message pointer to mailViewWindow, + // which will signal to reader that the mail is deleted and + // will do the final delete of the message upon destruction. + if (mailViewWindow == nullptr || + !mailViewWindow->notifyDeleteAndTransferOwnership(id)) + { + delete message; + } break; } } @@ -255,6 +275,13 @@ void MailWindow::removeMail(const int64_t id) if (message != nullptr) mMailModel->add(getMailHeader(message)); } + + // if player deleted the selected mail, then selection does not change + // (selects next one in list). However, if they deleted the last one, + // then we go to the previous one in list. + const auto lastIndex = mMailModel->getNumberOfElements() - 1; + if (mListBox->getSelected() > lastIndex) + mListBox->setSelected(lastIndex); } void MailWindow::showMessage(MailMessage *const mail, diff --git a/src/gui/windows/minimap.cpp b/src/gui/windows/minimap.cpp index 40f650807..85e2c9dbf 100644 --- a/src/gui/windows/minimap.cpp +++ b/src/gui/windows/minimap.cpp @@ -54,6 +54,7 @@ #include "utils/gettext.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "utils/sdlcheckutils.h" #include "utils/stdmove.h" diff --git a/src/gui/windows/ministatuswindow.cpp b/src/gui/windows/ministatuswindow.cpp index 7e12aac0c..8b5159333 100644 --- a/src/gui/windows/ministatuswindow.cpp +++ b/src/gui/windows/ministatuswindow.cpp @@ -50,6 +50,7 @@ #include "utils/dtor.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/windows/npcdialog.cpp b/src/gui/windows/npcdialog.cpp index 2d4b58593..2061439af 100644 --- a/src/gui/windows/npcdialog.cpp +++ b/src/gui/windows/npcdialog.cpp @@ -76,6 +76,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include <sstream> diff --git a/src/gui/windows/outfitwindow.cpp b/src/gui/windows/outfitwindow.cpp index 42d689802..0f9761a92 100644 --- a/src/gui/windows/outfitwindow.cpp +++ b/src/gui/windows/outfitwindow.cpp @@ -48,6 +48,7 @@ #include "gui/widgets/layout.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "resources/inventory/inventory.h" diff --git a/src/gui/windows/serverdialog.cpp b/src/gui/windows/serverdialog.cpp index 1b6f3ae73..c28032404 100644 --- a/src/gui/windows/serverdialog.cpp +++ b/src/gui/windows/serverdialog.cpp @@ -49,12 +49,13 @@ #include "utils/delete2.h" #include "utils/foreach.h" #include "utils/langs.h" +#include "utils/performance.h" #include "debug.h" -#ifdef WIN32 +#ifdef _WIN32 #undef ERROR -#endif // WIN32 +#endif // _WIN32 static const int MAX_SERVERLIST = 15; diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp index 43c5c2b29..cc48d4806 100644 --- a/src/gui/windows/shopwindow.cpp +++ b/src/gui/windows/shopwindow.cpp @@ -82,6 +82,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #ifdef TMWA_SUPPORT #include "resources/iteminfo.h" diff --git a/src/gui/windows/shortcutwindow.cpp b/src/gui/windows/shortcutwindow.cpp index 5a0e83755..93afda6ad 100644 --- a/src/gui/windows/shortcutwindow.cpp +++ b/src/gui/windows/shortcutwindow.cpp @@ -38,6 +38,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" +#include "utils/performance.h" #include "debug.h" diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp index c7556e58f..0c9f16f5c 100644 --- a/src/gui/windows/socialwindow.cpp +++ b/src/gui/windows/socialwindow.cpp @@ -44,6 +44,8 @@ #include "net/tmwa/guildmanager.h" #endif // TMWA_SUPPORT +#include "utils/performance.h" + #include "debug.h" SocialWindow *socialWindow = nullptr; diff --git a/src/gui/windows/updaterwindow.cpp b/src/gui/windows/updaterwindow.cpp index 55d0ba2b0..f15263d09 100644 --- a/src/gui/windows/updaterwindow.cpp +++ b/src/gui/windows/updaterwindow.cpp @@ -53,6 +53,7 @@ #include "utils/delete2.h" #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include <sys/stat.h> @@ -430,11 +431,11 @@ void UpdaterWindow::loadNews() mScrollArea->setVerticalScrollAmount(0); } -void UpdaterWindow::loadPatch() +void UpdaterWindow::checkClientVersion() { if (mMemoryBuffer == nullptr) { - logger->log1("Couldn't load patch"); + logger->log1("Couldn't check client version: null buffer"); return; } @@ -443,13 +444,17 @@ void UpdaterWindow::loadPatch() realloc(mMemoryBuffer, mDownloadedBytes + 1)); if (mMemoryBuffer == nullptr) { - logger->log1("Couldn't load patch"); + logger->log1("Couldn't check client version: null buffer"); return; } mMemoryBuffer[mDownloadedBytes] = '\0'; std::string version; + // The version check file (latest.txt) is composed of two lines: + // first, the "machine readable" version (for alphanumeric comparison) + // and second, the human readable version, to be displayed. + // Tokenize and add each line separately char *line = strtok(mMemoryBuffer, "\n"); if (line != nullptr) @@ -460,6 +465,8 @@ void UpdaterWindow::loadPatch() line = strtok(nullptr, "\n"); if (line != nullptr) { + // if you wonder why this line is above the one below, it's + // because add to top is true. mBrowserBox->addRow(strprintf("##9 Latest client version: " "##6ManaVerse %s##0", line), true); } @@ -470,7 +477,7 @@ void UpdaterWindow::loadPatch() #if defined(ANDROID) const std::string url = "androidDownloadUrl"; const std::string text = "androidDownloadUrl"; -#elif defined(WIN32) +#elif defined(_WIN32) const std::string url = "windowsDownloadUrl"; const std::string text = "windowsDownloadUrl"; #else // defined(ANDROID) @@ -588,15 +595,16 @@ void UpdaterWindow::download() if (mDownloadStatus == UpdateDownloadStatus::UPDATE_PATCH) { mDownload = new Net::Download(this, - branding.getStringValue("updateMirror1") + mCurrentFile, + urlJoin(branding.getStringValue("updateMirror1"), mCurrentFile), &updateProgress, true, false, mValidateXml); + for (int f = 2; f < 8; f ++) { const std::string url = branding.getStringValue( "updateMirror" + toString(f)); if (!url.empty()) - mDownload->addMirror(url + mCurrentFile); + mDownload->addMirror(urlJoin(url, mCurrentFile)); } } else @@ -610,9 +618,9 @@ void UpdaterWindow::download() mDownloadStatus == UpdateDownloadStatus::UPDATE_RESOURCES2) { const std::string str = urlJoin(mUpdateServerPath, mCurrentFile); - mDownload->addMirror(updateServer3 + str); - mDownload->addMirror(updateServer4 + str); - mDownload->addMirror(updateServer5 + str); + mDownload->addMirror(urlJoin(updateServer3, str)); + mDownload->addMirror(urlJoin(updateServer4, str)); + mDownload->addMirror(urlJoin(updateServer5, str)); } else { @@ -824,10 +832,9 @@ void UpdaterWindow::logic() case UpdateDownloadStatus::UPDATE_PATCH: if (mDownloadComplete) { - // Parse current memory buffer as news and dispose of the data - loadPatch(); + checkClientVersion(); - mUpdateHost = updateServer2 + mUpdateServerPath; + mUpdateHost = urlJoin(updateServer2, mUpdateServerPath); mUpdatesDir = pathJoin(mUpdatesDir, "fix"); mCurrentFile = xmlUpdateFile; mValidateXml = true; diff --git a/src/gui/windows/updaterwindow.h b/src/gui/windows/updaterwindow.h index d08870e0e..7c5cc114c 100644 --- a/src/gui/windows/updaterwindow.h +++ b/src/gui/windows/updaterwindow.h @@ -106,7 +106,7 @@ class UpdaterWindow final : public Window, */ void loadNews(); - void loadPatch(); + void checkClientVersion(); void action(const ActionEvent &event) override final; diff --git a/src/gui/windows/whoisonline.cpp b/src/gui/windows/whoisonline.cpp index ca939df47..2cb1c1e16 100644 --- a/src/gui/windows/whoisonline.cpp +++ b/src/gui/windows/whoisonline.cpp @@ -62,6 +62,7 @@ #include "utils/foreach.h" #include "utils/gettext.h" +#include "utils/performance.h" #include "utils/sdlhelper.h" #ifdef TMWA_SUPPORT @@ -250,33 +251,22 @@ void WhoIsOnline::updateWindow(size_t numOnline) std::sort(mFriends.begin(), mFriends.end(), nameCompare); std::sort(mNeutral.begin(), mNeutral.end(), nameCompare); std::sort(mDisregard.begin(), mDisregard.end(), nameCompare); - bool addedFromSection(false); FOR_EACH (STD_VECTOR<OnlinePlayer*>::const_iterator, it, mFriends) - { mBrowserBox->addRow((*it)->getText(), false); - addedFromSection = true; - } - if (addedFromSection == true) - { + + if (!mFriends.empty()) mBrowserBox->addRow("---", false); - addedFromSection = false; - } + FOR_EACH (STD_VECTOR<OnlinePlayer*>::const_iterator, it, mEnemy) - { mBrowserBox->addRow((*it)->getText(), false); - addedFromSection = true; - } - if (addedFromSection == true) - { + + if (!mEnemy.empty()) mBrowserBox->addRow("---", false); - addedFromSection = false; - } + FOR_EACH (STD_VECTOR<OnlinePlayer*>::const_iterator, it, mNeutral) - { mBrowserBox->addRow((*it)->getText(), false); - addedFromSection = true; - } - if (addedFromSection == true && !mDisregard.empty()) + + if (!mNeutral.empty() && !mDisregard.empty()) mBrowserBox->addRow("---", false); FOR_EACH (STD_VECTOR<OnlinePlayer*>::const_iterator, it, mDisregard) |