X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=f657d57cbde9d0a876bc52c623142cb96964902f;hb=6b651f2ad9f698c01993dcc6e340682c279f1c55;hp=9a857a1f197ef962b5e1eb78b01d80991e9b39de;hpb=dc2a6f95ff6c2dc721125a565cb418fc8c333d9a;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 9a857a1f19..f657d57cbd 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -21,10 +21,8 @@ #include "BufferView.h" #include "Changes.h" #include "Cursor.h" -#include "debug.h" #include "ErrorList.h" #include "FuncRequest.h" -#include "gettext.h" #include "InsetIterator.h" #include "InsetList.h" #include "Language.h" @@ -40,40 +38,37 @@ #include "Undo.h" #include "insets/InsetFlex.h" +#include "insets/InsetGraphics.h" +#include "insets/InsetGraphicsParams.h" #include "insets/InsetTabular.h" #include "mathed/MathData.h" #include "mathed/InsetMath.h" #include "mathed/MathSupport.h" +#include "support/debug.h" +#include "support/docstream.h" +#include "support/gettext.h" #include "support/limited_stack.h" #include "support/lstrings.h" #include "frontends/Clipboard.h" #include "frontends/Selection.h" -#include #include #include #include -using std::endl; -using std::for_each; -using std::make_pair; -using std::pair; -using std::vector; -using std::string; - +using namespace std; +using namespace lyx::support; +using lyx::frontend::Clipboard; namespace lyx { -using support::bformat; -using frontend::Clipboard; - namespace { -typedef std::pair PitPosPair; +typedef pair PitPosPair; typedef limited_stack > CutStack; @@ -95,11 +90,11 @@ void region(CursorSlice const & i1, CursorSlice const & i2, c1 = p.col(i1.idx()); c2 = p.col(i2.idx()); if (c1 > c2) - std::swap(c1, c2); + swap(c1, c2); r1 = p.row(i1.idx()); r2 = p.row(i2.idx()); if (r1 > r2) - std::swap(r1, r2); + swap(r1, r2); } @@ -339,7 +334,7 @@ void putClipboard(ParagraphList const & paragraphs, TextClassPtr textclass, buffer.setUnnamed(true); buffer.paragraphs() = paragraphs; buffer.params().setTextClass(textclass); - std::ostringstream lyx; + ostringstream lyx; if (buffer.write(lyx)) theClipboard().put(lyx.str(), plaintext); else @@ -470,7 +465,7 @@ void switchBetweenClasses(TextClassPtr const & c1, } -std::vector const availableSelections(Buffer const & buffer) +vector const availableSelections(Buffer const & buffer) { vector selList; @@ -646,7 +641,7 @@ void copySelectionToStack() void copySelection(Cursor & cur, docstring const & plaintext) { // In tablemode, because copy and paste actually use special table stack - // we do not attemp to get selected paragraphs under cursor. Instead, a + // we do not attempt to get selected paragraphs under cursor. Instead, a // paragraph with the plain text version is generated so that table cells // can be pasted as pure text somewhere else. if (cur.selBegin().idx() != cur.selEnd().idx()) { @@ -657,8 +652,9 @@ void copySelection(Cursor & cur, docstring const & plaintext) par.insert(0, plaintext, Font(), Change(Change::UNCHANGED)); pars.push_back(par); theCuts.push(make_pair(pars, bp.getTextClassPtr())); - } else + } else { copySelectionToStack(cur, theCuts); + } // stuff the selection onto the X clipboard, from an explicit copy request putClipboard(theCuts[0].first, theCuts[0].second, plaintext); @@ -673,9 +669,7 @@ void saveSelection(Cursor & cur) if (cur.selection() && cur.selBegin() == cur.bv().cursor().selBegin() && cur.selEnd() == cur.bv().cursor().selEnd()) { - LYXERR(Debug::ACTION) << BOOST_CURRENT_FUNCTION << ": `" - << to_utf8(cur.selectionAsString(true)) << "'." - << endl; + LYXERR(Debug::ACTION, "'" << cur.selectionAsString(true) << "'"); copySelectionToStack(cur, selectionBuffer); } } @@ -743,7 +737,7 @@ void pasteFromStack(Cursor & cur, ErrorList & errorList, size_t sel_index) } -void pasteClipboard(Cursor & cur, ErrorList & errorList, bool asParagraphs) +void pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs) { // Use internal clipboard if it is the most recent one if (theClipboard().isInternal()) { @@ -781,6 +775,26 @@ void pasteClipboard(Cursor & cur, ErrorList & errorList, bool asParagraphs) } +void pasteClipboardGraphics(Cursor & cur, ErrorList & errorList, + Clipboard::GraphicsType preferedType) +{ + BOOST_ASSERT(theClipboard().hasGraphicsContents(preferedType)); + + // get picture from clipboard + FileName filename = theClipboard().getAsGraphics(cur, preferedType); + if (filename.empty()) + return; + + // create inset for graphic + InsetGraphics * inset = new InsetGraphics; + InsetGraphicsParams params; + params.filename = EmbeddedFile(filename.absFilename(), cur.buffer().filePath()); + inset->setParams(params); + cur.recordUndo(); + cur.insert(inset); +} + + void pasteSelection(Cursor & cur, ErrorList & errorList) { if (selectionBuffer.empty()) @@ -886,7 +900,7 @@ docstring grabSelection(Cursor const & cur) // FIXME: What is wrong with the following? #if 0 - std::ostringstream os; + ostringstream os; for (DocIterator dit = cur.selectionBegin(); dit != cur.selectionEnd(); dit.forwardPos()) os << asString(dit.cell());