]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insettext.C
move inset related stuff from src/graphics to src/inset/
[lyx.git] / src / insets / insettext.C
index 56eab7eafd4961b23c2ab613e7f4b08edd8c715b..63cf4106b52f9b935a5ef49f679dfd4b3884bfef 100644 (file)
 #include "lyxfont.h"
 #include "commandtags.h"
 #include "buffer.h"
-#include "LyXView.h"
+#include "frontends/LyXView.h"
 #include "BufferView.h"
 #include "lyxtextclasslist.h"
 #include "LaTeXFeatures.h"
-#include "Painter.h"
+#include "frontends/Painter.h"
 #include "lyxtext.h"
 #include "lyxcursor.h"
 #include "CutAndPaste.h"
-#include "font.h"
+#include "frontends/font_metrics.h"
 #include "LColor.h"
 #include "lyxrow.h"
 #include "lyxrc.h"
 #include "intl.h"
 #include "trans_mgr.h"
-#include "lyxscreen.h"
+#include "frontends/screen.h"
 #include "gettext.h"
 #include "lyxfunc.h"
 #include "ParagraphParameters.h"
@@ -463,20 +463,20 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
                int yf = y_offset + first;
                y = 0;
                while ((row != 0) && (yf < ph)) {
-                       lt->getVisibleRow(bv, y+y_offset+first, int(x), row,
-                                               y+lt->first_y, cleared);
+                       lt->getVisibleRow(bv, y + y_offset + first, int(x),
+                                         row, y + lt->first_y, cleared);
                        if (bv->text->status() == LyXText::CHANGED_IN_DRAW) {
                                lt->need_break_row = row;
-                               if (lt->fullRebreak(bv)) {
-                                       lt->setCursor(bv, lt->cursor.par(),lt->cursor.pos());
-                                       if (lt->selection.set()) {
-                                               lt->setCursor(bv, lt->selection.start,
-                                                                         lt->selection.start.par(),
-                                                                         lt->selection.start.pos());
-                                               lt->setCursor(bv, lt->selection.end,
-                                                                         lt->selection.end.par(),
-                                                                         lt->selection.end.pos());
-                                       }
+                               lt->fullRebreak(bv);
+                               lt->setCursor(bv, lt->cursor.par(),
+                                             lt->cursor.pos());
+                               if (lt->selection.set()) {
+                                       lt->setCursor(bv, lt->selection.start,
+                                                     lt->selection.start.par(),
+                                                     lt->selection.start.pos());
+                                       lt->setCursor(bv, lt->selection.end,
+                                                     lt->selection.end.par(),
+                                                     lt->selection.end.pos());
                                }
                                break;
                        }
@@ -675,7 +675,7 @@ string const InsetText::editMessage() const
 }
 
 
-void InsetText::edit(BufferView * bv, int x, int y, unsigned int button)
+void InsetText::edit(BufferView * bv, int x, int y, mouse_button::state button)
 {
        UpdatableInset::edit(bv, x, y, button);
 
@@ -695,7 +695,11 @@ void InsetText::edit(BufferView * bv, int x, int y, unsigned int button)
                lt = getLyXText(bv);
                clear = true;
        }
-       if (!checkAndActivateInset(bv, x, tmp_y, button)) {
+       // we put here -1 and not button as now the button in the
+       // edit call should not be needed we will fix this in 1.3.x
+       // cycle hopefully (Jug 20020509)
+       // FIXME: GUII I've changed this to none: probably WRONG
+       if (!checkAndActivateInset(bv, x, tmp_y, mouse_button::none)) {
                lt->setCursorFromCoordinates(bv, x - drawTextXOffset,
                                            y + insetAscent);
                lt->cursor.x_fix(lt->cursor.x());
@@ -783,7 +787,7 @@ void InsetText::insetUnlock(BufferView * bv)
        hideInsetCursor(bv);
        no_selection = true;
        locked = false;
-       int code;
+       int code = NONE;
 #if 0
        if (drawFrame_ == LOCKED)
                code = CURSOR|CLEAR_FRAME;
@@ -817,7 +821,8 @@ void InsetText::insetUnlock(BufferView * bv)
 #if 0
        updateLocal(bv, code, false);
 #else
-       setUpdateStatus(bv, code);
+       if (code != NONE)
+               setUpdateStatus(bv, code);
 #endif
 }
 
@@ -990,7 +995,8 @@ bool InsetText::updateInsetInInset(BufferView * bv, Inset * inset)
 }
 
 
-void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
+void InsetText::insetButtonPress(BufferView * bv, 
+       int x, int y, mouse_button::state button)
 {
        no_selection = true;
 
@@ -1050,9 +1056,9 @@ void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
                        return;
                }
        }
