]> git.lyx.org Git - lyx.git/blobdiff - src/bufferview_funcs.C
Forgot to add this files.
[lyx.git] / src / bufferview_funcs.C
index e3f9f0a73422101a54d68cc99e5b6b2e565773cf..48d23a6a9ab24abbe3e3d30cd790108527732b48 100644 (file)
@@ -1,5 +1,19 @@
+/* This file is part of
+ * ====================================================== 
+ * 
+ *           LyX, The Document Processor
+ *        
+ *           Copyright 1995 Matthias Ettrich
+ *           Copyright 1995-2000 The LyX Team.
+ *
+ * ====================================================== */
+
 #include <config.h>
 
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
 #include "bufferview_funcs.h"
 #include "LyXView.h"
 #include "BufferView.h"
 extern FD_form_paragraph * fd_form_paragraph;
 extern FD_form_character * fd_form_character;
 
-
-static
-void SetXtermCursor(Window win)
-{
-       static Cursor cursor;
-       static bool cursor_undefined = true;
-       if (cursor_undefined){
-               cursor = XCreateFontCursor(fl_display, XC_xterm);
-               XFlush(fl_display);
-               cursor_undefined = false;
-       }
-       XDefineCursor(fl_display, win, cursor);
-       XFlush(fl_display);
-}
-
-
+#ifndef NEW_INSETS
 void Foot(BufferView * bv)
 {
        if (!bv->available()) 
@@ -40,10 +39,11 @@ void Foot(BufferView * bv)
        bv->owner()->getMiniBuffer()
                ->Set(_("Inserting Footnote..."));
        bv->hideCursor();
-       bv->update(-2);
-       bv->text->InsertFootnoteEnvironment(LyXParagraph::FOOTNOTE);
-       bv->update(1);
+       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->text->InsertFootnoteEnvironment(bv, LyXParagraph::FOOTNOTE);
+       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
+#endif
 
 
 void Emph(BufferView * bv)
@@ -70,16 +70,18 @@ void Noun(BufferView * bv)
 }
 
 
+#ifndef NEW_INSETS
 void Margin(BufferView * bv)
 {
        if (bv->available()) {
                bv->owner()->getMiniBuffer()->Set(_("Inserting margin note..."));
                bv->hideCursor();
-               bv->update(-2);
-               bv->text->InsertFootnoteEnvironment(LyXParagraph::MARGIN);
-               bv->update(1);
+               bv->update(BufferView::SELECT|BufferView::FITCUR);
+               bv->text->InsertFootnoteEnvironment(bv, LyXParagraph::MARGIN);
+               bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
 }
+#endif
 
 
 void Lang(BufferView * bv, string const & l)
@@ -94,6 +96,7 @@ void Lang(BufferView * bv, string const & l)
 }
 
 
+#ifndef NEW_INSETS
 void Melt(BufferView * bv)
 {
        if (!bv->available()) return;
@@ -101,10 +104,11 @@ void Melt(BufferView * bv)
        bv->owner()->getMiniBuffer()->Set(_("Melt"));
        bv->hideCursor();
        bv->beforeChange();
-       bv->update(-2);
-       bv->text->MeltFootnoteEnvironment();
-       bv->update(1);
+       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->text->MeltFootnoteEnvironment(bv);
+       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
+#endif
 
 
 void Tex(BufferView * bv)
@@ -123,12 +127,12 @@ void changeDepth(BufferView * bv, int decInc)
        if (!bv->available()) return;
        
        bv->hideCursor();
-       bv->update(-2);
+       bv->update(BufferView::SELECT|BufferView::FITCUR);
        if (decInc >= 0)
-               bv->text->IncDepth();
+               bv->text->IncDepth(bv);
        else
-               bv->text->DecDepth();
-       bv->update(1);
+               bv->text->DecDepth(bv);
+       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        bv->owner()->getMiniBuffer()
                ->Set(_("Changed environment depth"
                        " (in possible range, maybe not)"));
@@ -137,7 +141,7 @@ void changeDepth(BufferView * bv, int decInc)
 
 void Free(BufferView * bv)
 {
-       ToggleAndShow(bv, UserFreeFont());
+       ToggleAndShow(bv, UserFreeFont(bv->buffer()->params));
 }
 
 
@@ -190,10 +194,6 @@ void AllowInput(BufferView * bv)
                XUndefineCursor(fl_display,
                                fd_form_character->form_character->window);
 
-       // What to do about this? (Lgb)
-       if (bv->belowMouse())
-               SetXtermCursor(bv->owner()->getForm()->window);
-
        XFlush(fl_display);
        fl_activate_all_forms();
 }
