Imports System
Public Class C_Epole
    'Structure Str_Alllabels '레이블들을 저장한다.
    '    Dim ctl As CEpole.C_label
    '    Dim desc As String
    'End Structure
    Enum E_DesignMode
        Shape = 1
        Text = 0
    End Enum

    Enum E_PatternType
        None = 0
        Length = 1
        Character = 2
    End Enum
    Enum E_LineType
        Union = 0
        Separate = 1
        sum = 2
        None = -1
    End Enum
    Enum E_PaperOrient
        세로 = 0
        가로 = 1
    End Enum
    Enum E_useNotUse
        사용 = 1
        사용안함 = 0
    End Enum
    Enum E_Dummytype
        현재복사 = 0
        다음출력 = 1
    End Enum


    Public Enum EQR_Incoding
        AlphaNumeric
        Numeric
        [Byte]
    End Enum

    Public Enum EQR_Version
        v1
        v2
        v3
        v4
        v5
        v6
        v7
        v8
        v9
        v10
        v11
        v12
        v13
        v14
        v15
        v16
        v17
        v18
        v19
        v20
        v21
        v22
        v23
        v24
        v25
        v26
        v27
        v28
        v29
        v30
        v31
        v32
        v33
        v34
        v35
        v36
        v37
        v38
        v39
        v40
    End Enum

    Public Enum EQR_CLEVE
        L
        M
        Q
        H
    End Enum

    Structure S_FullLable
        Dim Desc As String                 '//레이블의설명
        Dim Si As Short                     '//레이블의 시작인덱스 alllabels 의 오프셋이다.
        Dim Ei As Short                     '//레이블의 종료인덱스  alllabels 의 오프셋이다.
        Dim text As String                  '//전체문자열이 들어있음
        Dim Pattern As String              '//패턴네임을 적는다.
        Dim Tag As String                  '//개체태그입력
        Dim LineType As E_LineType      '//0혼함 1분리 2통합
        Dim NumType As String           '//번호형식 9,9,9 의 형식을 보통띈다.
        Dim LineMaxChar As Short        '//한줄에 최대몇자를 기본으로할때 혼합시 줄의 갯수에 사용한다.
        Dim ApplyPattern As E_PatternType        '//0없음 1길이 2문자
        Dim Moved As Boolean           '//이동했는지
        Dim CheckBox As System.Windows.Forms.ToolStripMenuItem    '//이것과 연계된 체크박스
        ' Dim SeparatePattern As Boolean '//개별문자에대한 패턴을 적용할지 여부
        Dim Fixed As Boolean              '//고정문자열이있는지
    End Structure

    Structure SStyle
        Dim Desc As String
        Dim File As String
        Dim Backimg As String
        Dim MarginX As Integer
        Dim MarginY As Integer
        Dim ScaleX As Single
        Dim ScaleY As Single
        Dim PrintFontOffset As Integer
        Dim Viewimage As Boolean
        Dim LandScape As Boolean

        Dim Dummy As Boolean
        Dim DummyCnt As Short
        Dim Dummytype As Short
        Dim dummmyx As Short
        Dim dummmyy As Short

        Dim visible As Boolean '//190223
        Dim RowDivCnt As Short '170715 
        Dim rowdivx As Short
        Dim rowdivy As Short
        Dim DrawItemRepeat As Boolean

        Dim picstyle As Short
        Dim CanvasX As Integer
        Dim CanvasY As Integer
        Dim Filter As String
        Dim PATTERNTABLE As DataTable
        Dim FixedStyle As Boolean
        Dim PrintRange As String
    End Structure

    Structure SCStyle
        Dim Margin As System.Drawing.Point    '//인쇄여백
        Dim Scale As System.Drawing.Point  '//인쇄확대비율
        Dim Orient As E_PaperOrient    '//종이방향
        Dim DummyMargin As System.Drawing.Point
        Dim Dummy As E_useNotUse
        Dim UseBG As E_useNotUse
        Dim PrnBG As E_useNotUse
        Dim Dummytype As E_Dummytype  '//현재복사,다음출력
    End Structure

    Enum e_EventMessage
        Normal = 0
        Parse = 1
    End Enum
    Enum E_PrintRange
        All = 0
        Current = 1
        Custom = 2
        FixedStyle = 3
    End Enum
    Enum E_DrawType
        Box = 0
        Line = 1
    End Enum
    Structure S_Line
        Dim X As Single
        Dim Y As Single
        Dim X2 As Single
        Dim Y2 As Single
        Dim PenColor As Drawing.Color
        Dim PenWidth As Single
    End Structure
    Structure S_Box
        Dim X As Single
        Dim Y As Single
        Dim Width As Single
        Dim Height As Single
        Dim PenColor As Drawing.Color
        Dim PenWidth As Single
        Dim Radius As Single    '//휘어짐수치
    End Structure
    Structure S_Circle
        Dim X As Single
        Dim Y As Single
        Dim Width As Single
        Dim Height As Single
        Dim PenColor As Drawing.Color
        Dim PenWidth As Single
        'Dim Radius As Single    '//휘어짐수치
    End Structure
    Structure S_Image
        Dim X As Single
        Dim Y As Single
        Dim Width As Single
        Dim Height As Single
        Dim FileName As String
    End Structure

    Structure S_QRCode
        Dim X As Single
        Dim Y As Single
        Dim Width As Single
        Dim Height As Single
        Dim QRData As String    '//표시하고자하는 데이터를 표시 {필드명} 으로 대체가능
        Dim Encoding As Integer
        Dim Version As Integer
        Dim CLeve As Integer
        Dim Size As Integer
        Dim Format As String '//출력포맷
        Dim fColor As System.Drawing.Color
        Dim bColor As System.Drawing.Color
    End Structure

    Structure S_DrawShape
        Dim DrawType As E_DrawType
        Dim DrawObject As Object
        Public Sub New(ByVal DT As E_DrawType, ByVal Obj As Object, ByVal oldtype As Boolean)
            DrawType = DT
            DrawObject = Obj
        End Sub
    End Structure
    Public Shared Function Get_SavePatternString(ByVal 저장대상 As String, ByVal pc As Boolean, ByVal cp As String, ByVal pl As Boolean, ByVal pstr As String, ByVal plen As Short, _
    ByVal pchr As String) As System.Text.StringBuilder

        If pc Then cp = "[문자패턴]"
        If pl Then cp &= "[길이패턴]"
        If cp = "" Then cp = "[패턴없음]"

        Dim Msg As New System.Text.StringBuilder("(" & 저장대상 & ")" & " 패턴을 저장합니다")
        '//문자패턴이 적용되어있다면 문자패턴으로 적용할 것을 궎장하며 그렇지 않은 경우에는 길이패턴이나 문자패턴을 적절히 권장한다.
        '//길이가 5자리이하이고 특수문자(-,;)등이 없는경우에 길이패턴 적용을 권유한다.
        Msg.AppendLine()
        Msg.AppendLine("패턴 저장방법에는 길이,문자가 있습니다")
        Msg.AppendLine("패턴우선순위 : 문자패턴 -> 길이패턴")
        Msg.AppendLine()
        Msg.AppendLine("현재적용된 패턴 : " & cp)

        If pc Then
            Msg.AppendLine()
            Msg.AppendLine(">> 현재 문자패턴이 적용되어있습니다" & vbCrLf & ">> 문자패턴은 가장우선되는 패턴방식입니다")
            Msg.AppendLine(">> 저장시에는 [문자패턴]으로 저장하시기 바랍니다.")
            Msg.AppendLine(">> [길이패턴]으로 저장하는것은 의미가 없습니다")
        ElseIf pl Then
            Msg.AppendLine()
            Msg.AppendLine(">> 현재 길이패턴이 적용되어있습니다" & vbCrLf & ">> 패턴은 길이,문자 둘다 저장이 가능합니다")
        Else
            Msg.AppendLine()
            Msg.AppendLine(">> 적용된 패턴이없습니다")
            Msg.AppendLine(">> 문자수(길이)가 적은 문자의경우 [길이패턴] 저장을 권장합니다")
        End If
        Msg.AppendLine()
        Msg.AppendLine("길이패턴이란? (문자의 길이가 같을떄 적용)")
        Msg.AppendLine("   선택된문자는 " & pstr & " 이며 길이는 = " & plen & " 입니다")
        Msg.AppendLine("   저장을 하면 " & 저장대상 & " 의 길이가 " & plen & vbCrLf & "   인 문자가 오면 패턴이 적용됩니다")

        Msg.AppendLine()
        Msg.AppendLine("문자패턴이란? (같은 형태의 문자일때 적용)")
        Msg.AppendLine("   선택된문자는 " & pstr & " 이며 형태는 = " & pchr & " 입니다")
        Msg.AppendLine("   저장을 하면 " & 저장대상 & " 의 형태가 " & pchr & vbCrLf & "   인 문자가 오면 패턴이 적용됩니다")
        Msg.AppendLine("   * 1=숫자,0=알파벳문자,H=한글문자,;=특수문자(;),-=특수문자(-)")

        Msg.AppendLine()
        Msg.AppendLine("패턴우선순위란? (패턴이 중복적용되었을때 높은우선순위가 적용)")
        Msg.AppendLine("   길이,문자 패턴이 둘다 적용되어있을경우 우선순위가 높은")
        Msg.AppendLine("   문자패턴이 최종적으로 적용이 됩니다.(길이패턴은 무시됨)")

        Msg.AppendLine()
        Msg.AppendLine("# 길이패턴으로 저장하시겠습니까?")
        Msg.AppendLine("# 예) 길이저장 , 아니오) 문자저장 , 취소) 취소")
        If pc Then Msg.AppendLine("# 문자패턴이 적용되었으므로 [길이패턴] 저장은 의미가 없습니다")
        Return Msg
    End Function

    Public Shared Sub GetAllsection(ByRef stylelist() As SStyle, ByVal FILENAME As String, ByVal CurIdx As Short, ByVal OldType As Boolean)
        '//이제 OLD는 사용하징낳는다 3월14일 변경한다.
        If OldType = False Then
            FileToDataTable.ReadFile_New(stylelist, FILENAME, CurIdx)
        Else
            'MsgBox("구파일" & FILENAME)
            FileToDataTable.ReadFile_OLD(stylelist, FILENAME, CurIdx)
        End If
    End Sub

    Public Shared Function PATTERN_ENC(ByVal SRCSTR As String, Optional hsave As Boolean = False) As String
        Dim MSG As New System.Text.StringBuilder
        For Each A As Char In SRCSTR.ToCharArray   '//모든문자의 숫자번호를 판별한다.

            If hsave Then
                If A = ";" Then '//구분자라면
                    MSG.Append(";")
                ElseIf A = "H" Then '//h문자별도 처리해줌
                    MSG.Append("Z")
                ElseIf A = "-" Then
                    MSG.Append("-")
                ElseIf Char.IsNumber(A) Then
                    MSG.Append("1")
                ElseIf Asc(A) < 0 Then
                    MSG.Append("H")
                Else
                    MSG.Append("0")
                End If
            Else
                If A = ";" Then '//구분자라면
                    MSG.Append(";")
                ElseIf A = "-" Then
                    MSG.Append("-")
                ElseIf Char.IsNumber(A) Then
                    MSG.Append("1")
                ElseIf Asc(A) < 0 Then
                    MSG.Append("H")
                Else
                    MSG.Append("0")
                End If
            End If
          
        Next
        Return MSG.ToString
    End Function

    Public Shared Function GetPrintersName() As ArrayList
        Dim value As Drawing.Printing.PrinterSettings.StringCollection = System.Drawing.Printing.PrinterSettings.InstalledPrinters
        Dim Retval As New ArrayList
        For i As Integer = 0 To value.Count - 1
            Retval.Add(value(i))
        Next
        Return Retval
    End Function

    ''' <summary>
    ''' 데이터와 출력장수(전체,현재,범위,고정스타일)를 판단하여 T,F 반환한다.
    ''' </summary>
    ''' <param name="Dv"></param>
    ''' <param name="CurrPos"></param>
    ''' <param name="PrintArray"></param>
    ''' <param name="RangeType"></param>
    ''' <param name="UserRange"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function Set_PrnRange(ByRef Dv As DataView, ByVal CurrPos As Integer, ByRef PrintArray() As Integer, ByVal RangeType As E_PrintRange, ByVal UserRange As String) As Boolean '//범위내의 페이지번호와 일치하는 번호를 찾아서 배열에 할당한다.
        Dim Number As Integer = 0
        Dim FindNum As Boolean = False
        'printindex = 0   '//배열의 첫번으로 출력을 준비한다.

        ReDim PrintArray(0)
        PrintArray(0) = 1

        If RangeType = E_PrintRange.Custom AndAlso UserRange = "" Then RangeType = E_PrintRange.Current

        ' MsgBox("rane : " & Dv.Count & "curpos:" & CurrPos)

        Select Case RangeType
            Case E_PrintRange.FixedStyle  '//고정스타일이라면 userrange 에 할당된 숫자만큼 버퍼를 생성한다.
                If IsNumeric(UserRange) = False Then
                    MsgBox("출력장수에 숫자만 입력하세요", MsgBoxStyle.Critical, "확인")
                    Return False
                End If
                ReDim PrintArray(Val(UserRange) - 1)
                For i As Integer = 0 To Val(UserRange) - 1
                    PrintArray(i) = CurrPos
                Next
            Case E_PrintRange.All
                ReDim PrintArray(Dv.Count - 1)
                For i As Integer = 0 To Dv.Count - 1
                    PrintArray(i) = i
                Next
            Case E_PrintRange.Current
                '  MsgBox("현재")
                ReDim PrintArray(0)
                PrintArray(0) = CurrPos   '/현재카운트보다 1작다 배열은 0부터 시작하기떄문에
            Case E_PrintRange.Custom
                Dim buff As String = UserRange
                ReDim PrintArray(0) : PrintArray(0) = -1
                '//먼저 -가 있나없나 판단해서 한페이지용인지 범위용인지 구분한다.
                If buff.IndexOf("-") >= 0 Then    '//범위이다.
                    Dim SubBuff() As String = buff.Split("-")
                    Dim Sttnum As Integer = CInt(SubBuff(0))  '//시작
                    Dim endnum As Integer = CInt(SubBuff(1)) '//종료값

                    For SI As Integer = 0 To endnum - Sttnum    '//범위갯수만큼 돈다
                        FindNum = False
                        Number = CInt(Sttnum + SI)   '//페이지만 적엇을 것이므로
                        For ni As Integer = 0 To Dv.Count - 1  '//현재뷰의 모든데이터를 가지고 검색한다 좌->우 순차검색
                            If Number = Dv(ni).Row("번호") Then
                                If PrintArray(0) = -1 Then '//처음데이터이므로
                                    PrintArray(0) = ni
                                Else   '//처음이아니므로 배열을 증가시키고 기입한다.
                                    ReDim Preserve PrintArray(PrintArray.GetUpperBound(0) + 1)   '//배열1증가
                                    PrintArray(PrintArray.GetUpperBound(0)) = ni
                                End If
                                FindNum = True
                                Exit For
                            End If
                        Next
                    Next

                Else   '//페이지번호만 적었을때다    
                    If IsNumeric(buff) Then
                        Number = CInt(buff)   '//페이지만 적엇을 것이므로
                        For ni As Integer = 0 To Dv.Count - 1  '//현재뷰의 모든데이터를 가지고 검색한다 좌->우 순차검색
                            If Number = Dv(ni).Row("번호") Then
                                PrintArray(0) = ni
                                Exit For
                            End If
                        Next
                    Else
                        MsgBox("범위(-)를 제외하고 숫자만 입력하세요", MsgBoxStyle.Critical, "입력오류")
                    End If
                End If
        End Select
        If PrintArray(0) = -1 Then '//배열에 아무것도 없다면
            Return False
        Else
            Return True
        End If
    End Function

End Class
