/*==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