diff options
Diffstat (limited to 'client/mainwindow.cc')
-rw-r--r-- | client/mainwindow.cc | 585 |
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*/ |