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

# User Rev Content
1 elmex 1.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 root 1.3 # nop
34 elmex 1.1 }
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 root 1.3 sub set_max_par {
46 elmex 1.4 my ($self, $par) = @_;
47     for ($self->{log}, values %{$self->{chatview}}) {
48     $_->set_max_par ($par);
49     }
50 elmex 1.1 }
51    
52 elmex 1.2 # set fontsize for all chatviews
53 elmex 1.1 sub set_fontsize {
54 elmex 1.2 my ($self, $s) = @_;
55    
56     for ($self->{log}, values %{$self->{chatview}}) {
57     $_->set_fontsize ($s);
58     }
59 elmex 1.1 }
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;