ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/MessageDistributor.pm
Revision: 1.4
Committed: Fri Mar 21 11:17:11 2008 UTC (16 years, 2 months ago) by elmex
Branch: MAIN
CVS Tags: rel-0_9968, rel-0_9972, rel-0_9973, rel-0_9974, rel-0_9975, rel-0_9976, rel-0_9971, rel-0_9967, rel-1_21, rel-0_9966
Changes since 1.3: +4 -1 lines
Log Message:
fixed a naughty memoryleak, the deep blue highlighting and when the input of the chat window is activated the message window becomes visiable (if it wasn't already visible anyways)

File Contents

# Content
1 package DC::MessageDistributor;
2 use strict;
3 no warnings;
4
5 sub new {
6 my $this = shift;
7 my $class = ref($this) || $this;
8 my $self = { @_ };
9 bless $self, $class;
10
11 $self->{dockbar}->add_dock (
12 $self->{log} = DC::UI::ChatView->new (
13 expand => 1,
14 can_close => 0,
15 can_undock => 0,
16 info => {
17 title => "Log",
18 tooltip =>
19 "<b>Server Log</b>. This text viewer contains all recent message sent by the server.",
20 entry_tooltip =>
21 "<b>Command Entry</b>. If you enter something and press return/enter here, "
22 ."the line you entered will be sent to the server as a command.",
23 reply => ''
24 }
25 )
26 );
27
28 return $self
29 }
30
31 # called by MAPWIDGET activate console event
32 sub activate_console {
33 # nop
34 }
35
36 # adding channel
37 sub add_channel {
38 my ($self, $chaninfo) = @_;
39
40 $self->{info}->{$chaninfo->{id}} = $chaninfo;
41 $self->touch_channel ($chaninfo->{id});
42 }
43
44 # set max paragraphs
45 sub set_max_par {
46 my ($self, $par) = @_;
47 for ($self->{log}, values %{$self->{chatview}}) {
48 $_->set_max_par ($par);
49 }
50 }
51
52 # set fontsize for all chatviews
53 sub set_fontsize {
54 my ($self, $s) = @_;
55
56 for ($self->{log}, values %{$self->{chatview}}) {
57 $_->set_fontsize ($s);
58 }
59 }
60
61 # push message in
62 sub message {
63 my ($self, $para) = @_;
64 my $id = $para->{type};
65
66 if (exists $self->{info}->{$id}) {
67 unless (exists $self->{chatview}->{$id}) {
68 $self->touch_channel ($id);
69 }
70
71 my $cv = $self->{chatview}->{$id};
72
73 unless ($cv) {
74 warn "message couldn't be delivered to chatview with "
75 ."id '$id', sending it to main log.";
76 $self->{log}->message ($para);
77 return;
78 }
79
80 $cv->message ($para);
81
82 } else {
83 $self->{log}->message ($para);
84 }
85 }
86
87 sub touch_channel {
88 my ($self, $id) = @_;
89
90 if (exists $self->{chatview}->{$id}) {
91 $self->update_chat ($id);
92 } else {
93 $self->init_chat ($id);
94 }
95 }
96
97 sub update_chat {
98 my ($self, $id) = @_;
99 $self->{chatview}->{$id}->update_info ($self->{info}->{$id});
100 }
101
102 sub init_chat {
103 my ($self, $id) = @_;
104
105 my $chaninfo = $self->{info}->{$id};
106 my $dock = $self->{chatview}->{$id} =
107 DC::UI::ChatView->new (
108 expand => 1,
109 info => $chaninfo,
110 );
111 $dock->connect (close_dock => sub {
112 delete $self->{chatview}->{$id};
113 0
114 });
115 $self->{dockbar}->add_dock ($dock);
116 }
117
118 1;