lib/util/splitter.h
Go to the documentation of this file.00001 /* This file is part of the KDE project 00002 Copyright (C) 2001 Bernd Gehrmann <bernd@kdevelop.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef _SPLITTER_H_ 00021 #define _SPLITTER_H_ 00022 00023 #include <qvaluelist.h> 00024 #include <qframe.h> 00025 #include <qptrlist.h> 00026 00027 class SplitterHandle; 00028 00029 00039 class Splitter : public QWidget 00040 { 00041 Q_OBJECT 00042 00043 public: 00044 Splitter( QWidget *parent=0, const char *name=0 ); 00045 ~Splitter(); 00046 00047 void setOrientation(Orientation orient); 00048 Orientation orientation() const; 00049 00053 bool hasMultipleChildren() const; 00059 QWidget *firstChild(); 00060 00064 void addChild(QWidget *w); 00070 void splitChild(QWidget *old, QWidget *w); 00076 void replaceChild(QWidget *old, QWidget *w); 00081 void moveSplitter(QWidget *w, int pos); 00082 00083 signals: 00084 void collapsed(Splitter *splitter); 00085 00086 protected: 00087 virtual QSize minimumSizeHint() const; 00088 virtual void childEvent(QChildEvent *e); 00089 virtual void resizeEvent(QResizeEvent *e); 00090 00091 private slots: 00092 void collapse(); 00093 00094 private: 00095 void doLayout(); 00096 int handleWidth() const; 00097 00098 QPtrList<QWidget> childlist; 00099 QPtrList<SplitterHandle> handlelist; 00100 QValueList<int> sizes; // should really be a QVector 00101 Orientation _or; 00102 }; 00103 00104 00110 class SplitterBar : public QFrame 00111 { 00112 Q_OBJECT 00113 00114 public: 00115 SplitterBar( QWidget *parent=0, const char *name=0 ); 00116 ~SplitterBar(); 00117 00118 protected: 00119 virtual void mouseMoveEvent(QMouseEvent *e); 00120 virtual void mousePressEvent(QMouseEvent *e); 00121 virtual void childEvent(QChildEvent *e); 00122 virtual bool eventFilter(QObject *o, QEvent *e); 00123 00124 private: 00125 int offset; 00126 }; 00127 00128 00133 class SplitterHandle : public QWidget 00134 { 00135 public: 00136 SplitterHandle( QWidget *embeddedSibling, Splitter *parent, const char *name=0 ); 00137 ~SplitterHandle(); 00138 00139 protected: 00140 virtual void mouseMoveEvent(QMouseEvent *e); 00141 virtual void mousePressEvent(QMouseEvent *e); 00142 virtual void paintEvent(QPaintEvent *); 00143 00144 private: 00145 int offset; 00146 QWidget *sibling; 00147 }; 00148 00149 #endif