ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/UI.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/UI.pm (file contents):
Revision 1.221 by root, Mon May 22 03:48:50 2006 UTC vs.
Revision 1.226 by root, Tue May 23 23:14:46 2006 UTC

206 %$self = (); 206 %$self = ();
207} 207}
208 208
209sub show { 209sub show {
210 my ($self) = @_; 210 my ($self) = @_;
211
212 for (my @w = $self; @w; ) {
213 my $w = pop @w;
214 push @w, $w->children;
215 $w->{visible} = 1;
216 }
217
218 return if $self->{parent}; 211 return if $self->{parent};
219 212
220 $CFClient::UI::ROOT->add ($self); 213 $CFClient::UI::ROOT->add ($self);
221} 214}
222 215
216sub show_centered {
217 my ($self) = @_;
218 return if $self->{parent};
219
220 $self->show;
221
222 $CFClient::UI::ROOT->on_post_alloc (
223 "centered $self" => sub {
224 $self->move (($::WIDTH - $self->{w}) * 0.5, ($::HEIGHT - $self->{h}) * 0.5);
225 },
226 );
227}
228
223sub hide { 229sub hide {
224 my ($self) = @_; 230 my ($self) = @_;
225
226 for (my @w = $self; @w; ) {
227 my $w = pop @w;
228 push @w, $w->children;
229 $w->{visible} = 1;
230 }
231 231
232 undef $GRAB if $GRAB == $self; 232 undef $GRAB if $GRAB == $self;
233 undef $HOVER if $HOVER == $self; 233 undef $HOVER if $HOVER == $self;
234 234
235 $self->{parent}->remove ($self) 235 $self->{parent}->remove ($self)
743 743
744sub size_request { 744sub size_request {
745 my ($self) = @_; 745 my ($self) = @_;
746 746
747 @$self{qw(child_w child_h)} = @{$self->child}{qw(req_w req_h)}; 747 @$self{qw(child_w child_h)} = @{$self->child}{qw(req_w req_h)};
748 $self->child->configure (0, 0, @$self{qw(child_w child_h)});
749 748
750 @$self{qw(child_w child_h)} 749 @$self{qw(child_w child_h)}
751} 750}
752 751
753sub size_allocate { 752sub size_allocate {
754 my ($self, $w, $h) = @_; 753 my ($self, $w, $h) = @_;
755 754
755 my ($cw, $ch) = @$self{qw(child_w child_h)};
756# $w = $self->{w};
757 $self->child->configure (0, 0, $cw, $ch);
756 $self->update; 758 $self->update;
757} 759}
758 760
759sub set_offset { 761sub set_offset {
760 my ($self, $x, $y) = @_; 762 my ($self, $x, $y) = @_;
1488 active_fg => [0, 0, 0], 1490 active_fg => [0, 0, 0],
1489 can_hover => 1, 1491 can_hover => 1,
1490 can_focus => 1, 1492 can_focus => 1,
1491 valign => 0, 1493 valign => 0,
1492 can_events => 1, 1494 can_events => 1,
1495 #text => ...
1493 @_ 1496 @_
1494 ) 1497 )
1495} 1498}
1496 1499
1497sub _set_text { 1500sub _set_text {
2082 $self->update; 2085 $self->update;
2083 2086
2084 $self 2087 $self
2085} 2088}
2086 2089
2090sub set_range {
2091 my ($self, $range) = @_;
2092
2093 $self->{range} = $range;
2094
2095 $self->update;
2096}
2097
2087sub set_value { 2098sub set_value {
2088 my ($self, $value) = @_; 2099 my ($self, $value) = @_;
2089 2100
2090 my ($old_value, $lo, $hi, $page, $unit) = @{$self->{range}}; 2101 my ($old_value, $lo, $hi, $page, $unit) = @{$self->{range}};
2091 2102
2190 # draw handle 2201 # draw handle
2191 $tex[0]->draw_quad_alpha ($self->{knob_x}, 0, $self->{knob_w}, 1); 2202 $tex[0]->draw_quad_alpha ($self->{knob_x}, 0, $self->{knob_w}, 1);
2192 2203
2193 glDisable GL_TEXTURE_2D; 2204 glDisable GL_TEXTURE_2D;
2194} 2205}
2206
2207#############################################################################
2208
2209package CFClient::UI::ValSlider;
2210
2211our @ISA = CFClient::UI::HBox::;
2212
2213sub new {
2214 my ($class, %arg) = @_;
2215
2216 my $range = delete $arg{range};
2217
2218 my $self = $class->SUPER::new (
2219 slider => (new CFClient::UI::Slider expand => 1, range => $range),
2220 entry => (new CFClient::UI::Label text => "", template => delete $arg{template}),
2221 to_value => sub { shift },
2222 from_value => sub { shift },
2223 %arg,
2224 );
2225
2226 $self->{slider}->connect (changed => sub {
2227 my ($self, $value) = @_;
2228 $self->{parent}{entry}->set_text ($self->{parent}{to_value}->($value));
2229 $self->{parent}->emit (changed => $value);
2230 });
2231
2232# $self->{entry}->connect (changed => sub {
2233# my ($self, $value) = @_;
2234# $self->{parent}{slider}->set_value ($self->{parent}{from_value}->($value));
2235# $self->{parent}->emit (changed => $value);
2236# });
2237
2238 $self->add ($self->{slider}, $self->{entry});
2239
2240 $self->{slider}->emit (changed => $self->{slider}{range}[0]);
2241
2242 $self
2243}
2244
2245sub set_range { shift->{slider}->set_range (@_) }
2246sub set_value { shift->{slider}->set_value (@_) }
2195 2247
2196############################################################################# 2248#############################################################################
2197 2249
2198package CFClient::UI::TextView; 2250package CFClient::UI::TextView;
2199 2251
2260 2312
2261 $self->{need_reflow}++; 2313 $self->{need_reflow}++;
2262 $self->update; 2314 $self->update;
2263} 2315}
2264 2316
2317sub clear {
2318 my ($self) = @_;
2319
2320 $self->{par} = [];
2321 $self->{height} = 0;
2322
2323 $self->reflow;
2324}
2325
2265sub add_paragraph { 2326sub add_paragraph {
2266 my ($self, $color, $text, $indent) = @_; 2327 my ($self, $color, $text, $indent) = @_;
2267
2268 #TODO: intelligently "reformat" paragraph
2269 2328
2270 for my $line (split /\n/, $text) { 2329 for my $line (split /\n/, $text) {
2271 my $height = $self->text_height ($line); 2330 my $height = $self->text_height ($line);
2272 $self->{height} += $height; 2331 $self->{height} += $height;
2273 push @{$self->{par}}, [$height, $color, $indent, $line]; 2332 push @{$self->{par}}, [$height, $color, $indent, $line];
2541 2600
2542sub size_request { 2601sub size_request {
2543 (32, 8) 2602 (32, 8)
2544} 2603}
2545 2604
2605sub update {
2606 my ($self) = @_;
2607
2608 return unless $self->{visible};
2609
2610 $self->SUPER::update;
2611}
2612
2546sub _draw { 2613sub _draw {
2547 my ($self) = @_; 2614 my ($self) = @_;
2548 2615
2549 return unless $::CONN;#d# manage and cache textures differently 2616 return unless $::CONN;#d# manage and cache textures differently
2550 2617
2620 2687
2621 my $self = $class->SUPER::new ( 2688 my $self = $class->SUPER::new (
2622 can_hover => 1, 2689 can_hover => 1,
2623 can_events => 1, 2690 can_events => 1,
2624 tooltip => ((CFClient::UI::Label::escape $desc) 2691 tooltip => ((CFClient::UI::Label::escape $desc)
2625 . "\n<small>leftclick - pick up\nmiddle click - apply\nrightclick - menu</small>"), 2692 . "\n<small>leftclick - examine\nshift+leftclick - move/pickup/drop\nmiddle click - apply\nrightclick - menu</small>"),
2626 connect_button_down => sub { 2693 connect_button_down => sub {
2627 my ($self, $ev, $x, $y) = @_; 2694 my ($self, $ev, $x, $y) = @_;
2628 2695
2629 # todo: maybe put examine on 1? but should just be a tooltip :( 2696 # todo: maybe put examine on 1? but should just be a tooltip :(
2630 if ($ev->{button} == 1) { 2697 if (($ev->{mod} & CFClient::KMOD_SHIFT) && $ev->{button} == 1) {
2631 my $targ = $::CONN->{player}{tag}; 2698 my $targ = $::CONN->{player}{tag};
2632 2699
2633 if ($item->{container} == $::CONN->{player}{tag}) { 2700 if ($item->{container} == $::CONN->{player}{tag}) {
2634 $targ = $main::OPENCONT; 2701 $targ = $main::OPENCONT;
2635 } 2702 }
2636 2703
2637 $::CONN->send ("move $targ $item->{tag} 0"); 2704 $::CONN->send ("move $targ $item->{tag} 0");
2705 } elsif ($ev->{button} == 1) {
2706 $::CONN->send ("examine $item->{tag}");
2638 } elsif ($ev->{button} == 2) { 2707 } elsif ($ev->{button} == 2) {
2639 $::CONN->send ("apply $item->{tag}"); 2708 $::CONN->send ("apply $item->{tag}");
2640 } elsif ($ev->{button} == 3) { 2709 } elsif ($ev->{button} == 3) {
2641 my @menu_items = ( 2710 my @menu_items = (
2642 ["examine", sub { $::CONN->send ("examine $item->{tag}") }], 2711 ["examine", sub { $::CONN->send ("examine $item->{tag}") }],
2695 2764
2696sub new { 2765sub new {
2697 my $class = shift; 2766 my $class = shift;
2698 2767
2699 my $self = $class->SUPER::new ( 2768 my $self = $class->SUPER::new (
2700 scrolled => (new CFClient::UI::VBox), 2769 scrolled => (new CFClient::UI::Table),
2701 @_, 2770 @_,
2702 ); 2771 );
2703 2772
2704 $self 2773 $self
2705} 2774}
2716 } @$items; 2785 } @$items;
2717 2786
2718 $self->{real_items} = \@items; 2787 $self->{real_items} = \@items;
2719 2788
2720 for my $item (@items) { 2789 for my $item (@items) {
2790 $item->{item} = $item;
2721 $item = $item->{widget} ||= new CFClient::UI::InventoryItem item => $item; 2791 $item = $item->{widget} ||= new CFClient::UI::InventoryItem item => $item;
2722 $item->update_item (); 2792 $item->update_item ();
2723 } 2793 }
2724 2794
2795 my $i = 0;
2796 for (@items) {
2725 $self->{scrolled}->add (@items); 2797 $self->{scrolled}->add (0, $i, $_);
2798 my $nrof = $_->{item}->{nrof} || 1;
2799 $self->{scrolled}->add (1, $i++, new CFClient::UI::Label text => ($_->{item}->{weight} * $nrof) / 1000);
2800 }
2726 2801
2727# $range->{range} = [$self->{pos}, 0, $self->{max_pos}, $page]; 2802# $range->{range} = [$self->{pos}, 0, $self->{max_pos}, $page];
2728} 2803}
2729 2804
2730sub size_request { 2805sub size_request {
3002 $child->{x} = int $child->{x}; 3077 $child->{x} = int $child->{x};
3003 $child->{y} = int $child->{y}; 3078 $child->{y} = int $child->{y};
3004 } 3079 }
3005 3080
3006 $self->SUPER::add (@children); 3081 $self->SUPER::add (@children);
3082
3083 while (@children) {
3084 my $w = pop @children;
3085 push @children, $w->children;
3086 $w->{visible} = 1;
3087 }
3088}
3089
3090sub remove {
3091 my ($self, @children) = @_;
3092
3093 $self->SUPER::remove (@children);
3094
3095 while (@children) {
3096 my $w = pop @children;
3097 push @children, $w->children;
3098 delete $w->{visible};
3099 }
3007} 3100}
3008 3101
3009sub on_refresh { 3102sub on_refresh {
3010 my ($self, $id, $cb) = @_; 3103 my ($self, $id, $cb) = @_;
3011 3104

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines