]> git.vomp.tv Git - vompclient.git/commitdiff
20 CWFs, fix some snprintf calls
authorChris Tallon <chris@vomp.tv>
Wed, 19 Feb 2020 18:17:09 +0000 (18:17 +0000)
committerChris Tallon <chris@vomp.tv>
Wed, 19 Feb 2020 18:17:09 +0000 (18:17 +0000)
15 files changed:
defines.h
demuxerts.cc
ledraspberry.cc
playerliveradio.cc
playerradio.cc
vepg.cc
vpicturebanner.cc
vrecordinglist.h
vrecordinglistadvanced.cc
vrecordinglistadvanced.h
vrecordinglistclassic.cc
vrecordinglistclassic.h
vscreensaver.cc
vtimerlist.cc
vtimerlist.h

index 01b0f58e42c2bc2433284226e1a6509d8d821f9b..d6eed72d7370c5b5e8495dd6414a039d1ffc5634 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -60,6 +60,8 @@ int getClockRealTime(struct timespec *tp);
   #define RemoteStartDev ""//No devices passed
 
 // FIXME - check C++ - I think some of these are in std:: now ?
+// FIXME - Not on Windows. Obviously. Also _snprintf doesn't guarantee null termination.
+// FIXME When the Windows code is upped to VS2015 use snprintf instead of _snprintf.
   #define SNPRINTF _snprintf
   #define VSNPRINTF _vsnprintf
   #define STRCASECMP _stricmp
index f11ba51d441601ea91470eafae5b1dea79b73ca1..26401f70cd84c46ae6d951446f90a8f98997aee7 100644 (file)
@@ -92,7 +92,7 @@ tPacket.init(PESTYPE_PRIVATE_1,PESTYPE_SUBSTREAM_TELETEXTMAX);
   pinfo.hasaccessunit=false;
 }
 
-int DemuxerTS::scan(UCHAR *buf, int len)
+int DemuxerTS::scan(UCHAR* /*buf*/, int /*len*/)
 {
   switch (atype)
   {
index 6269546d1205e69cc0a4b28ce1d3d573dadb4114..2b58e394224988178d3220e8ab74ea59924e58dc 100644 (file)
@@ -31,7 +31,7 @@ LedRaspberry::~LedRaspberry()
 {
 }
 
-int LedRaspberry::init(int tdevice)
+int LedRaspberry::init(int /*tdevice*/)
 {
   if (initted) return 0;
   FILE *led=fopen(GREEN_LED,"w");
index 54b9c293293ac6347e37232203f168a193a39c5c..585be832b82480ae427ea7f16a6fbfa117f2521f 100644 (file)
@@ -153,7 +153,7 @@ void PlayerLiveRadio::stop()
 
 // ----------------------------------- Callback
 
-void PlayerLiveRadio::call(void* caller)
+void PlayerLiveRadio::call(void* /*caller*/)
 {
 }
 
index cc184d28a68a24d3a4574a18326f7add02eb4c7b..93ac63dc2061b82643b887f2619313f9974a9adf 100644 (file)
@@ -334,6 +334,7 @@ void PlayerRadio::switchState(UCHAR toState, ULONG jumpToFrame)
         }
       }
     }
+    FALLTHROUGH // keep compiler happy (all posibilities return)
     case S_PAUSE_P: // from S_PAUSE_P -----------------------------------
     {
       switch(toState)
@@ -368,6 +369,7 @@ void PlayerRadio::switchState(UCHAR toState, ULONG jumpToFrame)
         }
       }
     }
