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