ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/UI/MessageWindow.pm
Revision: 1.2
Committed: Mon Jul 23 15:30:46 2007 UTC (17 years ago) by root
Branch: MAIN
Changes since 1.1: +10 -2 lines
Log Message:
refactored notebook widget to use standard api, addec c_add/c_remove signals

File Contents

# User Rev Content
1 elmex 1.1 package CFPlus::UI::MessageWindow;
2    
3     use strict;
4     use utf8;
5    
6     our @ISA = CFPlus::UI::Toplevel::;
7    
8     sub new {
9     my $class = shift;
10 root 1.2
11 elmex 1.1 my $self = $class->SUPER::new (
12     name => "message_window",
13     title => "Messages",
14     border_bg => [1, 1, 1, 1],
15     x => "max",
16     y => 0,
17     force_w => $::WIDTH * 0.4,
18     force_h => $::HEIGHT * 0.5,
19     child => (my $vbox = new CFPlus::UI::VBox),
20     has_close_button => 1
21     );
22 root 1.2
23 elmex 1.1 my $nb = $self->{nb} = CFPlus::UI::Notebook->new (expand => 1);
24     my $txt = $self->{log} = new CFPlus::UI::TextScroller
25     expand => 1,
26     font => $::FONT_FIXED,
27     fontsize => $::CFG->{log_fontsize},
28     indent => -4,
29     can_hover => 1,
30     can_events => 1,
31     max_par => $::CFG->{logview_max_par},
32     tooltip => "<b>Server Log</b>. This text viewer contains all recent messages sent by the server.",
33     ;
34 root 1.2
35 elmex 1.1 my $vb2 = CFPlus::UI::VBox->new;
36     $vb2->add ($txt);
37 root 1.2 $nb->add_tab (Log => $vb2, "This is the main log of the server.");
38 elmex 1.1 $vbox->add ($nb);
39    
40     $vbox->add ($self->{input} = CFPlus::UI::Entry->new (
41     tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> "
42     . "from the client setup will be prepended (e.g. <b>shout</b>, <b>chat</b>...). "
43     . "If you prepend a slash (/), you will submit a command instead (similar to IRC). "
44     . "A better way to submit commands (and the occasional chat command) is often the map command completer.",
45     on_focus_in => sub {
46     my ($input, $prev_focus) = @_;
47    
48     delete $input->{refocus_map};
49    
50     if ($prev_focus == $::MAPWIDGET && $input->{auto_activated}) {
51     $input->{refocus_map} = 1;
52     }
53     delete $input->{auto_activated};
54    
55     0
56     },
57     on_activate => sub {
58     my ($input, $text) = @_;
59     $input->set_text ('');
60    
61     if ($text =~ /^\/(.*)/) {
62     $::CONN->user_send ($1);
63     } else {
64     my $say_cmd = $::CFG->{say_command} || 'say';
65     $::CONN->user_send ("$say_cmd $text");
66     }
67     if ($input->{refocus_map}) {
68     delete $input->{refocus_map};
69     $::MAPWIDGET->focus_in
70     }
71    
72     0
73     },
74     on_escape => sub {
75     $::MAPWIDGET->grab_focus;
76    
77     0
78     },
79     ));
80    
81     $self
82     }
83    
84     sub message {
85     my ($self, $para) = @_;
86    
87     my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
88    
89     $para->{markup} = "<span foreground='#ffffff'>$time</span> $para->{markup}";
90    
91     my $log = $self->{log};
92     $log->add_paragraph ($para);
93     $log->scroll_to_bottom;
94     }
95    
96     sub activate_console {
97     my ($self, $preset) = @_;
98 root 1.2
99 elmex 1.1 $self->{input}->{auto_activated} = 1;
100     $self->{input}->grab_focus;
101 root 1.2
102 elmex 1.1 if ($preset && $self->{input}->get_text eq '') {
103     $self->{input}->set_text ($preset);
104     }
105     }
106    
107     sub set_fontsize {
108     my ($self, $size) = @_;
109     $self->{log}->set_fontsize ($size);
110     }
111    
112     sub set_max_para {
113     my ($self, $max_par) = @_;
114 root 1.2 $self->{log}{max_par} = $max_par;
115 elmex 1.1 }
116 root 1.2
117     1;
118