00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "oprof_start.base.h"
00010
00011 #include <qvariant.h>
00012 #include <qpushbutton.h>
00013 #include <qtabwidget.h>
00014 #include <qwidget.h>
00015 #include <qgroupbox.h>
00016 #include <qheader.h>
00017 #include <qlistview.h>
00018 #include <qcheckbox.h>
00019 #include <qlabel.h>
00020 #include <qlineedit.h>
00021 #include <qbuttongroup.h>
00022 #include <qtoolbutton.h>
00023 #include <qlayout.h>
00024 #include <qtooltip.h>
00025 #include <qwhatsthis.h>
00026
00027
00028
00029
00030
00031
00032
00033
00034 oprof_start_base::oprof_start_base( QWidget* parent, const char* name, bool modal, WFlags fl )
00035 : QDialog( parent, name, modal, fl )
00036 {
00037 if ( !name )
00038 setName( "oprof_start_base" );
00039 setSizeGripEnabled( TRUE );
00040 oprof_start_baseLayout = new QVBoxLayout( this, 11, 6, "oprof_start_baseLayout");
00041
00042 setup_config_tab = new QTabWidget( this, "setup_config_tab" );
00043
00044 counter_setup_page = new QWidget( setup_config_tab, "counter_setup_page" );
00045 counter_setup_pageLayout = new QVBoxLayout( counter_setup_page, 11, 6, "counter_setup_pageLayout");
00046
00047 counter_group = new QGroupBox( counter_setup_page, "counter_group" );
00048 counter_group->setColumnLayout(0, Qt::Vertical );
00049 counter_group->layout()->setSpacing( 6 );
00050 counter_group->layout()->setMargin( 11 );
00051 counter_groupLayout = new QVBoxLayout( counter_group->layout() );
00052 counter_groupLayout->setAlignment( Qt::AlignTop );
00053
00054 Layout10 = new QHBoxLayout( 0, 0, 6, "Layout10");
00055
00056 events_list = new QListView( counter_group, "events_list" );
00057 events_list->addColumn( tr( "Removedincode" ) );
00058 events_list->header()->setClickEnabled( FALSE, events_list->header()->count() - 1 );
00059 events_list->setMinimumSize( QSize( 250, 0 ) );
00060 events_list->setSelectionMode( QListView::Multi );
00061 Layout10->addWidget( events_list );
00062
00063 Layout9 = new QVBoxLayout( 0, 0, 6, "Layout9");
00064
00065 os_ring_count_cb = new QCheckBox( counter_group, "os_ring_count_cb" );
00066 Layout9->addWidget( os_ring_count_cb );
00067
00068 user_ring_count_cb = new QCheckBox( counter_group, "user_ring_count_cb" );
00069 Layout9->addWidget( user_ring_count_cb );
00070
00071 Layout16 = new QHBoxLayout( 0, 0, 6, "Layout16");
00072
00073 TextLabel1_2 = new QLabel( counter_group, "TextLabel1_2" );
00074 Layout16->addWidget( TextLabel1_2 );
00075
00076 event_count_edit = new QLineEdit( counter_group, "event_count_edit" );
00077 event_count_edit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, event_count_edit->sizePolicy().hasHeightForWidth() ) );
00078 Layout16->addWidget( event_count_edit );
00079 Spacer13_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
00080 Layout16->addItem( Spacer13_2 );
00081 Layout9->addLayout( Layout16 );
00082
00083 unit_mask_group = new QButtonGroup( counter_group, "unit_mask_group" );
00084 unit_mask_group->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, unit_mask_group->sizePolicy().hasHeightForWidth() ) );
00085 unit_mask_group->setColumnLayout(0, Qt::Vertical );
00086 unit_mask_group->layout()->setSpacing( 6 );
00087 unit_mask_group->layout()->setMargin( 11 );
00088 unit_mask_groupLayout = new QGridLayout( unit_mask_group->layout() );
00089 unit_mask_groupLayout->setAlignment( Qt::AlignTop );
00090
00091 check0 = new QCheckBox( unit_mask_group, "check0" );
00092
00093 unit_mask_groupLayout->addWidget( check0, 0, 0 );
00094
00095 check1 = new QCheckBox( unit_mask_group, "check1" );
00096
00097 unit_mask_groupLayout->addMultiCellWidget( check1, 1, 2, 0, 1 );
00098
00099 check2 = new QCheckBox( unit_mask_group, "check2" );
00100
00101 unit_mask_groupLayout->addMultiCellWidget( check2, 3, 4, 0, 1 );
00102
00103 check3 = new QCheckBox( unit_mask_group, "check3" );
00104
00105 unit_mask_groupLayout->addWidget( check3, 5, 0 );
00106
00107 check4 = new QCheckBox( unit_mask_group, "check4" );
00108
00109 unit_mask_groupLayout->addWidget( check4, 6, 0 );
00110
00111 check5 = new QCheckBox( unit_mask_group, "check5" );
00112
00113 unit_mask_groupLayout->addWidget( check5, 7, 0 );
00114
00115 check6 = new QCheckBox( unit_mask_group, "check6" );
00116
00117 unit_mask_groupLayout->addMultiCellWidget( check6, 8, 9, 0, 1 );
00118
00119 check7 = new QCheckBox( unit_mask_group, "check7" );
00120
00121 unit_mask_groupLayout->addWidget( check7, 10, 0 );
00122 Spacer14 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
00123 unit_mask_groupLayout->addItem( Spacer14, 11, 1 );
00124
00125 check11 = new QCheckBox( unit_mask_group, "check11" );
00126
00127 unit_mask_groupLayout->addWidget( check11, 5, 1 );
00128
00129 check13 = new QCheckBox( unit_mask_group, "check13" );
00130
00131 unit_mask_groupLayout->addWidget( check13, 7, 1 );
00132
00133 check15 = new QCheckBox( unit_mask_group, "check15" );
00134
00135 unit_mask_groupLayout->addWidget( check15, 10, 1 );
00136
00137 check10 = new QCheckBox( unit_mask_group, "check10" );
00138
00139 unit_mask_groupLayout->addWidget( check10, 4, 1 );
00140
00141 check14 = new QCheckBox( unit_mask_group, "check14" );
00142
00143 unit_mask_groupLayout->addWidget( check14, 9, 1 );
00144
00145 check9 = new QCheckBox( unit_mask_group, "check9" );
00146
00147 unit_mask_groupLayout->addWidget( check9, 2, 1 );
00148
00149 check8 = new QCheckBox( unit_mask_group, "check8" );
00150
00151 unit_mask_groupLayout->addWidget( check8, 0, 1 );
00152
00153 check12 = new QCheckBox( unit_mask_group, "check12" );
00154
00155 unit_mask_groupLayout->addWidget( check12, 6, 1 );
00156 Layout9->addWidget( unit_mask_group );
00157 Layout10->addLayout( Layout9 );
00158 counter_groupLayout->addLayout( Layout10 );
00159
00160 event_help_label = new QLabel( counter_group, "event_help_label" );
00161 event_help_label->setEnabled( TRUE );
00162 event_help_label->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, 0, 0, event_help_label->sizePolicy().hasHeightForWidth() ) );
00163 event_help_label->setFrameShape( QLabel::WinPanel );
00164 event_help_label->setFrameShadow( QLabel::Sunken );
00165 counter_groupLayout->addWidget( event_help_label );
00166 counter_setup_pageLayout->addWidget( counter_group );
00167 setup_config_tab->insertTab( counter_setup_page, QString::fromLatin1("") );
00168
00169 configuration_page = new QWidget( setup_config_tab, "configuration_page" );
00170 configuration_pageLayout = new QVBoxLayout( configuration_page, 11, 6, "configuration_pageLayout");
00171
00172 Layout11 = new QHBoxLayout( 0, 0, 6, "Layout11");
00173
00174 TextLabel1 = new QLabel( configuration_page, "TextLabel1" );
00175 Layout11->addWidget( TextLabel1 );
00176
00177 kernel_filename_edit = new QLineEdit( configuration_page, "kernel_filename_edit" );
00178 Layout11->addWidget( kernel_filename_edit );
00179
00180 kernel_filename_tb = new QToolButton( configuration_page, "kernel_filename_tb" );
00181 Layout11->addWidget( kernel_filename_tb );
00182
00183 no_vmlinux = new QCheckBox( configuration_page, "no_vmlinux" );
00184 Layout11->addWidget( no_vmlinux );
00185 configuration_pageLayout->addLayout( Layout11 );
00186
00187 Layout12 = new QHBoxLayout( 0, 0, 6, "Layout12");
00188
00189 Layout11_2 = new QGridLayout( 0, 1, 1, 0, 6, "Layout11_2");
00190
00191 buffer_size_edit = new QLineEdit( configuration_page, "buffer_size_edit" );
00192
00193 Layout11_2->addWidget( buffer_size_edit, 0, 1 );
00194
00195 note_table_size_edit = new QLineEdit( configuration_page, "note_table_size_edit" );
00196
00197 Layout11_2->addWidget( note_table_size_edit, 1, 1 );
00198
00199 cpu_buffer_size_label = new QLabel( configuration_page, "cpu_buffer_size_label" );
00200
00201 Layout11_2->addWidget( cpu_buffer_size_label, 3, 0 );
00202
00203 cpu_buffer_size_edit = new QLineEdit( configuration_page, "cpu_buffer_size_edit" );
00204
00205 Layout11_2->addWidget( cpu_buffer_size_edit, 3, 1 );
00206
00207 buffer_size_label = new QLabel( configuration_page, "buffer_size_label" );
00208
00209 Layout11_2->addWidget( buffer_size_label, 0, 0 );
00210
00211 note_table_size_label = new QLabel( configuration_page, "note_table_size_label" );
00212
00213 Layout11_2->addWidget( note_table_size_label, 1, 0 );
00214
00215 buffer_watershed_edit = new QLineEdit( configuration_page, "buffer_watershed_edit" );
00216
00217 Layout11_2->addWidget( buffer_watershed_edit, 2, 1 );
00218
00219 buffer_watershed_label = new QLabel( configuration_page, "buffer_watershed_label" );
00220
00221 Layout11_2->addWidget( buffer_watershed_label, 2, 0 );
00222 Layout12->addLayout( Layout11_2 );
00223 Spacer11 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
00224 Layout12->addItem( Spacer11 );
00225 configuration_pageLayout->addLayout( Layout12 );
00226
00227 Layout36 = new QGridLayout( 0, 1, 1, 0, 6, "Layout36");
00228
00229 Layout34 = new QVBoxLayout( 0, 0, 6, "Layout34");
00230
00231 verbose = new QCheckBox( configuration_page, "verbose" );
00232 Layout34->addWidget( verbose );
00233
00234 separate_lib_cb = new QCheckBox( configuration_page, "separate_lib_cb" );
00235 Layout34->addWidget( separate_lib_cb );
00236
00237 separate_kernel_cb = new QCheckBox( configuration_page, "separate_kernel_cb" );
00238 Layout34->addWidget( separate_kernel_cb );
00239
00240 separate_cpu_cb = new QCheckBox( configuration_page, "separate_cpu_cb" );
00241 Layout34->addWidget( separate_cpu_cb );
00242
00243 separate_thread_cb = new QCheckBox( configuration_page, "separate_thread_cb" );
00244 Layout34->addWidget( separate_thread_cb );
00245
00246 Layout33 = new QHBoxLayout( 0, 0, 6, "Layout33");
00247
00248 callgraph_depth_label = new QLabel( configuration_page, "callgraph_depth_label" );
00249 Layout33->addWidget( callgraph_depth_label );
00250
00251 callgraph_depth_edit = new QLineEdit( configuration_page, "callgraph_depth_edit" );
00252 Layout33->addWidget( callgraph_depth_edit );
00253 Layout34->addLayout( Layout33 );
00254
00255 Layout36->addLayout( Layout34, 0, 0 );
00256 Spacer12 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
00257 Layout36->addItem( Spacer12, 0, 1 );
00258 configuration_pageLayout->addLayout( Layout36 );
00259 Spacer9 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
00260 configuration_pageLayout->addItem( Spacer9 );
00261 setup_config_tab->insertTab( configuration_page, QString::fromLatin1("") );
00262 oprof_start_baseLayout->addWidget( setup_config_tab );
00263
00264 daemon_label = new QLabel( this, "daemon_label" );
00265 daemon_label->setFrameShape( QLabel::Panel );
00266 daemon_label->setFrameShadow( QLabel::Sunken );
00267 oprof_start_baseLayout->addWidget( daemon_label );
00268
00269 Layout37 = new QHBoxLayout( 0, 0, 6, "Layout37");
00270
00271 start_profiler_btn = new QPushButton( this, "start_profiler_btn" );
00272 Layout37->addWidget( start_profiler_btn );
00273
00274 flush_profiler_data_btn = new QPushButton( this, "flush_profiler_data_btn" );
00275 Layout37->addWidget( flush_profiler_data_btn );
00276
00277 stop_profiler_btn = new QPushButton( this, "stop_profiler_btn" );
00278 Layout37->addWidget( stop_profiler_btn );
00279 Spacer5 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
00280 Layout37->addItem( Spacer5 );
00281
00282 reset_sample_files_btn = new QPushButton( this, "reset_sample_files_btn" );
00283 Layout37->addWidget( reset_sample_files_btn );
00284
00285 quit_and_save_btn = new QPushButton( this, "quit_and_save_btn" );
00286 quit_and_save_btn->setAutoDefault( TRUE );
00287 Layout37->addWidget( quit_and_save_btn );
00288 oprof_start_baseLayout->addLayout( Layout37 );
00289 languageChange();
00290 resize( QSize(625, 735).expandedTo(minimumSizeHint()) );
00291 clearWState( WState_Polished );
00292
00293
00294 connect( start_profiler_btn, SIGNAL( clicked() ), this, SLOT( on_start_profiler() ) );
00295 connect( stop_profiler_btn, SIGNAL( clicked() ), this, SLOT( on_stop_profiler() ) );
00296 connect( flush_profiler_data_btn, SIGNAL( clicked() ), this, SLOT( on_flush_profiler_data() ) );
00297 connect( quit_and_save_btn, SIGNAL( clicked() ), this, SLOT( accept() ) );
00298 connect( kernel_filename_tb, SIGNAL( clicked() ), this, SLOT( choose_kernel_filename() ) );
00299 connect( no_vmlinux, SIGNAL( toggled(bool) ), kernel_filename_tb, SLOT( setDisabled(bool) ) );
00300 connect( no_vmlinux, SIGNAL( toggled(bool) ), kernel_filename_edit, SLOT( setDisabled(bool) ) );
00301 connect( no_vmlinux, SIGNAL( toggled(bool) ), TextLabel1, SLOT( setDisabled(bool) ) );
00302 connect( separate_kernel_cb, SIGNAL( stateChanged(int) ), this, SLOT( on_separate_kernel_cb_changed(int) ) );
00303 connect( reset_sample_files_btn, SIGNAL( clicked() ), this, SLOT( on_reset_sample_files() ) );
00304 connect( events_list, SIGNAL( selectionChanged() ), this, SLOT( event_selected() ) );
00305 connect( events_list, SIGNAL( currentChanged(QListViewItem*) ), this, SLOT( event_over(QListViewItem *) ) );
00306 connect( events_list, SIGNAL( onItem(QListViewItem*) ), this, SLOT( event_over(QListViewItem *) ) );
00307
00308
00309 setTabOrder( setup_config_tab, events_list );
00310 setTabOrder( events_list, os_ring_count_cb );
00311 setTabOrder( os_ring_count_cb, user_ring_count_cb );
00312 setTabOrder( user_ring_count_cb, event_count_edit );
00313 setTabOrder( event_count_edit, check0 );
00314 setTabOrder( check0, check1 );
00315 setTabOrder( check1, check2 );
00316 setTabOrder( check2, check3 );
00317 setTabOrder( check3, check4 );
00318 setTabOrder( check4, check5 );
00319 setTabOrder( check5, check6 );
00320 setTabOrder( check6, check7 );
00321 setTabOrder( check7, check8 );
00322 setTabOrder( check8, check9 );
00323 setTabOrder( check9, check10 );
00324 setTabOrder( check10, check11 );
00325 setTabOrder( check11, check12 );
00326 setTabOrder( check12, check13 );
00327 setTabOrder( check13, check14 );
00328 setTabOrder( check14, check15 );
00329 setTabOrder( check15, start_profiler_btn );
00330 setTabOrder( start_profiler_btn, flush_profiler_data_btn );
00331 setTabOrder( flush_profiler_data_btn, stop_profiler_btn );
00332 setTabOrder( stop_profiler_btn, reset_sample_files_btn );
00333 setTabOrder( reset_sample_files_btn, quit_and_save_btn );
00334 setTabOrder( quit_and_save_btn, kernel_filename_edit );
00335 setTabOrder( kernel_filename_edit, no_vmlinux );
00336 setTabOrder( no_vmlinux, buffer_size_edit );
00337 setTabOrder( buffer_size_edit, note_table_size_edit );
00338 setTabOrder( note_table_size_edit, buffer_watershed_edit );
00339 setTabOrder( buffer_watershed_edit, verbose );
00340 setTabOrder( verbose, separate_lib_cb );
00341 setTabOrder( separate_lib_cb, separate_kernel_cb );
00342 setTabOrder( separate_kernel_cb, separate_cpu_cb );
00343 setTabOrder( separate_cpu_cb, separate_thread_cb );
00344 setTabOrder( separate_thread_cb, callgraph_depth_edit );
00345
00346
00347 TextLabel1_2->setBuddy( event_count_edit );
00348 TextLabel1->setBuddy( kernel_filename_edit );
00349 cpu_buffer_size_label->setBuddy( cpu_buffer_size_edit );
00350 buffer_size_label->setBuddy( buffer_size_edit );
00351 note_table_size_label->setBuddy( note_table_size_edit );
00352 buffer_watershed_label->setBuddy( buffer_watershed_edit );
00353 callgraph_depth_label->setBuddy( callgraph_depth_edit );
00354 }
00355
00356
00357
00358
00359 oprof_start_base::~oprof_start_base()
00360 {
00361
00362 }
00363
00364
00365
00366
00367
00368 void oprof_start_base::languageChange()
00369 {
00370 setCaption( tr( "Start profiler" ) );
00371 counter_group->setTitle( tr( "Events" ) );
00372 events_list->header()->setLabel( 0, tr( "Removedincode" ) );
00373 QToolTip::add( events_list, tr( "Available events" ) );
00374 os_ring_count_cb->setText( tr( "Profile &kernel" ) );
00375 QToolTip::add( os_ring_count_cb, tr( "Profile kernel code" ) );
00376 user_ring_count_cb->setText( tr( "Profile &user binaries" ) );
00377 QToolTip::add( user_ring_count_cb, tr( "Profile user libraries and applications" ) );
00378 TextLabel1_2->setText( tr( "C&ount" ) );
00379 QToolTip::add( event_count_edit, tr( "Set the count value" ) );
00380 unit_mask_group->setTitle( tr( "Unit mask" ) );
00381 QToolTip::add( unit_mask_group, tr( "Unit mask settings for this event" ) );
00382 check0->setText( tr( "check0" ) );
00383 check1->setText( tr( "check1" ) );
00384 check2->setText( tr( "check2" ) );
00385 check3->setText( tr( "check3" ) );
00386 check4->setText( tr( "check4" ) );
00387 check5->setText( tr( "check5" ) );
00388 check6->setText( tr( "check6" ) );
00389 check7->setText( tr( "check7" ) );
00390 check11->setText( tr( "check11" ) );
00391 check13->setText( tr( "check13" ) );
00392 check15->setText( tr( "check15" ) );
00393 check10->setText( tr( "check10" ) );
00394 check14->setText( tr( "check14" ) );
00395 check9->setText( tr( "check9" ) );
00396 check8->setText( tr( "check8" ) );
00397 check12->setText( tr( "check12" ) );
00398 event_help_label->setText( QString::null );
00399 setup_config_tab->changeTab( counter_setup_page, tr( "&Setup" ) );
00400 TextLabel1->setText( tr( "&Kernel image file" ) );
00401 QToolTip::add( kernel_filename_edit, tr( "The vmlinux file of the running kernel" ) );
00402 kernel_filename_tb->setText( tr( "..." ) );
00403 no_vmlinux->setText( tr( "No kernel image" ) );
00404 QToolTip::add( no_vmlinux, tr( "No kernel image available. Disables kernel profiling." ) );
00405 QToolTip::add( buffer_size_edit, tr( "The size of the profiler's buffers" ) );
00406 cpu_buffer_size_label->setText( tr( "Cpu buffer size" ) );
00407 buffer_size_label->setText( tr( "&Buffer size" ) );
00408 note_table_size_label->setText( tr( "Note Size" ) );
00409 buffer_watershed_label->setText( tr( "Buffer watershed" ) );
00410 verbose->setText( tr( "&Verbose" ) );
00411 QToolTip::add( verbose, tr( "Very verbose output in log file" ) );
00412 separate_lib_cb->setText( tr( "Per-application profiles" ) );
00413 QToolTip::add( separate_lib_cb, tr( "Separate samples for each shared library. This increases the time and space overhead of OProfile." ) );
00414 separate_kernel_cb->setText( tr( "Per-application profiles, including kernel" ) );
00415 QToolTip::add( separate_kernel_cb, tr( "Separate samples for each shared library and kernel samples. This increases the time and space overhead of OProfile." ) );
00416 separate_cpu_cb->setText( tr( "Per-CPU profiles" ) );
00417 QToolTip::add( separate_cpu_cb, tr( "Separate samples for each shared library and kernel samples. This increases the time and space overhead of OProfile." ) );
00418 separate_thread_cb->setText( tr( "Per-thread/task profiles" ) );
00419 QToolTip::add( separate_thread_cb, tr( "Separate samples for each shared library and kernel samples. This increases the time and space overhead of OProfile." ) );
00420 callgraph_depth_label->setText( tr( "callgraph depth, zero to disable" ) );
00421 setup_config_tab->changeTab( configuration_page, tr( "&Configuration" ) );
00422 daemon_label->setText( QString::null );
00423 QToolTip::add( daemon_label, tr( "Current daemon status" ) );
00424 start_profiler_btn->setText( tr( "St&art" ) );
00425 flush_profiler_data_btn->setText( tr( "&Flush" ) );
00426 stop_profiler_btn->setText( tr( "Stop" ) );
00427 reset_sample_files_btn->setText( tr( "Reset sample files" ) );
00428 quit_and_save_btn->setText( tr( "Save and &quit" ) );
00429 }
00430
00431 void oprof_start_base::choose_kernel_filename()
00432 {
00433 qWarning( "oprof_start_base::choose_kernel_filename(): Not implemented yet" );
00434 }
00435
00436 void oprof_start_base::event_over(QListViewItem*)
00437 {
00438 qWarning( "oprof_start_base::event_over(QListViewItem*): Not implemented yet" );
00439 }
00440
00441 void oprof_start_base::event_selected()
00442 {
00443 qWarning( "oprof_start_base::event_selected(): Not implemented yet" );
00444 }
00445
00446 void oprof_start_base::on_reset_sample_files()
00447 {
00448 qWarning( "oprof_start_base::on_reset_sample_files(): Not implemented yet" );
00449 }
00450
00451 void oprof_start_base::on_flush_profiler_data()
00452 {
00453 qWarning( "oprof_start_base::on_flush_profiler_data(): Not implemented yet" );
00454 }
00455
00456 void oprof_start_base::on_separate_kernel_cb_changed(int)
00457 {
00458 qWarning( "oprof_start_base::on_separate_kernel_cb_changed(int): Not implemented yet" );
00459 }
00460
00461 void oprof_start_base::on_start_profiler()
00462 {
00463 qWarning( "oprof_start_base::on_start_profiler(): Not implemented yet" );
00464 }
00465
00466 void oprof_start_base::on_stop_profiler()
00467 {
00468 qWarning( "oprof_start_base::on_stop_profiler(): Not implemented yet" );
00469 }
00470