Make a branch to make krunner Good Enough For Aaron™.
[kdebase/uwolfer.git] / workspace / khotkeys / kcontrol / windowdef_list_widget.cpp
blob2d82f9e93a80539990bcae67857974554d1b8014
1 /****************************************************************************
3 KHotKeys
5 Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org>
7 Distributed under the terms of the GNU General Public License version 2.
9 ****************************************************************************/
11 #define _WINDOWDEF_LIST_WIDGET_CPP_
15 #include "windowdef_list_widget.h"
17 #include <assert.h>
18 #include <QPushButton>
19 #include <Qt3Support/Q3Header>
20 #include <QLineEdit>
21 #include <QMenu>
23 #include <kdebug.h>
24 #include <klocale.h>
26 #include <khlistview.h>
28 #include <windows.h>
30 #include "windowdef_simple_widget.h"
31 #include "kcmkhotkeys.h"
33 namespace KHotKeys
36 // Windowdef_list_widget
38 Windowdef_list_widget::Windowdef_list_widget( QWidget* parent_P, const char* name_P )
39 : Windowdef_list_widget_ui( parent_P), autodetect_object( NULL ),
40 autodetect_slot( NULL ), selected_item( NULL )
42 setObjectName(name_P);
43 layout()->setMargin(0);
44 QMenu* popup = new QMenu; // CHECKME looks like setting parent doesn't work
45 QAction *action = popup->addAction( i18n( "Simple Window..." ) );
46 connect( action, SIGNAL( triggered()), SLOT( new_selected()));
48 connect( windows_listview, SIGNAL( doubleClicked ( Q3ListViewItem *, const QPoint &, int ) ),
49 this, SLOT( modify_pressed() ) );
50 connect(copy_button,SIGNAL(clicked()),this,SLOT(copy_pressed()));
51 connect(modify_button,SIGNAL(clicked()),this,SLOT(modify_pressed()));
52 connect(delete_button,SIGNAL(clicked()),this,SLOT(delete_pressed()));
53 connect(windows_listview,SIGNAL(current_changed(Q3ListViewItem*)),this,SLOT(current_changed(Q3ListViewItem*)));
54 new_button->setMenu( popup );
55 windows_listview->header()->hide();
56 windows_listview->addColumn( "" );
57 windows_listview->setSorting( -1 );
58 windows_listview->setForceSelect( true );
59 copy_button->setEnabled( false );
60 modify_button->setEnabled( false );
61 delete_button->setEnabled( false );
62 clear_data();
63 // KHotKeys::Module::changed()
64 connect( new_button, SIGNAL( clicked()),
65 module, SLOT( changed()));
66 connect( copy_button, SIGNAL( clicked()),
67 module, SLOT( changed()));
68 connect( modify_button, SIGNAL( clicked()),
69 module, SLOT( changed()));
70 connect( delete_button, SIGNAL( clicked()),
71 module, SLOT( changed()));
72 connect( comment_lineedit, SIGNAL( textChanged( const QString& )),
73 module, SLOT( changed()));
76 Windowdef_list_widget::~Windowdef_list_widget()
78 delete new_button->menu();
81 void Windowdef_list_widget::clear_data()
83 comment_lineedit->clear();
84 windows_listview->clear();
87 void Windowdef_list_widget::set_data( const Windowdef_list* data_P )
89 if( data_P == NULL )
91 clear_data();
92 return;
94 comment_lineedit->setText( data_P->comment());
95 Windowdef_list_item* after = NULL;
96 windows_listview->clear();
97 for( Windowdef_list::Iterator it( *data_P );
98 *it;
99 ++it )
100 after = create_listview_item( *it, windows_listview, NULL, after, true );
103 Windowdef_list* Windowdef_list_widget::get_data() const
105 // CHECKME TODO hmm, tady to bude chtit asi i children :(
106 Windowdef_list* list = new Windowdef_list( comment_lineedit->text());
107 for( Q3ListViewItem* pos = windows_listview->firstChild();
108 pos != NULL;
109 pos = pos->nextSibling())
110 list->append( static_cast< Windowdef_list_item* >( pos )->window()->copy());
111 return list;
114 void Windowdef_list_widget::new_selected()
116 Windowdef_dialog* dlg = NULL;
117 dlg = new Windowdef_simple_dialog(
118 new Windowdef_simple( "", "", Windowdef_simple::NOT_IMPORTANT, "",
119 Windowdef_simple::NOT_IMPORTANT, "", Windowdef_simple::NOT_IMPORTANT,
120 Windowdef_simple::WINDOW_TYPE_NORMAL | Windowdef_simple::WINDOW_TYPE_DIALOG ),
121 NULL, NULL ); // CHECKME tady pak autodetect
122 if( dlg != NULL )
124 Windowdef* window = dlg->edit_windowdef();
125 if( window != NULL )
126 windows_listview->setSelected( create_listview_item( window, windows_listview,
127 NULL, selected_item, false ), true );
128 // CHECKME tady pak jeste spravne vnoreni, kdyz bude skupina
129 delete dlg;
133 void Windowdef_list_widget::copy_pressed()
135 windows_listview->setSelected( create_listview_item( selected_item->window(),
136 selected_item->parent() ? NULL : windows_listview, selected_item->parent(),
137 selected_item, true ), true );
140 void Windowdef_list_widget::delete_pressed()
142 delete selected_item; // CHECKME snad vyvola signaly pro enable()
145 void Windowdef_list_widget::modify_pressed()
147 edit_listview_item( selected_item );
150 void Windowdef_list_widget::current_changed( Q3ListViewItem* item_P )
152 // if( item_P == selected_item )
153 // return;
154 selected_item = static_cast< Windowdef_list_item* >( item_P );
155 // windows_listview->setSelected( item_P, true );
156 copy_button->setEnabled( item_P != NULL );
157 modify_button->setEnabled( item_P != NULL );
158 delete_button->setEnabled( item_P != NULL );
161 Windowdef_list_item* Windowdef_list_widget::create_listview_item( Windowdef* window_P,
162 Q3ListView* parent1_P, Q3ListViewItem* parent2_P, Q3ListViewItem* after_P, bool copy_P )
164 Windowdef* new_win = copy_P ? window_P->copy() : window_P;
165 // CHECKME uz by nemelo byt treba
166 /* if( after_P == NULL )
168 if( parent1_P == NULL )
169 return new Windowdef_list_item( parent2_P, new_win );
170 else
171 return new Windowdef_list_item( parent1_P, new_win );
173 else*/
175 if( parent1_P == NULL )
176 return new Windowdef_list_item( parent2_P, after_P, new_win );
177 else
178 return new Windowdef_list_item( parent1_P, after_P, new_win );
182 void Windowdef_list_widget::edit_listview_item( Windowdef_list_item* item_P )
184 Windowdef_dialog* dlg = NULL;
185 if( Windowdef_simple* window = dynamic_cast< Windowdef_simple* >( item_P->window()))
186 dlg = new Windowdef_simple_dialog( window, autodetect_object, autodetect_slot );
187 else // CHECKME TODO pridat dalsi
188 assert( false );
189 Windowdef* new_window = dlg->edit_windowdef();
190 if( new_window != NULL )
192 item_P->set_window( new_window );
193 item_P->widthChanged( 0 ); // SELI tohle i u dalsich listview?
194 windows_listview->repaintItem( item_P );
196 delete dlg;
199 // Windowdef_list_item
201 QString Windowdef_list_item::text( int column_P ) const
203 return column_P == 0 ? window()->description() : QString();
206 Windowdef_list_item::~Windowdef_list_item()
207 { // CHECKME if the listview will ever be used hiearchically,
208 delete _window; // this will be wrong, the windows tree will have to be kept
209 } // and deleted separately
211 // Windowdef_simple_dialog
213 Windowdef_simple_dialog::Windowdef_simple_dialog( Windowdef_simple* window_P, QObject* obj_P,
214 const char* slot_P )
215 : KDialog( 0 ), window( NULL )
217 setModal( true );
218 setCaption( i18n( "Window Details" ) );
219 setButtons( Ok | Cancel );
220 widget = new Windowdef_simple_widget( this );
221 widget->set_autodetect( obj_P, slot_P );
222 widget->set_data( window_P );
223 setMainWidget( widget );
226 Windowdef* Windowdef_simple_dialog::edit_windowdef()
228 exec();
229 return window;
232 void Windowdef_simple_dialog::accept()
234 KDialog::accept();
235 window = widget->get_data(); // CHECKME NULL ?
239 } // namespace KHotKeys
241 #include "windowdef_list_widget.moc"