Turn application state into enum

The application state was encoded in a QByteArray. Thus, there was
no compile-time checking. Typos would lead to silent failures.

Turn the application state into an enum. Use the enum-class construct,
so that the values don't polute the global namespace. Moreover,
this makes them strongly typed, i.e. they don't auto-convert to
integers.

A disadvantage is that the enums now have to be cast to int
explicitly when used to index an array.

Replace two hash-maps in MainWindow to arrays of fixed sizes.

Move the application-state details into their own files.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-05-10 19:51:43 +02:00 committed by Dirk Hohndel
parent 114b3d9d47
commit 75767c456a
11 changed files with 100 additions and 75 deletions

View file

@ -37,6 +37,8 @@ endif()
# compile the core library part in C, part in C++
set(SUBSURFACE_CORE_LIB_SRCS
applicationstate.cpp
applicationstate.h
checkcloudconnection.cpp
checkcloudconnection.h
cloudstorage.cpp

15
core/applicationstate.cpp Normal file
View file

@ -0,0 +1,15 @@
// SPDX-License-Identifier: GPL-2.0
#include "applicationstate.h"
static ApplicationState appState = (ApplicationState)-1; // Set to an invalid value
ApplicationState getAppState()
{
return appState;
}
void setAppState(ApplicationState state)
{
appState = state;
}

21
core/applicationstate.h Normal file
View file

@ -0,0 +1,21 @@
// SPDX-License-Identifier: GPL-2.0
#ifndef APPLICATIONSTATE_H
#define APPLICATIONSTATE_H
// By using an enum class, the enum entries don't polute the global namespace.
// Moreover, they are strongly typed. This means that they are not auto-converted
// to integer types if e.g. used as array-indices.
enum class ApplicationState {
Default,
EditDive,
PlanDive,
EditPlannedDive,
EditDiveSite,
FilterDive,
Count
};
ApplicationState getAppState();
void setAppState(ApplicationState state);
#endif

View file

@ -12,6 +12,7 @@
#include "divecomputer.h"
#include "time.h"
#include "gettextfromc.h"
#include "applicationstate.h"
#include "metadata.h"
#include <sys/time.h>
#include "exif.h"
@ -1362,21 +1363,9 @@ extern "C" void parse_display_units(char *line)
qDebug() << line;
}
static QByteArray currentApplicationState;
QByteArray getCurrentAppState()
{
return currentApplicationState;
}
void setCurrentAppState(const QByteArray &state)
{
currentApplicationState = state;
}
extern "C" bool in_planner()
{
return currentApplicationState == "PlanDive" || currentApplicationState == "EditPlannedDive";
return getAppState() == ApplicationState::PlanDive || getAppState() == ApplicationState::EditPlannedDive;
}
extern "C" enum deco_mode decoMode()

View file

@ -40,8 +40,6 @@ volume_t string_to_volume(const char *str, pressure_t workp);
fraction_t string_to_fraction(const char *str);
int getCloudURL(QString &filename);
bool parseGpsText(const QString &gps_text, double *latitude, double *longitude);
QByteArray getCurrentAppState();
void setCurrentAppState(const QByteArray &state);
void init_proxy();
QString getUUID();
extern const QStringList videoExtensionsList;