From 6eacf60891a6ac09f96985af042df3c4ed3da000 Mon Sep 17 00:00:00 2001
From: LAPTOP-T815PCOQ\25526 <mr.liuyang@126.com>
Date: 星期五, 15 十一月 2024 18:00:22 +0800
Subject: [PATCH] 1. 修改控件库的字符集 2. 添加用户管理界面 3.修改密码的加密方式(对称加密)

---
 SourceCode/Bond/BondEq/Resource.h                                         |    0 
 SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h                |   28 
 SourceCode/Bond/BondEq/UserManagerDlg.h                                   |   40 
 SourceCode/Bond/BondEq/BondEq.rc                                          |    0 
 SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h                |   82 +
 SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj                             |    3 
 SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h    |   68 +
 SourceCode/Bond/BondEq/BondEq.vcxproj                                     |    5 
 SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h      |   55 +
 SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h                      |  143 +++
 SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h                  |  172 +++
 SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h    |  178 +++
 SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h |   92 +
 SourceCode/Bond/BondEq/UserManagerDlg.cpp                                 |  233 ++++
 SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h                     |  106 ++
 SourceCode/Bond/BondEq/stdafx.h                                           |   20 
 SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h                     |  156 +++
 SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h  |   26 
 SourceCode/Bond/BondEq/BondEqDlg.cpp                                      |    8 
 SourceCode/Bond/x64/Debug/Config/BondEq.db                                |    0 
 SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h               |   83 +
 SourceCode/Bond/BLControlsSDK/include/CellCtrl.h                          |   80 
 SourceCode/Bond/BondEq/DBManager/UserManager.cpp                          |   27 
 SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h                      |   87 +
 SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h                      | 1088 +++++++++++++++++++++++
 25 files changed, 2,722 insertions(+), 58 deletions(-)

diff --git a/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj b/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj
index ea54226..e1f23d9 100644
--- a/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj
+++ b/SourceCode/Bond/BEQLibrary/BEQLibrary.vcxproj
@@ -199,7 +199,8 @@
       <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ResourceCompile>
     <PostBuildEvent>
