diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 4aed2c8219774f5d797760606b8489a92ddc5163 (patch) | |
tree | 3f8c130f7d269626bf6a9447407ef6c35954426a /khotkeys/kcontrol/windowdef_list_widget.cpp | |
download | tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'khotkeys/kcontrol/windowdef_list_widget.cpp')
-rw-r--r-- | khotkeys/kcontrol/windowdef_list_widget.cpp | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/khotkeys/kcontrol/windowdef_list_widget.cpp b/khotkeys/kcontrol/windowdef_list_widget.cpp new file mode 100644 index 000000000..e4dffc9c4 --- /dev/null +++ b/khotkeys/kcontrol/windowdef_list_widget.cpp @@ -0,0 +1,239 @@ +/**************************************************************************** + + 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 <qpushbutton.h> +#include <qheader.h> +#include <qlineedit.h> +#include <qpopupmenu.h> + +#include <kdebug.h> +#include <klocale.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( QWidget* parent_P, const char* name_P ) + : Windowdef_list_widget_ui( parent_P, name_P ), autodetect_object( NULL ), + autodetect_slot( NULL ), selected_item( NULL ) + { + QPopupMenu* popup = new QPopupMenu; // CHECKME looks like setting parent doesn't work + popup->insertItem( i18n( "Simple Window..." ), TYPE_WINDOWDEF_SIMPLE ); + connect( popup, SIGNAL( activated( int )), SLOT( new_selected( int ))); + + connect( windows_listview, SIGNAL( doubleClicked ( QListViewItem *, const QPoint &, int ) ), + this, 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, SIGNAL( clicked()), + module, SLOT( changed())); + connect( copy_button, SIGNAL( clicked()), + module, SLOT( changed())); + connect( modify_button, SIGNAL( clicked()), + module, SLOT( changed())); + connect( delete_button, SIGNAL( clicked()), + module, SLOT( changed())); + connect( comment_lineedit, SIGNAL( textChanged( const QString& )), + module, 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( QListViewItem* 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( QListViewItem* 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, + QListView* parent1_P, QListViewItem* parent2_P, QListViewItem* 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 + +QString Windowdef_list_item::text( int column_P ) const + { + return column_P == 0 ? window()->description() : QString::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, QObject* 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" |