Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: [SOLVED]tgui how create childwindow/panel  (Read 7109 times)

0 Members and 3 Guests are viewing this topic.

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
[SOLVED]tgui how create childwindow/panel
« on: April 07, 2013, 02:52:23 pm »
hey, i don't know how create and use childwindow in tgui 0.6 with sf::RenderWindow
anyone can show me simple example?
thanks : )
« Last Edit: April 09, 2013, 05:13:31 pm by Soul »

eXpl0it3r

  • SFML Team
  • Hero Member
  • *****
  • Posts: 11030
    • View Profile
    • development blog
    • Email
Re: tgui childwindow example
« Reply #1 on: April 07, 2013, 03:26:41 pm »
Is it really so hard? ::)

TGUI Thread -> TGUI Website -> Introduction Tutorial -> There, see wasn't that hard now was it? ;D
Official FAQ: https://www.sfml-dev.org/faq.php
Official Discord Server: https://discord.gg/nr4X7Fh
——————————————————————
Dev Blog: https://duerrenberger.dev/blog/

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
Re: tgui childwindow example
« Reply #2 on: April 07, 2013, 04:02:00 pm »
ref, CHILDWINDOW not tgui::window or sf::RenderWindow... i want use childwindow on sf::renderwindow :P

texus

  • Hero Member
  • *****
  • Posts: 505
    • View Profile
    • TGUI
    • Email
Re: tgui childwindow example
« Reply #3 on: April 07, 2013, 04:25:33 pm »
The documentation might help you get going.

There just created like any other object.
Afterwards you'll just need to call the load function and then you can start adding objects to it.
« Last Edit: April 07, 2013, 04:28:54 pm by texus »
TGUI: C++ SFML GUI

texus

  • Hero Member
  • *****
  • Posts: 505
    • View Profile
    • TGUI
    • Email
Re: tgui childwindow example
« Reply #4 on: April 07, 2013, 04:42:51 pm »
I think I understand what you are asking, the problem isn't with how to use child windows.

Already in your previous question you are using Forms in the wrong way so I have to clear something up.
The name 'Form' was badly chosen and might not be what you expect. When you do not want to use tgui::Window then you can use tgui::Form instead. But you should still look at this at it would be your window. The only difference between the two is that tgui::Window is derived from sf::RenderWindow, while you can use them as two seperate objects by using tgui::Form.

So you only need a single Form (or Window) in your program.
To this object you can add all your objects, like the child window.

Instead of having different forms, you need to use Panels. When at a different point in the game you just hide the current panel and show the other one. So you only need one handleEvent function call to your window (in your case the form), and only one draw call. You no longer have to keep track on which one to draw yourself.
TGUI: C++ SFML GUI

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
Re: tgui childwindow example
« Reply #5 on: April 09, 2013, 01:34:13 pm »
ehhh i tried everything, my last code looks something like this, this documentation is hard to understand without all metods xD

