kdialog.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qabstractlayout.h>
00022 #include <qobjectlist.h>
00023 #include <qguardedptr.h>
00024 #include <qlineedit.h>
00025 #include <qvaluelist.h>
00026 #include <qtimer.h>
00027 #include <netwm.h>
00028
00029 #include <kapplication.h>
00030 #include <kdialog.h>
00031 #include <kdebug.h>
00032 #include <kstaticdeleter.h>
00033
00034 int KDialog::mMarginSize = 11;
00035 int KDialog::mSpacingSize = 6;
00036
00037 template class QPtrList<QLayoutItem>;
00038
00039 KDialog::KDialog(QWidget *parent, const char *name, bool modal, WFlags f)
00040 : QDialog(parent, name, modal, f)
00041 {
00042 }
00043
00044
00045
00046
00047 void KDialog::keyPressEvent(QKeyEvent *e)
00048 {
00049 if ( e->state() == 0 )
00050 {
00051 switch ( e->key() )
00052 {
00053 case Key_Escape:
00054 case Key_Enter:
00055 case Key_Return:
00056 {
00057 if(testWFlags(WType_Dialog | WShowModal))
00058 {
00059 QDialog::keyPressEvent(e);
00060 }
00061 else
00062 {
00063 e->ignore();
00064 }
00065 }
00066 break;
00067 default:
00068 e->ignore();
00069 return;
00070 }
00071 }
00072 else
00073 {
00074
00075 if ( e->state() == ControlButton &&
00076 qApp->focusWidget() &&
00077 (qApp->focusWidget()->inherits( "QTextEdit" ) ||
00078 qApp->focusWidget()->inherits( "QLineEdit" )) &&
00079 (e->key() == Key_Return || e->key() == Key_Enter) )
00080 {
00081 e->accept();
00082 accept();
00083 }
00084 else
00085 {
00086 e->ignore();
00087 }
00088 }
00089 }
00090
00091
00092 int KDialog::marginHint()
00093 {
00094 return( mMarginSize );
00095 }
00096
00097
00098 int KDialog::spacingHint()
00099 {
00100 return( mSpacingSize );
00101 }
00102
00103
00104 void KDialog::polish()
00105 {
00106 QDialog::polish();
00107 QWidget *w = focusWidget();
00108 if( w && w->isEnabled() && w->inherits( "QLineEdit" ) &&
00109 !w->inherits( "KPasswordEdit" ))
00110 ((QLineEdit*)w)->selectAll();
00111 }
00112
00113
00114 void KDialog::setCaption( const QString &_caption )
00115 {
00116 QString caption = kapp ? kapp->makeStdCaption( _caption ) : _caption;
00117 setPlainCaption( caption );
00118 }
00119
00120
00121 void KDialog::setPlainCaption( const QString &caption )
00122 {
00123 QDialog::setCaption( caption );
00124
00125 #ifdef Q_WS_X11 //FIXME(E) Implement for Qt/E
00126 NETWinInfo info( qt_xdisplay(), winId(), qt_xrootwin(), 0 );
00127 info.setName( caption.utf8().data() );
00128 #endif
00129 }
00130
00131
00132 void KDialog::resizeLayout( QWidget *w, int margin, int spacing )
00133 {
00134 if( w->layout() )
00135 {
00136 resizeLayout( w->layout(), margin, spacing );
00137 }
00138
00139 if( w->children() )
00140 {
00141 QObjectList *l = (QObjectList*)w->children();
00142 for( uint i=0; i < l->count(); i++ )
00143 {
00144 QObject *o = l->at(i);
00145 if( o->isWidgetType() )
00146 {
00147 resizeLayout( (QWidget*)o, margin, spacing );
00148 }
00149 }
00150 }
00151 }
00152
00153
00154 void KDialog::resizeLayout( QLayoutItem *lay, int margin, int spacing )
00155 {
00156 QLayoutIterator it = lay->iterator();
00157 QLayoutItem *child;
00158 while ( (child = it.current() ) )
00159 {
00160 resizeLayout( child, margin, spacing );
00161 ++it;
00162 }
00163 if( lay->layout() != 0 )
00164 {
00165 lay->layout()->setMargin( margin );
00166 lay->layout()->setSpacing( spacing );
00167 }
00168 }
00169
00170 void KDialog::centerOnScreen( QWidget *w, int screen )
00171 {
00172 if ( !w )
00173 return;
00174
00175 QDesktopWidget *desktop = QApplication::desktop();
00176 if ( screen < 0 || screen < desktop->numScreens() )
00177 {
00178 screen = desktop->screenNumber( w );
00179 if ( screen == -1 )
00180 screen = desktop->primaryScreen();
00181 }
00182
00183 QRect r = desktop->screenGeometry( screen );
00184 w->move( r.center().x() - w->width()/2,
00185 r.center().y() - w->height()/2 );
00186 }
00187
00188 class KDialogQueuePrivate
00189 {
00190 public:
00191 QValueList< QGuardedPtr<QDialog> > queue;
00192 bool busy;
00193 };
00194
00195 static KStaticDeleter<KDialogQueue> ksdkdq;
00196
00197 KDialogQueue *KDialogQueue::_self=0;
00198
00199 KDialogQueue* KDialogQueue::self()
00200 {
00201 if (!_self)
00202 _self = ksdkdq.setObject(new KDialogQueue);
00203 return _self;
00204 }
00205
00206 KDialogQueue::KDialogQueue()
00207 {
00208 d = new KDialogQueuePrivate;
00209 d->busy = false;
00210 }
00211
00212 KDialogQueue::~KDialogQueue()
00213 {
00214 delete d; d = 0;
00215 _self = 0;
00216 }
00217
00218
00219 void KDialogQueue::queueDialog(QDialog *dialog)
00220 {
00221 KDialogQueue *_this = self();
00222 _this->d->queue.append(dialog);
00223 QTimer::singleShot(0, _this, SLOT(slotShowQueuedDialog()));
00224 }
00225
00226 void KDialogQueue::slotShowQueuedDialog()
00227 {
00228 if (d->busy)
00229 return;
00230 QDialog *dialog;
00231 do {
00232 if(!d->queue.count())
00233 return;
00234 dialog = d->queue.first();
00235 d->queue.remove(d->queue.begin());
00236 }
00237 while(!dialog);
00238
00239 d->busy = true;
00240 dialog->exec();
00241 d->busy = false;
00242 delete dialog;
00243
00244 if (d->queue.count())
00245 QTimer::singleShot(20, this, SLOT(slotShowQueuedDialog()));
00246 else
00247 ksdkdq.destructObject();
00248 }
00249
00250 void KDialog::virtual_hook( int, void* )
00251 { }
00252
00253 #include "kdialog.moc"
This file is part of the documentation for kdelibs Version 3.1.0.