-       if (!inset) { // && (button == 2)) {
+       if (!inset) { // && (button == mouse_button::button2)) {
                bool paste_internally = false;
-               if ((button == 2) && getLyXText(bv)->selection.set()) {
+               if ((button == mouse_button::button2) && getLyXText(bv)->selection.set()) {
                        localDispatch(bv, LFUN_COPY, "");
                        paste_internally = true;
                }
@@ -1088,7 +1094,7 @@ void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
                // Insert primary selection with middle mouse
                // if there is a local selection in the current buffer,
                // insert this
-               if (button == 2) {
+               if (button == mouse_button::button2) {
                        if (paste_internally)
                                localDispatch(bv, LFUN_PASTE, "");
                        else
@@ -1102,7 +1108,8 @@ void InsetText::insetButtonPress(BufferView * bv, int x, int y, int button)
 }
 
 
-bool InsetText::insetButtonRelease(BufferView * bv, int x, int y, int button)
+bool InsetText::insetButtonRelease(BufferView * bv, 
+       int x, int y, mouse_button::state button)
 {
        no_selection = true;
        if (the_locking_inset) {
@@ -1132,7 +1139,7 @@ bool InsetText::insetButtonRelease(BufferView * bv, int x, int y, int button)
 }
 
 
-void InsetText::insetMotionNotify(BufferView * bv, int x, int y, int state)
+void InsetText::insetMotionNotify(BufferView * bv, int x, int y, mouse_button::state state)
 {
        if (the_locking_inset) {
                the_locking_inset->insetMotionNotify(bv, x - inset_x,
@@ -1169,15 +1176,6 @@ void InsetText::insetMotionNotify(BufferView * bv, int x, int y, int state)
 }
 
 
-void InsetText::insetKeyPress(XKeyEvent * xke)
-{
-       if (the_locking_inset) {
-               the_locking_inset->insetKeyPress(xke);
-               return;
-       }
-}
-
-
 UpdatableInset::RESULT
 InsetText::localDispatch(BufferView * bv,
                         kb_action action, string const & arg)
@@ -1375,6 +1373,9 @@ InsetText::localDispatch(BufferView * bv,
                } else {
                        lt->insertStringAsLines(bv, clip);
                }
+               // bug 393
+               lt->clearSelection();
                updwhat = CURSOR_PAR;
                updflag = true;
                break;
@@ -1392,6 +1393,8 @@ InsetText::localDispatch(BufferView * bv,
                setUndo(bv, Undo::INSERT,
                        lt->cursor.par(), lt->cursor.par()->next());
                lt->pasteSelection(bv);
+               // bug 393
+               lt->clearSelection();
                updwhat = CURSOR_PAR;
                updflag = true;
        }
@@ -1542,10 +1545,10 @@ InsetText::localDispatch(BufferView * bv,
 }
 
 
-int InsetText::latex(Buffer const * buf, ostream & os, bool, bool) const
+int InsetText::latex(Buffer const * buf, ostream & os, bool moving_arg, bool) const
 {
        TexRow texrow;
-       buf->latexParagraphs(os, par, 0, texrow);
+       buf->latexParagraphs(os, par, 0, texrow, moving_arg);
        return texrow.rows();
 }
 
@@ -1799,9 +1802,9 @@ void InsetText::toggleInsetCursor(BufferView * bv)
 
        LyXFont const font(getLyXText(bv)->getFont(bv->buffer(), cpar(bv), cpos(bv)));
 
-       int const asc = lyxfont::maxAscent(font);
-       int const desc = lyxfont::maxDescent(font);
-
+       int const asc = font_metrics::maxAscent(font);
+       int const desc = font_metrics::maxDescent(font);
+  
        if (isCursorVisible())
                bv->hideLockedInsetCursor();
        else
@@ -1819,9 +1822,9 @@ void InsetText::showInsetCursor(BufferView * bv, bool show)
        if (!isCursorVisible()) {
                LyXFont const font =
                        getLyXText(bv)->getFont(bv->buffer(), cpar(bv), cpos(bv));
-
-               int const asc = lyxfont::maxAscent(font);
-               int const desc = lyxfont::maxDescent(font);
+       
+               int const asc = font_metrics::maxAscent(font);
+               int const desc = font_metrics::maxDescent(font);
 
                bv->fitLockedInsetCursor(cx(bv), cy(bv), asc, desc);
                if (show)
@@ -1850,9 +1853,9 @@ void InsetText::fitInsetCursor(BufferView * bv) const
        }
        LyXFont const font =
                getLyXText(bv)->getFont(bv->buffer(), cpar(bv), cpos(bv));
-
-       int const asc = lyxfont::maxAscent(font);
-       int const desc = lyxfont::maxDescent(font);
+       
+       int const asc = font_metrics::maxAscent(font);
+       int const desc = font_metrics::maxDescent(font);
 
        if (bv->fitLockedInsetCursor(cx(bv), cy(bv), asc, desc))
                need_update |= FULL;
@@ -2060,13 +2063,20 @@ bool InsetText::checkAndActivateInset(BufferView * bv, bool front)
 
 
 bool InsetText::checkAndActivateInset(BufferView * bv, int x, int y,
-                                     int button)
+                                     mouse_button::state button)
 {
        x -= drawTextXOffset;
        int dummyx = x;
        int dummyy = y + insetAscent;
        Inset * inset = bv->checkInsetHit(getLyXText(bv), dummyx, dummyy);
-
+       // we only do the edit() call if the inset was hit by the mouse
+       // or if it is a highly editable inset. So we should call this
+       // function from our own edit with button < 0.
+       // FIXME: GUII jbl. I've changed this to ::none for now which is probably
+       // WRONG
+       if (button == mouse_button::none && !isHighlyEditableInset(inset))
+               return false;
+       
        if (inset) {
                if (x < 0)
                        x = insetWidth;
@@ -2491,7 +2501,7 @@ void InsetText::clearInset(BufferView * bv, int baseline, bool & cleared) const
        if ((top_x + drawTextXOffset + w) > pain.paperWidth())
                w = pain.paperWidth();
 //     w -= TEXT_TO_INSET_OFFSET;
-       pain.fillRectangle(top_x, ty, w+1, h+1, backgroundColor());
+       pain.fillRectangle(top_x + 1, ty + 1, w - 1, h - 1, backgroundColor());
        cleared = true;
        need_update = FULL;
        frame_is_visible = false;
@@ -2738,7 +2748,7 @@ void InsetText::collapseParagraphs(BufferView * bv) const
 {
        BufferParams const & bparams = bv->buffer()->params;
        LyXText * llt = getLyXText(bv);
-       
+
        while(par->next()) {
                if (par->size() && par->next()->size() &&
                        !par->isSeparator(par->size()-1))