-      <Command>copy "$(SolutionDir)$(ProjectName)\IEquipment.h" "$(SolutionDir)BEQLibrarySDK\Include\IEquipment.h"
+      <Command>mkdir "$(SolutionDir)BEQLibrarySDK\lib\$(Platform)\$(Configuration)" 2&gt;nul
+copy "$(SolutionDir)$(ProjectName)\IEquipment.h" "$(SolutionDir)BEQLibrarySDK\Include\IEquipment.h"
 copy "$(SolutionDir)$(ProjectName)\IRemoteEquipment.h" "$(SolutionDir)BEQLibrarySDK\Include\IRemoteEquipment.h"
 copy "$(SolutionDir)$(ProjectName)\IUnit.h" "$(SolutionDir)BEQLibrarySDK\Include\IUnit.h"
 copy "$(SolutionDir)$(ProjectName)\IServo.h" "$(SolutionDir)BEQLibrarySDK\Include\IServo.h"
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h b/SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h
new file mode 100644
index 0000000..ca429b5
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/CellRange.h
@@ -0,0 +1,156 @@
+///////////////////////////////////////////////////////////////////////
+// CellRange.h: header file
+//
+// MFC Grid Control - interface for the CCellRange class.
+//
+// Written by Chris Maunder <cmaunder@mail.com>
+// Copyright (c) 1998-2002. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.20+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+// The code contained in this file is based on the original
+// WorldCom Grid control written by Joe Willcoxson,
+//      mailto:chinajoe@aol.com
+//      http://users.aol.com/chinajoe
+
+#ifndef max
+#define max(a,b)            (((a) > (b)) ? (a) : (b))
+#endif
+
+#ifndef min
+#define min(a,b)            (((a) < (b)) ? (a) : (b))
+#endif
+
+class AFX_EXT_CLASS CCellID
+{    
+// Attributes
+public:
+    int row, col;
+
+// Operations
+public:
+    explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {}
+
+    int IsValid() const { return (row >= 0 && col >= 0); }
+    int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); }
+    int operator!=(const CCellID& rhs) const { return !operator==(rhs); }
+};
+
+class CCellRange
+{ 
+public:
+    
+    CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1)
+    {
+        Set(nMinRow, nMinCol, nMaxRow, nMaxCol);
+    }
+
+    void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1);
+    
+    int  IsValid() const;
+    int  InRange(int row, int col) const;
+    int  InRange(const CCellID& cellID) const;
+    int  Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); }
+    
+    CCellID  GetTopLeft() const;
+    CCellRange  Intersect(const CCellRange& rhs) const;
+    
+    int GetMinRow() const {return m_nMinRow;}
+    void SetMinRow(int minRow) {m_nMinRow = minRow;}
+    
+    int GetMinCol() const {return m_nMinCol;}
+    void SetMinCol(int minCol) {m_nMinCol = minCol;}
+    
+    int GetMaxRow() const {return m_nMaxRow;}
+    void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;}
+    
+    int GetMaxCol() const {return m_nMaxCol;}
+    void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;}
+
+    int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;}
+    int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;}
+    
+    void operator=(const CCellRange& rhs);
+    int  operator==(const CCellRange& rhs);
+    int  operator!=(const CCellRange& rhs);
+    
+protected:
+    int m_nMinRow;
+    int m_nMinCol;
+    int m_nMaxRow;
+    int m_nMaxCol;
+};
+
+inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol)
+{
+     m_nMinRow = minRow;
+     m_nMinCol = minCol;
+     m_nMaxRow = maxRow;
+     m_nMaxCol = maxCol;
+}
+
+inline void CCellRange::operator=(const CCellRange& rhs)
+{
+    if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol);
+}
+
+inline int CCellRange::operator==(const CCellRange& rhs)
+{
+     return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) &&
+             (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol));
+}
+
+inline int CCellRange::operator!=(const CCellRange& rhs)
+{
+     return !operator==(rhs);
+}
+
+inline int CCellRange::IsValid() const
+{
+     return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 &&
+             m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol);
+}
+
+inline int CCellRange::InRange(int row, int col) const
+{
+     return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol);
+}
+
+inline int CCellRange::InRange(const CCellID& cellID) const
+{
+     return InRange(cellID.row, cellID.col);
+}
+
+inline CCellID CCellRange::GetTopLeft() const
+{
+     return CCellID(m_nMinRow, m_nMinCol);
+}
+
+inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const
+{
+     return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol),
+                       min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol));
+}
+
+#endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h
new file mode 100644
index 0000000..05a368f
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCell.h
@@ -0,0 +1,143 @@
+/////////////////////////////////////////////////////////////////////////////
+// GridCell.h : header file
+//
+// MFC Grid Control - Grid cell class header file
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.20+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+class CGridCtrl;
+#include "GridCellBase.h"
+
+// Each cell contains one of these. Fields "row" and "column" are not stored since we
+// will usually have acces to them in other ways, and they are an extra 8 bytes per
+// cell that is probably unnecessary.
+
+class AFX_EXT_CLASS CGridCell : public CGridCellBase
+{
+    friend class CGridCtrl;
+    DECLARE_DYNCREATE(CGridCell)
+
+// Construction/Destruction
+public:
+    CGridCell();
+    virtual ~CGridCell();
+
+// Attributes
+public:
+    void operator=(const CGridCell& cell);
+
+    virtual void  SetText(LPCTSTR szText)        { m_strText = szText;  }                       
+    virtual void  SetImage(int nImage)           { m_nImage = nImage;   }                        
+    virtual void  SetData(LPARAM lParam)         { m_lParam = lParam;   }      
+    virtual void  SetGrid(CGridCtrl* pGrid)      { m_pGrid = pGrid;     }                          
+    // virtual void SetState(const DWORD nState);  -  use base class version   
+    virtual void  SetFormat(DWORD nFormat)       { m_nFormat = nFormat; }                      
+    virtual void  SetTextClr(COLORREF clr)       { m_crFgClr = clr;     }                          
+    virtual void  SetBackClr(COLORREF clr)       { m_crBkClr = clr;     }                          
+    virtual void  SetFont(const LOGFONT* plf);
+    virtual void  SetMargin(UINT nMargin)        { m_nMargin = nMargin; }
+    virtual CWnd* GetEditWnd() const             { return m_pEditWnd;   }
+    virtual void  SetCoords(int /*nRow*/, int /*nCol*/) {}  // don't need to know the row and
+                                                            // column for base implementation
+
+    virtual LPCTSTR     GetText() const             { return (m_strText.IsEmpty())? _T("") : LPCTSTR(m_strText); }
+    virtual int         GetImage() const            { return m_nImage;  }
+    virtual LPARAM      GetData() const             { return m_lParam;  }
+    virtual CGridCtrl*  GetGrid() const             { return m_pGrid;   }
+    // virtual DWORD    GetState() const - use base class
+    virtual DWORD       GetFormat() const;
+    virtual COLORREF    GetTextClr() const          { return m_crFgClr; } // TODO: change to use default cell
+    virtual COLORREF    GetBackClr() const          { return m_crBkClr; }
+    virtual LOGFONT*    GetFont() const;
+    virtual CFont*      GetFontObject() const;
+    virtual UINT        GetMargin() const;
+
+    virtual BOOL        IsEditing() const           { return m_bEditing; }
+    virtual BOOL        IsDefaultFont() const       { return (m_plfFont == NULL); }
+    virtual void        Reset();
+
+// editing cells
+public:
+    virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+    virtual void EndEdit();
+protected:
+    virtual void OnEndEdit();
+
+protected:
+    CString    m_strText;      // Cell text (or binary data if you wish...)
+    LPARAM     m_lParam;       // 32-bit value to associate with item
+    int        m_nImage;       // Index of the list view item抯 icon
+    DWORD      m_nFormat;
+    COLORREF   m_crFgClr;
+    COLORREF   m_crBkClr;
+    LOGFONT*   m_plfFont;
+    UINT       m_nMargin;
+
+    BOOL       m_bEditing;     // Cell being edited?
+
+    CGridCtrl* m_pGrid;        // Parent grid control
+    CWnd*      m_pEditWnd;
+};
+
+// This class is for storing grid default values. It's a little heavy weight, so
+// don't use it in bulk 
+class CGridDefaultCell : public CGridCell
+{
+    DECLARE_DYNCREATE(CGridDefaultCell)
+
+// Construction/Destruction
+public:
+    CGridDefaultCell();
+    virtual ~CGridDefaultCell();
+
+public:
+    virtual DWORD GetStyle() const                      { return m_dwStyle;      }
+    virtual void  SetStyle(DWORD dwStyle)               { m_dwStyle = dwStyle;   }
+    virtual int   GetWidth() const                      { return m_Size.cx;      }
+    virtual int   GetHeight() const                     { return m_Size.cy;      }
+    virtual void  SetWidth(int nWidth)                  { m_Size.cx = nWidth;    }
+    virtual void  SetHeight(int nHeight)                { m_Size.cy = nHeight;   }
+
+    // Disable these properties
+    virtual void     SetData(LPARAM /*lParam*/)             { ASSERT(FALSE);         }      
+    virtual void     SetState(DWORD /*nState*/)             { ASSERT(FALSE);         }
+    virtual DWORD    GetState() const                       { return CGridCell::GetState()|GVIS_READONLY; }
+    virtual void     SetCoords( int /*row*/, int /*col*/)   { /*ASSERT(FALSE);*/         }
+    virtual void     SetFont(const LOGFONT* /*plf*/);
+    virtual LOGFONT* GetFont() const;   
+    virtual CFont*   GetFontObject() const;
+
+protected:
+    CSize m_Size;       // Default Size
+    CFont m_Font;       // Cached font
+    DWORD m_dwStyle;    // Cell Style - unused
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h
new file mode 100644
index 0000000..f7804c2
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellBase.h
@@ -0,0 +1,172 @@
+/////////////////////////////////////////////////////////////////////////////
+// GridCellBase.h : header file
+//
+// MFC Grid Control - Grid cell base class header file
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.22+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+class CGridCtrl;
+
+// Cell states
+#define GVIS_FOCUSED            0x0001
+#define GVIS_SELECTED           0x0002
+#define GVIS_DROPHILITED        0x0004
+#define GVIS_READONLY           0x0008
+#define GVIS_FIXED              0x0010
+#define GVIS_FIXEDROW           0x0020
+#define GVIS_FIXEDCOL           0x0040
+#define GVIS_MODIFIED           0x0080
+
+// Cell data mask
+#define GVIF_TEXT               LVIF_TEXT
+#define GVIF_IMAGE              LVIF_IMAGE
+#define GVIF_PARAM              LVIF_PARAM
+#define GVIF_STATE              LVIF_STATE
+#define GVIF_BKCLR              (GVIF_STATE<<1)
+#define GVIF_FGCLR              (GVIF_STATE<<2)
+#define GVIF_FORMAT             (GVIF_STATE<<3)
+#define GVIF_FONT               (GVIF_STATE<<4)
+#define GVIF_MARGIN             (GVIF_STATE<<5)
+#define GVIF_ALL                (GVIF_TEXT|GVIF_IMAGE|GVIF_PARAM|GVIF_STATE|GVIF_BKCLR|GVIF_FGCLR| \
+                                 GVIF_FORMAT|GVIF_FONT|GVIF_MARGIN)
+
+// Used for Get/SetItem calls.
+typedef struct _GV_ITEM {
+    int      row,col;     // Row and Column of item
+    UINT     mask;        // Mask for use in getting/setting cell data
+    UINT     nState;      // cell state (focus/hilighted etc)
+    DWORD    nFormat;     // Format of cell
+    int      iImage;      // index of the list view item抯 icon
+    COLORREF crBkClr;     // Background colour (or CLR_DEFAULT)
+    COLORREF crFgClr;     // Forground colour (or CLR_DEFAULT)
+    LPARAM   lParam;      // 32-bit value to associate with item
+    LOGFONT  lfFont;      // Cell font
+    UINT     nMargin;     // Internal cell margin
+    CString  strText;     // Text in cell
+} GV_ITEM;
+
+
+// Each cell contains one of these. Fields "row" and "column" are not stored since we
+// will usually have acces to them in other ways, and they are an extra 8 bytes per
+// cell that is probably unnecessary.
+
+class AFX_EXT_CLASS CGridCellBase : public CObject
+{
+    friend class CGridCtrl;
+    DECLARE_DYNAMIC(CGridCellBase)
+
+// Construction/Destruction
+public:
+    CGridCellBase();
+    virtual ~CGridCellBase();
+
+// Attributes
+public:
+    virtual void SetText(LPCTSTR /* szText */)              = 0 ;
+    virtual void SetImage(int /* nImage */)                 = 0 ;
+    virtual void SetData(LPARAM /* lParam */)               = 0 ;
+    virtual void SetState(DWORD nState)                     { m_nState = nState; }
+    virtual void SetFormat(DWORD /* nFormat */)             = 0 ;
+    virtual void SetTextClr(COLORREF /* clr */)             = 0 ;
+    virtual void SetBackClr(COLORREF /* clr */)             = 0 ;
+    virtual void SetFont(const LOGFONT* /* plf */)          = 0 ;
+    virtual void SetMargin( UINT /* nMargin */)             = 0 ;
+    virtual void SetGrid(CGridCtrl* /* pGrid */)            = 0 ;
+    virtual void SetCoords( int /* nRow */, int /* nCol */) = 0 ;
+
+    virtual LPCTSTR    GetText()       const                = 0 ;
+    virtual LPCTSTR    GetTipText()    const                { return GetText(); } // may override TitleTip return
+    virtual int        GetImage()      const                = 0 ;
+    virtual LPARAM     GetData()       const                = 0 ;
+    virtual DWORD      GetState()      const                { return m_nState;  }
+    virtual DWORD      GetFormat()     const                = 0 ;
+    virtual COLORREF   GetTextClr()    const                = 0 ;
+    virtual COLORREF   GetBackClr()    const                = 0 ;
+    virtual LOGFONT  * GetFont()       const                = 0 ;
+    virtual CFont    * GetFontObject() const                = 0 ;
+    virtual CGridCtrl* GetGrid()       const                = 0 ;
+    virtual CWnd     * GetEditWnd()    const                = 0 ;
+    virtual UINT       GetMargin()     const                = 0 ;
+
+    virtual CGridCellBase* GetDefaultCell() const;
+
+    virtual BOOL IsDefaultFont()       const                = 0 ;
+    virtual BOOL IsEditing()           const                = 0 ;
+    virtual BOOL IsFocused()           const                { return (m_nState & GVIS_FOCUSED);  }
+    virtual BOOL IsFixed()             const                { return (m_nState & GVIS_FIXED);    }
+    virtual BOOL IsFixedCol()          const                { return (m_nState & GVIS_FIXEDCOL); }
+    virtual BOOL IsFixedRow()          const                { return (m_nState & GVIS_FIXEDROW); }
+    virtual BOOL IsSelected()          const                { return (m_nState & GVIS_SELECTED); }
+    virtual BOOL IsReadOnly()          const                { return (m_nState & GVIS_READONLY); }
+    virtual BOOL IsModified()          const                { return (m_nState & GVIS_MODIFIED); }
+    virtual BOOL IsDropHighlighted()   const                { return (m_nState & GVIS_DROPHILITED); }
+
+// Operators
+public:
+    virtual void operator=(const CGridCellBase& cell);
+
+// Operations
+public:
+    virtual void Reset();
+
+    virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+    virtual BOOL GetTextRect( LPRECT pRect);    // i/o:  i=dims of cell rect; o=dims of text rect
+    virtual BOOL GetTipTextRect( LPRECT pRect) { return GetTextRect( pRect); }  // may override for btns, etc.
+    virtual CSize GetTextExtent(LPCTSTR str, CDC* pDC = NULL);
+    virtual CSize GetCellExtent(CDC* pDC);
+
+    // Editing
+    virtual BOOL Edit( int /* nRow */, int /* nCol */, CRect /* rect */, CPoint /* point */, 
+                       UINT /* nID */, UINT /* nChar */) { return FALSE;}
+	virtual BOOL ValidateEdit(LPCTSTR str);
+    virtual void EndEdit() {}
+
+    // EFW - Added to print cells properly
+    virtual BOOL PrintCell(CDC* pDC, int nRow, int nCol, CRect rect);
+
+    // add additional protected grid members required of cells
+    LRESULT SendMessageToParent(int nRow, int nCol, int nMessage);
+
+protected:
+    virtual void OnEndEdit();
+    virtual void OnMouseEnter();
+    virtual void OnMouseOver();
+    virtual void OnMouseLeave();
+    virtual void OnClick( CPoint PointCellRelative);
+    virtual void OnClickDown( CPoint PointCellRelative);
+    virtual void OnRClick( CPoint PointCellRelative);
+    virtual void OnDblClick( CPoint PointCellRelative);
+    virtual BOOL OnSetCursor();
+
+protected:
+    DWORD    m_nState;      // Cell state (selected/focus etc)
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h
new file mode 100644
index 0000000..6b04419
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCellButton.h
@@ -0,0 +1,28 @@
+#ifndef __GRID_CELL_BUTTON__
+#define __GRID_CELL_BUTTON__
+
+#include "GridCell.h"
+
+class AFX_EXT_CLASS CGridCellButton : public CGridCell
+{
+	friend class CGridCtrl;
+	DECLARE_DYNCREATE(CGridCellButton)
+
+public:
+	CGridCellButton(void);
+	virtual ~CGridCellButton(void);
+
+	void SetPushing(BOOL bPush) {m_bPushing = bPush;}
+
+public:
+	virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+
+protected:
+	virtual void OnClick(CPoint PointCellRelative);
+	virtual void OnMouseLeave();
+
+protected:
+	CRect m_rect;
+	BOOL m_bPushing;
+};
+#endif
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h
new file mode 100644
index 0000000..286c9db
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridCtrl.h
@@ -0,0 +1,1088 @@
+/////////////////////////////////////////////////////////////////////////////
+// GridCtrl.h : header file
+//
+// MFC Grid Control - main header
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.20+
+//
+//////////////////////////////////////////////////////////////////////
+
+// FEATURES BY Mukit, Ataul (2007-11-17):
+// 1. Merge Cell 
+// 2. Ability to do XL Style Freeze Pane
+// 3. The Horizontal Gray Area Removed 
+  
+// FINDINGS:
+// 1. A cell cannot be edited if a tooltip is shown..
+// 2. The InplaceEditCtrl is not multiline even if a cell can contain Multiline Text..
+// 3. If a cell is too small, the InplaceEditCtrl is almost invisible..
+
+#if !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+#include "CellRange.h"
+#include "GridCell.h"
+#include <afxtempl.h>
+#include <vector>
+using namespace std;
+
+
+struct CELL_ENABLE
+{
+	CELL_ENABLE()
+	{
+		nEnable = -1;
+	}
+	void SetEnable(BOOL bValue)
+	{
+		nEnable = bValue;
+	}
+	BOOL isEnable()
+	{
+		if (nEnable == 0)
+		{
+			return FALSE;
+		}
+		else if (nEnable > 0)
+		{
+			return TRUE;
+		}
+	}
+	BOOL isActivated()
+	{
+		if (nEnable < 0)
+		{
+			return FALSE;
+		}
+		else
+			return TRUE;
+	}
+	int nEnable;
+};
+
+///////////////////////////////////////////////////////////////////////////////////
+// Defines - these determine the features (and the final size) of the final code
+///////////////////////////////////////////////////////////////////////////////////
+
+//#define GRIDCONTROL_NO_TITLETIPS   // Do not use titletips for cells with large data
+//#define GRIDCONTROL_NO_DRAGDROP    // Do not use OLE drag and drop
+//#define GRIDCONTROL_NO_CLIPBOARD   // Do not use clipboard routines
+
+#ifdef _WIN32_WCE
+#   define GRIDCONTROL_NO_TITLETIPS   // Do not use titletips for cells with large data
+#   define GRIDCONTROL_NO_DRAGDROP    // Do not use OLE drag and drop
+#   define GRIDCONTROL_NO_CLIPBOARD   // Do not use clipboard routines
+#   define GRIDCONTROL_NO_PRINTING    // Do not use printing routines
+#   ifdef WCE_NO_PRINTING			  // Older versions of CE had different #def's
+#       define _WIN32_WCE_NO_PRINTING
+#   endif
+#   ifdef WCE_NO_CURSOR
+#       define _WIN32_WCE_NO_CURSOR
+#   endif
+#endif  // _WIN32_WCE
+
+// Use this as the classname when inserting this control as a custom control
+// in the MSVC++ dialog editor
+#define GRIDCTRL_CLASSNAME    _T("MFCGridCtrl")  // Window class name
+#define IDC_INPLACE_CONTROL   8                  // ID of inplace edit controls
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Conditional includes
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GRIDCONTROL_NO_TITLETIPS
+#   include "TitleTip.h"
+#endif
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+#   include "GridDropTarget.h"
+#   undef GRIDCONTROL_NO_CLIPBOARD     // Force clipboard functions on
+#endif
+
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+#   include <afxole.h>
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Helper functions
+///////////////////////////////////////////////////////////////////////////////////
+
+// Handy functions
+#define IsSHIFTpressed() ( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0   )
+#define IsCTRLpressed()  ( (GetKeyState(VK_CONTROL) & (1 << (sizeof(SHORT)*8-1))) != 0 )
+
+// Backwards compatibility for pre 2.20 grid versions
+#define DDX_GridControl(pDX, nIDC, rControl)  DDX_Control(pDX, nIDC, rControl)     
+
+
+///////////////////////////////////////////////////////////////////////////////////
+// Structures
+///////////////////////////////////////////////////////////////////////////////////
+
+// This structure sent to Grid's parent in a WM_NOTIFY message
+typedef struct tagNM_GRIDVIEW {
+    NMHDR hdr;
+    int   iRow;
+    int   iColumn;
+} NM_GRIDVIEW;
+
+// This is sent to the Grid from child in-place edit controls
+typedef struct tagGV_DISPINFO {
+    NMHDR   hdr;
+    GV_ITEM item;
+} GV_DISPINFO;
+
+// This is sent to the Grid from child in-place edit controls
+typedef struct tagGV_CACHEHINT {
+    NMHDR      hdr;
+    CCellRange range;
+} GV_CACHEHINT;
+
+// storage typedef for each row in the grid
+typedef CTypedPtrArray<CObArray, CGridCellBase*> GRID_ROW;
+
+// For virtual mode callback
+typedef BOOL (CALLBACK* GRIDCALLBACK)(GV_DISPINFO *, LPARAM);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Defines
+///////////////////////////////////////////////////////////////////////////////////
+
+// Grid line/scrollbar selection
+#define GVL_NONE                0L      // Neither
+#define GVL_HORZ                1L      // Horizontal line or scrollbar
+#define GVL_VERT                2L      // Vertical line or scrollbar
+#define GVL_BOTH                3L      // Both
+
+// Autosizing option
+#define GVS_DEFAULT             0
+#define GVS_HEADER              1       // Size using column fixed cells data only
+#define GVS_DATA                2       // Size using column non-fixed cells data only
+#define GVS_BOTH                3       // Size using column fixed and non-fixed
+
+// Cell Searching options
+#define GVNI_FOCUSED            0x0001
+#define GVNI_SELECTED           0x0002
+#define GVNI_DROPHILITED        0x0004
+#define GVNI_READONLY           0x0008
+#define GVNI_FIXED              0x0010
+#define GVNI_MODIFIED           0x0020
+// LUC
+#define GVNI_FREEZED			0x0040
+
+#define GVNI_ABOVE              LVNI_ABOVE
+#define GVNI_BELOW              LVNI_BELOW
+#define GVNI_TOLEFT             LVNI_TOLEFT
+#define GVNI_TORIGHT            LVNI_TORIGHT
+#define GVNI_ALL                (LVNI_BELOW|LVNI_TORIGHT|LVNI_TOLEFT)
+#define GVNI_AREA               (LVNI_BELOW|LVNI_TORIGHT)
+
+// Hit test values (not yet implemented)
+#define GVHT_DATA               0x0000
+#define GVHT_TOPLEFT            0x0001
+#define GVHT_COLHDR             0x0002
+#define GVHT_ROWHDR             0x0004
+#define GVHT_COLSIZER           0x0008
+#define GVHT_ROWSIZER           0x0010
+#define GVHT_LEFT               0x0020
+#define GVHT_RIGHT              0x0040
+#define GVHT_ABOVE              0x0080
+#define GVHT_BELOW              0x0100
+
+// Messages sent to the grid's parent (More will be added in future)
+#define GVN_BEGINDRAG           LVN_BEGINDRAG        // LVN_FIRST-9
+#define GVN_BEGINLABELEDIT      LVN_BEGINLABELEDIT   // LVN_FIRST-5
+#define GVN_BEGINRDRAG          LVN_BEGINRDRAG
+#define GVN_COLUMNCLICK         LVN_COLUMNCLICK
+#define GVN_DELETEITEM          LVN_DELETEITEM
+#define GVN_ENDLABELEDIT        LVN_ENDLABELEDIT     // LVN_FIRST-6
+#define GVN_SELCHANGING         LVN_ITEMCHANGING
+#define GVN_SELCHANGED          LVN_ITEMCHANGED
+#define GVN_GETDISPINFO         LVN_GETDISPINFO 
+#define GVN_ODCACHEHINT         LVN_ODCACHEHINT 
+#define GVN_COMBOSELCHANGE		LVN_FIRST-10
+
+class CGridCtrl;
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridCtrl window
+
+typedef bool (*PVIRTUALCOMPARE)(int, int);
+
+class AFX_EXT_CLASS CGridCtrl : public CWnd
+{
+    DECLARE_DYNCREATE(CGridCtrl)
+    friend class CGridCell;
+    friend class CGridCellBase;
+
+// Construction
+public:
+    CGridCtrl(int nRows = 0, int nCols = 0, int nFixedRows = 0, int nFixedCols = 0);
+
+    BOOL Create(const RECT& rect, CWnd* parent, UINT nID,
+                DWORD dwStyle = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Attributes
+///////////////////////////////////////////////////////////////////////////////////
+public:
+
+///// LUC ///////////////////////////////////////////////////////////////////////
+
+	//// LUC : MergeCell////////
+	
+	INT_PTR MergeCells(CCellRange& mergedCellRange);
+	void SplitCells(INT_PTR nMergeID);
+
+	BOOL IsMergedCell(int row, int col, CCellRange& mergedCellRange);
+	BOOL GetMergedCellRect(int row, int col, CRect& rect);
+	BOOL GetMergedCellRect(CCellRange& mergedCell, CRect& rect);
+	BOOL GetTopLeftMergedCell(int& row, int& col, CRect& mergeRect);
+	BOOL GetBottomRightMergedCell(int& row, int& col, CRect& mergeRect);
+	virtual BOOL IsFocused(CGridCellBase& cell, int nRow, int nCol);
+	virtual BOOL IsSelected(CGridCellBase& cell, int nRow, int nCol);
+
+	BOOL	m_bDrawingMergedCell;
+	INT_PTR	m_nCurrentMergeID;
+
+	static CRect rectNull;		
+	static CCellID cellNull;
+
+	// LUC : Freeze Rows	
+
+	BOOL SetFreezedRowCount(int nFreezedRows)
+	{
+		BOOL bRet = FALSE;
+		if( (nFreezedRows >= 0) && ((nFreezedRows + m_nFixedRows) <= m_nRows) )
+		{
+			m_nFreezedRows = nFreezedRows;
+			ResetScrollBars();
+			Refresh();
+			bRet = TRUE;
+		}
+	
+		return bRet;
+		
+	}
+	
+	BOOL SetFreezedColumnCount(int nFreezedCols)
+	{
+		BOOL bRet = FALSE;
+		if( (nFreezedCols >= 0) && ((nFreezedCols + m_nFixedCols) <= m_nCols) )
+		{
+			m_nFreezedCols = nFreezedCols;
+			ResetScrollBars();
+			Refresh();
+			bRet = TRUE;
+		}
+	
+		return bRet;
+	}
+
+	// To avoid calling ResetScrollBars twice you can use SetFreezedFrame
+	BOOL SetFreezedFrame(int nFreezedRows, int nFreezedCols)
+	{
+		BOOL bRet = FALSE;
+		if( (nFreezedRows >= 0) && ((nFreezedRows + m_nFixedRows) <= m_nRows) )
+		{
+			m_nFreezedRows = nFreezedRows;			
+			bRet = TRUE;
+		}
+		if( (nFreezedCols >= 0) && ((nFreezedCols + m_nFixedCols) <= m_nCols) )
+		{
+			m_nFreezedCols = nFreezedCols;
+			bRet = TRUE;
+		}
+		else
+		{
+			bRet = FALSE;
+		}
+
+		ResetScrollBars();
+			
+		return bRet;			
+	}	
+	
+	int  GetFreezedRowCount() const                    { return m_nFreezedRows; }
+    int  GetFreezedColumnCount() const                 { return m_nFreezedCols; }	
+
+	void ShowHorzNonGridArea(BOOL bShow)
+	{
+		m_bShowHorzNonGridArea = bShow;
+	}
+
+	BOOL IsShowingHorzNonGridArea()
+	{
+		return m_bShowHorzNonGridArea;
+	}
+
+///////////////////////////////////////////////////////////////////////////////////////    
+	
+    int  GetRowCount() const                    { return m_nRows; }
+    int  GetColumnCount() const                 { return m_nCols; }
+    int  GetFixedRowCount(BOOL bIncludeFreezedRows = FALSE) const
+	{ 
+		return (bIncludeFreezedRows) ? (m_nFixedRows + m_nFreezedRows) : m_nFixedRows;
+	}
+    int  GetFixedColumnCount(BOOL bIncludeFreezedCols = FALSE) const            
+	{
+		return (bIncludeFreezedCols) ? (m_nFixedCols + m_nFreezedCols) : m_nFixedCols; 
+	}	
+	
+	BOOL SetRowCount(int nRows = 10);
+    BOOL SetColumnCount(int nCols = 10);
+
+	BOOL UpdateCellEditableMask();
+    
+	BOOL SetFixedRowCount(int nFixedRows = 1);
+    BOOL SetFixedColumnCount(int nFixedCols = 1);	
+
+public:
+    int  GetRowHeight(int nRow) const;
+    BOOL SetRowHeight(int row, int height);
+    int  GetColumnWidth(int nCol) const;
+    BOOL SetColumnWidth(int col, int width);
+
+    BOOL GetCellOrigin(int nRow, int nCol, LPPOINT p);
+    BOOL GetCellOrigin(const CCellID& cell, LPPOINT p);
+    BOOL GetCellRect(int nRow, int nCol, LPRECT pRect);
+    BOOL GetCellRect(const CCellID& cell, LPRECT pRect);
+
+    BOOL GetTextRect(const CCellID& cell, LPRECT pRect);
+    BOOL GetTextRect(int nRow, int nCol, LPRECT pRect);
+
+	BOOL SetCellMaskEditable(int nRow, int nCol, BOOL bEditable);
+	BOOL isCellMaskEditable(int nRow, int nCol);
+	BOOL isCellMaskActivated(int nRow, int nCol);
+
+    // LUC
+	// Change for MergeCell
+	CCellID GetCellFromPt(CPoint point, BOOL bAllowFixedCellCheck = TRUE, CCellID& cellOriginal = cellNull);
+
+	// LUC
+    //int  GetFixedRowHeight() const;
+    //int  GetFixedColumnWidth() const;	    
+	int	GetFixedRowHeight(BOOL bIncludeFreezedRows = FALSE) const;
+	int GetFixedColumnWidth(BOOL bIncludeFreezedCols = FALSE) const;
+
+    long GetVirtualWidth() const;
+    long GetVirtualHeight() const;
+
+    CSize GetTextExtent(int nRow, int nCol, LPCTSTR str);
+    // EFW - Get extent of current text in cell
+    inline CSize GetCellTextExtent(int nRow, int nCol)  { return GetTextExtent(nRow, nCol, GetItemText(nRow,nCol)); }
+
+    void     SetGridBkColor(COLORREF clr)         { m_crGridBkColour = clr;           }
+    COLORREF GetGridBkColor() const               { return m_crGridBkColour;          }
+    void     SetGridLineColor(COLORREF clr)       { m_crGridLineColour = clr;         }
+    COLORREF GetGridLineColor() const             { return m_crGridLineColour;        }
+
+	void	 SetTitleTipBackClr(COLORREF clr = CLR_DEFAULT) { m_crTTipBackClr = clr;  }
+	COLORREF GetTitleTipBackClr()				            { return m_crTTipBackClr; }
+	void	 SetTitleTipTextClr(COLORREF clr = CLR_DEFAULT) { m_crTTipTextClr = clr;  }
+	COLORREF GetTitleTipTextClr()				            { return m_crTTipTextClr; }
+
+    // ***************************************************************************** //
+    // These have been deprecated. Use GetDefaultCell and then set the colors
+    void     SetTextColor(COLORREF clr)      { m_cellDefault.SetTextClr(clr);        }
+    COLORREF GetTextColor()                  { return m_cellDefault.GetTextClr();    }
+    void     SetTextBkColor(COLORREF clr)    { m_cellDefault.SetBackClr(clr);        }
+    COLORREF GetTextBkColor()                { return m_cellDefault.GetBackClr();    }
+    void     SetFixedTextColor(COLORREF clr) { m_cellFixedRowDef.SetTextClr(clr); 
+                                               m_cellFixedColDef.SetTextClr(clr); 
+                                               m_cellFixedRowColDef.SetTextClr(clr); }
+    COLORREF GetFixedTextColor() const       { return m_cellFixedRowDef.GetTextClr(); }
+    void     SetFixedBkColor(COLORREF clr)   { m_cellFixedRowDef.SetBackClr(clr); 
+                                               m_cellFixedColDef.SetBackClr(clr); 
+                                               m_cellFixedRowColDef.SetBackClr(clr); }
+    COLORREF GetFixedBkColor() const         { return m_cellFixedRowDef.GetBackClr(); }
+    void     SetGridColor(COLORREF clr)      { SetGridLineColor(clr);                }
+    COLORREF GetGridColor()                  { return GetGridLineColor();            }
+    void     SetBkColor(COLORREF clr)        { SetGridBkColor(clr);                  }
+    COLORREF GetBkColor()                    { return GetGridBkColor();              }
+
+    void     SetDefCellMargin( int nMargin)  { m_cellDefault.SetMargin(nMargin); 
+                                               m_cellFixedRowDef.SetMargin(nMargin); 
+                                               m_cellFixedColDef.SetMargin(nMargin); 
+                                               m_cellFixedRowColDef.SetMargin(nMargin); }
+    int      GetDefCellMargin() const        { return m_cellDefault.GetMargin();     }
+
+    int      GetDefCellHeight() const        { return m_cellDefault.GetHeight();     }
+    void     SetDefCellHeight(int nHeight)   { m_cellDefault.SetHeight(nHeight); 
+                                               m_cellFixedRowDef.SetHeight(nHeight); 
+                                               m_cellFixedColDef.SetHeight(nHeight); 
+                                               m_cellFixedRowColDef.SetHeight(nHeight); }
+    int      GetDefCellWidth() const         { return m_cellDefault.GetWidth();     }
+    void     SetDefCellWidth(int nWidth)     { m_cellDefault.SetWidth(nWidth); 
+                                               m_cellFixedRowDef.SetWidth(nWidth); 
+                                               m_cellFixedColDef.SetWidth(nWidth); 
+                                               m_cellFixedRowColDef.SetWidth(nWidth); }
+
+    // ***************************************************************************** //
+
+    int GetSelectedCount() const                  { return (int)m_SelectedCellMap.GetCount(); }
+
+    CCellID SetFocusCell(CCellID cell);
+    CCellID SetFocusCell(int nRow, int nCol);
+    CCellID GetFocusCell() const                  { return m_idCurrentCell;           }
+
+
+    void SetVirtualMode(BOOL bVirtual);
+    BOOL GetVirtualMode() const                   { return m_bVirtualMode;            }
+    void SetCallbackFunc(GRIDCALLBACK pCallback, 
+                         LPARAM lParam)           { m_pfnCallback = pCallback; m_lParam = lParam; }
+    GRIDCALLBACK GetCallbackFunc()                { return m_pfnCallback;             }
+
+
+    void SetImageList(CImageList* pList)          { m_pImageList = pList;             }
+    CImageList* GetImageList() const              { return m_pImageList;              }
+
+    void SetGridLines(int nWhichLines = GVL_BOTH);
+    int  GetGridLines() const                     { return m_nGridLines;              }
+    void SetEditable(BOOL bEditable = TRUE)       { m_bEditable = bEditable;          }
+    BOOL IsEditable() const                       { return m_bEditable;               }
+    void SetListMode(BOOL bEnableListMode = TRUE);
+    BOOL GetListMode() const                      { return m_bListMode;               }
+    void SetSingleRowSelection(BOOL bSing = TRUE) { m_bSingleRowSelection = bSing;    }
+    BOOL GetSingleRowSelection()                  { return m_bSingleRowSelection & m_bListMode; }
+    void SetSingleColSelection(BOOL bSing = TRUE) { m_bSingleColSelection = bSing;    }
+    BOOL GetSingleColSelection()                  { return m_bSingleColSelection;     }
+    void EnableSelection(BOOL bEnable = TRUE)     { ResetSelectedRange(); m_bEnableSelection = bEnable; ResetSelectedRange(); }
+    BOOL IsSelectable() const                     { return m_bEnableSelection;        }
+    void SetFixedColumnSelection(BOOL bSelect)    { m_bFixedColumnSelection = bSelect;}
+    BOOL GetFixedColumnSelection()                { return m_bFixedColumnSelection;   }
+    void SetFixedRowSelection(BOOL bSelect)       { m_bFixedRowSelection = bSelect;   }
+    BOOL GetFixedRowSelection()                   { return m_bFixedRowSelection;      }
+    void EnableDragAndDrop(BOOL bAllow = TRUE)    { m_bAllowDragAndDrop = bAllow;     }
+    BOOL GetDragAndDrop() const                   { return m_bAllowDragAndDrop;       }
+    void SetRowResize(BOOL bResize = TRUE)        { m_bAllowRowResize = bResize;      }
+    BOOL GetRowResize() const                     { return m_bAllowRowResize;         }
+    void SetColumnResize(BOOL bResize = TRUE)     { m_bAllowColumnResize = bResize;   }
+    BOOL GetColumnResize() const                  { return m_bAllowColumnResize;      }
+    void SetHeaderSort(BOOL bSortOnClick = TRUE)  { m_bSortOnClick = bSortOnClick;    }
+    BOOL GetHeaderSort() const                    { return m_bSortOnClick;            }
+    void SetHandleTabKey(BOOL bHandleTab = TRUE)  { m_bHandleTabKey = bHandleTab;     }
+    BOOL GetHandleTabKey() const                  { return m_bHandleTabKey;           }
+    void SetDoubleBuffering(BOOL bBuffer = TRUE)  { m_bDoubleBuffer = bBuffer;        }
+    BOOL GetDoubleBuffering() const               { return m_bDoubleBuffer;           }
+    void EnableTitleTips(BOOL bEnable = TRUE)     { m_bTitleTips = bEnable;           }
+    BOOL GetTitleTips()                           { return m_bTitleTips;              }
+    void SetSortColumn(int nCol);
+    int  GetSortColumn() const                    { return m_nSortColumn;             }
+    void SetSortAscending(BOOL bAscending)        { m_bAscending = bAscending;        }
+    BOOL GetSortAscending() const                 { return m_bAscending;              }
+    void SetTrackFocusCell(BOOL bTrack)           { m_bTrackFocusCell = bTrack;       }
+    BOOL GetTrackFocusCell()                      { return m_bTrackFocusCell;         }
+    void SetFrameFocusCell(BOOL bFrame)           { m_bFrameFocus = bFrame;           }
+    BOOL GetFrameFocusCell()                      { return m_bFrameFocus;             }
+    void SetAutoSizeStyle(int nStyle = GVS_BOTH)  { m_nAutoSizeColumnStyle = nStyle;  }
+    int  GetAutoSizeStyle()                       { return m_nAutoSizeColumnStyle; }
+
+    void EnableHiddenColUnhide(BOOL bEnable = TRUE){ m_bHiddenColUnhide = bEnable;    }
+    BOOL GetHiddenColUnhide()                     { return m_bHiddenColUnhide;        }
+    void EnableHiddenRowUnhide(BOOL bEnable = TRUE){ m_bHiddenRowUnhide = bEnable;    }
+    BOOL GetHiddenRowUnhide()                     { return m_bHiddenRowUnhide;        }
+
+    void EnableColumnHide(BOOL bEnable = TRUE)    { m_bAllowColHide = bEnable;        }
+    BOOL GetColumnHide()                          { return m_bAllowColHide;           }
+    void EnableRowHide(BOOL bEnable = TRUE)       { m_bAllowRowHide = bEnable;        }
+    BOOL GetRowHide()                             { return m_bAllowRowHide;           }
+
+///////////////////////////////////////////////////////////////////////////////////
+// default Grid cells. Use these for setting default values such as colors and fonts
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    CGridCellBase* GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const;
+
+///////////////////////////////////////////////////////////////////////////////////
+// Grid cell Attributes
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    CGridCellBase* GetCell(int nRow, int nCol) const;   // Get the actual cell!
+
+    void SetModified(BOOL bModified = TRUE, int nRow = -1, int nCol = -1);
+    BOOL GetModified(int nRow = -1, int nCol = -1);
+    BOOL IsCellFixed(int nRow, int nCol);
+
+    BOOL   SetItem(const GV_ITEM* pItem);
+    BOOL   GetItem(GV_ITEM* pItem);
+    BOOL   SetItemText(int nRow, int nCol, LPCTSTR str);
+    // The following was virtual. If you want to override, use 
+    //  CGridCellBase-derived class's GetText() to accomplish same thing
+    CString GetItemText(int nRow, int nCol) const;
+
+    // EFW - 06/13/99 - Added to support printf-style formatting codes.
+    // Also supports use with a string resource ID
+#if !defined(_WIN32_WCE) || (_WIN32_WCE >= 210)
+    BOOL   SetItemTextFmt(int nRow, int nCol, LPCTSTR szFmt, ...);
+    BOOL   SetItemTextFmtID(int nRow, int nCol, UINT nID, ...);
+#endif
+
+    BOOL   SetItemData(int nRow, int nCol, LPARAM lParam);
+    LPARAM GetItemData(int nRow, int nCol) const;
+    BOOL   SetItemImage(int nRow, int nCol, int iImage);
+    int    GetItemImage(int nRow, int nCol) const;
+    BOOL   SetItemState(int nRow, int nCol, UINT state);
+    UINT   GetItemState(int nRow, int nCol) const;
+    BOOL   SetItemFormat(int nRow, int nCol, UINT nFormat);
+    UINT   GetItemFormat(int nRow, int nCol) const;
+    BOOL   SetItemBkColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
+    COLORREF GetItemBkColour(int nRow, int nCol) const;
+    BOOL   SetItemFgColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT);
+    COLORREF GetItemFgColour(int nRow, int nCol) const;
+    BOOL SetItemFont(int nRow, int nCol, const LOGFONT* lf);
+    const LOGFONT* GetItemFont(int nRow, int nCol);
+
+    BOOL IsItemEditing(int nRow, int nCol);
+
+    BOOL SetCellType(int nRow, int nCol, CRuntimeClass* pRuntimeClass);
+    BOOL SetDefaultCellType( CRuntimeClass* pRuntimeClass);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Operations
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    int  InsertColumn(LPCTSTR strHeading, UINT nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE,
+                      int nColumn = -1);
+    int  InsertRow(LPCTSTR strHeading, int nRow = -1);
+    BOOL DeleteColumn(int nColumn);
+    BOOL DeleteRow(int nRow);
+    BOOL DeleteNonFixedRows();
+    BOOL DeleteAllItems();
+
+	void ClearCells(CCellRange Selection);
+
+    BOOL AutoSizeRow(int nRow, BOOL bResetScroll = TRUE);
+    BOOL AutoSizeColumn(int nCol, UINT nAutoSizeStyle = GVS_DEFAULT, BOOL bResetScroll = TRUE);
+    void AutoSizeRows();
+    void AutoSizeColumns(UINT nAutoSizeStyle = GVS_DEFAULT);
+    void AutoSize(UINT nAutoSizeStyle = GVS_DEFAULT);
+    void ExpandColumnsToFit(BOOL bExpandFixed = TRUE);
+    void ExpandLastColumn();
+    void ExpandRowsToFit(BOOL bExpandFixed = TRUE);
+    void ExpandToFit(BOOL bExpandFixed = TRUE);
+
+    void Refresh();
+    void AutoFill();   // Fill grid with blank cells
+
+    void EnsureVisible(CCellID &cell)       { EnsureVisible(cell.row, cell.col); }
+    void EnsureVisible(int nRow, int nCol);
+    BOOL IsCellVisible(int nRow, int nCol);
+    BOOL IsCellVisible(CCellID cell);
+    BOOL IsCellEditable(int nRow, int nCol) const;
+    BOOL IsCellEditable(CCellID &cell) const;
+    BOOL IsCellSelected(int nRow, int nCol) const;
+    BOOL IsCellSelected(CCellID &cell) const;
+	
+
+    // SetRedraw stops/starts redraws on things like changing the # rows/columns
+    // and autosizing, but not for user-intervention such as resizes
+    void SetRedraw(BOOL bAllowDraw, BOOL bResetScrollBars = FALSE);
+    BOOL RedrawCell(int nRow, int nCol, CDC* pDC = NULL);
+    BOOL RedrawCell(const CCellID& cell, CDC* pDC = NULL);
+    BOOL RedrawRow(int row);
+    BOOL RedrawColumn(int col);
+
+#ifndef _WIN32_WCE
+    BOOL Save(LPCTSTR filename, TCHAR chSeparator = _T(','));
+    BOOL Load(LPCTSTR filename, TCHAR chSeparator = _T(','));
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+// Cell Ranges
+///////////////////////////////////////////////////////////////////////////////////
+ public:
+    CCellRange GetCellRange() const;
+    CCellRange GetSelectedCellRange() const;
+    void SetSelectedRange(const CCellRange& Range, BOOL bForceRepaint = FALSE, BOOL bSelectCells = TRUE);
+    void SetSelectedRange(int nMinRow, int nMinCol, int nMaxRow, int nMaxCol,
+                          BOOL bForceRepaint = FALSE, BOOL bSelectCells = TRUE);
+    BOOL IsValid(int nRow, int nCol) const;
+    BOOL IsValid(const CCellID& cell) const;
+    BOOL IsValid(const CCellRange& range) const;
+
+///////////////////////////////////////////////////////////////////////////////////
+// Clipboard, drag and drop, and cut n' paste operations
+///////////////////////////////////////////////////////////////////////////////////
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+    virtual void CutSelectedText();
+    virtual COleDataSource* CopyTextFromGrid();
+    virtual BOOL PasteTextToGrid(CCellID cell, COleDataObject* pDataObject, BOOL bSelectPastedCells=TRUE);
+#endif
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+ public:
+    virtual void OnBeginDrag();
+    virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+    virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+    virtual void OnDragLeave();
+    virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
+#endif
+
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+    virtual void OnEditCut();
+    virtual void OnEditCopy();
+    virtual void OnEditPaste();
+#endif
+    virtual void OnEditSelectAll();
+
+///////////////////////////////////////////////////////////////////////////////////
+// Misc.
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    CCellID GetNextItem(CCellID& cell, int nFlags) const;
+
+	BOOL SortItems(int nCol, BOOL bAscending, LPARAM data = 0);
+    BOOL SortTextItems(int nCol, BOOL bAscending, LPARAM data = 0);
+    BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data = 0);
+
+	void SetCompareFunction(PFNLVCOMPARE pfnCompare);
+
+	// in-built sort functions
+	static int CALLBACK pfnCellTextCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
+	static int CALLBACK pfnCellNumericCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Printing
+///////////////////////////////////////////////////////////////////////////////////
+#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
+public:
+    void Print(CPrintDialog* pPrntDialog = NULL);
+
+    // EFW - New printing support functions
+    void EnableWysiwygPrinting(BOOL bEnable = TRUE) { m_bWysiwygPrinting = bEnable;     }
+    BOOL GetWysiwygPrinting()                       { return m_bWysiwygPrinting;        }
+
+    void SetShadedPrintOut(BOOL bEnable = TRUE)     {   m_bShadedPrintOut = bEnable;    }
+    BOOL GetShadedPrintOut(void)                    {   return m_bShadedPrintOut;       }
+
+    // Use -1 to have it keep the existing value
+    void SetPrintMarginInfo(int nHeaderHeight, int nFooterHeight,
+        int nLeftMargin, int nRightMargin, int nTopMargin,
+        int nBottomMargin, int nGap);
+
+    void GetPrintMarginInfo(int &nHeaderHeight, int &nFooterHeight,
+        int &nLeftMargin, int &nRightMargin, int &nTopMargin,
+        int &nBottomMargin, int &nGap);
+
+///////////////////////////////////////////////////////////////////////////////////
+// Printing overrides for derived classes
+///////////////////////////////////////////////////////////////////////////////////
+public:
+    virtual void OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo);
+    virtual void OnPrint(CDC *pDC, CPrintInfo *pInfo);
+    virtual void OnEndPrinting(CDC *pDC, CPrintInfo *pInfo);
+
+#endif // #if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
+
+// Implementation
+public:
+    virtual ~CGridCtrl();
+
+protected:
+    BOOL RegisterWindowClass();
+    BOOL Initialise();
+    void SetupDefaultCells();
+
+    LRESULT SendMessageToParent(int nRow, int nCol, int nMessage) const;
+    LRESULT SendDisplayRequestToParent(GV_DISPINFO* pDisplayInfo) const;
+    LRESULT SendCacheHintToParent(const CCellRange& range) const;
+
+    BOOL InvalidateCellRect(const int row, const int col);
+    BOOL InvalidateCellRect(const CCellID& cell);
+    BOOL InvalidateCellRect(const CCellRange& cellRange);
+    void EraseBkgnd(CDC* pDC);
+
+    BOOL GetCellRangeRect(const CCellRange& cellRange, LPRECT lpRect);
+
+    BOOL SetCell(int nRow, int nCol, CGridCellBase* pCell);
+
+    int  SetMouseMode(int nMode) { int nOldMode = m_MouseMode; m_MouseMode = nMode; return nOldMode; }
+    int  GetMouseMode() const    { return m_MouseMode; }
+
+    BOOL MouseOverRowResizeArea(CPoint& point);
+    BOOL MouseOverColumnResizeArea(CPoint& point);
+
+    CCellID GetTopleftNonFixedCell(BOOL bForceRecalculation = FALSE);
+    CCellRange GetUnobstructedNonFixedCellRange(BOOL bForceRecalculation = FALSE);
+	// LUC
+    CCellRange GetVisibleNonFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE);
+    CCellRange GetVisibleFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE);
+
+    BOOL IsVisibleVScroll() { return ( (m_nBarState & GVL_VERT) > 0); } 
+    BOOL IsVisibleHScroll() { return ( (m_nBarState & GVL_HORZ) > 0); }
+    void ResetSelectedRange();
+    void ResetScrollBars();
+    void EnableScrollBars(int nBar, BOOL bEnable = TRUE);
+    int  GetScrollPos32(int nBar, BOOL bGetTrackPos = FALSE);
+    BOOL SetScrollPos32(int nBar, int nPos, BOOL bRedraw = TRUE);
+
+    BOOL SortTextItems(int nCol, BOOL bAscending, int low, int high);
+    BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data,
+                   int low, int high);
+
+    CPoint GetPointClicked(int nRow, int nCol, const CPoint& point);
+
+	void ValidateAndModifyCellContents(int nRow, int nCol, LPCTSTR strText);
+
+// Overrrides
+    // ClassWizard generated virtual function overrides
+    //{{AFX_VIRTUAL(CGridCtrl)
+    protected:
+    virtual void PreSubclassWindow();
+    //}}AFX_VIRTUAL
+
+protected:
+#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING)
+    // Printing
+	virtual void PrintFixedRowCells(int nStartColumn, int nStopColumn, int& row, CRect& rect,
+                                    CDC *pDC, BOOL& bFirst);
+    virtual void PrintColumnHeadings(CDC *pDC, CPrintInfo *pInfo);
+    virtual void PrintHeader(CDC *pDC, CPrintInfo *pInfo);
+    virtual void PrintFooter(CDC *pDC, CPrintInfo *pInfo);
+    virtual void PrintRowButtons(CDC *pDC, CPrintInfo* /*pInfo*/);
+#endif
+
+#ifndef GRIDCONTROL_NO_DRAGDROP
+    // Drag n' drop
+    virtual CImageList* CreateDragImage(CPoint *pHotSpot);    // no longer necessary
+#endif
+
+    // Mouse Clicks
+    virtual void  OnFixedColumnClick(CCellID& cell);
+    virtual void  OnFixedRowClick(CCellID& cell);
+
+    // Editing
+    virtual void  OnEditCell(int nRow, int nCol, CPoint point, UINT nChar);
+    virtual void  OnEndEditCell(int nRow, int nCol, CString str);
+	virtual BOOL  ValidateEdit(int nRow, int nCol, LPCTSTR str);
+    virtual void  EndEditing();
+
+    // Drawing
+    virtual void  OnDraw(CDC* pDC);
+
+    // CGridCellBase Creation and Cleanup
+    virtual CGridCellBase* CreateCell(int nRow, int nCol);
+    virtual void DestroyCell(int nRow, int nCol);
+
+// Attributes
+protected:
+    // General attributes
+    COLORREF    m_crFixedTextColour, m_crFixedBkColour;
+    COLORREF    m_crGridBkColour, m_crGridLineColour;
+    COLORREF    m_crWindowText, m_crWindowColour, m_cr3DFace,     // System colours
+                m_crShadow;
+    COLORREF    m_crTTipBackClr, m_crTTipTextClr;                 // Titletip colours - FNA
+    
+    BOOL        m_bVirtualMode;
+    LPARAM      m_lParam;                                           // lParam for callback
+    GRIDCALLBACK m_pfnCallback;                                     // The callback function
+
+    int         m_nGridLines;
+    BOOL        m_bEditable;
+    BOOL        m_bModified;
+    BOOL        m_bAllowDragAndDrop;
+    BOOL        m_bListMode;
+    BOOL        m_bSingleRowSelection;
+    BOOL        m_bSingleColSelection;
+    BOOL        m_bAllowDraw;
+    BOOL        m_bEnableSelection;
+    BOOL        m_bFixedRowSelection, m_bFixedColumnSelection;
+    BOOL        m_bSortOnClick;
+    BOOL        m_bHandleTabKey;
+    BOOL        m_bDoubleBuffer;
+    BOOL        m_bTitleTips;
+    int         m_nBarState;
+    BOOL        m_bWysiwygPrinting;
+    BOOL        m_bHiddenColUnhide, m_bHiddenRowUnhide;
+    BOOL        m_bAllowColHide, m_bAllowRowHide;
+    BOOL        m_bAutoSizeSkipColHdr;
+    BOOL        m_bTrackFocusCell;
+    BOOL        m_bFrameFocus;
+    UINT        m_nAutoSizeColumnStyle;
+
+	// Cell enable
+	vector<vector<CELL_ENABLE>>	m_pCellEnable;
+
+    // Cell size details
+    int         m_nRows, m_nFixedRows, m_nCols, m_nFixedCols;
+	// LUC
+	int			m_nFreezedRows, m_nFreezedCols;
+	BOOL m_bExcludeFreezedRowsFromSelection;
+	BOOL m_bExcludeFreezedColsFromSelection;
+	
+	// LUC
+	CArray<CCellRange, CCellRange&> m_arMergedCells;
+	// LUC
+	BOOL m_bShowHorzNonGridArea;
+	
+    CUIntArray  m_arRowHeights, m_arColWidths;
+    int         m_nVScrollMax, m_nHScrollMax;
+
+    // Fonts and images
+    CRuntimeClass*   m_pRtcDefault; // determines kind of Grid Cell created by default
+    CGridDefaultCell m_cellDefault;  // "default" cell. Contains default colours, font etc.
+    CGridDefaultCell m_cellFixedColDef, m_cellFixedRowDef, m_cellFixedRowColDef;
+    CFont       m_PrinterFont;  // for the printer
+    CImageList* m_pImageList;
+
+    // Cell data
+    CTypedPtrArray<CObArray, GRID_ROW*> m_RowData;
+
+    // Mouse operations such as cell selection
+    int         m_MouseMode;
+    BOOL        m_bLMouseButtonDown, m_bRMouseButtonDown;
+    CPoint      m_LeftClickDownPoint, m_LastMousePoint;
+    CCellID     m_LeftClickDownCell, m_SelectionStartCell;
+    CCellID     m_idCurrentCell, m_idTopLeftCell;
+    INT_PTR     m_nTimerID;
+    int         m_nTimerInterval;
+    int         m_nResizeCaptureRange;
+    BOOL        m_bAllowRowResize, m_bAllowColumnResize;
+    int         m_nRowsPerWheelNotch;
+    CMap<DWORD,DWORD, CCellID, CCellID&> m_SelectedCellMap, m_PrevSelectedCellMap;
+
+#ifndef GRIDCONTROL_NO_TITLETIPS
+    CTitleTip   m_TitleTip;             // Title tips for cells
+#endif
+
+    // Drag and drop
+    CCellID     m_LastDragOverCell;
+#ifndef GRIDCONTROL_NO_DRAGDROP
+    CGridDropTarget m_DropTarget;       // OLE Drop target for the grid
+#endif
+
+    // Printing information
+    CSize       m_CharSize;
+    int         m_nPageHeight;
+    CSize       m_LogicalPageSize,      // Page size in gridctrl units.
+                m_PaperSize;            // Page size in device units.
+    // additional properties to support Wysiwyg printing
+    int         m_nPageWidth;
+    int         m_nPrintColumn;
+    int         m_nCurrPrintRow;
+    int         m_nNumPages;
+    int         m_nPageMultiplier;
+
+    // sorting
+    int          m_bAscending;
+    int          m_nSortColumn;
+	PFNLVCOMPARE m_pfnCompare;
+
+    // EFW - Added to support shaded/unshaded printout.  If true, colored
+    // cells will print as-is.  If false, all text prints as black on white.
+    BOOL        m_bShadedPrintOut;
+
+    // EFW - Added support for user-definable margins.  Top and bottom are in 
+    // lines.  Left, right, and gap are in characters (avg width is used).
+    int         m_nHeaderHeight, m_nFooterHeight, m_nLeftMargin,
+                m_nRightMargin, m_nTopMargin, m_nBottomMargin, m_nGap;
+
+protected:
+    void SelectAllCells();
+    void SelectColumns(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE);
+    void SelectRows(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE);
+    void SelectCells(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE);
+    void OnSelecting(const CCellID& currentCell);
+
+    // Generated message map functions
+    //{{AFX_MSG(CGridCtrl)
+    afx_msg void OnPaint();
+    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
+    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
+    afx_msg void OnSize(UINT nType, int cx, int cy);
+    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
+    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
+    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+    afx_msg void OnTimer(UINT_PTR nIDEvent);
+    afx_msg UINT OnGetDlgCode();
+    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
+    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+    afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnUpdateEditSelectAll(CCmdUI* pCmdUI);
+    //}}AFX_MSG
+#ifndef _WIN32_WCE_NO_CURSOR
+    afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
+#endif
+#ifndef _WIN32_WCE
+    afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
+    afx_msg void OnRButtonUp(UINT nFlags, CPoint point);    // EFW - Added
+    afx_msg void OnSysColorChange();
+#endif
+#ifndef _WIN32_WCE_NO_CURSOR
+    afx_msg void OnCaptureChanged(CWnd *pWnd);
+#endif
+#ifndef GRIDCONTROL_NO_CLIPBOARD
+    afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
+    afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI);
+    afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
+#endif
+#if (_MFC_VER >= 0x0421) || (_WIN32_WCE >= 210)
+    afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
+#endif
+#if !defined(_WIN32_WCE) && (_MFC_VER >= 0x0421)
+    afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
+#endif
+    afx_msg LRESULT OnSetFont(WPARAM hFont, LPARAM lParam);
+    afx_msg LRESULT OnGetFont(WPARAM hFont, LPARAM lParam);
+    afx_msg LRESULT OnImeChar(WPARAM wCharCode, LPARAM lParam);
+    afx_msg void OnEndInPlaceEdit(NMHDR* pNMHDR, LRESULT* pResult);
+	afx_msg void OnComboSelChange(NMHDR* pNMHDR, LRESULT* pResult);
+    DECLARE_MESSAGE_MAP()
+
+    enum eMouseModes { MOUSE_NOTHING, MOUSE_SELECT_ALL, MOUSE_SELECT_COL, MOUSE_SELECT_ROW,
+                       MOUSE_SELECT_CELLS, MOUSE_SCROLLING_CELLS,
+                       MOUSE_OVER_ROW_DIVIDE, MOUSE_SIZING_ROW,
+                       MOUSE_OVER_COL_DIVIDE, MOUSE_SIZING_COL,
+                       MOUSE_PREPARE_EDIT,
+#ifndef GRIDCONTROL_NO_DRAGDROP
+                       MOUSE_PREPARE_DRAG, MOUSE_DRAGGING
+#endif
+    };
+//      for sort in virtual mode, and column order, save and load layer
+public:
+	typedef std::vector<int> intlist;
+	void Reorder(int From, int To);
+	void SetVirtualCompare(PVIRTUALCOMPARE VirtualCompare) { m_pfnVirtualCompare = VirtualCompare;}
+	int m_CurCol;
+	void AllowReorderColumn(bool b=true) { m_AllowReorderColumn = b;}
+	void EnableDragRowMode(bool b=true) { m_bDragRowMode = b; if(b) EnableDragAndDrop(); } // to change row order
+	int GetLayer(int** pLayer); //  gives back the number of ints of the area (do not forget to delete *pLayer)
+	void SetLayer(int* pLayer); // coming from a previous GetLayer (ignored if not same number of column, or the same revision number)
+	void ForceQuitFocusOnTab(bool b=true) { m_QuitFocusOnTab = b;} // use only if GetParent() is a CDialog
+	void AllowSelectRowInFixedCol(bool b=true) { m_AllowSelectRowInFixedCol = b;} // 
+//    allow acces?
+	intlist m_arRowOrder, m_arColOrder;
+	static CGridCtrl* m_This;
+protected:
+	virtual void AddSubVirtualRow(int Num, int Nb);
+	bool m_bDragRowMode;
+	int m_CurRow;
+private:
+	void ResetVirtualOrder();
+	PVIRTUALCOMPARE m_pfnVirtualCompare;
+	static bool NotVirtualCompare(int c1, int c2);
+	bool m_InDestructor;
+	bool m_AllowReorderColumn;
+	bool m_QuitFocusOnTab;
+	bool m_AllowSelectRowInFixedCol;
+
+};
+
+// Returns the default cell implementation for the given grid region
+inline CGridCellBase* CGridCtrl::GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const
+{ 
+    if (bFixedRow && bFixedCol) return (CGridCellBase*) &m_cellFixedRowColDef;
+    if (bFixedRow)              return (CGridCellBase*) &m_cellFixedRowDef;
+    if (bFixedCol)              return (CGridCellBase*) &m_cellFixedColDef;
+    return (CGridCellBase*) &m_cellDefault;
+}
+
+inline CGridCellBase* CGridCtrl::GetCell(int nRow, int nCol) const
+{
+	if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) 
+        return NULL;
+	
+    if (GetVirtualMode())
+    {
+        CGridCellBase* pCell = GetDefaultCell(nRow < m_nFixedRows, nCol < m_nFixedCols);
+        static GV_DISPINFO gvdi;
+        gvdi.item.row     = nRow;
+        gvdi.item.col     = nCol;
+        gvdi.item.mask    = 0xFFFFFFFF;
+        gvdi.item.nState  = 0;
+        gvdi.item.nFormat = pCell->GetFormat();
+        gvdi.item.iImage  = pCell->GetImage();
+        gvdi.item.crBkClr = pCell->GetBackClr();
+        gvdi.item.crFgClr = pCell->GetTextClr();
+        gvdi.item.lParam  = pCell->GetData();
+        memcpy(&gvdi.item.lfFont, pCell->GetFont(), sizeof(LOGFONT));
+        gvdi.item.nMargin = pCell->GetMargin();
+        gvdi.item.strText.Empty();
+
+        // Fix the state bits
+        if (IsCellSelected(nRow, nCol))   gvdi.item.nState |= GVIS_SELECTED;
+        if (nRow < GetFixedRowCount())    gvdi.item.nState |= (GVIS_FIXED | GVIS_FIXEDROW);
+        if (nCol < GetFixedColumnCount()) gvdi.item.nState |= (GVIS_FIXED | GVIS_FIXEDCOL);
+        if (GetFocusCell() == CCellID(nRow, nCol)) gvdi.item.nState |= GVIS_FOCUSED;
+		if(!m_InDestructor)
+		{
+			gvdi.item.row = m_arRowOrder[nRow];
+			gvdi.item.col = m_arColOrder[nCol];
+
+			if (m_pfnCallback)
+				m_pfnCallback(&gvdi, m_lParam);
+			else
+				SendDisplayRequestToParent(&gvdi);
+			gvdi.item.row = nRow;        
+			gvdi.item.col = nCol;
+		}
+        static CGridCell cell;
+        cell.SetState(gvdi.item.nState);
+        cell.SetFormat(gvdi.item.nFormat);
+        cell.SetImage(gvdi.item.iImage);
+        cell.SetBackClr(gvdi.item.crBkClr);
+        cell.SetTextClr(gvdi.item.crFgClr);
+        cell.SetData(gvdi.item.lParam);
+        cell.SetFont(&(gvdi.item.lfFont));
+        cell.SetMargin(gvdi.item.nMargin);
+        cell.SetText(gvdi.item.strText);
+        cell.SetGrid((CGridCtrl*)this);
+
+        return (CGridCellBase*) &cell;
+    }
+
+    GRID_ROW* pRow = m_RowData[nRow];
+    if (!pRow) return NULL;
+	if(pRow->GetData() == NULL)
+		return NULL;
+    return pRow->GetAt(m_arColOrder[nCol]);
+}
+
+inline BOOL CGridCtrl::SetCell(int nRow, int nCol, CGridCellBase* pCell)
+{
+    if (GetVirtualMode())
+        return FALSE;
+
+    if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) 
+        return FALSE;
+
+    GRID_ROW* pRow = m_RowData[nRow];
+    if (!pRow) return FALSE;
+
+    pCell->SetCoords( nRow, nCol); 
+    pRow->SetAt(nCol, pCell);
+
+    return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h
new file mode 100644
index 0000000..1fe5887
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridDropTarget.h
@@ -0,0 +1,82 @@
+//////////////////////////////////////////////////////////////////////
+// GridDropTarget.h : header file
+//
+// MFC Grid Control - Drag/Drop target implementation
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.10+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_)
+#define AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+
+#include <afxole.h>
+
+class CGridCtrl;
+
+/////////////////////////////////////////////////////////////////////////////
+// CGridDropTarget command target
+
+class AFX_EXT_CLASS CGridDropTarget : public COleDropTarget
+{
+public:
+    CGridDropTarget();
+    virtual ~CGridDropTarget();
+
+// Attributes
+public:
+    CGridCtrl* m_pGridCtrl;
+    BOOL       m_bRegistered;
+
+// Operations
+public:
+    BOOL Register(CGridCtrl *pGridCtrl);
+    virtual void Revoke();
+
+    BOOL        OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
+    DROPEFFECT  OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+    void        OnDragLeave(CWnd* pWnd);
+    DROPEFFECT  OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
+    DROPEFFECT  OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point);
+
+// Overrides
+    // ClassWizard generated virtual function overrides
+    //{{AFX_VIRTUAL(CGridDropTarget)
+    //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+
+    // Generated message map functions
+    //{{AFX_MSG(CGridDropTarget)
+    //}}AFX_MSG
+
+    DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h
new file mode 100644
index 0000000..b26b207
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridInPlaceEdit.h
@@ -0,0 +1,83 @@
+//////////////////////////////////////////////////////////////////////
+// InPlaceEdit.h : header file
+//
+// MFC Grid Control - inplace editing class
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.10+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+class CGridInPlaceEdit : public CEdit
+{
+// Construction
+public:
+    CGridInPlaceEdit(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID,
+                 int nRow, int nColumn, CString sInitText, UINT nFirstChar);
+
+// Attributes
+public:
+ 
+// Operations
+public:
+     void EndEdit();
+ 
+// Overrides
+     // ClassWizard generated virtual function overrides
+     //{{AFX_VIRTUAL(CGridInPlaceEdit)
+	public:
+	virtual BOOL PreTranslateMessage(MSG* pMsg);
+	protected:
+	virtual void PostNcDestroy();
+	//}}AFX_VIRTUAL
+ 
+// Implementation
+public:
+     virtual ~CGridInPlaceEdit();
+ 
+// Generated message map functions
+protected:
+    //{{AFX_MSG(CGridInPlaceEdit)
+    afx_msg void OnKillFocus(CWnd* pNewWnd);
+    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
+    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg UINT OnGetDlgCode();
+	//}}AFX_MSG
+    DECLARE_MESSAGE_MAP()
+
+private:
+    int     m_nRow;
+    int     m_nColumn;
+    CString m_sInitText;
+    UINT    m_nLastChar;
+    BOOL    m_bExitOnArrows;
+    CRect   m_Rect;
+};
+ 
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h b/SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h
new file mode 100644
index 0000000..f0f4894
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/GridMemDC.h
@@ -0,0 +1,106 @@
+#if !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)
+#define AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+// MemDC.h : header file
+//
+
+//////////////////////////////////////////////////
+// CGridMemDC - memory DC
+//
+// Author: Keith Rule
+// Email:  keithr@europa.com
+// Copyright 1996-1997, Keith Rule
+//
+// You may freely use or modify this code provided this
+// Copyright is included in all derived versions.
+//
+// History - 10/3/97 Fixed scrolling bug.
+//                   Added print support.
+//           25 feb 98 - fixed minor assertion bug
+//
+// This class implements a memory Device Context
+
+class CGridMemDC : public CDC
+{
+public:
+
+    // constructor sets up the memory DC
+    CGridMemDC(CDC* pDC) : CDC()
+    {
+//        ASSERT(pDC != NULL);
+
+        m_pDC = pDC;
+        m_pOldBitmap = NULL;
+#ifndef _WIN32_WCE_NO_PRINTING
+        m_bMemDC = !pDC->IsPrinting();
+#else
+        m_bMemDC = FALSE;
+#endif
+
+        if (m_bMemDC)    // Create a Memory DC
+        {
+            pDC->GetClipBox(&m_rect);
+            CreateCompatibleDC(pDC);
+            m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
+            m_pOldBitmap = SelectObject(&m_bitmap);
+#ifndef _WIN32_WCE
+            SetWindowOrg(m_rect.left, m_rect.top);
+#endif
+            // EFW - Bug fix - Fill background in case the user has overridden
+            // WM_ERASEBKGND.  We end up with garbage otherwise.
+            // CJM - moved to fix a bug in the fix.
+            FillSolidRect(m_rect, pDC->GetBkColor());
+        }
+        else        // Make a copy of the relevent parts of the current DC for printing
+        {
+#if !defined(_WIN32_WCE) || ((_WIN32_WCE > 201) && !defined(_WIN32_WCE_NO_PRINTING))
+            m_bPrinting = pDC->m_bPrinting;
+#endif
+            m_hDC       = pDC->m_hDC;
+            m_hAttribDC = pDC->m_hAttribDC;
+        }
+
+    }
+
+    // Destructor copies the contents of the mem DC to the original DC
+    ~CGridMemDC()
+    {
+        if (m_bMemDC)
+        {
+            // Copy the offscreen bitmap onto the screen.
+            m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
+                          this, m_rect.left, m_rect.top, SRCCOPY);
+
+            //Swap back the original bitmap.
+            SelectObject(m_pOldBitmap);
+        } else {
+            // All we need to do is replace the DC with an illegal value,
+            // this keeps us from accidently deleting the handles associated with
+            // the CDC that was passed to the constructor.
+            m_hDC = m_hAttribDC = NULL;
+        }
+    }
+
+    // Allow usage as a pointer
+    CGridMemDC* operator->() {return this;}
+        
+    // Allow usage as a pointer
+    operator CGridMemDC*() {return this;}
+
+private:
+    CBitmap  m_bitmap;      // Offscreen bitmap
+    CBitmap* m_pOldBitmap;  // bitmap originally found in CGridMemDC
+    CDC*     m_pDC;         // Saves CDC passed in constructor
+    CRect    m_rect;        // Rectangle of drawing area.
+    BOOL     m_bMemDC;      // TRUE if CDC really is a Memory DC.
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h
new file mode 100644
index 0000000..049cb44
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCheck.h
@@ -0,0 +1,68 @@
+#if !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCellCheck.h : header file
+//
+// MFC Grid Control - Grid combo cell class header file
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.22+
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#include "..\\GridCell.h"
+
+
+class AFX_EXT_CLASS CGridCellCheck : public CGridCell
+{
+    friend class CGridCtrl;
+    DECLARE_DYNCREATE(CGridCellCheck)
+
+public:
+    CGridCellCheck();
+
+public:
+	BOOL SetCheck(BOOL bChecked = TRUE);
+	BOOL GetCheck();
+
+// Operations
+	virtual CSize GetCellExtent(CDC* pDC);
+    virtual void OnClick( CPoint PointCellRelative);
+    virtual BOOL GetTextRect( LPRECT pRect);
+
+protected:
+	CRect GetCheckPlacement();
+
+    virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+
+protected:
+    BOOL  m_bChecked;
+    CRect m_Rect;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h
new file mode 100644
index 0000000..bf436c3
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellCombo.h
@@ -0,0 +1,178 @@
+#if !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+/////////////////////////////////////////////////////////////////////////////
+// GridCellCombo.h : header file
+//
+// MFC Grid Control - Grid combo cell class header file
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.10
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#include "../GridCell.h"
+
+
+class AFX_EXT_CLASS CGridCellCombo : public CGridCell
+{
+    friend class CGridCtrl;
+    DECLARE_DYNCREATE(CGridCellCombo)
+
+public:
+    CGridCellCombo();
+
+// editing cells
+public:
+    virtual BOOL  Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+    virtual CWnd* GetEditWnd() const;
+    virtual void  EndEdit();
+
+// Operations
+public:
+	virtual CSize GetCellExtent(CDC* pDC);
+
+// CGridCellCombo specific calls
+public:
+    void  SetOptions(const CStringArray& ar);
+    void  SetStyle(DWORD dwStyle)           { m_dwStyle = dwStyle; }
+    DWORD GetStyle()                        { return m_dwStyle;    }
+
+protected:
+    virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+
+    CStringArray m_Strings;
+    DWORD        m_dwStyle;
+};
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CComboEdit window
+
+#define IDC_COMBOEDIT 1001
+
+class CComboEdit : public CEdit
+{
+// Construction
+public:
+	CComboEdit();
+
+// Attributes
+public:
+
+// Operations
+public:
+
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CComboEdit)
+	virtual BOOL PreTranslateMessage(MSG* pMsg);
+	//}}AFX_VIRTUAL
+
+// Implementation
+public:
+	virtual ~CComboEdit();
+
+	// Generated message map functions
+protected:
+	//{{AFX_MSG(CComboEdit)
+	afx_msg void OnKillFocus(CWnd* pNewWnd);
+	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+	//}}AFX_MSG
+
+	DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// CInPlaceList window
+
+class CInPlaceList : public CComboBox
+{
+    friend class CComboEdit;
+
+// Construction
+public:
+	CInPlaceList(CWnd* pParent,         // parent
+                 CRect& rect,           // dimensions & location
+                 DWORD dwStyle,         // window/combobox style
+                 UINT nID,              // control ID
+                 int nRow, int nColumn, // row and column
+                 COLORREF crFore, COLORREF crBack,  // Foreground, background colour
+				 CStringArray& Items,   // Items in list
+                 CString sInitText,     // initial selection
+				 UINT nFirstChar);      // first character to pass to control
+
+// Attributes
+public:
+   CComboEdit m_edit;  // subclassed edit control
+
+// Operations
+public:
+
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CInPlaceList)
+	protected:
+	virtual void PostNcDestroy();
+	//}}AFX_VIRTUAL
+
+// Implementation
+public:
+	virtual ~CInPlaceList();
+    void EndEdit();
+
+protected:
+    int GetCorrectDropWidth();
+
+// Generated message map functions
+protected:
+	//{{AFX_MSG(CInPlaceList)
+	afx_msg void OnKillFocus(CWnd* pNewWnd);
+	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg void OnDropdown();
+	afx_msg void OnSelChange();
+	afx_msg UINT OnGetDlgCode();
+	afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
+	//}}AFX_MSG
+	//afx_msg void OnSelendOK();
+
+	DECLARE_MESSAGE_MAP()
+
+private:
+	int		 m_nNumLines;
+	CString  m_sInitText;
+	int		 m_nRow;
+	int		 m_nCol;
+ 	UINT     m_nLastChar; 
+	BOOL	 m_bExitOnArrows; 
+    COLORREF m_crForeClr, m_crBackClr;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h
new file mode 100644
index 0000000..a3d5a76
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellDateTime.h
@@ -0,0 +1,92 @@
+// GridCellDateTime.h: interface for the CGridCellDateTime class.
+//
+// Provides the implementation for a datetime picker cell type of the
+// grid control.
+//
+// For use with CGridCtrl v2.22+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_)
+#define AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "..\\GridCell.h"
+#include "afxdtctl.h"	// for CDateTimeCtrl
+
+class CGridCellDateTime : public CGridCell  
+{
+  friend class CGridCtrl;
+  DECLARE_DYNCREATE(CGridCellDateTime)
+
+  CTime m_cTime;
+  DWORD m_dwStyle;
+
+public:
+	CGridCellDateTime();
+	CGridCellDateTime(DWORD dwStyle);
+	virtual ~CGridCellDateTime();
+    virtual CSize GetCellExtent(CDC* pDC);
+
+  // editing cells
+public:
+	void Init(DWORD dwStyle);
+	virtual BOOL  Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+	virtual CWnd* GetEditWnd() const;
+	virtual void  EndEdit();
+
+
+	CTime* GetTime() {return &m_cTime;};
+	void   SetTime(CTime time);
+};
+
+class CInPlaceDateTime : public CDateTimeCtrl
+{
+// Construction
+public:
+	CInPlaceDateTime(CWnd* pParent,         // parent
+                   CRect& rect,           // dimensions & location
+                   DWORD dwStyle,         // window/combobox style
+                   UINT nID,              // control ID
+                   int nRow, int nColumn, // row and column
+                   COLORREF crFore, COLORREF crBack,  // Foreground, background colour
+                   CTime* pcTime,
+          		   UINT nFirstChar);      // first character to pass to control
+
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CInPlaceList)
+	protected:
+	virtual void PostNcDestroy();
+	//}}AFX_VIRTUAL
+
+// Implementation
+public:
+	virtual ~CInPlaceDateTime();
+    void EndEdit();
+
+// Generated message map functions
+protected:
+	//{{AFX_MSG(CInPlaceList)
+	afx_msg void OnKillFocus(CWnd* pNewWnd);
+	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
+	afx_msg UINT OnGetDlgCode();
+	//}}AFX_MSG
+	//afx_msg void OnSelendOK();
+
+	DECLARE_MESSAGE_MAP()
+
+private:
+    CTime*   m_pcTime;
+	int		 m_nRow;
+	int		 m_nCol;
+ 	UINT     m_nLastChar; 
+	BOOL	 m_bExitOnArrows; 
+    COLORREF m_crForeClr, m_crBackClr;
+};
+
+#endif // !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h
new file mode 100644
index 0000000..4efb7d7
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridCellNumeric.h
@@ -0,0 +1,26 @@
+// GridCellNumeric.h: interface for the CGridCellNumeric class.
+//
+// Written by Andrew Truckle [ajtruckle@wsatkins.co.uk]
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_)
+#define AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "..\\GridCell.h"
+
+class AFX_EXT_CLASS CGridCellNumeric : public CGridCell  
+{
+    DECLARE_DYNCREATE(CGridCellNumeric)
+
+public:
+    virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+    virtual void EndEdit();
+
+};
+
+#endif // !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h
new file mode 100644
index 0000000..c3dffa0
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/NewCellTypes/GridURLCell.h
@@ -0,0 +1,55 @@
+// GridURLCell.h: interface for the CGridURLCell class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_)
+#define AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "..\\GridCell.h"
+
+typedef struct {
+    LPCTSTR szURLPrefix;
+    size_t  nLength;
+} URLStruct;
+
+
+
+class CGridURLCell : public CGridCell  
+{
+    DECLARE_DYNCREATE(CGridURLCell)
+
+public:
+	CGridURLCell();
+	virtual ~CGridURLCell();
+
+    virtual BOOL     Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);
+    virtual BOOL     Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
+    virtual LPCTSTR  GetTipText() { return NULL; }
+	void SetAutoLaunchUrl(BOOL bLaunch = TRUE) { m_bLaunchUrl = bLaunch;	}
+	BOOL GetAutoLaunchUrl() { return m_bLaunchUrl;	}
+
+protected:
+    virtual BOOL OnSetCursor();
+    virtual void OnClick(CPoint PointCellRelative);
+
+	BOOL HasUrl(CString str);
+    BOOL OverURL(CPoint& pt, CString& strURL);
+
+protected:
+#ifndef _WIN32_WCE
+    static HCURSOR g_hLinkCursor;		// Hyperlink mouse cursor
+	HCURSOR GetHandCursor();
+#endif
+    static URLStruct g_szURIprefixes[];
+
+protected:
+	COLORREF m_clrUrl;
+	BOOL     m_bLaunchUrl;
+    CRect    m_Rect;
+};
+
+#endif // !defined(AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h b/SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h
new file mode 100644
index 0000000..3894a4f
--- /dev/null
+++ b/SourceCode/Bond/BLControlsSDK/GridControl/TitleTip.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////
+// Titletip.h : header file
+//
+// MFC Grid Control - cell titletips
+//
+// Written by Chris Maunder <chris@codeproject.com>
+// Copyright (c) 1998-2005. All Rights Reserved.
+//
+// This code may be used in compiled form in any way you desire. This
+// file may be redistributed unmodified by any means PROVIDING it is 
+// not sold for profit without the authors written consent, and 
+// providing that this notice and the authors name and all copyright 
+// notices remains intact. 
+//
+// An email letting me know how you are using it would be nice as well. 
+//
+// This file is provided "as is" with no expressed or implied warranty.
+// The author accepts no liability for any damage/loss of business that
+// this product may cause.
+//
+// For use with CGridCtrl v2.10+
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_)
+#define AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif // _MSC_VER >= 1000
+
+#define TITLETIP_CLASSNAME _T("ZTitleTip")
+
+/////////////////////////////////////////////////////////////////////////////
+// CTitleTip window
+
+class AFX_EXT_CLASS CTitleTip : public CWnd
+{
+// Construction
+public:
+	CTitleTip();
+	virtual ~CTitleTip();
+	virtual BOOL Create( CWnd *pParentWnd);
+
+// Attributes
+public:
+    void SetParentWnd(CWnd* pParentWnd)  { m_pParentWnd = pParentWnd; }
+    CWnd* GetParentWnd()                 { return m_pParentWnd;       }
+
+// Operations
+public:
+	void Show(CRect rectTitle, LPCTSTR lpszTitleText, 
+              int xoffset = 0, LPRECT lpHoverRect = NULL, 
+              const LOGFONT* lpLogFont = NULL,
+              COLORREF crTextClr = CLR_DEFAULT, COLORREF crBackClr = CLR_DEFAULT);
+    void Hide();
+
+// Overrides
+	// ClassWizard generated virtual function overrides
+	//{{AFX_VIRTUAL(CTitleTip)
+	public:
+	virtual BOOL PreTranslateMessage(MSG* pMsg);
+	virtual BOOL DestroyWindow();
+	//}}AFX_VIRTUAL
+
+// Implementation
+protected:
+	CWnd  *m_pParentWnd;
+	CRect  m_rectTitle;
+    CRect  m_rectHover;
+    DWORD  m_dwLastLButtonDown;
+    DWORD  m_dwDblClickMsecs;
+    BOOL   m_bCreated;
+
+	// Generated message map functions
+protected:
+	//{{AFX_MSG(CTitleTip)
+	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+	//}}AFX_MSG
+	DECLARE_MESSAGE_MAP()
+};
+
+/////////////////////////////////////////////////////////////////////////////
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_)
diff --git a/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h b/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h
index b8bc378..edc152e 100644
--- a/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h
+++ b/SourceCode/Bond/BLControlsSDK/include/CellCtrl.h
@@ -55,18 +55,18 @@
 		int nId;			//CONTROL ID
 		int nItem;			//LIST ITEM
 		int nSubItem;		//LIST SUBITEM
