]> git.lyx.org Git - lyx.git/blobdiff - src/text3.C
Remove the XOpenIM test as lyxlookup.C has been buried.
[lyx.git] / src / text3.C
index 3f0d7eacacf132654250463949adccc39dc99d6d..48bc0c0a7edcc4c91d81b5052a6ee7b7f0c730ed 100644 (file)
@@ -28,7 +28,7 @@
 #include "support/lstrings.h"
 #include "frontends/LyXView.h"
 #include "frontends/screen.h"
-#include "frontends/WorkArea.h"
+#include "frontends/Dialogs.h"
 #include "insets/insetspecialchar.h"
 #include "insets/insettext.h"
 #include "insets/insetbib.h"
 #include <clocale>
 
 using std::endl;
+using std::find;
+using std::vector;
 
 extern string current_layout;
 extern int bibitemMaxWidth(BufferView *, LyXFont const &);
 
 // the selection possible is needed, that only motion events are
-// used, where the bottom press event was on the drawing area too 
+// used, where the bottom press event was on the drawing area too
 bool selection_possible = false;
 
 
@@ -75,7 +77,7 @@ namespace {
                }
 
                if (!lt->selection.set())
-                       bv->workarea().haveSelection(false);
+                       bv->haveSelection(false);
 
                bv->switchKeyMap();
        }
