/////////////////////////////////////////////////////////////////////////////
// Name: wconfiguration.cpp
// Purpose:
// Author: César Mauri Loba
// Modified by:
// Created: 29/12/2008 16:35:20
// RCS-ID:
// Copyright: (C) 2008-14 Cesar Mauri from CREA Sistemes Informatics
//
// 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 .
/////////////////////////////////////////////////////////////////////////////
#include "wconfiguration.h"
////@begin includes
#include "wx/imaglist.h"
////@end includes
#include
#include
#include
#include
#include
#include "eviacamapp.h"
#include "viacamcontroller.h"
#include "visionpipeline.h"
#include "clickwindowcontroller.h"
#include "pointeraction.h"
#include "cautostart.h"
#include "configmanager.h"
#include "wgetkey.h"
#include "dwellclick.h"
#include "gestureclick.h"
////@begin XPM images
#include "resources/eviacam_mini.xpm"
#include "resources/user.xpm"
#include "resources/eviacam_small.xpm"
////@end XPM images
#define FIRST_CONTROL_ID 12000
#include "langnames-utf8.h"
/*!
* WConfiguration type definition
*/
IMPLEMENT_DYNAMIC_CLASS( WConfiguration, wxDialog )
/*!
* WConfiguration event table definition
*/
BEGIN_EVENT_TABLE( WConfiguration, wxDialog )
////@begin WConfiguration event table entries
EVT_SPINCTRL( ID_SPINCTRL_XSPEED, WConfiguration::OnSpinctrlXspeedUpdated )
EVT_SPINCTRL( ID_SPINCTRL_YSPEED, WConfiguration::OnSpinctrlYspeedUpdated )
EVT_SPINCTRL( ID_SPINCTRL_ACCELERATION, WConfiguration::OnSpinctrlAccelerationUpdated )
EVT_SPINCTRL( ID_SPINCTRL_SMOOTHNESS, WConfiguration::OnSpinctrlSmoothnessUpdated )
EVT_SPINCTRL( ID_SPINCTRL_EASYSTOP, WConfiguration::OnSpinctrlEasystopUpdated )
EVT_BUTTON( ID_BUTTON, WConfiguration::OnButtonClick )
EVT_CHECKBOX( ID_CHECKBOX_WORKSPACE_LIMIT, WConfiguration::OnCheckboxWorkspaceLimitClick )
EVT_SPINCTRL( ID_SPINCTRL_TOP_WORKSPACE, WConfiguration::OnSpinctrlTopWorkspaceUpdated )
EVT_SPINCTRL( ID_SPINCTRL_LEFT_WORKSPACE, WConfiguration::OnSpinctrlLeftWorkspaceUpdated )
EVT_SPINCTRL( ID_SPINCTRL_RIGHT_WORKSPACE, WConfiguration::OnSpinctrlRightWorkspaceUpdated )
EVT_SPINCTRL( ID_SPINCTRL_BOTTOM_WORKSPACE, WConfiguration::OnSpinctrlBottomWorkspaceUpdated )
EVT_CHECKBOX( ID_CHECKBOX2, WConfiguration::OnCheckboxWrapPointer )
EVT_CHECKBOX( ID_CHECKBOX_ENABLE_DWELL, WConfiguration::OnCheckboxEnableDwellClick )
EVT_SPINCTRL( ID_SPINCTRL_DWELL_TIME, WConfiguration::OnSpinctrlDwellTimeUpdated )
EVT_SPINCTRL( ID_SPINCTRL_DWELL_AREA, WConfiguration::OnSpinctrlDwellAreaUpdated )
EVT_CHECKBOX( ID_CHECKBOX_ALLOW_CONSECUTIVE, WConfiguration::OnCheckboxAllowConsecutiveClick )
EVT_CHECKBOX( ID_CHECKBOX_BEEP_ON_CLICK, WConfiguration::OnCheckboxBeepOnClickClick )
#if defined(__WXGTK__)
EVT_CHECKBOX( ID_CHECKBOX_ALLOW_VISUAL_ALERTS, WConfiguration::OnCheckboxAllowVisualAlertsClick )
#endif
EVT_CHECKBOX( ID_CHECKBOX_SHOW_CLICKWIN, WConfiguration::OnCheckboxShowClickwinClick )
EVT_CHOICE( ID_CHOICE_DESIGN, WConfiguration::OnChoiceDesignSelected )
EVT_CHOICE( ID_CHOICE_BEHAVIOUR, WConfiguration::OnChoiceBehaviourSelected )
#if defined(__WXGTK__)
EVT_CHOICE( ID_CHOICE5, WConfiguration::OnChoiceClickWindowModeSelected )
#endif
#if defined(__WXGTK__)
EVT_CHECKBOX( ID_CHECKBOX_AUTOHIDE, WConfiguration::OnCheckboxAutohideClick )
#endif
#if defined(__WXGTK__)
EVT_CHECKBOX( ID_CHECKBOX, WConfiguration::OnCheckboxEnableGestureClick )
#endif
#if defined(__WXGTK__)
EVT_CHOICE( ID_CHOICE, WConfiguration::OnLeftGestureChoiceSelected )
#endif
#if defined(__WXGTK__)
EVT_CHOICE( ID_CHOICE1, WConfiguration::OnRightGestureChoiceSelected )
#endif
#if defined(__WXGTK__)
EVT_CHOICE( ID_CHOICE2, WConfiguration::OnUpGestureChoiceSelected )
#endif
#if defined(__WXGTK__)
EVT_CHOICE( ID_CHOICE3, WConfiguration::OnDownGestureChoiceSelected )
#endif
#if defined(__WXGTK__)
EVT_CHECKBOX( ID_CHECKBOX_STARTUP, WConfiguration::OnCheckboxStartupClick )
#endif
EVT_CHECKBOX( ID_CHECKBOX_ENABLE_AT_STARTUP, WConfiguration::OnCheckboxEnableAtStartupClick )
EVT_TEXT( ID_TEXTCTRL_ONSCREENKEYBOARDCOMMAND, WConfiguration::OnTextctrlOnscreenkeyboardcommandTextUpdated )
EVT_BUTTON( ID_BUTTON_ONSCREENKEYBOARDCOMMAND, WConfiguration::OnButtonOnscreenkeyboardcommandClick )
EVT_CHECKBOX( ID_CHECKBOX_AUTO_LOCATE_FACE, WConfiguration::OnCheckboxAutoLocateFaceClick )
EVT_CHOICE( ID_CHOICE4, WConfiguration::OnChoCpuUsageSelected )
EVT_CHECKBOX( ID_CHECKBOX_ENABLE_WHEN_FACE_DETECTED, WConfiguration::OnCheckboxEnableWhenFaceDetectedClick )
EVT_SPINCTRL( ID_SPINCTRL2, WConfiguration::OnSpinLocateFaceTimeoutUpdated )
EVT_SPINCTRL( ID_SPIN_SEND_ACTION_WAIT, WConfiguration::OnSpinSendActionWaitUpdated )
EVT_CHOICE( ID_CHOICE_PROFILE, WConfiguration::OnChoiceProfileSelected )
EVT_BUTTON( ID_BUTTON_ADD_PROFILE, WConfiguration::OnButtonAddProfileClick )
EVT_BUTTON( ID_BUTTON_DEL_PROFILE, WConfiguration::OnButtonDelProfileClick )
EVT_BUTTON( ID_BUTTON_CAMERA_SETTINGS, WConfiguration::OnButtonCameraSettingsClick )
EVT_BUTTON( ID_BUTTON_CHANGE_CAMERA, WConfiguration::OnButtonChangeCameraClick )
EVT_CHOICE( ID_CHOICE_LANGUAGE, WConfiguration::OnChoiceLanguageSelected )
EVT_CHECKBOX( ID_CHECKBOX_CHECK_UPDATES, WConfiguration::OnCheckboxCheckUpdatesClick )
EVT_BUTTON( wxID_OK, WConfiguration::OnOkClick )
EVT_BUTTON( wxID_CANCEL, WConfiguration::OnCancelClick )
////@end WConfiguration event table entries
EVT_COMBOBOX( ID_COMBOBOX_LEFT, WConfiguration::OnComboboxLeftSelected )
EVT_COMBOBOX( ID_COMBOBOX_RIGHT, WConfiguration::OnComboboxRightSelected )
EVT_COMBOBOX( ID_COMBOBOX_TOP, WConfiguration::OnComboboxTopSelected )
EVT_COMBOBOX( ID_COMBOBOX_BOTTOM, WConfiguration::OnComboboxBottomSelected )
END_EVENT_TABLE()
/*!
* WConfiguration constructors
*/
WConfiguration::WConfiguration()
{
Init();
}
WConfiguration::WConfiguration( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
Init();
Create(parent, id, caption, pos, size, style);
}
/*!
* WConfiguration creator
*/
bool WConfiguration::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
{
////@begin WConfiguration creation
SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls();
SetIcon(GetIconResource(wxT("resources/eviacam_mini.xpm")));
if (GetSizer())
{
GetSizer()->SetSizeHints(this);
}
////@end WConfiguration creation
InitializeData ();
return true;
}
/*!
* WConfiguration destructor
*/
WConfiguration::~WConfiguration()
{
////@begin WConfiguration destruction
////@end WConfiguration destruction
}
/*!
* Member initialisation
*/
void WConfiguration::Init()
{
////@begin WConfiguration member initialisation
m_spinXSpeed = NULL;
m_spinYSpeed = NULL;
m_spinAcceleration = NULL;
m_spinSmoothness = NULL;
m_spinEasyStop = NULL;
m_buttonCalibrateMotion = NULL;
m_chkEnabledWorkspace = NULL;
m_spin_top_workspace = NULL;
m_spin_left_workspace = NULL;
m_spin_right_workspace = NULL;
m_spin_bottom_workspace = NULL;
m_chkWrapPointer = NULL;
m_panelClick = NULL;
m_chkDwellClickEnabled = NULL;
m_stDwellTime = NULL;
m_spinDwellTime = NULL;
m_stDwellArea = NULL;
m_spinDwellArea = NULL;
m_chkAllowConsecutiveClick = NULL;
m_chkBeepOnClick = NULL;
#if defined(__WXGTK__)
m_chkAllowVisualAlerts = NULL;
#endif
m_sboxClickWin = NULL;
m_chkShowClickWin = NULL;
m_stDesign = NULL;
m_choClickWindowDesign = NULL;
m_stBehaviour = NULL;
m_choClickWindowBehaviour = NULL;
#if defined(__WXGTK__)
m_stDocking = NULL;
#endif
#if defined(__WXGTK__)
m_choDockingMode = NULL;
#endif
#if defined(__WXGTK__)
m_chkAutohide = NULL;
#endif
#if defined(__WXGTK__)
m_sboxGestureClick = NULL;
#endif
#if defined(__WXGTK__)
m_chkEnableGestureClick = NULL;
#endif
#if defined(__WXGTK__)
m_stMoveLeft = NULL;
#endif
#if defined(__WXGTK__)
m_choLeft = NULL;
#endif
#if defined(__WXGTK__)
m_stMoveRight = NULL;
#endif
#if defined(__WXGTK__)
m_choRight = NULL;
#endif
#if defined(__WXGTK__)
m_stMoveUp = NULL;
#endif
#if defined(__WXGTK__)
m_choUp = NULL;
#endif
#if defined(__WXGTK__)
m_stMoveDown = NULL;
#endif
#if defined(__WXGTK__)
m_choDown = NULL;
#endif
m_panelKeys = NULL;
m_hotkeysSizer = NULL;
#if defined(__WXGTK__)
m_chkStartup = NULL;
#endif
m_chkEnabledAtStartup = NULL;
m_txtOnScreenKeyboardCommand = NULL;
m_btntOnScreenKeyboardCommand = NULL;
m_sizerFaceLocalization = NULL;
m_chkAutoLocateFace = NULL;
m_staticCpuUsage = NULL;
m_choCpuUsage = NULL;
m_chkEnableWhenFaceDetected = NULL;
m_staticLocateFaceTimeout2 = NULL;
m_spinLocateFaceTimeout = NULL;
m_staticLocateFaceTimeout = NULL;
m_spinSendActionWait = NULL;
m_choProfile = NULL;
m_btnAddProfile = NULL;
m_btnDeleteProfile = NULL;
m_txtSelectedCamera = NULL;
m_btnCameraSettings = NULL;
m_choLanguage = NULL;
m_chkCheckUpdatesAtStartup = NULL;
m_btnCancel = NULL;
////@end WConfiguration member initialisation
m_cmbLeft = NULL;
m_cmbRight = NULL;
m_cmbTop = NULL;
m_cmbBottom = NULL;
m_lastId = FIRST_CONTROL_ID;
m_dirty= false;
}
/*!
* Control creation for WConfiguration
*/
void WConfiguration::CreateControls()
{
////@begin WConfiguration content construction
WConfiguration* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
itemDialog1->SetSizer(itemBoxSizer2);
wxListbook* itemListbook3 = new wxListbook( itemDialog1, ID_LISTBOOK, wxDefaultPosition, wxDefaultSize, wxBK_DEFAULT );
wxImageList* itemListbook3ImageList = new wxImageList(32, 32, true, 2);
{
wxIcon itemListbook3Icon0(itemDialog1->GetIconResource(wxT("resources/user.xpm")));
itemListbook3ImageList->Add(itemListbook3Icon0);
wxIcon itemListbook3Icon1(itemDialog1->GetIconResource(wxT("resources/eviacam_small.xpm")));
itemListbook3ImageList->Add(itemListbook3Icon1);
}
itemListbook3->AssignImageList(itemListbook3ImageList);
wxNotebook* itemNotebook4 = new wxNotebook( itemListbook3, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize, wxBK_DEFAULT );
wxPanel* itemPanel5 = new wxPanel( itemNotebook4, ID_PANEL_MOTION, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer6 = new wxBoxSizer(wxVERTICAL);
itemPanel5->SetSizer(itemBoxSizer6);
wxStaticBox* itemStaticBoxSizer7Static = new wxStaticBox(itemPanel5, wxID_ANY, _("Motion calibration"));
wxStaticBoxSizer* itemStaticBoxSizer7 = new wxStaticBoxSizer(itemStaticBoxSizer7Static, wxVERTICAL);
itemBoxSizer6->Add(itemStaticBoxSizer7, 0, wxGROW|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer8 = new wxFlexGridSizer(0, 4, 0, 0);
itemStaticBoxSizer7->Add(itemFlexGridSizer8, 0, wxGROW, 5);
wxStaticText* itemStaticText9 = new wxStaticText( itemStaticBoxSizer7->GetStaticBox(), wxID_STATIC, _("X axis speed"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer8->Add(itemStaticText9, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinXSpeed = new wxSpinCtrl( itemStaticBoxSizer7->GetStaticBox(), ID_SPINCTRL_XSPEED, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 30, 0 );
if (WConfiguration::ShowToolTips())
m_spinXSpeed->SetToolTip(_("Sets response sensitivity for the X axis."));
itemFlexGridSizer8->Add(m_spinXSpeed, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText11 = new wxStaticText( itemStaticBoxSizer7->GetStaticBox(), wxID_STATIC, _("Y axis speed"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer8->Add(itemStaticText11, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinYSpeed = new wxSpinCtrl( itemStaticBoxSizer7->GetStaticBox(), ID_SPINCTRL_YSPEED, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 30, 0 );
if (WConfiguration::ShowToolTips())
m_spinYSpeed->SetToolTip(_("Sets response sensitivity for the Y axis."));
itemFlexGridSizer8->Add(m_spinYSpeed, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText13 = new wxStaticText( itemStaticBoxSizer7->GetStaticBox(), wxID_STATIC, _("Acceleration"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer8->Add(itemStaticText13, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinAcceleration = new wxSpinCtrl( itemStaticBoxSizer7->GetStaticBox(), ID_SPINCTRL_ACCELERATION, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 5, 0 );
if (WConfiguration::ShowToolTips())
m_spinAcceleration->SetToolTip(_("Sets pointer's acceleration.\n0 means no acceleration and\n5 maximum acceleration."));
itemFlexGridSizer8->Add(m_spinAcceleration, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText15 = new wxStaticText( itemStaticBoxSizer7->GetStaticBox(), wxID_STATIC, _("Smoothness"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer8->Add(itemStaticText15, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinSmoothness = new wxSpinCtrl( itemStaticBoxSizer7->GetStaticBox(), ID_SPINCTRL_SMOOTHNESS, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 8, 0 );
if (WConfiguration::ShowToolTips())
m_spinSmoothness->SetToolTip(_("Tremor reduction filter.\n0 means no filter and \n8 maximum filtering."));
itemFlexGridSizer8->Add(m_spinSmoothness, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText17 = new wxStaticText( itemStaticBoxSizer7->GetStaticBox(), wxID_STATIC, _("Motion threshold"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer8->Add(itemStaticText17, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinEasyStop = new wxSpinCtrl( itemStaticBoxSizer7->GetStaticBox(), ID_SPINCTRL_EASYSTOP, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 10, 0 );
if (WConfiguration::ShowToolTips())
m_spinEasyStop->SetToolTip(_("Minimum displacement (in pixels)\nto start moving pointer."));
itemFlexGridSizer8->Add(m_spinEasyStop, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer8->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer8->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer8->AddGrowableCol(0);
itemFlexGridSizer8->AddGrowableCol(1);
itemFlexGridSizer8->AddGrowableCol(2);
itemFlexGridSizer8->AddGrowableCol(3);
m_buttonCalibrateMotion = new wxButton( itemStaticBoxSizer7->GetStaticBox(), ID_BUTTON, _("Assisted calibration"), wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer7->Add(m_buttonCalibrateMotion, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
itemNotebook4->AddPage(itemPanel5, _("Motion"));
wxPanel* itemPanel22 = new wxPanel( itemNotebook4, ID_PANEL_WORKSPACE, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer23 = new wxBoxSizer(wxVERTICAL);
itemPanel22->SetSizer(itemBoxSizer23);
wxStaticBox* itemStaticBoxSizer24Static = new wxStaticBox(itemPanel22, wxID_ANY, _("Workspace limit"));
wxStaticBoxSizer* itemStaticBoxSizer24 = new wxStaticBoxSizer(itemStaticBoxSizer24Static, wxVERTICAL);
itemBoxSizer23->Add(itemStaticBoxSizer24, 0, wxGROW|wxALL, 5);
m_chkEnabledWorkspace = new wxCheckBox( itemStaticBoxSizer24->GetStaticBox(), ID_CHECKBOX_WORKSPACE_LIMIT, _("Enable workspace limit"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkEnabledWorkspace->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkEnabledWorkspace->SetToolTip(_("Confines the mouse pointer\nto the selected area."));
itemStaticBoxSizer24->Add(m_chkEnabledWorkspace, 0, wxALIGN_LEFT|wxALL, 5);
wxBoxSizer* itemBoxSizer26 = new wxBoxSizer(wxHORIZONTAL);
itemStaticBoxSizer24->Add(itemBoxSizer26, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT, 5);
wxBoxSizer* itemBoxSizer27 = new wxBoxSizer(wxVERTICAL);
itemBoxSizer26->Add(itemBoxSizer27, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
wxGridSizer* itemGridSizer28 = new wxGridSizer(0, 3, 0, 0);
itemBoxSizer27->Add(itemGridSizer28, 0, wxALIGN_CENTER_HORIZONTAL, 5);
wxStaticText* itemStaticText29 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("Top"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer28->Add(itemStaticText29, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spin_top_workspace = new wxSpinCtrl( itemStaticBoxSizer24->GetStaticBox(), ID_SPINCTRL_TOP_WORKSPACE, wxT("1"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 50, 1 );
if (WConfiguration::ShowToolTips())
m_spin_top_workspace->SetToolTip(_("Top limit workspace."));
m_spin_top_workspace->Enable(false);
itemGridSizer28->Add(m_spin_top_workspace, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
wxStaticText* itemStaticText31 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer28->Add(itemStaticText31, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP|wxBOTTOM, 5);
wxGridSizer* itemGridSizer32 = new wxGridSizer(0, 6, 0, 0);
itemBoxSizer27->Add(itemGridSizer32, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticText* itemStaticText33 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("Left"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer32->Add(itemStaticText33, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spin_left_workspace = new wxSpinCtrl( itemStaticBoxSizer24->GetStaticBox(), ID_SPINCTRL_LEFT_WORKSPACE, wxT("1"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 50, 1 );
if (WConfiguration::ShowToolTips())
m_spin_left_workspace->SetToolTip(_("Left limit workspace."));
m_spin_left_workspace->Enable(false);
itemGridSizer32->Add(m_spin_left_workspace, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
wxStaticText* itemStaticText35 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer32->Add(itemStaticText35, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP|wxBOTTOM, 5);
wxStaticText* itemStaticText36 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("Right"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer32->Add(itemStaticText36, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spin_right_workspace = new wxSpinCtrl( itemStaticBoxSizer24->GetStaticBox(), ID_SPINCTRL_RIGHT_WORKSPACE, wxT("1"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 50, 1 );
if (WConfiguration::ShowToolTips())
m_spin_right_workspace->SetToolTip(_("Right limit workspace."));
m_spin_right_workspace->Enable(false);
itemGridSizer32->Add(m_spin_right_workspace, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
wxStaticText* itemStaticText38 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer32->Add(itemStaticText38, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxGridSizer* itemGridSizer39 = new wxGridSizer(0, 3, 0, 0);
itemBoxSizer27->Add(itemGridSizer39, 0, wxALIGN_CENTER_HORIZONTAL, 5);
wxStaticText* itemStaticText40 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("Bottom"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer39->Add(itemStaticText40, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM, 5);
m_spin_bottom_workspace = new wxSpinCtrl( itemStaticBoxSizer24->GetStaticBox(), ID_SPINCTRL_BOTTOM_WORKSPACE, wxT("1"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 50, 1 );
if (WConfiguration::ShowToolTips())
m_spin_bottom_workspace->SetToolTip(_("Bottom limit workspace."));
m_spin_bottom_workspace->Enable(false);
itemGridSizer39->Add(m_spin_bottom_workspace, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
wxStaticText* itemStaticText42 = new wxStaticText( itemStaticBoxSizer24->GetStaticBox(), wxID_STATIC, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
itemGridSizer39->Add(itemStaticText42, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
wxStaticBox* itemStaticBoxSizer43Static = new wxStaticBox(itemPanel22, wxID_ANY, _("Pointer wrapping"));
wxStaticBoxSizer* itemStaticBoxSizer43 = new wxStaticBoxSizer(itemStaticBoxSizer43Static, wxVERTICAL);
itemBoxSizer23->Add(itemStaticBoxSizer43, 0, wxGROW|wxALL, 5);
m_chkWrapPointer = new wxCheckBox( itemStaticBoxSizer43->GetStaticBox(), ID_CHECKBOX2, _("Allow wrapping the pointer around the working area"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkWrapPointer->SetValue(false);
itemStaticBoxSizer43->Add(m_chkWrapPointer, 0, wxALIGN_LEFT|wxALL, 5);
itemNotebook4->AddPage(itemPanel22, _("Workspace"));
m_panelClick = new wxPanel( itemNotebook4, ID_PANEL_CLICK, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer46 = new wxBoxSizer(wxVERTICAL);
m_panelClick->SetSizer(itemBoxSizer46);
wxStaticBox* itemStaticBoxSizer47Static = new wxStaticBox(m_panelClick, wxID_ANY, _("Dwell click"));
wxStaticBoxSizer* itemStaticBoxSizer47 = new wxStaticBoxSizer(itemStaticBoxSizer47Static, wxVERTICAL);
itemBoxSizer46->Add(itemStaticBoxSizer47, 0, wxGROW|wxALL, 5);
m_chkDwellClickEnabled = new wxCheckBox( itemStaticBoxSizer47->GetStaticBox(), ID_CHECKBOX_ENABLE_DWELL, _("Enable dwell click"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkDwellClickEnabled->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkDwellClickEnabled->SetToolTip(_("Enable/Disable automatic (dwell)\nclick generation mechanism."));
itemStaticBoxSizer47->Add(m_chkDwellClickEnabled, 0, wxALIGN_LEFT|wxALL, 5);
wxGridSizer* itemGridSizer49 = new wxGridSizer(0, 2, 0, 0);
itemStaticBoxSizer47->Add(itemGridSizer49, 0, wxGROW, 5);
wxFlexGridSizer* itemFlexGridSizer50 = new wxFlexGridSizer(0, 2, 0, 0);
itemGridSizer49->Add(itemFlexGridSizer50, 0, wxGROW|wxALIGN_TOP|wxALL, 0);
m_stDwellTime = new wxStaticText( itemStaticBoxSizer47->GetStaticBox(), ID_STATIC_DWELL_TIME, _("Dwell time (ds)"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer50->Add(m_stDwellTime, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinDwellTime = new wxSpinCtrl( itemStaticBoxSizer47->GetStaticBox(), ID_SPINCTRL_DWELL_TIME, wxT("2"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 2, 50, 2 );
if (WConfiguration::ShowToolTips())
m_spinDwellTime->SetToolTip(_("Time to wait (deciseconds) \nbefore sending a click."));
itemFlexGridSizer50->Add(m_spinDwellTime, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
m_stDwellArea = new wxStaticText( itemStaticBoxSizer47->GetStaticBox(), ID_STATIC_DWELL_AREA, _("Dwell area"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer50->Add(m_stDwellArea, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinDwellArea = new wxSpinCtrl( itemStaticBoxSizer47->GetStaticBox(), ID_SPINCTRL_DWELL_AREA, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 5, 0 );
if (WConfiguration::ShowToolTips())
m_spinDwellArea->SetToolTip(_("Maximum allowed displacement\nbefore restarting the dwell time\ncountdown."));
itemFlexGridSizer50->Add(m_spinDwellArea, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer55 = new wxBoxSizer(wxVERTICAL);
itemGridSizer49->Add(itemBoxSizer55, 0, wxGROW|wxALIGN_TOP|wxLEFT|wxRIGHT, 5);
m_chkAllowConsecutiveClick = new wxCheckBox( itemStaticBoxSizer47->GetStaticBox(), ID_CHECKBOX_ALLOW_CONSECUTIVE, _("Allow consecutive clicks"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkAllowConsecutiveClick->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkAllowConsecutiveClick->SetToolTip(_("Send multiple clicks\nwhen the pointer is stopped."));
itemBoxSizer55->Add(m_chkAllowConsecutiveClick, 0, wxALIGN_LEFT|wxALL, 5);
m_chkBeepOnClick = new wxCheckBox( itemStaticBoxSizer47->GetStaticBox(), ID_CHECKBOX_BEEP_ON_CLICK, _("Beep on click"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkBeepOnClick->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkBeepOnClick->SetToolTip(_("Play sound when click generated."));
itemBoxSizer55->Add(m_chkBeepOnClick, 0, wxALIGN_LEFT|wxALL, 5);
#if defined(__WXGTK__)
m_chkAllowVisualAlerts = new wxCheckBox( itemStaticBoxSizer47->GetStaticBox(), ID_CHECKBOX_ALLOW_VISUAL_ALERTS, _("Allow visual alerts"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkAllowVisualAlerts->SetValue(false);
itemBoxSizer55->Add(m_chkAllowVisualAlerts, 0, wxALIGN_LEFT|wxALL, 5);
#endif
m_sboxClickWin = new wxStaticBox(itemStaticBoxSizer47->GetStaticBox(), ID_STATICBOX_CLICK_WIN, _("Click window"));
wxStaticBoxSizer* itemStaticBoxSizer59 = new wxStaticBoxSizer(m_sboxClickWin, wxVERTICAL);
itemStaticBoxSizer47->Add(itemStaticBoxSizer59, 0, wxGROW|wxALL, 5);
m_chkShowClickWin = new wxCheckBox( itemStaticBoxSizer59->GetStaticBox(), ID_CHECKBOX_SHOW_CLICKWIN, _("Show Click Window"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkShowClickWin->SetValue(false);
itemStaticBoxSizer59->Add(m_chkShowClickWin, 0, wxALIGN_LEFT|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer61 = new wxFlexGridSizer(0, 4, 0, 0);
itemStaticBoxSizer59->Add(itemFlexGridSizer61, 0, wxGROW, 5);
m_stDesign = new wxStaticText( itemStaticBoxSizer59->GetStaticBox(), ID_STATIC_DESIGN, _("Design:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer61->Add(m_stDesign, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
wxArrayString m_choClickWindowDesignStrings;
m_choClickWindowDesignStrings.Add(_("Normal"));
m_choClickWindowDesignStrings.Add(_("Thin"));
m_choClickWindowDesign = new wxChoice( itemStaticBoxSizer59->GetStaticBox(), ID_CHOICE_DESIGN, wxDefaultPosition, wxDefaultSize, m_choClickWindowDesignStrings, 0 );
itemFlexGridSizer61->Add(m_choClickWindowDesign, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_stBehaviour = new wxStaticText( itemStaticBoxSizer59->GetStaticBox(), ID_STATIC_BEHAVIOUR, _("Behaviour:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer61->Add(m_stBehaviour, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
wxArrayString m_choClickWindowBehaviourStrings;
m_choClickWindowBehaviourStrings.Add(_("Normal mode"));
m_choClickWindowBehaviourStrings.Add(_("Fast mode"));
m_choClickWindowBehaviour = new wxChoice( itemStaticBoxSizer59->GetStaticBox(), ID_CHOICE_BEHAVIOUR, wxDefaultPosition, wxDefaultSize, m_choClickWindowBehaviourStrings, 0 );
if (WConfiguration::ShowToolTips())
m_choClickWindowBehaviour->SetToolTip(_("Fast mode enables click type\nselection by hovering the mouse\npointer over the click window\nbuttons."));
itemFlexGridSizer61->Add(m_choClickWindowBehaviour, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
#if defined(__WXGTK__)
m_stDocking = new wxStaticText( itemStaticBoxSizer59->GetStaticBox(), wxID_STATIC, _("Location:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer61->Add(m_stDocking, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
#if defined(__WXGTK__)
wxArrayString m_choDockingModeStrings;
m_choDockingModeStrings.Add(_("Floating horizontal"));
m_choDockingModeStrings.Add(_("Floating vertical"));
m_choDockingModeStrings.Add(_("Top docked"));
m_choDockingModeStrings.Add(_("Bottom docked"));
m_choDockingModeStrings.Add(_("Left docked"));
m_choDockingModeStrings.Add(_("Right docked"));
m_choDockingMode = new wxChoice( itemStaticBoxSizer59->GetStaticBox(), ID_CHOICE5, wxDefaultPosition, wxDefaultSize, m_choDockingModeStrings, 0 );
itemFlexGridSizer61->Add(m_choDockingMode, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
#if defined(__WXGTK__)
m_chkAutohide = new wxCheckBox( itemStaticBoxSizer59->GetStaticBox(), ID_CHECKBOX_AUTOHIDE, _("Auto-hide"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkAutohide->SetValue(false);
itemFlexGridSizer61->Add(m_chkAutohide, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
itemFlexGridSizer61->AddGrowableCol(1);
itemFlexGridSizer61->AddGrowableCol(3);
#if defined(__WXGTK__)
m_sboxGestureClick = new wxStaticBox(itemStaticBoxSizer47->GetStaticBox(), ID_STATICBOX_GESTURE_CLICK, _("Gesture click"));
wxStaticBoxSizer* itemStaticBoxSizer69 = new wxStaticBoxSizer(m_sboxGestureClick, wxVERTICAL);
itemStaticBoxSizer47->Add(itemStaticBoxSizer69, 0, wxGROW|wxALL, 5);
m_chkEnableGestureClick = new wxCheckBox( itemStaticBoxSizer69->GetStaticBox(), ID_CHECKBOX, _("Enable gesture click"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkEnableGestureClick->SetValue(false);
itemStaticBoxSizer69->Add(m_chkEnableGestureClick, 0, wxALIGN_LEFT|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer71 = new wxFlexGridSizer(0, 4, 0, 0);
itemStaticBoxSizer69->Add(itemFlexGridSizer71, 0, wxGROW, 5);
m_stMoveLeft = new wxStaticText( itemStaticBoxSizer69->GetStaticBox(), ID_STATIC_MOVE_LEFT, _("Move left:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer71->Add(m_stMoveLeft, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choLeftStrings;
m_choLeftStrings.Add(_("Disable"));
m_choLeftStrings.Add(_("Left click"));
m_choLeftStrings.Add(_("Middle click"));
m_choLeftStrings.Add(_("Right click"));
m_choLeftStrings.Add(_("Double click"));
m_choLeftStrings.Add(_("Drag click"));
m_choLeft = new wxChoice( itemStaticBoxSizer69->GetStaticBox(), ID_CHOICE, wxDefaultPosition, wxDefaultSize, m_choLeftStrings, 0 );
itemFlexGridSizer71->Add(m_choLeft, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_stMoveRight = new wxStaticText( itemStaticBoxSizer69->GetStaticBox(), ID_STATIC_MOVE_RIGHT, _("Move right:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer71->Add(m_stMoveRight, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choRightStrings;
m_choRightStrings.Add(_("Disable"));
m_choRightStrings.Add(_("Left click"));
m_choRightStrings.Add(_("Middle click"));
m_choRightStrings.Add(_("Right click"));
m_choRightStrings.Add(_("Double click"));
m_choRightStrings.Add(_("Drag click"));
m_choRight = new wxChoice( itemStaticBoxSizer69->GetStaticBox(), ID_CHOICE1, wxDefaultPosition, wxDefaultSize, m_choRightStrings, 0 );
itemFlexGridSizer71->Add(m_choRight, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_stMoveUp = new wxStaticText( itemStaticBoxSizer69->GetStaticBox(), ID_STATIC_MOVE_UP, _("Move up:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer71->Add(m_stMoveUp, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choUpStrings;
m_choUpStrings.Add(_("Disable"));
m_choUpStrings.Add(_("Left click"));
m_choUpStrings.Add(_("Middle click"));
m_choUpStrings.Add(_("Right click"));
m_choUpStrings.Add(_("Double click"));
m_choUpStrings.Add(_("Drag click"));
m_choUp = new wxChoice( itemStaticBoxSizer69->GetStaticBox(), ID_CHOICE2, wxDefaultPosition, wxDefaultSize, m_choUpStrings, 0 );
itemFlexGridSizer71->Add(m_choUp, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_stMoveDown = new wxStaticText( itemStaticBoxSizer69->GetStaticBox(), ID_STATIC_MOVE_DOWN, _("Move down:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer71->Add(m_stMoveDown, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choDownStrings;
m_choDownStrings.Add(_("Disable"));
m_choDownStrings.Add(_("Left click"));
m_choDownStrings.Add(_("Middle click"));
m_choDownStrings.Add(_("Right click"));
m_choDownStrings.Add(_("Double click"));
m_choDownStrings.Add(_("Drag click"));
m_choDown = new wxChoice( itemStaticBoxSizer69->GetStaticBox(), ID_CHOICE3, wxDefaultPosition, wxDefaultSize, m_choDownStrings, 0 );
itemFlexGridSizer71->Add(m_choDown, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer71->AddGrowableCol(1);
itemFlexGridSizer71->AddGrowableCol(3);
#endif
itemNotebook4->AddPage(m_panelClick, _("Click"));
wxPanel* itemPanel80 = new wxPanel( itemNotebook4, ID_PANEL_KEYS, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer81 = new wxBoxSizer(wxVERTICAL);
itemPanel80->SetSizer(itemBoxSizer81);
m_panelKeys = new wxStaticBox(itemPanel80, wxID_ANY, _("Hotkeys"));
wxStaticBoxSizer* itemStaticBoxSizer82 = new wxStaticBoxSizer(m_panelKeys, wxVERTICAL);
itemBoxSizer81->Add(itemStaticBoxSizer82, 0, wxGROW|wxALL, 5);
wxStaticText* itemStaticText83 = new wxStaticText( itemStaticBoxSizer82->GetStaticBox(), wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
itemStaticBoxSizer82->Add(itemStaticText83, 0, wxALIGN_LEFT|wxALL, 5);
m_hotkeysSizer = new wxFlexGridSizer(0, 4, 0, 0);
itemStaticBoxSizer82->Add(m_hotkeysSizer, 0, wxGROW|wxALL, 5);
m_hotkeysSizer->AddGrowableCol(0);
m_hotkeysSizer->AddGrowableCol(1);
m_hotkeysSizer->AddGrowableCol(2);
m_hotkeysSizer->AddGrowableCol(3);
itemNotebook4->AddPage(itemPanel80, _("Hotkeys"));
wxPanel* itemPanel85 = new wxPanel( itemNotebook4, ID_PANEL_ADVANCED, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer86 = new wxBoxSizer(wxVERTICAL);
itemPanel85->SetSizer(itemBoxSizer86);
wxStaticBox* itemStaticBoxSizer87Static = new wxStaticBox(itemPanel85, wxID_ANY, _("Startup"));
wxStaticBoxSizer* itemStaticBoxSizer87 = new wxStaticBoxSizer(itemStaticBoxSizer87Static, wxVERTICAL);
itemBoxSizer86->Add(itemStaticBoxSizer87, 0, wxGROW|wxALL, 5);
#if defined(__WXGTK__)
m_chkStartup = new wxCheckBox( itemStaticBoxSizer87->GetStaticBox(), ID_CHECKBOX_STARTUP, _("Start eViacam at user logon"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkStartup->SetValue(false);
itemStaticBoxSizer87->Add(m_chkStartup, 0, wxALIGN_LEFT|wxALL, 5);
#endif
m_chkEnabledAtStartup = new wxCheckBox( itemStaticBoxSizer87->GetStaticBox(), ID_CHECKBOX_ENABLE_AT_STARTUP, _("Enable eViacam at startup"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkEnabledAtStartup->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkEnabledAtStartup->SetToolTip(_("If checked the program automatically \nenables cursor control at startup."));
itemStaticBoxSizer87->Add(m_chkEnabledAtStartup, 0, wxALIGN_LEFT|wxALL, 5);
wxStaticBox* itemStaticBoxSizer90Static = new wxStaticBox(itemPanel85, wxID_ANY, _("On-screen keyboard command"));
wxStaticBoxSizer* itemStaticBoxSizer90 = new wxStaticBoxSizer(itemStaticBoxSizer90Static, wxVERTICAL);
itemBoxSizer86->Add(itemStaticBoxSizer90, 0, wxGROW|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer91 = new wxFlexGridSizer(0, 2, 0, 0);
itemStaticBoxSizer90->Add(itemFlexGridSizer91, 0, wxGROW, 5);
m_txtOnScreenKeyboardCommand = new wxTextCtrl( itemStaticBoxSizer90->GetStaticBox(), ID_TEXTCTRL_ONSCREENKEYBOARDCOMMAND, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
if (WConfiguration::ShowToolTips())
m_txtOnScreenKeyboardCommand->SetToolTip(_("Command to run an external on-screen keyboard application."));
itemFlexGridSizer91->Add(m_txtOnScreenKeyboardCommand, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_btntOnScreenKeyboardCommand = new wxButton( itemStaticBoxSizer90->GetStaticBox(), ID_BUTTON_ONSCREENKEYBOARDCOMMAND, _("Browse..."), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer91->Add(m_btntOnScreenKeyboardCommand, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer91->AddGrowableCol(0);
m_sizerFaceLocalization = new wxStaticBox(itemPanel85, wxID_ANY, _("Face localization and tracking"));
wxStaticBoxSizer* itemStaticBoxSizer94 = new wxStaticBoxSizer(m_sizerFaceLocalization, wxVERTICAL);
itemBoxSizer86->Add(itemStaticBoxSizer94, 0, wxGROW|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer95 = new wxFlexGridSizer(0, 2, 0, 0);
itemStaticBoxSizer94->Add(itemFlexGridSizer95, 0, wxGROW|wxALL, 0);
m_chkAutoLocateFace = new wxCheckBox( itemStaticBoxSizer94->GetStaticBox(), ID_CHECKBOX_AUTO_LOCATE_FACE, _("Locate face automatically"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkAutoLocateFace->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkAutoLocateFace->SetToolTip(_("When enabled tries to automatically\ndetect your face and center the\ntracking area."));
itemFlexGridSizer95->Add(m_chkAutoLocateFace, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer97 = new wxFlexGridSizer(0, 2, 0, 0);
itemFlexGridSizer95->Add(itemFlexGridSizer97, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP|wxBOTTOM, 0);
m_staticCpuUsage = new wxStaticText( itemStaticBoxSizer94->GetStaticBox(), wxID_STATIC, _("CPU usage"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer97->Add(m_staticCpuUsage, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choCpuUsageStrings;
m_choCpuUsageStrings.Add(_("Lowest"));
m_choCpuUsageStrings.Add(_("Low"));
m_choCpuUsageStrings.Add(_("Normal"));
m_choCpuUsageStrings.Add(_("High"));
m_choCpuUsageStrings.Add(_("Highest"));
m_choCpuUsage = new wxChoice( itemStaticBoxSizer94->GetStaticBox(), ID_CHOICE4, wxDefaultPosition, wxDefaultSize, m_choCpuUsageStrings, 0 );
itemFlexGridSizer97->Add(m_choCpuUsage, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_chkEnableWhenFaceDetected = new wxCheckBox( itemStaticBoxSizer94->GetStaticBox(), ID_CHECKBOX_ENABLE_WHEN_FACE_DETECTED, _("Stop pointer when face not detected"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkEnableWhenFaceDetected->SetValue(false);
if (WConfiguration::ShowToolTips())
m_chkEnableWhenFaceDetected->SetToolTip(_("eViacam is only enabled when face is detected."));
m_chkEnableWhenFaceDetected->Enable(false);
itemFlexGridSizer95->Add(m_chkEnableWhenFaceDetected, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer101 = new wxBoxSizer(wxHORIZONTAL);
itemFlexGridSizer95->Add(itemBoxSizer101, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 0);
m_staticLocateFaceTimeout2 = new wxStaticText( itemStaticBoxSizer94->GetStaticBox(), wxID_STATIC, _("After"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer101->Add(m_staticLocateFaceTimeout2, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_spinLocateFaceTimeout = new wxSpinCtrl( itemStaticBoxSizer94->GetStaticBox(), ID_SPINCTRL2, wxT("1"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 1, 59, 1 );
itemBoxSizer101->Add(m_spinLocateFaceTimeout, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_staticLocateFaceTimeout = new wxStaticText( itemStaticBoxSizer94->GetStaticBox(), wxID_STATIC, _("seconds"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer101->Add(m_staticLocateFaceTimeout, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer95->AddGrowableRow(0);
itemFlexGridSizer95->AddGrowableCol(0);
itemFlexGridSizer95->AddGrowableCol(1);
wxStaticBox* itemStaticBoxSizer105Static = new wxStaticBox(itemPanel85, wxID_ANY, _("Mouse actions"));
wxStaticBoxSizer* itemStaticBoxSizer105 = new wxStaticBoxSizer(itemStaticBoxSizer105Static, wxVERTICAL);
itemBoxSizer86->Add(itemStaticBoxSizer105, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer106 = new wxBoxSizer(wxHORIZONTAL);
itemStaticBoxSizer105->Add(itemBoxSizer106, 0, wxALIGN_LEFT|wxALL, 0);
m_spinSendActionWait = new wxSpinCtrl( itemStaticBoxSizer105->GetStaticBox(), ID_SPIN_SEND_ACTION_WAIT, wxT("0"), wxDefaultPosition, wxSize(75, -1), wxSP_ARROW_KEYS, 0, 50, 0 );
if (WConfiguration::ShowToolTips())
m_spinSendActionWait->SetToolTip(_("Increase this value if some application ignores click events."));
itemBoxSizer106->Add(m_spinSendActionWait, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText108 = new wxStaticText( itemStaticBoxSizer105->GetStaticBox(), wxID_STATIC, _("ms delay between up and down events"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer106->Add(itemStaticText108, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemNotebook4->AddPage(itemPanel85, _("Advanced"));
itemListbook3->AddPage(itemNotebook4, _("Profile options"), false, 0);
wxPanel* itemPanel109 = new wxPanel( itemListbook3, ID_PANEL, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* itemBoxSizer110 = new wxBoxSizer(wxVERTICAL);
itemPanel109->SetSizer(itemBoxSizer110);
wxStaticBox* itemStaticBoxSizer111Static = new wxStaticBox(itemPanel109, wxID_ANY, _("Profile management"));
wxStaticBoxSizer* itemStaticBoxSizer111 = new wxStaticBoxSizer(itemStaticBoxSizer111Static, wxVERTICAL);
itemBoxSizer110->Add(itemStaticBoxSizer111, 0, wxGROW|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer112 = new wxFlexGridSizer(0, 4, 0, 0);
itemStaticBoxSizer111->Add(itemFlexGridSizer112, 0, wxGROW, 5);
wxStaticText* itemStaticText113 = new wxStaticText( itemStaticBoxSizer111->GetStaticBox(), wxID_STATIC, _("Select profile:"), wxDefaultPosition, wxDefaultSize, 0 );
if (WConfiguration::ShowToolTips())
itemStaticText113->SetToolTip(_("Chooses desired active profile"));
itemFlexGridSizer112->Add(itemStaticText113, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choProfileStrings;
m_choProfile = new wxChoice( itemStaticBoxSizer111->GetStaticBox(), ID_CHOICE_PROFILE, wxDefaultPosition, wxDefaultSize, m_choProfileStrings, 0 );
if (WConfiguration::ShowToolTips())
m_choProfile->SetToolTip(_("Chooses desired active profile"));
itemFlexGridSizer112->Add(m_choProfile, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_btnAddProfile = new wxButton( itemStaticBoxSizer111->GetStaticBox(), ID_BUTTON_ADD_PROFILE, _("Add profile"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer112->Add(m_btnAddProfile, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_btnDeleteProfile = new wxButton( itemStaticBoxSizer111->GetStaticBox(), ID_BUTTON_DEL_PROFILE, _("Delete profile"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer112->Add(m_btnDeleteProfile, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer112->AddGrowableCol(1);
wxStaticBox* itemStaticBoxSizer117Static = new wxStaticBox(itemPanel109, wxID_ANY, _("Camera"));
wxStaticBoxSizer* itemStaticBoxSizer117 = new wxStaticBoxSizer(itemStaticBoxSizer117Static, wxVERTICAL);
itemBoxSizer110->Add(itemStaticBoxSizer117, 0, wxGROW|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer118 = new wxFlexGridSizer(0, 3, 0, 0);
itemStaticBoxSizer117->Add(itemFlexGridSizer118, 0, wxGROW, 5);
m_txtSelectedCamera = new wxTextCtrl( itemStaticBoxSizer117->GetStaticBox(), ID_TEXTCTRL_SELECTED_CAMERA, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
m_txtSelectedCamera->Enable(false);
itemFlexGridSizer118->Add(m_txtSelectedCamera, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_btnCameraSettings = new wxButton( itemStaticBoxSizer117->GetStaticBox(), ID_BUTTON_CAMERA_SETTINGS, _("Settings..."), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer118->Add(m_btnCameraSettings, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton* itemButton121 = new wxButton( itemStaticBoxSizer117->GetStaticBox(), ID_BUTTON_CHANGE_CAMERA, _("Change"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer118->Add(itemButton121, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemFlexGridSizer118->AddGrowableCol(0);
wxStaticBox* itemStaticBoxSizer122Static = new wxStaticBox(itemPanel109, wxID_ANY, _("Language"));
wxStaticBoxSizer* itemStaticBoxSizer122 = new wxStaticBoxSizer(itemStaticBoxSizer122Static, wxVERTICAL);
itemBoxSizer110->Add(itemStaticBoxSizer122, 0, wxGROW|wxALL, 5);
wxFlexGridSizer* itemFlexGridSizer123 = new wxFlexGridSizer(0, 2, 0, 0);
itemStaticBoxSizer122->Add(itemFlexGridSizer123, 0, wxALIGN_LEFT, 5);
wxStaticText* itemStaticText124 = new wxStaticText( itemStaticBoxSizer122->GetStaticBox(), wxID_STATIC, _("Language:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer123->Add(itemStaticText124, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxArrayString m_choLanguageStrings;
m_choLanguage = new wxChoice( itemStaticBoxSizer122->GetStaticBox(), ID_CHOICE_LANGUAGE, wxDefaultPosition, wxDefaultSize, m_choLanguageStrings, 0 );
itemFlexGridSizer123->Add(m_choLanguage, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer126Static = new wxStaticBox(itemPanel109, wxID_ANY, _("Check for updates"));
wxStaticBoxSizer* itemStaticBoxSizer126 = new wxStaticBoxSizer(itemStaticBoxSizer126Static, wxVERTICAL);
itemBoxSizer110->Add(itemStaticBoxSizer126, 0, wxGROW|wxALL, 5);
m_chkCheckUpdatesAtStartup = new wxCheckBox( itemStaticBoxSizer126->GetStaticBox(), ID_CHECKBOX_CHECK_UPDATES, _("Automatically check for updates at startup"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkCheckUpdatesAtStartup->SetValue(false);
itemStaticBoxSizer126->Add(m_chkCheckUpdatesAtStartup, 0, wxALIGN_LEFT|wxALL, 5);
itemListbook3->AddPage(itemPanel109, _("General options"), false, 1);
itemBoxSizer2->Add(itemListbook3, 0, wxALIGN_LEFT|wxALL, 5);
wxStdDialogButtonSizer* itemStdDialogButtonSizer128 = new wxStdDialogButtonSizer;
itemBoxSizer2->Add(itemStdDialogButtonSizer128, 0, wxALIGN_RIGHT|wxALL, 5);
wxButton* itemButton129 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
itemStdDialogButtonSizer128->AddButton(itemButton129);
m_btnCancel = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
m_btnCancel->Enable(false);
itemStdDialogButtonSizer128->AddButton(m_btnCancel);
itemStdDialogButtonSizer128->Realize();
////@end WConfiguration content construction
#if defined(__WXGTK__)
for (unsigned int i=0; iAppend(_("Key:") + wxGetApp().GetController().GetPointerAction().GetGestureClick().GetKeyboardCode(i).GetName());
m_choRight->Append(_("Key:") + wxGetApp().GetController().GetPointerAction().GetGestureClick().GetKeyboardCode(i).GetName());
m_choUp->Append(_("Key:") + wxGetApp().GetController().GetPointerAction().GetGestureClick().GetKeyboardCode(i).GetName());
m_choDown->Append(_("Key:") + wxGetApp().GetController().GetPointerAction().GetGestureClick().GetKeyboardCode(i).GetName());
}
#endif
//Add hotkeys
eviacam::HotkeyManager& hkManager= wxGetApp().GetController().getHotkeyManager();
for (unsigned int j=0; j< hkManager.get_num_hotkeys(); j++) {
CreateHotkey (hkManager.GetHotKey(j), m_panelKeys, m_hotkeysSizer);
}
}
void WConfiguration::CreateHotkey (const eviacam::HotKey& kc, wxWindow* parent, wxSizer* sizer)
{
wxStaticText* itemStaticText = new wxStaticText( parent, m_lastId, wxString((const wxChar*)kc.GetDescription(),wxConvUTF8), wxDefaultPosition, wxDefaultSize, 0 );
sizer->Add(itemStaticText, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_controlList.push_back((wxControl*) itemStaticText);
wxTextCtrl* itemTextCtrl = new wxTextCtrl( parent, m_lastId+1, kc.GetKey().GetName(), wxDefaultPosition, wxDefaultSize, 0 );
itemTextCtrl->SetEditable(false);
sizer->Add(itemTextCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_controlList.push_back((wxControl*) itemTextCtrl);
wxCheckBox* itemCheckBox = new wxCheckBox( parent, m_lastId+2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
itemCheckBox->SetValue(kc.IsEnabled());
sizer->Add(itemCheckBox, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_controlList.push_back((wxControl*) itemCheckBox);
wxButton* itemButton = new wxButton( parent, m_lastId+3, _("Set key"), wxDefaultPosition, wxDefaultSize, 0 );
sizer->Add(itemButton, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_controlList.push_back((wxControl*) itemButton);
itemCheckBox->Connect(m_lastId+2, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(WConfiguration::OnHotkeyCheckboxClick), NULL, this);
itemButton->Connect(m_lastId+3, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(WConfiguration::OnHotkeyButtonClick), NULL, this);
m_lastId += 4;
}
/*!
* Should we show tooltips?
*/
bool WConfiguration::ShowToolTips()
{
return true;
}
/*!
* Get bitmap resources
*/
wxBitmap WConfiguration::GetBitmapResource( const wxString& name )
{
// Bitmap retrieval
////@begin WConfiguration bitmap retrieval
wxUnusedVar(name);
return wxNullBitmap;
////@end WConfiguration bitmap retrieval
}
/*!
* Get icon resources
*/
wxIcon WConfiguration::GetIconResource( const wxString& name )
{
// Icon retrieval
////@begin WConfiguration icon retrieval
wxUnusedVar(name);
if (name == wxT("resources/eviacam_mini.xpm"))
{
wxIcon icon(eviacam_mini);
return icon;
}
else if (name == wxT("resources/user.xpm"))
{
wxIcon icon(user);
return icon;
}
else if (name == wxT("resources/eviacam_small.xpm"))
{
wxIcon icon(eviacam_small);
return icon;
}
return wxNullIcon;
////@end WConfiguration icon retrieval
}
void WConfiguration::InitializeData ()
{
//
// Profile data
//
// Motion options
m_spinXSpeed->SetValue (
wxGetApp().GetController().GetPointerAction().GetXSpeed());
m_spinYSpeed->SetValue (
wxGetApp().GetController().GetPointerAction().GetYSpeed());
m_spinAcceleration->SetValue (
wxGetApp().GetController().GetPointerAction().GetAcceleration());
m_spinSmoothness->SetValue (
wxGetApp().GetController().GetPointerAction().GetSmoothness());
m_spinEasyStop->SetValue (
wxGetApp().GetController().GetPointerAction().GetEasyStopValue());
// Workspace
m_chkEnabledWorkspace->SetValue (
wxGetApp().GetController().GetPointerAction().GetRestrictedWorkingArea());
if (wxGetApp().GetController().GetPointerAction().GetRestrictedWorkingArea()) {
m_spin_top_workspace->Enable(true);
m_spin_left_workspace->Enable(true);
m_spin_right_workspace->Enable(true);
m_spin_bottom_workspace->Enable(true);
}
m_spin_top_workspace->SetValue (
wxGetApp().GetController().GetPointerAction().GetTopWorkspace());
m_spin_left_workspace->SetValue (
wxGetApp().GetController().GetPointerAction().GetLeftWorkspace());
m_spin_right_workspace->SetValue (
wxGetApp().GetController().GetPointerAction().GetRightWorkspace());
m_spin_bottom_workspace->SetValue (
wxGetApp().GetController().GetPointerAction().GetBottomWorkspace());
m_chkWrapPointer->SetValue (
wxGetApp().GetController().GetPointerAction().GetWrapPointer());
// Clic
m_chkDwellClickEnabled->SetValue (
wxGetApp().GetController().GetPointerAction().GetClickMode()!= CPointerAction::NONE);
#if defined(__WXGTK__)
m_chkEnableGestureClick->SetValue (
wxGetApp().GetController().GetPointerAction().GetClickMode()== CPointerAction::GESTURE);
#endif
m_chkAllowConsecutiveClick->SetValue (
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetConsecutiveClicksAllowed());
m_chkBeepOnClick->SetValue (
wxGetApp().GetController().GetPointerAction().GetBeepOnClick());
m_spinDwellTime->SetValue (
wxGetApp().GetController().GetPointerAction().GetDwellTime());
m_spinDwellArea->SetValue (
wxGetApp().GetController().GetPointerAction().GetDwellToleranceArea () );
m_chkShowClickWin->SetValue (
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetUseClickWindow());
m_choClickWindowBehaviour->Select (
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetClickWindowController().GetFastMode() ? 1 : 0);
m_choClickWindowDesign->Select (
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetClickWindowController().GetDesign());
#if defined(__WXGTK__)
m_choDockingMode->Select (
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetClickWindowController().GetLocation());
m_chkAutohide->SetValue (
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetClickWindowController().GetAutohide() ? 1 : 0);
m_choLeft->Select (
wxGetApp().GetController().GetPointerAction().GetGestureClick().GetActionLeft());
m_choRight->Select (
wxGetApp().GetController().GetPointerAction().GetGestureClick().GetActionRight());
m_choUp->Select (
wxGetApp().GetController().GetPointerAction().GetGestureClick().GetActionTop());
m_choDown->Select (
wxGetApp().GetController().GetPointerAction().GetGestureClick().GetActionBottom());
m_chkAllowVisualAlerts->SetValue (
wxGetApp().GetController().GetPointerAction().GetVisualAlerts());
#endif
UpdateGUIClickOptions();
// Startup
m_chkEnabledAtStartup->SetValue (
wxGetApp().GetController().GetEnabledAtStartup());
// Advanced
m_chkAutoLocateFace->SetValue (
wxGetApp().GetController().GetVisionPipeline().GetTrackFace());
m_chkEnableWhenFaceDetected->Enable (m_chkAutoLocateFace->GetValue());
m_chkEnableWhenFaceDetected->SetValue (
wxGetApp().GetController().GetVisionPipeline().GetEnableWhenFaceDetected());
m_spinLocateFaceTimeout->SetValue(wxGetApp().GetController().GetVisionPipeline().GetTimeout());
m_spinLocateFaceTimeout->Enable(m_chkAutoLocateFace->GetValue() && m_chkEnableWhenFaceDetected->GetValue());
m_choCpuUsage->Select(wxGetApp().GetController().GetVisionPipeline().GetCpuUsage());
m_choCpuUsage->Enable(m_chkAutoLocateFace->GetValue());
m_txtOnScreenKeyboardCommand->SetValue(
wxGetApp().GetController().GetOnScreenKeyboardCommand());
m_spinSendActionWait->SetValue(wxGetApp().GetController().GetPointerAction().GetSendActionWait());
#if defined(__WXGTK__)
//
// App data
//
m_chkStartup->SetValue(wxGetApp().GetController().GetAutostart().IsEnabled());
#endif
// Profile combo
m_choProfile->Clear();
m_choProfile->Append (
wxGetApp().GetController().GetConfigManager().GetProfileList());
m_choProfile->Select (
wxGetApp().GetController().GetConfigManager().GetCurrentProfile());
// Profile buttons
if (wxGetApp().GetController().GetConfigManager().GetCurrentProfile()== 0)
m_btnDeleteProfile->Enable (false);
else
m_btnDeleteProfile->Enable (true);
// Fill and set language combo
m_choLanguage->Clear();
m_choLanguage->Append (wxGetTranslation(g_languages[0].name));
for (unsigned int i= 1; i< WXSIZEOF(g_languages); i++) {
m_choLanguage->Append (g_languages[i].name);
}
// Select current language
for (unsigned int i= 0; i< WXSIZEOF(g_languages); i++)
if (g_languages[i].lang== wxGetApp().GetController().GetLanguage())
m_choLanguage->SetSelection(i);
// Camera
m_txtSelectedCamera->SetValue (wxGetApp().GetController().GetCameraName());
if (wxGetApp().GetController().CameraHasSettingsDialog ())
m_btnCameraSettings->Enable (true);
else
m_btnCameraSettings->Enable (false);
// Check updates at startup
m_chkCheckUpdatesAtStartup->SetValue(wxGetApp().GetController().GetCheckUpdatesAtStartup());
}
void WConfiguration::UpdateGUIClickOptions()
{
if (m_chkDwellClickEnabled->IsChecked()) {
EnableGUIGeneralClickOptions(true);
#if defined(__WXGTK__)
if (m_chkEnableGestureClick->IsChecked()) {
EnableGUIGestureOptions (true);
EnableGUIClickWindowOptions(false);
}
else {
EnableGUIGestureOptions (false);
EnableGUIClickWindowOptions(true);
}
#else
EnableGUIClickWindowOptions(true);
#endif
}
else {
EnableGUIGeneralClickOptions(false);
EnableGUIGestureOptions (false);
EnableGUIClickWindowOptions(false);
}
}
void WConfiguration::EnableGUIGeneralClickOptions (bool enable)
{
m_spinDwellTime->Enable(enable);
m_spinDwellArea->Enable(enable);
m_chkAllowConsecutiveClick->Enable(enable);
m_chkBeepOnClick->Enable(enable);
m_chkShowClickWin->Enable(enable);
m_choClickWindowDesign->Enable(enable);
m_choClickWindowBehaviour->Enable(enable);
m_stDwellTime->Enable(enable);
m_stDwellArea->Enable(enable);
m_stDesign->Enable(enable);
m_stBehaviour->Enable(enable);
#if defined(__WXGTK__)
m_chkAllowVisualAlerts->Enable(enable);
m_chkEnableGestureClick->Enable(enable);
#endif
}
void WConfiguration::EnableGUIGestureOptions (bool enable)
{
#if defined(__WXGTK__)
m_choLeft->Enable(enable);
m_choRight->Enable(enable);
m_choUp->Enable(enable);
m_choDown->Enable(enable);
m_stMoveLeft->Enable(enable);
m_stMoveRight->Enable(enable);
m_stMoveUp->Enable(enable);
m_stMoveDown->Enable(enable);
#else
wxUnusedVar(enable);
#endif
}
void WConfiguration::EnableGUIClickWindowOptions(bool enable)
{
m_chkShowClickWin->Enable(enable);
m_choClickWindowDesign->Enable(enable);
m_choClickWindowBehaviour->Enable(enable);
m_stDesign->Enable(enable);
m_stBehaviour->Enable(enable);
#if defined(__WXGTK__)
m_stDocking->Enable(enable);
m_choDockingMode->Enable(enable);
m_chkAutohide->Enable(enable);
#endif
if (enable) {
m_stDesign->Enable(m_chkShowClickWin->IsChecked());
m_choClickWindowDesign->Enable(m_chkShowClickWin->IsChecked());
m_stBehaviour->Enable(m_chkShowClickWin->IsChecked());
m_choClickWindowBehaviour->Enable(m_chkShowClickWin->IsChecked());
#if defined(__WXGTK__)
m_stDocking->Enable(m_chkShowClickWin->IsChecked());
m_choDockingMode->Enable(m_chkShowClickWin->IsChecked());
m_chkAutohide->Enable(m_chkShowClickWin->IsChecked());
#endif
}
#if defined(__WXGTK__)
if ( m_choDockingMode->GetCurrentSelection()== CClickWindowController::FLOATING_VERTICAL ||
m_choDockingMode->GetCurrentSelection()== CClickWindowController::FLOATING_HORIZONTAL) {
m_chkAutohide->Enable(false);
}
#endif
}
void WConfiguration::Changed ()
{
if (!m_dirty)
{
m_dirty= true;
m_btnCancel->Enable (true);
}
}
void WConfiguration::UnChanged ()
{
if (m_dirty)
{
m_dirty= false;
m_btnCancel->Enable (false);
}
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ENABLE_AT_STARTUP
*/
void WConfiguration::OnCheckboxEnableAtStartupClick( wxCommandEvent& event )
{
wxGetApp().GetController().SetEnabledAtStartup (m_chkEnabledAtStartup->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_XSPEED
*/
void WConfiguration::OnSpinctrlXspeedUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetXSpeed(m_spinXSpeed->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_YSPEED
*/
void WConfiguration::OnSpinctrlYspeedUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetYSpeed(m_spinYSpeed->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_ACCELERATION
*/
void WConfiguration::OnSpinctrlAccelerationUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetAcceleration(m_spinAcceleration->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_SMOOTHNESS
*/
void WConfiguration::OnSpinctrlSmoothnessUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetSmoothness(m_spinSmoothness->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_EASYSTOP
*/
void WConfiguration::OnSpinctrlEasystopUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetEasyStopValue(m_spinEasyStop->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ENABLE_DWELL
*/
void WConfiguration::OnCheckboxEnableDwellClick( wxCommandEvent& event )
{
if (!m_chkDwellClickEnabled->GetValue()) {
if (wxGetApp().GetController().GetPointerAction().SetClickMode(CPointerAction::NONE, false, this)) {
EnableGUIGeneralClickOptions(false);
EnableGUIGestureOptions(false);
EnableGUIClickWindowOptions(false);
Changed();
}
}
else {
// Enabling click generation, which modality?
#if defined(__WXGTK__)
if (m_chkEnableGestureClick->IsChecked()) {
// Gesture click
if (wxGetApp().GetController().GetPointerAction().SetClickMode(CPointerAction::GESTURE, false, this)) {
EnableGUIGeneralClickOptions(true);
EnableGUIGestureOptions(true);
EnableGUIClickWindowOptions(false);
Changed ();
}
}
else
#endif
if (wxGetApp().GetController().GetPointerAction().SetClickMode(CPointerAction::DWELL, false, this)) {
EnableGUIGeneralClickOptions(true);
EnableGUIGestureOptions(false);
EnableGUIClickWindowOptions(true);
Changed ();
}
}
m_chkDwellClickEnabled->SetValue (wxGetApp().GetController().GetPointerAction().GetClickMode()!= CPointerAction::NONE);
event.Skip(false);
}
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX
*/
void WConfiguration::OnCheckboxEnableGestureClick( wxCommandEvent& event )
{
if (m_chkEnableGestureClick->IsChecked())
{
if (wxGetApp().GetController().GetPointerAction().SetClickMode(CPointerAction::GESTURE, false, this)) {
EnableGUIGestureOptions(true);
EnableGUIClickWindowOptions(false);
}
else {
m_chkEnableGestureClick->SetValue(false);
}
}
else {
if (wxGetApp().GetController().GetPointerAction().SetClickMode(CPointerAction::DWELL, false, this)) {
EnableGUIGestureOptions(false);
EnableGUIClickWindowOptions(true);
}
else
m_chkEnableGestureClick->SetValue(true);
}
}
#endif
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ALLOW_CONSECUTIVE
*/
void WConfiguration::OnCheckboxAllowConsecutiveClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetDwellClick().
SetConsecutiveClicksAllowed (m_chkAllowConsecutiveClick->GetValue());
Changed ();
event.Skip(false);
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_BEEP_ON_CLICK
*/
void WConfiguration::OnCheckboxBeepOnClickClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetBeepOnClick (m_chkBeepOnClick->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_DWELL_TIME
*/
void WConfiguration::OnSpinctrlDwellTimeUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetDwellTime (m_spinDwellTime->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_DWELL_AREA
*/
void WConfiguration::OnSpinctrlDwellAreaUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetDwellToleranceArea (m_spinDwellArea->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_SHOW_CLICKWIN
*/
void WConfiguration::OnCheckboxShowClickwinClick( wxCommandEvent& event )
{
m_stDesign->Enable(m_chkShowClickWin->IsChecked());
m_choClickWindowDesign->Enable(m_chkShowClickWin->IsChecked());
m_stBehaviour->Enable(m_chkShowClickWin->IsChecked());
m_choClickWindowBehaviour->Enable(m_chkShowClickWin->IsChecked());
#if defined(__WXGTK__)
m_stDocking->Enable(m_chkShowClickWin->IsChecked());
m_choDockingMode->Enable(m_chkShowClickWin->IsChecked());
m_chkAutohide->Enable(m_chkShowClickWin->IsChecked());
if ( m_choDockingMode->GetCurrentSelection()== CClickWindowController::FLOATING_VERTICAL ||
m_choDockingMode->GetCurrentSelection()== CClickWindowController::FLOATING_HORIZONTAL)
{
m_chkAutohide->Enable(false);
}
#endif
wxGetApp().GetController().GetPointerAction().GetDwellClick().SetUseClickWindow(
!wxGetApp().GetController().GetPointerAction().GetDwellClick().GetUseClickWindow()
);
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_AUTO_LOCATE_FACE
*/
void WConfiguration::OnCheckboxAutoLocateFaceClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetVisionPipeline().SetTrackFace (m_chkAutoLocateFace->GetValue());
wxGetApp().GetController().GetVisionPipeline().SetDegradation(0);
m_chkEnableWhenFaceDetected->Enable (m_chkAutoLocateFace->GetValue());
m_spinLocateFaceTimeout->Enable(m_chkAutoLocateFace->GetValue() && m_chkEnableWhenFaceDetected->GetValue());
m_staticLocateFaceTimeout->Enable(m_chkAutoLocateFace->GetValue());
m_staticLocateFaceTimeout2->Enable(m_chkAutoLocateFace->GetValue());
m_choCpuUsage->Enable(m_chkAutoLocateFace->GetValue());
m_staticCpuUsage->Enable(m_chkAutoLocateFace->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_SHOW_LOCATE_FACE_FILTER
*/
void WConfiguration::OnCheckboxEnableWhenFaceDetectedClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetVisionPipeline().SetEnableWhenFaceDetected(m_chkEnableWhenFaceDetected->GetValue());
m_spinLocateFaceTimeout->Enable (m_chkEnableWhenFaceDetected->GetValue());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE_LANGUAGE
*/
void WConfiguration::OnChoiceLanguageSelected( wxCommandEvent& event )
{
int index= m_choLanguage->GetCurrentSelection();
if (index!= wxNOT_FOUND)
{
wxGetApp().GetController().SetLanguage (g_languages[index].lang);
wxMessageDialog dlg (NULL, _("You should restart the application to apply this change"),
_T("Enable Viacam"), wxICON_INFORMATION );
dlg.ShowModal ();
}
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE_PROFILE
*/
void WConfiguration::OnChoiceProfileSelected( wxCommandEvent& event )
{
bool fail= false;
wxString msg;
if (m_dirty)
{
wxMessageDialog dlg (NULL, _("Current profile has unsaved changes.\nContinue anyway?"), _T("Enable Viacam"), wxICON_EXCLAMATION | wxYES_NO );
if (dlg.ShowModal()== wxID_NO) fail= true;
}
if (!fail)
{
msg.sprintf (_("This action will load %s profile settings.\nAre you sure you want to continue?"), event.GetString().c_str());
wxMessageDialog dlg (NULL, msg, _T("Enable Viacam"), wxICON_EXCLAMATION | wxYES_NO );
if (dlg.ShowModal()== wxID_NO) fail= true;
}
if (fail)
// Restore old selection
m_choProfile->Select (wxGetApp().GetController().GetConfigManager().GetCurrentProfile());
else
{
// Change profile
wxGetApp().GetController().GetConfigManager().ChangeCurrentProfile (event.GetSelection());
// Refresh dialog values
InitializeData ();
UnChanged ();
}
event.Skip(false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_DEL_PROFILE
*/
void WConfiguration::OnButtonDelProfileClick( wxCommandEvent& event )
{
wxString msg;
msg.sprintf (_("This action will delete %s profile.\nAre you sure you want to continue?"), m_choProfile->GetStringSelection().c_str());
wxMessageDialog dlg (NULL, msg, _T("Enable Viacam"), wxICON_EXCLAMATION | wxYES_NO );
if (dlg.ShowModal()== wxID_YES)
{
wxGetApp().GetController().GetConfigManager().DeleteCurrentProfile();
InitializeData ();
UnChanged ();
}
event.Skip(false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_ADD_PROFILE
*/
void WConfiguration::OnButtonAddProfileClick( wxCommandEvent& event )
{
wxTextEntryDialog dlg (this, _("Enter new profile name"), _("Add profile"));
if (dlg.ShowModal()== wxID_OK)
{
switch (wxGetApp().GetController().GetConfigManager().AddNewProfile (dlg.GetValue()))
{
case 0:
InitializeData ();
UnChanged ();
break;
case 1:
{
wxMessageDialog errDlg (NULL, _("Profile already exists."), _T("Enable Viacam"), wxICON_ERROR );
errDlg.ShowModal ();
}
break;
case 2:
{
wxMessageDialog errDlg (NULL, _("Invalid profile name."), _T("Enable Viacam"), wxICON_ERROR );
errDlg.ShowModal ();
}
break;
default:
assert (false);
}
}
event.Skip(false);
}
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE_BEHAVIOUR
*/
void WConfiguration::OnChoiceBehaviourSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetDwellClick().
GetClickWindowController().SetFastMode ( event.GetSelection()!= 0);
event.Skip(false);
}
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE_DESIGN
*/
void WConfiguration::OnChoiceDesignSelected( wxCommandEvent& event )
{
CClickWindowController::EDesign design=
(CClickWindowController::EDesign) event.GetSelection();
wxGetApp().GetController().GetPointerAction().GetDwellClick().
GetClickWindowController().SetDesign (design);
event.Skip(false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_ONSCREENKEYBOARDCOMMAND
*/
void WConfiguration::OnButtonOnscreenkeyboardcommandClick( wxCommandEvent& event )
{
#if defined(__WXMSW__)
wxFileDialog dlg (this, _("Choose on-screen keyboard command"), _T(""), _T(""),
_("Executable files|*.exe"), wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR);
#else
wxFileDialog dlg (this, _("Choose on-screen keyboard command"),
_T(""), _T(""), _T("*"), wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR);
#endif
if (dlg.ShowModal()== wxID_OK) m_txtOnScreenKeyboardCommand->SetValue(dlg.GetPath());
event.Skip(false);
}
/*!
* wxEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_ONSCREENKEYBOARDCOMMAND
*/
void WConfiguration::OnTextctrlOnscreenkeyboardcommandTextUpdated( wxCommandEvent& event )
{
if (event.GetString().Cmp(wxGetApp().GetController().GetOnScreenKeyboardCommand()))
{
wxGetApp().GetController().SetOnScreenKeyboardCommand (event.GetString());
Changed ();
}
event.Skip(false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_CAMERA_SETTINGS
*/
void WConfiguration::OnButtonCameraSettingsClick( wxCommandEvent& event )
{
wxGetApp().GetController().ShowCameraSettingsDialog ();
event.Skip (false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON_CHANGE_CAMERA
*/
void WConfiguration::OnButtonChangeCameraClick( wxCommandEvent& event )
{
wxGetApp().GetController().ChangeCamera ();
wxMessageDialog dlg (NULL, _("You should restart the application to apply this change"),
_T("Enable Viacam"), wxICON_INFORMATION );
dlg.ShowModal ();
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_TOP_WORKSPACE
*/
void WConfiguration::OnSpinctrlTopWorkspaceUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetTopWorkspace(m_spin_top_workspace->GetValue());
m_spin_top_workspace->SetValue (wxGetApp().GetController().GetPointerAction().GetTopWorkspace());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_RIGHT_WORKSPACE
*/
void WConfiguration::OnSpinctrlRightWorkspaceUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetRightWorkspace(m_spin_right_workspace->GetValue());
m_spin_right_workspace->SetValue (wxGetApp().GetController().GetPointerAction().GetRightWorkspace());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_LEFT_WORKSPACE
*/
void WConfiguration::OnSpinctrlLeftWorkspaceUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetLeftWorkspace(m_spin_left_workspace->GetValue());
m_spin_left_workspace->SetValue (wxGetApp().GetController().GetPointerAction().GetLeftWorkspace());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL_BOTTOM_WORKSPACE
*/
void WConfiguration::OnSpinctrlBottomWorkspaceUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetBottomWorkspace(m_spin_bottom_workspace->GetValue());
m_spin_bottom_workspace->SetValue (wxGetApp().GetController().GetPointerAction().GetBottomWorkspace());
event.Skip(false);
Changed ();
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_WORKSPACE_LIMIT
*/
void WConfiguration::OnCheckboxWorkspaceLimitClick( wxCommandEvent& event )
{
if(m_chkEnabledWorkspace->GetValue()) {
m_chkEnabledWorkspace->SetValue(false);
wxMessageDialog dlg (NULL, _("This action could make you lose the control of the computer.\nDo you want to continue?"), _("eViacam warning"), wxICON_EXCLAMATION | wxYES_NO );
if (dlg.ShowModal()== wxID_YES)
{
m_chkEnabledWorkspace->SetValue(true);
wxGetApp().GetController().GetPointerAction().SetRestrictedWorkingArea(m_chkEnabledWorkspace->GetValue());
m_spin_top_workspace->Enable(m_chkEnabledWorkspace->GetValue());
m_spin_left_workspace->Enable(m_chkEnabledWorkspace->GetValue());
m_spin_right_workspace->Enable(m_chkEnabledWorkspace->GetValue());
m_spin_bottom_workspace->Enable(m_chkEnabledWorkspace->GetValue());
}
} else {
wxGetApp().GetController().GetPointerAction().SetRestrictedWorkingArea(m_chkEnabledWorkspace->GetValue());
m_spin_top_workspace->Enable(m_chkEnabledWorkspace->GetValue());
m_spin_left_workspace->Enable(m_chkEnabledWorkspace->GetValue());
m_spin_right_workspace->Enable(m_chkEnabledWorkspace->GetValue());
m_spin_bottom_workspace->Enable(m_chkEnabledWorkspace->GetValue());
}
event.Skip(false);
Changed ();
}
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_STARTUP
*/
void WConfiguration::OnCheckboxStartupClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetAutostart().Enable(m_chkStartup->GetValue());
event.Skip();
Changed ();
}
#endif
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON
*/
void WConfiguration::OnButtonClick( wxCommandEvent& event )
{
if (wxGetApp().GetController().StartMotionCalibration()) {
InitializeData();
Changed ();
}
event.Skip();
}
/*!
* wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_COMBOBOX_LEFT
*/
void WConfiguration::OnComboboxLeftSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionLeft ((CGestureClick::EAction) event.GetInt());
event.Skip(false);
}
/*!
* wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_COMBOBOX_RIGHT
*/
void WConfiguration::OnComboboxRightSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionRight ((CGestureClick::EAction) event.GetInt());
event.Skip(false);
}
/*!
* wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_COMBOBOX_TOP
*/
void WConfiguration::OnComboboxTopSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionTop ((CGestureClick::EAction) event.GetInt());
event.Skip(false);
}
/*!
* wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_COMBOBOX_BOTTOM
*/
void WConfiguration::OnComboboxBottomSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionBottom ((CGestureClick::EAction) event.GetInt());
event.Skip(false);
}
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ALLOW_VISUAL_ALERTS
*/
void WConfiguration::OnCheckboxAllowVisualAlertsClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetVisualAlerts(m_chkAllowVisualAlerts->IsChecked());
Changed ();
event.Skip(false);
}
#endif
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
*/
void WConfiguration::OnOkClick( wxCommandEvent& event )
{
// Save changes and destroy window
wxGetApp().GetController().GetConfigManager().WriteAll();
Destroy();
event.Skip(false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
*/
void WConfiguration::OnCancelClick( wxCommandEvent& event )
{
bool shouldClose= true;
if (m_dirty) {
wxMessageDialog dlg (NULL, _("Discard changes?"), _("eViacam warning"), wxICON_EXCLAMATION | wxYES_NO );
if (dlg.ShowModal()!= wxID_YES) shouldClose= false;
else
// Discard changes
wxGetApp().GetController().GetConfigManager().ReadAll();
}
if (shouldClose) Destroy();
event.Skip(false);
}
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE
*/
void WConfiguration::OnLeftGestureChoiceSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionLeft ( (CGestureClick::EAction) event.GetInt());
Changed();
event.Skip(false);
}
#endif
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE1
*/
void WConfiguration::OnRightGestureChoiceSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionRight ((CGestureClick::EAction) event.GetInt());
Changed();
event.Skip(false);
}
#endif
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE2
*/
void WConfiguration::OnUpGestureChoiceSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionTop ((CGestureClick::EAction) event.GetInt());
Changed();
event.Skip(false);
}
#endif
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE3
*/
void WConfiguration::OnDownGestureChoiceSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetGestureClick().
SetActionBottom ((CGestureClick::EAction) event.GetInt());
Changed();
event.Skip(false);
}
#endif
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPINCTRL2
*/
void WConfiguration::OnSpinLocateFaceTimeoutUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetVisionPipeline().SetTimeout(m_spinLocateFaceTimeout->GetValue());
event.Skip();
}
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE4
*/
void WConfiguration::OnChoCpuUsageSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetVisionPipeline().SetCpuUsage(m_choCpuUsage->GetCurrentSelection());
event.Skip();
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for Hotkeys
*/
void WConfiguration::OnHotkeyCheckboxClick( wxCommandEvent& event )
{
eviacam::HotkeyManager& hkm= wxGetApp().GetController().getHotkeyManager();
// TODO: this is ugly...
eviacam::HotKey& hk= hkm.GetHotKey((event.GetId()-FIRST_CONTROL_ID-2)/4);
if (event.GetInt()) hkm.EnableHotKey(hk);
else hkm.DisableHotKey(hk);
event.Skip(false);
}
/*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for Hotkeys
*/
void WConfiguration::OnHotkeyButtonClick( wxCommandEvent& event )
{
WGetKey dlgGetKey(this);
eviacam::HotkeyManager& hkm= wxGetApp().GetController().getHotkeyManager();
eviacam::HotKey& hk= hkm.GetHotKey((event.GetId()-FIRST_CONTROL_ID-3)/4);
for (;;) {
if (dlgGetKey.ShowModal()!= wxID_YES) break;
KeyboardCode kc= dlgGetKey.GetKeyCode();
if (hkm.SetHotKeyKeyboardCode(hk, kc)) {
((wxTextCtrl*)m_controlList[event.GetId()-FIRST_CONTROL_ID-2])->SetValue(kc.GetName());
break;
}
}
event.Skip(false);
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX2
*/
void WConfiguration::OnCheckboxWrapPointer( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetWrapPointer(m_chkWrapPointer->GetValue());
event.Skip();
}
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE5
*/
void WConfiguration::OnChoiceClickWindowModeSelected( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetDwellClick().GetClickWindowController().
SetLocation( (CClickWindowController::ELocation) event.GetSelection() );
if ( m_choDockingMode->GetCurrentSelection()== CClickWindowController::FLOATING_VERTICAL ||
m_choDockingMode->GetCurrentSelection()== CClickWindowController::FLOATING_HORIZONTAL)
m_chkAutohide->Enable(false);
else
m_chkAutohide->Enable(true);
event.Skip(false);
}
#endif
#if defined(__WXGTK__)
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_AUTOHIDE
*/
void WConfiguration::OnCheckboxAutohideClick( wxCommandEvent& event )
{
wxGetApp().GetController().GetPointerAction().GetDwellClick().
GetClickWindowController().SetAutohide(m_chkAutohide->IsChecked());
event.Skip(false);
}
#endif
/*!
* wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_SPIN_SEND_ACTION_WAIT
*/
void WConfiguration::OnSpinSendActionWaitUpdated( wxSpinEvent& event )
{
wxGetApp().GetController().GetPointerAction().SetSendActionWait(event.GetInt());
Changed();
event.Skip(false);
}
/*!
* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_CHECK_UPDATES
*/
void WConfiguration::OnCheckboxCheckUpdatesClick(wxCommandEvent& event)
{
wxGetApp().GetController().SetCheckUpdatesAtStartup(m_chkCheckUpdatesAtStartup->GetValue());
event.Skip(false);
Changed();
}