From 0009672b80c666b8a7ddc0b7c36951eba1fa2c35 Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Sat, 21 Aug 2010 22:56:44 +0200 Subject: Fixing segmentation fault and improving gui for party MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Segmentation fault happened if a player left a party while other party members are offline. * While creating a party the key input is not anymore reused for game play. * The vertical scrollbar is only shown when needed. * The default height was raised, because before much of the functionality was hidden. Signed-off-by: Thorbjørn Lindeijer --- src/gui/socialwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gui/socialwindow.cpp') diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp index 098ecbc5..f6e1d0aa 100644 --- a/src/gui/socialwindow.cpp +++ b/src/gui/socialwindow.cpp @@ -186,7 +186,7 @@ public: mScroll = new ScrollArea(mList); mScroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_AUTO); - mScroll->setVerticalScrollPolicy(gcn::ScrollArea::SHOW_ALWAYS); + mScroll->setVerticalScrollPolicy(gcn::ScrollArea::SHOW_AUTO); } ~PartyTab() @@ -321,7 +321,7 @@ SocialWindow::SocialWindow() : setCloseButton(true); setMinWidth(120); setMinHeight(55); - setDefaultSize(590, 200, 150, 60); + setDefaultSize(590, 200, 150, 124); setupWindow->registerWindowForReset(this); loadWindowState(); -- cgit v1.2.3-70-g09d2 From 38474d0c3c14cf595aed61ee1e4a69d48abbcf92 Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Tue, 24 Aug 2010 17:24:14 +0200 Subject: Giving functionality to invite in socialwindow and allow enter key in textdialog Signed-off-by: Jared Adams --- src/gui/socialwindow.cpp | 3 --- src/gui/textdialog.cpp | 2 ++ src/net/tmwa/partyhandler.cpp | 16 +++++++++++----- 3 files changed, 13 insertions(+), 8 deletions(-) (limited to 'src/gui/socialwindow.cpp') diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp index f6e1d0aa..7a13f96b 100644 --- a/src/gui/socialwindow.cpp +++ b/src/gui/socialwindow.cpp @@ -203,9 +203,6 @@ public: { std::string name = mInviteDialog->getText(); Net::getPartyHandler()->invite(name); - - localChatTab->chatLog(strprintf(_("Invited user %s to party."), - name.c_str()), BY_SERVER); mInviteDialog = NULL; } else if (event.getId() == "~do invite") diff --git a/src/gui/textdialog.cpp b/src/gui/textdialog.cpp index 3e3aafe2..6faa1162 100644 --- a/src/gui/textdialog.cpp +++ b/src/gui/textdialog.cpp @@ -38,6 +38,8 @@ TextDialog::TextDialog(const std::string &title, const std::string &msg, mOkButton = new Button(_("OK"), "OK", this); gcn::Button *cancelButton = new Button(_("Cancel"), "CANCEL", this); + mTextField->addActionListener(this); + place(0, 0, textLabel, 4); place(0, 1, mTextField, 4); place(2, 2, mOkButton); diff --git a/src/net/tmwa/partyhandler.cpp b/src/net/tmwa/partyhandler.cpp index a92a27df..76108e9c 100644 --- a/src/net/tmwa/partyhandler.cpp +++ b/src/net/tmwa/partyhandler.cpp @@ -327,18 +327,24 @@ void PartyHandler::invite(Player *player) void PartyHandler::invite(const std::string &name) { - if (partyTab) + Being *invitee = beingManager->findBeingByName(name, Being::PLAYER); + + if (invitee) { - partyTab->chatLog(_("Inviting like this isn't supported at the moment."), - BY_SERVER); + invite((Player *)invitee); + partyTab->chatLog(strprintf(_("Invited user %s to party."), + name.c_str()), BY_SERVER); + } + else if (partyTab) + { + partyTab->chatLog(strprintf(_("Inviting failed, because you can't see " + "a player called %s."), name.c_str()), BY_SERVER); } else { localChatTab->chatLog(_("You can only inivte when you are in a party!"), BY_SERVER); } - - // TODO? } void PartyHandler::inviteResponse(const std::string &inviter, bool accept) -- cgit v1.2.3-70-g09d2 From 627e1271f0ac2e7bd95a83f521ecbcf1b554ba80 Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Wed, 25 Aug 2010 20:38:06 +0200 Subject: Adding autoComplete for invite Signed-off-by: Jared Adams --- src/gui/chat.h | 1 + src/gui/socialwindow.cpp | 17 ++++++++++++----- src/gui/textdialog.cpp | 10 +++++++--- src/gui/textdialog.h | 2 +- src/gui/widgets/shoplistbox.h | 2 +- src/gui/widgets/textfield.cpp | 16 +++++++++++++++- src/gui/widgets/textfield.h | 11 +++++++++++ 7 files changed, 48 insertions(+), 11 deletions(-) (limited to 'src/gui/socialwindow.cpp') diff --git a/src/gui/chat.h b/src/gui/chat.h index e49d02c9..b0d91556 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -177,6 +177,7 @@ class ChatWindow : public Window, protected: friend class ChatTab; friend class WhisperTab; + friend class TextField; /** Remove the given tab from the window */ void removeTab(ChatTab *tab); diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp index 7a13f96b..3d8afa44 100644 --- a/src/gui/socialwindow.cpp +++ b/src/gui/socialwindow.cpp @@ -121,12 +121,16 @@ public: if (event.getId() == "do invite") { std::string name = mInviteDialog->getText(); - Net::getGuildHandler()->invite(mGuild->getId(), name); - localChatTab->chatLog(strprintf(_("Invited user %s to guild %s."), + if (!name.empty()) + { + Net::getGuildHandler()->invite(mGuild->getId(), name); + localChatTab->chatLog(strprintf(_("Invited user %s to guild %s."), name.c_str(), mGuild->getName().c_str()), BY_SERVER); + } + mInviteDialog = NULL; } else if (event.getId() == "~do invite") @@ -153,7 +157,7 @@ protected: mInviteDialog = new TextDialog(_("Member Invite to Guild"), strprintf(_("Who would you like to invite to guild %s?"), mGuild->getName().c_str()), - socialWindow); + socialWindow, true); mInviteDialog->setActionEventId("do invite"); mInviteDialog->addActionListener(this); } @@ -202,7 +206,10 @@ public: if (event.getId() == "do invite") { std::string name = mInviteDialog->getText(); - Net::getPartyHandler()->invite(name); + + if (!name.empty()) + Net::getPartyHandler()->invite(name); + mInviteDialog = NULL; } else if (event.getId() == "~do invite") @@ -229,7 +236,7 @@ protected: mInviteDialog = new TextDialog(_("Member Invite to Party"), strprintf(_("Who would you like to invite to party %s?"), mParty->getName().c_str()), - socialWindow); + socialWindow, true); mInviteDialog->setActionEventId("do invite"); mInviteDialog->addActionListener(this); } diff --git a/src/gui/textdialog.cpp b/src/gui/textdialog.cpp index 6faa1162..28792a0b 100644 --- a/src/gui/textdialog.cpp +++ b/src/gui/textdialog.cpp @@ -30,14 +30,18 @@ int TextDialog::instances = 0; TextDialog::TextDialog(const std::string &title, const std::string &msg, - Window *parent): - Window(title, true, parent), - mTextField(new TextField) + Window *parent, bool autoCompleteEnabled): + Window(title, true, parent) { gcn::Label *textLabel = new Label(msg); mOkButton = new Button(_("OK"), "OK", this); gcn::Button *cancelButton = new Button(_("Cancel"), "CANCEL", this); + // In TextField the escape key will either cause autoComplete or lose focus + mTextField = new TextField("", ! autoCompleteEnabled); + if (autoCompleteEnabled) + mTextField->setAutoComplete(true); + mTextField->addActionListener(this); place(0, 0, textLabel, 4); diff --git a/src/gui/textdialog.h b/src/gui/textdialog.h index d4c611cc..aa8fcf8f 100644 --- a/src/gui/textdialog.h +++ b/src/gui/textdialog.h @@ -42,7 +42,7 @@ public: * @see Window::Window */ TextDialog(const std::string &title, const std::string &msg, - Window *parent = NULL); + Window *parent = NULL, bool autoCompleteEnabled = false); ~TextDialog(); diff --git a/src/gui/widgets/shoplistbox.h b/src/gui/widgets/shoplistbox.h index 9232a5a4..087bdd53 100644 --- a/src/gui/widgets/shoplistbox.h +++ b/src/gui/widgets/shoplistbox.h @@ -48,7 +48,7 @@ class ShopListBox : public ListBox ShopListBox(gcn::ListModel *listModel, ShopItems *shopListModel); /** - * Deconstructor + * Destructor */ ~ShopListBox(); diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp index 4453f522..60a1f57f 100644 --- a/src/gui/widgets/textfield.cpp +++ b/src/gui/widgets/textfield.cpp @@ -21,9 +21,11 @@ #include "gui/widgets/textfield.h" +#include "beingmanager.h" #include "configuration.h" #include "graphics.h" +#include "gui/chat.h" #include "gui/palette.h" #include "gui/sdlinput.h" #include "gui/theme.h" @@ -43,7 +45,8 @@ ImageRect TextField::skin; TextField::TextField(const std::string &text, bool loseFocusOnTab): gcn::TextField(text), - mNumeric(false) + mNumeric(false), + mAutoComplete(false) { setFrameSize(2); @@ -246,6 +249,17 @@ void TextField::keyPressed(gcn::KeyEvent &keyEvent) break; case Key::TAB: + if (mAutoComplete && mText.size() > 0) + { + std::vector names; + beingManager->getPlayerNames(names, false); + std::string newName = chatWindow->autoComplete(names, mText); + if (newName != "") + { + setText(newName); + setCaretPosition(mText.size()); + } + } if (mLoseFocusOnTab) return; break; diff --git a/src/gui/widgets/textfield.h b/src/gui/widgets/textfield.h index 58e37f5c..1e6df9d6 100644 --- a/src/gui/widgets/textfield.h +++ b/src/gui/widgets/textfield.h @@ -90,6 +90,16 @@ class TextField : public gcn::TextField */ int getValue() const; + /** + * Set if the tabulator key causes auto complete + */ + void setAutoComplete(bool b ) {mAutoComplete = b;} + + /** + * Returns if the tabulator key causes auto complete + */ + bool getAutoComplete() {return mAutoComplete;} + private: void handlePaste(); @@ -100,6 +110,7 @@ class TextField : public gcn::TextField int mMinimum; int mMaximum; bool mLoseFocusOnTab; + bool mAutoComplete; }; #endif -- cgit v1.2.3-70-g09d2 From ef9eec73b3cc96ebecdc061e9e956a462fdcc19f Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Fri, 27 Aug 2010 19:03:18 +0200 Subject: Changing findBeingByName so that it searches case insensitive Adding error message when trying to create a party with to long name. Removing non-existing files from C::B project. Signed-off-by: Jared Adams --- mana.cbp | 2 -- src/beingmanager.cpp | 2 +- src/gui/socialwindow.cpp | 6 ++++-- src/net/tmwa/partyhandler.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/gui/socialwindow.cpp') diff --git a/mana.cbp b/mana.cbp index 459a660c..c855a9a9 100644 --- a/mana.cbp +++ b/mana.cbp @@ -137,7 +137,6 @@ - @@ -369,7 +368,6 @@ - diff --git a/src/beingmanager.cpp b/src/beingmanager.cpp index 656b297e..931e4579 100644 --- a/src/beingmanager.cpp +++ b/src/beingmanager.cpp @@ -165,7 +165,7 @@ Being *BeingManager::findBeingByName(const std::string &name, i != i_end; ++i) { Being *being = (*i); - if (being->getName() == name && + if (!compareStrI(being->getName(),name) && (type == Being::UNKNOWN || type == being->getType())) return being; } diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp index 3d8afa44..290fd557 100644 --- a/src/gui/socialwindow.cpp +++ b/src/gui/socialwindow.cpp @@ -498,7 +498,8 @@ void SocialWindow::action(const gcn::ActionEvent &event) if (name.size() > 16) { - // TODO : State too many characters in input. + localChatTab->chatLog(_("Creating guild failed, please choose a " + "shorter name."), BY_SERVER); return; } @@ -518,7 +519,8 @@ void SocialWindow::action(const gcn::ActionEvent &event) if (name.size() > 16) { - // TODO : State too many characters in input. + localChatTab->chatLog(_("Creating party failed, please choose a " + "shorter name."), BY_SERVER); return; } diff --git a/src/net/tmwa/partyhandler.cpp b/src/net/tmwa/partyhandler.cpp index 76108e9c..a88a27b6 100644 --- a/src/net/tmwa/partyhandler.cpp +++ b/src/net/tmwa/partyhandler.cpp @@ -333,7 +333,7 @@ void PartyHandler::invite(const std::string &name) { invite((Player *)invitee); partyTab->chatLog(strprintf(_("Invited user %s to party."), - name.c_str()), BY_SERVER); + invitee->getName().c_str()), BY_SERVER); } else if (partyTab) { -- cgit v1.2.3-70-g09d2