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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
/* Copyright (c) 2016, Stanislaw Halik <sthalik@misaki.pl>
* Permission to use, copy, modify, and/or distribute this
* software for any purpose with or without fee is hereby granted,
* provided that the above copyright notice and this permission
* notice appear in all copies.
*/
#include "migration.hpp"
#include "logic/mappings.hpp"
#include "logic/main-settings.hpp"
#include "options/group.hpp"
#include <QPointF>
#include <QList>
#include <memory>
#include <QDebug>
using namespace migrations;
struct mappings_from_2_3_0_rc11 : migration
{
static QList<QList<QPointF>> get_old_splines()
{
QList<QList<QPointF>> ret;
static const char* names[] =
{
"tx", "tx_alt",
"ty", "ty_alt",
"tz", "tz_alt",
"rx", "rx_alt",
"ry", "ry_alt",
"rz", "rz_alt",
};
std::shared_ptr<QSettings> settings_ = options::group::ini_file();
QSettings& settings(*settings_);
for (const char* name : names)
{
QList<QPointF> points;
settings.beginGroup(QString("Curves-%1").arg(name));
const int max = settings.value("point-count", 0).toInt();
for (int i = 0; i < max; i++)
{
QPointF new_point(settings.value(QString("point-%1-x").arg(i), 0).toDouble(),
settings.value(QString("point-%1-y").arg(i), 0).toDouble());
points.append(new_point);
}
settings.endGroup();
ret.append(points);
}
return ret;
}
QString unique_date() const override { return "20160909_00"; }
QString name() const override { return "mappings to new layout"; }
static Mappings get_new_mappings()
{
main_settings s;
return Mappings(std::vector<axis_opts*>{&s.a_x, &s.a_y, &s.a_z, &s.a_yaw, &s.a_pitch, &s.a_roll});
}
bool should_run() const override
{
Mappings m = get_new_mappings();
// run only if no new splines were set
for (int i = 0; i < 6; i++)
if (m(i).spline_main.get_point_count() || m(i).spline_alt.get_point_count())
return false;
// run only if old splines exist
for (const QList<QPointF>& points : get_old_splines())
if (points.size())
return true;
// no splines exit at all
return false;
}
void run() override
{
const QList<QList<QPointF>> old_mappings = get_old_splines();
Mappings m = get_new_mappings();
std::shared_ptr<QSettings> s_ = options::group::ini_file();
QSettings& s = *s_;
for (int i = 0; i < 12; i++)
{
spline& spl = (i % 2) == 0 ? m(i / 2).spline_main : m(i / 2).spline_alt;
spl.clear();
const QList<QPointF>& points = old_mappings[i];
for (const QPointF& pt : points)
spl.add_point(pt);
spl.save(s);
}
}
};
OPENTRACK_MIGRATION(mappings_from_2_3_0_rc11);
|