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/actions_listview_widget.cpp

190 lines
5.9 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 _ACTIONS_LISTVIEW_WIDGET_CPP_
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "actions_listview_widget.h"
#include <tqheader.h>
#include <klocale.h>
#include <kdebug.h>
#include <tqdragobject.h>
#include <khlistview.h>
#include <actions.h>
#include <triggers.h>
#include "kcmkhotkeys.h"
namespace KHotKeys
{
Actions_listview_widget::Actions_listview_widget( TQWidget* parent_P, const char* name_P )
: Actions_listview_widget_ui( parent_P, name_P ), recent_item( NULL ),
saved_current_item( NULL )
{
// actions_listview->setSorting( 0 );
actions_listview->header()->hide();
actions_listview->addColumn( "" );
actions_listview->setRootIsDecorated( true ); // CHECKME
connect( actions_listview, TQT_SIGNAL( current_changed( TQListViewItem* )),
TQT_SLOT( current_changed( TQListViewItem* )));
connect( actions_listview, TQT_SIGNAL( moved( TQListViewItem*, TQListViewItem*, TQListViewItem* )),
TQT_SLOT( item_moved( TQListViewItem*, TQListViewItem*, TQListViewItem* )));
// KHotKeys::Module::changed()
}
void Actions_listview_widget::action_name_changed( const TQString& )
{
current_action()->widthChanged( 0 );
actions_listview->repaintItem( current_action());
}
void Actions_listview_widget::set_action_data( Action_data_base* data_P, bool recent_action_P )
{
if( recent_action_P )
{
assert( recent_item != NULL );
recent_item->set_data( data_P );
}
else
saved_current_item->set_data( data_P );
}
void Actions_listview_widget::current_changed( TQListViewItem* item_P )
{
kdDebug( 1217 ) << "current_changed:" << item_P << endl;
set_current_action( static_cast< Action_listview_item* >( item_P ));
}
void Actions_listview_widget::set_current_action( Action_listview_item* item_P )
{
if( item_P == saved_current_item )
return;
recent_item = saved_current_item;
saved_current_item = item_P;
if( actions_listview->currentItem() != item_P )
{
if( item_P == NULL )
actions_listview->clearSelection();
actions_listview->setCurrentItem( item_P );
}
emit current_action_changed();
}
void Actions_listview_widget::new_action( Action_data_base* data_P )
{
TQListViewItem* parent = NULL;
if( current_action() != NULL )
{
if( dynamic_cast< Action_data_group* >( current_action()->data()) != NULL )
parent = current_action();
else
parent = current_action()->tqparent();
}
if( parent )
parent->setOpen( true );
Action_listview_item* tmp = create_item( parent, NULL, data_P );
recent_item = saved_current_item;
saved_current_item = tmp;
actions_listview->setSelected( tmp, true );
}
void Actions_listview_widget::delete_action()
{
// while( TQListViewItem* child = current_action()->firstChild())
// delete child;
// TQListViewItem* nw = current_action()->itemAbove();
// if( nw == NULL )
// nw = current_action()->itemBelow();
delete saved_current_item;
saved_current_item = NULL;
recent_item = NULL;
// if( nw != NULL )
// {
// saved_current_item = static_cast< Action_listview_item* >( nw );
// actions_listview->setSelected( nw, true );
// }
// else
// saved_current_item = NULL;
}
void Actions_listview_widget::item_moved( TQListViewItem* item_P, TQListViewItem*, TQListViewItem* )
{
Action_listview_item* item = static_cast< Action_listview_item* >( item_P );
Action_listview_item* parent = static_cast< Action_listview_item* >( item->tqparent());
if( parent == NULL )
item->data()->reparent( module->actions_root());
else if( Action_data_group* group = dynamic_cast< Action_data_group* >( parent->data()))
item->data()->reparent( group );
else
item->data()->reparent( module->actions_root());
module->changed();
}
void Actions_listview_widget::build_up()
{
build_up_recursively( module->actions_root(), NULL );
}
void Actions_listview_widget::build_up_recursively( Action_data_group* parent_P,
Action_listview_item* item_parent_P )
{
Action_listview_item* prev = NULL;
for( Action_data_group::Iterator it = parent_P->first_child();
it;
++it )
{
prev = create_item( item_parent_P, prev, ( *it ));
Action_data_group* grp = dynamic_cast< Action_data_group* >( *it );
if( grp != NULL )
build_up_recursively( grp, prev );
}
}
Action_listview_item* Actions_listview_widget::create_item( TQListViewItem* parent_P,
TQListViewItem* after_P, Action_data_base* data_P )
{
if( parent_P != NULL )
return new Action_listview_item( parent_P, after_P, data_P );
else
return new Action_listview_item( actions_listview, after_P, data_P );
}
// Actions_listview
Actions_listview::Actions_listview( TQWidget* parent_P, const char* name_P )
: KHListView( parent_P, name_P ), _widget( static_cast< Actions_listview_widget* >( parent_P->parent()))
{
// this relies on the way designer creates the .cpp file from .ui (yes, I'm lazy)
assert( dynamic_cast< Actions_listview_widget_ui* >( parent_P->parent()));
setDragEnabled( true );
setDropVisualizer( true );
setAcceptDrops( true );
}
// Action_listview_item
TQString Action_listview_item::text( int column_P ) const
{
return column_P == 0 ? data()->name() : TQString::null;
}
// CHECKME poradne tohle zkontrolovat po tom prekopani
} // namespace KHotKeys
#include "actions_listview_widget.moc"