mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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:
parent
114b3d9d47
commit
75767c456a
11 changed files with 100 additions and 75 deletions
|
|
@ -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
15
core/applicationstate.cpp
Normal 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
21
core/applicationstate.h
Normal 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
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue