1 /****************************************************************************
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"
18 #include <QPushButton>
19 #include <Qt3Support/Q3Header>
26 #include <khlistview.h>
30 #include "windowdef_simple_widget.h"
31 #include "kcmkhotkeys.h"
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 );
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
)
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
);
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();
109 pos
= pos
->nextSibling())
110 list
->append( static_cast< Windowdef_list_item
* >( pos
)->window()->copy());
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
124 Windowdef
* window
= dlg
->edit_windowdef();
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
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 )
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 );
171 return new Windowdef_list_item( parent1_P, new_win );
175 if( parent1_P
== NULL
)
176 return new Windowdef_list_item( parent2_P
, after_P
, new_win
);
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
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
);
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
,
215 : KDialog( 0 ), window( NULL
)
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()
232 void Windowdef_simple_dialog::accept()
235 window
= widget
->get_data(); // CHECKME NULL ?
239 } // namespace KHotKeys
241 #include "windowdef_list_widget.moc"