summaryrefslogtreecommitdiff
path: root/hammer/iconcombobox.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/iconcombobox.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/iconcombobox.cpp')
-rw-r--r--hammer/iconcombobox.cpp381
1 files changed, 381 insertions, 0 deletions
diff --git a/hammer/iconcombobox.cpp b/hammer/iconcombobox.cpp
new file mode 100644
index 0000000..3c980db
--- /dev/null
+++ b/hammer/iconcombobox.cpp
@@ -0,0 +1,381 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include <stdafx.h>
+#include "IconComboBox.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CIconComboBox::CIconComboBox()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Deconstructor
+//-----------------------------------------------------------------------------
+CIconComboBox::~CIconComboBox()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CIconComboBox::Init( void )
+{
+ // initialize the icon size
+ m_IconSize.cx = GetSystemMetrics( SM_CXICON );
+ m_IconSize.cy = GetSystemMetrics( SM_CYICON );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CIconComboBox::AddIcon( LPCTSTR pIconName )
+{
+ //
+ // create/load an icon from file
+ //
+ // NULL - no icons in file
+ // 1 - not a proper icon file
+ //
+ HICON hIcon = ExtractIcon( AfxGetInstanceHandle(), pIconName, 0 );
+ if( ( hIcon == ( HICON )1 ) || !hIcon )
+ return CB_ERR;
+
+ //
+ // add the icon to the combo box - returning the index
+ //
+ // CB_ERR - general error adding icon
+ // CB_ERRSPACE - insufficient space necessary to add icon
+ //
+ int ndx = CComboBox::AddString( pIconName );
+ if( ( ndx == CB_ERR ) || ( ndx == CB_ERRSPACE ) )
+ return ndx;
+
+ //
+ // associate the icon with the index
+ //
+ // CB_ERR - general error
+ //
+ int result = SetItemData( ndx, ( DWORD )hIcon );
+ if( result == CB_ERR )
+ return result;
+
+ // return the icon index
+ return ndx;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CIconComboBox::InsertIcon( LPCTSTR pIconName, int ndx )
+{
+ //
+ // create an icon from file
+ //
+ // NULL - no icons in file
+ // 1 - not a proper icon file
+ //
+ HICON hIcon = ExtractIcon( AfxGetInstanceHandle(), pIconName, 0 );
+ if( ( hIcon == ( HICON )1 ) || !hIcon )
+ return CB_ERR;
+
+ //
+ // insert the icon into the combo box -- returning the index
+ //
+ // CB_ERR - general error adding icon
+ // CB_ERRSPACE - insufficient space necessary to add icon
+ //
+ int result = CComboBox::InsertString( ndx, pIconName );
+ if( ( result == CB_ERR ) || ( result == CB_ERRSPACE ) )
+ return result;
+
+ //
+ // associate the icon with the index
+ //
+ // CB_ERR - general error
+ //
+ result = SetItemData( ndx, ( DWORD )hIcon );
+ if( result == CB_ERR )
+ return result;
+
+ // return the icon index
+ return ndx;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CIconComboBox::SelectIcon( LPCTSTR pIconName )
+{
+ //
+ // search the combo box list for the given string, -1 = search the whole list
+ //
+ // CB_ERR - unsuccessful search
+ //
+ int ndx = CComboBox::FindStringExact( -1, pIconName );
+ if( ndx == CB_ERR )
+ return CB_ERR;
+
+ // set the selection current
+ return CComboBox::SetCurSel( ndx );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CIconComboBox::SelectIcon( int ndx )
+{
+ // set the selection current
+ return CComboBox::SetCurSel( ndx );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CIconComboBox::DeleteIcon( LPCTSTR pIconName )
+{
+ //
+ // search the combo box list for the given string, -1 = search the whole list
+ //
+ // CB_ERR - unsuccessful search
+ //
+ int ndx = CComboBox::FindStringExact( -1, pIconName );
+ if( ndx == CB_ERR )
+ return CB_ERR;
+
+ // remove the icon from the combo box
+ return CComboBox::DeleteString( ndx );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+int CIconComboBox::DeleteIcon( int ndx )
+{
+ // remove the icon from the combo box
+ return CComboBox::DeleteString( ndx );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: don't allow the icon combo box to "AddString"
+//-----------------------------------------------------------------------------
+int CIconComboBox::AddString( LPCTSTR lpszString )
+{
+ assert( FALSE );
+ return CB_ERR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: don't allow the icon combo box to "InsertString"
+//-----------------------------------------------------------------------------
+int CIconComboBox::InsertString( int nIndex, LPCTSTR lpszString )
+{
+ assert( FALSE );
+ return CB_ERR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: don't allow the icon combo box to "DeleteString"
+//-----------------------------------------------------------------------------
+int CIconComboBox::DeleteString( int nIndex )
+{
+ assert( FALSE );
+ return CB_ERR;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CIconComboBox::MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
+{
+ lpMeasureItemStruct->itemWidth = m_IconSize.cx;
+ lpMeasureItemStruct->itemHeight = m_IconSize.cy + 1;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CIconComboBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
+{
+ CBrush *pOldBrush = NULL;
+ CPen *pOldPen = NULL;
+
+ //
+ // the icon is "disabled"
+ //
+ if( !IsWindowEnabled() )
+ {
+ SetDisabledBrushAndPen( lpDrawItemStruct, &pOldBrush, &pOldPen );
+ OnDrawIcon( lpDrawItemStruct );
+ ResetBrushAndPen( lpDrawItemStruct, pOldBrush, pOldPen );
+ return;
+ }
+
+ //
+ // the icon is "selected"
+ //
+ if( ( lpDrawItemStruct->itemState & ODS_SELECTED ) &&
+ ( lpDrawItemStruct->itemAction & ( ODA_SELECT | ODA_DRAWENTIRE ) ) )
+ {
+ SetSelectedBrushAndPen( lpDrawItemStruct, &pOldBrush, &pOldPen );
+ OnDrawIcon( lpDrawItemStruct );
+ ResetBrushAndPen( lpDrawItemStruct, pOldBrush, pOldPen );
+ }
+
+ //
+ // the icon is "un-selected"
+ //
+ if( !( lpDrawItemStruct->itemState & ODS_SELECTED ) &&
+ ( lpDrawItemStruct->itemAction & ( ODA_SELECT | ODA_DRAWENTIRE ) ) )
+ {
+ SetUnSelectedBrushAndPen( lpDrawItemStruct, &pOldBrush, &pOldPen );
+ OnDrawIcon( lpDrawItemStruct );
+ ResetBrushAndPen( lpDrawItemStruct, pOldBrush, pOldPen );
+ }
+
+ //
+ // icon gains focus
+ //
+ if( lpDrawItemStruct->itemAction & ODA_FOCUS )
+ {
+ // get the device context
+ CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
+
+ // render the focus rectangle
+ pDC->DrawFocusRect( &lpDrawItemStruct->rcItem );
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CIconComboBox::OnDrawIcon( LPDRAWITEMSTRUCT lpDrawItemStruct )
+{
+ // any items to draw?
+ if( GetCount() == 0 )
+ return;
+
+ // get the device context - to draw
+ CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
+
+ // get the current icon to render
+ HICON hIcon = ( HICON )lpDrawItemStruct->itemData;
+ if( !hIcon )
+ return;
+
+ // calculate the icon's upper left corner
+ int UpperLeftX = lpDrawItemStruct->rcItem.left +
+ ( ( lpDrawItemStruct->rcItem.right - lpDrawItemStruct->rcItem.left ) / 2 ) -
+ ( m_IconSize.cx / 2 );
+ int UpperLeftY = lpDrawItemStruct->rcItem.top +
+ ( ( lpDrawItemStruct->rcItem.bottom - lpDrawItemStruct->rcItem.top ) / 2 ) -
+ ( m_IconSize.cy / 2 );
+
+ // render the icon
+ pDC->DrawIcon( UpperLeftX, UpperLeftY, hIcon );
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CIconComboBox::ResetBrushAndPen( LPDRAWITEMSTRUCT lpDrawItemStruct,
+ CBrush *pBrush, CPen *pPen )
+{
+ // get the device context
+ CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
+
+ // reset brush and pen
+ pDC->SelectObject( pBrush );
+ pDC->SelectObject( pPen );
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CIconComboBox::SetDisabledBrushAndPen( LPDRAWITEMSTRUCT lpDrawItemStruct,
+ CBrush **ppOldBrush, CPen **ppOldPen )
+{
+ // get the device context
+ CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
+
+ // set brush and pen to light gray
+ CBrush brushDisabled( RGB( 192, 192, 192 ) );
+ CPen penDisabled( PS_SOLID, 1, RGB( 192, 192, 192 ) );
+
+ // set the brush and pen current -- saving the old brush and pen state
+ *ppOldBrush = pDC->SelectObject( &brushDisabled );
+ *ppOldPen = pDC->SelectObject( &penDisabled );
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CIconComboBox::SetUnSelectedBrushAndPen( LPDRAWITEMSTRUCT lpDrawItemStruct,
+ CBrush **ppOldBrush, CPen **ppOldPen )
+{
+ // get the device context
+ CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
+
+ // set the brush and pen "un-highlighted"
+ CBrush brushUnSelected( GetSysColor( COLOR_WINDOW ) );
+ CPen penUnSelected( PS_SOLID, 1, GetSysColor( COLOR_WINDOW ) );
+
+ // set the brush and pen current -- saving the old brush and pen state
+ *ppOldBrush = pDC->SelectObject( &brushUnSelected );
+ *ppOldPen = pDC->SelectObject( &penUnSelected );
+
+ //
+ // set some addition render state - background and text color
+ //
+ pDC->Rectangle( &lpDrawItemStruct->rcItem );
+ pDC->SetBkColor( GetSysColor( COLOR_WINDOW ) );
+ pDC->SetTextColor( GetSysColor( COLOR_WINDOWTEXT ) );
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void CIconComboBox::SetSelectedBrushAndPen( LPDRAWITEMSTRUCT lpDrawItemStruct,
+ CBrush **ppOldBrush, CPen **ppOldPen )
+{
+ // get the device context
+ CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
+
+ // set the brush and pen "highlighted"
+ CBrush brushSelected( GetSysColor( COLOR_HIGHLIGHT ) );
+ CPen penSelected( PS_SOLID, 1, GetSysColor( COLOR_HIGHLIGHT ) );
+
+ // set the brush and pen current -- saving the old brush and pen state
+ *ppOldBrush = pDC->SelectObject( &brushSelected );
+ *ppOldPen = pDC->SelectObject( &penSelected );
+
+ //
+ // set some addition render state - background and text color
+ //
+ pDC->Rectangle( &lpDrawItemStruct->rcItem );
+ pDC->SetBkColor( GetSysColor( COLOR_HIGHLIGHT ) );
+ pDC->SetTextColor( GetSysColor( COLOR_HIGHLIGHTTEXT ) );
+}
+
+