mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
and there's a skeleton
This commit is contained in:
parent
2733481d1b
commit
302b280e2a
@ -19,7 +19,8 @@
|
||||
guiSign.h guiSign.I guiSign.cxx \
|
||||
guiListBox.h guiListBox.I guiListBox.cxx \
|
||||
guiBackground.h guiBackground.I guiBackground.cxx \
|
||||
guiBehavior.h guiBehavior.I guiBehavior.cxx
|
||||
guiBehavior.h guiBehavior.I guiBehavior.cxx \
|
||||
guiChooser.h guiChooser.I guiChooser.cxx
|
||||
|
||||
#define INSTALL_HEADERS \
|
||||
guiManager.h guiManager.I \
|
||||
@ -32,7 +33,8 @@
|
||||
guiSign.h guiSign.I \
|
||||
guiListBox.h guiListBox.I \
|
||||
guiBackground.h guiBackground.I \
|
||||
guiBehavior.h guiBehavior.I
|
||||
guiBehavior.h guiBehavior.I \
|
||||
guiChooser.h guiChooser.I
|
||||
|
||||
#define IGATESCAN \
|
||||
guiManager.h guiManager.I \
|
||||
@ -45,6 +47,7 @@
|
||||
guiSign.h guiSign.I \
|
||||
guiListBox.h guiListBox.I \
|
||||
guiBackground.h guiBackground.I \
|
||||
guiBehavior.h guiBehavior.I
|
||||
guiBehavior.h guiBehavior.I \
|
||||
guiChooser.h guiChooser.I
|
||||
|
||||
#end lib_target
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "guiListBox.h"
|
||||
#include "guiBehavior.h"
|
||||
#include "guiBackground.h"
|
||||
#include "guiChooser.h"
|
||||
|
||||
#include <dconfig.h>
|
||||
|
||||
@ -31,6 +32,7 @@ ConfigureFn(config_gui) {
|
||||
GuiFrame::init_type();
|
||||
GuiListBox::init_type();
|
||||
GuiBackground::init_type();
|
||||
GuiChooser::init_type();
|
||||
}
|
||||
|
||||
float simple_text_margin_top =
|
||||
|
@ -2,3 +2,5 @@
|
||||
// Created by: cary (08Feb01)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
INLINE GuiChooser::GuiChooser(void) {}
|
||||
|
@ -2,3 +2,153 @@
|
||||
// Created by: cary (08Feb01)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "guiChooser.h"
|
||||
|
||||
TypeHandle GuiChooser::_type_handle;
|
||||
|
||||
GuiChooser::ChooseFunctor::ChooseFunctor(GuiChooser* ch,
|
||||
GuiBehavior::BehaviorFunctor* func)
|
||||
: _prev(func), _ch(ch) {
|
||||
}
|
||||
|
||||
GuiChooser::ChooseFunctor::~ChooseFunctor(void) {
|
||||
}
|
||||
|
||||
void GuiChooser::ChooseFunctor::doit(GuiBehavior* b) {
|
||||
if (b == this->_ch->_prev_button)
|
||||
this->_ch->move_prev();
|
||||
if (b == this->_ch->_next_button)
|
||||
this->_ch->move_next();
|
||||
}
|
||||
|
||||
void GuiChooser::recompute_frame(void) {
|
||||
}
|
||||
|
||||
GuiChooser::GuiChooser(const string& name, GuiButton* prev, GuiButton* next)
|
||||
: GuiBehavior(name), _curr(-1), _prev_button(prev), _next_button(next),
|
||||
_prev_functor((GuiChooser::ChooseFunctor*)0L),
|
||||
_next_functor((GuiChooser::ChooseFunctor*)0L) {
|
||||
}
|
||||
|
||||
GuiChooser::~GuiChooser(void) {
|
||||
this->unmanage();
|
||||
}
|
||||
|
||||
void GuiChooser::move_prev(void) {
|
||||
if (_curr == -1)
|
||||
return;
|
||||
}
|
||||
|
||||
void GuiChooser::move_next(void) {
|
||||
if (_curr == -1)
|
||||
return;
|
||||
}
|
||||
|
||||
void GuiChooser::add_item(GuiItem* item) {
|
||||
}
|
||||
|
||||
int GuiChooser::freeze(void) {
|
||||
int result = 0;
|
||||
|
||||
if (_curr != -1)
|
||||
result = _items[_curr]->freeze();
|
||||
return result;
|
||||
}
|
||||
|
||||
int GuiChooser::thaw(void) {
|
||||
int result = 0;
|
||||
|
||||
if (_curr != -1)
|
||||
result = _items[_curr]->thaw();
|
||||
return result;
|
||||
}
|
||||
|
||||
void GuiChooser::manage(GuiManager* mgr, EventHandler& eh) {
|
||||
if (_mgr == (GuiManager*)0L) {
|
||||
_prev_button->manage(mgr, eh);
|
||||
_next_button->manage(mgr, eh);
|
||||
if (_curr != -1)
|
||||
_items[_curr]->manage(mgr, eh);
|
||||
GuiBehavior::manage(mgr, eh);
|
||||
} else
|
||||
gui_cat->warning() << "tried to manage chooser (0x" << (void*)this
|
||||
<< ") that is already managed" << endl;
|
||||
}
|
||||
|
||||
void GuiChooser::unmanage(void) {
|
||||
_prev_button->unmanage();
|
||||
_next_button->unmanage();
|
||||
if (_curr != -1)
|
||||
_items[_curr]->unmanage();
|
||||
GuiBehavior::unmanage();
|
||||
}
|
||||
|
||||
void GuiChooser::set_scale(float f) {
|
||||
GuiBehavior::set_scale(f);
|
||||
}
|
||||
|
||||
void GuiChooser::set_pos(const LVector3f& p) {
|
||||
GuiBehavior::set_pos(p);
|
||||
}
|
||||
|
||||
void GuiChooser::start_behavior(void) {
|
||||
GuiBehavior::start_behavior();
|
||||
if (_mgr == (GuiManager*)0L)
|
||||
return;
|
||||
if (_prev_functor != (GuiChooser::ChooseFunctor*)0L) {
|
||||
_prev_button->set_behavior_functor(_prev_functor->get_prev());
|
||||
delete _prev_functor;
|
||||
}
|
||||
_prev_functor =
|
||||
new GuiChooser::ChooseFunctor(this, _prev_button->get_behavior_functor());
|
||||
_prev_button->set_behavior_functor(_prev_functor);
|
||||
_prev_button->start_behavior();
|
||||
if (_next_functor != (GuiChooser::ChooseFunctor*)0L) {
|
||||
_next_button->set_behavior_functor(_next_functor->get_prev());
|
||||
delete _next_functor;
|
||||
}
|
||||
_next_functor =
|
||||
new GuiChooser::ChooseFunctor(this, _next_button->get_behavior_functor());
|
||||
_next_button->set_behavior_functor(_next_functor);
|
||||
_next_button->start_behavior();
|
||||
}
|
||||
|
||||
void GuiChooser::stop_behavior(void) {
|
||||
GuiBehavior::stop_behavior();
|
||||
if (_mgr == (GuiManager*)0L)
|
||||
return;
|
||||
if (_prev_functor != (GuiChooser::ChooseFunctor*)0L) {
|
||||
_prev_button->set_behavior_functor(_prev_functor->get_prev());
|
||||
delete _prev_functor;
|
||||
_prev_functor = (GuiChooser::ChooseFunctor*)0L;
|
||||
_prev_button->stop_behavior();
|
||||
}
|
||||
if (_next_functor != (GuiChooser::ChooseFunctor*)0L) {
|
||||
_next_button->set_behavior_functor(_next_functor->get_prev());
|
||||
delete _next_functor;
|
||||
_next_functor = (GuiChooser::ChooseFunctor*)0L;
|
||||
_next_button->stop_behavior();
|
||||
}
|
||||
}
|
||||
|
||||
void GuiChooser::reset_behavior(void) {
|
||||
GuiBehavior::reset_behavior();
|
||||
if (_mgr == (GuiManager*)0L)
|
||||
return;
|
||||
if (_prev_functor != (GuiChooser::ChooseFunctor*)0L)
|
||||
_prev_button->reset_behavior();
|
||||
if (_next_functor != (GuiChooser::ChooseFunctor*)0L)
|
||||
_next_button->reset_behavior();
|
||||
}
|
||||
|
||||
void GuiChooser::output(ostream& os) const {
|
||||
GuiBehavior::output(os);
|
||||
os << " Chooser data:" << endl;
|
||||
os << " prev button - 0x" << (void*)_prev_button << endl;
|
||||
os << " next button - 0x" << (void*)_next_button << endl;
|
||||
os << " current - " << _curr << endl;
|
||||
os << " items (" << _items.size() << "):" << endl;
|
||||
for (ItemVector::const_iterator i=_items.begin(); i!=_items.end(); ++i)
|
||||
os << " 0x" << (void*)(*i) << endl;
|
||||
}
|
||||
|
@ -2,3 +2,87 @@
|
||||
// Created by: cary (08Feb01)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __GUICHOOSER_H__
|
||||
#define __GUICHOOSER_H__
|
||||
|
||||
#include "guiBehavior.h"
|
||||
#include "guiButton.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
// Only shows one item at a time. Has two buttons that move back and forth
|
||||
// over the list of things it has. Can do both circular and linear lists.
|
||||
class EXPCL_PANDA GuiChooser : public GuiBehavior {
|
||||
private:
|
||||
typedef vector< PT(GuiItem) > ItemVector;
|
||||
|
||||
class EXPCL_PANDA ChooseFunctor : public GuiBehavior::BehaviorFunctor {
|
||||
protected:
|
||||
GuiBehavior::BehaviorFunctor* _prev;
|
||||
GuiChooser* _ch;
|
||||
public:
|
||||
ChooseFunctor(GuiChooser*, GuiBehavior::BehaviorFunctor*);
|
||||
virtual ~ChooseFunctor(void);
|
||||
virtual void doit(GuiBehavior*);
|
||||
INLINE GuiBehavior::BehaviorFunctor* get_prev(void) { return _prev; }
|
||||
};
|
||||
|
||||
friend ChooseFunctor;
|
||||
|
||||
ItemVector _items;
|
||||
int _curr;
|
||||
PT(GuiButton) _prev_button;
|
||||
PT(GuiButton) _next_button;
|
||||
|
||||
ChooseFunctor* _prev_functor;
|
||||
ChooseFunctor* _next_functor;
|
||||
|
||||
INLINE GuiChooser(void);
|
||||
virtual void recompute_frame(void);
|
||||
PUBLISHED:
|
||||
GuiChooser(const string&, GuiButton*, GuiButton*);
|
||||
~GuiChooser(void);
|
||||
|
||||
void move_prev(void);
|
||||
void move_next(void);
|
||||
void add_item(GuiItem*);
|
||||
|
||||
virtual int freeze(void);
|
||||
virtual int thaw(void);
|
||||
|
||||
virtual void manage(GuiManager*, EventHandler&);
|
||||
virtual void unmanage(void);
|
||||
|
||||
virtual void set_scale(float);
|
||||
virtual void set_pos(const LVector3f&);
|
||||
|
||||
virtual void start_behavior(void);
|
||||
virtual void stop_behavior(void);
|
||||
virtual void reset_behavior(void);
|
||||
|
||||
virtual void output(ostream&) const;
|
||||
public:
|
||||
// type interface
|
||||
static TypeHandle get_class_type(void) {
|
||||
return _type_handle;
|
||||
}
|
||||
static void init_type(void) {
|
||||
GuiBehavior::init_type();
|
||||
register_type(_type_handle, "GuiChooser",
|
||||
GuiBehavior::get_class_type());
|
||||
}
|
||||
virtual TypeHandle get_type(void) const {
|
||||
return get_class_type();
|
||||
}
|
||||
virtual TypeHandle force_init_type(void) {
|
||||
init_type();
|
||||
return get_class_type();
|
||||
}
|
||||
private:
|
||||
static TypeHandle _type_handle;
|
||||
};
|
||||
|
||||
#include "guiChooser.I"
|
||||
|
||||
#endif /* __GUICHOOSER_H__ */
|
||||
|
@ -4,4 +4,3 @@
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
INLINE GuiListBox::GuiListBox(void) {}
|
||||
|
||||
|
@ -215,7 +215,6 @@ void GuiListBox::manage(GuiManager* mgr, EventHandler& eh) {
|
||||
if (_mgr == (GuiManager*)0L) {
|
||||
for (ItemVector::iterator i=_visible.begin(); i!=_visible.end(); ++i)
|
||||
(*i)->manage(mgr, eh);
|
||||
_eh = &eh;
|
||||
GuiBehavior::manage(mgr, eh);
|
||||
} else
|
||||
gui_cat->warning() << "tried to manage listbox (0x" << (void*)this
|
||||
|
Loading…
x
Reference in New Issue
Block a user