fixed some build related problems
[qsqlmon.git] / libqf / libqfgui / gui / widgets / qfdialogwidget / qfdialogwidgetstack.cpp
blobd67a4eccb73828aebd7708298645491a20f6fdf7
2 //
3 // Author: Frantisek Vacek <fanda.vacek@volny.cz>, (C) 2006
4 //
5 // Copyright: See COPYING file that comes with this distribution
6 //
8 #include "qfdialogwidgetstack.h"
10 #include <qfdialogwidget.h>
11 #include <qftoolbar.h>
13 #include <QVBoxLayout>
14 #include <QMenuBar>
15 #include <QPushButton>
17 #include <qflogcust.h>
19 QFDialogWidgetStack::QFDialogWidgetStack(QWidget *parent)
20 : QStackedWidget(parent)
24 QFDialogWidgetStack::~QFDialogWidgetStack()
28 void QFDialogWidgetStack::pushDialogWidget(QFDialogWidget *dw)//, bool connect_want_close)
30 qfLogFuncFrame();// << "caption:" << caption << "icon serial:" << icon.serialNumber();
31 if(dw) {
32 QWidget *w = new QWidget();
33 QBoxLayout *ly = new QVBoxLayout(w);
34 ly->setMargin(0);
35 ly->setSpacing(1);
37 QFDialogWidgetCaptionFrame *cf = dw->captionFrame();
38 if(cf) {
39 ly->addWidget(cf);
43 if(dw->hasCaption()) {
44 ///caption
45 QWidget *w = dw->createCaption();
46 if(w) ly->addWidget(w);
50 QMenuBar *mb = new QMenuBar(NULL);
51 dw->updateMenuOrBar(mb);
52 if(mb->actions().isEmpty()) { delete mb; }
53 else { ly->addWidget(mb); }
56 QFPart::ToolBarList tool_bars = dw->createToolBars();
57 int toolbars_cnt = tool_bars.count() + ((dw->hasMenuOnToolBar())? 1: 0);
58 qfTrash() << "\ttoolbars cnt:" << toolbars_cnt;
60 if(toolbars_cnt == 1) {
61 if(!tool_bars.isEmpty()) {
62 QFToolBar *tb = tool_bars[0];
63 tb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
64 ly->addWidget(tb);
66 else if(dw->hasMenuOnToolBar()) {
67 QFToolBar *tb = new QFToolBar();
68 tb->addWidget(dw->createToolBarMenuButton());
69 ly->addWidget(tb);
72 else if(toolbars_cnt > 1) {
73 /// toolbary dej vedle sebe
74 //ly->setObjectName("boxLayout");
75 QFrame *frm = new QFrame();
76 QBoxLayout *ly1 = new QHBoxLayout(frm);
77 ly1->setMargin(0);
78 ly1->setObjectName("ly1");
79 if(!tool_bars.isEmpty()) {
80 foreach(QFToolBar *tb, tool_bars) {
81 tb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
82 ly1->addWidget(tb);
85 if(dw->hasMenuOnToolBar()) {
86 //QFToolBar *tb = new QFToolBar();
87 //tb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
88 QPushButton *bt = dw->createToolBarMenuButton();
89 qfTrash() << "\ttool bar button:" << bt;
90 //tb->addWidget(bt);
91 ly1->addWidget(bt);
93 //ly1->addStretch();
94 //ly->addLayout(ly1);
95 ly->addWidget(frm);
96 //ly->dumpObjectTree();
97 //dumpObjectTree();
100 ly->addWidget(dw);
101 addWidget(w);
102 setCurrentWidget(w);
104 if(connect_want_close) {
105 connect(dw, SIGNAL(wantClose(QFDialogWidget*, int)), this, SLOT(closeDialogWidget(QFDialogWidget*, int)));
108 dw->refreshActions();
109 /// QueuedConnection tu nemuze bejt, nefungovala by funkce closeAllDialogWidgetsButCount
110 connect(dw, SIGNAL(wantClose(QFDialogWidget*, int)), this, SLOT(closeDialogWidget(QFDialogWidget*, int)));//, Qt::QueuedConnection);
114 void QFDialogWidgetStack::closeTopLevelDialogWidget(int result)
116 qfLogFuncFrame();
117 //emit aboutToCloseTopLevelDialogWidget(result);
118 //qfInfo() << QFLog::stackTrace();
119 Q_UNUSED(result);
120 //Q_UNUSED(_w);
121 QWidget *w = currentWidget();
122 //QFDialogWidget *dw = topDialogWidget();
123 if(w) {
124 //qfTrash() << "\t removing dialog widget name:" << dw->objectName() << "type:" << dw->metaObject()->className();
125 /// dialog widget je umisten spolu s toolbary, menu a ostatnimi kramy ve Widgetu
126 //QWidget *w = dw->parentWidget();
127 removeWidget(w);
128 delete w;
132 void QFDialogWidgetStack::saveAndCloseDialogWidget() throw(QFException)
134 qfTrash() << QF_FUNC_NAME;
135 QWidget *w = currentWidget();
136 if(w) {
137 QFDialogWidget *dw = w->findChild<QFDialogWidget*>();
138 if(dw) {
139 //qfTrash() << "\tclosing object of type:" << dw->metaObject()->className();
140 //qfTrash() << "\tindex of slot save():" << dw->metaObject()->indexOfMethod("save()");
141 //qfTrash() << "\tinvoking slot save():" << ;
142 QMetaObject::invokeMethod(dw, "save", Qt::DirectConnection);
144 removeWidget(w);
145 delete w;
149 QFDialogWidget * QFDialogWidgetStack::topLevelDialogWidget()
151 QWidget *w = currentWidget();
152 if(!w) return NULL;
153 QFDialogWidget *dw = w->findChild<QFDialogWidget*>();
154 return dw;
157 void QFDialogWidgetStack::closeAllDialogWidgetsButCount(int leaved_widget_cnt, bool save_data) throw( QFException )
159 qfLogFuncFrame() << "widget count:" << count();
160 while(count() > leaved_widget_cnt) {
161 int old_cnt = count();
162 QFDialogWidget *dw = topLevelDialogWidget();
163 if(dw) {
164 if(save_data) dw->accept();
165 else dw->reject();
167 if(count() == old_cnt) {
168 /// accept() nebo reject() nezavreli, coz je chyba
169 //QF_EXCEPTION
170 qfWarning() << "accept() or reject() did not close widget:" << dw;
171 break;
176 void QFDialogWidgetStack::closeDialogWidget(QFDialogWidget * w, int result)
178 if(!w->canBeClosed(result)) return;
179 closeTopLevelDialogWidget(result);