-		CELLCOLOR oldClr;	//汲沥傈狼 祸
-		CELLCOLOR newClr;	//汲沥饶狼 祸
-		LPWSTR lpstrOld;	//涝仿傈 巩磊凯
-		LPWSTR lpstrNew;	//涝仿茄 巩磊凯
+		CELLCOLOR oldClr;	//姹叉播鍌堢嫾 绁�
+		CELLCOLOR newClr;	//姹叉播楗剁嫾 绁�
+		LPWSTR lpstrOld;	//娑濅豢鍌� 宸╃鍑�
+		LPWSTR lpstrNew;	//娑濅豢鑼� 宸╃鍑�
 	};
 
 	struct CELLDATA
 	{
-		COLORREF txtclr;//臂磊祸
-		COLORREF bkgclr;//硅版祸
-		bool	 bUseCtl;//牧飘费 荤侩
-		bool	 bTurn; //馆娄馆娄
+		COLORREF txtclr;//鑷傜绁�
+		COLORREF bkgclr;//纭呯増绁�
+		bool	 bUseCtl;//鐗ч璐� 鑽や京
+		bool	 bTurn; //棣嗗▌棣嗗▌
 		DWORD    dwData;
 	};
 
@@ -76,7 +76,7 @@
 		CCellData()
 		{
 			bTurn =false;
-			bUseCtl=false;//牧飘费 荤侩
+			bUseCtl=false;//鐗ч璐� 鑽や京
 			txtclr=clrTEXT;
 			bkgclr=clrBACK;
 			dwData=0;
@@ -86,7 +86,7 @@
 				  bool bTurning, DWORD dwUserData=0)
 		{
 			bTurn =bTurning;
-			bUseCtl=false;//牧飘费 荤侩
+			bUseCtl=false;//鐗ч璐� 鑽や京
 			txtclr=TextColor;
 			bkgclr=BackColor;
 			dwData=dwUserData;
@@ -101,50 +101,50 @@
 	virtual void SerializeAllInfo(CArchive& ar);
 
 protected:
-	CBrush m_brush;		//俊叼飘冠胶狼 硅版
-	CEdit  m_edit;		//俊叼飘 冠胶
+	CBrush m_brush;		//淇婂徏椋樺啝鑳剁嫾 纭呯増
+	CEdit  m_edit;		//淇婂徏椋� 鍐犺兌
 	BOOL	m_bCanEdit;
-	CFont* m_pFont;		//府胶飘 迄飘
+	CFont* m_pFont;		//搴滆兌椋� 杩勯
 
 protected:
-	void Printing(CDC* pDC);//府胶飘甫 橇赴飘肺 免仿茄促.
-	CRect GetLogRect(CDC* pDC, int nItem, int nSubItem);//府胶飘 伎Rect阑 厚啦俊 蝶扼 函券茄促.
-	void SetCrtToPrintRate(CDC* pDC);//拳搁苞 厘钎狼 厚啦阑 备茄促.
-	int  GetCrtWidth();//拳搁(府胶飘)狼 气蔼阑 府畔茄促.
+	void Printing(CDC* pDC);//搴滆兌椋樼敨 姗囪荡椋樿偤 鍏嶄豢鑼勪績.
+	CRect GetLogRect(CDC* pDC, int nItem, int nSubItem);//搴滆兌椋� 浼嶳ect闃� 鍘氬暒淇� 铦舵壖 鍑藉埜鑼勪績.
+	void SetCrtToPrintRate(CDC* pDC);//鎷虫悂鑻� 鍘橀拵鐙� 鍘氬暒闃� 澶囪寗淇�.
+	int  GetCrtWidth();//鎷虫悂(搴滆兌椋�)鐙� 姘旇敿闃� 搴滅晹鑼勪績.
 
 protected:
 	BOOL m_bSort;//Sort Flag
-	BOOL m_bTime;//SetTimer(,,)甫 汲沥沁绰瘤 咯何
-	BOOL m_bTurnDraw;//府胶飘 盎脚矫 伎狼 祸彬捞 函秦具窍绰瘤 咯何
-	UINT  m_nClipOptin;//努赋焊靛 可记
+	BOOL m_bTime;//SetTimer(,,)鐢� 姹叉播娌佺话鐦� 鍜綍
+	BOOL m_bTurnDraw;//搴滆兌椋� 鐩庤剼鐭� 浼庣嫾 绁稿浆鎹� 鍑界Е鍏风獚缁扮槫 鍜綍
+	UINT  m_nClipOptin;//鍔祴鐒婇潧 鍙
 	CHeadCtrl m_head;//HeaderCtrl
 	LOCATION m_mcLct;//right mouse click
 	LOCATION m_edLct;//edit location
 	UINT m_nStartColEdit;
 	UINT m_nEndColEdit;
-	CMenu m_menu;//府胶飘 皋春 
-	CMenu* m_pUmenu;//荤侩磊 沥狼 皋春
+	CMenu m_menu;//搴滆兌椋� 鐨嬫槬 
+	CMenu* m_pUmenu;//鑽や京纾� 娌ョ嫾 鐨嬫槬
 	CELLINFO* m_pInfo;
 
-	//汲沥等 Item Data甫 昏力茄促.
+	//姹叉播绛� Item Data鐢� 鏄忓姏鑼勪績.
 	void DeleteItemData(int nItem);
 	void DeleteAllItemData();
 
-	//俊叼飘冠胶狼 Data甫 荐沥沁绰瘤 咯何甫 眉农窍绊 
-	//何葛扩档快肺 皋矫瘤甫 焊辰促.
+	//淇婂徏椋樺啝鑳剁嫾 Data鐢� 鑽愭播娌佺话鐦� 鍜綍鐢� 鐪夊啘绐嶇粖 
+	//浣曡憶鎵╂。蹇偤 鐨嬬煫鐦ょ敨 鐒婅景淇�.
 	BOOL IsModifyEdit(int nItem, int nSubItem);
 
-	//酒捞袍狼 康开捞 函沁阑 版快俊 俊叼飘冠胶狼 农扁档 函秦具 窍骨肺
-	//促澜窃荐甫 捞侩窍咯 俊叼飘冠胶甫 盎脚茄促.
+	//閰掓崬琚嶇嫾 搴峰紑鎹� 鍑芥瞾闃� 鐗堝揩淇� 淇婂徏椋樺啝鑳剁嫾 鍐滄墎妗� 鍑界Е鍏� 绐嶉鑲�
+	//淇冩緶绐冭崘鐢� 鎹炰京绐嶅挴 淇婂徏椋樺啝鑳剁敨 鐩庤剼鑼勪績.
 	void UpdateEdit(int nItem, int nSubItem);
 
-	//伎狼 康开阑 盎脚茄促.
+	//浼庣嫾 搴峰紑闃� 鐩庤剼鑼勪績.
 	void UpdateCell(int nItem, int nSubItem);
 
-	//伎狼 拿矾啊 函窍档废 汲沥登绢 乐绰瘤 咯何
+	//浼庣嫾 鎷跨熅鍟� 鍑界獚妗e簾 姹叉播鐧荤虎 涔愮话鐦� 鍜綍
 	bool IsTurning(int nItem, int nSubItem);
 
-	//府胶飘狼 沥纺 left,right,center 屈侥阑 备茄促.
+	//搴滆兌椋樼嫾 娌ョ汉 left,right,center 灞堜茎闃� 澶囪寗淇�.
 	int  GetColumnFmt(int nSubItem);	
 
 public:
@@ -192,25 +192,25 @@
 	BOOL UseEdit( int nItem, int nSubItem);
 	void EditCtrl( MSG pMsg );
 
-	//Rect捞 函沁绰瘤 魄窜茄促.
+	//Rect鎹� 鍑芥瞾缁扮槫 榄勭獪鑼勪績.
 	BOOL IsSubRectChange();	
 
-	//府胶飘甫 橇赴飘肺 免仿茄促.
-	BOOL ListPrinting(BOOL bDialog, int Orientation=1/*啊肺=1, 技肺=2*/);
+	//搴滆兌椋樼敨 姗囪荡椋樿偤 鍏嶄豢鑼勪績.
+	BOOL ListPrinting(BOOL bDialog, int Orientation=1/*鍟婅偤=1, 鎶�鑲�=2*/);
 
 	//keystate function 
-	BOOL IsMultiKey();//shift虐, ctrl虐殿捞 喘矾脸绰瘤 check茄促
+	BOOL IsMultiKey();//shift铏�, ctrl铏愭鎹� 鍠樼熅鑴哥话鐦� check鑼勪績
 
 	//font function
-	void SetLogFont(LOGFONT logfont);//厘钎 迄飘
-	void SetListFont(LOGFONT* logfont);//府胶飘 迄飘
+	void SetLogFont(LOGFONT logfont);//鍘橀拵 杩勯
+	void SetListFont(LOGFONT* logfont);//搴滆兌椋� 杩勯
 
 	//
-	int GetSubItemCount();		//拿烦荐甫 备茄促.
-	int GetLeftSubItem();		//谅螟栏肺何磐 劝己拳等 拿烦阑 茫绰促.
-	int GetRightSubItem();		//快螟栏肺何磐 劝己拳等 拿烦阑 茫绰促.
+	int GetSubItemCount();		//鎷跨儲鑽愮敨 澶囪寗淇�.
+	int GetLeftSubItem();		//璋呰灍鏍忚偤浣曠 鍔濆繁鎷崇瓑 鎷跨儲闃� 鑼话淇�.
+	int GetRightSubItem();		//蹇灍鏍忚偤浣曠 鍔濆繁鎷崇瓑 鎷跨儲闃� 鑼话淇�.
 	
-	//荤侩磊啊 鞘夸茄 蔼阑 历厘窍绊 阂矾棵荐 乐绰 窃荐捞促.
+	//鑽や京纾婂晩 闉樺じ鑼� 钄奸槕 鍘嗗帢绐嶇粖 闃傜熅妫佃崘 涔愮话 绐冭崘鎹炰績.
 	BOOL SetCellData(int nItem, int nSubItem, DWORD dwData);
 	DWORD GetCellData(int nItem, int nSubItem);
 
diff --git a/SourceCode/Bond/BondEq/BondEq.rc b/SourceCode/Bond/BondEq/BondEq.rc
index 85188b8..5458229 100644
--- a/SourceCode/Bond/BondEq/BondEq.rc
+++ b/SourceCode/Bond/BondEq/BondEq.rc
Binary files differ
diff --git a/SourceCode/Bond/BondEq/BondEq.vcxproj b/SourceCode/Bond/BondEq/BondEq.vcxproj
index b90ce2e..fa72b3b 100644
--- a/SourceCode/Bond/BondEq/BondEq.vcxproj
+++ b/SourceCode/Bond/BondEq/BondEq.vcxproj
@@ -115,7 +115,7 @@
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>.;.\View;.\DBManager;..\DatabaseSDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;.\View;.\DBManager;..\DatabaseSDK\include;..\BLControlsSDK\include;..\BLControlsSDK\GridControl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -168,6 +168,7 @@
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.;.\View;.\DBManager;..\DatabaseSDK\include;..\BLControlsSDK\include;..\BLControlsSDK\GridControl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -241,6 +242,7 @@
     <ClInclude Include="targetver.h" />
     <ClInclude Include="ToolUnits.h" />
     <ClInclude Include="TopToolbar.h" />
+    <ClInclude Include="UserManagerDlg.h" />
     <ClInclude Include="VerticalLine.h" />
     <ClInclude Include="View\ChangePasswordDlg.h" />
     <ClInclude Include="View\LoginDlg.h" />
@@ -299,6 +301,7 @@
     </ClCompile>
     <ClCompile Include="ToolUnits.cpp" />
     <ClCompile Include="TopToolbar.cpp" />
+    <ClCompile Include="UserManagerDlg.cpp" />
     <ClCompile Include="VerticalLine.cpp" />
     <ClCompile Include="View\ChangePasswordDlg.cpp" />
     <ClCompile Include="View\LoginDlg.cpp" />
diff --git a/SourceCode/Bond/BondEq/BondEqDlg.cpp b/SourceCode/Bond/BondEq/BondEqDlg.cpp
index 21935a5..715cfe4 100644
--- a/SourceCode/Bond/BondEq/BondEqDlg.cpp
+++ b/SourceCode/Bond/BondEq/BondEqDlg.cpp
@@ -14,6 +14,7 @@
 
 // test
 #include "AxisSettingsDlg.h"
+#include "UserManagerDlg.h"
 
 
 #ifdef _DEBUG
@@ -537,13 +538,14 @@
 			ShowLoginDlg();
 		}
 		else if (2 == menuId) {
+			// test
+			CUserManagerDlg dlg;
+			dlg.DoModal();
+
 			if (userManager.isLoggedIn()) {
 				userManager.logout();
 				m_pTopToolbar->SetOperatorBtnText(_T("未登录"));
 			}
-
-			CAxisSettingsDlg loginDlg;
-			loginDlg.DoModal();
 		}
 	}
 
