diff options
-rw-r--r-- | src/actions/chat.cpp | 16 | ||||
-rw-r--r-- | src/gui/popups/popupmenu.cpp | 98 | ||||
-rw-r--r-- | src/gui/popups/popupmenu.h | 16 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialattacktab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialfriendstab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialguildtab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialguildtab2.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialnavigationtab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialpartytab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialpickuptab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialplayerstab.h | 1 | ||||
-rw-r--r-- | src/gui/widgets/tabs/socialtab.h | 13 | ||||
-rw-r--r-- | src/gui/windows/socialwindow.cpp | 47 | ||||
-rw-r--r-- | src/gui/windows/socialwindow.h | 8 |
14 files changed, 191 insertions, 15 deletions
diff --git a/src/actions/chat.cpp b/src/actions/chat.cpp index add653cb0..3bf231d7c 100644 --- a/src/actions/chat.cpp +++ b/src/actions/chat.cpp @@ -30,6 +30,8 @@ #include "gui/windows/chatwindow.h" +#include "listeners/inputactionreplaylistener.h" + #include "net/charserverhandler.h" #include "net/chathandler.h" #include "net/guildhandler.h" @@ -336,9 +338,10 @@ impHandler(createParty) if (event.args.empty()) { - // TRANSLATORS: create party message - event.tab->chatLog(_("Party name is missing."), - ChatMsgType::BY_SERVER); + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Create party"), + "", + InputAction::CREATE_PARTY); } else { @@ -359,9 +362,10 @@ impHandler(createGuild) if (event.args.empty()) { - // TRANSLATORS: create guild message - event.tab->chatLog(_("Guild name is missing."), - ChatMsgType::BY_SERVER); + // TRANSLATORS: dialog header + inputActionReplayListener.openDialog(_("Create guild"), + "", + InputAction::CREATE_GUILD); } else { diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index fc3a52a77..0630e7844 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -3390,6 +3390,103 @@ void PopupMenu::showAdoptCommands() mBrowserBox->addRow("/adoptchild 'NAME'", _("Adopt child")); } +void PopupMenu::addSocialMenu() +{ + mBrowserBox->clearRows(); + setMousePos(); + const Party *const party = localPlayer->getParty(); + if (party) + { + // TRANSLATORS: popup menu item + // TRANSLATORS: leave party + mBrowserBox->addRow("/leaveparty", _("Leave party")); + } + else + { + // TRANSLATORS: popup menu item + // TRANSLATORS: create party + mBrowserBox->addRow("/createparty", _("Create party")); + } + const Guild *const guild = localPlayer->getGuild(); + if (!guild) + { + // TRANSLATORS: popup menu item + // TRANSLATORS: create guild + mBrowserBox->addRow("/createguild", _("Create guild")); + } + mBrowserBox->addRow("##3---"); +} + +void PopupMenu::showPartyPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + +void PopupMenu::showGuildPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + +void PopupMenu::showAttackPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + +void PopupMenu::showNavigationPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + +void PopupMenu::showPickupPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + +void PopupMenu::showPlayersPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + +void PopupMenu::showFriendsPopup() +{ + addSocialMenu(); + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + showPopup(mX, mY); +} + void PopupMenu::moveUp() { mBrowserBox->moveSelectionUp(); @@ -3402,5 +3499,6 @@ void PopupMenu::moveDown() void PopupMenu::select() { + mBrowserBox->selectSelection(); } diff --git a/src/gui/popups/popupmenu.h b/src/gui/popups/popupmenu.h index 7bd4c085e..9ea2c33b7 100644 --- a/src/gui/popups/popupmenu.h +++ b/src/gui/popups/popupmenu.h @@ -174,6 +174,20 @@ class PopupMenu final : public Popup, public LinkHandler void showEmoteType(); + void showPartyPopup(); + + void showGuildPopup(); + + void showAttackPopup(); + + void showNavigationPopup(); + + void showPickupPopup(); + + void showPlayersPopup(); + + void showFriendsPopup(); + /** * Handles link action. */ @@ -250,6 +264,8 @@ class PopupMenu final : public Popup, public LinkHandler void showAdoptCommands(); + void addSocialMenu(); + bool addBeingMenu(); BrowserBox *mBrowserBox A_NONNULLPOINTER; diff --git a/src/gui/widgets/tabs/socialattacktab.h b/src/gui/widgets/tabs/socialattacktab.h index 31cafd1ff..d83df7d14 100644 --- a/src/gui/widgets/tabs/socialattacktab.h +++ b/src/gui/widgets/tabs/socialattacktab.h @@ -47,6 +47,7 @@ class SocialAttackTab final : public SocialTab // TRANSLATORS: Attack filter tab name in social window. // TRANSLATORS: Should be small setCaption(_("Atk")); + mMenuAction = "attack"; } A_DELETE_COPY(SocialAttackTab) diff --git a/src/gui/widgets/tabs/socialfriendstab.h b/src/gui/widgets/tabs/socialfriendstab.h index b53138e10..12ea761d3 100644 --- a/src/gui/widgets/tabs/socialfriendstab.h +++ b/src/gui/widgets/tabs/socialfriendstab.h @@ -52,6 +52,7 @@ class SocialFriendsTab final : public SocialTab getPlayersAvatars(); setCaption(name); + mMenuAction = "friends"; } A_DELETE_COPY(SocialFriendsTab) diff --git a/src/gui/widgets/tabs/socialguildtab.h b/src/gui/widgets/tabs/socialguildtab.h index 942ce9d59..3ea77d529 100644 --- a/src/gui/widgets/tabs/socialguildtab.h +++ b/src/gui/widgets/tabs/socialguildtab.h @@ -59,6 +59,7 @@ class SocialGuildTab final : public SocialTab, ThemeColorId::GUILD_SOCIAL_TAB_SELECTED_OUTLINE)); createControls(guild, showBackground); + mMenuAction = "guild"; } A_DELETE_COPY(SocialGuildTab) diff --git a/src/gui/widgets/tabs/socialguildtab2.h b/src/gui/widgets/tabs/socialguildtab2.h index c216c6d36..cc887cd32 100644 --- a/src/gui/widgets/tabs/socialguildtab2.h +++ b/src/gui/widgets/tabs/socialguildtab2.h @@ -59,6 +59,7 @@ class SocialGuildTab2 final : public SocialTab, ThemeColorId::GUILD_SOCIAL_TAB_SELECTED_OUTLINE)); createControls(guild, showBackground); + mMenuAction = "guild"; } A_DELETE_COPY(SocialGuildTab2) diff --git a/src/gui/widgets/tabs/socialnavigationtab.h b/src/gui/widgets/tabs/socialnavigationtab.h index e673c689b..839e2cc3e 100644 --- a/src/gui/widgets/tabs/socialnavigationtab.h +++ b/src/gui/widgets/tabs/socialnavigationtab.h @@ -58,6 +58,7 @@ class SocialNavigationTab final : public SocialTab // TRANSLATORS: Navigation tab name in social window. // TRANSLATORS: Should be small setCaption(_("Nav")); + mMenuAction = "navigation"; } A_DELETE_COPY(SocialNavigationTab) diff --git a/src/gui/widgets/tabs/socialpartytab.h b/src/gui/widgets/tabs/socialpartytab.h index d38328728..00a66a9b9 100644 --- a/src/gui/widgets/tabs/socialpartytab.h +++ b/src/gui/widgets/tabs/socialpartytab.h @@ -61,6 +61,7 @@ class SocialPartyTab final : public SocialTab, ThemeColorId::PARTY_SOCIAL_TAB_SELECTED_OUTLINE)); createControls(party, showBackground); + mMenuAction = "party"; } A_DELETE_COPY(SocialPartyTab) diff --git a/src/gui/widgets/tabs/socialpickuptab.h b/src/gui/widgets/tabs/socialpickuptab.h index 7c0c6fd35..fab754ec8 100644 --- a/src/gui/widgets/tabs/socialpickuptab.h +++ b/src/gui/widgets/tabs/socialpickuptab.h @@ -47,6 +47,7 @@ class SocialPickupTab final : public SocialTab // TRANSLATORS: Pickup filter tab name in social window. // TRANSLATORS: Should be small setCaption(_("Pik")); + mMenuAction = "pickup"; } A_DELETE_COPY(SocialPickupTab) diff --git a/src/gui/widgets/tabs/socialplayerstab.h b/src/gui/widgets/tabs/socialplayerstab.h index 50d86e33c..fcd01b6a3 100644 --- a/src/gui/widgets/tabs/socialplayerstab.h +++ b/src/gui/widgets/tabs/socialplayerstab.h @@ -52,6 +52,7 @@ class SocialPlayersTab final : public SocialTab getPlayersAvatars(); setCaption(name); + mMenuAction = "players"; } A_DELETE_COPY(SocialPlayersTab) diff --git a/src/gui/widgets/tabs/socialtab.h b/src/gui/widgets/tabs/socialtab.h index dfd6ad828..9d8469321 100644 --- a/src/gui/widgets/tabs/socialtab.h +++ b/src/gui/widgets/tabs/socialtab.h @@ -80,7 +80,8 @@ class SocialTab notfinal : public Tab mConfirmDialog(nullptr), mScroll(nullptr), mList(nullptr), - mCounterString() + mCounterString(), + mMenuAction("menu") { } @@ -116,12 +117,19 @@ class SocialTab notfinal : public Tab void setCurrent() override final { updateCounter(); + updateMenu(); } void updateCounter() const { if (socialWindow) - socialWindow->setCounter(this, mCounterString); + socialWindow->updateCounter(this, mCounterString); + } + + void updateMenu() const + { + if (socialWindow) + socialWindow->updateMenu(this, mMenuAction); } TextDialog *mInviteDialog; @@ -129,6 +137,7 @@ class SocialTab notfinal : public Tab ScrollArea *mScroll; AvatarListBox *mList; std::string mCounterString; + std::string mMenuAction; }; #endif // GUI_WIDGETS_TABS_SOCIALTAB_H diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp index 2d53536bd..52507a422 100644 --- a/src/gui/windows/socialwindow.cpp +++ b/src/gui/windows/socialwindow.cpp @@ -21,6 +21,8 @@ #include "gui/windows/socialwindow.h" +#include "gui/popups/popupmenu.h" + #include "gui/windows/okdialog.h" #include "gui/windows/setupwindow.h" @@ -70,7 +72,7 @@ SocialWindow::SocialWindow() : mFriends(new SocialFriendsTab(this, _("F"), getOptionBool("showtabbackground"))), // TRANSLATORS: social window button - mCreateButton(new Button(this, _("Create"), "create", this)), + mMenuButton(new Button(this, _("Menu"), "menu", this)), mCountLabel(new Label(this, "1000 / 1000")), mTabs(CREATEWIDGETR(TabbedArea, this)), mMap(nullptr), @@ -98,7 +100,7 @@ void SocialWindow::postInit() if (setupWindow) setupWindow->registerWindowForReset(this); - place(0, 0, mCreateButton); + place(0, 0, mMenuButton); place(0, 1, mCountLabel); place(0, 2, mTabs, 2, 4); @@ -322,6 +324,34 @@ void SocialWindow::action(const ActionEvent &event) mGuildInvited = 0; mGuildAcceptDialog = nullptr; } + else if (eventId == "party") + { + popupMenu->showPartyPopup(); + } + else if (eventId == "guild") + { + popupMenu->showGuildPopup(); + } + else if (eventId == "attack") + { + popupMenu->showAttackPopup(); + } + else if (eventId == "friends") + { + popupMenu->showFriendsPopup(); + } + else if (eventId == "navigation") + { + popupMenu->showNavigationPopup(); + } + else if (eventId == "pickup") + { + popupMenu->showPickupPopup(); + } + else if (eventId == "players") + { + popupMenu->showPlayersPopup(); + } } void SocialWindow::showGuildInvite(const std::string &restrict guildName, @@ -560,16 +590,23 @@ void SocialWindow::widgetResized(const Event &event) mTabs->adjustSize(); } -void SocialWindow::setCounter(const SocialTab *const tab, - const std::string &str) +void SocialWindow::updateCounter(const SocialTab *const tab, + const std::string &counter) { if (mTabs->getSelectedTab() == tab) { - mCountLabel->setCaption(str); + mCountLabel->setCaption(counter); mCountLabel->adjustSize(); } } +void SocialWindow::updateMenu(const SocialTab *const tab, + const std::string &menu) +{ + if (mTabs->getSelectedTab() == tab) + mMenuButton->setActionEventId(menu); +} + void SocialWindow::updateGuildCounter(const int online, const int total) { if (!localPlayer) diff --git a/src/gui/windows/socialwindow.h b/src/gui/windows/socialwindow.h index b2bd1409f..4c2f82068 100644 --- a/src/gui/windows/socialwindow.h +++ b/src/gui/windows/socialwindow.h @@ -117,7 +117,11 @@ class SocialWindow final : public Window, void widgetResized(const Event &event) override final; - void setCounter(const SocialTab *const tab, const std::string &str); + void updateCounter(const SocialTab *const tab, + const std::string &count); + + void updateMenu(const SocialTab *const tab, + const std::string &menu); void updateGuildCounter(const int online = 0, const int total = 0); @@ -151,7 +155,7 @@ class SocialWindow final : public Window, SocialTab *mNavigation A_NONNULLPOINTER; SocialTab *mFriends A_NONNULLPOINTER; - Button *mCreateButton A_NONNULLPOINTER; + Button *mMenuButton A_NONNULLPOINTER; Label *mCountLabel A_NONNULLPOINTER; TabbedArea *mTabs A_NONNULLPOINTER; Map *mMap; |