using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Janus.Windows.GridEX;
using System.Drawing;
using System.Collections;

namespace IControls_FireManager
{
    // Janus Gridex 관련 함수는 여기 클래스에서 전담한다

    public static class _Gridex
    {
        /* 샘플
            
        // 컬럼 관리 리스트
        List<GridEXColumn> GridEXColumnList = new List<GridEXColumn>();

         // 컬럼 추가
        GridEXColumnList.Add(_Gridex.Column_Add(gridEX_DeviceListInfo,ColumnType.Text,EditType.TextBox,ButtonStyle.NoButton, "test1"));
        GridEXColumnList.Add(_Gridex.Column_Add(gridEX_DeviceListInfo, ColumnType.Text, EditType.TextBox,ButtonStyle.ButtonCell, "test2"));
        GridEXColumnList.Add(_Gridex.Column_Add(gridEX_DeviceListInfo, ColumnType.CheckBox, EditType.CheckBox,ButtonStyle.NoButton, "test3"));

        // 컬럼셋 추가 (컬럼 생성 개수에 맞게)
        GridEXColumnSet gridEXColumnSet = _Gridex.ColumnSet_Add(gridEX_DeviceListInfo, null, null, 3, 400);

        // 컬럼셋 위치 조절
        _Gridex.ColumnSet_AddColumn(gridEX_DeviceListInfo, gridEXColumnSet, "test1", 0);
        _Gridex.ColumnSet_AddColumn(gridEX_DeviceListInfo, gridEXColumnSet, "test2", 1);
        _Gridex.ColumnSet_AddColumn(gridEX_DeviceListInfo, gridEXColumnSet, "test3", 2);

        // 컬럼 사이즈
        _Gridex.Column_Width(GridEXColumnList[0], 200);

        // 컬럼 
        _Gridex.Column_Data_Add(gridEX_DeviceListInfo, true, "test1=1;test2=2;test3=3");
        
        */

        // cyim - 2012.8.13
        //// 
        //// 예제 - 수신기 노드를 선택하면 4가지 타입의 데이타가 표시됩니다 
        ////       -> 텍스트박스(일반) , 체크박스 , 콤보박스, 버튼
        //// 헤더문구는 UI_WORKFRAME_RECEIVER_COLUMNNAME =>"Text;Checkbox;Button;Combobox"; 가 있다고 가정합니다.
        //// 컬럼을 제어할수 있는 GridEXColumnList_Receiver 의 리스트에는 각각 Text;Checkbox;Button;Combobox 정보가 있습니다.
        //// 
                        
        //// 일반
        //if(ColumnName=="Text")
        //    GridEXColumnList_Receiver.Add(_Gridex.Column_Add(Gridex, ColumnType.Text, EditType.TextBox, ButtonStyle.NoButton, ColumnName));
        //// 체크박스
        //else if (ColumnName == "Checkbox")
        //    GridEXColumnList_Receiver.Add(_Gridex.Column_Add(Gridex, ColumnType.CheckBox, EditType.CheckBox, ButtonStyle.NoButton, ColumnName));
        //// 버튼
        //else if (ColumnName == "Button")
        //    GridEXColumnList_Receiver.Add(_Gridex.Column_Add(Gridex, ColumnType.Text, EditType.TextBox, ButtonStyle.ButtonCell, ColumnName));
        //// 콤보박스
        //else if (ColumnName == "Combobox")
        //{
        //    //콤보박스안에 글자를 삽입한후 컬럼을 추가한다
        //    GridEXColumnList_Receiver.Add(_Gridex.Column_Add(Gridex, ColumnType.Text, EditType.Combo, ButtonStyle.NoButton, ColumnName,"test1;test2"));
        //}

