Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Vector przez referencję

Ostatnio zmodyfikowano 2012-08-14 15:15
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[C++] Vector przez referencję
» 2012-08-14 12:08:16
Może nie widzę błędu przez to, że praktycznie od paru dni w as3 pisałem a nie w C++, lecz raczej powinno wszystko działać..
Otóż robię GUI na potrzeby projektu, mam klasę zakładek o nazwie bookmark oraz pasek z "plik, edycja, widok" itd.. o nazwie toolbar. Kiedy kliknę na jakiś toolbar to jego bool clicked przybiera wartość true oraz wyświetlają mi się inne toolbary. Tak samo klasa bookmark ma w sobie bool clicked. Nie mogę kliknąć na zakładkę, kiedy clicked jakiegoś toolbara jest true, oraz jak już kliknę na jakąś zakładkę, to clicked w innych zakładkach ma być false.
Niestety nie do końca wszystko działa, bo mogę kliknąć na zakładkę kiedy toolbar jest kliknięty, oraz inne zakładki nie przybierają clicked = false..
Mam nadzieję że w miarę jasno problem opisałem, tutaj jest kod:
C/C++
void GUI::bookmark::Draw( CMouse mouse, vector < bookmark >& book, vector < toolbar >& tool )
{
    if( mouse.getX() >= x && mouse.getX() <= x + w &&
    mouse.getY() >= y && mouse.getY() <= y + h &&
    mouse.Press( 1 ) )
    {
        bool Mozna = true;
        for( int i = 0; i < tool.size(); i++ )
        {
            if( tool[ i ].Rozwiniety() ) // jakis toolbar jest rozwieniety (clicked == true)
            {
                Mozna = false;
                break;
            }
        }
       
        if( Mozna )
        {
            for( int i = 0; i < book.size(); i++ ) {
                book[ i ].clicked = false;
            }
           
           
            clicked = true;
        }
    }
   
    // rysowanie
}

// ..

GUI::toolbar T_plik( "Plik", 0, 0 );
GUI::toolbar T_edycja( "Edycja", 70, 0 );
GUI::toolbar T_widok( "Widok", 140, 0 );
GUI::toolbar T_info( "Info", 210, 0 );

GUI::bookmark B_zakladki[ 2 ] = { GUI::bookmark( "Kafelki", 20, 50 ), GUI::bookmark( "Obiekty", 100, 50 ) };
vector < GUI::bookmark > book;
vector < GUI::toolbar > tool;

// ...

book.push_back( B_zakladki[ 0 ] );
book.push_back( B_zakladki[ 1 ] );
tool.push_back( T_plik );
tool.push_back( T_edycja );
tool.push_back( T_widok );
tool.push_back( T_info );

// ..

B_zakladki[ 0 ].Draw( mouse, book, tool );
B_zakladki[ 1 ].Draw( mouse, book, tool );

P-62441
waxx
» 2012-08-14 13:13:36
juz abstrahujac od tego ze calosc powinna byc zaprojektowana raczej na bazie parent-child

to wez sobie zdebuguj wpierw czy tool[ i ].rozwiniety() zwraca dobra wartosc
P-62448
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2012-08-14 13:30:23
To jest maleńkie proste GUI, nie przykładałem do tego większej wagi, dlatego tak wygląda :) Jednak mogłem całość "na sztywno" zrobić, lecz jeżeli dodałbym np jeszcze kilka toolbarów i 2 zakładki, to chciałbym już napisać te kilka linijek jakoś przejrzyście, niż grzebać głębiej w kodzie i funkcjach i tam dopisać te kilka linijek.

np. T_plik.Rozwinięty() zwraca true, lecz w tej funkcji tool[0].Rozwinięty() zwraca false. A to jest to samo...
P-62451
waxx
» 2012-08-14 14:53:02
wrzucaj do vectora wskazniki
P-62463
DejaVu
» 2012-08-14 14:58:02
To nie jest to samo, ponieważ tworzysz jego kopię i to są dwa różne obiekty.
P-62464
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2012-08-14 15:15:37
Dzięki za pomoc.
wrzucaj do vectora wskazniki
Tak też zrobiłem i działa.
Zamykam :)
P-62465
« 1 »
  Strona 1 z 1