Aktuelle Zeit: 22.12.2024, 17:38

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GUI in Datei auslagern
BeitragVerfasst: 09.01.2011, 00:39 
Offline

Registriert: 10.03.2010, 20:15
Beiträge: 19
Hi Leute,

wie der Name schon sagt möchte ich meine GUI nicht mehr hardcoded haben.
Das ist ja dank loadGUI() an sich nicht mehr schwer. Allerdings brauche ich Zugriff auf diverse Elemnte im EventListner...

Hier mal ein Code-Fetzen:
Code:
                      case GUI_ID_OPTIONS_SAVE:
                             params->AntiAlias = owndAACB->getItemData(owndAACB->getSelected());
                             params->Bits = owndBPPCB->getItemData(owndBPPCB->getSelected());
                             params->Vsync = owndVSyCB->isChecked();

                             optionsWnd->setVisible(false);
                             return true;
                        break;


Ich hatte die Idee, dass ich dann nach dem laden der GUI einfach Zugriff auf die Elemente über die ID bekomme (pseudo: gElement = GUIEnv->getElementById(id);) leider finde ich nirgends eine solche oder ähnliche Funktion =/

ich hoffe ihr könnt mir weiterhelfen :]
mfg
rotten_corpse


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 09.01.2011, 18:44 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Hab mir mal die Klasse CGUIEnvironment angeschaut:

Code:
class CGUIEnvironment : public IGUIEnvironment, public IGUIElement


Code:
//! Returns the root gui element.
IGUIElement* CGUIEnvironment::getRootGUIElement()
{
   return this;
}


Wenn ich die Intention richtig verstehe ist die GUIEnvironment der Parent von allem. Solltest also von ihm alle Children kriegen können und dann dort durch iterieren und die ID abfragen. Habs aber nicht getestet von daher nur n pointer in die richtige Richtung. Was auch ginge aber nuja sehr dirty wäre. Erstelle in deiner GUI einen unsichtbaren Parent von dem du alle Children (deine restliche GUI) abklappern könntest.

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 10.01.2011, 11:24 
Offline

Registriert: 10.03.2010, 20:15
Beiträge: 19
Hmm darauf hätte ich auch selbst kommen können ^_^*
Allerdings hab ich noch ein Problem mit der Deklaration vom Iterator und google hilft mir auch nicht wirklich weiter :/

Hier mal die gane Routine:
Code:
IGUIElement* getChildFromID(IGUIElement* node, s32 id)
{
    if (!node )
        return NULL;
    //IGUIElement* res = NULL;

    const list<IGUIElement*>& children = node->getChildren();
    list<IGUIElement*>::Iterator it = children.begin();
    for (; it != children.end(); ++it)
    {
        if ((*it)->getID() == id)
        {
            return (*it);
        }
        else
        {
            return getChildFromID(*it, id);
        }
    }
    return NULL;
};


Folgende Fehlermeldung kommt, mit der ich nich weiß umzugehen:
Code:
In function 'irr::gui::IGUIElement* getChildFromID(irr::gui::IGUIElement*, irr::s32)':
error: conversion from 'irr::core::list<irr::gui::IGUIElement*>::ConstIterator' to non-scalar type 'irr::core::list<irr::gui::IGUIElement*>::Iterator' requested
=== Build finished: 1 errors, 0 warnings ===


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 10.01.2011, 12:59 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Das selbe Problem hatte ich auch mal^^ Sollte damit behoben sein wenn du aus

Code:
list<IGUIElement*>::Iterator it = children.begin();


einen

Code:
list<IGUIElement*>::ConstIterator it = children.begin();


machst.

Grüße heck

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 10.01.2011, 14:17 
Offline

Registriert: 10.03.2010, 20:15
Beiträge: 19
Ah, danke!
Funktioniert prima ;)

Finde es recht unverständlich das eine solche Routine nicht standardmäßig ins GUIElement implementiert ist oO

mfg
rotten_corpse


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 10.01.2011, 15:01 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Ist es doch auch:

Code:
//IGUIElement.h ab Zeile 554 Version Irrlicht 1.7.1

virtual IGUIElement* getElementFromId(s32 id, bool searchchildren=false) const
   {
      IGUIElement* e = 0;

      core::list<IGUIElement*>::ConstIterator it = Children.begin();
      for (; it != Children.end(); ++it)
      {
         if ((*it)->getID() == id)
            return (*it);

         if (searchchildren)
            e = (*it)->getElementFromId(id, true);

         if (e)
            return e;
      }

      return e;
   }

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 13.01.2011, 19:39 
Offline

Registriert: 10.03.2010, 20:15
Beiträge: 19
oha. Da hab ich es echt jedes mal geschafft, wenn ich in der API Doku war, das zu überlesen :oops:


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 13.01.2011, 20:05 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Net so tragisch. Viel interessanter: Macht sie denn genau das was du wolltest? :O

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: GUI in Datei auslagern
BeitragVerfasst: 19.01.2011, 11:49 
Offline

Registriert: 10.03.2010, 20:15
Beiträge: 19
Jop. Macht sie >_<'


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de