1
/*****************************************************************************
2
* messages.cpp : wxWindows plugin for vlc
3
*****************************************************************************
4
* Copyright (C) 2000-2004 the VideoLAN team
5
* $Id: 88827462fe28bd1a6289b8be274a1c893ec314a7 $
7
* Authors: Olivier Teulière <ipkiss@via.ecp.fr>
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2 of the License, or
12
* (at your option) any later version.
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22
*****************************************************************************/
24
#include "dialogs/messages.hpp"
26
/*****************************************************************************
28
*****************************************************************************/
30
/* IDs for the controls and the menu commands */
32
BEGIN_EVENT_TABLE(Messages, wxFrame)
34
EVT_BUTTON(wxID_CLOSE, Messages::OnButtonClose)
35
EVT_BUTTON(wxID_CLEAR, Messages::OnClear)
36
EVT_BUTTON(wxID_SAVEAS, Messages::OnSaveLog)
38
/* Special events : we don't want to destroy the window when the user
40
EVT_CLOSE(Messages::OnClose)
43
/*****************************************************************************
45
*****************************************************************************/
46
Messages::Messages( intf_thread_t *_p_intf, wxWindow *p_parent ):
47
wxFrame( p_parent, -1, wxU(_("Messages")), wxDefaultPosition,
48
wxDefaultSize, wxDEFAULT_FRAME_STYLE )
52
b_verbose = VLC_FALSE;
53
SetIcon( *p_intf->p_sys->p_icon );
54
save_log_dialog = NULL;
55
b_verbose = VLC_FALSE;
57
/* Create a panel to put everything in */
58
wxPanel *messages_panel = new wxPanel( this, -1 );
59
messages_panel->SetAutoLayout( TRUE );
61
/* Create the textctrl and some text attributes */
62
textctrl = new wxTextCtrl( messages_panel, -1, wxT(""), wxDefaultPosition,
63
wxSize::wxSize( 400, 500 ), wxTE_MULTILINE | wxTE_READONLY |
64
wxTE_RICH | wxTE_NOHIDESEL );
65
info_attr = new wxTextAttr( wxColour::wxColour( 0, 128, 0 ) );
66
err_attr = new wxTextAttr( *wxRED );
67
warn_attr = new wxTextAttr( *wxBLUE );
68
dbg_attr = new wxTextAttr( *wxBLACK );
70
/* Create the Close button */
71
wxButton *close_button = new wxButton( messages_panel, wxID_CLOSE,
73
close_button->SetDefault();
75
/* Create the Clear button */
76
wxButton *clear_button = new wxButton( messages_panel, wxID_CLEAR,
79
/* Create the Save Log button */
80
wxButton *save_log_button = new wxButton( messages_panel, wxID_SAVEAS,
81
wxU(_("Save &As...")));
84
/* Place everything in sizers */
85
wxBoxSizer *buttons_sizer = new wxBoxSizer( wxHORIZONTAL );
86
buttons_sizer->Add( save_log_button, 0, wxEXPAND |wxALIGN_LEFT| wxALL, 5 );
87
buttons_sizer->Add( clear_button, 0, wxEXPAND |wxALIGN_RIGHT| wxALL, 5 );
88
buttons_sizer->Add( close_button, 0, wxEXPAND |wxALIGN_RIGHT| wxALL, 5 );
89
buttons_sizer->Add( new wxPanel( this, -1 ), 1, wxALL, 5 );
90
buttons_sizer->Layout();
91
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
92
wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
93
panel_sizer->Add( textctrl, 1, wxEXPAND | wxALL, 5 );
94
panel_sizer->Add( buttons_sizer, 0, wxEXPAND | wxALL, 5 );
95
panel_sizer->Layout();
96
messages_panel->SetSizerAndFit( panel_sizer );
97
main_sizer->Add( messages_panel, 1, wxGROW, 0 );
99
SetSizerAndFit( main_sizer );
102
Messages::~Messages()
105
if( save_log_dialog ) delete save_log_dialog;
113
bool Messages::Show( bool show )
116
return wxFrame::Show( show );
119
void Messages::UpdateLog()
121
msg_subscription_t *p_sub = p_intf->p_sys->p_sub;
124
vlc_mutex_lock( p_sub->p_lock );
125
int i_stop = *p_sub->pi_stop;
126
vlc_mutex_unlock( p_sub->p_lock );
129
if( p_sub->i_start != i_stop )
131
textctrl->SetInsertionPointEnd();
133
for( i_start = p_sub->i_start;
135
i_start = (i_start+1) % VLC_MSG_QSIZE )
139
VLC_MSG_ERR != p_sub->p_msg[i_start].i_type )
142
/* Append all messages to log window */
143
textctrl->SetDefaultStyle( *dbg_attr );
144
(*textctrl) << wxL2U(p_sub->p_msg[i_start].psz_module);
146
switch( p_sub->p_msg[i_start].i_type )
149
(*textctrl) << wxT(": ");
150
textctrl->SetDefaultStyle( *info_attr );
153
(*textctrl) << wxT(" error: ");
154
textctrl->SetDefaultStyle( *err_attr );
157
(*textctrl) << wxT(" warning: ");
158
textctrl->SetDefaultStyle( *warn_attr );
162
(*textctrl) << wxT(" debug: ");
167
(*textctrl) << wxL2U(p_sub->p_msg[i_start].psz_msg) << wxT("\n");
170
vlc_mutex_lock( p_sub->p_lock );
171
p_sub->i_start = i_start;
172
vlc_mutex_unlock( p_sub->p_lock );
176
/*****************************************************************************
178
*****************************************************************************/
179
void Messages::OnButtonClose( wxCommandEvent& WXUNUSED(event) )
185
void Messages::OnClose( wxCloseEvent& WXUNUSED(event) )
190
void Messages::OnClear( wxCommandEvent& WXUNUSED(event) )
195
void Messages::OnSaveLog( wxCommandEvent& WXUNUSED(event) )
197
if( save_log_dialog == NULL )
198
save_log_dialog = new wxFileDialog( this,
199
wxU(_("Save Messages As...")),
200
wxT(""), wxT("messages"), wxT("*"), wxSAVE | wxOVERWRITE_PROMPT );
202
if( save_log_dialog && save_log_dialog->ShowModal() == wxID_OK )
204
if( !textctrl->SaveFile( save_log_dialog->GetPath() ) )
206
// [FIX ME] should print an error message