65 lines
1.6 KiB
C
65 lines
1.6 KiB
C
/*
|
|
* datesel.h - Date selector
|
|
* Copyright (C) 2024 Alexander Rosenberg
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License as published by the Free Software
|
|
* Foundation, either version 3 of the License, or (at your option) any later
|
|
* version. See the LICENSE file for more information.
|
|
*/
|
|
#ifndef INCLUDED_DATESEL_H
|
|
#define INCLUDED_DATESEL_H
|
|
|
|
#include "../util.h"
|
|
#include "screen.h"
|
|
|
|
typedef enum {
|
|
DATE_SEL_YEAR,
|
|
DATE_SEL_MONTH,
|
|
DATE_SEL_DAY,
|
|
} DateSelectionStage;
|
|
|
|
typedef struct {
|
|
int year;
|
|
int month;
|
|
int day;
|
|
DateSelectionStage stage;
|
|
DateSelectionStage max_stage;
|
|
UtilPeriod limit_period;
|
|
UtilDate start_time;
|
|
UtilDate end_time;
|
|
} DateSelection;
|
|
|
|
typedef enum {
|
|
DATE_SEL_BACK,
|
|
DATE_SEL_CONTINUE,
|
|
DATE_SEL_DONE,
|
|
DATE_SEL_ERROR
|
|
} DateSelectionState;
|
|
|
|
/*
|
|
* Initialize a DateSelection. LIMIT_PERIOD is the most specific field
|
|
* to select and the period by which to select.
|
|
*/
|
|
void date_sel_init(DateSelection *ds, UtilPeriod limit_period);
|
|
|
|
/*
|
|
* Reset the date on DS.
|
|
*/
|
|
void date_sel_reset(DateSelection *ds);
|
|
|
|
/*
|
|
* Set the LIMIT_PERIOD for DS.
|
|
*/
|
|
void date_sel_set_period(DateSelection *ds, UtilPeriod limit_period);
|
|
|
|
/*
|
|
* Dispatch a DateSelection by processing STATE to continue the selection.
|
|
* Return: weather the user backed out, is still working, or is done
|
|
*/
|
|
DateSelectionState date_sel_dispatch(DateSelection *ds,
|
|
SensorState *state,
|
|
const char *label);
|
|
|
|
#endif
|