File: WuQMultiPageDialog.h

package info (click to toggle)
caret 5.6.4~dfsg.1-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 31,904 kB
  • ctags: 28,901
  • sloc: cpp: 378,050; python: 6,718; ansic: 5,507; makefile: 333; sh: 46
file content (221 lines) | stat: -rw-r--r-- 6,289 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221

#ifndef __WU_QMULTI_PAGE_DIALOG_H__
#define __WU_QMULTI_PAGE_DIALOG_H__

/*LICENSE_START*/
/*
 *  Copyright 1995-2002 Washington University School of Medicine
 *
 *  http://brainmap.wustl.edu
 *
 *  This file is part of CARET.
 *
 *  CARET 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.
 *
 *  CARET 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 CARET; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
/*LICENSE_END*/

#include <QVector>

#include "WuQDialog.h"

class QComboBox;
class QDialogButtonBox;
class QFrame;
class QHBoxLayout;
class QStackedWidget;
class QToolBar;
class QToolButton;

/// page for generic multipage dialog
class WuQMultiPageDialogPage : public QWidget {
   Q_OBJECT
   
   public:
      // constructor
      WuQMultiPageDialogPage();
                         
      // destructor
      virtual ~WuQMultiPageDialogPage();
      
      // apply the pages settings
      virtual void applyPage() = 0;
      
      // create the page
      virtual QWidget* createPage() = 0;
                              
      // update the page
      virtual void updatePage() = 0;

      // see if the page is valid
      virtual bool getPageValid() const = 0;
      
   protected:
};

/// generic multi-page dialog
class WuQMultiPageDialog : public WuQDialog {
   Q_OBJECT
   
   public:
      /// page creation time
      enum PAGE_CREATION {
         /// create when first displayed
         PAGE_CREATION_WHEN_DISPLAYED,
         /// create immediately
         PAGE_CREATION_IMMEDIATELY
      };
      
      // constructor
      WuQMultiPageDialog(const PAGE_CREATION pageCreationIn,
                         const int numberOfToolBarsIn,
                         QWidget* parent = 0,
                         Qt::WindowFlags flags = 0);
                         
      // destructor
      virtual ~WuQMultiPageDialog();
      
      // update the dialog
      void updateDialog();
      
      // add a page
      void addPage(const QString& pageName,
                   WuQMultiPageDialogPage* page);

      // create and add a tool button to the dialog
      QToolButton* addToolButton(const int toolBarNumber,
                                 const QString& buttonText,
                                 const QString& toolTipText,
                                 const QObject* receiver,
                                 const char* member);
                         
      // create a tool button
      QToolButton* createToolButton(const QString& buttonText,
                                    const QString& toolTipText,
                                    const QObject* receiver,
                                    const char* member);
                         
       // add a widget to a toolbar
      void addWidgetToToolBar(const int toolBarNumber,
                              QWidget* widget);
                              
      // show a page
      void showPage(WuQMultiPageDialogPage* page);
      
      // show the dialog
      virtual void show();
   
   public slots:
      /// called to close dialog
      virtual bool close();
      
   protected slots:
      /// called when page back tool button clicked
      void slotPageBackToolButtonClicked();
      
      /// called when page forward tool button clicked
      void slotPageFwdToolButtonClicked();
      
      /// called when page selection combo box selection is made
      void slotPageSelectionComboBox(int);
      
      /// called when apply button is clicked
      void slotApplyButtonClicked();
      
   protected:
      /// class for data on each page
      class PageInfo {
         public:
            /// constructor
            PageInfo(const QString& nameIn,
                     WuQMultiPageDialogPage* dataPageIn) {
               name = nameIn;
               dataPage = dataPageIn;
               pageComboBoxIndex = -1;
               pageWidget = NULL;
            }
            
            /// destructor
            ~PageInfo() { }
                 
            /// name of page
            QString name;
            
            /// index of page in combo box
            int pageComboBoxIndex;
            
            /// the page
            WuQMultiPageDialogPage* dataPage;
            
            /// the page's widget
            QWidget* pageWidget;
      };
      
      // set the default page
      void setDefaultPage(WuQMultiPageDialogPage* defaultPageIn);

      /// get currently displayed page
      PageInfo* getDisplayedPage();
      
      /// update the page selection combo box
      void updatePageSelectionComboBox();
      
      /// show a page
      void showPage(PageInfo* p,
                    const bool updatePagesVisited);
      
      /// when to create pages
      const PAGE_CREATION pageCreation;
      
      /// the pages
      QVector<PageInfo*> pagesVector; 
      
      /// pages that have been visited
      QVector<PageInfo*> pagesVisited;
      
      /// index into pages visited
      int pagesVisitedIndex;
      
      /// the toolbar layout
      QVector<QHBoxLayout*> toolBarLayouts;
      
      /// page selection combo box
      QComboBox* pageSelectionComboBox;
      
      /// page back tool button
      QToolButton* pageBackToolButton;
      
      /// page fwd tool button
      QToolButton* pageForwardToolButton;
      
      /// frame for operations pages
      QFrame* pagesFrameWidget;
      
      /// stacked widget containing pages
      QStackedWidget* pagesStackedWidget;
      
      /// dialog's button box
      QDialogButtonBox* dialogButtonBox;
      
      /// first time dialog shown
      bool firstTimeDialogShown;
      
      /// the default page
      WuQMultiPageDialogPage* defaultPage;
      
};

#endif // __WU_QMULTI_PAGE_DIALOG_H__