source: fact/tools/FAD/ddd_for_fad/GUI.cpp@ 10113

Last change on this file since 10113 was 9924, checked in by ogrimm, 14 years ago
changed target IP address ... just commit to prevent repos from beeing modified
File size: 6.4 KB
Line 
1/* ============================================================
2
3FAD Data Display
4
5Oliver Grimm, June 2010
6
7============================================================ */
8
9#include "GUI.h"
10
11Qt::GlobalColor LineColors[] = {Qt::black, Qt::blue, Qt::red, Qt::green, Qt::white,
12 Qt::darkRed, Qt::darkGreen, Qt::darkBlue, Qt::cyan, Qt::darkCyan, Qt::magenta, Qt::darkMagenta,
13 Qt::gray, Qt::darkGray, Qt::lightGray};
14
15fad::fad() {
16
17 //---------------------------------------------------------------------
18 //**************************** Main window ****************************
19 //---------------------------------------------------------------------
20
21 Central = new QWidget(this);
22 setCentralWidget(Central);
23
24 // Sockets
25 for (int i=0; i<NUM_SOCKETS; i++) {
26 Socket[i] = new QTcpSocket(Central);
27 connect(Socket[i], SIGNAL(readyRead()), this, SLOT(ReadFromSocket()));
28 connect(Socket[i], SIGNAL(disconnected()), this, SLOT(GotDisconnected()));
29 }
30
31 // Plot area
32 Graph = new QwtPlot(Central);
33 Graph->setAxisTitle(QwtPlot::yLeft, "Signal [V]");
34 Graph->setAxisTitle(QwtPlot::xBottom, "time [ns]");
35 Graph->setAutoReplot(true);
36 Graph->setCanvasBackground(QColor(Qt::yellow));
37 Graph->insertLegend(new QwtLegend(), QwtPlot::TopLegend, 0.3);
38
39 Magnifier = new QwtPlotMagnifier(Graph->canvas());
40 Magnifier->setMouseButton(Qt::NoButton,Qt::NoButton);
41 Magnifier->setZoomInKey(Qt::Key_M, Qt::NoModifier);
42 Magnifier->setZoomOutKey(Qt::Key_M, Qt::ShiftModifier);
43
44 Zoomer = new QwtPlotZoomer(QwtPlot::xBottom,QwtPlot::yLeft,Graph->canvas());
45 connect(Zoomer, SIGNAL(zoomed(const QwtDoubleRect &)), this, SLOT(HandleZoom(const QwtDoubleRect &)));
46
47 Panner = new QwtPlotPanner(Graph->canvas());
48 Panner->setMouseButton(Qt::LeftButton, Qt::ShiftModifier);
49
50 Grid = new QwtPlotGrid;
51 Grid->setMajPen(QPen(Qt::gray, 0, Qt::DotLine));
52 Grid->attach(Graph);
53
54 // Plot curves for all 36 channels
55 for (int i=0; i<NUM_CHANNELS; i++) {
56 Signal[i] = new QwtPlotCurve;
57 Signal[i]->attach(Graph);
58 Signal[i]->setStyle(QwtPlotCurve::Steps);
59 Signal[i]->setTitle(QString("%1").arg(i));
60 Signal[i]->setPen(QColor(LineColors[i % (sizeof(LineColors)/sizeof(Qt::GlobalColor))]));
61 }
62
63 // Layout of all widgets
64 MainLayout = new QGridLayout(Central);
65 MainLayout->addWidget(Graph, 1, 1, 6, 5);
66 MainLayout->setColumnStretch(1, 10);
67
68 // Menu bar
69 QMenu* Menu = menuBar()->addMenu("&Menu");
70 QAction* SaveAction = Menu->addAction("Save plot", this, SLOT(MenuSave()));
71 SaveAction->setShortcut(Qt::CTRL + Qt::Key_S);
72 Menu->addAction("Print plot", this, SLOT(MenuPrint()));
73 Menu->addAction("Save waveform to ASCII", this, SLOT(MenuSaveASCII()));
74 Menu->addSeparator();
75 ConnectAction = Menu->addAction("Connect", this, SLOT(MakeConnection()));
76 ConnectAction->setShortcut(Qt::CTRL + Qt::Key_C);
77 QAction* QuitAction = Menu->addAction("Quit", qApp, SLOT(quit()));
78 QuitAction->setShortcut(Qt::CTRL + Qt::Key_Q);
79
80 //-----------------------------------------------------------------------
81 //**************************** Socket window ****************************
82 //-----------------------------------------------------------------------
83
84 // Create widget (initially hidden)
85 SocketWindow = new QWidget();
86 SocketWindow->setWindowTitle("fad - Socket Interface");
87
88 // Edit box for IP Address
89 IPAddress = new QLineEdit(SocketWindow);
90 IPAddress->setText("fadboard0");
91 //IPAddress->setText("129.217.160.119");
92 IPAddress->setToolTip("Address of socket server");
93 AddressLayout = new QFormLayout;
94 AddressLayout->addRow("&Remote Address", IPAddress);
95
96 // SpinBox for port selection
97 Port = new QSpinBox(SocketWindow);
98 Port->setRange(0,65535);
99 Port->setValue(5000);
100 Port->setToolTip("Port number of socket server");
101 PortLayout = new QFormLayout;
102 PortLayout->addRow("&Port", Port);
103
104 // Button to make connection
105 Connect = new QPushButton("Connect", SocketWindow);
106 Connect->setFont(QFont("Times", 10, QFont::Bold));
107 connect(Connect, SIGNAL(clicked()), this, SLOT(MakeConnection()));
108 Connect->setToolTip("Connect to server");
109
110 // Edit box for command
111 Command = new QLineEdit(SocketWindow);
112 CommandLayout = new QFormLayout;
113 CommandLayout->addRow("&Command", Command);
114 Command->setEnabled(false);
115 connect(Command, SIGNAL(returnPressed()), this, SLOT(SendToSocket()));
116 Command->setToolTip("Command to send to socket server");
117
118 // Text box for socket output
119 SocketOutput= new QPlainTextEdit(SocketWindow);
120 SocketOutput->setReadOnly(true);
121 SocketOutput->setMaximumBlockCount(MAX_OUTPUT_LINES);
122 SocketOutput->setToolTip("Output of socket server");
123
124
125 DRSgroupBox = new QGroupBox("DRS to be plotted", SocketWindow);
126 for (int i =0 ; i<4; i++)
127 {
128 DRS[i] = new QCheckBox (SocketWindow);
129 }
130 DRS[0]->setChecked(true);
131
132 DRSBoxLayout = new QHBoxLayout;
133 for (int i =0 ; i<4; i++)
134 {
135 DRSBoxLayout->addWidget(DRS[i]);
136 }
137 //DRSBoxLayout->addStretch(1); // ??
138 DRSgroupBox->setLayout(DRSBoxLayout);
139
140 ChannelgroupBox = new QGroupBox("Channel to be plotted", SocketWindow);
141 for (int i =0 ; i<9; i++)
142 {
143 ChannelCheckBox[i] = new QCheckBox (SocketWindow);
144 ChannelCheckBox[i]->setChecked(true);
145 }
146
147 ChannelBoxLayout = new QHBoxLayout;
148 for (int i =0 ; i<9; i++)
149 {
150 ChannelBoxLayout->addWidget(ChannelCheckBox[i]);
151 }
152 //ChannelBoxLayout->addStretch(1); // ??
153 ChannelgroupBox->setLayout(ChannelBoxLayout);
154
155
156
157 // Layout of all widgets
158 SocketLayout = new QGridLayout(SocketWindow);
159 SocketLayout->addLayout(AddressLayout, 0, 0, 0, 1);
160 SocketLayout->addLayout(PortLayout, 0, 2);
161 SocketLayout->addWidget(Connect, 0, 3);
162 SocketLayout->addLayout(CommandLayout, 1, 0, 1, 6);
163 SocketLayout->addWidget(SocketOutput, 2, 0, 4, 6);
164 SocketLayout->addWidget(DRSgroupBox, 7, 0);
165 SocketLayout->addWidget(ChannelgroupBox, 7, 1);
166// SocketLayout->addLayout(vbox, 0,6);
167
168 SocketWindow->show();
169
170}
171
172fad::~fad() {
173
174 delete Grid;
175 for (int i=0; i<NUM_CHANNELS; i++) delete Signal[i];
176
177 delete PortLayout;
178 delete CommandLayout;
179 delete AddressLayout;
180 delete SocketWindow;
181}
182
183
184//---------------------------------------------------------------------
185//**************************** Main program ***************************
186//---------------------------------------------------------------------
187
188int main(int argc, char *argv[]) {
189 QApplication app(argc, argv);
190
191 fad MainWindow;
192 MainWindow.setGeometry(100, 100, 800, 500);
193 MainWindow.setWindowTitle("fad - FAD Data Display");
194 MainWindow.show();
195
196 return app.exec();
197}
Note: See TracBrowser for help on using the repository browser.