diff --git a/SourceCode/Bond/BondEq/DBManager/UserManager.cpp b/SourceCode/Bond/BondEq/DBManager/UserManager.cpp
index c58f219..126a7dd 100644
--- a/SourceCode/Bond/BondEq/DBManager/UserManager.cpp
+++ b/SourceCode/Bond/BondEq/DBManager/UserManager.cpp
@@ -39,7 +39,7 @@
     std::string createTableQuery = R"(
         CREATE TABLE IF NOT EXISTS users (
             username VARCHAR(50) PRIMARY KEY,
-            password_hash VARCHAR(255) NOT NULL,
+            password VARCHAR(255) NOT NULL,
             role INT NOT NULL,
             session_timeout INT DEFAULT 30,
             session_expiration INT DEFAULT 72,
@@ -52,8 +52,8 @@
     auto result = m_pDB->fetchResults(checkAdminQuery);
 
     if (result.empty() || result[0][0] == "0") {
-        std::string insertAdminQuery = "INSERT INTO users (username, password_hash, role, session_timeout, session_expiration) VALUES ('" +
-            INITIAL_ADMIN_USERNAME + "', '" + hashPassword(INITIAL_ADMIN_PASSWORD) + "', 0, 30, 72)";
+        std::string insertAdminQuery = "INSERT INTO users (username, password, role, session_timeout, session_expiration) VALUES ('" +
+            INITIAL_ADMIN_USERNAME + "', '" + simpleEncryptDecrypt(INITIAL_ADMIN_PASSWORD, "BandKey") + "', 0, 30, 72)";
         m_pDB->executeQuery(insertAdminQuery);
     }
 
@@ -178,10 +178,10 @@
 
 // 登录方法
 bool UserManager::login(const std::string& username, const std::string& password, bool rememberMeFlag) {
-    std::string query = "SELECT username, password_hash, role, session_timeout, session_expiration FROM users WHERE username = '" + username + "'";
+    std::string query = "SELECT username, password, role, session_timeout, session_expiration FROM users WHERE username = '" + username + "'";
     auto result = m_pDB->fetchResults(query);
 
-    if (result.empty() || result[0][1] != hashPassword(password)) {
+    if (result.empty() || result[0][1] != simpleEncryptDecrypt(password, "BandKey")) {
         std::cerr << "Login failed: Invalid username or password." << std::endl;
         return false;
     }
@@ -233,8 +233,8 @@
         return false;
     }
 
-    std::string query = "INSERT INTO users (username, password_hash, role, session_timeout, session_expiration) VALUES ('" +
-        username + "', '" + hashPassword(password) + "', " + std::to_string(static_cast<int>(role)) + ", " +
+    std::string query = "INSERT INTO users (username, password, role, session_timeout, session_expiration) VALUES ('" +
+        username + "', '" + simpleEncryptDecrypt(password, "BandKey") + "', " + std::to_string(static_cast<int>(role)) + ", " +
         std::to_string(timeout.count()) + ", " + std::to_string(expiration.count()) + ")";
     return m_pDB->executeQuery(query);
 }
@@ -262,8 +262,13 @@
     }
 
     // 查询整个用户表