@@ -102,7 +104,7 @@ namespace {
 
                Inset /*const*/ * inset = par.getInset(pos);
 
-               if (!isEditableInset(inset)) 
+               if (!isEditableInset(inset))
                        return 0;
 
                // get inset dimensions
@@ -122,8 +124,9 @@ namespace {
                );
 
                if (!b.contained(x, y)) {
-                       lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y
-                               << " box " << b << endl;
+                       lyxerr[Debug::GUI] << "Missed inset at x,y "
+                                          << x << ',' << y
+                                          << " box " << b << endl;
                        return 0;
                }
 
@@ -240,7 +243,7 @@ void LyXText::cursorPrevious(BufferView * bv)
 {
        if (!cursor.row()->previous()) {
                if (first_y > 0) {
-                       int new_y = bv->text->first_y - bv->workarea().workHeight();
+                       int new_y = bv->text->first_y - bv->workHeight();
                        bv->screen().draw(bv->text, bv, new_y < 0 ? 0 : new_y);
                        bv->updateScrollbar();
                }
@@ -260,18 +263,18 @@ void LyXText::cursorPrevious(BufferView * bv)
                // as we move the cursor or do something while inside the row (it may
                // span several workarea-heights) we'll move to the top again, but this
                // is better than just jump down and only display part of the row.
-               new_y = bv->text->first_y - bv->workarea().workHeight();
+               new_y = bv->text->first_y - bv->workHeight();
        } else {
                if (inset_owner) {
                        new_y = bv->text->cursor.iy()
                                + bv->theLockingInset()->insetInInsetY() + y
                                + cursor.row()->height()
-                               - bv->workarea().workHeight() + 1;
+                               - bv->workHeight() + 1;
                } else {
                        new_y = cursor.y()
                                - cursor.row()->baseline()
                                + cursor.row()->height()
-                               - bv->workarea().workHeight() + 1;
+                               - bv->workHeight() + 1;
                }
        }
        bv->screen().draw(bv->text, bv, new_y < 0 ? 0 : new_y);
@@ -292,15 +295,15 @@ void LyXText::cursorNext(BufferView * bv)
        if (!cursor.row()->next()) {
                int y = cursor.y() - cursor.row()->baseline() +
                        cursor.row()->height();
-               if (y > int(first_y + bv->workarea().workHeight())) {
+               if (y > int(first_y + bv->workHeight())) {
                        bv->screen().draw(bv->text, bv,
-                                                 bv->text->first_y + bv->workarea().workHeight());
+                                                 bv->text->first_y + bv->workHeight());
                        bv->updateScrollbar();
                }
                return;
        }
 
-       int y = first_y + bv->workarea().workHeight();
+       int y = first_y + bv->workHeight();
        if (inset_owner && !first_y) {
                y -= (bv->text->cursor.iy()
                          - bv->text->first_y
@@ -311,7 +314,7 @@ void LyXText::cursorNext(BufferView * bv)
 
        Row * cursorrow = cursor.row();
        setCursorFromCoordinates(bv, cursor.x_fix(), y);
-       // + workarea().workHeight());
+       // + bv->workHeight());
        finishUndo();
 
        int new_y;
@@ -321,7 +324,7 @@ void LyXText::cursorNext(BufferView * bv)
                // as we move the cursor or do something while inside the row (it may
                // span several workarea-heights) we'll move to the top again, but this
                // is better than just jump down and only display part of the row.
-               new_y = bv->text->first_y + bv->workarea().workHeight();
+               new_y = bv->text->first_y + bv->workHeight();
        } else {
                if (inset_owner) {
                        new_y = bv->text->cursor.iy()
@@ -336,7 +339,7 @@ void LyXText::cursorNext(BufferView * bv)
                LyXCursor cur;
                setCursor(bv, cur, cursor.row()->next()->par(),
                                                cursor.row()->next()->pos(), false);
-               if (cur.y() < int(first_y + bv->workarea().workHeight())) {
+               if (cur.y() < int(first_y + bv->workHeight())) {
                        cursorDown(bv, true);
                }
        }
@@ -369,7 +372,7 @@ void specialChar(LyXText * lt, BufferView * bv, InsetSpecialChar::Kind kind)
 Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
 {
        lyxerr[Debug::ACTION] << "LyXFunc::dispatch: action[" << cmd.action
-                             <<"] arg[" << cmd.argument << "]" << endl;
+                             <<"] arg[" << cmd.argument << ']' << endl;
 
        BufferView * bv = cmd.view();
 
@@ -381,9 +384,15 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
 
                // ensure that we have only one start_of_appendix in this document
                Paragraph * tmp = ownerParagraph();
-               for (; tmp; tmp = tmp->next())
-                       tmp->params().startOfAppendix(false);
+               for (; tmp; tmp = tmp->next()) {
+                       if (tmp->params().startOfAppendix()) {
+                               setUndo(bv, Undo::EDIT, tmp, tmp->next());
+                               tmp->params().startOfAppendix(false);
+                               break;
+                       }
+               }
 
+               setUndo(bv, Undo::EDIT, par, par->next());
                par->params().startOfAppendix(start);
 
                // we can set the refreshing parameters now
@@ -551,11 +560,23 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                finishChange(bv, true);
                break;
 
+       case LFUN_WORDSEL: {
+               update(bv, false);
+               LyXCursor cur1;
+               LyXCursor cur2;
+               getWord(cur1, cur2, WHOLE_WORD);
+               setCursor(bv, cur1.par(), cur1.pos());
+               bv->beforeChange(this);
+               setCursor(bv, cur2.par(), cur2.pos());
+               finishChange(bv, true);
+               break;
+       }
+
        case LFUN_RIGHT: {
                bool is_rtl = cursor.par()->isRightToLeftPar(bv->buffer()->params);
                if (!selection.mark())
                        bv->beforeChange(this);
-               update(bv);
+               update(bv, false);
                if (is_rtl)
                        cursorLeft(bv, false);
                if (cursor.pos() < cursor.par()->size()
@@ -578,7 +599,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                bool const is_rtl = cursor.par()->isRightToLeftPar(bv->buffer()->params);
                if (!selection.mark())
                        bv->beforeChange(this);
-               update(bv);
+               update(bv, false);
                LyXCursor const cur = cursor;
                if (!is_rtl)
                        cursorLeft(bv, false);
@@ -1028,7 +1049,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                if (!is)
                        lyxerr << "SETXY: Could not parse coordinates in '"
                               << cmd.argument << std::endl;
-               else 
+               else
                        setCursorFromCoordinates(bv, x, y);
                break;
        }
@@ -1090,6 +1111,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                                        change_layout = true;
                                        break;
                                }
+                               spar = spar->next();
                        }
                }
                if (change_layout) {
@@ -1111,7 +1133,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                // this was originally a beforeChange(bv->text), i.e
                // the outermost LyXText!
                bv->beforeChange(this);
-               string const clip = bv->workarea().getClipboard();
+               string const clip = bv->getClipboard();
                if (!clip.empty()) {
                        if (cmd.argument == "paragraph")
                                insertStringAsParagraphs(bv, clip);
@@ -1140,40 +1162,6 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                break;
        }
 
-#if 0
-       case LFUN_INSET_LIST:
-       case LFUN_INSET_THEOREM:
-#endif
-       case LFUN_INSERT_NOTE:
-       case LFUN_INSET_ERT:
-       case LFUN_INSET_EXTERNAL:
-       case LFUN_INSET_FLOAT:
-       case LFUN_INSET_FOOTNOTE:
-       case LFUN_INSET_MARGINAL:
-       case LFUN_INSET_MINIPAGE:
-       case LFUN_INSET_OPTARG:
-       case LFUN_INSET_WIDE_FLOAT:
-       case LFUN_TABULAR_INSERT:
-       {
-               Inset * inset = createInset(cmd);
-               if (inset) {
-                       bool gotsel = false;
-                       if (selection.set()) {
-                               cutSelection(bv, true, false);
-                               gotsel = true;
-                       }
-                       if (bv->insertInset(inset)) {
-                               inset->edit(bv);
-                               if (gotsel)
-                                       bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
-                       }
-                       else
-                               delete inset;
-               }
-               break;
-       }
-
-
        case LFUN_QUOTE: {
                Paragraph const * par = cursor.par();
                lyx::pos_type pos = cursor.pos();
@@ -1235,7 +1223,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                        if (bv_owner)
                                bv->screen().toggleSelection(this, bv, false);
                        update(bv, false);
-                       bv->workarea().haveSelection(selection.set());
+                       bv->haveSelection(selection.set());
                }
                break;
 
@@ -1254,7 +1242,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                                selectWord(bv, LyXText::WHOLE_WORD_STRICT);
                        }
                        update(bv, false);
-                       bv->workarea().haveSelection(selection.set());
+                       bv->haveSelection(selection.set());
                }
                break;
 
@@ -1303,11 +1291,12 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                // in some other local environment, but I would like to leave this here
                // for the moment until I can remove this (Jug 20020418)
                if (y_before < bv->text->cursor.y())
-                       lyxerr << y_before << ":" << bv->text->cursor.y() << endl;
+                       lyxerr << y_before << ':'
+                              << bv->text->cursor.y() << endl;
        #endif
                // This is to allow jumping over large insets
                if (cursorrow == bv->text->cursor.row()) {
-                       if (cmd.y >= int(bv->workarea().workHeight()))
+                       if (cmd.y >= int(bv->workHeight()))
                                bv->text->cursorDown(bv, false);
                        else if (cmd.y < 0)
                                bv->text->cursorUp(bv, false);
@@ -1434,7 +1423,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                // do nothing if we used the mouse wheel
                if (!bv->buffer())
                        break;
-       
+
                if (cmd.button() == mouse_button::button4
                 || cmd.button() == mouse_button::button5)
                        break;
@@ -1464,7 +1453,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
 
                // finish selection
                if (cmd.button() == mouse_button::button1)
-                       bv->workarea().haveSelection(selection.set());
+                       bv->haveSelection(selection.set());
 
                bv->switchKeyMap();
                bv->owner()->view_state_changed();
@@ -1558,7 +1547,7 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                                cutSelection(bv, false, false);
                                update(bv);
                        }
-                       bv->workarea().haveSelection(false);
+                       bv->haveSelection(false);
                }
 
                bv->beforeChange(this);
@@ -1581,6 +1570,60 @@ Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
                break;
        }
 
+       case LFUN_HTMLURL: {
+               InsetCommandParams p("htmlurl");
+               bv->owner()->getDialogs().createUrl(p.getAsString());
+               break;
+       }
+
+       case LFUN_URL: {
+               InsetCommandParams p("url");
+               bv->owner()->getDialogs().createUrl(p.getAsString());
+               break;
+       }
+
+
+#if 0
+       case LFUN_INSET_LIST:
+       case LFUN_INSET_THEOREM:
+#endif
+       case LFUN_INSERT_NOTE:
+       case LFUN_INSERT_URL:
+       case LFUN_INSET_CAPTION:
+       case LFUN_INSET_ERT:
+       case LFUN_INSET_EXTERNAL:
+       case LFUN_INSET_FLOAT:
+       case LFUN_INSET_FOOTNOTE:
+       case LFUN_INSET_MARGINAL:
+       case LFUN_INSET_MINIPAGE:
+       case LFUN_INSET_OPTARG:
+       case LFUN_INSET_WIDE_FLOAT:
+       case LFUN_INSET_WRAP:
+       case LFUN_TABULAR_INSERT:
+       case LFUN_INDEX_INSERT:
+       case LFUN_INDEX_PRINT:
+       case LFUN_PARENTINSERT:
+       case LFUN_TOC_INSERT:
+       {
+               Inset * inset = createInset(cmd);
+               if (inset) {
+                       bool gotsel = false;
+                       if (selection.set()) {
+                               cutSelection(bv, true, false);
+                               gotsel = true;
+                       }
+                       if (bv->insertInset(inset)) {
+                               inset->edit(bv);
+                               if (gotsel)
+                                       bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
+                       }
+                       else
+                               delete inset;
+               }
+               break;
+       }
+
+
        default:
                return Inset::UNDISPATCHED;
        }