]> git.lyx.org Git - lyx.git/blobdiff - src/bufferview_funcs.C
Various fixes to Tabular, InsetTabular and InsetText. Fixed left border for
[lyx.git] / src / bufferview_funcs.C
index f4765b42055ca45f169348d82a1e95acf46bc772..c028e0af285244ff86c873cbcbb9cb5696930ec0 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"
 #include "lyxfont.h"
 #include "lyx_gui_misc.h"
 #include "lyxtext.h"
-#include "minibuffer.h"
 #include "buffer.h"
 #include "support/lstrings.h"
 #include "lyx_cb.h"
-#include "layout_forms.h"
-
-extern FD_form_paragraph * fd_form_paragraph;
-extern FD_form_character * fd_form_character;
-
-
-void Foot(BufferView * bv)
-{
-       if (!bv->available()) 
-               return;
-       
-       bv->owner()->getMiniBuffer()
-               ->Set(_("Inserting Footnote..."));
-       bv->hideCursor();
-       bv->update(-2);
-       bv->text->InsertFootnoteEnvironment(LyXParagraph::FOOTNOTE);
-       bv->update(1);
-}
+#include "language.h"
+#include "gettext.h"
 
 
 void Emph(BufferView * bv)
@@ -55,43 +52,25 @@ void Noun(BufferView * bv)
 }
 
 
-void Margin(BufferView * bv)
+void Number(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);
-       }
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setNumber(LyXFont::TOGGLE);
+       ToggleAndShow(bv, font);
 }
 
