X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.C;h=36c863428ff1f183dce6c9092f39c18c789aea12;hb=09e01879979643949f1f2c7216023f1f35d5ada2;hp=0fbb7848abea02557d642a9392b1d23c5eaf4451;hpb=596dec65923b0526df37a693880c173b646ec59d;p=lyx.git diff --git a/src/CutAndPaste.C b/src/CutAndPaste.C index 0fbb7848ab..36c863428f 100644 --- a/src/CutAndPaste.C +++ b/src/CutAndPaste.C @@ -2,8 +2,9 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Jurgen Vigna + * \author Juergen Vigna * \author Lars Gullik Bjønnes + * \author Alfredo Braunstein * * Full author contact details are available in file CREDITS */ @@ -35,35 +36,51 @@ using std::endl; using std::pair; using std::make_pair; using std::for_each; +using std::vector; +using namespace lyx::support; using lyx::pos_type; using lyx::textclass_type; -// Jürgen, note that this means that you cannot currently have a list -// of selections cut/copied. So IMHO later we should have a -// list/vector/deque that we could store -// struct selection_item { -// ParagraphList copy_pars; -// LyXTextClassList::size_type textclass; -// }; -// in and some method of choosing beween them (based on the first few chars -// in the selection probably.) This would be a nice feature and quite -// easy to implement. (Lgb) -// -// Sure but I just cleaned up this code for now with the same functionality -// as before. I also want to add a XClipboard function so that we can copy -// text from LyX to some other X-application in the form of ASCII or in the -// form of LaTeX (or Docbook depending on the document-class!). Think how nice -// it could be to select a math-inset do a "Copy to X-Clipboard as LaTeX" and -// then do a middle mouse button click in the application you want and have -// the whole formula there in LaTeX-Code. (Jug) + +typedef limited_stack > CutStack; namespace { -limited_stack > cuts(10); +CutStack cuts(10); } // namespace anon + +std::vector +CutAndPaste::availableSelections(Buffer const & buffer) +{ + vector selList; + + CutStack::const_iterator cit = cuts.begin(); + CutStack::const_iterator end = cuts.end(); + for (; cit != end; ++cit) { + // we do not use cit-> here because gcc 2.9x does not + // like it (JMarc) + ParagraphList const & pars = (*cit).first; + string asciiSel; + ParagraphList::const_iterator pit = pars.begin(); + ParagraphList::const_iterator pend = pars.end(); + for (; pit != pend; ++pit) { + asciiSel += pit->asString(&buffer, false); + if (asciiSel.size() > 25) { + asciiSel.replace(22, string::npos, "..."); + break; + } + } + + selList.push_back(asciiSel); + } + + return selList; +} + + PitPosPair CutAndPaste::cutSelection(BufferParams const & params, ParagraphList & pars, ParagraphList::iterator startpit, @@ -164,11 +181,9 @@ bool CutAndPaste::copySelection(ParagraphList::iterator startpit, ParagraphList::iterator endpit, int start, int end, textclass_type tc) { - lyx::Assert(&*startpit); - lyx::Assert(&*endpit); - lyx::Assert(0 <= start && start <= startpit->size()); - lyx::Assert(0 <= end && end <= endpit->size()); - lyx::Assert(startpit != endpit || start <= end); + Assert(0 <= start && start <= startpit->size()); + Assert(0 <= end && end <= endpit->size()); + Assert(startpit != endpit || start <= end); ParagraphList paragraphs; @@ -202,6 +217,7 @@ CutAndPaste::pasteSelection(Buffer const & buffer, return pasteSelection(buffer, pars, pit, pos, tc, 0, errorlist); } + pair CutAndPaste::pasteSelection(Buffer const & buffer, ParagraphList & pars, @@ -212,7 +228,7 @@ CutAndPaste::pasteSelection(Buffer const & buffer, if (!checkPastePossible()) return make_pair(PitPosPair(pit, pos), pit); - lyx::Assert (pos <= pit->size()); + Assert (pos <= pit->size()); // Make a copy of the CaP paragraphs. ParagraphList simple_cut_clone = cuts[cut_index].first; @@ -284,7 +300,7 @@ CutAndPaste::pasteSelection(Buffer const & buffer, for (; lit != eit; ++lit) { switch (lit->inset->lyxCode()) { - case Inset::INCLUDE_CODE: { + case InsetOld::INCLUDE_CODE: { InsetInclude * ii = static_cast(lit->inset); InsetInclude::Params ip = ii->params(); ip.masterFilename_ = buffer.fileName(); @@ -292,7 +308,7 @@ CutAndPaste::pasteSelection(Buffer const & buffer, break; } - case Inset::TABULAR_CODE: { + case InsetOld::TABULAR_CODE: { InsetTabular * it = static_cast(lit->inset); it->buffer(const_cast(&buffer)); break; @@ -367,7 +383,7 @@ int CutAndPaste::SwitchLayoutsBetweenClasses(textclass_type c1, ParagraphList & pars, ErrorList & errorlist) { - lyx::Assert(!pars.empty()); + Assert(!pars.empty()); int ret = 0; if (c1 == c2)