/********************************************************************************
* FaceTrackNoIR This program is a private project of the some enthusiastic *
* gamers from Holland, who don't like to pay much for *
* head-tracking. *
* *
* Copyright (C) 2010 Wim Vriend (Developing) *
* Ron Hendriks (Researching and Testing) *
* *
* Homepage *
* *
* This program 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 3 of the License, or (at your *
* option) any later version. *
* *
* This program 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 this program; if not, see . *
*********************************************************************************/
#ifndef FaceTrackNoIR_H
#define FaceTrackNoIR_H
#undef FTNOIR_PROTOCOL_BASE_LIB
#undef FTNOIR_TRACKER_BASE_LIB
#undef FTNOIR_FILTER_BASE_LIB
#define FTNOIR_PROTOCOL_BASE_EXPORT Q_DECL_IMPORT
#define FTNOIR_TRACKER_BASE_EXPORT Q_DECL_IMPORT
#define FTNOIR_FILTER_BASE_EXPORT Q_DECL_IMPORT
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#if !defined(_WIN32) && !defined(__WIN32)
# include
#else
# include
#endif
#include
#include
#include
#include "ui_facetracknoir.h"
#include "ftnoir_protocol_base/ftnoir_protocol_base.h"
#include "ftnoir_tracker_base/ftnoir_tracker_base.h"
#include "ftnoir_filter_base/ftnoir_filter_base.h"
#include "global-settings.h"
#include "tracker.h"
#include "facetracknoir/curve-config.h"
class Tracker; // pre-define class to avoid circular includes
class FaceTrackNoIR;
class KeybindingWorker;
class FaceTrackNoIR : public QMainWindow, IDynamicLibraryProvider
{
Q_OBJECT
public:
FaceTrackNoIR(QWidget *parent = 0, Qt::WFlags flags = 0);
~FaceTrackNoIR();
void updateSettings(); // Update the settings (let Tracker read INI-file).
QFrame *get_video_widget(); // Get a pointer to the video-widget, to use in the DLL
Tracker *tracker;
void bindKeyboardShortcuts();
DynamicLibrary* current_tracker1() {
return dlopen_trackers.value(ui.iconcomboTrackerSource->currentIndex(), (DynamicLibrary*) NULL);
}
DynamicLibrary* current_tracker2() {
return dlopen_trackers.value(ui.cbxSecondTrackerSource->currentIndex() - 1, (DynamicLibrary*) NULL);
}
DynamicLibrary* current_protocol() {
return dlopen_protocols.value(ui.iconcomboProtocol->currentIndex(), (DynamicLibrary*) NULL);
}
DynamicLibrary* current_filter() {
return dlopen_filters.value(ui.iconcomboFilter->currentIndex(), (DynamicLibrary*) NULL);
}
THeadPoseDOF& axis(int idx) {
return *pose.axes[idx];
}
#if defined(_WIN32) || defined(__WIN32)
Key keyCenter;
KeybindingWorker* keybindingWorker;
#else
QxtGlobalShortcut* keyCenter;
#endif
public slots:
void shortcutRecentered();
private:
HeadPoseData pose;
Ui::FaceTrackNoIRClass ui;
QTimer timUpdateHeadPose; // Timer to display headpose
QStringList iniFileList; // List of INI-files, that are present in the Settings folder
ITrackerDialog* pTrackerDialog; // Pointer to Tracker dialog instance (in DLL)
ITrackerDialog* pSecondTrackerDialog; // Pointer to the second Tracker dialog instance (in DLL)
IProtocolDialog* pProtocolDialog; // Pointer to Protocol dialog instance (in DLL)
IFilterDialog* pFilterDialog; // Pointer to Filter dialog instance (in DLL)
/** Widget variables **/
QWidget *_keyboard_shortcuts;
QWidget *_curve_config;
void createIconGroupBox();
void GetCameraNameDX();
void loadSettings();
void setupFaceTrackNoIR();
QList dlopen_filters;
QList dlopen_trackers;
QList dlopen_protocols;
bool looping;
private slots:
//file menu
void open();
void save();
void saveAs();
void exit();
// void setIcon(int index);
void profileSelected(int index);
void showVideoWidget();
void showHeadPoseWidget();
void showTrackerSettings();
void showSecondTrackerSettings();
void showServerControls();
void showFilterControls();
void showKeyboardShortcuts();
void showCurveConfiguration();
void setInvertAxis( Axis axis, int invert );
void setInvertYaw(int invert) {
setInvertAxis(Yaw, invert);
}
void setInvertPitch(int invert) {
setInvertAxis(Pitch, invert);
}
void setInvertRoll(int invert) {
setInvertAxis(Roll, invert);
}
void setInvertX(int invert) {
setInvertAxis(TX, invert);
}
void setInvertY(int invert) {
setInvertAxis(TY, invert);
}
void setInvertZ(int invert) {
setInvertAxis(TZ, invert);
}
void showHeadPose();
void startTracker();
void stopTracker();
};
#endif // FaceTrackNoIR_H