+    FALLTHROUGH // keep compiler happy (all posibilities return)
     case S_STOP: // from S_STOP -----------------------------------
     {
       switch(toState)
@@ -462,7 +464,7 @@ void PlayerRadio::doConnectionLost()
 
 // ----------------------------------- Callback
 
-void PlayerRadio::call(void* caller)
+void PlayerRadio::call(void* /*caller*/)
 {
   threadSignalNoLock();
 }
diff --git a/vepg.cc b/vepg.cc
index 7b29111bc5d45c6047e3d5122419c6345cb84acd..71609d0e4b381706a0081f94c7447c82501e6758 100644 (file)
--- a/vepg.cc
+++ b/vepg.cc
@@ -346,7 +346,7 @@ void VEpg::drawData()
   Timers::getInstance()->setTimerT(this, 1, dt);
 }
 
-void VEpg::timercall(int clientReference)
+void VEpg::timercall(int /*clientReference*/)
 {
   drawData();
   boxstack->update(this);
index 76491a1c2d5dede13fc9e0ffd2d3ebd4257d6048..ad91656b772f834a858c5b7f6b24aea946aceb08 100644 (file)
@@ -88,7 +88,7 @@ void VPictureBanner::draw()
   }
 }
 
-int VPictureBanner::handleCommand(int command)
+int VPictureBanner::handleCommand(int /*command*/)
 {
   //don not handle commands - leave this to the picture viewer
   return 0;
index 0a59671e170cae6d4ae36ba10da92e82b2f6bd67..7f49b27ff88027536f8a3fe7e42e00e7a4742446 100644 (file)
@@ -42,8 +42,9 @@ class VRecordingList : public TBBoxx
     VRecordingList();
     virtual ~VRecordingList();
 
-
+    using TBBoxx::draw;
     virtual void draw(bool doIndexPop = false)=0;
+
     int handleCommand(int command);
     void processMessage(Message* m);
     bool load();
index b4e990bccb3bec83ce7e03315244266072d8a0fb..9ed10d85b2fb6235f856082d139c92f0656795f5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright 2004-2007 Chris Tallon
+    Copyright 2004-2020 Chris Tallon
 
     This file is part of VOMP.
 
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with VOMP; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+    along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-#include "vrecordinglistadvanced.h"
+#include <cstdio>
+#include <sstream>
 
 #include "recman.h"
 #include "directory.h"
 #include "seriesinfo.h"
 #include "staticartwork.h"
 
-#include <sstream>
+#include "vrecordinglistadvanced.h"
 
 
 VRecordingListAdvanced::VRecordingListAdvanced()
 {
-       setSize(640, 500); //old   setSize(570, 420);
-       createBuffer();
-
-       setPosition(40, 40);
-
-       setTitleBarOn(1);
-       setTitleBarColour(DrawStyle::TITLEBARBACKGROUND);
-    TVMediaInfo *info= new TVMediaInfo();
-    info->setStaticArtwork(sa_recordings);
-    setTitleBarIcon(info);
-
-       sl.setPosition(10, 30 + 5);
-       sl.setSize(area.w*42/100 - 20, area.h - 30 - 15 - 30);
-       sl.setLinesPerOption(2.4f);
-       add(&sl);
-
-       Region slarea=sl.getRegionR();
-
-       epg.setParaMode(true);
-       epg.setPosition(slarea.x  +slarea.w+10 ,30+5);
-       epg.setSize(area.w -slarea.x -slarea.w -10, area.h - 30 - 15 - 30);
-       add(&epg);
-       epg.setText("");
-       epg.setBackgroundColour(DrawStyle::VIEWBACKGROUND);
-
-       epgTVmedia.setPosition(epg.getRegionR().w-100-10,10);
-       epgTVmedia.setSize(100,(UINT)(150/Osd::getInstance()->getPixelAspect()));
-       epg.add(&epgTVmedia);
-
+  setSize(640, 500);
+  createBuffer();
+
+  setPosition(40, 40);
+
+  setTitleBarOn(1);
+  setTitleBarColour(DrawStyle::TITLEBARBACKGROUND);
+  TVMediaInfo* info = new TVMediaInfo();
+  info->setStaticArtwork(sa_recordings);
+  setTitleBarIcon(info);
+
+  sl.setPosition(10, 30 + 5);
+  sl.setSize(area.w*42/100 - 20, area.h - 30 - 15 - 30);
+  sl.setLinesPerOption(2.4f);
+  add(&sl);
+
+  Region slarea = sl.getRegionR();
+
+  epg.setParaMode(true);
+  epg.setPosition(slarea.x  +slarea.w+10 ,30+5);
+  epg.setSize(area.w -slarea.x -slarea.w -10, area.h - 30 - 15 - 30);
+  add(&epg);
+  epg.setText("");
+  epg.setBackgroundColour(DrawStyle::VIEWBACKGROUND);
+
+  epgTVmedia.setPosition(epg.getRegionR().w-100-10,10);
+  epgTVmedia.setSize(100, static_cast<UINT>(150/Osd::getInstance()->getPixelAspect()));
+  epg.add(&epgTVmedia);
 }
 
 VRecordingListAdvanced::~VRecordingListAdvanced()
@@ -104,7 +103,7 @@ void VRecordingListAdvanced::drawData(bool doIndexPop)
   for (i = dirList->begin(); i != dirList->end(); i++)
   {
     currentSubDir = *i;
-    SNPRINTF(tempA, 299, tr("\t%s \n \t <dir> %lu/%lu"),  currentSubDir->name, currentSubDir->getNumNewRecordings(), currentSubDir->getNumRecordings());
+    SNPRINTF(tempA, 300, tr("\t%s \n \t <dir> %lu/%lu"),  currentSubDir->name, currentSubDir->getNumNewRecordings(), currentSubDir->getNumRecordings());
 
     TVMediaInfo *info=new TVMediaInfo();
     if (currentSubDir->recList.begin() != currentSubDir->recList.end())
@@ -126,15 +125,12 @@ void VRecordingListAdvanced::drawData(bool doIndexPop)
   for (j = recList->begin(); j != recList->end(); j++)
   {
     currentRec = *j;
-    time_t recStartTime = (time_t)currentRec->getStartTime();
+    time_t recStartTime = static_cast<time_t>(currentRec->getStartTime());
     LOCALTIME_R(&recStartTime, &btime);
-//NMT does not like this too!
-       //#ifndef _MSC_VER
-//    strftime(tempA, 299, "%0d/%0m %0H:%0M ", &btime);
-//#else
     strftime(tempA, 299, "%d/%m/%y %H:%M ", &btime);
-//#endif
-    sprintf(tempB, "%c\t%s\n \t%s",  (currentRec->getNew() ? '*': ' '), currentRec->getProgName(),tempA);
+    int check = SNPRINTF(tempB, 300, "%c\t%s\n \t%s",  (currentRec->getNew() ? '*': ' '), currentRec->getProgName(), tempA);
+    if ((check < 0) || (check > 299)) Log::getInstance()->log("VRecordingsListAdvanced", Log::ERR, "String too big");
+
     // New TVMedia stuff
     TVMediaInfo *info= new TVMediaInfo();
     info->setPosterThumb(currentRec->getFileName());
@@ -163,7 +159,7 @@ void VRecordingListAdvanced::draw(bool doIndexPop)
     if (recman->isSubDir())
     {
       char title[300];
-      SNPRINTF(title, 299, tr("Recordings - %s"), recman->getCurDirName());
+      SNPRINTF(title, 300, tr("Recordings - %s"), recman->getCurDirName());
       setTitleText(title, 364);
     }
     else
@@ -173,7 +169,6 @@ void VRecordingListAdvanced::draw(bool doIndexPop)
     drawData(doIndexPop);
   }
 
-
   TBBoxx::draw();
 
   if (loading)
@@ -184,7 +179,7 @@ void VRecordingListAdvanced::draw(bool doIndexPop)
   {
     char freeSpace[50];
     int gigFree = recman->getFreeSpace() / 1024;
-    SNPRINTF(freeSpace, 49, tr("%lu%% used, %iGB free"), recman->getUsedPercent(), gigFree);
+    SNPRINTF(freeSpace, 50, tr("%lu%% used, %iGB free"), recman->getUsedPercent(), gigFree);
     drawTextRJ(freeSpace, 560+70, 5, DrawStyle::LIGHTTEXT);
     // Symbols
 
@@ -220,7 +215,7 @@ void VRecordingListAdvanced::doShowingBar()
   rectangle(area.w/2-65, area.h-115, 180, 25, DrawStyle::VIEWBACKGROUND);
 #endif
   char showing[200];
-  sprintf(showing, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
+  SNPRINTF(showing, 200, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
   drawText(showing, area.w/2-65, area.h-35, DrawStyle::LIGHTTEXT);
 }
 
@@ -286,7 +281,7 @@ void VRecordingListAdvanced::updateSelection()
                        {
                                currentRec = *j;
 
-                               time_t recStartTime = (time_t)currentRec->getStartTime();
+                               time_t recStartTime = static_cast<time_t>(currentRec->getStartTime());
                                LOCALTIME_R(&recStartTime, &btime);
                                strftime(tempA, 299, "%d/%m/%y %H:%M ", &btime);
 
index 1c4028c025c8ad8d003e1b2513b6734fc5484817..c55edb676024737051d8c6ce84edc391e3261ee4 100644 (file)
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with VOMP; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+    along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 #ifndef VRECORDINGLIST_ADVANCED_H
 #define VRECORDINGLIST_ADVANCED_H
 
-
-
-#include "vrecordinglist.h"
 #include "wtextbox.h"
 #include "wtvmedia.h"
+#include "vrecordinglist.h"
 
 class VRecordingListAdvanced : public VRecordingList
 {
@@ -33,7 +30,9 @@ class VRecordingListAdvanced : public VRecordingList
     VRecordingListAdvanced();
     virtual ~VRecordingListAdvanced();
 
+    using TBBoxx::draw; // Signal the compiler we are intentionally overriding the draw() virtual with different args
     void draw(bool doIndexPop = false);
+
     bool load();
     void drawData(bool doIndexPop = false);
 
@@ -44,7 +43,6 @@ class VRecordingListAdvanced : public VRecordingList
 
     WTextbox epg;
     WTVMedia epgTVmedia;
-
 };
 
 #endif
index 7f92a23d05fdeec7c4044d42da16a7333c31b661..b5775961002aa8de067bbc64ff3668afd96d81eb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright 2004-2007 Chris Tallon
+    Copyright 2004-2020 Chris Tallon
 
     This file is part of VOMP.
 
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with VOMP; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+    along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-#include "vrecordinglistclassic.h"
-
 #include "recman.h"
 #include "directory.h"
 #include "recording.h"
@@ -38,6 +35,8 @@
 #include "vinfo.h"
 #include "log.h"
 
+#include "vrecordinglistclassic.h"
+
 VRecordingListClassic::VRecordingListClassic()
 {
   setSize(570, 420);
@@ -84,7 +83,7 @@ void VRecordingListClassic::drawData(bool doIndexPop)
   for (i = dirList->begin(); i != dirList->end(); i++)
   {
     currentSubDir = *i;
-    SNPRINTF(tempA, 299, tr("<dir> %lu/%lu\t \t%s"), currentSubDir->getNumNewRecordings(), currentSubDir->getNumRecordings(), currentSubDir->name);
+    SNPRINTF(tempA, 300, tr("<dir> %lu/%lu\t \t%s"), currentSubDir->getNumNewRecordings(), currentSubDir->getNumRecordings(), currentSubDir->name);
     currentSubDir->index = sl.addOption(tempA, 0, first);
     first = 0;
   }
@@ -96,15 +95,11 @@ void VRecordingListClassic::drawData(bool doIndexPop)
   for (j = recList->begin(); j != recList->end(); j++)
   {
     currentRec = *j;
-    time_t recStartTime = (time_t)currentRec->getStartTime();
+    time_t recStartTime = static_cast<time_t>(currentRec->getStartTime());
     LOCALTIME_R(&recStartTime, &btime);
-//NMT does not like this too!
-       //#ifndef _MSC_VER
-//    strftime(tempA, 299, "%0d/%0m %0H:%0M ", &btime);
-//#else
-    strftime(tempA, 299, "%d/%m %H:%M ", &btime);
-//#endif
-    sprintf(tempB, "%s\t%c\t%s", tempA, (currentRec->getNew() ? '*': ' '), currentRec->getProgName());
+    strftime(tempA, 300, "%d/%m %H:%M ", &btime);
+    int check = SNPRINTF(tempB, 300, "%s\t%c\t%s", tempA, (currentRec->getNew() ? '*': ' '), currentRec->getProgName());
+    if ((check < 0) || (check > 299)) Log::getInstance()->log("VRecordingListClassic", Log::ERR, "String too big");
       
     currentRec->index = sl.addOption(tempB, 0, first);
     first = 0;
@@ -131,7 +126,7 @@ void VRecordingListClassic::draw(bool doIndexPop)
     if (recman->isSubDir())
     {
       char title[300];
-      SNPRINTF(title, 299, tr("Recordings - %s"), recman->getCurDirName());
+      SNPRINTF(title, 300, tr("Recordings - %s"), recman->getCurDirName());
       setTitleText(title, 364);
     }
     else
@@ -150,7 +145,7 @@ void VRecordingListClassic::draw(bool doIndexPop)
   {
     char freeSpace[50];
     int gigFree = recman->getFreeSpace() / 1024;
-    SNPRINTF(freeSpace, 49, tr("%lu%% used, %iGB free"), recman->getUsedPercent(), gigFree);
+    SNPRINTF(freeSpace, 50, tr("%lu%% used, %iGB free"), recman->getUsedPercent(), gigFree);
     drawTextRJ(freeSpace, 560, 5, DrawStyle::LIGHTTEXT);
     // Symbols
 
@@ -186,7 +181,7 @@ void VRecordingListClassic::doShowingBar()
   rectangle(220, 385, 180, 25, DrawStyle::VIEWBACKGROUND);
 #endif
   char showing[200];
-  sprintf(showing, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
+  SNPRINTF(showing, 200, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
   drawText(showing, 220, 385, DrawStyle::LIGHTTEXT);
 }
 
index 9676c590ab1e9fdc9b6be6b87d0fdc5839170001..2d056ca526caa2c154a87aff1363f8c5aa680358 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright 2004-2005 Chris Tallon
+    Copyright 2004-2020 Chris Tallon
 
     This file is part of VOMP.
 
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with VOMP; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+    along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 #ifndef VRECORDINGLIST_CLASSIC_H
 #define VRECORDINGLIST_CLASSIC_H
 
-
-
 #include "vrecordinglist.h"
 
-
 class VRecordingListClassic : public VRecordingList
 {
   public:
     VRecordingListClassic();
     virtual ~VRecordingListClassic();
 
+    using TBBoxx::draw;
     void draw(bool doIndexPop = false);
+
     bool load();
     void drawData(bool doIndexPop = false);
 
   protected:
     void quickUpdate();
     void doShowingBar();
-
 };
 
 #endif
index 6e2e6e36691999696309450687f1a507c30b44b9..7355467591e39595ab34bb72c350e947f9961bb0 100644 (file)
@@ -50,7 +50,7 @@ void VScreensaver::draw()
   threadStart();
 }
 
-int VScreensaver::handleCommand(int command)
+int VScreensaver::handleCommand(int /*command*/)
 {
   threadCancel();
   return 4;
index b8eb7132a5394ecc5f7d5d50d581701935dd507c..c96c8b038b2bc4b936edd8e39c05693e0307b70a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright 2004-2005 Chris Tallon
+    Copyright 2004-2020 Chris Tallon
 
     This file is part of VOMP.
 
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with VOMP; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+    along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-#include "vtimerlist.h"
+#include <stdio.h>
+#include <string.h>
+#include <cstdio>
+#include <vector>
 
 #include "message.h"
 #include "input.h"
 #include "vtimeredit.h"
 #include "command.h"
 #include "boxstack.h"
-#include "vdr.h"
 #include "vinfo.h"
 #include "log.h"
 #include "staticartwork.h"
 
+#include "vtimerlist.h"
+
 VTimerList::VTimerList()
 {
-  recTimerList = NULL;
-
   clockRegion.x = 420;
   clockRegion.y = 0;
   clockRegion.w = 150;
   clockRegion.h = 30;
 
-
-
-  flipflop = true;
-
   setSize(570, 420);
   createBuffer();
 
@@ -151,9 +148,10 @@ bool VTimerList::load()
   {
     recTimer = (*recTimerList)[i];
     time_t rectime = recTimer->startTime;
-    LOCALTIME_R((time_t*)&rectime, &btime);
+    LOCALTIME_R(&rectime, &btime);
     strftime(strA, 299, "%d/%m %H:%M ", &btime);
-    SNPRINTF(strB, 299, "%s\t%s", strA, recTimer->getName());
+    int check = SNPRINTF(strB, 300, "%s\t%s", strA, recTimer->getName());
+    if ((check < 0) || (check > 299)) Log::getInstance()->log("VTimerList", Log::ERR, "String too big");
     sl.addOption(strB, recTimer, first);
     first = 0;
   }
@@ -296,7 +294,7 @@ int VTimerList::handleCommand(int command)
     case Input::OK:
     {
       RecTimer* recTimer = NULL;
-      if (recTimerList) recTimer = (RecTimer*)sl.getCurrentOptionData();
+      if (recTimerList) recTimer = reinterpret_cast<RecTimer*>(sl.getCurrentOptionData());
       if (recTimer == NULL) return 2;
 
       VTimerEdit* v = new VTimerEdit(recTimer);
@@ -339,7 +337,7 @@ void VTimerList::processMessage(Message* m)
   }
   else if (m->message == Message::DELETE_SELECTED_TIMER)
   {
-    RecTimer* recTimer = (RecTimer*)sl.getCurrentOptionData();
+    RecTimer* recTimer = reinterpret_cast<RecTimer*>(sl.getCurrentOptionData());
     if (recTimer == NULL) return;
     Log::getInstance()->log("VTimerList", Log::DEBUG, "Got timer to delete");
 
index 8bd0d3b35e3a47cc929bc57fc8f56ee7a3494001..21219bf6e5bae2391da3c5cdeba1b1161ee00efc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright 2004-2005 Chris Tallon
+    Copyright 2004-2020 Chris Tallon
 
     This file is part of VOMP.
 
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with VOMP; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+    along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 #ifndef VTIMERLIST_H
 #define VTIMERLIST_H
 
-#include <stdio.h>
-#include <string.h>
-#include <vector>
-
+#include "vdr.h"
 #include "tbboxx.h"
 #include "timerreceiver.h"
-#include "vdr.h"
 #include "wselectlist.h"
 #include "region.h"
 
@@ -47,20 +42,17 @@ class VTimerList : public TBBoxx, public TimerReceiver
     void draw();
 
   private:
-    RecTimerList* recTimerList;
-
-    WSelectList sl;
-
     void drawClock();
     void drawShowing();
     void drawData();
     void drawIndicators();
     void quickUpdate();
 
+    RecTimerList* recTimerList{};
+    WSelectList sl;
+    bool flipflop{true};
     Region clockRegion;
     Region indicatorsRegion;
-
-    bool flipflop;
 };
 
 #endif