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

Comparing deliantra/Deliantra-Client/DC/Item.pm (file contents):
Revision 1.4 by root, Mon Apr 23 19:17:41 2007 UTC vs.
Revision 1.12 by root, Sat Dec 29 13:44:29 2007 UTC

1package CFPlus::Item; 1package DC::Item;
2 2
3use strict; 3use strict;
4use utf8; 4use utf8;
5use Encode;
5 6
6use Crossfire::Protocol::Constants; 7use Deliantra::Protocol::Constants;
7 8
8my $last_enter_count = 1; 9my $last_enter_count = 1;
9 10
10sub desc_string { 11sub desc_string {
11 my ($self) = @_; 12 my ($self) = @_;
42} 43}
43 44
44sub do_n_dialog { 45sub do_n_dialog {
45 my ($cb) = @_; 46 my ($cb) = @_;
46 47
47 my $w = new CFPlus::UI::Toplevel 48 my $w = new DC::UI::Toplevel
48 on_delete => sub { $_[0]->destroy; 1 }, 49 on_delete => sub { $_[0]->destroy; 1 },
49 has_close_button => 1, 50 has_close_button => 1,
50 ; 51 ;
51 52
52 $w->add (my $vb = new CFPlus::UI::VBox x => "center", y => "center"); 53 $w->add (my $vb = new DC::UI::VBox x => "center", y => "center");
53 $vb->add (new CFPlus::UI::Label text => "Enter item count:"); 54 $vb->add (new DC::UI::Label text => "Enter item count:");
54 $vb->add (my $entry = new CFPlus::UI::Entry 55 $vb->add (my $entry = new DC::UI::Entry
55 text => $last_enter_count, 56 text => $last_enter_count,
56 on_activate => sub { 57 on_activate => sub {
57 my ($entry) = @_; 58 my ($entry) = @_;
58 $last_enter_count = $entry->get_text; 59 $last_enter_count = $entry->get_text;
59 $cb->($last_enter_count); 60 $cb->($last_enter_count);
70 71
71sub update_widgets { 72sub update_widgets {
72 my ($self) = @_; 73 my ($self) = @_;
73 74
74 # necessary to avoid cyclic references 75 # necessary to avoid cyclic references
75 CFPlus::weaken $self; 76 DC::weaken $self;
76 77
77 my $button_cb = sub { 78 my $button_cb = sub {
78 my (undef, $ev, $x, $y) = @_; 79 my (undef, $ev, $x, $y) = @_;
79 80
80 my $targ = $::CONN->{player}{tag}; 81 my $targ = $::CONN->{player}{tag};
81 82
82 if ($self->{container} == $::CONN->{player}{tag}) { 83 if ($self->{container} == $::CONN->{player}{tag}) {
83 $targ = $::CONN->{open_container}; 84 $targ = $::CONN->{open_container};
84 } 85 }
85 86
86 if (($ev->{mod} & CFPlus::KMOD_SHIFT) && $ev->{button} == 1) { 87 if (($ev->{mod} & DC::KMOD_SHIFT) && $ev->{button} == 1) {
87 $::CONN->send ("move $targ $self->{tag} 0") 88 $::CONN->send ("move $targ $self->{tag} 0")
88 if $targ || !($self->{flags} & F_LOCKED); 89 if $targ || !($self->{flags} & F_LOCKED);
89 } elsif (($ev->{mod} & CFPlus::KMOD_SHIFT) && $ev->{button} == 2) { 90 } elsif (($ev->{mod} & DC::KMOD_SHIFT) && $ev->{button} == 2) {
90 $self->{flags} & F_LOCKED 91 $self->{flags} & F_LOCKED
91 ? $::CONN->send ("lock " . pack "CN", 0, $self->{tag}) 92 ? $::CONN->send ("lock " . pack "CN", 0, $self->{tag})
92 : $::CONN->send ("lock " . pack "CN", 1, $self->{tag}) 93 : $::CONN->send ("lock " . pack "CN", 1, $self->{tag})
93 } elsif ($ev->{button} == 1) { 94 } elsif ($ev->{button} == 1) {
94 $::CONN->send ("examine $self->{tag}"); 95 $::CONN->send ("examine $self->{tag}");
98 my $move_prefix = $::CONN->{open_container} ? 'put' : 'drop'; 99 my $move_prefix = $::CONN->{open_container} ? 'put' : 'drop';
99 if ($self->{container} == $::CONN->{open_container}) { 100 if ($self->{container} == $::CONN->{open_container}) {
100 $move_prefix = "take"; 101 $move_prefix = "take";
101 } 102 }
102 103
103 my $shortname = CFPlus::shorten $self->{name}, 14; 104 my $shortname = DC::shorten $self->{name}, 14;
104 105
105 my @menu_items = ( 106 my @menu_items = (
106 ["examine", sub { $::CONN->send ("examine $self->{tag}") }], 107 ["examine", sub { $::CONN->send ("examine $self->{tag}") }],
107 ["mark", sub { $::CONN->send ("mark ". pack "N", $self->{tag}) }], 108 ["mark", sub { $::CONN->send ("mark ". pack "N", $self->{tag}) }],
108 ["ignite/thaw", # first try of an easier use of flint&steel 109 ["ignite/thaw", # first try of an easier use of flint&steel
114 ["inscribe", # first try of an easier use of flint&steel 115 ["inscribe", # first try of an easier use of flint&steel
115 sub { 116 sub {
116 &::open_string_query ("Text to inscribe", sub { 117 &::open_string_query ("Text to inscribe", sub {
117 my ($entry, $txt) = @_; 118 my ($entry, $txt) = @_;
118 $::CONN->send ("mark ". pack "N", $self->{tag}); 119 $::CONN->send ("mark ". pack "N", $self->{tag});
119 $::CONN->send ("command use_skill inscription $txt"); 120 $::CONN->send_utf8 ("command use_skill inscription $txt");
120 }); 121 });
121 } 122 }
122 ], 123 ],
123 ["rename", # first try of an easier use of flint&steel 124 ["rename", # first try of an easier use of flint&steel
124 sub { 125 sub {
125 &::open_string_query ("Rename item to:", sub { 126 &::open_string_query ("Rename item to:", sub {
126 my ($entry, $txt) = @_; 127 my ($entry, $txt) = @_;
127 $::CONN->send ("mark ". pack "N", $self->{tag}); 128 $::CONN->send ("mark ". pack "N", $self->{tag});
128 $::CONN->send ("command rename to <$txt>"); 129 $::CONN->send_utf8 ("command rename to <$txt>");
129 }, $self->{name}, 130 }, $self->{name},
130 "If you input no name or erase the current custom name, the custom name will be unset"); 131 "If you input no name or erase the current custom name, the custom name will be unset");
131 } 132 }
132 ], 133 ],
133 ["apply", sub { $::CONN->send ("apply $self->{tag}") }], 134 ["apply", sub { $::CONN->send ("apply $self->{tag}") }],
144 do_n_dialog (sub { $::CONN->send ("move $targ $self->{tag} $_[0]") }) 145 do_n_dialog (sub { $::CONN->send ("move $targ $self->{tag} $_[0]") })
145 } 146 }
146 ] 147 ]
147 ) 148 )
148 ), 149 ),
149 ["bind <i>apply $shortname</i> to a key" => sub { CFPlus::Macro::quick_macro ["apply $self->{name}"] }], 150 ["bind <i>apply $shortname</i> to a key" => sub { DC::Macro::quick_macro ["apply $self->{name}"] }],
150 ); 151 );
151 152
152 CFPlus::UI::Menu->new (items => \@menu_items)->popup ($ev); 153 DC::UI::Menu->new (items => \@menu_items)->popup ($ev);
153 } 154 }
154 155
155 1 156 1
156 }; 157 };
157 158
166 167
167 my $bg = $self->{flags} & F_CURSED ? [1 , 0 , 0, 0.5] 168 my $bg = $self->{flags} & F_CURSED ? [1 , 0 , 0, 0.5]
168 : $self->{flags} & F_MAGIC ? [0.2, 0.2, 1, 0.5] 169 : $self->{flags} & F_MAGIC ? [0.2, 0.2, 1, 0.5]
169 : undef; 170 : undef;
170 171
172 my $desc = DC::Item::desc_string $self;
173
171 $self->{face_widget} ||= new CFPlus::UI::Face 174 $self->{face_widget} ||= new DC::UI::Face
172 can_events => 1, 175 can_events => 1,
173 can_hover => 1, 176 can_hover => 1,
174 anim => $self->{anim}, 177 anim => $self->{anim},
175 animspeed => $self->{animspeed}, # TODO# must be set at creation time 178 animspeed => $self->{animspeed}, # TODO# must be set at creation time
176 on_button_down => $button_cb, 179 on_button_down => $button_cb,
177 ; 180 ;
178 $self->{face_widget}{bg} = $bg; 181 $self->{face_widget}{bg} = $bg;
179 $self->{face_widget}{face} = $self->{face}; 182 $self->{face_widget}{face} = $self->{face};
180 $self->{face_widget}{anim} = $self->{anim}; 183 $self->{face_widget}{anim} = $self->{anim};
181 $self->{face_widget}{animspeed} = $self->{animspeed}; 184 $self->{face_widget}{animspeed} = $self->{animspeed};
182 $self->{face_widget}->set_tooltip ( 185# $self->{face_widget}->set_tooltip (
183 "<b>Face/Animation.</b>\n" 186# "<b>Face/Animation.</b>\n"
184 . "Item uses face #$self->{face}. " 187# . "Item uses face #$self->{face}. "
185 . ($self->{animspeed} ? "Item uses animation #$self->{anim} at " . (1 / $self->{animspeed}) . "fps. " : "Item is not animated. ") 188# . ($self->{animspeed} ? "Item uses animation #$self->{anim} at " . (1 / $self->{animspeed}) . "fps. " : "Item is not animated. ")
186 . "\n\n$tooltip_std" 189# . "\n\n$tooltip_std"
187 ); 190# );
191 $self->{face_widget}->set_tooltip ("<b>$desc</b>\n\n$tooltip_std");
188 192
189 $self->{desc_widget} ||= new CFPlus::UI::Label 193 $self->{desc_widget} ||= new DC::UI::Label
190 can_events => 1, 194 can_events => 1,
191 can_hover => 1, 195 can_hover => 1,
192 ellipsise => 2, 196 ellipsise => 2,
193 align => -1, 197 align => 0,
194 198
195 on_button_down => $button_cb, 199 on_button_down => $button_cb,
196 on_tooltip_show => sub { 200 on_tooltip_show => sub {
197 my ($widget) = @_; 201 my ($widget) = @_;
198 202
199 $::CONN->ex ($self->{tag}, sub { 203 $::CONN && $::CONN->ex ($self->{tag}, sub {
200 my ($long_desc) = @_; 204 my ($long_desc) = @_;
201 205
202 $long_desc =~ s/\s+$//; 206 $long_desc =~ s/\s+$//;
203 207
204 $self->{long_desc} = $long_desc; 208 $self->{long_desc} = $long_desc;
205 $widget->set_tooltip ("<b>$long_desc</b>\n\n$tooltip_std"); 209 $widget->set_tooltip ("<b>$long_desc</b>\n\n$tooltip_std");
206 }); 210 });
207 }, 211 },
208 ; 212 ;
209 213
210 my $desc = CFPlus::Item::desc_string $self;
211 $self->{desc_widget}{bg} = $bg; 214 $self->{desc_widget}{bg} = $bg;
212 $self->{desc_widget}->set_text ($desc); 215 $self->{desc_widget}->set_text ($desc);
213 216
214 my $long_desc = $self->{long_desc} || "<b>$desc</b>."; 217 my $long_desc = $self->{long_desc} || $desc;
215 $self->{desc_widget}->set_tooltip ("$long_desc\n$tooltip_std"); 218 $self->{desc_widget}->set_tooltip ("<b>$long_desc</b>\n\n$tooltip_std");
216 219
217 $self->{weight_widget} ||= new CFPlus::UI::Label 220 $self->{weight_widget} ||= new DC::UI::Label
218 can_events => 1, 221 can_events => 1,
219 can_hover => 1, 222 can_hover => 1,
220 ellipsise => 0, 223 ellipsise => 0,
221 align => 0,
222 on_button_down => $button_cb, 224 on_button_down => $button_cb,
223 ; 225 ;
224 $self->{weight_widget}{bg} = $bg; 226 $self->{weight_widget}{bg} = $bg;
225 $self->{weight_widget}->set_text (CFPlus::Item::weight_string $self); 227 $self->{weight_widget}->set_text (DC::Item::weight_string $self);
226 $self->{weight_widget}->set_tooltip ( 228 $self->{weight_widget}->set_tooltip (
227 "<b>Weight</b>.\n" 229 "<b>Weight</b>.\n"
228 . ($self->{weight} >= 0 ? "One item weighs $self->{weight}g. " : "You have no idea how much this weighs. ") 230 . ($self->{weight} >= 0 ? "One item weighs $self->{weight}g. " : "You have no idea how much this weighs. ")
229 . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ") 231 . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ")
230 . "\n\n$tooltip_std" 232 . "\n\n$tooltip_std"
231 ); 233 );
232} 234}
235

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines