diff options
| author | deva <deva> | 2006-03-07 19:12:18 +0000 | 
|---|---|---|
| committer | deva <deva> | 2006-03-07 19:12:18 +0000 | 
| commit | 4f84ffc811d93371f395f11a0e0f42000eaa99fc (patch) | |
| tree | b562b6c55f2a825dbbc12646df9741b51e1dff79 | |
| parent | 1390ddfe6afe41dba141f8170f9b277573ebe8cd (diff) | |
*** empty log message ***
37 files changed, 431 insertions, 756 deletions
| diff --git a/client/Makefile.am b/client/Makefile.am index 803bf51..a89f214 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -15,11 +15,13 @@ miav_client_SOURCES = $(shell  if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; f  	dv1394.cc \  	dvfile.cc \  	networksender.cc \ +	historyframe.cc \  	historywidget.cc \  	info_gui.cc \  	mainwindow.cc \  	messagebox.cc \  	player.cc \ +	splashscreen.cc \  	videowidget.cc \  	yuv_draw.cc @@ -32,11 +34,13 @@ EXTRA_DIST = \  	dv1394.h \  	dvfile.h \  	networksender.h \ +	historyframe.h \  	historywidget.h \  	info_gui.h \  	mainwindow.h \  	messagebox.h \  	player.h \ +	splashscreen.h \  	videowidget.h \  	yuv_draw.h diff --git a/client/aboutwindow.h b/client/aboutwindow.h index 25fb6f0..a062302 100644 --- a/client/aboutwindow.h +++ b/client/aboutwindow.h @@ -41,7 +41,7 @@ Official homepage:\n\      http://www.aasimon.org/miav\n\  Author:\n\      Bent Bisballe (deva@aasimon.org)\n\ -Copyright (c) 2004" +Copyright (c) 2004-2006"  #define GPL_LICENSE "\  This program is free software; you can\n\ diff --git a/client/cprlisten.cc b/client/cprlisten.cc index 4c1272e..035269a 100644 --- a/client/cprlisten.cc +++ b/client/cprlisten.cc @@ -56,13 +56,13 @@ void CPRListen::stop()  		socket.connect("localhost", port);  		socket.send_string(MAGIC_STOP_STRING);  	} catch(Network_error &e) { -		gInfo::info->error("In stop(): %s.", e.error.c_str()); +		MIaV::info->error("In stop(): %s.", e.error.c_str());  	}  }  void CPRListen::thread_main()  { -	gInfo::info->log("Listening for CPRs."); +	MIaV::info->log("Listening for CPRs.");  	while(running) {  		try {  			string newcpr; @@ -77,15 +77,15 @@ void CPRListen::thread_main()  				cprchanged = true;  				cpr = newcpr;  				mutex.unlock(); -				gInfo::info->log("Got CPR: %s.", cpr.c_str()); +				MIaV::info->log("Got CPR: %s.", cpr.c_str());  			}  		} catch(Network_error &e) { -			gInfo::info->error("In thread_main(): %s.", e.error.c_str()); +			MIaV::info->error("In thread_main(): %s.", e.error.c_str());  			running = false;  		}  	} -	gInfo::info->log("Stopped listening for CPRs."); +	MIaV::info->log("Stopped listening for CPRs.");  }  bool CPRListen::cprChanged() diff --git a/client/cprquerydialog.cc b/client/cprquerydialog.cc index 1461943..47224f0 100644 --- a/client/cprquerydialog.cc +++ b/client/cprquerydialog.cc @@ -52,9 +52,9 @@ CPRQueryDialog::CPRQueryDialog(QLabel *lcpr,    statusbar = status;    //Read configuration -  CPR_HOST = config->readString("cpr_host"); -  CPR_PORT = config->readInt("cpr_port"); -  CPR_TIMEOUT = config->readInt("cpr_timeout"); +  CPR_HOST = MIaV::config->readString("cpr_host"); +  CPR_PORT = MIaV::config->readInt("cpr_port"); +  CPR_TIMEOUT = MIaV::config->readInt("cpr_timeout");    cpr[0] = '\0';    internalCpr[0] = '\0';	 @@ -116,7 +116,7 @@ CPRQueryDialog::CPRQueryDialog(QLabel *lcpr,  	this->move(175,150); -  listen = new CPRListen(config->readInt("cprlisten_port")); +  listen = new CPRListen(MIaV::config->readInt("cprlisten_port"));    listen_timer = new QTimer(this);    connect(listen_timer, SIGNAL(timeout()), SLOT(listen_timeout()));    listen->run(); diff --git a/client/decoder.cc b/client/decoder.cc index f90e1dd..85661ca 100644 --- a/client/decoder.cc +++ b/client/decoder.cc @@ -37,6 +37,6 @@ Decoder::~Decoder()  void Decoder::run()  { -  gInfo::info->info("The decoder thread is running."); +  //  MIaV::info->info("The decoder thread is running.");  } diff --git a/client/dv1394.cc b/client/dv1394.cc index 611d815..ea32f7a 100644 --- a/client/dv1394.cc +++ b/client/dv1394.cc @@ -127,13 +127,13 @@ bool dv1394::connect()    // Get handle to firewire channels  	handle = raw1394_new_handle();  	if(!handle) { -    gInfo::info->error("raw1394 - failed to get handle: %s.", strerror( errno ) ); +    MIaV::info->error("raw1394 - failed to get handle: %s.", strerror( errno ) );      return false;  	}    // how many adapters are hooked in?  	if((n_ports = raw1394_get_port_info(handle, pinf, 16)) < 0 ) { -    gInfo::info->error("raw1394 - failed to get port info: %s.", strerror( errno ) ); +    MIaV::info->error("raw1394 - failed to get port info: %s.", strerror( errno ) );      raw1394_destroy_handle(handle);      handle = NULL;      return false; @@ -141,7 +141,7 @@ bool dv1394::connect()  	// Tell raw1394 which host adapter to use  	if(raw1394_set_port(handle, port) < 0 ) { -    gInfo::info->error("raw1394 - failed to set port: %s.", strerror( errno ) ); +    MIaV::info->error("raw1394 - failed to set port: %s.", strerror( errno ) );      raw1394_destroy_handle(handle);      handle = NULL;      return false; diff --git a/client/dvfile.cc b/client/dvfile.cc index 8caecc0..2f13e5e 100644 --- a/client/dvfile.cc +++ b/client/dvfile.cc @@ -35,7 +35,7 @@  dvfile::dvfile()  {    fp = fopen(TEST_MOVIE, "r"); -  if(!fp) gInfo::info->error("Couldn't open %s for reading.", TEST_MOVIE); +  if(!fp) MIaV::info->error("Couldn't open %s for reading.", TEST_MOVIE);  }  dvfile::~dvfile() diff --git a/client/historyframe.cc b/client/historyframe.cc new file mode 100644 index 0000000..ad9154b --- /dev/null +++ b/client/historyframe.cc @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            historyframe.cc + * + *  Tue Mar  7 17:50:00 CET 2006 + *  Copyright  2006 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  MIaV is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#include "historyframe.h" + +#include <QVBoxLayout> +#include <QResizeEvent> + +HistoryFrame::HistoryFrame() +{ +  QVBoxLayout *layout = new QVBoxLayout(); +  setLayout(layout); +} + +HistoryFrame::~HistoryFrame() +{ +} + +void HistoryFrame::addHistoryItem(HistoryWidget *item) +{ +  widgets.append(item); +} + +void HistoryFrame::resizeEvent(QResizeEvent *event) +{ +  int w = event->size().width(); +  int h = event->size().height(); +   +  int widget_height = h / 10; + +  int num_widgets = h / widget_height; +  int top = num_widgets<widgets.size()?num_widgets:widgets.size(); + +  while(layout()->count()) { +    layout()->removeItem(layout()->itemAt(0)); // Remove all widgets +  } + +  for(int i = 0; i < top; i++) { +    HistoryWidget *history = widgets.at(i); +    history->resize(w, widget_height); +    layout()->addWidget(history); +  } + +} diff --git a/client/historyframe.h b/client/historyframe.h new file mode 100644 index 0000000..39366a9 --- /dev/null +++ b/client/historyframe.h @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            historyframe.h + * + *  Tue Mar  7 17:49:59 CET 2006 + *  Copyright  2006 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  MIaV is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#ifndef __MIAV_HISTORYFRAME_H__ +#define __MIAV_HISTORYFRAME_H__ + +#include <QFrame> +#include <QList> +#include "historywidget.h" + +class HistoryFrame : public QFrame +{ +public: +  HistoryFrame(); +  ~HistoryFrame(); + +  void addHistoryItem(HistoryWidget *item); + +protected: +  void resizeEvent(QResizeEvent *event); + +private: +  QList<HistoryWidget*> widgets; +}; + +#endif/*__MIAV_HISTORYFRAME_H__*/ diff --git a/client/historywidget.cc b/client/historywidget.cc index 55fb178..ba768eb 100644 --- a/client/historywidget.cc +++ b/client/historywidget.cc @@ -24,18 +24,20 @@   *  along with MIaV; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ -#include <config.h> -#ifdef USE_GUI  #include "historywidget.h"  #include "miav_config.h"  #include <QPixmap> +#include <QResizeEvent> -HistoryWidget::HistoryWidget(QWidget *p) : QLabel(p) +#define PIXMAP_DUMMY      PIXMAPS"/dummy.png" +HistoryWidget::HistoryWidget() : QLabel()  { -  parent = p;    image = NULL; +  //  set_image(new QImage(PIXMAP_DUMMY)); +  setLineWidth(1); +  setFrameStyle(QFrame::Plain);  }  HistoryWidget::~HistoryWidget() @@ -44,7 +46,7 @@ HistoryWidget::~HistoryWidget()  }  void HistoryWidget::set_image(QImage *i) -{ +{/*    if(image) delete image;    image = new QImage(*i); @@ -53,6 +55,7 @@ void HistoryWidget::set_image(QImage *i)    QPixmap pixmap;    pixmap.fromImage(resized);    setPixmap(pixmap); + */  }  QImage * HistoryWidget::get_image() @@ -60,10 +63,11 @@ QImage * HistoryWidget::get_image()    return image;  } -static HistoryWidget *fs = NULL; +//static HistoryWidget *fs = NULL;  void HistoryWidget::mouseReleaseEvent(QMouseEvent *event)  { +  /*    if(!parent) {    // We are a fullscreen window      destroy();    } else {         // We are a nested window @@ -72,10 +76,22 @@ void HistoryWidget::mouseReleaseEvent(QMouseEvent *event)      fs = new HistoryWidget(NULL);      fs->showFullScreen(); -    fs->setFixedWidth(config->readInt("pixel_width")); -    fs->setFixedHeight(config->readInt("pixel_height")); +    fs->setFixedWidth(MIaV::config->readInt("pixel_width")); +    fs->setFixedHeight(MIaV::config->readInt("pixel_height"));      fs->set_image(image);    } +  */  } -#endif/*USE_GUI*/ +void HistoryWidget::resizeEvent(QResizeEvent *event) +{ +  /* +  QImage resized = image->scaled(event->size().width(), +                                 event->size().height(), +                                 Qt::KeepAspectRatio, +                                 Qt::SmoothTransformation); +  QPixmap pixmap; +  pixmap.fromImage(resized); +  setPixmap(pixmap); + */ +} diff --git a/client/historywidget.h b/client/historywidget.h index b798ddb..dd2345d 100644 --- a/client/historywidget.h +++ b/client/historywidget.h @@ -25,7 +25,6 @@   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */  #include "config.h" -#ifdef USE_GUI  #ifndef __MIAV_HISTORYWIDGET_H__  #define __MIAV_HISTORYWIDGET_H__ @@ -35,7 +34,7 @@  class HistoryWidget : public QLabel {  Q_OBJECT  public: -  HistoryWidget(QWidget *parent); +  HistoryWidget();    ~HistoryWidget();    void set_image(QImage *image); @@ -43,10 +42,12 @@ public:    void mouseReleaseEvent(QMouseEvent *event); +protected: +  void resizeEvent(QResizeEvent *event); +  private:    QImage *image;    QWidget *parent;  };  #endif/*__MIAV_HISTORYWIDGET_H__*/ -#endif/*USE_GUI*/ 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*/ diff --git a/client/mainwindow.h b/client/mainwindow.h index 627b431..acba62c 100644 --- a/client/mainwindow.h +++ b/client/mainwindow.h @@ -25,56 +25,12 @@   *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */  #include "config.h" -#ifdef USE_GUI -  -#ifndef __MAINWINDOW_H__ -#define __MAINWINDOW_H__ - -#include <string> -using namespace std; +#ifndef __MIAV_MAINWINDOW_H__ +#define __MIAV_MAINWINDOW_H__  #include <QWidget> -#include <QLabel> -#include <QPushButton> -#include <QStatusBar> -#include <QTimer> -#include <QPixmap> -#include <QImage> - -#include "videowidget.h" -#include "cprquerydialog.h" -#include "historywidget.h" - -#define INCH_IN_CM 2.54f - -/** - * First some GUI specs - */ -//#define NUM_HISTORY 3 // moved to a genuine variable -// Button sizes in cm (metric) -#define BUTTON_WIDTH 7 -#define BUTTON_HEIGHT 2 - -#define HISTORY_LIST_MARGIN 25 -#define HISTORY_LIST_SPACING 5  /**  - * Textstrings - */ -#define TXT_ERROR_TITLE "Der er opstået en fejl!" -#define TXT_READY "Klar..." -#define TXT_CPRDLG_TITLE "CPRQueryDialog" -#define TXT_ASK_SAVE_TITLE "Vil du gemme filmen?" -#define TXT_ASK_SAVE "Vil du gemme filmen permanent?" -#define TXT_STOP_RECORDING_TITLE "Stop optagelsen" -#define TXT_STOP_RECORDING "Optagelsen skal standses, inden et nyt cpr nummer kan indtastes.\n\ -Optagelsen standses ved tryk på den røde cirkel med gul streg over." -#define TXT_TIME "Tid:" -#define TXT_QUEUELENGTH "Buffer størelse:" -#define TXT_ASK_CLEAR_SCREEN_TITLE "Fjerne data fra skærmen?" -#define TXT_ASK_CLEAR_SCREEN "Er du sikker på at du vil dataene fra skærmen (billeder, CPR nummer og navn)?" -    -/**    * Images   */  #define PIXMAP_MUTE       PIXMAPS"/mute.png" @@ -97,88 +53,20 @@ class MainWindow : public QWidget  {    Q_OBJECT  public: -  MainWindow(QWidget* parent = 0); +  MainWindow();    ~MainWindow(); -  void message(char* msg); -  public slots:    void cpr_clicked();    void clear_clicked();    void rec_clicked();    void shoot_clicked();    void freeze_clicked(); -  void redraw_edge(); -  void taskbar_update();    void about_clicked();    void mute_clicked();  private: -  unsigned int num_history; - -  void clear(); -  void createGui(); -   -  // Image loading routines. -  QImage *loadButtonIcon( char *name, int height = BUTTON_HEIGHT ); -  QImage *loadImage( char *name ); - -  QImage *img_unfreeze; -  QImage *img_freeze; -  QImage *img_snapshot; -  QImage *img_cpr; -  QImage *img_clear; -  QImage *img_record; -  QImage *img_stop; -  QImage *img_logo; -  QImage *img_mute; -  QImage *img_unmute; -  QImage *img_dummy; -   -  QLabel *lbl_version; -  QLabel *lbl_cpr; -  QLabel *lbl_name; -  QLabel *lbl_recordtime; - -  QTimer *taskbartimer; - -  // Used for the check_for_error_once_per_2_seconds (very ugly) -  QTimer *errtimer; - -  float rec_edge_counter; -  QTimer *timer; -  QLabel *img_recedge; -  HistoryWidget **img_history; -   -  QPushButton *btn_logo; -  QPushButton *btn_clear; -  QPushButton *btn_cpr; -  QPushButton *btn_rec; -  QPushButton *btn_shoot; -  QPushButton *btn_freeze; -  QPushButton *btn_mute; - -  QPushButton *btn_about; - -  QStatusBar *status; -   -  VideoWidget *img_live; -   -  bool recording; -  bool frozen; -  bool muted; - -  // Configuration values -  float unit; -  int video_width; -  int video_height; - -  QPushButton *createButton(char *caption, int width = BUTTON_WIDTH, int height = BUTTON_HEIGHT); -  QPushButton *createButton(char *caption, QWidget *parent, int width = BUTTON_WIDTH, int height = BUTTON_HEIGHT); -  QLabel *createLabel(char *caption, int width, int height);  }; -#endif - -#endif /*USE_GUI*/ +#endif/*__MIAV_MAINWINDOW_H__*/ diff --git a/client/messagebox.cc b/client/messagebox.cc index f4797ab..11686c7 100644 --- a/client/messagebox.cc +++ b/client/messagebox.cc @@ -29,9 +29,9 @@  #include "messagebox.h"  #include "miav_config.h" -// For button sizes! -#include "mainwindow.h" - +#define INCH_IN_CM 2 +#define BUTTON_HEIGHT 1 +#define BUTTON_WIDTH 3  ////////////////////////////////////////////////////////////////////////////////////////  /* If the cpr input by the user is not valid, this dialog   * ask the user what to do. Edit the number, use it as it is,  @@ -45,9 +45,9 @@ MessageBox::MessageBox(QWidget* parent,                         msg_icon icon)  	: QDialog(parent)  { -  int resolution_w = config->readInt("pixel_width"); +  int resolution_w = MIaV::config->readInt("pixel_width");    //int resolution_h = config->readInt("pixel_height"); -  unit = ((float)resolution_w / config->readFloat("screensize")) / INCH_IN_CM; +  unit = ((float)resolution_w / MIaV::config->readFloat("screensize")) / INCH_IN_CM;    setModal(true);    setWindowTitle(name); diff --git a/client/miav_client.cc b/client/miav_client.cc index 29826ef..eea9cdf 100644 --- a/client/miav_client.cc +++ b/client/miav_client.cc @@ -39,14 +39,13 @@  int main(int argc, char *argv[])  { -  QApplication miav_grab( argc, argv ); +  QApplication app(argc, argv); -  MiavConfig cfg(ETC"/miav.conf", NULL); +  MiavConfig config(ETC"/miav.conf"); +  MIaV::initConfig(&config); -  InfoGui info(&cfg); -  gInfo::initInfo(&info); - -  config = new MiavConfig(ETC"/miav.conf", &info); +  InfoGui info(MIaV::config); +  MIaV::initInfo(&info);    MainWindow mainwindow; @@ -58,5 +57,5 @@ int main(int argc, char *argv[])    player.start();    sender.start(); -  return miav_grab.exec(); +  return app.exec();  } diff --git a/client/networksender.cc b/client/networksender.cc index 19df3f3..7e367f1 100644 --- a/client/networksender.cc +++ b/client/networksender.cc @@ -37,5 +37,5 @@ NetworkSender::~NetworkSender()  void NetworkSender::run()  { -  gInfo::info->info("The NetworkSender thread is running."); +  //  MIaV::info->info("The NetworkSender thread is running.");  } diff --git a/client/player.cc b/client/player.cc index cec7b0f..143279f 100644 --- a/client/player.cc +++ b/client/player.cc @@ -37,5 +37,5 @@ Player::~Player()  void Player::run()  { -  gInfo::info->info("The player thread is running."); +  //  MIaV::info->info("The player thread is running.");  } diff --git a/client/splashscreen.cc b/client/splashscreen.cc new file mode 100644 index 0000000..c4acb25 --- /dev/null +++ b/client/splashscreen.cc @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            splashscreen.cc + * + *  Tue Mar  7 14:50:09 CET 2006 + *  Copyright  2006 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  MIaV is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#include "splashscreen.h" + +SplashScreen::SplashScreen() +{ +  start(); +} + +SplashScreen::~SplashScreen() +{ +} + +void SplashScreen::setProgress(QString text, unsigned int pct) +{ +  //  progbartext->text = text; +  // progbar->setValue(pct); +} + +void SplashScreen::run() +{ +  /* +  QDialog splash; +  splash.setModal(true); +  progbar = new QProgressBar(&splash); +  progbar->setRange(0, 100); +  progbar->setTextVisible(true); +  splash.exec(); +  */ +} diff --git a/client/splashscreen.h b/client/splashscreen.h new file mode 100644 index 0000000..95de335 --- /dev/null +++ b/client/splashscreen.h @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            splashscreen.h + * + *  Tue Mar  7 14:50:08 CET 2006 + *  Copyright  2006 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of MIaV. + * + *  MIaV is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  MIaV is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with MIaV; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "config.h" +#ifndef __MIAV_SPLASHSCREEN_H__ +#define __MIAV_SPLASHSCREEN_H__ + +#include <QThread> +#include <QDialog> +#include <QProgressBar> +#include <QString> + +class SplashScreen : public QThread +{ +public: +  SplashScreen(); +  ~SplashScreen(); + +  void setProgress(QString text, unsigned int pct); + +  void run(); + +private: +  QDialog *splash; +  QProgressBar *progbar; +}; + + +#endif/*__MIAV_SPLASHSCREEN_H__*/ diff --git a/client/videowidget.cc b/client/videowidget.cc index 8f733d5..6ff062d 100644 --- a/client/videowidget.cc +++ b/client/videowidget.cc @@ -24,38 +24,33 @@   *    along with MIaV; if not, write to the Free Software   *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ -#include <config.h> - -#ifdef USE_GUI -   #include "videowidget.h" -  #include "miav_config.h" -VideoWidget::VideoWidget(QWidget *p, QWidget* old) : QWidget(p) +VideoWidget::VideoWidget() : QFrame()  { -  parent = p; +  // A welltested hack to force SDL to draw in the QWidget -  oldWindow = old; +  //  QString ids; +  //  setenv("SDL_WINDOWID", ids.setNum(winId()).toStdString().c_str(), 1); + +  // Make it visible +  QPalette palette; +  palette.setColor(backgroundRole(), Qt::blue); +  setPalette(palette); + +  setLineWidth(1); +  setFrameStyle(QFrame::Plain); -  // A welltested hack to force SDL to draw in the QWidget -  QString ids; -  setenv("SDL_WINDOWID", ids.setNum(winId()).toStdString().c_str(), 1);  }  VideoWidget::~VideoWidget()  {  } -QPixmap VideoWidget::getScreenshot() -{  -  return QPixmap::grabWindow (winId()); -} - -static VideoWidget *fs = NULL; -  void VideoWidget::mouseReleaseEvent(QMouseEvent *event)  { +  /*    if(!parent) {    // We are a fullscreen window      QString ids;      setenv("SDL_WINDOWID", ids.setNum(oldWindow->winId()).toStdString().c_str(), 1); @@ -64,12 +59,11 @@ void VideoWidget::mouseReleaseEvent(QMouseEvent *event)    } else {         // We are a nested window      // first delete old instance (if any)      if(fs) delete fs; -    fs = new VideoWidget(NULL, this); +    fs = new VideoWidget();      fs->showFullScreen(); -    fs->setFixedWidth(config->readInt("pixel_width")); -    fs->setFixedHeight(config->readInt("pixel_height")); +    fs->setFixedWidth(MIaV::config->readInt("pixel_width")); +    fs->setFixedHeight(MIaV::config->readInt("pixel_height"));      //camera->resize(fs->width(), fs->height(), true);    } +  */  } - -#endif /* USE_GUI */ diff --git a/client/videowidget.h b/client/videowidget.h index 3ccbd97..25f5bed 100644 --- a/client/videowidget.h +++ b/client/videowidget.h @@ -25,29 +25,20 @@   *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */  #include "config.h" -#ifdef USE_GUI -   #ifndef __VIDEOWIDGET_H__  #define __VIDEOWIDGET_H__ -#include <QWidget> +#include <QFrame>  #include <QPixmap> -class VideoWidget : public QWidget { +class VideoWidget : public QFrame +{  Q_OBJECT  public: -  VideoWidget(QWidget *parent, QWidget *old = NULL); +  VideoWidget();    ~VideoWidget(); -  QPixmap getScreenshot(); -  void mouseReleaseEvent(QMouseEvent *event); - -private: -  QWidget *parent; -  // Reassign SDL to this when closing (if non-NULL) -  QWidget *oldWindow; +  void mouseReleaseEvent(QMouseEvent *event);  };  #endif /* __VIDEOWIDGET_H__ */ - -#endif /* USE_GUI */ diff --git a/lib/file.cc b/lib/file.cc index 3a59334..6bd8438 100644 --- a/lib/file.cc +++ b/lib/file.cc @@ -81,8 +81,8 @@ File::~File()      info->info("[%s]", filelist[cnt].c_str());    } -  std::string *trash = config->readString("server_trash"); -  std::string *later = config->readString("server_later"); +  std::string *trash = MIaV::config->readString("server_trash"); +  std::string *later = MIaV::config->readString("server_later");    switch(savestate) {    case NO_CHANGE: diff --git a/lib/info.cc b/lib/info.cc index 701a705..a7b5f3e 100644 --- a/lib/info.cc +++ b/lib/info.cc @@ -66,3 +66,13 @@ void Info::log(char *fmt, ...)    // End of safezone    pthread_mutex_unlock(&mutex);  } + + +// For the global info object +void MIaV::initInfo(Info* i) +{ +  info = i; +} + +Info *MIaV::info = NULL; + @@ -58,4 +58,10 @@ protected:    string log_filename;  }; +// For the global info object +namespace MIaV { +  void initInfo(Info* info); +  extern Info* info; +}; +  #endif/*__MIAV_INFO_H__*/ diff --git a/lib/miav_config.cc b/lib/miav_config.cc index adfa5c5..81436cf 100644 --- a/lib/miav_config.cc +++ b/lib/miav_config.cc @@ -26,12 +26,10 @@   */  #include <config.h>  #include "miav_config.h" +#include "info.h" -MiavConfig *config; - -MiavConfig::MiavConfig(char *file, Info *i) +MiavConfig::MiavConfig(char *file)  { -  info = i;    configs = NULL;    filename = string(file); @@ -40,7 +38,7 @@ MiavConfig::MiavConfig(char *file, Info *i)    FILE* fp = fopen(file, "r");    if(!fp) { -    if(info) info->error("Error reading configuration file %s\n", file); +    if(MIaV::info) MIaV::info->error("Error reading configuration file %s\n", file);      else fprintf(stderr, "Error reading configuration file %s\n", file);      return;    } @@ -76,7 +74,7 @@ MiavConfig::~MiavConfig()   */  void MiavConfig::parseError(char* msg, _cfg* cfg)  { -  if(info) info->error("Error parsing file %s at line %d:\n\t%s\n\t%s\n",  +  if(MIaV::info) MIaV::info->error("Error parsing file %s at line %d:\n\t%s\n\t%s\n",                          filename.c_str(),                          cfg->line,                         cfg->orig, @@ -462,12 +460,21 @@ _cfg *MiavConfig::findNode(char* node)      if(!strcmp(node, cfg->name->c_str())) return cfg;      cfg = cfg->next;    } -  if(info) info->error("Missing line in configuration file: \"%s\"!\n", node); +  if(MIaV::info) MIaV::info->error("Missing line in configuration file: \"%s\"!\n", node);    else fprintf(stderr, "Missing line in configuration file: \"%s\"!\n", node);    return NULL;  } +// For the global config object. +void MIaV::initConfig(MiavConfig *c) +{ +  config = c; +} + +MiavConfig *MIaV::config = NULL; + +  #ifdef __TEST_MIAV_CONFIG  int main(int argc, char *argv[]) { diff --git a/lib/miav_config.h b/lib/miav_config.h index a8658f1..c97802d 100644 --- a/lib/miav_config.h +++ b/lib/miav_config.h @@ -64,7 +64,7 @@ typedef struct __cfg {  class MiavConfig {  public: -  MiavConfig(char *file, Info *info = NULL); +  MiavConfig(char *file);    ~MiavConfig();    int readInt(char *node); @@ -73,7 +73,6 @@ public:    float readFloat(char *node);  protected: -  Info *info;    string filename;    _cfg *createSemantics(_cfg *cfg); @@ -93,6 +92,11 @@ protected:    _cfg *configs;  }; -extern MiavConfig *config; + +// For the global config object +namespace MIaV { +  void initConfig(MiavConfig *config); +  extern MiavConfig *config; +};  #endif/*__MIAV_MIAV_CONFIG_H__*/ diff --git a/server/img_encoder.cc b/server/img_encoder.cc index bb36009..2ed0113 100644 --- a/server/img_encoder.cc +++ b/server/img_encoder.cc @@ -57,7 +57,7 @@ ImgEncoder::ImgEncoder(const char* cpr, Info *i)    char encrypted_cpr[32];    // Get server root -  server_root = config->readString("server_image_root"); +  server_root = MIaV::config->readString("server_image_root");    // Copy the bytes representing the birth month from the cpr    // [dd][mm][yy]-[nn][nn] diff --git a/server/libfame_wrapper.cc b/server/libfame_wrapper.cc index a663df6..e1d3660 100644 --- a/server/libfame_wrapper.cc +++ b/server/libfame_wrapper.cc @@ -94,13 +94,13 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i)    // to JPEG), whereas P and B frames are motion compressed, respectively     // predicted from past reference (I or P) frame, or bidirectionally predicted     // from past and future reference frame. -  fame_par.coding = config->readString("frame_sequence")->c_str(); +  fame_par.coding = MIaV::config->readString("frame_sequence")->c_str();    // quality is a percentage, which controls compression versus quality. -  fame_par.quality = config->readInt("video_quality"); +  fame_par.quality = MIaV::config->readInt("video_quality");    // Bitrate -  fame_par.bitrate = config->readInt("video_bitrate") * 1000; // video bitrate in bytes pr second (0=VBR) +  fame_par.bitrate = MIaV::config->readInt("video_bitrate") * 1000; // video bitrate in bytes pr second (0=VBR)    // slices_per_frame is the number of frame slices per frame. More slices provide     // better error recovery. There must be at least one slice per frame, and at most  @@ -133,7 +133,7 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i)    fame_par.profile = profilename;              // profile name    fame_par.total_frames = 0;        // total number of frames -  if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg4") == 0) { +  if(strcmp(MIaV::config->readString("encoding_codec")->c_str(), "mpeg4") == 0) {      info->info("Using mpeg4 compression.");      fame_object_t *object; @@ -141,7 +141,7 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i)      object = fame_get_object(fame_context, "profile/mpeg4/simple");      if(object) fame_register(fame_context, "profile", object); -  } else if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { +  } else if(strcmp(MIaV::config->readString("encoding_codec")->c_str(), "mpeg1") == 0) {      info->info("Using mpeg1 compression.");      fame_object_t *object; @@ -149,7 +149,7 @@ LibFAMEWrapper::LibFAMEWrapper(Info *i)      object = fame_get_object(fame_context, "profile/mpeg1");      if(object) fame_register(fame_context, "profile", object); -  } else if(strcmp(config->readString("encoding_codec")->c_str(), "mpeg1") == 0) { +  } else if(strcmp(MIaV::config->readString("encoding_codec")->c_str(), "mpeg1") == 0) {    } else {      info->info("Using default (mpeg1) compression.");    } diff --git a/server/liblame_wrapper.cc b/server/liblame_wrapper.cc index 5603d6f..137ac6a 100644 --- a/server/liblame_wrapper.cc +++ b/server/liblame_wrapper.cc @@ -46,9 +46,9 @@ LibLAMEWrapper::LibLAMEWrapper(Info *i)    //  lame_set_num_samples(gfp, SAMPLES);    //  lame_set_num_samples(gfp, 0); -	lame_set_quality(gfp, config->readInt("mp3_quality")); +	lame_set_quality(gfp, MIaV::config->readInt("mp3_quality"));  	lame_set_mode(gfp, STEREO); -	lame_set_brate(gfp, config->readInt("mp3_bitrate")); +	lame_set_brate(gfp, MIaV::config->readInt("mp3_bitrate"));    lame_set_strict_ISO(gfp, 1); diff --git a/server/miav_daemon.cc b/server/miav_daemon.cc index 500e92a..06c6c3e 100644 --- a/server/miav_daemon.cc +++ b/server/miav_daemon.cc @@ -44,11 +44,12 @@ MiavDaemon::~MiavDaemon()  int MiavDaemon::daemon_main()  { -  MiavConfig cfg(ETC"/miav.conf", NULL); -  InfoConsole info(&cfg); -  config = new MiavConfig(ETC"/miav.conf", &info); +  MiavConfig config(ETC"/miav.conf"); +  MIaV::initConfig(&config); + +  InfoConsole info(&config); -  int port = config->readInt("server_port"); +  int port = MIaV::config->readInt("server_port");    pid_t childpid; // variable to store the child's pid    signal(SIGCLD, SIG_IGN);  // Ved SIGCHILD til IGNORE maa wait/waitpid ikke kaldes  diff --git a/server/miav_server.cc b/server/miav_server.cc index 5b5a29d..2005afd 100644 --- a/server/miav_server.cc +++ b/server/miav_server.cc @@ -41,7 +41,7 @@ int main(int argc, char *argv[])  {    MiavDaemon daemon; -  MiavConfig cfg(ETC"/miav.conf", NULL); +  MiavConfig cfg(ETC"/miav.conf");    string *user = cfg.readString("server_user");    string *group = cfg.readString("server_group"); diff --git a/server/mov_encoder.cc b/server/mov_encoder.cc index 0c97e18..e9049a6 100644 --- a/server/mov_encoder.cc +++ b/server/mov_encoder.cc @@ -100,7 +100,7 @@ void MovEncoder::thread_main()            *running = false;            // Kick them sleepy ones so they get the message. -          int threads = config->readInt("encoding_threads") - 1; // -1 cause we only need the others! +          int threads = MIaV::config->readInt("encoding_threads") - 1; // -1 cause we only need the others!            for(int cnt = 0; cnt < threads; cnt++) {              inputqueue->push(NULL);            } @@ -230,7 +230,7 @@ void MovEncoder::thread_main()            *running = false;            // Kick them sleepy ones so they get the message. -          int threads = config->readInt("encoding_threads"); +          int threads = MIaV::config->readInt("encoding_threads");            for(int cnt = 0; cnt < threads; cnt++) sem_post(input_sem);          }          // Encode video diff --git a/server/mov_encoder_thread.cc b/server/mov_encoder_thread.cc index 2ff013d..c0b8b27 100644 --- a/server/mov_encoder_thread.cc +++ b/server/mov_encoder_thread.cc @@ -50,11 +50,11 @@ MovEncoderThread::MovEncoderThread(const char *clientip, const char *cpr, Info *    block = new FrameVector(); -  num_frames_in_block = config->readString("frame_sequence")->length(); +  num_frames_in_block = MIaV::config->readString("frame_sequence")->length();    info->info("Frame sequence length %d", num_frames_in_block); -  threads = config->readInt("encoding_threads"); +  threads = MIaV::config->readInt("encoding_threads");    movencodersrunning = true; diff --git a/server/mov_encoder_writer.cc b/server/mov_encoder_writer.cc index 1773527..d3eb0ef 100644 --- a/server/mov_encoder_writer.cc +++ b/server/mov_encoder_writer.cc @@ -64,7 +64,7 @@ MovEncoderWriter::MovEncoderWriter(const char *clientip, const char* cpr,    char date[32];    // Get server root -  server_root = config->readString("server_movie_root"); +  server_root = MIaV::config->readString("server_movie_root");    // Copy the bytes representing the birth month from the cpr    // [dd][mm][yy]-[nn][nn] diff --git a/server/multicast.cc b/server/multicast.cc index 0072c19..dd12c27 100644 --- a/server/multicast.cc +++ b/server/multicast.cc @@ -59,7 +59,7 @@ Multicast::Multicast(Info *i, mcastconf_t &mcclientconf)                  mcclientconf.addr.c_str(),                  mcclientconf.port); -  int mtu = config->readInt("udp_packet_size"); +  int mtu = MIaV::config->readInt("udp_packet_size");    // Create buffer with the size of MTU    //  socklen_t mtu_sz; diff --git a/server/multicast_configuration.cc b/server/multicast_configuration.cc index 969faca..f4e7414 100644 --- a/server/multicast_configuration.cc +++ b/server/multicast_configuration.cc @@ -28,7 +28,7 @@  #include "multicast_configuration.h"  MulticastConfiguration::MulticastConfiguration(Info *info, char *file) -  : MiavConfig(file, info) +  : MiavConfig(file)  {    mcastconf_t conf; diff --git a/tools/MIaVAdd b/tools/MIaVAdd index 0fc0bd3..bb342b7 100755 --- a/tools/MIaVAdd +++ b/tools/MIaVAdd @@ -6,7 +6,7 @@ function allfile() {    echo " *            $1" >> $1;    echo " *" >> $1 ;    echo " *  `date`" >> $1; -  echo " *  Copyright  2005 Bent Bisballe Nyeng" >> $1; +  echo " *  Copyright  2006 Bent Bisballe Nyeng" >> $1;    echo " *  deva@aasimon.org" >> $1;    echo " ****************************************************************************/" >> $1;    echo "" >> $1; | 
