diff --git a/Code/Misc/Input/Include/ApplicationKeyboard.h b/Code/Misc/Input/Include/ApplicationKeyboard.h index a6a41b6a..d28140b3 100644 --- a/Code/Misc/Input/Include/ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/ApplicationKeyboard.h @@ -17,10 +17,12 @@ namespace Input void Activate(); void Deactivate(); - void SetTargetText( ::std::wstring *field ); + void BindTextTarget( ::std::wstring *field ); + void ReleaseTextTarget(); protected: - ::std::wstring *targetText; + ::std::wstring *textTarget; + ::std::wstring::size_type writePos; ApplicationKeyboard(); ~ApplicationKeyboard(); diff --git a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h index c1896a45..98bcc0e9 100644 --- a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h @@ -16,10 +16,7 @@ namespace Input Win32ApplicationKeyboard(); ~Win32ApplicationKeyboard(); - LRESULT CALLBACK WindowCallback( HWND h, UINT m, WPARAM w, LPARAM l ); - - private: - + void CaptureText( UINT msg, WPARAM param ); }; } diff --git a/Code/Misc/Input/Include/Win32/Win32Input.h b/Code/Misc/Input/Include/Win32/Win32Input.h index c420e3a7..b7a41ce0 100644 --- a/Code/Misc/Input/Include/Win32/Win32Input.h +++ b/Code/Misc/Input/Include/Win32/Win32Input.h @@ -8,6 +8,7 @@ #include "..\InputManager.h" #include "Win32Keyboard.h" #include "Win32Mouse.h" +#include "Win32ApplicationKeyboard.h" #include #include #include diff --git a/Code/Misc/Input/Input.vcxproj b/Code/Misc/Input/Input.vcxproj index 2ecf7bfa..d930acdb 100644 --- a/Code/Misc/Input/Input.vcxproj +++ b/Code/Misc/Input/Input.vcxproj @@ -44,6 +44,11 @@ + + + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} + + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B} Input @@ -95,28 +100,32 @@ $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) + $(IncludePath) Level3 Disabled true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -127,7 +136,7 @@ Level3 Disabled true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -140,7 +149,7 @@ true true true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -155,7 +164,7 @@ true true true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true diff --git a/Code/Misc/Input/Source/ApplicationKeyboard.cpp b/Code/Misc/Input/Source/ApplicationKeyboard.cpp index 287785db..66ddb042 100644 --- a/Code/Misc/Input/Source/ApplicationKeyboard.cpp +++ b/Code/Misc/Input/Source/ApplicationKeyboard.cpp @@ -5,7 +5,8 @@ using namespace ::Input; ApplicationKeyboard::ApplicationKeyboard() : InputObject( Enum::SAIType_ApplicationKeyboard ) { - this->targetText = nullptr; + this->textTarget = nullptr; + this->writePos = 0; this->isEnabled = true; } @@ -27,7 +28,17 @@ void ApplicationKeyboard::Deactivate() this->isEnabled = false; } -void ApplicationKeyboard::SetTargetText( ::std::wstring *field ) +void ApplicationKeyboard::BindTextTarget( ::std::wstring *field ) { - this->targetText = field; + this->textTarget = field; + + if( field ) + { + this->writePos = field->size(); + } +} + +void ApplicationKeyboard::ReleaseTextTarget( ) +{ + this->BindTextTarget( nullptr ); } \ No newline at end of file diff --git a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp index 30b585c9..3b58a032 100644 --- a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp +++ b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp @@ -1,20 +1,51 @@ #include "../../Include/Win32/Win32ApplicationKeyboard.h" +#include "Utilities.h" using namespace ::Input; +using namespace ::Utility::Value; +using ::std::wstring; +Win32ApplicationKeyboard::Win32ApplicationKeyboard() : ApplicationKeyboard() { /* DO nothing */ } -//{ -// class Win32ApplicationKeyboard : public ApplicationKeyboard -// { -// public: -// Win32ApplicationKeyboard(); -// ~Win32ApplicationKeyboard(); -// -// LRESULT CALLBACK WindowCallback( HWND h, UINT m, WPARAM w, LPARAM l ); -// -// private: -// -// }; -//} -// -//#endif // !INPUT_WIN32_APPLICATION_KEBOARD_H +Win32ApplicationKeyboard::~Win32ApplicationKeyboard() { /* DO nothing */ } + +void Win32ApplicationKeyboard::CaptureText( UINT msg, WPARAM param ) +{ + if( !this->textTarget | !this->isEnabled ) + return; + + switch( msg ) + { + case WM_CHAR: + this->textTarget->insert( this->writePos, 1, (wchar_t)param ); + ++this->writePos; + break; + case WM_KEYDOWN: + { + switch( param ) + { + case VK_BACK: + if( this->writePos > 0 ) + { + --this->writePos; + this->textTarget->erase( this->writePos, 1 ); + } + break; + case VK_DELETE: + if( this->writePos < this->textTarget->size() ) + { + this->textTarget->erase( this->writePos, 1 ); + } + break; + case VK_LEFT: + this->writePos = Max( this->writePos - 1, (wstring::size_type)0 ); + break; + case VK_RIGHT: + this->writePos = Min( this->writePos + 1, this->textTarget->size() ); + break; + default: break; + } + } + default: break; + } +} diff --git a/Code/Misc/Input/Source/Win32/Win32Input.cpp b/Code/Misc/Input/Source/Win32/Win32Input.cpp index c6be3c9d..28032070 100644 --- a/Code/Misc/Input/Source/Win32/Win32Input.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Input.cpp @@ -775,6 +775,10 @@ InputObject* Win32Input::CreateDevice(const SAIType inputType, Typedefs::WindowH } } break; + + case SAIType_ApplicationKeyboard: + val = new Win32ApplicationKeyboard(); + break; } return val;