summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp
blob: 256f35b496c99ab96532e050a84c904353ca962f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "ftnoir_filter_accela/ftnoir_filter_accela.h"
#include <cmath>
#include <QDebug>
#include <algorithm>
#include <QDoubleSpinBox>
#include "facetracknoir/global-settings.h"

FilterControls::FilterControls() :
    accela_filter(NULL),
    b(bundle("Accela")),
    rotation_alpha(b, "rotation-alpha", ACCELA_SMOOTHING_ROTATION),
    translation_alpha(b, "translation-alpha", ACCELA_SMOOTHING_TRANSLATION),
    second_order_alpha(b, "second-order-alpha", ACCELA_SECOND_ORDER_ALPHA),
    third_order_alpha(b, "third-order-alpha", ACCELA_THIRD_ORDER_ALPHA),
    deadzone(b, "deadzone", 0),
    expt(b, "exponent", 2)

{
    ui.setupUi( this );
    connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
    connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel()));

    tie_setting(rotation_alpha, ui.rotation_alpha);
    tie_setting(translation_alpha, ui.translation_alpha);
    tie_setting(second_order_alpha, ui.order_2nd);
    tie_setting(third_order_alpha, ui.order_3rd);
    tie_setting(deadzone, ui.deadzone);
    tie_setting(expt, ui.expt);
}

void FilterControls::Initialize(QWidget *) {
	show();
}

void FilterControls::registerFilter(IFilter* filter)
{
    accela_filter = (FTNoIR_Filter*) filter;
}

void FilterControls::unregisterFilter()
{
    accela_filter = NULL;
}

void FilterControls::doOK() {
	save();
	this->close();
}

void FilterControls::doCancel() {
    if (!b->modifiedp())
    {
        close();
        return;
    }
    int ret =
            QMessageBox::question( this,
                                   "Settings have changed",
                                   "Do you want to save the settings?",
                                   QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

    switch (ret) {
    case QMessageBox::Save:
        save();
        this->close();
        break;
    case QMessageBox::Discard:
        this->discard();
        this->close();
        break;
    case QMessageBox::Cancel:
    default:
        break;
    }
}


void FilterControls::discard()
{
    b->revert();
}

void FilterControls::save() {
    b->save();
    if (accela_filter)
        accela_filter->receiveSettings();
}

extern "C" FTNOIR_FILTER_BASE_EXPORT IFilterDialog* CALLING_CONVENTION GetDialog()
{
    return new FilterControls;
}