Tweak optimization flags for loops.
[bertos.git] / emul / emulwin.cpp
1 /**
2  * \file
3  * <!--
4  * Copyright 2006 Develer S.r.l. (http://www.develer.com/)
5  * Copyright 2000, 2001 Bernardo Innocenti <bernie@codewiz.org>
6  * This file is part of DevLib - See README.devlib for information.
7  * -->
8  *
9  * \version $Id$
10  *
11  * \author Bernardo Innocenti <bernie@develer.com>
12  *
13  * \brief Main Qt window for embedded applications emulator (implementation)
14  */
15
16 /*#*
17  *#* $Log$
18  *#* Revision 1.4  2006/02/20 02:00:39  bernie
19  *#* Port to Qt 4.1.
20  *#*
21  *#* Revision 1.3  2006/02/15 09:11:17  bernie
22  *#* Add keyboard emulator.
23  *#*
24  *#* Revision 1.2  2006/01/16 03:51:51  bernie
25  *#* Fix boilerplate.
26  *#*
27  *#* Revision 1.1  2006/01/16 03:37:12  bernie
28  *#* Add emulator skeleton.
29  *#*
30  *#*/
31
32 #include "emulwin.h"
33
34 #include <drv/lcd_gfx_qt.h>
35 #include <emul/emul.h>
36 #include <emul/emulkbd.h>
37
38 #include <cassert>
39
40 #if _QT < 4
41         #include <qlayout.h>
42         #include <qlabel.h>
43         #include <qslider.h>
44         #include <qcheckbox.h>
45         #include <qmenubar.h>
46         #include <qmessagebox.h>
47         #include <qdatetime.h>
48         #include <qtimer.h>
49         #include <qapplication.h>
50         #include <qpopupmenu.h>
51         #include <qevent.h>
52 #else
53         #include <QtGui/QLayout>
54         #include <QtGui/QLabel>
55         #include <QtGui/QSlider>
56         #include <QtGui/QCheckBox>
57         #include <QtGui/QMenuBar>
58         #include <QtGui/QMessageBox>
59         #include <QtCore/QDateTime>
60         #include <QtCore/QTimer>
61         #include <QtGui/QApplication>
62         #include <QtGui/QCloseEvent>
63         //#include <Qt3Support/q3popupmenu.h>
64         //#define QPopupMenu Q3PopupMenu
65         #define QPopupMenu QMenu
66         using namespace Qt;
67 #endif
68
69 EmulWin::EmulWin(Emulator *e) : QMainWindow(0, "DevLibEmul",
70         #if _QT < 4
71                 Qt::WDestructiveClose
72         #else
73                 0
74         #endif
75 )
76 {
77         #if _QT >= 4
78                 setAttribute(Qt::WA_DeleteOnClose);
79         #endif
80
81         // "File" menu
82         QPopupMenu * file = new QPopupMenu(this);
83         file->insertItem("&Quit", static_cast<QObject *>(e->emulApp), SLOT(closeAllWindows()), CTRL+Key_Q);
84
85         // "Help" menu
86         QPopupMenu * help = new QPopupMenu(this);
87         help->insertItem("&About", this, SLOT(about()), Key_F1);
88
89         // Menu bar
90         QMenuBar * menu = new QMenuBar(this);
91         menu->insertItem("&File", file);
92         menu->insertSeparator();
93         menu->insertItem("&Help", help);
94
95         // Make a central widget to contain the other widgets
96         QWidget *central = new QWidget(this);
97         setCentralWidget(central);
98
99         // Create a layout to position the widgets
100         QHBoxLayout *box_main = new QHBoxLayout(central, 4);
101
102         // Main layout
103         QVBoxLayout *box_right = new QVBoxLayout(box_main, 4);
104
105                 // LCD
106                 QHBoxLayout *lay_lcd = new QHBoxLayout(box_right, 4);
107                 lay_lcd->addWidget(e->emulLCD = new EmulLCD(central));
108
109                 // Keyboard
110                 QHBoxLayout *lay_kbd = new QHBoxLayout(box_right, 4);
111                         lay_kbd->addWidget(e->emulKbd = new EmulKbd(central));
112
113         // Setup keyboard: Label   Keycode     Row Col MRow MCol
114         e->emulKbd->addKey("^",    Key_Up,     0,  0,  0,   0);
115         e->emulKbd->addKey("v",    Key_Down,   1,  0,  0,   1);
116         e->emulKbd->addKey("OK",   Key_Return, 0,  1,  0,   2);
117         e->emulKbd->addKey("ESC",  Key_Escape, 1,  1,  0,   3);
118 }
119
120
121 EmulWin::~EmulWin()
122 {
123         emul->quit();
124 }
125
126
127 void EmulWin::closeEvent(QCloseEvent *ce)
128 {
129         ce->accept();
130 }
131
132
133 void EmulWin::about()
134 {
135     QMessageBox::about(this,
136                 "Embedded Application Emulator",
137                 "Version 0.1\n"
138                 "Copyright 2006 Develer S.r.l. (http://www.develer.com/)\n"
139                 "Copyright 2001, 2002, 2003, 2005 Bernardo Innocenti <bernie@codewiz.org>\n"
140                 "All rights reserved."
141         );
142 }
143
144 #include "emulwin_moc.cpp"