-    std::string query = "SELECT username, password_hash, role, session_timeout, session_expiration, last_login FROM users";
-    return m_pDB->fetchResults(query);
+    std::string query = "SELECT username, password, role, session_timeout, session_expiration, last_login FROM users";
+    std::vector<std::vector<std::string>> results = m_pDB->fetchResults(query);
+    for (auto& row : results) {
+        row[1] = simpleEncryptDecrypt(row[1], "BandKey");
+    }
+
+    return results;
 }
 
 // 设置整个用户表的数据,仅超级管理员有权限
@@ -287,7 +292,7 @@
             return false;
         }
 
-        std::string insertQuery = "INSERT INTO users (username, password_hash, role, session_timeout, session_expiration, last_login) VALUES ('" +
+        std::string insertQuery = "INSERT INTO users (username, password, role, session_timeout, session_expiration, last_login) VALUES ('" +
             user[0] + "', '" + user[1] + "', " + user[2] + ", " + user[3] + ", " + user[4] + ", '" + user[5] + "')";
 
         if (!m_pDB->executeQuery(insertQuery)) {
@@ -328,7 +333,7 @@
         return false;
     }
 
-    std::string query = "UPDATE users SET password_hash = '" + hashPassword(newPassword) +
+    std::string query = "UPDATE users SET password = '" + simpleEncryptDecrypt(newPassword, "BandKey") +
         "' WHERE username = '" + username + "'";
     bool success = m_pDB->executeQuery(query);
 
