1 // -*- C++ -*-
2 // $Id: filterwidgets.cpp,v 1.5 2009-11-02 20:38:02 robertl Exp $
3 //------------------------------------------------------------------------
4 //
5 // Copyright (C) 2009 S. Khai Mong <khai@mangrai.com>.
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20 // USA.
21 //
22
23 #include "filterwidgets.h"
24
25
26 //------------------------------------------------------------------------
TrackWidget(QWidget * parent,TrackFilterData & tfd)27 TrackWidget::TrackWidget(QWidget* parent, TrackFilterData& tfd): FilterWidget(parent), tfd(tfd)
28 {
29 ui.setupUi(this);
30
31 // Checkbox interlocks
32 addCheckEnabler(ui.titleCheck, ui.titleText);
33 addCheckEnabler(ui.moveCheck,
34 (QList<QWidget*> ()
35 << ui.weeksLabel << ui.weeksSpin
36 << ui.daysLabel << ui.daysSpin
37 << ui.hoursLabel<< ui.hoursSpin
38 << ui.minsLabel << ui.minsSpin
39 << ui.secsLabel << ui.secsSpin));
40 addCheckEnabler(ui.startCheck, ui.startEdit);
41 addCheckEnabler(ui.stopCheck, ui.stopEdit);
42 addCheckEnabler(ui.GPSFixesCheck, ui.GPSFixesCombo);
43
44 addCheckEnabler(ui.splitTimeCheck,
45 (QList<QWidget*> ()
46 <<ui.splitTimeSpin
47 <<ui.splitTimeCombo));
48 addCheckEnabler(ui.splitDistanceCheck,
49 (QList<QWidget*> ()
50 <<ui.splitDistSpin
51 <<ui.splitDistCombo));
52
53 connect(ui.mergeCheck, SIGNAL(clicked()), this, SLOT(mergeCheckX()));
54 connect(ui.packCheck, SIGNAL(clicked()), this, SLOT(packCheckX()));
55 connect(ui.startCheck, SIGNAL(clicked()), this, SLOT(otherCheckX()));
56 connect(ui.stopCheck, SIGNAL(clicked()), this, SLOT(otherCheckX()));
57
58 connect(ui.splitDateCheck, SIGNAL(clicked()), this, SLOT(splitDateX()));
59 connect(ui.splitTimeCheck, SIGNAL(clicked()), this, SLOT(splitTimeX()));
60 connect(ui.splitDistanceCheck, SIGNAL(clicked()), this, SLOT(splitDistanceX()));
61
62 ui.startEdit->setDisplayFormat("dd MMM yyyy hh:mm:ss AP");
63 ui.stopEdit->setDisplayFormat("dd MMM yyyy hh:mm:ss AP");
64
65 // Collect the data fields.
66 fopts << new BoolFilterOption(tfd.title, ui.titleCheck);
67 fopts << new BoolFilterOption(tfd.move, ui.moveCheck);
68 fopts << new BoolFilterOption(tfd.TZ, ui.TZCheck);
69 fopts << new BoolFilterOption(tfd.start, ui.startCheck);
70 fopts << new BoolFilterOption(tfd.stop, ui.stopCheck);
71 fopts << new BoolFilterOption(tfd.pack, ui.packCheck);
72 fopts << new BoolFilterOption(tfd.merge, ui.mergeCheck);
73 fopts << new BoolFilterOption(tfd.splitByDate, ui.splitDateCheck);
74 fopts << new BoolFilterOption(tfd.splitByTime, ui.splitTimeCheck);
75 fopts << new BoolFilterOption(tfd.splitByDistance, ui.splitDistanceCheck);
76 fopts << new BoolFilterOption(tfd.GPSFixes, ui.GPSFixesCheck);
77 fopts << new BoolFilterOption(tfd.course, ui.courseCheck);
78 fopts << new BoolFilterOption(tfd.speed, ui.speedCheck);
79
80 fopts << new IntSpinFilterOption(tfd.weeks, ui.weeksSpin, ui.weeksSpin->minimum(), ui.weeksSpin->maximum());
81 fopts << new IntSpinFilterOption(tfd.days, ui.daysSpin, ui.daysSpin->minimum(), ui.daysSpin->maximum());
82 fopts << new IntSpinFilterOption(tfd.hours, ui.hoursSpin, ui.hoursSpin->minimum(), ui.hoursSpin->maximum());
83 fopts << new IntSpinFilterOption(tfd.mins, ui.minsSpin, ui.minsSpin->minimum(), ui.minsSpin->maximum());
84 fopts << new IntSpinFilterOption(tfd.secs, ui.secsSpin, ui.secsSpin->minimum(), ui.secsSpin->maximum());
85 fopts << new IntSpinFilterOption(tfd.splitTime, ui.splitTimeSpin, 0, 1000);
86 fopts << new IntSpinFilterOption(tfd.splitDist, ui.splitDistSpin, 0, 5280);
87
88 fopts << new DateTimeFilterOption(tfd.startTime, ui.startEdit);
89 fopts << new DateTimeFilterOption(tfd.stopTime, ui.stopEdit);
90
91 fopts << new StringFilterOption(tfd.titleString, ui.titleText);
92 fopts << new ComboFilterOption(tfd.GPSFixesVal, ui.GPSFixesCombo);
93 fopts << new ComboFilterOption(tfd.splitTimeUnit, ui.splitTimeCombo);
94 fopts << new ComboFilterOption(tfd.splitDistUnit, ui.splitDistCombo);
95 setWidgetValues();
96 checkChecks();
97 }
98
99 //------------------------------------------------------------------------
otherCheckX()100 void TrackWidget::otherCheckX()
101 {
102 ui.TZCheck->setEnabled(ui.stopCheck->isChecked() || ui.startCheck->isChecked());
103
104 ui.splitTimeSpin->setEnabled(ui.splitTimeCheck->isChecked());
105 ui.splitTimeCombo->setEnabled(ui.splitTimeCheck->isChecked());
106 ui.splitDistSpin->setEnabled(ui.splitDistanceCheck->isChecked());
107 ui.splitDistCombo->setEnabled(ui.splitDistanceCheck->isChecked());
108
109 bool bb = (ui.mergeCheck->isChecked() || ui.packCheck->isChecked());
110 ui.splitDateCheck->setEnabled(bb);
111 ui.splitTimeCheck->setEnabled(bb);
112 ui.splitDistanceCheck->setEnabled(bb);
113 }
114
115 //------------------------------------------------------------------------
mergeCheckX()116 void TrackWidget::mergeCheckX()
117 {
118 if (ui.mergeCheck->isChecked()) {
119 ui.packCheck->setChecked(false);
120 }
121 otherCheckX();
122 }
123 //------------------------------------------------------------------------
packCheckX()124 void TrackWidget::packCheckX()
125 {
126 if (ui.packCheck->isChecked()) {
127 ui.mergeCheck->setChecked(false);
128 }
129 otherCheckX();
130 }
131
132 //------------------------------------------------------------------------
splitDateX()133 void TrackWidget::splitDateX()
134 {
135 if (ui.splitDateCheck->isChecked()) {
136 ui.splitTimeCheck->setChecked(false);
137 ui.splitDistanceCheck->setChecked(false);
138 }
139 otherCheckX();
140 }
141 //------------------------------------------------------------------------
splitTimeX()142 void TrackWidget::splitTimeX()
143 {
144 if (ui.splitTimeCheck->isChecked()) {
145 ui.splitDateCheck->setChecked(false);
146 ui.splitDistanceCheck->setChecked(false);
147 }
148 otherCheckX();
149 }
150 //------------------------------------------------------------------------
splitDistanceX()151 void TrackWidget::splitDistanceX()
152 {
153 if (ui.splitDistanceCheck->isChecked()) {
154 ui.splitDateCheck->setChecked(false);
155 ui.splitTimeCheck->setChecked(false);
156 }
157 otherCheckX();
158 }
159
160
161 //------------------------------------------------------------------------
162 //------------------------------------------------------------------------
WayPtsWidget(QWidget * parent,WayPtsFilterData & wfd)163 WayPtsWidget::WayPtsWidget(QWidget* parent, WayPtsFilterData& wfd): FilterWidget(parent), wfd(wfd)
164 {
165 ui.setupUi(this);
166 addCheckEnabler(ui.duplicatesCheck,
167 QList<QWidget*>() << ui.shortNamesCheck << ui.locationsCheck);
168 addCheckEnabler(ui.positionCheck,
169 QList<QWidget*>() << ui.positionText << ui.positionUnitCombo);
170 addCheckEnabler(ui.radiusCheck,
171 QList<QWidget*>() << ui.latLabel << ui.latText << ui.longLabel <<
172 ui.longText << ui.radiusUnitCombo << ui.radiusText);
173
174 fopts << new BoolFilterOption(wfd.duplicates, ui.duplicatesCheck);
175 fopts << new BoolFilterOption(wfd.shortNames, ui.shortNamesCheck);
176 fopts << new BoolFilterOption(wfd.locations, ui.locationsCheck);
177 fopts << new BoolFilterOption(wfd.position, ui.positionCheck);
178 fopts << new BoolFilterOption(wfd.radius, ui.radiusCheck);
179 fopts << new DoubleFilterOption(wfd.positionVal, ui.positionText, 0.0, 1.0E308);
180 fopts << new DoubleFilterOption(wfd.radiusVal, ui.radiusText, 0.0, 1.0E308);
181 fopts << new DoubleFilterOption(wfd.longVal, ui.longText, -180, 180, 7, 'f');
182 fopts << new DoubleFilterOption(wfd.latVal, ui.latText, -90, 90, 7, 'f');
183 fopts << new ComboFilterOption(wfd.positionUnit, ui.positionUnitCombo);
184 fopts << new ComboFilterOption(wfd.radiusUnit, ui.radiusUnitCombo);
185
186 connect(ui.shortNamesCheck, SIGNAL(clicked()), this, SLOT(shortNamesCkX()));
187 connect(ui.locationsCheck, SIGNAL(clicked()), this, SLOT(locationsCkX()));
188 setWidgetValues();
189 checkChecks();
190 }
191 //------------------------------------------------------------------------
shortNamesCkX()192 void WayPtsWidget::shortNamesCkX()
193 {
194 if (!ui.shortNamesCheck->isChecked()) {
195 ui.locationsCheck->setChecked(true);
196 }
197 }
198 //------------------------------------------------------------------------
locationsCkX()199 void WayPtsWidget::locationsCkX()
200 {
201 if (!ui.locationsCheck->isChecked()) {
202 ui.shortNamesCheck->setChecked(true);
203 }
204 }
205
206 //------------------------------------------------------------------------
207 //------------------------------------------------------------------------
RtTrkWidget(QWidget * parent,RtTrkFilterData & rfd)208 RtTrkWidget::RtTrkWidget(QWidget* parent, RtTrkFilterData& rfd): FilterWidget(parent), rfd(rfd)
209 {
210 ui.setupUi(this);
211 addCheckEnabler(ui.simplifyCheck,
212 QList<QWidget*>() << ui.limitToLabel << ui.limitToSpin << ui.pointLabel);
213
214 fopts << new BoolFilterOption(rfd.simplify_, ui.simplifyCheck);
215 fopts << new BoolFilterOption(rfd.reverse_, ui.reverseCheck);
216 fopts << new IntSpinFilterOption(rfd.limitTo_, ui.limitToSpin, 1, 5000);
217 setWidgetValues();
218 checkChecks();
219 }
220
221 //------------------------------------------------------------------------
222 //------------------------------------------------------------------------
MiscFltWidget(QWidget * parent,MiscFltFilterData & mfd)223 MiscFltWidget::MiscFltWidget(QWidget* parent, MiscFltFilterData& mfd): FilterWidget(parent), mfd(mfd)
224 {
225 ui.setupUi(this);
226 ui.transformCombo->addItem(QString("%1 %2 %3").arg(tr("Tracks")).arg(QChar(8594)).arg(tr("Waypoints")));
227 ui.transformCombo->addItem(QString("%1 %2 %3").arg(tr("Routes")).arg(QChar(8594)).arg(tr("Tracks")));
228 ui.transformCombo->addItem(QString("%1 %2 %3").arg(tr("Waypoints")).arg(QChar(8594)).arg(tr("Routes")));
229 ui.transformCombo->addItem(QString("%1 %2 %3").arg(tr("Routes")).arg(QChar(8594)).arg(tr("Waypoints")));
230 ui.transformCombo->addItem(QString("%1 %2 %3").arg(tr("Tracks")).arg(QChar(8594)).arg(tr("Routes")));
231 ui.transformCombo->addItem(QString("%1 %2 %3").arg(tr("Waypoints")).arg(QChar(8594)).arg(tr("Tracks")));
232 addCheckEnabler(ui.transformCheck,
233 QList<QWidget*>() << ui.transformCombo << ui.deleteCheck);
234 addCheckEnabler(ui.sortWptCheck, ui.sortWptBy);
235 addCheckEnabler(ui.sortRteCheck, ui.sortRteBy);
236 addCheckEnabler(ui.sortTrkCheck, ui.sortTrkBy);
237
238 fopts << new BoolFilterOption(mfd.transform_, ui.transformCheck);
239 fopts << new BoolFilterOption(mfd.swap_, ui.swapCheck);
240 fopts << new BoolFilterOption(mfd.del_, ui.deleteCheck);
241 fopts << new BoolFilterOption(mfd.nukeTracks_, ui.nukeTracks);
242 fopts << new BoolFilterOption(mfd.nukeRoutes_, ui.nukeRoutes);
243 fopts << new BoolFilterOption(mfd.nukeWaypoints_, ui.nukeWaypoints);
244 fopts << new BoolFilterOption(mfd.sortWpt_, ui.sortWptCheck);
245 fopts << new BoolFilterOption(mfd.sortRte_, ui.sortRteCheck);
246 fopts << new BoolFilterOption(mfd.sortTrk_, ui.sortTrkCheck);
247 fopts << new ComboFilterOption(mfd.transformVal_, ui.transformCombo);
248 fopts << new ComboFilterOption(mfd.sortWptBy_, ui.sortWptBy);
249 fopts << new ComboFilterOption(mfd.sortRteBy_, ui.sortRteBy);
250 fopts << new ComboFilterOption(mfd.sortTrkBy_, ui.sortTrkBy);
251
252 setWidgetValues();
253 checkChecks();
254 }
255