kmail

kwindowpositioner.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of KDE.
00003 
00004     Copyright (c) 2005 Cornelius Schumacher <schumacher@kde.org>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010     
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015     
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include "kwindowpositioner.h"
00023 
00024 #include <kdebug.h>
00025 
00026 #include <qwidget.h>
00027 
00028 KWindowPositioner::KWindowPositioner( QWidget *master, QWidget *slave,
00029   Mode mode )
00030   : QObject( master ), mMaster( master ), mSlave( slave ), mMode( mode )
00031 {
00032   master->topLevelWidget()->installEventFilter( this );
00033 }
00034 
00035 bool KWindowPositioner::eventFilter( QObject *, QEvent *e )
00036 {
00037   if ( e->type() == QEvent::Move ) {
00038     reposition();
00039   }
00040 
00041   return false;
00042 }
00043 
00044 void KWindowPositioner::reposition()
00045 {
00046   QPoint relativePos;
00047   if ( mMode == Right ) {
00048     relativePos = QPoint( mMaster->width(), -100 );
00049   } else if ( mMode == Bottom ) {
00050     relativePos = QPoint( 100 - mSlave->width() + mMaster->width(),
00051       mMaster->height() );
00052   } else {
00053     kdError() << "KWindowPositioner: Illegal mode" << endl;
00054   }
00055   QPoint pos = mMaster->mapToGlobal( relativePos );
00056   mSlave->move( pos );
00057   mSlave->raise();
00058 }
00059 
00060 #include "kwindowpositioner.moc"