-- SPDX-License-Identifier: GPL-3.0-or-later
-- SPDX-FileCopyrightText: Copyright 2023 Stephen Merrony
with Ada.Containers; use Ada.Containers;
with Ada.Containers.Vectors;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Interfaces; use Interfaces;
with TOML;
package Config is
Default_Max_Tabbed : constant Positive := 7;
-- Unless otherwise specified in the configuration, this is the
-- maximum number of tabs before we switch to a dropdown selector.
type Port_T is range 1 .. 65535;
type Tabswitch_T is (Unset, Dropdown, Tabs);
type Keypadder_Conf_T is record
Port : Port_T;
Tabswitch : Tabswitch_T := Unset;
end record;
type Up_Down_T is (Up, Down);
type Send_Event_T is record
-- Our internal representation of what needs to be sent
-- as a USB event.
Up_Down : Up_Down_T;
Value : Unsigned_16;
end record;
package Event_Vectors is new
Ada.Containers.Vectors (Index_Type => Natural, Element_Type => Send_Event_T);
type Key_T is record
Label : Unbounded_String;
Send : Unbounded_String; -- the undecoded string from the TOML
Send_Events : Event_Vectors.Vector;
Colspan,
Rowspan : Natural := 0;
Bg_Colour : Unbounded_String := Null_Unbounded_String;
end record;
package Key_Vectors is new
Ada.Containers.Vectors (Index_Type => Positive, Element_Type => Key_T);
type Tab_T is record
Label : Unbounded_String;
Columns : Natural := 0;
Fontsize : Unbounded_String := Null_Unbounded_String;
Keys : Key_Vectors.Vector;
end record;
package Tab_Vectors is new
Ada.Containers.Vectors (Index_Type => Positive, Element_Type => Tab_T);
type Conf_T is record
Keypadder_Conf : Keypadder_Conf_T;
Tabs : Tab_Vectors.Vector;
end record;
Conf : Conf_T;
function Read_And_Check_Config (Filename : String) return TOML.Read_Result
with Pre => (Filename'Length > 0);
function Load_Config_File (Filename : String; Verbose : Boolean := False) return Boolean
with Pre => (Filename'Length > 0);
Could_Not_Parse,
Duplicate_Configuration,
Incomplete_Configuration,
Invalid_Value,
Too_Many_Keys, Too_Many_Tabs,
Unknown_Configuration_Item,
Unknown_Key : exception;
end Config;