]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
compil fix for Qt-4.2
[lyx.git] / src / Text3.cpp
index 8490e4491743bf98aa9c053a92178b20426cd8b0..0c7c759c8fd593b4d6d79ea2c502bcbfab2d4761 100644 (file)
@@ -62,7 +62,6 @@
 #include "insets/InsetInfo.h"
 
 #include "support/lstrings.h"
-#include "support/lyxlib.h"
 #include "support/convert.h"
 #include "support/lyxtime.h"
 
@@ -82,7 +81,8 @@ namespace lyx {
 using cap::copySelection;
 using cap::cutSelection;
 using cap::pasteFromStack;
-using cap::pasteClipboard;
+using cap::pasteClipboardText;
+using cap::pasteClipboardGraphics;
 using cap::replaceSelection;
 
 // globals...
@@ -150,6 +150,7 @@ static void mathDispatch(Cursor & cur, FuncRequest const & cmd, bool display)
                // somewhere, and an ordinary formula
                // otherwise
                if (sel.find(from_ascii("\\newcommand")) == string::npos
+                               && sel.find(from_ascii("\\newlyxcommand")) == string::npos
                                && sel.find(from_ascii("\\def")) == string::npos)
                {
                        InsetMathHull * formula = new InsetMathHull;
@@ -191,7 +192,7 @@ static bool doInsertInset(Cursor & cur, Text * text,
 
        cur.recordUndo();
        if (cmd.action == LFUN_INDEX_INSERT) {
-               docstring ds = support::subst(text->getStringToIndex(cur), '\n', ' ');
+               docstring ds = subst(text->getStringToIndex(cur), '\n', ' ');
                text->insertInset(cur, inset);
                if (edit)
                        inset->edit(cur, true);
@@ -298,8 +299,8 @@ static void outline(OutlineOp mode, Cursor & cur)
                        // Not found; do nothing
                        if (toclevel == Layout::NOT_IN_TOC || toclevel > thistoclevel)
                                break;
-                       pit_type const newpit = std::distance(bgn, dest);
-                       pit_type const len = std::distance(start, finish);
+                       pit_type const newpit = distance(bgn, dest);
+                       pit_type const len = distance(start, finish);
                        pit_type const deletepit = pit + len;
                        buf.undo().recordUndo(cur, ATOMIC_UNDO, newpit, deletepit - 1);
                        pars.insert(dest, start, finish);
@@ -331,8 +332,8 @@ static void outline(OutlineOp mode, Cursor & cur)
                                        break;
                        }
                        // One such was found:
-                       pit_type newpit = std::distance(bgn, dest);
-                       pit_type const len = std::distance(start, finish);
+                       pit_type newpit = distance(bgn, dest);
+                       pit_type const len = distance(start, finish);
                        buf.undo().recordUndo(cur, ATOMIC_UNDO, pit, newpit - 1);
                        pars.insert(dest, start, finish);
                        start = boost::next(bgn, pit);
@@ -413,7 +414,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                pit_type const pit = cur.pit();
                recUndo(cur, pit, pit + 1);
                cur.finishUndo();
-               std::swap(pars_[pit], pars_[pit + 1]);
+               swap(pars_[pit], pars_[pit + 1]);
                updateLabels(cur.buffer());
                needsUpdate = true;
                ++cur.pit();
@@ -424,7 +425,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                pit_type const pit = cur.pit();
                recUndo(cur, pit - 1, pit);
                cur.finishUndo();
-               std::swap(pars_[pit], pars_[pit - 1]);
+               swap(pars_[pit], pars_[pit - 1]);
                updateLabels(cur.buffer());
                --cur.pit();
                needsUpdate = true;
@@ -487,6 +488,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                } else {
                        cur.undispatched();
                }
+               cur.updateFlags(Update::FitCursor);
                break;
 
        case LFUN_BUFFER_END:
@@ -497,6 +499,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                } else {
                        cur.undispatched();
                }
+               cur.updateFlags(Update::FitCursor);
                break;
 
        case LFUN_CHAR_FORWARD:
@@ -905,22 +908,44 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                charsTranspose(cur);
                break;
 
-       case LFUN_PASTE:
+       case LFUN_PASTE: {
                cur.message(_("Paste"));
                cap::replaceSelection(cur);
-               if (cmd.argument().empty() && !theClipboard().isInternal())
-                       pasteClipboard(cur, bv->buffer().errorList("Paste"));
-               else {
-                       string const arg(to_utf8(cmd.argument()));
+
+               // without argument?
+               string const arg = to_utf8(cmd.argument());
+               if (arg.empty()) {
+                       if (theClipboard().isInternal())
+                               pasteFromStack(cur, bv->buffer().errorList("Paste"), 0);
+                       else if (theClipboard().hasGraphicsContents())
+                               pasteClipboardGraphics(cur, bv->buffer().errorList("Paste"));
+                       else
+                               pasteClipboardText(cur, bv->buffer().errorList("Paste"));
+               } else if (isStrUnsignedInt(arg)) {
+                       // we have a numerical argument
                        pasteFromStack(cur, bv->buffer().errorList("Paste"),
-                                       isStrUnsignedInt(arg) ?
-                                               convert<unsigned int>(arg) :
-                                               0);
+                                      convert<unsigned int>(arg));
+               } else {
+                       Clipboard::GraphicsType type;
+                       if (arg == "pdf")
+                               type = Clipboard::PdfGraphicsType;
+                       else if (arg == "png")
+                               type = Clipboard::PngGraphicsType;
+                       else if (arg == "jpeg")
+                               type = Clipboard::JpegGraphicsType;
+                       else if (arg == "linkback")
+                               type = Clipboard::LinkBackGraphicsType;
+                       else
+                               BOOST_ASSERT(false);
+
+                       pasteClipboardGraphics(cur, bv->buffer().errorList("Paste"), type);
                }
+
                bv->buffer().errors("Paste");
                cur.clearSelection(); // bug 393
                cur.finishUndo();
                break;
+       }
 
        case LFUN_CUT:
                cutSelection(cur, true, true);
@@ -945,7 +970,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                is >> x >> y;
                if (!is)
                        lyxerr << "SETXY: Could not parse coordinates in '"
-                              << to_utf8(cmd.argument()) << std::endl;
+                              << to_utf8(cmd.argument()) << endl;
                else
                        tm.setCursorFromCoordinates(cur, x, y);
                break;
@@ -1014,7 +1039,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_CLIPBOARD_PASTE:
                cur.clearSelection();
-               pasteClipboard(cur, bv->buffer().errorList("Paste"),
+               pasteClipboardText(cur, bv->buffer().errorList("Paste"),
                               cmd.argument() == "paragraph");
                bv->buffer().errors("Paste");
                break;
@@ -1028,8 +1053,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                if (cmd.argument().empty())
                        break;
                docstring hexstring = cmd.argument();
-               if (lyx::support::isHex(hexstring)) {
-                       char_type c = lyx::support::hexToInt(hexstring);
+               if (isHex(hexstring)) {
+                       char_type c = hexToInt(hexstring);
                        if (c >= 32 && c < 0x10ffff) {
                                lyxerr << "Inserting c: " << c << endl;
                                docstring s = docstring(1, c);
@@ -1155,7 +1180,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                CursorSlice old = bvcur.top();
 
                int const wh = bv->workHeight();
-               int const y = std::max(0, std::min(wh - 1, cmd.y));
+               int const y = max(0, min(wh - 1, cmd.y));
 
                tm.setCursorFromCoordinates(cur, cmd.x, y);
                cur.setTargetX(cmd.x);
@@ -1280,6 +1305,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        docstring ds = cur.selectionAsString(false);
                        cutSelection(cur, true, false);
                        static_cast<InsetInfo *>(inset)->setInfo(to_utf8(ds));
+                       static_cast<InsetInfo *>(inset)->updateInfo(cur.bv().buffer());
                }
                insertInset(cur, inset);
                cur.posForward();
@@ -1433,8 +1459,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        string const s1 = token(s, ' ', 1);
                        int const nargs = s1.empty() ? 0 : convert<int>(s1);
                        string const s2 = token(s, ' ', 2);
-                       string const type = s2.empty() ? "newcommand" : s2;
-                       cur.insert(new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, from_utf8(type)));
+                       MacroType type = MacroTypeNewcommand;
+                       if (s2 == "def")
+                               type = MacroTypeDef;
+                       cur.insert(new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, type));
                        //cur.nextInset()->edit(cur, true);
                }
                break;
@@ -1451,12 +1479,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_MATH_MATRIX:
        case LFUN_MATH_DELIM:
        case LFUN_MATH_BIGDELIM: {
-               if (cur.selection())
-                       cur.clearSelection();
-               // FIXME: instead of the above, this one
-               // should be used (but it asserts with Bidi enabled)
-               // cf. http://bugzilla.lyx.org/show_bug.cgi?id=4055
-               // cap::replaceSelection(cur);
+               cap::replaceSelection(cur);
                cur.insert(new InsetMathHull(hullSimple));
                checkAndActivateInset(cur, true);
                BOOST_ASSERT(cur.inMathed());
@@ -2000,22 +2023,37 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                enable = cur.selection();
                break;
 
-       case LFUN_PASTE:
+       case LFUN_PASTE: {
                if (cmd.argument().empty()) {
                        if (theClipboard().isInternal())
                                enable = cap::numberOfSelections() > 0;
                        else
                                enable = !theClipboard().empty();
-               } else {
-                       string const arg = to_utf8(cmd.argument());
-                       if (isStrUnsignedInt(arg)) {
-                               unsigned int n = convert<unsigned int>(arg);
-                               enable = cap::numberOfSelections() > n;
-                       } else
-                               // unknown argument
-                               enable = false;
+                       break;
+               }
+               
+               // we have an argument
+               string const arg = to_utf8(cmd.argument());
+               if (isStrUnsignedInt(arg)) {
+                       // it's a number and therefore means the internal stack
+                       unsigned int n = convert<unsigned int>(arg);
+                       enable = cap::numberOfSelections() > n;
+                       break;
+               }
+               
+               // explicit graphics type?
+               if ((arg == "pdf" && theClipboard().hasGraphicsContents(Clipboard::PdfGraphicsType))
+                   || (arg == "png" && theClipboard().hasGraphicsContents(Clipboard::PngGraphicsType))
+                   || (arg == "jpeg" && theClipboard().hasGraphicsContents(Clipboard::JpegGraphicsType))
+                   || (arg == "linkback" && theClipboard().hasGraphicsContents(Clipboard::LinkBackGraphicsType))) {
+                       enable = true;
+                       break;
                }
+               
+               // unknown argument
+               enable = false;
                break;
+        }
 
        case LFUN_CLIPBOARD_PASTE:
                enable = !theClipboard().empty();