Files
pebble/src/fw/applib/ui/action_toggle.h
T

90 lines
2.6 KiB
C

/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "applib/graphics/gtypes.h"
#include "resource/resource_ids.auto.h"
typedef bool (*ActionToggleGetStateCallback)(void *context);
typedef void (*ActionToggleSetStateCallback)(bool enabled, void *context);
typedef enum ActionToggleState {
ActionToggleState_Disabled = 0,
ActionToggleState_Enabled,
ActionToggleStateCount,
} ActionToggleState;
typedef enum ActionToggleDialogType {
ActionToggleDialogType_Prompt = 0,
ActionToggleDialogType_Result,
ActionToggleDialogTypeCount,
} ActionToggleDialogType;
typedef enum ActionTogglePrompt {
ActionTogglePrompt_Auto = 0,
ActionTogglePrompt_NoPrompt,
ActionTogglePrompt_Prompt,
} ActionTogglePrompt;
typedef struct ActionToggleCallbacks {
ActionToggleGetStateCallback get_state;
ActionToggleSetStateCallback set_state;
} ActionToggleCallbacks;
typedef struct ActionToggleImpl {
ActionToggleCallbacks callbacks;
const char *window_name;
union {
struct {
const char *prompt_disable_message;
const char *prompt_enable_message;
};
const char *prompt_messages[ActionToggleStateCount];
};
union {
struct {
const char *result_disable_message;
const char *result_enable_message;
};
const char *result_messages[ActionToggleStateCount];
};
union {
struct {
ResourceId prompt_icon;
ResourceId result_icon;
};
ResourceId icons[ActionToggleDialogTypeCount];
};
bool result_icon_static;
} ActionToggleImpl;
typedef struct ActionToggleConfig {
const ActionToggleImpl *impl;
void *context;
ActionTogglePrompt prompt;
bool set_exit_reason;
} ActionToggleConfig;
//! Pushes either a prompt or result dialog depending on the prompt config option. If a prompt
//! dialog is requested, the result dialog will be pushed if the user confirms the prompt dialog
//! and the new toggled state would be set. Otherwise, a result dialog is unconditionally pushed
//! and the new toggled state is set.
//! @param config The action toggle configuration.
void action_toggle_push(const ActionToggleConfig *config);