]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
english_language was not used at all.
[lyx.git] / src / Text3.cpp
index c6674850cfb460b69ba3eaadcca43b8fc13fd5b3..3dd736b9dd698d399466b69d843bb7d5568cb530 100644 (file)
@@ -57,6 +57,8 @@
 #include "insets/InsetSpecialChar.h"
 #include "insets/InsetText.h"
 #include "insets/InsetInfo.h"
+#include "insets/InsetGraphics.h"
+#include "insets/InsetGraphicsParams.h"
 
 #include "support/convert.h"
 #include "support/debug.h"
@@ -633,16 +635,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_WORD_RIGHT:
        case LFUN_WORD_RIGHT_SELECT:
-               //FIXME: for visual cursor mode, really move right
-               if (reverseDirectionNeeded(cur)) {
-                       cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
-                                       LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+               if (lyxrc.visual_cursor) {
+                       needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_RIGHT_SELECT);
+                       needsUpdate |= cursorVisRightOneWord(cur);
+                       if (!needsUpdate && oldTopSlice == cur.top()
+                                       && cur.boundary() == oldBoundary) {
+                               cur.undispatched();
+                               cmd = FuncRequest(LFUN_FINISHED_RIGHT);
+                       }
                } else {
-                       cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
-                                       LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+                       if (reverseDirectionNeeded(cur)) {
+                               cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
+                                               LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+                       } else {
+                               cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
+                                               LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+                       }
+                       dispatch(cur, cmd);
+                       return;
                }
-               dispatch(cur, cmd);
-               return;
+               break;
 
        case LFUN_WORD_FORWARD:
        case LFUN_WORD_FORWARD_SELECT:
@@ -652,16 +664,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_WORD_LEFT:
        case LFUN_WORD_LEFT_SELECT:
-               //FIXME: for visual cursor mode, really move left
-               if (reverseDirectionNeeded(cur)) {
-                       cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
-                                       LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+               if (lyxrc.visual_cursor) {
+                       needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_LEFT_SELECT);
+                       needsUpdate |= cursorVisLeftOneWord(cur);
+                       if (!needsUpdate && oldTopSlice == cur.top()
+                                       && cur.boundary() == oldBoundary) {
+                               cur.undispatched();
+                               cmd = FuncRequest(LFUN_FINISHED_LEFT);
+                       }
                } else {
-                       cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
-                                       LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+                       if (reverseDirectionNeeded(cur)) {
+                               cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
+                                               LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+                       } else {
+                               cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
+                                               LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+                       }
+                       dispatch(cur, cmd);
+                       return;
                }
-               dispatch(cur, cmd);
-               return;
+               break;
 
        case LFUN_WORD_BACKWARD:
        case LFUN_WORD_BACKWARD_SELECT:
@@ -853,17 +875,47 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
 
        case LFUN_INSET_SETTINGS: {
-               // if there is an inset at cursor, access this
-               Inset * inset = cur.nextInset();
-               if (inset) {
-                       inset->showInsetDialog(bv);
+               Inset & inset = cur.inset();
+               if (cmd.getArg(0) == insetName(inset.lyxCode())) {
+                       // This inset dialog has been explicitely requested.
+                       inset.showInsetDialog(bv);
                        break;
                }
-               // if not work, access the underlying inset.
-               cur.inset().showInsetDialog(bv);
+               // else, if there is an inset at the cursor, access this
+               Inset * next_inset = cur.nextInset();
+               if (next_inset) {
+                       next_inset->showInsetDialog(bv);
+                       break;
+               }
+               // if not then access the underlying inset.
+               inset.showInsetDialog(bv);
                break;
        }
 
+       case LFUN_SET_GRAPHICS_GROUP: {
+               Inset * instmp = &cur.inset();
+               if (instmp->lyxCode() != GRAPHICS_CODE) instmp = cur.nextInset();
+               if (!instmp || instmp->lyxCode() != GRAPHICS_CODE) break;
+
+               cur.recordUndoFullDocument();
+               Inset & inset = *instmp;
+               InsetGraphics & ins = static_cast<InsetGraphics &>(inset);
+
+               string id = to_utf8(cmd.argument());
+               string grp = InsetGraphics::getGroupParams(bv->buffer(), id);
+               InsetGraphicsParams tmp, inspar = ins.getParams();
+
+               if (id.empty())
+                       inspar.groupId = to_utf8(cmd.argument());
+               else {
+                       InsetGraphics::string2params(grp, bv->buffer(), tmp);
+                       tmp.filename = inspar.filename;
+                       inspar = tmp;
+               }
+
+               ins.setParams(inspar);
+       }
+
        case LFUN_SPACE_INSERT:
                if (cur.paragraph().layout().free_spacing)
                        insertChar(cur, ' ');
@@ -981,15 +1033,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_SERVER_GET_FONT:
-               if (cur.current_font.fontInfo().shape() == ITALIC_SHAPE)
-                       cur.message(from_ascii("E"));
-               else if (cur.current_font.fontInfo().shape() == SMALLCAPS_SHAPE)
-                       cur.message(from_ascii("N"));
-               else
-                       cur.message(from_ascii("0"));
-               break;
-
        case LFUN_SERVER_GET_LAYOUT:
                cur.message(cur.paragraph().layout().name());
                break;
@@ -2184,7 +2227,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_CHARS_TRANSPOSE:
        case LFUN_SERVER_GET_XY:
        case LFUN_SERVER_SET_XY:
-       case LFUN_SERVER_GET_FONT:
        case LFUN_SERVER_GET_LAYOUT:
        case LFUN_LAYOUT:
        case LFUN_DATE_INSERT:
@@ -2235,6 +2277,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_BUFFER_BEGIN_SELECT:
        case LFUN_BUFFER_END_SELECT:
        case LFUN_UNICODE_INSERT:
+       case LFUN_SET_GRAPHICS_GROUP:
                // these are handled in our dispatch()
                enable = true;
                break;