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