Imports System.ComponentModel

Module ClassControlProperties
    ' +++++ ABSTRACT CLASSES +++++
    Public MustInherit Class BaseProperties
        Private _id As Integer
        Private _size As Size
        Private _location As Point
        Private _name As String

        <CategoryAttribute("ID")>
        <DescriptionAttribute("Gibt die eindeutige ID des Elements an.")>
        <ReadOnlyAttribute(True)>
        Public Property ID() As Integer
            Get
                Return _id
            End Get
            Set(value As Integer)
                _id = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt die Größe des Elements an.")>
        Public Property Size() As Size
            Get
                Return _size
            End Get
            Set(value As Size)
                _size = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt die Position des Elements an.")>
        Public Property Location() As Point
            Get
                Return _location
            End Get
            Set(value As Point)
                _location = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den internen Namen des Elements an.")>
        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(value As String)
                _name = value
            End Set
        End Property
    End Class

    Public MustInherit Class CommonProperties
        Inherits BaseProperties

        Private _id As Integer
        ' Ansichtseinstellungen
        Private _size As Size
        Private _location As Point
        Private _name As String = ""
        Private _column_title = ""
        ' Sonstige Einstellungen
        Private _required As Boolean = False
        Private _read_only As Boolean = False
        ' Datenbank Einstellungen
        Private _sql_connection As String = ""
        Private _sql_command As String = ""
        ' Schrift Einstellungen
        Private _font As Font
        Private _font_color As Color

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Spaltentitel des Elements an.")>
        Public Property ColumnTitle() As String
            Get
                Return _column_title
            End Get
            Set(value As String)
                _column_title = value
            End Set
        End Property

        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt an ob dieses Element benötigt wird um die Eingabe abzuschließen.")>
        Public Property IsRequired() As Boolean
            Get
                Return _required
            End Get
            Set(value As Boolean)
                _required = value
            End Set
        End Property

        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt an, ob dieses Element nur lesbar ist.")>
        Public Property IsReadOnly() As Boolean
            Get
                Return _read_only
            End Get
            Set(value As Boolean)
                _read_only = value
            End Set
        End Property

        <CategoryAttribute("Datenbank Einstellungen")>
        <DescriptionAttribute("Gibt die Datenbankverbindung für dieses Element an.")>
        Public Property SQLConnection() As SQLValue
            Get
                Return New SQLValue(_sql_connection)
            End Get
            Set(value As SQLValue)
                _sql_connection = value.Value
            End Set
        End Property

        <CategoryAttribute("Datenbank Einstellungen")>
        <DescriptionAttribute("Gibt die Datenbank-Abfrage für dieses Element an. Es können @RECORD_ID und @FORM_ID als Platzhalter verwendet werden.")>
        Public Property SQLCommand() As SQLValue
            Get
                Return New SQLValue(_sql_command)
            End Get
            Set(value As SQLValue)
                _sql_command = value.Value
            End Set
        End Property
        <CategoryAttribute("Schrift Einstellungen")>
        <DescriptionAttribute("Gibt die Schriftart an.")>
        Public Property Font() As Font
            Get
                Return _font
            End Get
            Set(value As Font)
                _font = value
            End Set
        End Property

        <CategoryAttribute("Schrift Einstellungen")>
        <DescriptionAttribute("Gibt die Schriftfarbe an.")>
        Public Property FontColor() As Color
            Get
                Return _font_color
            End Get
            Set(value As Color)
                _font_color = value
            End Set
        End Property

    End Class

    Public MustInherit Class InputControlProperties
        Inherits CommonProperties
        Private _default_Value As String
        Private _tab_index As Integer
        Private _tab_stop As Boolean
        Private _show_column As Boolean

        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt die Reihenfolge an, in der das Element durch die Tabulatortaste aktiviert wird.")>
        Public Property TabIndex() As Integer
            Get
                Return _tab_index
            End Get
            Set(value As Integer)
                _tab_index = value
            End Set
        End Property
        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt an, ob das Element durch die Tabulartortaste aktiviert werden soll.")>
        Public Property TabStop() As Boolean
            Get
                Return _tab_stop
            End Get
            Set(value As Boolean)
                _tab_stop = value
            End Set
        End Property
        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt den Standardwert dieses Elements an.")>
        <DefaultValue("")>
        Public Property DefaultValue() As String
            Get
                Return _default_Value
            End Get
            Set(value As String)
                _default_Value = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt an, ob das Feld als Spalte im Grid angezeigt wird.")>
        Public Property ShowColumn() As Boolean
            Get
                Return _show_column
            End Get
            Set(value As Boolean)
                _show_column = value
            End Set
        End Property

    End Class
   
    ' +++++ CONTROL CLASSES +++++

    Public Class LabelProperties
        Inherits CommonProperties

        Private _caption As String = ""

        <Browsable(False)>
        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Spaltentitel des Elements an.")>
        Public Overloads Property ColumnTitle() As String
            Get
                Return ""
            End Get
            Set(value As String)
                '_column_title = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Beschreibungstext dieses Elements an.")>
        Public Property Caption() As String
            Get
                Return _caption
            End Get
            Set(value As String)
                _caption = value
            End Set
        End Property
    End Class

    Public Class TextBoxProperties
        Inherits InputControlProperties

        Private _multiline As Boolean
        Private _format As String

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt das Format des Textes an.")>
        Public Property Format() As EnumFormat
            Get
                Return _format
            End Get
            Set(value As EnumFormat)
                _format = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt an, ob das Feld mehrzeilig sein soll.")>
        Public Property Multiline() As Boolean
            Get
                Return _multiline
            End Get
            Set(value As Boolean)
                _multiline = value
            End Set
        End Property
    End Class
    Public Class ComboBoxProperties
        Inherits InputControlProperties

        Private _master_data_id As Integer
        Private _static_list As String
        Private _format As EnumFormat

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt das Format des Textes an.")>
        Public Property Format() As EnumFormat
            Get
                Return _format
            End Get
            Set(value As EnumFormat)
                _format = value
            End Set
        End Property

        <CategoryAttribute("Kontextmenue")>
        Public Property MasterDataId() As Integer
            Get
                Return _master_data_id
            End Get
            Set(value As Integer)
                _master_data_id = value
            End Set
        End Property

        <CategoryAttribute("Daten")>
        <DescriptionAttribute("Eine Liste von statischen Werten, die durch ';' getrennt sind. Überschreibt die Daten aus 'Datenbank-Einstellungen'")>
        Public Property StaticList() As String
            Get
                Return _static_list
            End Get
            Set(value As String)
                _static_list = value
            End Set
        End Property

    End Class
    Public Class DateTimePickerProperties
        Inherits InputControlProperties
    End Class
    Public Class CheckBoxProperties
        Inherits InputControlProperties
        Private _caption As String = ""
        Private _default_value As Boolean = False

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Beschreibungstext dieses Elements an.")>
        Public Property Caption() As String
            Get
                Return _caption
            End Get
            Set(value As String)
                _caption = value
            End Set
        End Property

        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt den Standardwert dieses Elements an.")>
        <DefaultValue(False)>
        Public Overloads Property DefaultValue As Boolean
            Get
                Return _default_value
            End Get
            Set(value As Boolean)
                _default_value = value
            End Set
        End Property
    End Class

    Public Class RadioButtonProperties
        Inherits InputControlProperties

        Private _caption As String = ""
        Private _default_value As Boolean = False


        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Beschreibungstext dieses Elements an.")>
        Public Property Caption() As String
            Get
                Return _caption
            End Get
            Set(value As String)
                _caption = value
            End Set
        End Property

        <CategoryAttribute("Sonstige Einstellungen")>
        <DescriptionAttribute("Gibt den Standardwert dieses Elements an.")>
        <DefaultValue(False)>
        Public Overloads Property DefaultValue As Boolean
            Get
                Return _default_value
            End Get
            Set(value As Boolean)
                _default_value = value
            End Set
        End Property
    End Class

    Public Class DataGridViewProperties
        Inherits CommonProperties
    End Class
    Public Class PictureBoxProperties
        Inherits CommonProperties
    End Class
    Public Class GroupBoxProperties
        Inherits CommonProperties
        Private _caption As String = ""
        Private _back_color As Color

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Beschreibungstext dieses Elements an.")>
        Public Property Caption() As String
            Get
                Return _caption
            End Get
            Set(value As String)
                _caption = value
            End Set
        End Property

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt die Hintergrundfarbe des Elements an.")>
        Public Property BackColor() As Color
            Get
                Return _back_color
            End Get
            Set(value As Color)
                _back_color = value
            End Set
        End Property
    End Class

    ' +++++ FUNCTION CLASSES +++++

    Public Class FunctionAddAppointment
        Inherits BaseProperties

        Private _caption As String
        Private _subject As String
        Private _subject2 As String
        Private _from_date As String
        Private _from_time As String
        Private _to_date As String
        Private _to_time As String
        Private _place As String
        Private _description As String

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Beschreibungstext dieses Elements an.")>
        Public Property Caption() As String
            Get
                Return _caption
            End Get
            Set(value As String)
                _caption = value
            End Set
        End Property

        <CategoryAttribute("Termin Einstellungen")>
        <DescriptionAttribute("Gibt den Betreff des Termins an. Dynamische Werte aus anderen Controls können mit der Syntax [%controlname] eingefügt werden")>
        Public Property Subject() As String
            Get
                Return _subject
            End Get
            Set(value As String)
                _subject = value
            End Set
        End Property

        <CategoryAttribute("Termin Einstellungen")>
        <DescriptionAttribute("Gibt den optionalen zweiten Betreff des Termins an. Dynamische Werte aus anderen Controls können mit der Syntax [%controlname] eingefügt werden")>
        Public Property Subject2() As String
            Get
                Return _subject2
            End Get
            Set(value As String)
                _subject2 = value
            End Set
        End Property

        <CategoryAttribute("Termin Einstellungen")>
        <DescriptionAttribute("Gibt den Ort des Termins an. Dynamische Werte aus anderen Controls können mit der Syntax [%controlname] eingefügt werden")>
        Public Property Place() As String
            Get
                Return _place
            End Get
            Set(value As String)
                _place = value
            End Set
        End Property

        <CategoryAttribute("Termin Einstellungen")>
        <DescriptionAttribute("Gibt die Beschreibung des Termins an. Dynamische Werte aus anderen Controls können mit der Syntax [%controlname] eingefügt werden")>
        Public Property Description() As String
            Get
                Return _description
            End Get
            Set(value As String)
                _description = value
            End Set
        End Property

        <CategoryAttribute("Datums Einstellungen")>
        <DescriptionAttribute("Der Name eines Elements von dem das End-Datum gelesen wird.")>
        Public Property FromDate() As String
            Get
                Return _from_date
            End Get
            Set(value As String)
                _from_date = value
            End Set
        End Property

        <CategoryAttribute("Datums Einstellungen")>
        <DescriptionAttribute("Der Name eines Elements von dem das Start-Datum gelesen wird.")>
        Public Property ToDate() As String
            Get
                Return _to_date
            End Get
            Set(value As String)
                _to_date = value
            End Set
        End Property
    End Class

    Public Class FunctionAddFormData
        Inherits BaseProperties

        Private _caption As String
        Private _form_id As Integer
        Private _screen_id As Integer

        <CategoryAttribute("Ansichtseinstellungen")>
        <DescriptionAttribute("Gibt den Beschreibungstext dieses Elements an.")>
        Public Property Caption() As String
            Get
                Return _caption
            End Get
            Set(value As String)
                _caption = value
            End Set
        End Property

        <CategoryAttribute("Form Einstellungen")>
        <DescriptionAttribute("Gibt die Form-ID der zu öffnenden Form an.")>
        Public Property FormID() As Integer
            Get
                Return _form_id
            End Get
            Set(value As Integer)
                _form_id = value
            End Set
        End Property

        <CategoryAttribute("Form Einstellungen")>
        <DescriptionAttribute("Gibt die Screen-ID der zu öffnenden Form an.")>
        Public Property ScreenID() As Integer
            Get
                Return _screen_id
            End Get
            Set(value As Integer)
                _screen_id = value
            End Set
        End Property
    End Class
End Module
