events not called ?

nargil

21-08-2009 13:01:56

Did I forget about something ?

void DialogueGui::responseClick( MyGUI::WidgetPtr _sender, int left, int top, MyGUI::MouseButton btn )

is never called.

class DialogueGui : public wraps::BaseLayout
{
public:
DialogueGui(const std::string& _layout);
void ShowDialogue(Ogre::String dialogueName, Character* speaker);

MyGUI::WidgetPtr getBaseWidget() {return mMainWidget;}

protected:
MyGUI::EditPtr mDialogue;
MyGUI::EditPtr mResponses;
MyGUI::StaticImagePtr mImage;
void responseClick(MyGUI::WidgetPtr _sender, int left, int top, MyGUI::MouseButton btn);
};


DialogueGui::DialogueGui( const std::string& _layout ) : BaseLayout(_layout, nullptr)
{
assignWidget(mResponses,"_Responses");
assignWidget(mImage,"_Image");
assignWidget(mDialogue,"_Dialogue");

mDialogue->setEditStatic(true);
mResponses->setEditStatic(true);
mResponses->eventMouseButtonPressed = MyGUI::newDelegate(this, &DialogueGui::responseClick);
}

void DialogueGui::ShowDialogue( Ogre::String dialogueName, Character* speaker )
{
//cut
}

void DialogueGui::responseClick( MyGUI::WidgetPtr _sender, int left, int top, MyGUI::MouseButton btn )
{
std::cout << "x: " << left << " y: " << top << std::endl;
}



void GuiManager::showDialogue( Ogre::String dialogueEntry, Character* speaker )
{
GameEngine::getSingletonPtr()->setGameState(GS_MENU);
mGuiState=GUISTATE_Dialogue;
mDialogueGUI = new DialogueGui("Dialogue.layout");

mDialogueGUI->getBaseWidget()->eventMouseButtonClick = newDelegate(this, &GuiManager::hideDialogue);
MyGUI::WindowPtr mm = mDialogueGUI->getBaseWidget()->castType<MyGUI::Window>(true);
mm->setRealPosition(0.5,0.5);
MyGUI::IntPoint p = mm->getPosition();
mm->setPosition(p.left - mm->getWidth()/2, p.top - mm->getHeight()/2);
MyGUI::InputManager::getInstance().setKeyFocusWidget(mm);
mGUI->showPointer();

mDialogueGUI->ShowDialogue(dialogueEntry, speaker);
}


<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="WindowCS" position="576 232 640 480" layer="Overlapped" name="_Main">
<Widget type="Edit" skin="WordWrap" position="10 300 620 150" layer="Overlapped" name="_Responses"/>
<Widget type="Edit" skin="WordWrap" position="250 10 380 280" layer="Overlapped" name="_Dialogue"/>
<Widget type="StaticImage" skin="StaticImage" position="10 10 240 280" layer="Overlapped" name="_Image"/>
</Widget>
</MyGUI>

my.name

22-08-2009 02:12:11

Explain that wish to achieve

nargil

22-08-2009 07:34:31

Print some options which the player can say to a NPC, and then calculate which one was clicked, based on the mouse-click coords.

mResponses->getClientWidget()->eventMouseButtonPressed = MyGUI::newDelegate(this, &DialogueGui::responseClick); Worked out. Thanks to Toxic from Wielki Mistrz project

______
A pity there is no specialized widget for this, something like a list that supports wordwrap and multiline.

my.name

22-08-2009 10:17:07

mResponses->setEditStatic(true);
mResponses->setNeedMouse(false);

mMainWidget->eventMouseButtonPressed = MyGUI::newDelegate(this, &DialogueGui::responseClick);

void DialogueGui::responseClick( MyGUI::WidgetPtr _sender, int left, int top, MyGUI::MouseButton btn )
{

std::cout << "x: " << left - mResponses->getLeft() << " y: " << top - mResponses->getTop() << std::endl;
}