From 40e905745ed720ffa268aa611bb176db89937346 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 5 Jan 2015 15:50:51 +0300 Subject: Allow if supported by server select gender in char creation dialog. --- src/gui/windows/charcreatedialog.cpp | 66 ++++++++++++++++++++++++++++++++---- src/gui/windows/charcreatedialog.h | 6 ++++ 2 files changed, 65 insertions(+), 7 deletions(-) (limited to 'src/gui') diff --git a/src/gui/windows/charcreatedialog.cpp b/src/gui/windows/charcreatedialog.cpp index 6a44cab8a..4d2e4ae2d 100644 --- a/src/gui/windows/charcreatedialog.cpp +++ b/src/gui/windows/charcreatedialog.cpp @@ -22,6 +22,7 @@ #include "gui/windows/charcreatedialog.h" +#include "configuration.h" #include "main.h" #include "input/inputaction.h" @@ -36,6 +37,7 @@ #include "gui/widgets/playerbox.h" #include "gui/widgets/radiobutton.h" #include "gui/widgets/slider.h" +#include "gui/widgets/tabstrip.h" #include "gui/widgets/textfield.h" #include "net/serverfeatures.h" @@ -131,6 +133,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, nullptr)), mPlayerBox(new PlayerBox(this, mPlayer, "charcreate_playerbox.xml", "charcreate_selectedplayerbox.xml")), + mGenderStrip(nullptr), mMaxPoints(0), mUsedPoints(0), mRace(0), @@ -140,6 +143,8 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, mHairStyle(0), mHairColor(0), mSlot(slot), + mDefaultGender(Gender::FEMALE), + mGender(Gender::UNSPECIFIED), maxHairColor(CharDB::getMaxHairColor()), minHairColor(CharDB::getMinHairColor()), maxHairStyle(CharDB::getMaxHairStyle()), @@ -151,6 +156,10 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, setSticky(true); setWindowName("NewCharacter"); + const int w = 480; + const int h = 350; + setContentSize(w, h); + mPlayer->setGender(Gender::MALE); const std::vector &items = CharDB::getDefaultItems(); int i = 1; @@ -208,6 +217,27 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, mLookNameLabel = new Label(this, ""); } + if (serverFeatures->haveCreateCharGender()) + { + const int size = config.getIntValue("fontSize"); + mGenderStrip = new TabStrip(this, "gender_" + getWindowName(), size + 16); + mGenderStrip->setPressFirst(false); + mGenderStrip->addActionListener(this); + mGenderStrip->setActionEventId("gender_"); + // TRANSLATORS: one char size female character gender + mGenderStrip->addButton(_("F"), "f", false); + // TRANSLATORS: one char size male character gender + mGenderStrip->addButton(_("M"), "m", false); + // TRANSLATORS: one char size unknown character gender + mGenderStrip->addButton(_("U"), "u", true); + mGenderStrip->setVisible(true); + add(mGenderStrip); + + mGenderStrip->setPosition(385, 130); + mGenderStrip->setWidth(500); + mGenderStrip->setHeight(50); + } + // Default to a Male character mMale->setSelected(true); @@ -224,10 +254,6 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, mNameField->setActionEventId("create"); mNameField->addActionListener(this); - const int w = 480; - const int h = 350; - - setContentSize(w, h); mPlayerBox->setDimension(Rect(360, 0, 110, 90)); mActionButton->setPosition(385, 100); mRotateButton->setPosition(415, 100); @@ -241,6 +267,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, const int labelX = 5; const int nameX = 145; int y = 30; + mPrevHairColorButton->setPosition(leftX, y); mNextHairColorButton->setPosition(rightX, y); y += 5; @@ -358,10 +385,14 @@ void CharCreateDialog::action(const ActionEvent &event) const int characterSlot = mSlot; - charServerHandler->newCharacter(getName(), characterSlot, - mFemale->isSelected(), mHairStyle, mHairColor, + charServerHandler->newCharacter(getName(), + characterSlot, + mGender, + mHairStyle, + mHairColor, static_cast(mRace), - static_cast(mLook), atts); + static_cast(mLook), + atts); } else { @@ -444,6 +475,21 @@ void CharCreateDialog::action(const ActionEvent &event) mDirection = 0; updatePlayer(); } + else if (id == "gender_m") + { + mGender = Gender::MALE; + mPlayer->setGender(Gender::MALE); + } + else if (id == "gender_f") + { + mGender = Gender::FEMALE; + mPlayer->setGender(Gender::FEMALE); + } + else if (id == "gender_u") + { + mGender = Gender::UNSPECIFIED; + mPlayer->setGender(mDefaultGender); + } } std::string CharCreateDialog::getName() const @@ -556,12 +602,18 @@ void CharCreateDialog::setAttributes(const StringVect &labels, h = y; setContentSize(w, h); } + if (serverFeatures->haveCreateCharGender() && y < 160) + { + h = 160; + setContentSize(w, h); + } setButtonsPosition(w, h); } void CharCreateDialog::setFixedGender(const bool fixed, const Gender::Type gender) { + mDefaultGender = gender; if (gender == Gender::FEMALE) { mFemale->setSelected(true); diff --git a/src/gui/windows/charcreatedialog.h b/src/gui/windows/charcreatedialog.h index 01c925f3e..9215d2805 100644 --- a/src/gui/windows/charcreatedialog.h +++ b/src/gui/windows/charcreatedialog.h @@ -37,6 +37,7 @@ class Label; class PlayerBox; class RadioButton; class Slider; +class TabStrip; class TextField; /** @@ -143,6 +144,8 @@ class CharCreateDialog final : public Window, Being *mPlayer; PlayerBox *mPlayerBox; + TabStrip *mGenderStrip; + int mMaxPoints; int mUsedPoints; @@ -156,6 +159,9 @@ class CharCreateDialog final : public Window, int mSlot; + Gender::Type mDefaultGender; + Gender::Type mGender; + unsigned int maxHairColor; unsigned int minHairColor; unsigned int maxHairStyle; -- cgit v1.2.3-70-g09d2