#include "include/Client.h"
#include <TGUI/TGUI.hpp>
int main()
{
    Client client;
    sf::RenderWindow window(sf::VideoMode(800, 600), "Client");
    sf::Clock Framerate;
    float acu = 0;
    float frametime = 0.03;

    tgui::Form Menu( window );
    tgui::Panel Create;
    tgui::Panel Login;
    Menu.setGlobalFont( "Font/djvs.ttf");
    Create.setGlobalFont( "Font/djvs.ttf");
    Login.setGlobalFont( "Font/djvs.ttf");

    tgui::Button::Ptr connect(Menu);
    tgui::Button::Ptr disconnect(Menu);
    tgui::Button::Ptr createaccount(Menu);
    tgui::Button::Ptr create(Login);
    tgui::Button::Ptr login(Login);

    tgui::Label::Ptr labelUsername(Create);
    labelUsername->setText("Username:");
    labelUsername->setPosition(200, 70);
    labelUsername->setTextSize(10);

    tgui::Label::Ptr labelPassword(Create);
    labelPassword->setText("Password:");
    labelPassword->setPosition(200, 230);
    labelPassword->setTextSize(10);

    tgui::Label::Ptr labelMail(Create);
    labelMail->setText("E-Mail:");
    labelMail->setPosition(200, 370);
    labelMail->setTextSize(10);

    tgui::EditBox::Ptr editBoxUsername(Create, "Username");
    editBoxUsername->load("gui/EditBox/Black");
    editBoxUsername->setSize(100, 40);
    editBoxUsername->setPosition(200, 90);
    editBoxUsername->setMaximumCharacters( 15 );
    editBoxUsername->setTextSize(10);

    tgui::EditBox::Ptr editBoxPassword(Create, "Password");
    editBoxPassword->setPosition(200, 250);
    editBoxPassword->setSize(100, 40);
    editBoxPassword->setPasswordChar('*');
    editBoxPassword->setMaximumCharacters( 15 );
    editBoxPassword->setTextSize(10);

    tgui::EditBox::Ptr editBoxMail(Create, "E-Mail");
    editBoxMail->load("gui/Editbox/Black");
    editBoxMail->setSize(100,40);
    editBoxMail->setPosition(200, 390);
    editBoxMail->setTextSize(10);

    tgui::EditBox::Ptr editBoxLogin( Login, "Username" );
    editBoxLogin->load("gui/Editbox/Black");
    editBoxLogin->setSize(100, 40);
    editBoxLogin->setPosition(200,400);
    editBoxLogin->setMaximumCharacters( 15 );
    editBoxLogin->setTextSize(10);

    tgui::EditBox::Ptr editBoxPass( Login, "Password" );
    editBoxPass->load("gui/Editbox/Black");
    editBoxPass->setSize(100, 40);
    editBoxPass->setPosition(200,500);
    editBoxPass->setMaximumCharacters( 15 );
    editBoxPass->setTextSize(10);

    createaccount->load("gui/Button/Black");
    createaccount->setSize(100, 50);
    createaccount->setPosition(270, 280);
    createaccount->setText("Create Account");
    createaccount->bindCallback(tgui::Button::LeftMouseClicked);
    createaccount->setCallbackId(1);
    createaccount->setTextSize(10);

    connect->load("gui/Button/Black");
    connect->setSize(100, 50);
    connect->setPosition(270, 340);
    connect->setText("Connect");
    connect->bindCallback(tgui::Button::LeftMouseClicked);
    connect->setCallbackId(2);
    connect->setTextSize(10);

    disconnect->load("gui/Button/Black");
    disconnect->setSize(100, 50);
    disconnect->setPosition(270, 400);
    disconnect->setText("Disconnect");
    disconnect->bindCallback(tgui::Button::LeftMouseClicked);
    disconnect->setCallbackId(3);
    disconnect->setTextSize(10);

    create->load("gui/Button/Black");
    create->setSize(100, 50);
    create->setPosition(400, 100);
    create->setText("Create Account");
    create->bindCallback(tgui::Button::LeftMouseClicked);
    create->setCallbackId(4);
    create->setTextSize(10);

    login->load("gui/Button/Black");
    login->setText("Login");
    login->setSize(100,50);
    login->setPosition(400,400);
    login->bindCallback(tgui::Button::LeftMouseClicked);
    login->setCallbackId(5);
    login->setTextSize(10);

    int menu = 1;
    while (window.isOpen())
    {
        acu += Framerate.restart().asSeconds();
        sf::Event event;

        /// input
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();

           // switch(menu)
           // {
               // case 1:
               // {
                    Menu.handleEvent(event);
              //      break;
              //  }
            /*    case 2:
                {
                    Create.handleEvent(event);
                    break;
                }
                case 3:
                {
                    Login.handleEvent(event);
                    break;
                } */

            }
        }               /// end of input


        /// logic
        if( acu > frametime)
        {
            tgui::Callback callback;
    //        switch( menu )
    //        {
     //           case 1:
    //            {
                    while (Menu.pollCallback(callback))
                    {
                        switch( callback.callbackId)
                        {
                            case 1:
                            {
                                if( client.init( "127.0.0.1", 6667 ))
                                {
                                    menu = 2;
                                }
                                else menu=1; Create.hide();
                                break;
                            }
                            case 2:
                            {
                                if( client.init( "127.0.0.1", 6667 ) )
                                {
                                    menu = 3;
                                }
                                else menu=1;
                                break;
                            }
                            case 3:
                            {
                                client.Disconnect();
                                break;
                            }

                            case 4:
                            {
                                editBoxUsername = Create.get("Username");
                                editBoxPassword = Create.get("Password");
                                editBoxMail = Create.get("E-Mail");
                                sf::String username = editBoxUsername->getText();
                                sf::String password = editBoxPassword->getText();
                                sf::String email = editBoxMail->getText();
                                editBoxUsername->setText("");
                                editBoxPassword->setText("");
                                editBoxMail->setText("");
                                std::string user = username.toAnsiString();
                                std::string pass = password.toAnsiString();
                                std::string mail = email.toAnsiString();
                                if( user.size() >= 4 && pass.size() >= 6 && mail.find("@") && mail.size() >=8 )
                                {
                                    int data;
                                    client.Send << Packet::PACKET_ACCOUNT << Packet::PACKET_REQUEST << user; /// pytanie czy konto o danej nazwie juz istnieje
                                    client.ServerSock.send( client.Send );
                                    client.ServerSock.receive(client.Recv);
                                    client.Recv >> client.family >> client.action >> data;
                                    client.Send.clear();
                                    client.Recv.clear();
                                    if( client.family == 2 && client.action == 2)
                                    {
                                        if( data == 0 ) /// jesli istnieje przerywa polaczenie
                                        {
                                            std::cout<<"Konto o tym loginie juz istnieje"<<std::endl;
                                            editBoxUsername->setText(user);
                                            editBoxPassword->setText(pass);
                                            editBoxMail->setText(mail);
                                            client.Disconnect();
                                            menu=1;
                                        }
                                        else if( data == 1 ) /// jesli nie wysyla haslo i maila potrzebne przy tworzeniu konta
                                        {
                                            client.Send << Packet::PACKET_ACCOUNT << Packet::PACKET_CREATE << pass << mail;
                                            client.ServerSock.send(client.Send);
                                            client.Send.clear();
                                            client.ServerSock.receive(client.Recv);
                                            client.Recv >> client.family >> client.action >> data;
                                            if( client.family == 2 && client.action==1 )
                                            {

                                                if( data == 1 )  /// konto utworzono
                                                {
                                                    std::cout<<"utworzono konto: "<< user << " " << pass << " " << mail << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                    /// blad przy tworzeniu
                                                else if(data==0)
                                                {
                                                    std::cout<<"Nie moge stworzyc konta" <<std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                else
                                                {
                                                    std::cout<<"Nieznany problem przy tworzeniu konta" <<std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                            }

                                            else
                                            {
                                                client.Disconnect();
                                                std::cout<<"nieznany error: " << data<<std::endl;
                                                menu=1;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        client.Disconnect();
                                        menu=1;
                                    }
                                    break;
                                }
                            }

                            case 5:
                            {
                                editBoxLogin = Login.get("Username");
                                editBoxPass = Login.get("Password");
                                sf::String username = editBoxLogin->getText();
                                sf::String password = editBoxPass->getText();
                                editBoxLogin->setText("");
                                editBoxPass->setText("");
                                std::string user = username.toAnsiString();
                                std::string pass = password.toAnsiString();
                                if( user.size() >=4 && pass.size() >= 6 )
                                {
                                    int data;
                                    client.Send << Packet::PACKET_LOGIN << Packet::PACKET_REQUEST << user;
                                    client.ServerSock.send(client.Send);
                                    client.ServerSock.receive(client.Recv);
                                    client.Recv >> client.family >> client.action >> data;
                                    if(client.family==3 && client.action==2)
                                    {
                                        if( data == 1)
                                        {
                                            client.Send.clear();
                                            client.Recv.clear();
                                            client.Send << Packet::PACKET_LOGIN << Packet::PACKET_REPLY << pass;
                                            client.ServerSock.send(client.Send);
                                            client.ServerSock.receive(client.Recv);
                                            client.Recv >> client.family >> client.action >> data;
                                            client.Send.clear();
                                            client.Recv.clear();
                                            if( client.family==3 && client.action==1)
                                            {
                                                if(data==0)
                                                {
                                                    std::cout << "Podano zle haslo" << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                else if(data==1)
                                                {
                                                    std::cout << "Zalogowano"<<std::endl;
                                                    menu=1;
                                                    break;
                                                }
                                                else if(data==2)
                                                {
                                                    std::cout << "Konto w uzyciu" << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                else
                                                {
                                                    std::cout << "Nieznany blad: " << data << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                            }
                                            else std::cout<<"problemy z pakietem 2"<<std::endl; client.Disconnect(); menu=1;
                                        }
                                        else if(data==0)
                                        {
                                            std::cout<< "Nie ma takiego konta"<<std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                    }
                                    else std::cout<<"problemy z pakietem 1"<<std::endl; client.Disconnect(); menu=1;
                                }
                                break;
                            }
                        }
                    }
                 //   break;
              //  }
            //}
        }
                       /// end of logic

                        /// drawing
        window.clear();
        switch(menu)
        {
            case 1:
            {
                Menu.draw();
                Create.hide();
                break;
            }
            case 2:
            {
                Menu.draw();
                Create.show();
                Login.hide();
                break;
            }
            case 3:
            {
                Menu.draw();
                Login.show();
                Create.hide();
                break;
            }
        }
        window.display();  /// end of drawing
    }
 

texus

  • Hero Member
  • *****
  • Posts: 505
    • View Profile
    • TGUI
    • Email
Re: tgui childwindow example
« Reply #6 on: April 09, 2013, 02:12:44 pm »
It is indeed a bit underdocumented for what you are doing, but all needed functions are in the documentation.

Your mistake is that Panel is an object, so you have to create it like one.
tgui::Panel::Ptr Create(Menu);
tgui::Panel::Ptr Login(Menu);

By doing this you will need two more changes before the code will compile.
1) You used a dot after Create and Login, you'll now have to use an arrow as the objects are now pointers.

2) Lines like
tgui::Button::Ptr create(Login);
should become
tgui::Button::Ptr create(*Login);
(I am explicitly mentioning this because it might give a strange error when you forget to change it somewhere)

That should make the code work.
TGUI: C++ SFML GUI

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
Re: tgui childwindow example
« Reply #7 on: April 09, 2013, 02:33:59 pm »
this source give me this error  http://s1.pokazywarka.pl/bigImages/1910820/6810469.jpg


#include "include/Client.h"
#include <TGUI/TGUI.hpp>
int main()
{
    Client client;
    sf::RenderWindow window(sf::VideoMode(800, 600), "Client");
    sf::Clock Framerate;
    float acu = 0;
    float frametime = 0.03;

    tgui::Form Menu( window );
    tgui::Panel::Ptr Create;
    tgui::Panel::Ptr Login;
    Menu.setGlobalFont( "Font/djvs.ttf");

    tgui::Button::Ptr connect(Menu);
    tgui::Button::Ptr disconnect(Menu);
    tgui::Button::Ptr createaccount(Menu);
    tgui::Button::Ptr create(*Login);
    tgui::Button::Ptr login(*Login);

    tgui::Label::Ptr labelUsername(*Create);
    labelUsername->setText("Username:");
    labelUsername->setPosition(200, 70);
    labelUsername->setTextSize(10);

    tgui::Label::Ptr labelPassword(*Create);
    labelPassword->setText("Password:");
    labelPassword->setPosition(200, 230);
    labelPassword->setTextSize(10);

    tgui::Label::Ptr labelMail(*Create);
    labelMail->setText("E-Mail:");
    labelMail->setPosition(200, 370);
    labelMail->setTextSize(10);

    tgui::EditBox::Ptr editBoxUsername(*Create, "Username");
    editBoxUsername->load("gui/EditBox/Black");
    editBoxUsername->setSize(100, 40);
    editBoxUsername->setPosition(200, 90);
    editBoxUsername->setMaximumCharacters( 15 );
    editBoxUsername->setTextSize(10);

    tgui::EditBox::Ptr editBoxPassword(*Create, "Password");
    editBoxPassword->setPosition(200, 250);
    editBoxPassword->setSize(100, 40);
    editBoxPassword->setPasswordChar('*');
    editBoxPassword->setMaximumCharacters( 15 );
    editBoxPassword->setTextSize(10);

    tgui::EditBox::Ptr editBoxMail(*Create, "E-Mail");
    editBoxMail->load("gui/Editbox/Black");
    editBoxMail->setSize(100,40);
    editBoxMail->setPosition(200, 390);
    editBoxMail->setTextSize(10);

    tgui::EditBox::Ptr editBoxLogin( *Login, "Username" );
    editBoxLogin->load("gui/Editbox/Black");
    editBoxLogin->setSize(100, 40);
    editBoxLogin->setPosition(200,400);
    editBoxLogin->setMaximumCharacters( 15 );
    editBoxLogin->setTextSize(10);

    tgui::EditBox::Ptr editBoxPass( *Login, "Password" );
    editBoxPass->load("gui/Editbox/Black");
    editBoxPass->setSize(100, 40);
    editBoxPass->setPosition(200,500);
    editBoxPass->setMaximumCharacters( 15 );
    editBoxPass->setTextSize(10);

    createaccount->load("gui/Button/Black");
    createaccount->setSize(100, 50);
    createaccount->setPosition(270, 280);
    createaccount->setText("Create Account");
    createaccount->bindCallback(tgui::Button::LeftMouseClicked);
    createaccount->setCallbackId(1);
    createaccount->setTextSize(10);

    connect->load("gui/Button/Black");
    connect->setSize(100, 50);
    connect->setPosition(270, 340);
    connect->setText("Connect");
    connect->bindCallback(tgui::Button::LeftMouseClicked);
    connect->setCallbackId(2);
    connect->setTextSize(10);

    disconnect->load("gui/Button/Black");
    disconnect->setSize(100, 50);
    disconnect->setPosition(270, 400);
    disconnect->setText("Disconnect");
    disconnect->bindCallback(tgui::Button::LeftMouseClicked);
    disconnect->setCallbackId(3);
    disconnect->setTextSize(10);

    create->load("gui/Button/Black");
    create->setSize(100, 50);
    create->setPosition(400, 100);
    create->setText("Create Account");
    create->bindCallback(tgui::Button::LeftMouseClicked);
    create->setCallbackId(4);
    create->setTextSize(10);

    login->load("gui/Button/Black");
    login->setText("Login");
    login->setSize(100,50);
    login->setPosition(400,400);
    login->bindCallback(tgui::Button::LeftMouseClicked);
    login->setCallbackId(5);
    login->setTextSize(10);

    int menu = 1;
    while (window.isOpen())
    {
        acu += Framerate.restart().asSeconds();
        sf::Event event;

        /// input
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();

           // switch(menu)
           // {
               // case 1:
               // {
                    Menu.handleEvent(event);
              //      break;
              //  }
            /*    case 2:
                {
                    Create.handleEvent(event);
                    break;
                }
                case 3:
                {
                    Login.handleEvent(event);
                    break;
                } */

            }
        }               /// end of input


        /// logic
        if( acu > frametime)
        {
            tgui::Callback callback;
    //        switch( menu )
    //        {
     //           case 1:
    //            {
                    while (Menu.pollCallback(callback))
                    {
                        switch( callback.callbackId)
                        {
                            case 1:
                            {
                                if( client.init( "127.0.0.1", 6667 ))
                                {
                                    menu = 2;
                                }
                                else menu=1;
                                break;
                            }
                            case 2:
                            {
                                if( client.init( "127.0.0.1", 6667 ) )
                                {
                                    menu = 3;
                                }
                                else menu=1;
                                break;
                            }
                            case 3:
                            {
                                client.Disconnect();
                                break;
                            }

                            case 4:
                            {
                                editBoxUsername = Menu.get("Username");
                                editBoxPassword = Menu.get("Password");
                                editBoxMail = Menu.get("E-Mail");
                                sf::String username = editBoxUsername->getText();
                                sf::String password = editBoxPassword->getText();
                                sf::String email = editBoxMail->getText();
                                editBoxUsername->setText("");
                                editBoxPassword->setText("");
                                editBoxMail->setText("");
                                std::string user = username.toAnsiString();
                                std::string pass = password.toAnsiString();
                                std::string mail = email.toAnsiString();
                                if( user.size() >= 4 && pass.size() >= 6 && mail.find("@") && mail.size() >=8 )
                                {
                                    int data;
                                    client.Send << Packet::PACKET_ACCOUNT << Packet::PACKET_REQUEST << user; /// pytanie czy konto o danej nazwie juz istnieje
                                    client.ServerSock.send( client.Send );
                                    client.ServerSock.receive(client.Recv);
                                    client.Recv >> client.family >> client.action >> data;
                                    client.Send.clear();
                                    client.Recv.clear();
                                    if( client.family == 2 && client.action == 2)
                                    {
                                        if( data == 0 ) /// jesli istnieje przerywa polaczenie
                                        {
                                            std::cout<<"Konto o tym loginie juz istnieje"<<std::endl;
                                            editBoxUsername->setText(user);
                                            editBoxPassword->setText(pass);
                                            editBoxMail->setText(mail);
                                            client.Disconnect();
                                            menu=1;
                                        }
                                        else if( data == 1 ) /// jesli nie wysyla haslo i maila potrzebne przy tworzeniu konta
                                        {
                                            client.Send << Packet::PACKET_ACCOUNT << Packet::PACKET_CREATE << pass << mail;
                                            client.ServerSock.send(client.Send);
                                            client.Send.clear();
                                            client.ServerSock.receive(client.Recv);
                                            client.Recv >> client.family >> client.action >> data;
                                            if( client.family == 2 && client.action==1 )
                                            {

                                                if( data == 1 )  /// konto utworzono
                                                {
                                                    std::cout<<"utworzono konto: "<< user << " " << pass << " " << mail << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                    /// blad przy tworzeniu
                                                else if(data==0)
                                                {
                                                    std::cout<<"Nie moge stworzyc konta" <<std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                else
                                                {
                                                    std::cout<<"Nieznany problem przy tworzeniu konta" <<std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                            }

                                            else
                                            {
                                                client.Disconnect();
                                                std::cout<<"nieznany error: " << data<<std::endl;
                                                menu=1;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        client.Disconnect();
                                        menu=1;
                                    }
                                    break;
                                }
                            }

                            case 5:
                            {
                                editBoxLogin = Menu.get("Username");
                                editBoxPass = Menu.get("Password");
                                sf::String username = editBoxLogin->getText();
                                sf::String password = editBoxPass->getText();
                                editBoxLogin->setText("");
                                editBoxPass->setText("");
                                std::string user = username.toAnsiString();
                                std::string pass = password.toAnsiString();
                                if( user.size() >=4 && pass.size() >= 6 )
                                {
                                    int data;
                                    client.Send << Packet::PACKET_LOGIN << Packet::PACKET_REQUEST << user;
                                    client.ServerSock.send(client.Send);
                                    client.ServerSock.receive(client.Recv);
                                    client.Recv >> client.family >> client.action >> data;
                                    if(client.family==3 && client.action==2)
                                    {
                                        if( data == 1)
                                        {
                                            client.Send.clear();
                                            client.Recv.clear();
                                            client.Send << Packet::PACKET_LOGIN << Packet::PACKET_REPLY << pass;
                                            client.ServerSock.send(client.Send);
                                            client.ServerSock.receive(client.Recv);
                                            client.Recv >> client.family >> client.action >> data;
                                            client.Send.clear();
                                            client.Recv.clear();
                                            if( client.family==3 && client.action==1)
                                            {
                                                if(data==0)
                                                {
                                                    std::cout << "Podano zle haslo" << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                else if(data==1)
                                                {
                                                    std::cout << "Zalogowano"<<std::endl;
                                                    menu=1;
                                                    break;
                                                }
                                                else if(data==2)
                                                {
                                                    std::cout << "Konto w uzyciu" << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                                else
                                                {
                                                    std::cout << "Nieznany blad: " << data << std::endl;
                                                    client.Disconnect();
                                                    menu=1;
                                                }
                                            }
                                            else std::cout<<"problemy z pakietem 2"<<std::endl; client.Disconnect(); menu=1;
                                        }
                                        else if(data==0)
                                        {
                                            std::cout<< "Nie ma takiego konta"<<std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                    }
                                    else std::cout<<"problemy z pakietem 1"<<std::endl; client.Disconnect(); menu=1;
                                }
                                break;
                            }
                        }
                    }
                 //   break;
              //  }
            //}
        }
                       /// end of logic

                        /// drawing
        window.clear();
        switch(menu)
        {
            case 1:
            {
                Login->hide();
                Create->hide();
                Menu.draw();
                break;
            }
            case 2:
            {
                Create->show();
                Login->hide();
                Menu.draw();
                break;
            }
            case 3:
            {
                Login->show();
                Create->hide();
                Menu.draw();
                break;
            }
        }
        window.display();  /// end of drawing
    }
 

texus

  • Hero Member
  • *****
  • Posts: 505
    • View Profile
    • TGUI
    • Email
Re: tgui childwindow example
« Reply #8 on: April 09, 2013, 02:41:07 pm »
Your Create and Login are still null pointers, you didn't initialize them.
You forgot to pass Menu to the constructor like I wrote it in my previous post.
TGUI: C++ SFML GUI

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
Re: tgui childwindow example
« Reply #9 on: April 09, 2013, 03:07:33 pm »
thanks for help, now everything work fine :)

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
Re: tgui childwindow example
« Reply #10 on: April 09, 2013, 04:21:57 pm »
awwwwww, when i click buttons create and login i have the same error http://s1.pokazywarka.pl/bigImages/1910820/6810469.jpg
i hate work on pointers xD

#include "include/Client.h"
#include <TGUI/TGUI.hpp>
int main()
{
    Client client;
    sf::RenderWindow window(sf::VideoMode(800, 600), "Client");
    sf::Clock Framerate;
    float acu = 0;
    float frametime = 0.01;

    tgui::Form Wnd( window );
    tgui::Panel::Ptr Menu(Wnd);
    tgui::Panel::Ptr Create(Wnd);
    tgui::Panel::Ptr Login(Wnd);
    Login->load( 800, 600);
    Create->load(800,600);
    Menu->load(800,600);
    Menu->setGlobalFont( "Font/djvs.ttf");
    Create->setGlobalFont( "Font/djvs.ttf");
    Login->setGlobalFont( "Font/djvs.ttf");

    tgui::Button::Ptr connect(*Menu);
    tgui::Button::Ptr disconnect(*Menu);
    tgui::Button::Ptr createaccount(*Menu);
    tgui::Button::Ptr create(*Create);
    tgui::Button::Ptr login(*Login);

    tgui::Label::Ptr labelUsername(*Create);
    labelUsername->setText("Username:");
    labelUsername->setPosition(200, 70);
    labelUsername->setTextSize(10);
    Create->add(labelUsername);

    tgui::Label::Ptr labelPassword(*Create);
    labelPassword->setText("Password:");
    labelPassword->setPosition(200, 230);
    labelPassword->setTextSize(10);
    Create->add(labelPassword);

    tgui::Label::Ptr labelMail(*Create);
    labelMail->setText("E-Mail:");
    labelMail->setPosition(200, 370);
    labelMail->setTextSize(10);
    Create->add(labelMail);

    tgui::EditBox::Ptr editBoxUsername(*Create, "Username");
    editBoxUsername->load("gui/EditBox/Black");
    editBoxUsername->setSize(100, 40);
    editBoxUsername->setPosition(200, 90);
    editBoxUsername->setMaximumCharacters( 15 );
    editBoxUsername->setTextSize(10);
    Create->add(editBoxUsername, "Username" );

    tgui::EditBox::Ptr editBoxPassword(*Create, "Password");
    editBoxPassword->load("gui/EditBox/Black");
    editBoxPassword->setPosition(200, 250);
    editBoxPassword->setSize(100, 40);
    editBoxPassword->setPasswordChar('*');
    editBoxPassword->setMaximumCharacters( 15 );
    editBoxPassword->setTextSize(10);
    Create->add(editBoxPassword, "Password");

    tgui::EditBox::Ptr editBoxMail(*Create, "E-Mail");
    editBoxMail->load("gui/Editbox/Black");
    editBoxMail->setSize(100,40);
    editBoxMail->setPosition(200, 390);
    editBoxMail->setTextSize(10);
    Create->add(editBoxMail, "E-Mail");

    tgui::EditBox::Ptr editBoxLogin( *Login, "Username" );
    editBoxLogin->load("gui/Editbox/Black");
    editBoxLogin->setSize(100, 40);
    editBoxLogin->setPosition(100,100);
    editBoxLogin->setMaximumCharacters( 15 );
    editBoxLogin->setTextSize(10);
    Login->add(editBoxLogin, "Username");

    tgui::EditBox::Ptr editBoxPass( *Login, "Password" );
    editBoxPass->load("gui/Editbox/Black");
    editBoxPass->setSize(100, 40);
    editBoxPass->setPosition(220,200);
    editBoxPass->setMaximumCharacters( 15 );
    editBoxPass->setTextSize(10);
    Login->add(editBoxPass, "Password");

    createaccount->load("gui/Button/Black");
    createaccount->setSize(100, 50);
    createaccount->setPosition(270, 280);
    createaccount->setText("Create Account");
    createaccount->bindCallback(tgui::Button::LeftMouseClicked);
    createaccount->setCallbackId(1);
    createaccount->setTextSize(10);

    connect->load("gui/Button/Black");
    connect->setSize(100, 50);
    connect->setPosition(270, 340);
    connect->setText("Connect");
    connect->bindCallback(tgui::Button::LeftMouseClicked);
    connect->setCallbackId(2);
    connect->setTextSize(10);

    disconnect->load("gui/Button/Black");
    disconnect->setSize(100, 50);
    disconnect->setPosition(270, 400);
    disconnect->setText("Disconnect");
    disconnect->bindCallback(tgui::Button::LeftMouseClicked);
    disconnect->setCallbackId(3);
    disconnect->setTextSize(10);

    create->load("gui/Button/Black");
    create->setSize(100, 50);
    create->setPosition(400, 100);
    create->setText("Register");
    create->bindCallback(tgui::Button::LeftMouseClicked);
    create->setCallbackId(4);
    create->setTextSize(10);

    login->load("gui/Button/Black");
    login->setText("Login");
    login->setSize(100,50);
    login->setPosition(400,400);
    login->bindCallback(tgui::Button::LeftMouseClicked);
    login->setCallbackId(5);
    login->setTextSize(10);

    Menu->add(createaccount);
    Menu->add(disconnect);
    Menu->add(connect);
    Login->add(login);
    Create->add(create);


    int menu = 1;
    while (window.isOpen())
    {
        acu += Framerate.restart().asSeconds();
        sf::Event event;
        /// input
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();

            Wnd.handleEvent(event);

        }               /// end of input

        /// logic
        if( acu > frametime)
        {
            tgui::Callback callback;
            while (Wnd.pollCallback(callback))
            {
                switch( callback.callbackId)
                {
                    case 1:
                    {
                        if( client.init( "127.0.0.1", 6667 ))
                        {
                            menu = 2;
                        }
                        else menu=1;
                        break;
                    }
                    case 2:
                    {
                        if( client.init( "127.0.0.1", 6667 ) )
                        {
                            menu = 3;
                        }
                        else menu=1;
                        break;
                    }

                    case 3:
                    {
                        client.Disconnect();
                        menu = 1;
                        break;
                    }
                    case 4:
                    {
                        editBoxUsername = Wnd.get("Username");
                        editBoxPassword = Wnd.get("Password");
                        editBoxMail = Wnd.get("E-Mail");
                        sf::String username = editBoxUsername->getText();
                        sf::String password = editBoxPassword->getText();
                        sf::String email = editBoxMail->getText();
                        editBoxUsername->setText("");
                        editBoxPassword->setText("");
                        editBoxMail->setText("");
                        std::string user = username.toAnsiString();
                        std::string pass = password.toAnsiString();
                        std::string mail = email.toAnsiString();
                        if( user.size() >= 4 && pass.size() >= 6 && mail.find("@") && mail.size() >=8 )
                        {
                            int data;
                            client.Send << Packet::PACKET_ACCOUNT << Packet::PACKET_REQUEST << user; /// pytanie czy konto o danej nazwie juz istnieje
                            client.ServerSock.send( client.Send );
                            client.ServerSock.receive(client.Recv);
                            client.Recv >> client.family >> client.action >> data;
                            client.Send.clear();
                            client.Recv.clear();
                            if( client.family == 2 && client.action == 2)
                            {
                                if( data == 0 ) /// jesli istnieje przerywa polaczenie
                                {
                                    std::cout<<"Konto o tym loginie juz istnieje"<<std::endl;
                                    editBoxUsername->setText(user);
                                    editBoxPassword->setText(pass);
                                    editBoxMail->setText(mail);
                                    client.Disconnect();
                                    menu=1;
                                }
                                else if( data == 1 ) /// jesli nie wysyla haslo i maila potrzebne przy tworzeniu konta
                                {
                                    client.Send << Packet::PACKET_ACCOUNT << Packet::PACKET_CREATE << pass << mail;
                                    client.ServerSock.send(client.Send);
                                    client.Send.clear();
                                    client.ServerSock.receive(client.Recv);
                                    client.Recv >> client.family >> client.action >> data;
                                    if( client.family == 2 && client.action==1 )
                                    {
                                        if( data == 1 )  /// konto utworzono
                                        {
                                            std::cout<<"utworzono konto: "<< user << " " << pass << " " << mail << std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                            /// blad przy tworzeniu
                                        else if(data==0)
                                        {
                                            std::cout<<"Nie moge stworzyc konta" <<std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                        else
                                        {
                                            std::cout<<"Nieznany problem przy tworzeniu konta" <<std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                    }
                                    else
                                    {
                                        client.Disconnect();
                                        std::cout<<"nieznany error: " << data<<std::endl;
                                        menu=1;
                                    }
                                }
                            }
                            else
                            {
                                client.Disconnect();
                                menu=1;
                            }
                            break;
                        }
                    }
                    case 5:
                    {
                        editBoxLogin = Wnd.get("Username");
                        editBoxPass = Wnd.get("Password");
                        sf::String username = editBoxLogin->getText();
                        sf::String password = editBoxPass->getText();
                        editBoxLogin->setText("");
                        editBoxPass->setText("");
                        std::string user = username.toAnsiString();
                        std::string pass = password.toAnsiString();
                        if( user.size() >=4 && pass.size() >= 6 )
                        {
                            int data;
                            client.Send << Packet::PACKET_LOGIN << Packet::PACKET_REQUEST << user;
                            client.ServerSock.send(client.Send);
                            client.ServerSock.receive(client.Recv);
                            client.Recv >> client.family >> client.action >> data;
                            if(client.family==3 && client.action==2)
                            {
                                if( data == 1)
                                {
                                    client.Send.clear();
                                    client.Recv.clear();
                                    client.Send << Packet::PACKET_LOGIN << Packet::PACKET_REPLY << pass;
                                    client.ServerSock.send(client.Send);
                                    client.ServerSock.receive(client.Recv);
                                    client.Recv >> client.family >> client.action >> data;
                                    client.Send.clear();
                                    client.Recv.clear();
                                    if( client.family==3 && client.action==1)
                                    {
                                        if(data==0)
                                        {
                                            std::cout << "Podano zle haslo" << std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                        else if(data==1)
                                        {
                                            std::cout << "Zalogowano"<<std::endl;
                                            menu=1;
                                            break;
                                        }
                                        else if(data==2)
                                        {
                                            std::cout << "Konto w uzyciu" << std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                        else
                                        {
                                            std::cout << "Nieznany blad: " << data << std::endl;
                                            client.Disconnect();
                                            menu=1;
                                        }
                                    }
                                    else std::cout<<"problemy z pakietem 2"<<std::endl; client.Disconnect(); menu=1;
                                }
                                else
                                {
                                    std::cout<< "Nie ma takiego konta"<<std::endl;
                                    client.Disconnect();
                                    menu=1;
                                }
                            }
                            else std::cout<<"problemy z pakietem 1"<<std::endl; client.Disconnect(); menu=1;
                        }
                        break;
                    }
                }
            }
        }
            /// end of logic

    /// drawing
    window.clear();
        switch(menu)
        {
            case 1:
            {
                Login->hide();
                Create->hide();
                Menu->enable();
                Login->enable();
                Create->enable();
                Menu->show();
                Wnd.draw();
                break;
            }
            case 2:
            {
                Create->show();
                Login->hide();
                Menu->hide();
                Wnd.draw();
                break;
            }
            case 3:
            {
                Login->show();
                Create->hide();
                Menu->hide();
                Wnd.draw();
                break;
            }
        }
    window.display();  /// end of drawing
    }
}
 

texus

  • Hero Member
  • *****
  • Posts: 505
    • View Profile
    • TGUI
    • Email
Re: tgui childwindow example
« Reply #11 on: April 09, 2013, 04:52:49 pm »
Well this is something you could only have known when working with tgui a little bit longer.

The window just stores the panel. It has no idea what is in the panels.
You try to get an object with "Username" from it, but it doesn't exist in the window and it will return a nullptr.
Then you try to use the pointer which causes the crash.

So instead of
Wnd.get("Username")
you should get the object from the panel that stores it, so you will have to do
Login->get("Username")
TGUI: C++ SFML GUI

Soul

  • Newbie
  • *
  • Posts: 44
    • View Profile
Re: tgui childwindow example
« Reply #12 on: April 09, 2013, 05:09:28 pm »
oh, okay, thanks, i'm so f*ckin stupid xD
i must remember that : o

 

anything