summaryrefslogtreecommitdiffstats
path: root/libktorrent/expandablewidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'libktorrent/expandablewidget.h')
-rw-r--r--libktorrent/expandablewidget.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/libktorrent/expandablewidget.h b/libktorrent/expandablewidget.h
new file mode 100644
index 0000000..823ce5f
--- /dev/null
+++ b/libktorrent/expandablewidget.h
@@ -0,0 +1,89 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson *
+ * joris.guisson@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef KTEXPANDABLEWIDGET_H
+#define KTEXPANDABLEWIDGET_H
+
+#include <qwidget.h>
+#include <qptrlist.h>
+#include <interfaces/guiinterface.h>
+
+class QSplitter;
+class QHBoxLayout;
+
+namespace kt
+{
+
+
+
+ /**
+ * @author Joris Guisson
+ * @brief Widget which can be expanded with more widgets
+ *
+ * This is a sort of container widget, which at the minimum has
+ * one child widget. It allows to add more widgets separating the new widget
+ * and everything which was previously in the container by a separator.
+ */
+ class ExpandableWidget : public QWidget
+ {
+ Q_OBJECT
+ public:
+ /**
+ * Constructor, the first child must be provided.
+ * @param child The first child
+ * @param parent The parent
+ * @param name The name
+ */
+ ExpandableWidget(QWidget* child,QWidget *parent = 0, const char *name = 0);
+ virtual ~ExpandableWidget();
+
+
+
+ /**
+ * Expand the widget. This will ensure the proper parent child relations.
+ * @param w The widget
+ * @param pos It's position relative to the current widget
+ */
+ void expand(QWidget* w,Position pos);
+
+ /**
+ * Remove a widget. This will ensure the proper parent child relations.
+ * The widget w will become parentless. Note the first child will never be removed.
+ * @param w The widget
+ */
+ void remove(QWidget* w);
+ private:
+ struct StackElement
+ {
+ QWidget* w;
+ QSplitter* s;
+ Position pos;
+ StackElement* next;
+
+ StackElement() : w(0),s(0),pos(LEFT),next(0) {}
+ ~StackElement() {delete next;}
+ };
+
+ StackElement* begin;
+ QHBoxLayout* top_layout;
+ };
+
+}
+
+#endif