void ControllerUI::PasteFromClipboard(::CEGUI::Window* EditBox) { if (!EditBox || !::System::Windows::Forms::Clipboard::ContainsText()) return; // get text from clipboard ::System::String^ clipText = ::System::Windows::Forms::Clipboard::GetText( ::System::Windows::Forms::TextDataFormat::Text); // no text if (!clipText || clipText->Length == 0) return; // get possibly typed instances we process CEGUI::Editbox* box = dynamic_cast<CEGUI::Editbox*>(EditBox); CEGUI::MultiLineEditbox* mlbox = dynamic_cast<CEGUI::MultiLineEditbox*>(EditBox); // type of Editbox if (box && !box->isReadOnly()) { // replace newline characters clipText = clipText->Replace( ::System::Environment::NewLine, ::System::String::Empty); // get caretindex size_t caretindex = box->getCaretIndex(); // insert new text box->insertText(StringConvert::CLRToCEGUI(clipText), caretindex); // set caret at the end of inserted text box->setCaretIndex(caretindex + clipText->Length); } // type of MultiLineEditbox else if (mlbox && !mlbox->isReadOnly()) { // get caretindex size_t caretindex = mlbox->getCaretIndex(); // insert new text mlbox->insertText(StringConvert::CLRToCEGUI(clipText), caretindex); // set caret at the end of inserted text mlbox->setCaretIndex(caretindex + clipText->Length); } };
bool GUI_Paste_From_Clipboard( void ) { CEGUI::Window *sheet = CEGUI::System::getSingleton().getGUISheet(); // no sheet if( !sheet ) { return 0; } CEGUI::Window *window_active = sheet->getActiveChild(); // no active window if( !window_active ) { return 0; } const CEGUI::String &type = window_active->getType(); // MultiLineEditbox if( type.find( "/MultiLineEditbox" ) != CEGUI::String::npos ) { CEGUI::MultiLineEditbox *editbox = static_cast<CEGUI::MultiLineEditbox*>(window_active); if( editbox->isReadOnly() ) { return 0; } CEGUI::String::size_type beg = editbox->getSelectionStartIndex(); CEGUI::String::size_type len = editbox->getSelectionLength(); CEGUI::String new_text = editbox->getText(); // erase selected text new_text.erase( beg, len ); // get clipboard text CEGUI::String clipboard_text = reinterpret_cast<const CEGUI::utf8*>(Get_Clipboard_Content().c_str()); // set new text editbox->setText( new_text.insert( beg, clipboard_text ) ); // set new carat index editbox->setCaratIndex( editbox->getCaratIndex() + clipboard_text.length() ); } // Editbox else if( type.find( "/Editbox" ) != CEGUI::String::npos ) { CEGUI::Editbox *editbox = static_cast<CEGUI::Editbox*>(window_active); if( editbox->isReadOnly() ) { return 0; } CEGUI::String::size_type beg = editbox->getSelectionStartIndex(); CEGUI::String::size_type len = editbox->getSelectionLength(); CEGUI::String new_text = editbox->getText(); // erase selected text new_text.erase( beg, len ); // get clipboard text CEGUI::String clipboard_text = reinterpret_cast<const CEGUI::utf8*>(Get_Clipboard_Content().c_str()); // set new text editbox->setText( new_text.insert( beg, clipboard_text ) ); // set new carat index editbox->setCaratIndex( editbox->getCaratIndex() + clipboard_text.length() ); } else { return 0; } return 1; }
bool GUI_Copy_To_Clipboard( bool cut ) { CEGUI::Window *sheet = CEGUI::System::getSingleton().getGUISheet(); // no sheet if( !sheet ) { return 0; } CEGUI::Window *window_active = sheet->getActiveChild(); // no active window if( !window_active ) { return 0; } CEGUI::String sel_text; const CEGUI::String &type = window_active->getType(); // MultiLineEditbox if( type.find( "/MultiLineEditbox" ) != CEGUI::String::npos ) { CEGUI::MultiLineEditbox *editbox = static_cast<CEGUI::MultiLineEditbox*>(window_active); CEGUI::String::size_type beg = editbox->getSelectionStartIndex(); CEGUI::String::size_type len = editbox->getSelectionLength(); sel_text = editbox->getText().substr( beg, len ).c_str(); // if cutting if( cut ) { if( editbox->isReadOnly() ) { return 0; } CEGUI::String new_text = editbox->getText(); editbox->setText( new_text.erase( beg, len ) ); } } // Editbox else if( type.find( "/Editbox" ) != CEGUI::String::npos ) { CEGUI::Editbox *editbox = static_cast<CEGUI::Editbox*>(window_active); CEGUI::String::size_type beg = editbox->getSelectionStartIndex(); CEGUI::String::size_type len = editbox->getSelectionLength(); sel_text = editbox->getText().substr( beg, len ).c_str(); // if cutting if( cut ) { if( editbox->isReadOnly() ) { return 0; } CEGUI::String new_text = editbox->getText(); editbox->setText( new_text.erase( beg, len ) ); } } else { return 0; } Set_Clipboard_Content( sel_text.c_str() ); return 1; }