        // 컬럼추가
        public static GridEXColumn Column_Add(Janus.Windows.GridEX.GridEX gridEX, ColumnType Columntype, EditType Edittype, ButtonStyle Buttonstyle, bool AllowSort, string ColumnName)
        {
            GridEXColumn NewGridEXColumn = new Janus.Windows.GridEX.GridEXColumn();
            NewGridEXColumn.ColumnType = Columntype;
            NewGridEXColumn.EditType = Edittype;
            NewGridEXColumn.ButtonStyle = Buttonstyle;
            if (Buttonstyle == ButtonStyle.ButtonCell) NewGridEXColumn.ButtonDisplayMode = CellButtonDisplayMode.Always;            
            NewGridEXColumn.Caption = ColumnName;
            NewGridEXColumn.Key = ColumnName;                   
            NewGridEXColumn.HeaderAlignment = TextAlignment.Center;
            NewGridEXColumn.TextAlignment = TextAlignment.Center;
            NewGridEXColumn.LineAlignment = TextAlignment.Center;
            NewGridEXColumn.WordWrap = true;
            NewGridEXColumn.AllowSize = true;              
            NewGridEXColumn.AutoSizeMode = ColumnAutoSizeMode.AllCells;            
            NewGridEXColumn.MaxLines = 100;            
            NewGridEXColumn.Trimming = Trimming.NoTrimming;
            NewGridEXColumn.BoundMode = ColumnBoundMode.Unbound;            
            if (AllowSort == true) NewGridEXColumn.SortIndicator = SortIndicator.Automatic;
            else NewGridEXColumn.SortIndicator = SortIndicator.None;
            NewGridEXColumn.AllowSort = AllowSort;
            gridEX.RootTable.Columns.Add(NewGridEXColumn);
            
            return NewGridEXColumn;
        }
        public static GridEXColumn Column_Add(Janus.Windows.GridEX.GridEX gridEX, ColumnType Columntype, EditType Edittype, ButtonStyle Buttonstyle, string ColumnName, ArrayList ComboboxItems)
        {
            GridEXColumn NewGridEXColumn = new Janus.Windows.GridEX.GridEXColumn();
            NewGridEXColumn.ColumnType = Columntype;
            NewGridEXColumn.EditType = Edittype;
            NewGridEXColumn.ButtonStyle = Buttonstyle;            
            NewGridEXColumn.Caption = ColumnName;
            NewGridEXColumn.Key = ColumnName;
            NewGridEXColumn.HeaderAlignment = TextAlignment.Center;
            NewGridEXColumn.TextAlignment = TextAlignment.Center;
            NewGridEXColumn.LineAlignment = TextAlignment.Center;
            NewGridEXColumn.WordWrap = true;
            NewGridEXColumn.AllowSize = true;
            NewGridEXColumn.AutoSizeMode = ColumnAutoSizeMode.AllCells;
            NewGridEXColumn.MaxLines = 100;
            NewGridEXColumn.Trimming = Trimming.NoTrimming;
            NewGridEXColumn.BoundMode = ColumnBoundMode.Unbound;
            gridEX.RootTable.Columns.Add(NewGridEXColumn);
            if (Edittype == EditType.Combo)
            {
                // 콤보박스에 추가할 헤더를 찾는다
                GridEXColumn column = gridEX.RootTable.Columns[ColumnName];
                column.HasValueList = true;
                column.EditButtonDisplayMode = CellButtonDisplayMode.Always;
                GridEXValueListItemCollection valueList = column.ValueList;
                // 콤보박스의 경우 특별히 추가될 아이템이 존재한다
                valueList.PopulateValueList(ComboboxItems);
            }
            return NewGridEXColumn;
        }
        // 컬럼 가로사이즈
        public static void Column_Width(GridEXColumn ColumnName, int Width)
        {
            ColumnName.Width = Width;
        }
        // 컬럼셋추가        
        public static GridEXColumnSet ColumnSet_Add(Janus.Windows.GridEX.GridEX gridEX, string ColumnSetName, string Title, int Count,int Width)
        {
            GridEXColumnSet NewGridEXColumnSet = gridEX.RootTable.ColumnSets.Add();
            NewGridEXColumnSet.Caption = Title;
            NewGridEXColumnSet.HeaderAlignment = TextAlignment.Center;
            NewGridEXColumnSet.Key = ColumnSetName;
            NewGridEXColumnSet.ColumnCount = Count;
            NewGridEXColumnSet.Width = Width; // 실제 컬럼 가로 사이즈
            return NewGridEXColumnSet;
        }
        // 컬럼셋에 컬럼을 추가
        public static void ColumnSet_AddColumn(Janus.Windows.GridEX.GridEX gridEX, GridEXColumnSet gridEXColumnSet, string ColumnName, int Index) // index 는 0부터 시작함
        {
            gridEXColumnSet.Add(gridEX.RootTable.Columns[ColumnName], 0, Index);
        }
        
        // 컬럼키를 모두 조회 (결과는 ArrauList)
        public static ArrayList Get_ColumnHeaderName(Janus.Windows.GridEX.GridEX gridEX)
        {
            ArrayList result = new ArrayList();

            for(int i=0;i<gridEX.RootTable.Columns.Count;i++)            
                result.Add(gridEX.RootTable.Columns[i].Key);
            
            return result;
        }
		
 		// 컬럼키를 모두 조회 (결과는 String)
        public static string[] Get_ColumnHeadersName(Janus.Windows.GridEX.GridEX gridEX)
        { 
            string [] result = new string[gridEX.RootTable.Columns.Count];
            for(int i=0;i<gridEX.RootTable.Columns.Count;i++)
            {
                result[i] = gridEX.RootTable.Columns[i].Key;
            }
            return result;
        }
		
        //
        // 색상 조절 1 
        // 컨디션 조건을 등록하는 경우 사전에 미리 등록된 값이 변경되면 해당되는 컬럼의 배경색을 바꾼다
        //

