Home · All Classes · Main Classes · Grouped Classes · Modules · Functions

mainwindow.cpp Example File
widgets/dialogbuttonbox/mainwindow.cpp

 /****************************************************************************
 **
 ** Copyright (C) 2007-2007 Trolltech ASA. All rights reserved.
 **
 ** This file is part of the example classes of the Qt Toolkit.
 **
 ** This file may be used under the terms of the GNU General Public
 ** License version 2.0 as published by the Free Software Foundation
 ** and appearing in the file LICENSE.GPL included in the packaging of
 ** this file.  Please review the following information to ensure GNU
 ** General Public Licensing requirements will be met:
 ** http://www.trolltech.com/products/qt/opensource.html
 **
 ** If you are unsure which license is appropriate for your use, please
 ** review the following information:
 ** http://www.trolltech.com/products/qt/licensing.html or contact the
 ** sales department at sales@trolltech.com.
 **
 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 **
 ****************************************************************************/

 #include <QtGui>

 #include "mainwindow.h"
 #include "addbuttondialog.h"

 MainWindow::MainWindow()
 {
     setupUi(this);
     myAddButton = deleteAddDialogBox->addButton(tr("Add"),
                                                 QDialogButtonBox::AcceptRole);
     myDeleteButton = deleteAddDialogBox->addButton(tr("Delete"),
                                                 QDialogButtonBox::RejectRole);

     connectActions();

     mdiArea = new QMdiArea;
     mdiArea->setScrollBarsEnabled(true);
     connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow *)),
             this, SLOT(subWindowActivated(QMdiSubWindow *)));
     currentWindow =
     mdiArea->addSubWindow(createDialogButtonBox(ReallyQuit));

     resolveButtons();

     QVBoxLayout *layout = new QVBoxLayout;
     layout->addWidget(mdiArea);
     layout->setMargin(0);
     myCentralWidget->setLayout(layout);

     tableWidget->verticalHeader()->setVisible(false);
     tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);

     setWindowTitle(tr("Dialog Button Box Example"));
 }

 void MainWindow::addButton()
 {
     if (!currentWindow)
         return;

     QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);

     if (box) {
         AddButtonDialog *dialog = new AddButtonDialog(box ,this);
         dialog->setModal(true);
         QDialog::DialogCode code = QDialog::DialogCode(dialog->exec());

         if (code == QDialog::Accepted)
             dialog->addButton();
         box->adjustSize();
         resolveButtons();
     }
     resizeActiveWindow();
 }

 void MainWindow::deleteButton()
 {
     QList<QTableWidgetItem *> list = tableWidget->selectedItems();

     if (!list.isEmpty()) {
         int row = list.first()->row();
         QString buttonText = tableWidget->item(row, 0)->text();
         tableWidget->removeRow(row);
         QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);

         if (box) {
             foreach (QAbstractButton *button, box->buttons()) {
                 if (button->text().remove('&') == buttonText) {
                     box->removeButton(button);
                     resizeActiveWindow();
                 }
             }
         }
     }
 }

 void MainWindow::loadPresetBox()
 {
     QAction *action = qobject_cast<QAction *>(sender());

     currentWindow =
     mdiArea->addSubWindow(
         createDialogButtonBox(Presets(qVariantValue<int>(action->data()))));
     currentWindow->show();

     resolveButtons();
 }

 void MainWindow::newStyle(QAction *action)
 {
     if (currentWindow)  {
         QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);
         QStyle *newStyle = QStyleFactory::create(action->text());
         setStyle(box, newStyle);
         currentWindow->adjustSize();
     }
 }

 void MainWindow::newOrientation(QAction *action)
 {
     if (currentWindow) {
         QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);
         box->setOrientation(Qt::Orientation(qVariantValue<int>(action->data())));
         box->adjustSize();
         resizeActiveWindow();
     }
 }

 void MainWindow::subWindowActivated(QMdiSubWindow *window)
 {
     currentWindow = window;

     QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);

     if (box) {
         if (box->orientation() == Qt::Vertical)
             verticalAction->setChecked(true);
         else
             horizontalAction->setChecked(true);

         foreach (QAction *action, styleGroup->actions()) {
             if (QStyleFactory::create(action->text())->metaObject()->className()
                 == box->style()->metaObject()->className()) {
                 action->setChecked(true);
             }
         }
         resolveButtons();
     } else
         tableWidget->setRowCount(0);
 }

 void MainWindow::connectActions()
 {
     loadSaveChangesAction->setData(int(SaveChanges));
     loadReallyQuitAction->setData(int(ReallyQuit));
     loadEmptyAction->setData(int(Empty));
     loadFileErrorAction->setData(int(FileError));

     verticalAction->setData(int(Qt::Vertical));
     horizontalAction->setData(int(Qt::Horizontal));

     styleGroup = new QActionGroup(this);
     foreach (QString style, QStyleFactory::keys()) {
         QAction *action = new QAction(style, this);
         action->setCheckable(true);
         action->setData(QStyleFactory::create(style));
         stylesMenu->addAction(action);
         styleGroup->addAction(action);
     }
     styleGroup->actions().first()->setChecked(true);

     orientationGroup = new QActionGroup(this);
     orientationGroup->addAction(horizontalAction);
     orientationGroup->addAction(verticalAction);

     connect(loadSaveChangesAction, SIGNAL(triggered()),
             this, SLOT(loadPresetBox()));
     connect(loadReallyQuitAction, SIGNAL(triggered()),
             this, SLOT(loadPresetBox()));
     connect(loadEmptyAction, SIGNAL(triggered()),
             this, SLOT(loadPresetBox()));
     connect(loadFileErrorAction, SIGNAL(triggered()),
             this, SLOT(loadPresetBox()));
     connect(addButtonAction, SIGNAL(triggered()),
             this, SLOT(addButton()));
     connect(myAddButton, SIGNAL(clicked()),
             this, SLOT(addButton()));
     connect(myDeleteButton, SIGNAL(clicked()),
             this, SLOT(deleteButton()));

     connect(styleGroup, SIGNAL(triggered(QAction *)),
             this, SLOT(newStyle(QAction *)));
     connect(orientationGroup, SIGNAL(triggered(QAction *)),
             this, SLOT(newOrientation(QAction *)));
 }

 QWidget *MainWindow::createDialogButtonBox(Presets preset)
 {
     QDialogButtonBox *box;
     QWidget *widget = new QWidget;

      switch (preset) {
         case SaveChanges:
             box = new QDialogButtonBox(QDialogButtonBox::Yes |
                                        QDialogButtonBox::YesToAll |
                                        QDialogButtonBox::No |
                                        QDialogButtonBox::NoToAll |
                                        QDialogButtonBox::Help);
             widget->setWindowTitle(tr("Save Changes"));
             break;
         case ReallyQuit:
             box = new QDialogButtonBox(QDialogButtonBox::Cancel |
                                        QDialogButtonBox::Yes);
             widget->setWindowTitle(tr("Really Quit"));
             break;
         case FileError:
             box = new QDialogButtonBox(QDialogButtonBox::Retry |
                                        QDialogButtonBox::Abort |
                                        QDialogButtonBox::Ignore);
             widget->setWindowTitle(tr("File Error"));
             break;
         default:
             box = new QDialogButtonBox;
             widget->setWindowTitle(tr("Magic Box"));
             box->resize(180, 27);
     }
     setStyle(box,
     QStyleFactory::create(styleGroup->checkedAction()->text()));
     box->adjustSize();

     QGridLayout *layout = new QGridLayout;
     layout->addItem(new QSpacerItem(box->width() + 50, 75), 0, 0);
     layout->addWidget(box, 1, 0);
     widget->setLayout(layout);
     widget->adjustSize();
     horizontalAction->setChecked(true);

     return widget;
 }

 void MainWindow::setStyle(QDialogButtonBox *box, QStyle *style)
 {
     box->setStyle(style);
     box->setPalette(style->standardPalette());

     foreach (QObject *child, box->children()) {
         QWidget *widget = qobject_cast<QWidget *>(child);

         if (widget) {
             widget->setStyle(style);
             widget->setPalette(style->standardPalette());
         }
     }
 }

 void MainWindow::resolveButtons()
 {
     QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);

     if (box) {
         int i = 0;
         tableWidget->clearContents();
         tableWidget->setRowCount(box->buttons().count());

         foreach (QAbstractButton *button, box->buttons()) {
             QTableWidgetItem *textItem = new QTableWidgetItem(
             button->text().remove('&'));
             textItem->setFlags(textItem->flags() ^ Qt::ItemIsEditable);
             tableWidget->setItem(i, 0, textItem);

             QDialogButtonBox::ButtonRole role = box->buttonRole(button);
             QTableWidgetItem *roleItem =
                 new QTableWidgetItem(AddButtonDialog::roleToString(role));
             roleItem->setFlags(roleItem->flags() ^ Qt::ItemIsEditable);
             tableWidget->setItem(i, 1, roleItem);
             ++i;
         }
     }
 }

 void MainWindow::resizeActiveWindow()
 {
     QDialogButtonBox *box = qFindChild<QDialogButtonBox *>(currentWindow);
     delete currentWindow->layout();
     QGridLayout *layout = new QGridLayout;

     box->adjustSize();

     if (horizontalAction->isChecked()) {
         layout->addItem(new QSpacerItem(box->width() + 50, 75), 0, 0);
         layout->addWidget(box, 1, 0);
         layout->setRowStretch(2, 10);
     } else {
         layout->addItem(new QSpacerItem(75, box->height() + 50), 0, 0);
         layout->setColumnStretch(1, 10);
         layout->addWidget(box, 0, 2);
     }
     currentWindow->setLayout(layout);
     currentWindow->adjustSize();
 }


Copyright © 2007 Trolltech Trademarks
Qt 4.3.0rc1