bool LLViewerTextEditor::onCopyToInvDialog(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if( 0 == option ) { LLUUID item_id = notification["payload"]["item_id"].asUUID(); llwchar wc = llwchar(notification["payload"]["item_wc"].asInteger()); LLInventoryItem* itemp = LLEmbeddedItems::getEmbeddedItem(wc); if (itemp) copyInventory(itemp); } return false; }
// <FS:Ansariel> Fix linefeed pasting //virtual void LLChatEntry::paste() { LLTextEditor::paste(); if (mSingleLineMode) { S32 cursor_pos = getCursorPos(); LLWString content = getWText(); LLWStringUtil::replaceChar(content, '\n', llwchar(182)); setWText(content); setCursorPos(cursor_pos); } }
void LLConsole::addQueuedLines() { for (line_queue_t::iterator iter = mLineQueue.begin(); iter != mLineQueue.end(); ++iter) { LineInfo& line_info = *iter; LLWString wline = line_info.wline; //F32 size = line_info.size; LLColor4 color = line_info.color; if (!wline.empty() && mFont != NULL) { // Wrap lines that are longer than the view is wide. S32 offset = 0; while( offset < (S32)wline.length() ) { S32 skip_chars; // skip '\n' // Figure out if a word-wrapped line fits here. LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), offset); if (line_end != LLWString::npos) { skip_chars = 1; // skip '\n' } else { line_end = wline.size(); skip_chars = 0; } U32 drawable = mFont->maxDrawableChars(wline.c_str()+offset, (F32)mRect.getWidth(), line_end-offset, TRUE); if (drawable != 0) { LLFixedBuffer::addLine(wline.substr(offset, drawable)); mAddTimes[mAddTimes.size()-1] = line_info.add_time; } else { // force a blank line LLFixedBuffer::addLine(" "); } mColors.push_back(color); offset += (drawable + skip_chars); } } } mLineQueue.clear(); }
//Called when a paragraph is added to the console or window is resized. void LLConsole::Paragraph::updateLines(F32 screen_width, LLFontGL* font, bool force_resize) { if ( !force_resize ) { if ( mMaxWidth >= 0.0f && mMaxWidth < screen_width ) { return; //No resize required. } } screen_width = screen_width - 30; //Margin for small windows. if ( mParagraphText.empty() || mParagraphColorSegments.empty() || font == NULL) { return; //Not enough info to complete. } mLines.clear(); //Chuck everything. mMaxWidth = 0.0f; paragraph_color_segments_t::iterator current_color = mParagraphColorSegments.begin(); U32 current_color_length = (*current_color).mNumChars; S32 paragraph_offset = 0; //Offset into the paragraph text. // Wrap lines that are longer than the view is wide. while( paragraph_offset < (S32)mParagraphText.length() ) { bool found_newline = false; // skip '\n' // Figure out if a word-wrapped line fits here. LLWString::size_type line_end = mParagraphText.find_first_of(llwchar('\n'), paragraph_offset); if (line_end != LLWString::npos) { found_newline = true; // skip '\n' } else { line_end = mParagraphText.size(); } U32 drawable = font->maxDrawableChars(mParagraphText.c_str()+paragraph_offset, screen_width, line_end - paragraph_offset, TRUE); if (drawable != 0 || found_newline) { F32 x_position = 0; //Screen X position of text. mMaxWidth = llmax( mMaxWidth, (F32)font->getWidth( mParagraphText.substr( paragraph_offset, drawable ).c_str() ) ); line_color_segments_t line; U32 left_to_draw = drawable; U32 drawn = 0; while (left_to_draw >= current_color_length && current_color != mParagraphColorSegments.end() ) { LLWString color_text = mParagraphText.substr( paragraph_offset + drawn, current_color_length ); line.push_back( LineColorSegment( color_text, //Append segment to line. (*current_color).mColor, x_position ) ); x_position += font->getWidth( color_text.c_str() ); //Set up next screen position. drawn += current_color_length; left_to_draw -= current_color_length; current_color++; //Goto next paragraph color record. if (current_color != mParagraphColorSegments.end()) { current_color_length = (*current_color).mNumChars; } } if (left_to_draw > 0 && current_color != mParagraphColorSegments.end() ) { LLWString color_text = mParagraphText.substr( paragraph_offset + drawn, left_to_draw ); line.push_back( LineColorSegment( color_text, //Append segment to line. (*current_color).mColor, x_position ) ); current_color_length -= left_to_draw; } mLines.push_back(line); //Append line to paragraph line list. } else { break; // Nothing more to print } paragraph_offset += (drawable + ( found_newline ? 1 : 0 ) ); } }