diff --git a/SourceCode/Bond/BondEq/Resource.h b/SourceCode/Bond/BondEq/Resource.h
index 7433bc4..2ce7878 100644
--- a/SourceCode/Bond/BondEq/Resource.h
+++ b/SourceCode/Bond/BondEq/Resource.h
Binary files differ
diff --git a/SourceCode/Bond/BondEq/UserManagerDlg.cpp b/SourceCode/Bond/BondEq/UserManagerDlg.cpp
new file mode 100644
index 0000000..4fa8d42
--- /dev/null
+++ b/SourceCode/Bond/BondEq/UserManagerDlg.cpp
@@ -0,0 +1,233 @@
+锘�// UserManagerDlg.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "BondEq.h"
+#include "afxdialogex.h"
+#include "UserManagerDlg.h"
+#include "UserManager.h"
+
+
+// CUserManagerDlg 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CUserManagerDlg, CDialogEx)
+
+CUserManagerDlg::CUserManagerDlg(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_DIALOG_USER_MANAGER, pParent)
+{
+
+}
+
+CUserManagerDlg::~CUserManagerDlg()
+{
+}
+
+void CUserManagerDlg::DoDataExchange(CDataExchange* pDX)
+{
+	DDX_Control(pDX, IDC_CUSTOM_USER, m_gridUserManager);
+	CDialogEx::DoDataExchange(pDX);
+}
+
+void CUserManagerDlg::InitUserManager()
+{
+	if (m_gridUserManager.GetSafeHwnd() == NULL)
+		return;
+
+	int nRows = 1;
+	int nCols = 7;
+
+	int nFixRows = 1;
+	int nFixCols = 0;
+	int nRowIdx = 0;
+	int nColIdx = 0;
+
+	m_gridUserManager.DeleteAllItems();
+	m_gridUserManager.SetVirtualMode(FALSE);
+	m_gridUserManager.GetDefaultCell(TRUE, FALSE)->SetBackClr(g_nGridFixCellColor);
+	m_gridUserManager.GetDefaultCell(FALSE, TRUE)->SetBackClr(g_nGridFixCellColor);
+	m_gridUserManager.GetDefaultCell(FALSE, FALSE)->SetBackClr(g_nGridCellColor);
+	m_gridUserManager.SetFixedTextColor(g_nGridFixFontColor);
+
+	m_gridUserManager.SetRowCount(nRows);
+	m_gridUserManager.SetColumnCount(nCols);
+	m_gridUserManager.SetFixedRowCount(nFixRows);
+	m_gridUserManager.SetFixedColumnCount(nFixCols);
+
+	CFont* pFont = m_gridUserManager.GetFont();
+	if (pFont)
+	{
+		LOGFONT lf;
+		pFont->GetLogFont(&lf);
+		lf.lfItalic = 0;
+		lf.lfHeight = 14;
+		lf.lfWeight = FW_BOLD;
+		_tcscpy_s(lf.lfFaceName, _T("Arial"));
+
+		m_gridUserManager.GetDefaultCell(FALSE, TRUE)->SetFont(&lf);
+		m_gridUserManager.GetDefaultCell(TRUE, FALSE)->SetFont(&lf);
+		m_gridUserManager.GetDefaultCell(FALSE, FALSE)->SetFont(&lf);
+		m_gridUserManager.GetDefaultCell(TRUE, TRUE)->SetFont(&lf);
+	}
+
+	// Col
+	m_gridUserManager.SetColumnWidth(nColIdx, 90);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("No."));
+	m_gridUserManager.SetColumnWidth(nColIdx, 100);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("鐢ㄦ埛鍚�"));
+	m_gridUserManager.SetColumnWidth(nColIdx, 70);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("瀵嗙爜"));
+	m_gridUserManager.SetColumnWidth(nColIdx, 70);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("鏉冮檺"));
+	m_gridUserManager.SetColumnWidth(nColIdx, 70);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("浼氳瘽瓒呮椂锛堝垎閽燂級"));
+	m_gridUserManager.SetColumnWidth(nColIdx, 70);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("浼氳瘽杩囨湡锛堝皬鏃讹級"));
+	m_gridUserManager.SetColumnWidth(nColIdx, 70);
+	m_gridUserManager.SetItemText(nRowIdx, nColIdx++, _T("鏈�鍚庝竴娆$櫥褰曟椂闂�"));
+
+	m_gridUserManager.SetFixedRowSelection(FALSE);
+	m_gridUserManager.SetFixedColumnSelection(FALSE);
+	m_gridUserManager.EnableSelection(TRUE);
+	m_gridUserManager.SetEditable(TRUE);
+	m_gridUserManager.SetRowResize(FALSE);
+	m_gridUserManager.SetColumnResize(FALSE);
+	m_gridUserManager.ExpandColumnsToFit(TRUE);
+
+	FillUserManager();
+}
+
+void CUserManagerDlg::FillUserManager()
+{
+	UserManager& userManager = UserManager::getInstance();
+	if (!userManager.isLoggedIn()) {
+		AfxMessageBox("鏈櫥褰�");
+		return;
+	}
+
+	if (userManager.getCurrentUserRole() != UserRole::SuperAdmin) {
+		AfxMessageBox("闈炵鐞嗗憳鐢ㄦ埛");
+		return;
+	}
+
+	std::vector<std::vector<std::string>> usersData = userManager.getUsers();
+	if (usersData.size() > 0) {
+		m_gridUserManager.SetRowCount(usersData.size() + 1);
+		for (size_t i = 0; i < usersData.size(); i++) {
+			int nRowIdx = i + 1;
+			int nColIdx = 0;
+			m_gridUserManager.SetItemText(nRowIdx, nColIdx++, std::to_string(i + 1).c_str());
+			for (size_t j = 0; j < usersData[i].size(); j++) {
+				m_gridUserManager.SetItemText(nRowIdx, nColIdx++, usersData[i][j].c_str());
+			}
+		}
+	}
+}
+
+void CUserManagerDlg::AdjustControls(int nWidth, int nHeight)
+{
+	CWnd* pWnd = GetWindow(GW_CHILD);
+	while (pWnd) {
+		UINT nCtrlID = pWnd->GetDlgCtrlID();
+
+		CRect ctrlRect;
+		pWnd->GetWindowRect(&ctrlRect);
+		ScreenToClient(&ctrlRect);
+
+		// 璁$畻鎺т欢鐨勬柊浣嶇疆鍜屽ぇ灏忥紝鎸夋瘮渚嬭皟鏁�
+		int newX = (int)(ctrlRect.left * (nWidth / (float)m_nInitialWidth));
+		int newY = (int)(ctrlRect.top * (nHeight / (float)m_nInitialHeight));
+		int newWidth = (int)(ctrlRect.Width() * (nWidth / (float)m_nInitialWidth));
+		int newHeight = (int)(ctrlRect.Height() * (nHeight / (float)m_nInitialHeight));
+
+		TCHAR szClassName[256];
+		GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
+
+
+		if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
+			CGridCtrl* pGridCtrl = (CGridCtrl*)pWnd;
+			//int nRowCount = pGridCtrl->GetRowCount();
+			//int newRowHeight = (int)(newHeight / (float)nRowCount);
+
+			//for (int i = 0; i < nRowCount; ++i) {
+			//	pGridCtrl->SetRowHeight(i, newRowHeight);
+			//}
+
+			pGridCtrl->ExpandColumnsToFit(TRUE);
+		}
+
+		pWnd->MoveWindow(newX, newY, newWidth, newHeight);
+		AdjustControlFont(pWnd, newWidth, newHeight);
+
+		// 鑾峰彇涓嬩竴涓帶浠�
+		pWnd = pWnd->GetNextWindow();
+	}
+}
+
+void CUserManagerDlg::AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight)
+{
+	TCHAR szClassName[256];
+	GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
+
+	if (_tcsicmp(szClassName, _T("Static")) == 0) {
+		CStatic* pStatic = (CStatic*)pWnd;
+		pStatic->ModifyStyle(0, SS_CENTER | SS_CENTERIMAGE);
+		return;
+	}
+
+	if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
+		return;
+	}
+
+	int fontSize = nHeight - 10;
+	CFont* pCurrentFont = pWnd->GetFont();
+	LOGFONT logFont;
+	pCurrentFont->GetLogFont(&logFont);
+	logFont.lfHeight = -fontSize;
+
+	CFont newFont;
+	newFont.CreateFontIndirect(&logFont);
+
+	pWnd->SetFont(&newFont);
+	pWnd->Invalidate();
+}
+
+BEGIN_MESSAGE_MAP(CUserManagerDlg, CDialogEx)
+	ON_WM_SIZE()
+END_MESSAGE_MAP()
+
+
+// CUserManagerDlg 娑堟伅澶勭悊绋嬪簭
+
+
+BOOL CUserManagerDlg::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	// TODO:  鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+	CRect rect;
+	GetClientRect(&rect);
+	m_nInitialWidth = rect.Width();
+	m_nInitialHeight = rect.Height();
+
+	rect.right *= 3;
+	rect.bottom *= 3;
+	// 璋冩暣瀵硅瘽妗嗗ぇ灏�
+	MoveWindow(rect);
+
+	InitUserManager();
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+	// 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+void CUserManagerDlg::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+
+	// TODO: 鍦ㄦ澶勬坊鍔犳秷鎭鐞嗙▼搴忎唬鐮�
+	CRect rect;
+	GetClientRect(&rect);
+
+	// 閬嶅巻瀵硅瘽妗嗕腑鐨勬墍鏈夋帶浠�
+	AdjustControls(rect.Width(), rect.Height());
+}
diff --git a/SourceCode/Bond/BondEq/UserManagerDlg.h b/SourceCode/Bond/BondEq/UserManagerDlg.h
new file mode 100644
index 0000000..d74ed57
--- /dev/null
+++ b/SourceCode/Bond/BondEq/UserManagerDlg.h
@@ -0,0 +1,40 @@
+锘�#pragma once
+#include "afxdialogex.h"
+#include "GridCtrl.h"
+
+// CUserManagerDlg 瀵硅瘽妗�
+
+class CUserManagerDlg : public CDialogEx
+{
+	DECLARE_DYNAMIC(CUserManagerDlg)
+
+public:
+	CUserManagerDlg(CWnd* pParent = nullptr);   // 鏍囧噯鏋勯�犲嚱鏁�
+	virtual ~CUserManagerDlg();
+
+// 瀵硅瘽妗嗘暟鎹�
+#ifdef AFX_DESIGN_TIME
+	enum { IDD = IDD_DIALOG_USER_MANAGER };
+#endif
+
+private:
+	void InitUserManager();
+	void FillUserManager();
+	void AdjustControls(int nWidth, int nHeight);
+	void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight);
+
+private:
+	int m_nInitialWidth;
+	int m_nInitialHeight;
+
+private:
+	CGridCtrl m_gridUserManager;
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 鏀寔
+
+	DECLARE_MESSAGE_MAP()
+public:
+	virtual BOOL OnInitDialog();
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+};
diff --git a/SourceCode/Bond/BondEq/stdafx.h b/SourceCode/Bond/BondEq/stdafx.h
index 285fe37..cf4ecaf 100644
--- a/SourceCode/Bond/BondEq/stdafx.h
+++ b/SourceCode/Bond/BondEq/stdafx.h
@@ -47,8 +47,24 @@
 #include "..\DatabaseSDK\include\MySQLDatabase.h"
 #include "..\DatabaseSDK\include\SQLiteDatabase.h"
 
