Mercurial > ecos-v3_0-branch
comparison host/tools/Utils/win32/IntegerEdit.cpp @ 76:435cced73e2f ecos-v1_3_1-release
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 14:10:45 +0000 |
| parents | |
| children | 74dbf4c3f2e1 |
comparison
equal
deleted
inserted
replaced
| 75:41bf073c0c32 | 76:435cced73e2f |
|---|---|
| 1 //####COPYRIGHTBEGIN#### | |
| 2 // | |
| 3 // ---------------------------------------------------------------------------- | |
| 4 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. | |
| 5 // | |
| 6 // This program is part of the eCos host tools. | |
| 7 // | |
| 8 // This program is free software; you can redistribute it and/or modify it | |
| 9 // under the terms of the GNU General Public License as published by the Free | |
| 10 // Software Foundation; either version 2 of the License, or (at your option) | |
| 11 // any later version. | |
| 12 // | |
| 13 // This program is distributed in the hope that it will be useful, but WITHOUT | |
| 14 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 15 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
| 16 // more details. | |
| 17 // | |
| 18 // You should have received a copy of the GNU General Public License along with | |
| 19 // this program; if not, write to the Free Software Foundation, Inc., | |
| 20 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| 21 // | |
| 22 // ---------------------------------------------------------------------------- | |
| 23 // | |
| 24 //####COPYRIGHTEND#### | |
| 25 // IntegerEdit.cpp : implementation file | |
| 26 // | |
| 27 // | |
| 28 //#####DESCRIPTIONBEGIN#### | |
| 29 // | |
| 30 // Author(s): sdf | |
| 31 // Contact(s): sdf | |
| 32 // Date: 1998/08/11 | |
| 33 // Version: 0.01 | |
| 34 // Purpose: | |
| 35 // Description: This is the implementation of the masked edit control as used | |
| 36 // in integer in-cell edits by the control view. | |
| 37 // Requires: | |
| 38 // Provides: | |
| 39 // See also: | |
| 40 // Known bugs: | |
| 41 // Usage: | |
| 42 // | |
| 43 //####DESCRIPTIONEND#### | |
| 44 // | |
| 45 //=========================================================================== | |
| 46 | |
| 47 #include "stdafx.h" | |
| 48 #include "IntegerEdit.h" | |
| 49 #include "CTUtils.h" | |
| 50 | |
| 51 #ifdef _DEBUG | |
| 52 #define new DEBUG_NEW | |
| 53 #undef THIS_FILE | |
| 54 static char THIS_FILE[] = __FILE__; | |
| 55 #endif | |
| 56 | |
| 57 ///////////////////////////////////////////////////////////////////////////// | |
| 58 // CIntegerEdit | |
| 59 | |
| 60 CIntegerEdit::CIntegerEdit(__int64 nInitialValue): | |
| 61 CCellEdit(CUtils::IntToStr(nInitialValue,false/*bool bHex*/)), | |
| 62 m_bInSize(false) | |
| 63 { | |
| 64 } | |
| 65 | |
| 66 CIntegerEdit::~CIntegerEdit() | |
| 67 { | |
| 68 } | |
| 69 | |
| 70 | |
| 71 BEGIN_MESSAGE_MAP(CIntegerEdit, CCellEdit) | |
| 72 //{{AFX_MSG_MAP(CIntegerEdit) | |
| 73 ON_CONTROL_REFLECT(EN_UPDATE, OnUpdate) | |
| 74 ON_WM_CREATE() | |
| 75 ON_WM_SIZE() | |
| 76 ON_WM_CHAR() | |
| 77 //}}AFX_MSG_MAP | |
| 78 END_MESSAGE_MAP() | |
| 79 | |
| 80 ///////////////////////////////////////////////////////////////////////////// | |
| 81 // CIntegerEdit message handlers | |
| 82 | |
| 83 void CIntegerEdit::OnUpdate() | |
| 84 { | |
| 85 CString str; | |
| 86 GetWindowText(str); | |
| 87 __int64 d; | |
| 88 if(CUtils::StrToItemIntegerType(str,d)||0==str.CompareNoCase(_T("0X"))||_T("-")==str){ | |
| 89 // reject all illegal strings except [partially] correct ones | |
| 90 m_strPrevText=str; | |
| 91 } else { | |
| 92 MessageBeep(0xFFFFFFFF); | |
| 93 const CPoint pt(GetCaretPos()); | |
| 94 SetWindowText(m_strPrevText); | |
| 95 SetCaretPos(pt); | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 | |
| 100 BOOL CIntegerEdit::PreCreateWindow(CREATESTRUCT& cs) | |
| 101 { | |
| 102 return CCellEdit::PreCreateWindow(cs); | |
| 103 } | |
| 104 | |
| 105 int CIntegerEdit::OnCreate(LPCREATESTRUCT lpCreateStruct) | |
| 106 { | |
| 107 if (CCellEdit::OnCreate(lpCreateStruct) == -1) | |
| 108 return -1; | |
| 109 m_wndSpin.Create(WS_CHILD|UDS_NOTHOUSANDS|UDS_ARROWKEYS|UDS_SETBUDDYINT,CRect(0,0,1,1),GetParent(),1); | |
| 110 m_wndSpin.SetBuddy(this); | |
| 111 m_wndSpin.SetRange32(0,0x7fffffff); | |
| 112 m_wndSpin.SetWindowPos(this,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); | |
| 113 return 0; | |
| 114 } | |
| 115 | |
| 116 void CIntegerEdit::OnSize(UINT /*nType*/, int cx, int cy) | |
| 117 { | |
| 118 int cxSpin=::GetSystemMetrics(SM_CXVSCROLL); | |
| 119 int cySpin=::GetSystemMetrics(SM_CYVSCROLL); | |
| 120 int cxEdge=::GetSystemMetrics(SM_CXEDGE); | |
| 121 int cyEdge=::GetSystemMetrics(SM_CYEDGE); | |
| 122 bool bSpin=(cx>3*cxSpin); | |
| 123 if(bSpin){ | |
| 124 if(m_bInSize){ | |
| 125 Default(); | |
| 126 } else { | |
| 127 cx-=(cxSpin+4); | |
| 128 CRect rect(cx+4,-cyEdge,cx+4+cxSpin,min(cySpin,cy+2*cyEdge)); | |
| 129 ClientToScreen(rect); | |
| 130 GetParent()->ScreenToClient(rect); | |
| 131 m_wndSpin.MoveWindow(rect,true); | |
| 132 m_wndSpin.ShowWindow(SW_SHOW); | |
| 133 rect=CRect(0,0,cx,cy); | |
| 134 ClientToScreen(rect); | |
| 135 GetParent()->ScreenToClient(rect); | |
| 136 m_bInSize=true; | |
| 137 rect.InflateRect(cxEdge,cyEdge); | |
| 138 MoveWindow(rect); | |
| 139 m_bInSize=false; | |
| 140 } | |
| 141 } else { | |
| 142 m_wndSpin.ShowWindow(SW_HIDE); | |
| 143 Default(); | |
| 144 } | |
| 145 } |
