/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
 *            mainwindow.h
 *
 *  Sat Aug 21 19:50:13 2004
 *  Copyright  2004  deva
 *  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"
#ifdef USE_GUI
 
#ifndef __MAINWINDOW_H__
#define __MAINWINDOW_H__

#include <string>
using namespace std;

#include <qwidget.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qstatusbar.h>
#include <qtimer.h>
#include <qpixmap.h>
#include <qimage.h>

#include "videowidget.h"
#include "camera.h"
#include "cprquerydialog.h"
#include "historywidget.h"

#include "info_gui.h"

#define INCH_IN_CM 2.54f

/**
 * First some GUI specs
 */
#define NUM_HISTORY 3
// Button sizes in cm (metric)
#define BUTTON_WIDTH 8
#define BUTTON_HEIGHT 2

/** 
 * 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_RECORD     PIXMAPS"/record.png"
#define PIXMAP_STOP       PIXMAPS"/stop.png"

#define PIXMAP_FREEZE     PIXMAPS"/freeze.png"
#define PIXMAP_UNFREEZE   PIXMAPS"/unfreeze.png"

#define PIXMAP_CPR        PIXMAPS"/cpr.png"
#define PIXMAP_CLEAR      PIXMAPS"/clear.png"

#define PIXMAP_SNAPSHOT   PIXMAPS"/snapshot.png"
#define PIXMAP_DUMMY      PIXMAPS"/dummy.png"
#define PIXMAP_LOGO_SMALL PIXMAPS"/miav-logo.png"

class MainWindow : public QWidget
{
  Q_OBJECT
public:
  MainWindow(QApplication *qApp, QWidget* parent = 0, const char* name = 0);
  ~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();
 
private:
  void clear();

  Info *info;

  void createGui();
  
  Camera *camera;
  Info *cam_info;

  // 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_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[NUM_HISTORY];
  
  QPushButton *btn_logo;
  QPushButton *btn_clear;
  QPushButton *btn_cpr;
  QPushButton *btn_rec;
  QPushButton *btn_shoot;
  QPushButton *btn_freeze;

  QPushButton *btn_about;

  QStatusBar *status;
  
  VideoWidget *img_live;
  
  bool recording;
  bool frozen;

  // 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*/