ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/MessageDistributor.pm
Revision: 1.6
Committed: Tue Oct 28 12:20:36 2008 UTC (15 years, 7 months ago) by elmex
Branch: MAIN
CVS Tags: rel-0_9978
Changes since 1.5: +1 -0 lines
Log Message:
fixed tab update bug.

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 root 1.5 id => "",
18 elmex 1.1 title => "Log",
19 root 1.5 tooltip => "<b>Server Log</b>. This text viewer contains all recent message sent by the server.",
20     entry_tooltip => "<b>Command Entry</b>. If you enter something and press return/enter here, "
21     . "the line you entered will be sent to the server as a command.",
22     reply => ''
23 elmex 1.1 }
24     )
25     );
26    
27     return $self
28     }
29    
30     # called by MAPWIDGET activate console event
31     sub activate_console {
32 root 1.3 # nop
33 elmex 1.1 }
34    
35     # adding channel
36     sub add_channel {
37     my ($self, $chaninfo) = @_;
38    
39     $self->{info}->{$chaninfo->{id}} = $chaninfo;
40     $self->touch_channel ($chaninfo->{id});
41     }
42    
43     # set max paragraphs
44 root 1.3 sub set_max_par {
45 elmex 1.4 my ($self, $par) = @_;
46     for ($self->{log}, values %{$self->{chatview}}) {
47     $_->set_max_par ($par);
48     }
49 elmex 1.1 }
50    
51 elmex 1.2 # set fontsize for all chatviews
52 elmex 1.1 sub set_fontsize {
53 elmex 1.2 my ($self, $s) = @_;
54    
55     for ($self->{log}, values %{$self->{chatview}}) {
56     $_->set_fontsize ($s);
57     }
58 elmex 1.1 }
59    
60     # push message in
61     sub message {
62     my ($self, $para) = @_;
63     my $id = $para->{type};
64    
65     if (exists $self->{info}->{$id}) {
66     unless (exists $self->{chatview}->{$id}) {
67     $self->touch_channel ($id);
68     }
69    
70     my $cv = $self->{chatview}->{$id};
71    
72     unless ($cv) {
73     warn "message couldn't be delivered to chatview with "
74     ."id '$id', sending it to main log.";
75     $self->{log}->message ($para);
76     return;
77     }
78    
79     $cv->message ($para);
80    
81     } else {
82     $self->{log}->message ($para);
83     }
84     }
85    
86     sub touch_channel {
87     my ($self, $id) = @_;
88    
89     if (exists $self->{chatview}->{$id}) {
90     $self->update_chat ($id);
91     } else {
92     $self->init_chat ($id);
93     }
94     }
95    
96     sub update_chat {
97     my ($self, $id) = @_;
98 elmex 1.6
99 elmex 1.1 $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;