-
 void Lang(BufferView * bv, string const & l)
 {
        LyXFont font(LyXFont::ALL_IGNORE);
-       Languages::iterator lit = languages.find(l);
-       if (lit != languages.end()) {
-               font.setLanguage(&(*lit).second);
+       Language const * lang = languages.getLanguage(l);
+       if (lang) {
+               font.setLanguage(lang);
                ToggleAndShow(bv, font);
        } else
                WriteAlert(_("Error! unknown language"),l);
 }
 
 
-void Melt(BufferView * bv)
-{
-       if (!bv->available()) return;
-       
-       bv->owner()->getMiniBuffer()->Set(_("Melt"));
-       bv->hideCursor();
-       bv->beforeChange();
-       bv->update(-2);
-       bv->text->MeltFootnoteEnvironment();
-       bv->update(1);
-}
-
-
 void Tex(BufferView * bv)
 {
        LyXFont font(LyXFont::ALL_IGNORE);
@@ -103,26 +82,22 @@ void Tex(BufferView * bv)
 // Change environment depth.
 // if decInc >= 0, increment depth
 // if decInc <  0, decrement depth
-void changeDepth(BufferView * bv, int decInc)
+void changeDepth(BufferView * bv, LyXText * text, int decInc)
 {
-       if (!bv->available()) return;
+       if (!bv->available() || !text)
+           return;
        
        bv->hideCursor();
-       bv->update(-2);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
        if (decInc >= 0)
-               bv->text->IncDepth();
+               text->IncDepth(bv);
        else
-               bv->text->DecDepth();
-       bv->update(1);
-       bv->owner()->getMiniBuffer()
-               ->Set(_("Changed environment depth"
-                       " (in possible range, maybe not)"));
-}
-
-
-void Free(BufferView * bv)
-{
-       ToggleAndShow(bv, UserFreeFont());
+               text->DecDepth(bv);
+       if (text->inset_owner)
+           bv->updateInset((Inset *)text->inset_owner, true);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       bv->owner()->message(_("Changed environment depth "
+                              "(in possible range, maybe not)"));
 }
 
 
@@ -141,24 +116,16 @@ void ProhibitInput(BufferView * bv)
        static bool cursor_undefined = true;
    
        if (cursor_undefined){
-               cursor = XCreateFontCursor(fl_display, XC_watch);
-               XFlush(fl_display);
+               cursor = XCreateFontCursor(fl_get_display(), XC_watch);
+               XFlush(fl_get_display());
                cursor_undefined = false;
        }
    
        /* set the cursor to the watch for all forms and the canvas */ 
-       XDefineCursor(fl_display, bv->owner()->getForm()->window, 
+       XDefineCursor(fl_get_display(), bv->owner()->getForm()->window, 
                      cursor);
-       if (fd_form_paragraph->form_paragraph->visible)
-               XDefineCursor(fl_display,
-                             fd_form_paragraph->form_paragraph->window,
-                             cursor);
-       if (fd_form_character->form_character->visible)
-               XDefineCursor(fl_display,
-                             fd_form_character->form_character->window,
-                             cursor);
-
-       XFlush(fl_display);
+
+       XFlush(fl_get_display());
        fl_deactivate_all_forms();
 }
 
@@ -167,15 +134,9 @@ void AllowInput(BufferView * bv)
 {
        /* reset the cursor from the watch for all forms and the canvas */
    
-       XUndefineCursor(fl_display, bv->owner()->getForm()->window);
-       if (fd_form_paragraph->form_paragraph->visible)
-               XUndefineCursor(fl_display,
-                               fd_form_paragraph->form_paragraph->window);
-       if (fd_form_character->form_character->visible)
-               XUndefineCursor(fl_display,
-                               fd_form_character->form_character->window);
-
-       XFlush(fl_display);
+       XUndefineCursor(fl_get_display(), bv->owner()->getForm()->window);
+
+       XFlush(fl_get_display());
        fl_activate_all_forms();
 }
 
@@ -222,23 +183,21 @@ void Underline(BufferView * bv)
 void FontSize(BufferView * bv, string const & size)
 {
        LyXFont font(LyXFont::ALL_IGNORE);
-       font.setGUISize(size);
+       font.setLyXSize(size);
        ToggleAndShow(bv, font);
 }
 
 
-/* -------> 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.
- */
-string CurrentState(BufferView * bv)
+// Returns the current font and depth as a message. 
+string const CurrentState(BufferView * bv)
 {
        string state;
        if (bv->available()) { 
                // I think we should only show changes from the default
                // font. (Asger)
+               LyXText * text = bv->getLyXText();
                Buffer * buffer = bv->buffer();
-               LyXFont font = bv->text->real_current_font;
+               LyXFont font = text->real_current_font;
                LyXFont const & defaultfont =
                        textclasslist
                        .TextClass(buffer->params.textclass)
@@ -246,14 +205,14 @@ string CurrentState(BufferView * bv)
                font.reduce(defaultfont);
                state = _("Font: ") + font.stateText(&buffer->params);
                // The paragraph depth
-               int depth = bv->text->GetDepth();
+               int depth = 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 (!text->cursor.par()->params.spacing().isDefault()) {
                        Spacing::Space cur_space =
-                               bv->text->cursor.par->spacing.getSpace();
+                               text->cursor.par()->params.spacing().getSpace();
                        state += _(", Spacing: ");
                        switch (cur_space) {
                        case Spacing::Single:
@@ -267,7 +226,7 @@ string CurrentState(BufferView * bv)
                                break;
                        case Spacing::Other:
                                state += _("Other (");
-                               state += tostr(bv->text->cursor.par->spacing.getValue());
+                               state += tostr(text->cursor.par()->params.spacing().getValue());
                                state += ")";
                                break;
                        case Spacing::Default:
@@ -283,27 +242,31 @@ string CurrentState(BufferView * bv)
 /* -------> Does the actual toggle job of the XxxCB() calls above.
  * Also shows the current font state.
  */
-void ToggleAndShow(BufferView * bv, LyXFont const & font)
+void ToggleAndShow(BufferView * bv, LyXFont const & font, bool toggleall)
 {
        if (bv->available()) { 
+               if (bv->theLockingInset()) {
+                       bv->theLockingInset()->SetFont(bv, font, toggleall);
+                       return;
+               }
+               LyXText * text = bv->getLyXText();
+
                bv->hideCursor();
-               bv->update(-2);
-               if (bv->the_locking_inset)
-                       bv->the_locking_inset->SetFont(bv, font, toggleall);
-               else
-                       bv->text->ToggleFree(font, toggleall);
-               bv->update(1);
+               bv->update(text, BufferView::SELECT|BufferView::FITCUR);
+               text->ToggleFree(bv, font, toggleall);
+               bv->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 
                if (font.language() != ignore_language ||
-                   font.latex() != LyXFont::IGNORE) {
-                       LyXText * text = bv->text;
+                   font.latex() != LyXFont::IGNORE ||
+                   font.number() != LyXFont::IGNORE)
+               {
                        LyXCursor & cursor = text->cursor;
-                       text->ComputeBidiTables(cursor.row);
-                       if (cursor.boundary != 
-                           text->IsBoundary(cursor.par, cursor.pos,
+                       text->ComputeBidiTables(bv->buffer(), cursor.row());
+                       if (cursor.boundary() != 
+                           text->IsBoundary(bv->buffer(), cursor.par(), cursor.pos(),
                                             text->real_current_font) )
-                               text->SetCursor(cursor.par, cursor.pos,
-                                               false, !cursor.boundary);
+                               text->SetCursor(bv, cursor.par(), cursor.pos(),
+                                               false, !cursor.boundary());
                }
        }
 }