@@ -246,10 +246,7 @@ void FontSize(BufferView * bv, string const & size)
 }
 
 
-/* -------> Returns the current font and depth by printing a message. In the
- * future perhaps we could try to implement a callback to the button-bar.
- * That is, `light' the bold button when the font is currently bold, etc.
- */
+// Returns the current font and depth as a message. 
 string CurrentState(BufferView * bv)
 {
        string state;
@@ -258,19 +255,21 @@ string CurrentState(BufferView * bv)
                // font. (Asger)
                Buffer * buffer = bv->buffer();
                LyXFont font = bv->text->real_current_font;
-               LyXFont defaultfont = textclasslist.TextClass(buffer->
-                                                             params.textclass).defaultfont();
+               LyXFont const & defaultfont =
+                       textclasslist
+                       .TextClass(buffer->params.textclass)
+                       .defaultfont();
                font.reduce(defaultfont);
-               state = _("Font: ") + font.stateText();
+               state = _("Font: ") + font.stateText(&buffer->params);
                // The paragraph depth
                int depth = bv->text->GetDepth();
                if (depth > 0) 
                        state += string(_(", Depth: ")) + tostr(depth);
                // The paragraph spacing, but only if different from
                // buffer spacing.
-               if (!bv->text->cursor.par->spacing.isDefault()) {
+               if (!bv->text->cursor.par()->spacing.isDefault()) {
                        Spacing::Space cur_space =
-                               bv->text->cursor.par->spacing.getSpace();
+                               bv->text->cursor.par()->spacing.getSpace();
                        state += _(", Spacing: ");
                        switch (cur_space) {
                        case Spacing::Single:
@@ -284,7 +283,7 @@ string CurrentState(BufferView * bv)
                                break;
                        case Spacing::Other:
                                state += _("Other (");
-                               state += tostr(bv->text->cursor.par->spacing.getValue());
+                               state += tostr(bv->text->cursor.par()->spacing.getValue());
                                state += ")";
                                break;
                        case Spacing::Default:
@@ -297,7 +296,6 @@ string CurrentState(BufferView * bv)
 }
 
 
-// candidate for move to BufferView
 /* -------> Does the actual toggle job of the XxxCB() calls above.
  * Also shows the current font state.
  */
@@ -305,11 +303,23 @@ void ToggleAndShow(BufferView * bv, LyXFont const & font)
 {
        if (bv->available()) { 
                bv->hideCursor();
-               bv->update(-2);
+               bv->update(BufferView::SELECT|BufferView::FITCUR);
                if (bv->the_locking_inset)
                        bv->the_locking_inset->SetFont(bv, font, toggleall);
                else
-                       bv->text->ToggleFree(font, toggleall);
-               bv->update(1);
+                       bv->text->ToggleFree(bv, font, toggleall);
+               bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+
+               if (font.language() != ignore_language ||
+                   font.latex() != LyXFont::IGNORE) {
+                       LyXText * text = bv->text;
+                       LyXCursor & cursor = text->cursor;
+                       text->ComputeBidiTables(bv->buffer(), cursor.row());
+                       if (cursor.boundary() != 
+                           text->IsBoundary(bv->buffer(), cursor.par(), cursor.pos(),
+                                            text->real_current_font) )
+                               text->SetCursor(bv, cursor.par(), cursor.pos(),
+                                               false, !cursor.boundary());
+               }
        }
 }