1 /*
2  * This file is part of Licq, an instant messaging client for UNIX.
3  * Copyright (C) 2006-2009 Licq developers
4  *
5  * Licq is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * Licq is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with Licq; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19 
20 #ifndef TREEPAGER_H
21 #define TREEPAGER_H
22 
23 #include <QMap>
24 #include <QWidget>
25 
26 class QStackedLayout;
27 class QTreeWidget;
28 class QTreeWidgetItem;
29 
30 namespace LicqQtGui
31 {
32 /**
33  * Widget for showing one of multiple pages at a time using a tree list for page selection.
34  * Intended mainly for option dialogs.
35  */
36 class TreePager : public QWidget
37 {
38   Q_OBJECT
39 
40 public:
41   /**
42    * Standard contructor.
43    */
44   TreePager(QWidget* parent = NULL);
45 
46   /**
47    * Adds a page to this control.
48    *
49    * @param page The widget containing the page
50    * @param title Title to display in the tree list.
51    * @param parent Parent page  if this is a sub page or NULL to make it a top level page.
52    */
53   void addPage(QWidget* page, const QString& title, /* const QIcon& icon, */ QWidget* parent = NULL);
54 
55   /**
56    * Changes which page to show.
57    *
58    * @param page A page to show. Must have been added to this control.
59    */
60   void showPage(QWidget* page);
61 
62   /**
63    * Get current visible page
64    *
65    * @return Current page
66    */
67   QWidget* currentPage() const;
68 
69 signals:
70   /**
71    * Current page has changed
72    *
73    * @param page New current page
74    */
75   void currentPageChanged(QWidget* page);
76 
77 private:
78   QStackedLayout* myPageStack;
79   QTreeWidget* myTreeList;
80   QMap<QTreeWidgetItem*, QWidget*> myPageMap;
81 
82 private slots:
83 
84   /**
85    * Handler for selection changes in the tree list.
86    * Updates which page to show.
87    */
88   void flipPage(QTreeWidgetItem* selection);
89 };
90 
91 } // namespace LicqQtGui
92 
93 #endif
94