Simple keyboard string editing
A small class to take key presses and edit a string
Welcome to the new Ogre Wiki!
If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
This code snippet was originally created as a part of an in-game console. All it does is take key press events and either adds them to a string or otherwise manipulates it. This string can be retrieved at any time. It is currently setup for the use with OIS, however this could be easily changed.
Table of contents
Usage:
Define an instance any way you like:
EditString myEdit;In an OIS keyboard listener:
if( myEdit.injectKeyPress( arg ) == false ) { // Did not use the key. ... } else { // Used the key so the string has possibly changed. myTextBoxOverlayElement->SetCaption( myEdit.getText() ); ... // Display cursor somehow. Left as an exercise for the reader as // I havn't figured out how I'm going to do it yet. :) }
The Code
EditString.h
#pragma once #include <string> #define OIS_DYNAMIC_LIB #include <OIS/OIS.h> class EditString { public: EditString(void) : mInsert(true), mPosition(mText.begin()), mCaret(0) {} EditString( std::string newText ) { setText( newText ); } ~EditString(void) {} protected: // The text for editing std::string mText; // Overwrite or insert bool mInsert; // Position for insert / overwrite std::string::iterator mPosition; // Caret Position - for positioning the cursor. int mCaret; public: void setText( std::string & newText ) { mText = newText; mPosition = mText.end(); mCaret = (int)mText.length(); } std::string & getText() { return mText; } void clear() { mText.clear() mPosition = mText.end(); mCaret = 0; } bool inserting() { return mInsert; } bool injectKeyPress( const OIS::KeyEvent ); // gets the current position in the text for cursor placement int getPosition(void) { return mCaret; } };
EditString.cpp
#include "editstring.h" // Process a key press. Return true if it was used. bool EditString::injectKeyPress( const OIS::KeyEvent arg ) { bool keyUsed = true; if( isgraph( arg.text ) || isspace( arg.text ) ) { if( mInsert || mPosition == mText.end() ) { mPosition = mText.insert( mPosition, arg.text ); } else { *mPosition = arg.text; } mPosition++; mCaret++; } else { switch( arg.key ) { case OIS::KC_BACK: if( mPosition != mText.begin() ) { mPosition = mText.erase( --mPosition ); --mCaret; } break; case OIS::KC_INSERT: mInsert = ! mInsert; break; case OIS::KC_HOME: mPosition = mText.begin(); mCaret = 0; break; case OIS::KC_END: mPosition = mText.end(); mCaret = (int)mText.length(); break; case OIS::KC_LEFT: if( mPosition != mText.begin() ) { mPosition--; mCaret--; } break; case OIS::KC_RIGHT: if( mPosition != mText.end() ) { mPosition++; mCaret++; } break; case OIS::KC_DELETE: if( mPosition != mText.end() ) mPosition = mText.erase( mPosition ); break; default: keyUsed = false; break; } } return keyUsed; }
Contributors to this page: merlinblack
,
Merlinblack
and
jacmoe
.
Page last modified on Friday 27 of August, 2010 07:46:06 GMT by merlinblack
.
The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.
Sidebar
Search box
Online users
105
online users

