Ok, the long awaited config wizard is here (at least in a very basic state). There...
[quassel.git] / src / contrib / libqxt-2007-10-24 / tests / QxtGui / app / mainwindow.cpp
1 #include "mainwindow.h"
2 #include "tab.h"
3 #include <QxtConfirmationMessage>
4 #include <QxtProgressLabel>
5 #include <QxtConfigDialog>
6 #include <QxtApplication>
7 #include <QProgressBar>
8 #include <QMessageBox>
9 #include <QListWidget>
10 #include <QCloseEvent>
11 #include <QTreeView>
12 #include <QDirModel>
13 #if QT_VERSION >= 0x040200
14 #include <QCalendarWidget>
15 #include <QTimeLine>
16 #endif // QT_VERSION
17
18 MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
19         : QMainWindow(parent, flags)
20 {
21         ui.setupUi(this);
22         createProgressBar();
23         ui.tabWidget->setTabContextMenuPolicy(Qt::ActionsContextMenu);
24         
25         connect(ui.actionQuit, SIGNAL(triggered()), this, SLOT(close()));
26         connect(ui.actionAddTab, SIGNAL(triggered()), this, SLOT(addTab()));
27         connect(ui.actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
28         connect(ui.actionAboutQxtGui, SIGNAL(triggered()), this, SLOT(aboutQxtGui()));
29         connect(ui.actionSwitchLayoutDirection, SIGNAL(triggered()), this, SLOT(switchLayoutDirection()));
30         connect(ui.actionConfigure, SIGNAL(triggered()), this, SLOT(configure()));
31         
32         if (!qxtApp->addHotKey(Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier, Qt::Key_S, this, "toggleVisibility"))
33                 ui.labelVisibility->hide();
34 }
35
36 MainWindow::~MainWindow()
37 {
38 }
39
40 void MainWindow::closeEvent(QCloseEvent* event)
41 {
42 #if QT_VERSION >= 0x040200
43         static const QString title("QxtConfirmationMessage");
44         static const QString text(tr("Are you sure you want to quit?"));
45         if (QxtConfirmationMessage::confirm(this, title, text) == QMessageBox::No)
46                 event->ignore();
47 #endif // QT_VERSION
48 }
49
50 void MainWindow::aboutQxtGui()
51 {
52         QMessageBox::information(this, tr("About QxtGui"),
53                 tr("<h3>About QxtGui</h3>"
54                 "<p>QxtGui is part of Qxt, the Qt eXTension library &lt;"
55                 "<a href=\"http://libqxt.sf.net\">http://libqxt.sf.net</a>&gt;.</p>"));
56 }
57
58 void MainWindow::addTab()
59 {
60         Tab* tab = new Tab(ui.tabWidget);
61         ui.tabWidget->addTab(tab, tr("Tab %1").arg(ui.tabWidget->count() + 1));
62         QAction* act = ui.tabWidget->addTabAction(ui.tabWidget->indexOf(tab), tr("Close"), tab, SLOT(close()), tr("Ctrl+W"));
63         tab->addAction(act);
64         ui.tabWidget->setCurrentWidget(tab);
65         connect(tab, SIGNAL(somethingHappened(const QString&)), statusBar(), SLOT(showMessage(const QString&)));
66 }
67
68 void MainWindow::switchLayoutDirection()
69 {
70         qApp->setLayoutDirection(layoutDirection() == Qt::LeftToRight ? Qt::RightToLeft : Qt::LeftToRight);
71 }
72
73 void MainWindow::toggleVisibility()
74 {
75         setVisible(!isVisible());
76 }
77
78 void MainWindow::createProgressBar()
79 {
80         QxtProgressLabel* label = new QxtProgressLabel(statusBar());
81         
82         QProgressBar* bar = new QProgressBar(statusBar());
83         bar->setMaximumWidth(label->sizeHint().width() * 2);
84         bar->setRange(0, 120);
85         
86 #if QT_VERSION >= 0x040200
87         QTimeLine* timeLine = new QTimeLine(120000, this);
88         timeLine->setFrameRange(0, 120);
89         
90         connect(timeLine, SIGNAL(frameChanged(int)), bar, SLOT(setValue(int)));
91         connect(timeLine, SIGNAL(finished()), label, SLOT(restart()));
92         connect(bar, SIGNAL(valueChanged(int)), label, SLOT(setValue(int)));
93         timeLine->start();
94 #endif // QT_VERSION
95         
96         statusBar()->addPermanentWidget(bar);
97         statusBar()->addPermanentWidget(label);
98 }
99
100 void MainWindow::configure()
101 {
102         QxtConfigDialog dialog(this);
103         dialog.setWindowTitle(tr("QxtConfigDialog"));
104         QTreeView* page2 = new QTreeView(&dialog);
105         page2->setModel(new QDirModel(page2));
106         QListWidget* page3 = new QListWidget(&dialog);
107         for (int i = 0; i < 100; ++i)
108                 page3->addItem(QString::number(i));
109         dialog.addPage(page2, QIcon(":tree.png"), "A directory tree");
110         dialog.addPage(page3, QIcon(":list.png"), "Some kind of list");
111 #if QT_VERSION >= 0x040200
112         QCalendarWidget* page1 = new QCalendarWidget(&dialog);
113         dialog.addPage(page1, QIcon(":calendar.png"), "Calendar");
114 #endif
115         dialog.exec();
116 }