summaryrefslogtreecommitdiff
path: root/client/mainwindow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/mainwindow.cc')
-rw-r--r--client/mainwindow.cc585
1 files changed, 57 insertions, 528 deletions
diff --git a/client/mainwindow.cc b/client/mainwindow.cc
index 8efcad0..3a0eeab 100644
--- a/client/mainwindow.cc
+++ b/client/mainwindow.cc
@@ -25,407 +25,96 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#include <config.h>
-#ifdef USE_GUI
#include "mainwindow.h"
-
-#include <QPainter>
-#include <QPicture>
-#include <QPushButton>
-#include <QFont>
-#include <QPixmap>
-#include <QBitmap>
-#include <QImage>
-#include <QLayout>
-#include <QGroupBox>
-#include <QStatusBar>
-
-#include <math.h>
-
#include "info.h"
-
-//#include "mgui_alert.h"
-//#include "mgui_datasocket.h"
-
#include "miav_config.h"
+#include "splashscreen.h"
+#include "aboutwindow.h"
-#include <config.h>
-//"miav-grab.h"
-
-//#define WITH_DV
-MainWindow::MainWindow(QWidget* parent )
- : QWidget( parent, Qt::FramelessWindowHint )
-{
- // info = new InfoGui(qApp, this, config);
-
- gInfo::info->info("Starting MIaV v. %s.", VERSION);
-
- video_width = config->readInt("video_width");
- video_height = config->readInt("video_height");
-
- int resolution_w = config->readInt("pixel_width");
- int resolution_h = config->readInt("pixel_height");
-
- unit = ((float)resolution_w / config->readFloat("screensize")) / INCH_IN_CM;
-
- printf("Unit: %f\n", unit);
-
- move(0,0);
- resize(resolution_w, resolution_h);
-
- // Load icons
- img_record = loadButtonIcon( PIXMAP_RECORD );
- img_stop = loadButtonIcon( PIXMAP_STOP );
- img_freeze = loadButtonIcon( PIXMAP_FREEZE );
- img_unfreeze = loadButtonIcon( PIXMAP_UNFREEZE );
- img_cpr = loadButtonIcon( PIXMAP_CPR );
- img_clear = loadButtonIcon( PIXMAP_CLEAR );
- img_snapshot = loadButtonIcon( PIXMAP_SNAPSHOT );
- img_logo = loadButtonIcon( PIXMAP_LOGO_SMALL, 1 );
- img_mute = loadButtonIcon( PIXMAP_MUTE );
- img_unmute = loadButtonIcon( PIXMAP_UNMUTE );
-
- img_dummy = loadImage( PIXMAP_DUMMY );
-
- timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), SLOT(redraw_edge()));
- rec_edge_counter = 0.0f;
-
- // This must be defined before the gui i created (img_live uses it as parameter)
- // camera = new Camera(info);
-
- createGui();
- show();
-
- /*
- camera->connect(config->readString("server_addr")->c_str(),
- config->readInt("server_port"),
- img_live->width(), img_live->height());
- */
- // Make sure this is created *after* the camera object!
- taskbartimer = new QTimer(this);
- connect(taskbartimer, SIGNAL(timeout()), SLOT(taskbar_update()));
- taskbartimer->start(200);
-
- recording = false;
- frozen = false;
- muted = false;
-
- gInfo::info->log("MIaV is ready.");
-
- // Open the CPR Dialog
- cpr_clicked();
-
-}
-
-MainWindow::~MainWindow()
-{
- gInfo::info->log("MIaV is shutting down.");
-
- delete img_history;
- // delete camera;
- delete btn_cpr;
+#include <QGridLayout>
- gInfo::info->log("MIaV is shut down.");
-}
+#include "videowidget.h"
+#include "historyframe.h"
+#include "historywidget.h"
-QImage *MainWindow::loadButtonIcon( char *name, int height )
+// Macro for creating buttons
+static QPushButton *createButton(char* icon)
{
+ QPixmap pixmap(icon);
- QImage scaled;
- QImage *img;
-
- img = new QImage();
- img->load( name );
+ Qt::AspectRatioMode aspect = pixmap.width()<pixmap.height()?
+ Qt::KeepAspectRatio:Qt::KeepAspectRatioByExpanding;
- int h = (int)(height * unit);
- int w = (int)((float)img->width() / (float)(img->height() / (float)h));
+ pixmap = pixmap.scaled(50, 50, aspect, Qt::SmoothTransformation);
+ QPushButton *btn = new QPushButton();
+ btn->setIconSize(pixmap.size());
+ btn->setIcon(pixmap);
- scaled = img->scaled(w, h, Qt::KeepAspectRatio, Qt::SmoothTransformation);
- delete img;
- img = new QImage(scaled);
-
- return img;
+ return btn;
}
-QImage *MainWindow::loadImage( char *name )
+MainWindow::MainWindow(): QWidget()
{
- QImage *img;
+ MIaV::info->log("Starting MIaV v. %s.", VERSION);
- img = new QImage();
- img->load( name );
+ // Create the overlaying splashscreen
+ // SplashScreen splash;
- return img;
-}
+ // Create layout
+ QGridLayout *layout = new QGridLayout(this);
+ setLayout(layout);
-void MainWindow::createGui()
-{
- // Layout widgets
-
- /* __________________________________________________
- *(0) ___________________________ | ______________ |
- * | | | | | | | | | |
- * |(1) | | | | |(2) | |
- * | | | | | | | | | |
- * | | | | | | | | | |
- * | | | | | | | |______________| |
- * | | | | | | | | | |
- * | | | | | | | | | |
- * | | | | | | | | | |
- * | |______|______|______|______| | | | |
- * | | | | | | | |______________| |
- * | |______|______|______|______| | | | |
- * | | | | | | | | | |
- * | |______|______|______|______| | | | |
- * | | | | | | | | | |
- * | |______|______|______|______| | |______________| |
- * |_______________________________|__________________|
- * |_______________________________|__________________|
- */
-
- QPixmap pixmap;
-
- QGridLayout *g0 = new QGridLayout(this);
- QGridLayout *g1 = new QGridLayout();
- g0->addLayout(g1, 0, 0);
-
- QGroupBox *gb = new QGroupBox();
- /*
- gb->setColumns(1);
- gb->setInsideMargin(HISTORY_LIST_MARGIN);
- gb->setInsideSpacing(HISTORY_LIST_SPACING);
- gb->setFlat(true);
- g0->addWidget(gb, 0, 1);
- */
-
- int resolution_w = config->readInt("pixel_width");
- int resolution_h = config->readInt("pixel_height");
-
- int output_width = resolution_w - // this->width() -
- (int)(BUTTON_WIDTH * unit) -
- /* (gb->insideMargin() * 2) - */
- g1->margin() * 2 -
- g0->margin() * 2;
-
- int output_height = resolution_h - // this->height() -
- (int)(3 * BUTTON_HEIGHT * unit) -
- g1->margin() * 5 -
- g0->margin() * 3;
-
- img_recedge = new QLabel();
- QPalette palette;
- palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160));
- img_recedge->setPalette(palette);
- img_recedge->setFixedSize(output_width, output_height);
-
- img_live = new VideoWidget(img_recedge);
- img_live->setFixedSize(output_width - 20, output_height - 20);
- img_live->move(10,10);
- g1->addWidget( img_recedge, 0, 0, 1, 3, Qt::AlignHCenter);
-
- // CPR/NAME LABEL + CPR button
- lbl_cpr = createLabel("", output_width - (int)(BUTTON_WIDTH * unit), BUTTON_HEIGHT);
- g1->addWidget( lbl_cpr, 1, 0, 1, 2);
-
- btn_cpr = createButton("");
- btn_cpr->setFocus();
- pixmap.fromImage(*img_cpr);
- btn_cpr->setIcon(pixmap);
- QObject::connect( btn_cpr, SIGNAL(clicked()), this, SLOT(cpr_clicked()) );
- // Will also be connected in the MGUI code
- g1->addWidget(btn_cpr, 1, 3);
-
- lbl_name = createLabel("", output_width, (int)(BUTTON_HEIGHT * 0.8f));
- g1->addWidget( lbl_name, 2, 0, 1, 2);
-/*
- btn_clear = createButton("");
- btn_clear->setPixmap(*img_clear);
- QObject::connect( btn_clear, SIGNAL(clicked()), this, SLOT(clear_clicked()) );
- // Will also be connected in the MGUI code
- g1->addWidget(btn_clear, 1, 2);
-*/
- // Rec + Shot + Freeze buttons
- btn_rec = createButton("");
- pixmap.fromImage(*img_record);
- btn_rec->setIcon(pixmap);
- QObject::connect( btn_rec, SIGNAL(clicked()), this, SLOT(rec_clicked()) );
- g1->addWidget(btn_rec, 3, 0);
-
- btn_shoot = createButton("");
- pixmap.fromImage(*img_snapshot);
- btn_shoot->setIcon(pixmap);
- QObject::connect( btn_shoot, SIGNAL(clicked()), this, SLOT(shoot_clicked()) );
- g1->addWidget(btn_shoot, 3, 1);
-
- btn_freeze = createButton("");
- pixmap.fromImage(*img_freeze);
- btn_freeze->setIcon(pixmap);
- QObject::connect( btn_freeze, SIGNAL(clicked()), this, SLOT(freeze_clicked()) );
- g1->addWidget(btn_freeze, 3, 2);
-
- btn_mute = createButton("");
- pixmap.fromImage(*img_unmute);
- btn_mute->setIcon(pixmap);
- QObject::connect( btn_mute, SIGNAL(clicked()), this, SLOT(mute_clicked()) );
- g1->addWidget(btn_mute, 3, 3);
-
- // History widgets
- int w = (int)((float)BUTTON_WIDTH * unit);
- int h = (int)(576.0f / (720.0f / ((float)BUTTON_WIDTH * unit)));
-
- int window_height = config->readInt("pixel_height");
- this->num_history = (window_height -
- ((int)unit * BUTTON_HEIGHT + HISTORY_LIST_SPACING ) -
- (2 * HISTORY_LIST_MARGIN)) / (h + HISTORY_LIST_SPACING);
- img_history = new HistoryWidget*[this->num_history];
-
- for(unsigned int i = 0; i < num_history; i++) {
- img_history[i] = new HistoryWidget(gb);
- img_history[i]->set_image(img_dummy);
- img_history[i]->setFixedSize(w, h);
- }
-
- // Clear button
- btn_clear = createButton("", gb);
- pixmap.fromImage(*img_clear);
- btn_clear->setIcon(pixmap);
- QObject::connect( btn_clear, SIGNAL(clicked()), this, SLOT(clear_clicked()) );
-
- // Statusbar
- status = new QStatusBar(this);
- status->setSizeGripEnabled(FALSE);
- // status->setFont(QFont( "Sans Serif", (int)(unit * height / 3), QFont::Normal ));
- g0->addWidget(status, 4, 0, 4, 1);
-
- lbl_recordtime = createLabel("", BUTTON_WIDTH, 1);
- lbl_recordtime->setFixedWidth((int)(BUTTON_WIDTH * unit) +
- /* (gb->insideMargin() * 2) + */
- g1->margin() * 2 +
- g0->margin() * 2);
- status->addWidget(lbl_recordtime, 0);
-
- // About button
- btn_about = new QPushButton();
- btn_about->setFixedHeight((int)unit);
- pixmap.fromImage(*img_logo);
- btn_about->setIcon(pixmap);
- QObject::connect( btn_about, SIGNAL(clicked()), this, SLOT(about_clicked()) );
- status->addWidget(btn_about, 0);
-
- // Version label
- lbl_version = createLabel("MIaV-Grab v" VERSION, BUTTON_WIDTH, 1);
- lbl_version->setFixedWidth((int)(BUTTON_WIDTH * unit) +
- /* (gb->insideMargin() * 2) + */
- g1->margin() * 2 +
- g0->margin() * 2);
- status->addWidget(lbl_version, 0);
-
- status->showMessage( TXT_READY );
-}
+ // Create the videoarea
+ VideoWidget *video = new VideoWidget();
+ layout->addWidget(video, 0,0, 1,4);
+ // Create the control buttons
+ QPushButton *button;
-QPushButton *MainWindow::createButton(char *caption, int width, int height)
-{
- return createButton(caption, this);//, width, height);
-}
+ button = createButton(PIXMAP_CPR);
+ layout->addWidget(button, 1,3, 1,1);
+ connect(button, SIGNAL(clicked()), this, SLOT(cpr_clicked()));
+ button = createButton(PIXMAP_RECORD);
+ layout->addWidget(button, 2,0, 1,1);
+ connect(button, SIGNAL(clicked()), this, SLOT(record_clicked()));
-QPushButton *MainWindow::createButton(char *caption, QWidget *parent, int width, int height)
-{
- QPushButton *btn = new QPushButton(caption, parent);
- btn->setFont( QFont( "Sans Serif", (int)(unit * height / 2), QFont::Bold ) );
- btn->setFixedHeight((int)(unit * height));
- // btn->setFixedWidth((int)(unit * width));
- return btn;
-}
+ button = createButton(PIXMAP_SNAPSHOT);
+ layout->addWidget(button, 2,1, 1,1);
+ connect(button, SIGNAL(clicked()), this, SLOT(snapshot_clicked()));
+ button = createButton(PIXMAP_FREEZE);
+ layout->addWidget(button, 2,2, 1,1);
+ connect(button, SIGNAL(clicked()), this, SLOT(freeze_clicked()));
-QLabel *MainWindow::createLabel(char *caption, int width, int height)
-{
- QLabel *lbl = new QLabel(caption, this);
- lbl->setFont( QFont( "Sans Serif",
- //(height>1)?(int)(unit * height / 2):(int)(unit * height / 2),
- (int)(unit * height / 2),
- (height>1)?QFont::Bold:QFont::Normal ) );
- lbl->setFixedHeight((int)(unit * height));
- // lbl->setFixedWidth((int)(unit * width));
- return lbl;
-}
+ button = createButton(PIXMAP_MUTE);
+ layout->addWidget(button, 2,3, 1,1);
+ connect(button, SIGNAL(clicked()), this, SLOT(mute_clicked()));
-#include <sys/time.h>
-static struct timeval starttime;
-static int h = 0;
-static int m = 0;
-static int s = 0;
-static int watchdog = 0;
+ // Create history bar
+ HistoryFrame *frame = new HistoryFrame();
+ layout->addWidget(frame, 0,4, 3,1);
+ frame->addHistoryItem(new HistoryWidget());
+ frame->addHistoryItem(new HistoryWidget());
+ frame->addHistoryItem(new HistoryWidget());
-void MainWindow::taskbar_update()
-{
- struct timeval time;
- watchdog++;
-
- if(recording) {
- /*
- if((watchdog % 300 == 0) || ((camera->getQueueLength() > 1000) && (watchdog % 50 == 0)))
- info->log("Queue length: %d (active)", camera->getQueueLength());
- */
- gettimeofday(&time, NULL);
-
- s = time.tv_sec - starttime.tv_sec;
-
- h = s / (60 * 60);
- s -= h * (60 * 60);
- m = s / 60;
- s -= m * 60;
- } else {
- /*
- if((camera->getQueueLength() > 0) && (watchdog % 300 == 0))
- info->log("Queue length: %d (passive)", camera->getQueueLength());
- */
- gettimeofday(&starttime, NULL);
- }
-
- char msg[256];
- int l = 0;//camera->getQueueLength();
- sprintf(msg, TXT_TIME " %.02d:%.02d:%.02d " TXT_QUEUELENGTH " %d", h, m, s, l);
- lbl_recordtime->setText(msg);
-}
-#define GREY 160
-#define SPEED 0.07f
-void MainWindow::redraw_edge()
-{
- rec_edge_counter += SPEED;
- float val = fabs(sin(rec_edge_counter));
-
- QPalette palette;
- palette.setColor(img_recedge->backgroundRole(), QColor((int) ((255 - GREY) * val + GREY),
- (int) (GREY - (GREY * val)),
- (int) (GREY - (GREY * val))));
- img_recedge->setPalette(palette);
-}
+ // Create statusbar
-void MainWindow::message(char *msg)
-{
- status->showMessage(msg);
- gInfo::info->log("Message: %s", msg);
+ show();
+ // setWindowState(Qt::WindowFullScreen);
+
+ MIaV::info->log("MIaV is ready.");
}
-void MainWindow::clear()
+MainWindow::~MainWindow()
{
- gInfo::info->log("Clearing screen.");
-
+ MIaV::info->log("MIaV is shutting down.");
- // History widgets
- for(unsigned int i = 0; i < num_history; i++) {
- img_history[i]->set_image(img_dummy);
- }
-
- lbl_name->setText("");
- lbl_cpr->setText("");
+ MIaV::info->log("MIaV is shut down.");
}
-#include "aboutwindow.h"
void MainWindow::about_clicked()
{
AboutWindow about;
@@ -434,184 +123,24 @@ void MainWindow::about_clicked()
void MainWindow::clear_clicked()
{
- if(MessageBox(this,
- TXT_ASK_CLEAR_SCREEN_TITLE,
- TXT_ASK_CLEAR_SCREEN,
- TYPE_YES_NO,
- ICON_QUESTION).exec() == MSG_YES) {
- clear();
- }
}
void MainWindow::cpr_clicked()
{
- char oldcpr[256];
- char oldname[256];
-
- // If recording, stop recording before changingcpr
- if(recording) {
- MessageBox(this,
- TXT_STOP_RECORDING_TITLE,
- TXT_STOP_RECORDING,
- TYPE_OK,
- ICON_WARNING).exec();
- return;
- }
- gInfo::info->log("Activated CPR chooser.");
-
- // Save CPR and name, from the labels.
- strcpy(oldname, lbl_name->text().toStdString().c_str());
- strcpy(oldcpr, lbl_cpr->text().toStdString().c_str());
-
- clear();
-
- // Create and call the CPRQueryDialog.
- CPRQueryDialog dlg(lbl_cpr, lbl_name, this, TXT_CPRDLG_TITLE, status);
-
- if(dlg.exec() == 0) {
- // Restore old CPR and name, in the labels.
- lbl_name->setText(oldname);
- lbl_cpr->setText(oldcpr);
- gInfo::info->log("Cancelled CPR chooser.");
- } else {
- // Change CPR camera.
- gInfo::info->log("New CPR %s (old %s).", (char*)lbl_cpr->text().toStdString().c_str(), oldcpr);
- strcpy(oldname, lbl_name->text().toStdString().c_str());
- strcpy(oldcpr, lbl_cpr->text().toStdString().c_str());
- clear();
- lbl_name->setText(oldname);
- lbl_cpr->setText(oldcpr);
- // camera->setCpr((char*)lbl_cpr->text().toStdString().c_str(), (char*)lbl_name->text().toStdString().c_str());
- }
}
void MainWindow::rec_clicked()
{
- QPalette palette;
- QPixmap pixmap;
-
- if(!recording) {
- gInfo::info->log("Start recording.");
- recording = 1;
- // Start flashing the edge
- rec_edge_counter = 0.0f;
- timer->start(100);
- pixmap.fromImage(*img_stop);
- btn_rec->setIcon(pixmap);
- // camera->start();
- } else {
- switch(MessageBox(this,
- TXT_ASK_SAVE_TITLE,
- TXT_ASK_SAVE,
- TYPE_YES_NO_MAYBE_CANCEL,
- ICON_QUESTION).exec()) {
- case MSG_YES:
- gInfo::info->log("Stop recording (Said yes to save).");
- recording = 0;
- // camera->stop(SAVE);
- timer->stop();
- palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160));
- img_recedge->setPalette(palette);
- pixmap.fromImage(*img_record);
- btn_rec->setIcon(pixmap);
- break;
-
- case MSG_NO:
- gInfo::info->log("Stop recording (Said no to save).");
- recording = 0;
- // camera->stop(DELETE);
- timer->stop();
- palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160));
- img_recedge->setPalette(palette);
- pixmap.fromImage(*img_record);
- btn_rec->setIcon(pixmap);
- break;
-
- case MSG_MAYBE:
- gInfo::info->log("Stop recording (Said maybe to save).");
- recording = 0;
- // camera->stop(LATER);
- timer->stop();
- palette.setColor(img_recedge->backgroundRole(), QColor(160,160,160));
- img_recedge->setPalette(palette);
- pixmap.fromImage(*img_record);
- btn_rec->setIcon(pixmap);
- break;
-
- case MSG_CANCEL:
- gInfo::info->log("Didn't stop recording (canceled).");
- break;
- }
- }
}
void MainWindow::shoot_clicked()
{
- // unsigned char pixels[720*576*3];
- gInfo::info->log("Snapshot (%s).", frozen?"frozen":"unfrozen");
-
- QImage screenshot(720, 576, QImage::Format_RGB32);
-
- // camera->snapshot(screenshot.bits());
-
- QImage *image;
- for(int cnt = (num_history-1); cnt > 0; cnt--) {
- image = img_history[cnt-1]->get_image();
- img_history[cnt]->set_image(image);
- }
- img_history[0]->set_image(&screenshot);
-
- if(frozen) {
- // camera->unfreeze();
-
- QPixmap pixmap;
- pixmap.fromImage(*img_freeze);
- btn_freeze->setIcon(pixmap);
-
- btn_freeze->setDown(false);
- frozen = false;
- }
}
void MainWindow::freeze_clicked()
{
- if(frozen) {
- gInfo::info->log("Unfreeze.");
- // camera->unfreeze();
-
- QPixmap pixmap;
- pixmap.fromImage(*img_freeze);
- btn_freeze->setIcon(pixmap);
-
- btn_freeze->setDown(false);
- frozen = false;
- } else {
- gInfo::info->log("Freeze.");
- // camera->freeze();
-
- QPixmap pixmap;
- pixmap.fromImage(*img_freeze);
- btn_freeze->setIcon(pixmap);
-
- btn_freeze->setDown(true);
- frozen = true;
- }
}
void MainWindow::mute_clicked()
{
- QPixmap pixmap;
-
- muted = !muted;
- if(muted) {
- pixmap.fromImage(*img_mute);
- btn_mute->setIcon(pixmap);
- } else {
- pixmap.fromImage(*img_unmute);
- btn_mute->setIcon(pixmap);
- }
-
- // camera->setMute(muted);
}
-
-#endif /*USE_GUI*/