You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/khotkeys/kcontrol/windowdef_list_widget.cpp

240 lines
7.5 KiB

/****************************************************************************
KHotKeys
Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org>
Distributed under the terms of the GNU General Public License version 2.
****************************************************************************/
#define _WINDOWDEF_LIST_WIDGET_CPP_
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "windowdef_list_widget.h"
#include <assert.h>
#include <tqpushbutton.h>
#include <tqheader.h>
#include <tqlineedit.h>
#include <tqpopupmenu.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <khlistview.h>
#include <windows.h>
#include "windowdef_simple_widget.h"
#include "kcmkhotkeys.h"
namespace KHotKeys
{
// Windowdef_list_widget
Windowdef_list_widget::Windowdef_list_widget( TQWidget* parent_P, const char* name_P )
: Windowdef_list_widget_ui( parent_P, name_P ), autodetect_object( NULL ),
autodetect_slot( NULL ), selected_item( NULL )
{
TQPopupMenu* popup = new TQPopupMenu; // CHECKME looks like setting parent doesn't work
popup->insertItem( i18n( "Simple Window..." ), TYPE_WINDOWDEF_SIMPLE );
connect( popup, TQ_SIGNAL( activated( int )), TQ_SLOT( new_selected( int )));
connect( windows_listview, TQ_SIGNAL( doubleClicked ( TQListViewItem *, const TQPoint &, int ) ),
this, TQ_SLOT( modify_pressed() ) );
new_button->setPopup( popup );
windows_listview->header()->hide();
windows_listview->addColumn( "" );
windows_listview->setSorting( -1 );
windows_listview->setForceSelect( true );
copy_button->setEnabled( false );
modify_button->setEnabled( false );
delete_button->setEnabled( false );
clear_data();
// KHotKeys::Module::changed()
connect( new_button, TQ_SIGNAL( clicked()),
module, TQ_SLOT( changed()));
connect( copy_button, TQ_SIGNAL( clicked()),
module, TQ_SLOT( changed()));
connect( modify_button, TQ_SIGNAL( clicked()),
module, TQ_SLOT( changed()));
connect( delete_button, TQ_SIGNAL( clicked()),
module, TQ_SLOT( changed()));
connect( comment_lineedit, TQ_SIGNAL( textChanged( const TQString& )),
module, TQ_SLOT( changed()));
}
Windowdef_list_widget::~Windowdef_list_widget()
{
delete new_button->popup();
}
void Windowdef_list_widget::clear_data()
{
comment_lineedit->clear();
windows_listview->clear();
}
void Windowdef_list_widget::set_data( const Windowdef_list* data_P )
{
if( data_P == NULL )
{
clear_data();
return;
}
comment_lineedit->setText( data_P->comment());
Windowdef_list_item* after = NULL;
windows_listview->clear();
for( Windowdef_list::Iterator it( *data_P );
*it;
++it )
after = create_listview_item( *it, windows_listview, NULL, after, true );
}
Windowdef_list* Windowdef_list_widget::get_data() const
{
// CHECKME TODO hmm, tady to bude chtit asi i children :(
Windowdef_list* list = new Windowdef_list( comment_lineedit->text());
for( TQListViewItem* pos = windows_listview->firstChild();
pos != NULL;
pos = pos->nextSibling())
list->append( static_cast< Windowdef_list_item* >( pos )->window()->copy());
return list;
}
void Windowdef_list_widget::new_selected( int type_P )
{
Windowdef_dialog* dlg = NULL;
switch( type_P )
{
case TYPE_WINDOWDEF_SIMPLE: // Windowdef_simple
dlg = new Windowdef_simple_dialog(
new Windowdef_simple( "", "", Windowdef_simple::NOT_IMPORTANT, "",
Windowdef_simple::NOT_IMPORTANT, "", Windowdef_simple::NOT_IMPORTANT,
Windowdef_simple::WINDOW_TYPE_NORMAL | Windowdef_simple::WINDOW_TYPE_DIALOG ),
NULL, NULL ); // CHECKME tady pak autodetect
break;
}
if( dlg != NULL )
{
Windowdef* window = dlg->edit_windowdef();
if( window != NULL )
windows_listview->setSelected( create_listview_item( window, windows_listview,
NULL, selected_item, false ), true );
// CHECKME tady pak jeste spravne vnoreni, kdyz bude skupina
delete dlg;
}
}
void Windowdef_list_widget::copy_pressed()
{
windows_listview->setSelected( create_listview_item( selected_item->window(),
selected_item->parent() ? NULL : windows_listview, selected_item->parent(),
selected_item, true ), true );
}
void Windowdef_list_widget::delete_pressed()
{
delete selected_item; // CHECKME snad vyvola signaly pro enable()
}
void Windowdef_list_widget::modify_pressed()
{
edit_listview_item( selected_item );
}
void Windowdef_list_widget::current_changed( TQListViewItem* item_P )
{
// if( item_P == selected_item )
// return;
selected_item = static_cast< Windowdef_list_item* >( item_P );
// windows_listview->setSelected( item_P, true );
copy_button->setEnabled( item_P != NULL );
modify_button->setEnabled( item_P != NULL );
delete_button->setEnabled( item_P != NULL );
}
Windowdef_list_item* Windowdef_list_widget::create_listview_item( Windowdef* window_P,
TQListView* parent1_P, TQListViewItem* parent2_P, TQListViewItem* after_P, bool copy_P )
{
Windowdef* new_win = copy_P ? window_P->copy() : window_P;
// CHECKME uz by nemelo byt treba
/* if( after_P == NULL )
{
if( parent1_P == NULL )
return new Windowdef_list_item( parent2_P, new_win );
else
return new Windowdef_list_item( parent1_P, new_win );
}
else*/
{
if( parent1_P == NULL )
return new Windowdef_list_item( parent2_P, after_P, new_win );
else
return new Windowdef_list_item( parent1_P, after_P, new_win );
}
}
void Windowdef_list_widget::edit_listview_item( Windowdef_list_item* item_P )
{
Windowdef_dialog* dlg = NULL;
if( Windowdef_simple* window = dynamic_cast< Windowdef_simple* >( item_P->window()))
dlg = new Windowdef_simple_dialog( window, autodetect_object, autodetect_slot );
else // CHECKME TODO pridat dalsi
assert( false );
Windowdef* new_window = dlg->edit_windowdef();
if( new_window != NULL )
{
item_P->set_window( new_window );
item_P->widthChanged( 0 ); // SELI tohle i u dalsich listview?
windows_listview->repaintItem( item_P );
}
delete dlg;
}
// Windowdef_list_item
TQString Windowdef_list_item::text( int column_P ) const
{
return column_P == 0 ? window()->description() : TQString::null;
}
Windowdef_list_item::~Windowdef_list_item()
{ // CHECKME if the listview will ever be used hiearchically,
delete _window; // this will be wrong, the windows tree will have to be kept
} // and deleted separately
// Windowdef_simple_dialog
Windowdef_simple_dialog::Windowdef_simple_dialog( Windowdef_simple* window_P, TQObject* obj_P,
const char* slot_P )
: KDialogBase( NULL, NULL, true, i18n( "Window Details" ), Ok | Cancel ), window( NULL )
{
widget = new Windowdef_simple_widget( this );
widget->set_autodetect( obj_P, slot_P );
widget->set_data( window_P );
setMainWidget( widget );
}
Windowdef* Windowdef_simple_dialog::edit_windowdef()
{
exec();
return window;
}
void Windowdef_simple_dialog::accept()
{
KDialogBase::accept();
window = widget->get_data(); // CHECKME NULL ?
}
} // namespace KHotKeys
#include "windowdef_list_widget.moc"