make it work correctly

This commit is contained in:
Cary Sandvig 2001-02-14 01:38:40 +00:00
parent 0793b1b516
commit cbb54dbade
2 changed files with 45 additions and 10 deletions

View File

@ -24,6 +24,7 @@ void GuiListBox::ListFunctor::doit(GuiBehavior* b) {
void GuiListBox::recompute_frame(void) {
GuiBehavior::recompute_frame();
this->freeze();
LVector3f p = _pos;
float lft = 100000.;
float rgt = -100000.;
@ -31,7 +32,7 @@ void GuiListBox::recompute_frame(void) {
float btm = 100000.;
LVector4f frm;
for (ItemVector::iterator i=_visible.begin(); i!=_visible.end();
p+=((*i)->get_height() * LVector3f::up()), ++i) {
p-=((*i)->get_height() * LVector3f::up()), ++i) {
(*i)->set_pos(p);
frm = (*i)->get_frame();
if (frm[0] < lft)
@ -47,6 +48,7 @@ void GuiListBox::recompute_frame(void) {
_right = rgt;
_top = tp;
_bottom = btm;
this->thaw();
}
void GuiListBox::visible_patching(void) {
@ -193,26 +195,51 @@ void GuiListBox::add_item(GuiItem* item) {
int GuiListBox::freeze(void) {
int result = 0;
ItemVector::iterator i;
ItemDeque::iterator j;
for (ItemVector::iterator i=_visible.begin(); i!=_visible.end(); ++i) {
for (i=_top_stack.begin(); i!=_top_stack.end(); ++i) {
int count = (*i)->freeze();
result = max(result, count);
}
for (i=_visible.begin(); i!=_visible.end(); ++i) {
int count = (*i)->freeze();
result = max(result, count);
}
for (j=_bottom_stack.begin(); j!=_bottom_stack.end(); ++j) {
int count = (*j)->freeze();
result = max(result, count);
}
_up_arrow->freeze();
_down_arrow->freeze();
return result;
}
int GuiListBox::thaw(void) {
int result = 0;
ItemVector::iterator i;
ItemDeque::iterator j;
for (ItemVector::iterator i=_visible.begin(); i!=_visible.end(); ++i) {
for (i=_top_stack.begin(); i!=_top_stack.end(); ++i) {
int count = (*i)->thaw();
result = max(result, count);
}
for (i=_visible.begin(); i!=_visible.end(); ++i) {
int count = (*i)->thaw();
result = max(result, count);
}
for (j=_bottom_stack.begin(); j!=_bottom_stack.end(); ++j) {
int count = (*j)->thaw();
result = max(result, count);
}
_up_arrow->thaw();
_down_arrow->thaw();
return result;
}
void GuiListBox::manage(GuiManager* mgr, EventHandler& eh) {
if (_mgr == (GuiManager*)0L) {
this->recompute_frame();
for (ItemVector::iterator i=_visible.begin(); i!=_visible.end(); ++i)
(*i)->manage(mgr, eh);
GuiBehavior::manage(mgr, eh);
@ -331,14 +358,14 @@ void GuiListBox::output(ostream& os) const {
os << " Top stack (" << _top_stack.size() << "):" << endl;
ItemVector::const_iterator i;
for (i=_top_stack.begin(); i!=_top_stack.end(); ++i)
os << " 0x" << (void*)(*i) << endl;
os << " 0x" << (void*)(*i) << " (" << (*i)->get_name() << ")" << endl;
os << " Visible (" << _visible.size() << "):" << endl;
for (i=_visible.begin(); i!=_visible.end(); ++i)
os << " 0x" << (void*)(*i) << endl;
os << " 0x" << (void*)(*i) << " (" << (*i)->get_name() << ")" << endl;
os << " Bottom stack (" << _bottom_stack.size() << "):" << endl;
ItemDeque::const_iterator j;
for (j=_bottom_stack.begin(); j!=_bottom_stack.end(); ++j)
os << " 0x" << (void*)(*j) << endl;
os << " 0x" << (void*)(*j) << " (" << (*j)->get_name() << ")" << endl;
for (i=_top_stack.begin(); i!=_top_stack.end(); ++i)
os << *(*i);
for (i=_visible.begin(); i!=_visible.end(); ++i)

View File

@ -596,8 +596,10 @@ PT(GuiListBox) lb1;
static void test11(GuiManager* mgr, Node* font) {
GuiLabel* ul = GuiLabel::make_simple_text_label("upup", font);
GuiSign* us = new GuiSign("up_arrow", ul);
us->set_scale(0.1);
GuiLabel* dl = GuiLabel::make_simple_text_label("dndn", font);
GuiSign* ds = new GuiSign("down_arrow", dl);
ds->set_scale(0.1);
lb1 = new GuiListBox("list_box", 4, us, ds);
GuiLabel* l1 = GuiLabel::make_simple_text_label("hyena", font);
GuiSign* s1 = new GuiSign("hyena", l1);
@ -629,6 +631,13 @@ static void test11(GuiManager* mgr, Node* font) {
l3->set_width(w);
l4->set_width(w);
l5->set_width(w);
ul->set_background_color(0., 0., 0., 1.);
dl->set_background_color(0., 0., 0., 1.);
l1->set_background_color(0., 0., 0., 1.);
l2->set_background_color(0., 0., 0., 1.);
l3->set_background_color(0., 0., 0., 1.);
l4->set_background_color(0., 0., 0., 1.);
l5->set_background_color(0., 0., 0., 1.);
lb1->add_item(s1);
lb1->add_item(s2);
lb1->add_item(s3);
@ -636,6 +645,7 @@ static void test11(GuiManager* mgr, Node* font) {
lb1->add_item(s5);
lb1->thaw();
lb1->manage(mgr, event_handler);
cout << *lb1;
}
static void test12(GuiManager* mgr, Node* font) {
@ -686,9 +696,9 @@ static void setup_gui(void) {
// test 10
// test10(mgr, font);
// test 11
// test11(mgr, font);
test11(mgr, font);
// test 12
test12(mgr, font);
// test12(mgr, font);
}
static void event_2(CPT_Event) {
@ -789,12 +799,10 @@ void gui_keys(EventHandler&) {
have_dlight = true;
event_handler.add_hook("2", event_2);
/*
// for tests 7-11
event_handler.add_hook("3", event_3);
// for test 11
event_handler.add_hook("4", event_4);
*/
event_handler.add_hook("demo-event-thing", event_demo);
}