/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef plComboBox_h_inc
#define plComboBox_h_inc
class plComboBox : public plControl
{
public:
DECLARE_WINDOWSUBCLASS(plComboBox,plControl)
plDelegate fDoubleClickDelegate;
plDelegate fDropDownDelegate;
plDelegate fCloseComboDelegate;
plDelegate fEditChangeDelegate;
plDelegate fEditUpdateDelegate;
plDelegate fSetFocusDelegate;
plDelegate fKillFocusDelegate;
plDelegate fSelectionChangeDelegate;
plDelegate fSelectionEndOkDelegate;
plDelegate fSelectionEndCancelDelegate;
plDelegate fEnterKeyPressedDelegate;
plComboBox()
{}
plComboBox( plWindow * inOwner, int inId=0, WNDPROC inSuperProc=nil )
: plControl( inOwner, inId, inSuperProc?inSuperProc:_SuperProc )
{}
void OpenWindow( bool visible )
{
PerformCreateWindowEx
(
0,
nil,
WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST | (visible?WS_VISIBLE:0),
0, 0,
64, 384,
*fOwnerWindow,
(HMENU)fControlID,
plWndCtrls::Instance()
);
SendMessage( *this, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(0,0) );
}
LONG WndProc( unsigned int message, unsigned int wParam, LONG lParam )
{
switch (message)
{
case WM_GETDLGCODE:
return DLGC_WANTALLKEYS;
case WM_CHAR:
//Process this message to avoid message beeps.
if ((wParam == VK_RETURN) || (wParam == VK_TAB))
return 0;
else
return plControl::WndProc( message, wParam, lParam );
default:
return plControl::WndProc( message, wParam, lParam );
}
}
void OnKeyDown( UInt16 ch )
{
if (ch==VK_RETURN)
fEnterKeyPressedDelegate();
else if (ch==VK_TAB)
PostMessage (*fOwnerWindow, WM_NEXTDLGCTL, 0, 0L);
}
bool InterceptControlCommand( unsigned int message, unsigned int wParam, LONG lParam )
{
if ( HIWORD(wParam)==CBN_DBLCLK ) {fDoubleClickDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_DROPDOWN ) {fDropDownDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_CLOSEUP ) {fCloseComboDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_EDITCHANGE ) {fEditChangeDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_EDITUPDATE ) {fEditUpdateDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_SETFOCUS ) {fSetFocusDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_KILLFOCUS ) {fKillFocusDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_SELCHANGE ) {fSelectionChangeDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_SELENDOK ) {fSelectionEndOkDelegate(); return 1;}
else if( HIWORD(wParam)==CBN_SELENDCANCEL ) {fSelectionEndCancelDelegate(); return 1;}
else return 0;
}
virtual int InsertString( int index, const wchar_t * str )
{
return SendMessage( *this, CB_INSERTSTRING, index, (LPARAM)str );
}
virtual void InsertStringAndData( int index, const wchar_t * str, void * item )
{
int i = SendMessage( *this, CB_INSERTSTRING, index, (LPARAM)str );
SetItemData(i,item);
}
virtual int AddString( const wchar_t * str )
{
return SendMessage( *this, CB_ADDSTRING, 0, (LPARAM)str );
}
virtual void AddStringAndData( const wchar_t * str, void * item )
{
int index = SendMessage( *this, CB_ADDSTRING, 0, (LPARAM)str );
SetItemData(index,item);
}
virtual void AddStrings( const std::vector & strings )
{
for (int i=0; i & strings )
{
for (int i=0; i=0)
tempString = GetString(index);
else
tempString = GetText();
char *temp = hsWStringToString(tempString.c_str());
retVal = temp;
delete [] temp;
return retVal;
}
void ISetValue(const char * value)
{
wchar_t *temp = hsStringToWString(value);
SetCurrent(FindString(temp));
delete [] temp;
}
};
#endif // plComboBox_h_inc