summaryrefslogtreecommitdiffstats
path: root/khotkeys/kcontrol/windowdef_list_widget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'khotkeys/kcontrol/windowdef_list_widget.cpp')
-rw-r--r--khotkeys/kcontrol/windowdef_list_widget.cpp239
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"