1 // -*- C++ -*-
2 // $Id: filterdata.h,v 1.4 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., 59 Temple Place - Suite 330, Boston, MA 02111
20 //  USA
21 //
22 //------------------------------------------------------------------------
23 #ifndef FILTERDATA_H
24 #define FILTERDATA_H
25 
26 #include <QDateTime>
27 #include <QSettings>
28 #include <QStringList>
29 #include "setting.h"
30 
31 //------------------------------------------------------------------------
32 
33 class FilterData {
34 public:
FilterData()35   FilterData(): inUse(true) {};
~FilterData()36   virtual ~FilterData() {};
37 
saveSettings(QSettings & st)38   void saveSettings(QSettings &st) {
39     SettingGroup sg;
40     makeSettingGroup(sg);
41     sg.saveSettings(st);
42   }
restoreSettings(QSettings & st)43   void restoreSettings(QSettings &st) {
44     SettingGroup sg;
45     makeSettingGroup(sg);
46     sg.restoreSettings(st);
47   }
48   virtual void makeSettingGroup(SettingGroup &sg) = 0;
49   virtual QStringList makeOptionString() = 0;
50 
51 public:
52   bool inUse;
53 };
54 //------------------------------------------------------------------------
55 
56 class TrackFilterData: public FilterData  {
57  public:
TrackFilterData()58   TrackFilterData(): FilterData(), title(false), titleString(QString()),
59 		     move(false),  days(0), hours(0), mins(0), secs(0),
60 		     TZ(false),
61 		     start(false),
62 		     stop(false),
63 		     pack(false), merge(false), split(false),
64 		     GPSFixes(false), GPSFixesVal(0),
65 		     splitByDate(false),
66 		     splitByTime(false),
67 		     splitByDistance(false),
68 		     course(false), speed(false),
69 		     splitTime(0), splitTimeUnit(0),
70 		     splitDist(0), splitDistUnit(0)
71   {
72     titleString = "ACTIVE LOG #%Y%m%d";
73     stopTime = QDateTime::currentDateTime();
74     stopTime.setTime(QTime(23, 59, 59));
75     startTime = stopTime.addMonths(-6);
76     startTime.setTime(QTime(0, 0, 1));
77   }
makeSettingGroup(SettingGroup & sg)78   virtual void makeSettingGroup(SettingGroup &sg)
79   {
80     sg.addVarSetting(new BoolSetting("trks.inUse", inUse));
81     sg.addVarSetting(new BoolSetting("trks.GPSFixes", GPSFixes));
82     sg.addVarSetting(new IntSetting("trks.GPSFixesVal", GPSFixesVal));
83     sg.addVarSetting(new BoolSetting("trks.course", course));
84     sg.addVarSetting(new BoolSetting("trks.speed", speed));
85     sg.addVarSetting(new BoolSetting("trks.pack", pack));
86     sg.addVarSetting(new BoolSetting("trks.merge", merge));
87     sg.addVarSetting(new BoolSetting("trks.split", split));
88     sg.addVarSetting(new BoolSetting("trks.splitByDate", splitByDate));
89     sg.addVarSetting(new BoolSetting("trks.splitByTime", splitByTime));
90     sg.addVarSetting(new BoolSetting("trks.splitByDistance", splitByDistance));
91     sg.addVarSetting(new BoolSetting("trks.start", start));
92     sg.addVarSetting(new DateTimeSetting("trks.startTime", startTime));
93     sg.addVarSetting(new BoolSetting("trks.stop", stop));
94     sg.addVarSetting(new DateTimeSetting("trks.stopTime", stopTime));
95     sg.addVarSetting(new BoolSetting("trks.TZ", TZ));
96     sg.addVarSetting(new BoolSetting("trks.move", move));
97     sg.addVarSetting(new IntSetting("trks.days", days));
98     sg.addVarSetting(new IntSetting("trks.mins", mins));
99     sg.addVarSetting(new IntSetting("trks.hours", hours));
100     sg.addVarSetting(new IntSetting("trks.secs", secs));
101     sg.addVarSetting(new BoolSetting("trks.title", title));
102     sg.addVarSetting(new StringSetting("trks.titleString", titleString));
103     sg.addVarSetting(new IntSetting("trks.splitTime", splitTime));
104     sg.addVarSetting(new IntSetting("trks.splitTimeUnit", splitTimeUnit));
105     sg.addVarSetting(new IntSetting("trks.splitDist", splitDist));
106     sg.addVarSetting(new IntSetting("trks.splitDistUnit", splitDistUnit));
107   }
108   virtual QStringList makeOptionString();
109 
110  public:
111   bool title;
112   QString titleString;
113   bool move;
114   int  days, hours, mins, secs;
115   bool TZ;
116 
117   bool start;
118   QDateTime startTime;
119   bool stop;
120   QDateTime stopTime;
121   bool pack, merge, split, GPSFixes;
122   int  GPSFixesVal;
123   bool splitByDate, splitByTime, splitByDistance;
124   bool course, speed;
125   int  splitTime, splitTimeUnit;
126   int  splitDist, splitDistUnit;
127 };
128 
129 //------------------------------------------------------------------------
130 
131 class WayPtsFilterData: public FilterData  {
132  public:
WayPtsFilterData()133   WayPtsFilterData(): FilterData(),
134 		      duplicates(false), shortNames(true), locations(false),
135 		      position(false), radius(false), sort(false),
136 		      positionVal(0.0), radiusVal(0.0),
137 		      longVal(0.0), latVal(0.0),
138 		      positionUnit(0), radiusUnit(0)
139     {
140     }
141 
142   virtual QStringList makeOptionString();
makeSettingGroup(SettingGroup & sg)143   virtual void makeSettingGroup(SettingGroup &sg)
144   {
145     sg.addVarSetting(new BoolSetting("wpts.inUse", inUse));
146     sg.addVarSetting(new BoolSetting("wpts.radius", radius));
147     sg.addVarSetting(new DoubleSetting("wpts.radiusVal", radiusVal));
148     sg.addVarSetting(new IntSetting("wpts.radiusUnit", radiusUnit));
149     sg.addVarSetting(new DoubleSetting("wpts.latVal", latVal));
150     sg.addVarSetting(new DoubleSetting("wpts.longVal", longVal));
151     sg.addVarSetting(new BoolSetting("wpts.duplicates", duplicates));
152     sg.addVarSetting(new BoolSetting("wpts.shortNames", shortNames));
153     sg.addVarSetting(new BoolSetting("wpts.locations", locations));
154     sg.addVarSetting(new BoolSetting("wpts.position", position));
155     sg.addVarSetting(new DoubleSetting("wpts.positionVal", positionVal));
156     sg.addVarSetting(new IntSetting("wpts.positionUnit", positionUnit));
157     sg.addVarSetting(new BoolSetting("wpts.sort", sort));
158   }
159 
160 
161  public:
162   bool duplicates, shortNames, locations, position, radius, sort;
163   double positionVal;
164   double radiusVal;
165   double longVal, latVal;
166   int positionUnit, radiusUnit;
167 };
168 
169 //------------------------------------------------------------------------
170 class RtTrkFilterData: public FilterData  {
171  public:
RtTrkFilterData()172   RtTrkFilterData(): FilterData(),
173 		     simplify(false),
174 		     reverse(false),
175 		     limitTo(100)
176     {
177     }
178 
179   virtual QStringList makeOptionString();
makeSettingGroup(SettingGroup & sg)180   virtual void makeSettingGroup(SettingGroup &sg) {
181     sg.addVarSetting(new BoolSetting("rttrk.inUse", inUse));
182     sg.addVarSetting(new BoolSetting("rttrk.reverse", reverse));
183     sg.addVarSetting(new BoolSetting("rttrk.simplify", simplify));
184     sg.addVarSetting(new IntSetting("rttrk.limitTo", limitTo));
185   }
186 
187  public:
188   bool simplify, reverse;
189   int limitTo;
190 };
191 
192 //------------------------------------------------------------------------
193 class MiscFltFilterData: public FilterData  {
194  public:
MiscFltFilterData()195   MiscFltFilterData(): FilterData(),
196 		       nukeRoutes(false),
197 		       nukeTracks(false),
198 		       nukeWaypoints(false),
199 		       transform(false),
200 		       del(false),
201 		       swap(false),
202 		       transformVal(0)
203     {
204     }
205 
206   virtual QStringList makeOptionString();
makeSettingGroup(SettingGroup & sg)207   virtual void makeSettingGroup(SettingGroup &sg)
208   {
209     sg.addVarSetting(new BoolSetting("mscflt.nukeRoutes", nukeRoutes));
210     sg.addVarSetting(new BoolSetting("mscflt.nukeTracks", nukeTracks));
211     sg.addVarSetting(new BoolSetting("mscflt.nukeWaypoints", nukeWaypoints));
212     sg.addVarSetting(new BoolSetting("mscflt.inUse", inUse));
213     sg.addVarSetting(new BoolSetting("mscflt.transform", transform));
214     sg.addVarSetting(new IntSetting("mscflt.transformVal", transformVal));
215     sg.addVarSetting(new BoolSetting("mscflt.delete", del));
216     sg.addVarSetting(new BoolSetting("mscflt.swap", swap));
217   }
218 
219  public:
220   bool nukeRoutes, nukeTracks, nukeWaypoints;
221   bool transform, del, swap;
222   int transformVal;
223 };
224 
225 
226 //------------------------------------------------------------------------
227 //
228 class AllFiltersData
229 {
230  public:
AllFiltersData()231   AllFiltersData()
232   {
233     defaultAll();
234     filters << &miscFltFilterData;
235     filters << &trackFilterData;
236     filters << &wayPtsFilterData;
237     filters << &rtTrkFilterData;
238   }
239 
defaultAll()240   void defaultAll() {
241     miscFltFilterData = MiscFltFilterData();
242     trackFilterData = TrackFilterData();
243     wayPtsFilterData = WayPtsFilterData();
244     rtTrkFilterData = RtTrkFilterData();
245   }
246 
getAllFilterStrings()247   QStringList getAllFilterStrings() {
248     QStringList args;
249     for (int i=0; i<filters.size(); i++)
250       args << filters[i]->makeOptionString();
251     return args;
252   }
253 
254   TrackFilterData trackFilterData;
255   WayPtsFilterData wayPtsFilterData;
256   RtTrkFilterData rtTrkFilterData;
257   MiscFltFilterData miscFltFilterData;
258   QList<FilterData *>filters;
259 };
260 
261 
262 #endif
263