        // 컬럼 배경색 컨디션 속성 생성
        public static bool BackColorFormatCondition_Create(Janus.Windows.GridEX.GridEX gridEX, Color TargetColor, string[] ColumnNames, string CompareColumn_Key, string CompareColumn_Value)
        {
            try 
            {
                // ColumnNames 예시 -> "test1;test2"   
                foreach (GridEXColumn Columnn in gridEX.RootTable.Columns)
                {
                    for (int i = 0; i < ColumnNames.Length; i++)
                    {
                        if (ColumnNames[i] == Columnn.Key)
                        {
                            GridEXFormatCondition gGridEXFormatCondition = new GridEXFormatCondition(gridEX.RootTable.Columns[CompareColumn_Key], ConditionOperator.Equal, CompareColumn_Value);
                            gGridEXFormatCondition.TargetColumn = Columnn;
                            gGridEXFormatCondition.FormatStyle.BackColor = TargetColor;
                            gridEX.RootTable.FormatConditions.Add(gGridEXFormatCondition);
                        }
                    }
                }
                return true;
            }
            catch (Exception e)
            {
                // LOG                
                _Event.DebugView_SendMessage_Write(e.ToString());
                return false;
            }
        }
         // 컬럼 배경색 컨디션 속성 초기화
        public static bool BackColorFormatCondition_Clear(Janus.Windows.GridEX.GridEX gridEX)
        {
            try
            {
                gridEX.RootTable.FormatConditions.Clear();
                return true;
            }
            catch (Exception e)
            {
                // LOG                
                _Event.DebugView_SendMessage_Write(e.ToString());
                return false;
            }
        }

        // 컬럼 데이터 삽입 (단, string 형태의 데이터만 허용한다)
        // Key_Data 의 예시 "Key1=Data1;Key2=Data2" 
        public static void Column_Data_Add(Janus.Windows.GridEX.GridEX gridEX, bool top, string Key_Data) // ascending descending
        {
            try
            {
                GridEXRow row;

                if (top == true)
                    row = gridEX.AddItem(0);
                else         
                    row = gridEX.AddItem();

                // 속성 이름 임시 저장소
                string Temp_Names = _Convert.String_to_Key_Data(Key_Data, true, false);
                // 제거 문자대로 분리시켜버림
                string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);
                // 속성 값 임시 저장소
                string Temp_Values = _Convert.String_to_Key_Data(Key_Data, false, false);
                // 제거 문자대로 분리시켜버림
                string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);

                row.BeginEdit();
                for (int i = 0; i < Column_Names.Length; i++)
                {
                    if (row.Cells[Column_Names[i]].Column.ColumnType == ColumnType.CheckBox)
                    {
                        row.Cells[Column_Names[i]].Value = Convert.ToBoolean(Column_Values[i]);
                    }
                    else
                    {
                        row.Cells[Column_Names[i]].Value = Column_Values[i];
                    }
                }
                row.EndEdit();
            }
            catch (Exception e)
            {
                // LOG                
                _Event.DebugView_SendMessage_Write(e.ToString());                
            }
        }
        
        // 컬럽 데이터 편집
        public static void Column_Data_Edit(Janus.Windows.GridEX.GridEX gridEX, string Target_Key_Data, string Key_Data) 
        {
            try
            {
                // 속성 이름 임시 저장소
                string Temp_Names = _Convert.String_to_Key_Data(Key_Data, true, false);
                // 제거 문자대로 분리시켜버림
                string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);
                // 속성 값 임시 저장소
                string Temp_Values = _Convert.String_to_Key_Data(Key_Data, false, false);
                // 제거 문자대로 분리시켜버림
                string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);

                // 속성 이름 임시 저장소
                string Temp_Names_Target = _Convert.String_to_Key_Data(Target_Key_Data, true, false);
                // 제거 문자대로 분리시켜버림
                string[] Column_Names_Target = Temp_Names_Target.Split(_Convert.Result_Char);
                // 속성 값 임시 저장소
                string Temp_Values_Target = _Convert.String_to_Key_Data(Target_Key_Data, false, false);
                // 제거 문자대로 분리시켜버림
                string[] Column_Values_Target = Temp_Values_Target.Split(_Convert.Result_Char);

                GridEXRow[] row = gridEX.GetRows();

                // 편집
                foreach (GridEXRow editrow in row)
                {
                    for (int j = 0; j < Column_Names_Target.Length; j++)
                    {
                        if (editrow.Cells[Column_Names_Target[j]].Value.ToString() == Column_Values_Target[j])
                        {
                            editrow.BeginEdit();
                            for (int i = 0; i < Column_Names.Length; i++)
                            {
                                if (editrow.Cells[Column_Names[i]].Column.ColumnType == ColumnType.CheckBox)
                                {
                                    editrow.Cells[Column_Names[i]].Value = Convert.ToBoolean(Column_Values[i]);
                                }
                                else
                                {
                                    editrow.Cells[Column_Names[i]].Value = Column_Values[i];
                                }
                            }
                            editrow.EndEdit();
                        }
                    }
                }
            }
            catch (Exception e)
            {
                // LOG                
                _Event.DebugView_SendMessage_Write(e.ToString());
            }
        }
         
         
    }
}