-// 控件模块
-#include "..\BLControlsSDK\include\BLControls.h"
+// 控件样式
+static UINT g_nGridFixCellColor = RGB(144, 200, 246);
+static UINT g_nGridFixFontColor = RGB(0, 0, 0);
+static UINT g_nGridCellColor = RGB(255, 255, 255);
+static UINT g_nGridCellColor_NonSelect = RGB(150, 150, 150);
+static UINT g_nGridCellReadyColor = RGB(255, 255, 0);
+static UINT g_nGridCellOnColor = RGB(255, 69, 0);
+static UINT g_nGridCellOffColor = RGB(128, 191, 255);
+static UINT g_nPropertyGridFixCellColor = RGB(150, 150, 150);
+static UINT g_nPropertyGridFixFontColor = RGB(0, 0, 0);
+static UINT g_nSequenceOffColor = RGB(0, 0, 0);
+static UINT g_nSequenceOnColor = RGB(0, 180, 0);
+static UINT g_nSequenceErrorColor = RGB(255, 0, 0);
+static UINT g_nSequenceWarningColor = RGB(255, 255, 0);
+static UINT g_nSequenceReadyColor = RGB(0, 0, 255);
+static UINT g_nSequenceRunningColor = RGB(0, 255, 255);
+static UINT g_nSequencePauseColor = RGB(255, 0, 255);
+static UINT g_nSequenceStopColor = RGB(128, 128, 128);
 
 #if defined(_WIN64)
 	#if defined(_DEBUG)
diff --git a/SourceCode/Bond/x64/Debug/Config/BondEq.db b/SourceCode/Bond/x64/Debug/Config/BondEq.db
index 3781a31..57f4397 100644
--- a/SourceCode/Bond/x64/Debug/Config/BondEq.db
+++ b/SourceCode/Bond/x64/Debug/Config/BondEq.db
Binary files differ

--
Gitblit v1.9.3