]> git.lyx.org Git - features.git/commitdiff
layout as layout
authorLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 24 Jun 2002 20:28:12 +0000 (20:28 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 24 Jun 2002 20:28:12 +0000 (20:28 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@4471 a592a061-630c-0410-9148-cb99ea01b6c8

68 files changed:
po/POTFILES.in
src/BufferView2.C
src/BufferView_pimpl.C
src/ChangeLog
src/CutAndPaste.C
src/LaTeXFeatures.C
src/buffer.C
src/bufferlist.C
src/frontends/ChangeLog
src/frontends/LyXView.C
src/frontends/LyXView.h
src/frontends/WorkArea.h
src/frontends/controllers/ChangeLog
src/frontends/controllers/ControlParagraph.C
src/frontends/screen.C
src/frontends/screen.h
src/frontends/xforms/ChangeLog
src/frontends/xforms/FormAboutlyx.C
src/frontends/xforms/FormAboutlyx.h
src/frontends/xforms/FormBaseDeprecated.h
src/frontends/xforms/FormDocument.C
src/frontends/xforms/FormMathsPanel.C
src/frontends/xforms/FormParagraph.C
src/frontends/xforms/FormPreferences.C
src/frontends/xforms/FormTabular.C
src/frontends/xforms/Toolbar_pimpl.C
src/frontends/xforms/XWorkArea.C
src/frontends/xforms/XWorkArea.h
src/frontends/xforms/guiapi.C
src/frontends/xforms/xscreen.C
src/frontends/xforms/xscreen.h
src/insets/ChangeLog
src/insets/inset.C
src/insets/inset.h
src/insets/insetcollapsable.C
src/insets/insetert.C
src/insets/insetfoot.C
src/insets/insetgraphics.C
src/insets/insetgraphicsParams.h
src/insets/insetinclude.C
src/insets/insetspecialchar.C
src/insets/insettext.C
src/insets/insettext.h
src/lyx_cb.C
src/lyx_main.C
src/lyxfind.C
src/lyxfunc.C
src/lyxlayout.C
src/lyxlayout_ptr_fwd.h [new file with mode: 0644]
src/lyxtextclass.C
src/lyxtextclass.h
src/mathed/button_inset.C
src/mathed/formula.C
src/mathed/formulabase.C
src/mathed/math_cursor.C
src/mathed/math_decorationinset.C
src/mathed/math_parser.C
src/mathed/preview.C
src/mathed/ref_inset.C
src/minibuffer.C
src/paragraph.C
src/paragraph.h
src/paragraph_pimpl.C
src/support/lyxalgo.h
src/tabular.C
src/text.C
src/text2.C
src/undo_funcs.C

index d8fc62fced02b6b9530523c844179113b0018ae4..597c0bf5e0996fa31c152a6ce670bccdb6aee8ec 100644 (file)
@@ -8,7 +8,6 @@ src/converter.C
 src/CutAndPaste.C
 src/debug.C
 src/exporter.C
-src/ext_l10n.h
 src/FloatList.C
 src/frontends/controllers/biblio.C
 src/frontends/controllers/ButtonController.h
@@ -24,7 +23,6 @@ src/frontends/controllers/ControlPreamble.C
 src/frontends/controllers/ControlPrint.C
 src/frontends/controllers/ControlSearch.C
 src/frontends/controllers/ControlSpellchecker.C
-src/frontends/controllers/ControlTexinfo.C
 src/frontends/controllers/ControlThesaurus.C
 src/frontends/controllers/ControlVCLog.C
 src/frontends/controllers/frnt_lang.C
@@ -51,6 +49,7 @@ src/frontends/qt2/QGraphics.C
 src/frontends/qt2/QInclude.C
 src/frontends/qt2/QIndex.C
 src/frontends/qt2/QLog.C
+src/frontends/qt2/QLyXKeySym.C
 src/frontends/qt2/QMinipage.C
 src/frontends/qt2/QParagraph.C
 src/frontends/qt2/QParagraphDialog.C
@@ -73,80 +72,43 @@ src/frontends/xforms/ColorHandler.C
 src/frontends/xforms/combox.C
 src/frontends/xforms/FeedbackController.C
 src/frontends/xforms/FileDialog.C
-src/frontends/xforms/form_aboutlyx.C
 src/frontends/xforms/FormAboutlyx.C
-src/frontends/xforms/form_bibitem.C
 src/frontends/xforms/FormBibitem.C
-src/frontends/xforms/form_bibtex.C
 src/frontends/xforms/FormBibtex.C
-src/frontends/xforms/form_browser.C
-src/frontends/xforms/form_character.C
 src/frontends/xforms/FormCharacter.C
-src/frontends/xforms/form_citation.C
 src/frontends/xforms/FormCitation.C
-src/frontends/xforms/form_document.C
 src/frontends/xforms/FormDocument.C
-src/frontends/xforms/form_error.C
 src/frontends/xforms/FormError.C
-src/frontends/xforms/form_ert.C
 src/frontends/xforms/FormERT.C
-src/frontends/xforms/form_external.C
 src/frontends/xforms/FormExternal.C
-src/frontends/xforms/form_filedialog.C
 src/frontends/xforms/FormFiledialog.C
-src/frontends/xforms/form_float.C
 src/frontends/xforms/FormFloat.C
-src/frontends/xforms/form_forks.C
 src/frontends/xforms/FormForks.C
-src/frontends/xforms/form_graphics.C
 src/frontends/xforms/FormGraphics.C
-src/frontends/xforms/form_include.C
 src/frontends/xforms/FormInclude.C
-src/frontends/xforms/form_index.C
 src/frontends/xforms/FormIndex.C
 src/frontends/xforms/FormLog.C
 src/frontends/xforms/FormMathsBitmap.C
-src/frontends/xforms/form_maths_deco.C
 src/frontends/xforms/FormMathsDeco.C
-src/frontends/xforms/form_maths_delim.C
 src/frontends/xforms/FormMathsDelim.C
-src/frontends/xforms/form_maths_matrix.C
 src/frontends/xforms/FormMathsMatrix.C
-src/frontends/xforms/form_maths_panel.C
 src/frontends/xforms/FormMathsPanel.C
-src/frontends/xforms/form_maths_space.C
 src/frontends/xforms/FormMathsSpace.C
-src/frontends/xforms/form_maths_style.C
 src/frontends/xforms/FormMathsStyle.C
-src/frontends/xforms/form_minipage.C
 src/frontends/xforms/FormMinipage.C
-src/frontends/xforms/form_paragraph.C
 src/frontends/xforms/FormParagraph.C
-src/frontends/xforms/form_preamble.C
 src/frontends/xforms/FormPreamble.C
-src/frontends/xforms/form_preferences.C
 src/frontends/xforms/FormPreferences.C
-src/frontends/xforms/form_print.C
 src/frontends/xforms/FormPrint.C
-src/frontends/xforms/form_ref.C
 src/frontends/xforms/FormRef.C
-src/frontends/xforms/form_search.C
 src/frontends/xforms/FormSearch.C
-src/frontends/xforms/form_sendto.C
 src/frontends/xforms/FormSendto.C
-src/frontends/xforms/form_spellchecker.C
 src/frontends/xforms/FormSpellchecker.C
-src/frontends/xforms/form_tabular.C
 src/frontends/xforms/FormTabular.C
-src/frontends/xforms/form_tabular_create.C
 src/frontends/xforms/FormTabularCreate.C
-src/frontends/xforms/form_texinfo.C
 src/frontends/xforms/FormTexinfo.C
-src/frontends/xforms/form_thesaurus.C
 src/frontends/xforms/FormThesaurus.C
-src/frontends/xforms/form_toc.C
 src/frontends/xforms/FormToc.C
-src/frontends/xforms/form_url.C
 src/frontends/xforms/FormUrl.C
 src/frontends/xforms/FormVCLog.C
 src/frontends/xforms/input_validators.C
@@ -196,6 +158,7 @@ src/mathed/formulabase.C
 src/mathed/formula.C
 src/mathed/formulamacro.C
 src/mathed/math_cursor.C
+src/mathed/ref_inset.C
 src/MenuBackend.C
 src/minibuffer.C
 src/paragraph.C
index 7638b0435eb4b0ab0aa74b11671c86242c66e20a..5624b2b324c762619b9cea3f04e736728c86067a 100644 (file)
@@ -611,7 +611,7 @@ int BufferView::unlockInset(UpdatableInset * inset)
                inset->insetUnlock(this);
                theLockingInset(0);
                // make sure we update the combo !
-               owner()->setLayout(getLyXText()->cursor.par()->layout());
+               owner()->setLayout(getLyXText()->cursor.par()->layout()->name());
                // Tell the paragraph dialog that we changed paragraph
                owner()->getDialogs()->updateParagraph();
                finishUndo();
index db224b62ab1635459e069fdb2321ccd045baf7ae..261d8b3fcf44414cc03032458e8f913dd9fc0604 100644 (file)
@@ -130,7 +130,7 @@ BufferView::Pimpl::Pimpl(BufferView * b, LyXView * o,
 {
        workarea_.reset(WorkAreaFactory::create(xpos, ypos, width, height));
        screen_.reset(LyXScreenFactory::create(workarea()));
+
        // Setup the signals
        workarea().scrollDocView.connect(boost::bind(&BufferView::Pimpl::scrollDocView, this, _1));
        workarea().workAreaResize
@@ -163,7 +163,7 @@ WorkArea & BufferView::Pimpl::workarea() const
        return *workarea_.get();
 }
 
+
 LyXScreen & BufferView::Pimpl::screen() const
 {
        return *screen_.get();
@@ -207,7 +207,7 @@ void BufferView::Pimpl::buffer(Buffer * b)
        if (buffer_) {
                lyxerr[Debug::INFO] << "Buffer addr: " << buffer_ << endl;
                buffer_->addUser(bv_);
+
                // If we don't have a text object for this, we make one
                if (bv_->text == 0) {
                        resizeCurrentBuffer();
@@ -215,7 +215,7 @@ void BufferView::Pimpl::buffer(Buffer * b)
 
                // FIXME: needed when ?
                bv_->text->first_y = screen().topCursorVisible(bv_->text->cursor, bv_->text->first_y);
+
                // Similarly, buffer-dependent dialogs should be updated or
                // hidden. This should go here because some dialogs (eg ToC)
                // require bv_->text.
@@ -231,7 +231,7 @@ void BufferView::Pimpl::buffer(Buffer * b)
                        textcache.show(lyxerr, "buffer delete all");
                textcache.clear();
        }
+
        repaint();
        updateScrollbar();
        owner_->updateMenubar();
@@ -372,7 +372,7 @@ void BufferView::Pimpl::updateScrollbar()
        }
 
        LyXText const & t = *bv_->text;
+
        workarea().setScrollbarParams(t.height, t.first_y, t.defaultHeight());
 }
 
@@ -408,10 +408,10 @@ int BufferView::Pimpl::scroll(long time)
                return 0;
 
        LyXText const * t = bv_->text;
-       double const diff = t->defaultHeight() 
+
+       double const diff = t->defaultHeight()
                + double(time) * double(time) * 0.125;
+
        scrollDocView(int(diff));
        workarea().setScrollbarParams(t->height, t->first_y, t->defaultHeight());
        return 0;
@@ -896,7 +896,7 @@ void BufferView::Pimpl::workAreaResize()
        // update from work area
        work_area_width = workarea().workWidth();
        work_area_height = workarea().workHeight();
+
        if (buffer_ != 0) {
                if (widthChange) {
                        // The visible LyXView need a resize
@@ -911,7 +911,7 @@ void BufferView::Pimpl::workAreaResize()
                        if (lyxerr.debugging())
                                textcache.show(lyxerr, "Expose delete all");
                        textcache.clear();
-                       // FIXME: this is aalready done in resizeCurrentBuffer() ?? 
+                       // FIXME: this is aalready done in resizeCurrentBuffer() ??
                        buffer_->resizeInsets(bv_);
                } else if (heightChange) {
                        // fitCursor() ensures we don't jump back
@@ -924,7 +924,7 @@ void BufferView::Pimpl::workAreaResize()
        if (widthChange || heightChange) {
                repaint();
        }
+
        // always make sure that the scrollbar is sane.
        updateScrollbar();
        owner_->updateLayoutChoice();
@@ -1360,7 +1360,7 @@ void BufferView::Pimpl::moveCursorUpdate(bool selecting, bool fitcur)
 
        if (!lt->selection.set())
                workarea().haveSelection(false);
-       
+
        /* ---> Everytime the cursor is moved, show the current font state. */
        // should this too me moved out of this func?
        //owner->showState();
@@ -1614,7 +1614,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
 
                // If the entry is obsolete, use the new one instead.
                if (hasLayout) {
-                       string const & obs = tclass[layout].obsoleted_by();
+                       string const & obs = tclass[layout]->obsoleted_by();
                        if (!obs.empty())
                                layout = obs;
                }
@@ -1634,7 +1634,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
                        Paragraph * spar = lt->selection.start.par();
                        Paragraph * epar = lt->selection.end.par()->next();
                        while(spar != epar) {
-                               if (spar->layout() != current_layout) {
+                               if (spar->layout()->name() != current_layout) {
                                        change_layout = true;
                                        break;
                                }
@@ -2292,10 +2292,9 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
        case LFUN_PROTECTEDSPACE:
        {
                LyXText * lt = bv_->getLyXText();
+               LyXLayout_ptr const & style = lt->cursor.par()->layout();
 
-               LyXLayout const & style = tclass[lt->cursor.par()->layout()];
-
-               if (style.free_spacing) {
+               if (style->free_spacing) {
                        lt->insertChar(bv_, ' ');
                        update(lt,
                               BufferView::SELECT
@@ -2983,7 +2982,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
                }
 
                InsetIndex * inset = new InsetIndex(InsetCommandParams("index", entry));
-       
+
                if (!insertInset(inset)) {
                        delete inset;
                } else {
@@ -3217,10 +3216,9 @@ void BufferView::Pimpl::smartQuote()
 
        hideCursor();
 
-       LyXLayout const & style =
-               textclasslist[bv_->buffer()->params.textclass][par->layout()];
+       LyXLayout_ptr const & style = par->layout();
 
-       if (style.pass_thru ||
+       if (style->pass_thru ||
                (!insertInset(new InsetQuotes(c, bv_->buffer()->params))))
                bv_->owner()->getLyXFunc()->dispatch(LFUN_SELFINSERT, "\"");
 }
index 47fb22eb4b2603db84526d0b2902cb1c2e79239c..1b090341ed2f74d3d5315588aa1ac134ea34525e 100644 (file)
@@ -1,3 +1,67 @@
+2002-06-24  Lars Gullik Bjønnes  <larsbj@birdstep.com>
+
+       * text2.C: layout as layout
+
+       * text.C: layout as layout
+
+       * tabular.C (OldFormatRead): layout as layout
+
+       * paragraph_pimpl.C (TeXDeeper): layout as layout
+       (realizeFont): layout as layout
+
+       * paragraph.C (writeFile): layout as layout
+       (validate): layout as layout
+       (getFont): layout as layout
+       (getLabelFont): layout as layout
+       (getLayoutFont): layout as layout
+       (breakParagraph): layout as layout
+       (stripLeadingSpaces): layout as layout
+       (getEndLabel): layout as layout
+       (getMaxDepthAfter): layout as layout
+       (applyLayout): layout as layout
+       (TeXOnePar): layout as layout
+       (simpleTeXOnePar): layout as layout
+       (TeXEnvironment): layout as layout
+       (layout): layout as layout
+       (layout): layout as layout
+
+       * lyxtextclass.C (compare_name): new functor to work with
+       shared_ptr, layout as layout
+       (Read): layout as layout
+       (hasLayout): layout as layout
+       (operator): layout as layout
+       (delete_layout): layout as layout
+       (defaultLayout): layout as layout
+
+       * lyxlayout_ptr_fwd.h: new file
+
+       * lyxlayout.C (Read): layout as layout
+
+       * lyx_cb.C (MenuInsertLabel): layout as layout
+
+       * bufferlist.C (newFile): layout as layout
+
+       * buffer.C (readLyXformat2): layout as layout
+       (parseSingleLyXformat2Token): layout as layout
+       (insertStringAsLines): layout as layout
+       (asciiParagraph): layout as layout
+       (latexParagraphs): layout as layout
+       (makeLinuxDocFile): layout as layout
+       (simpleLinuxDocOnePar): layout as layout
+       (makeDocBookFile): layout as layout
+       (simpleDocBookOnePar): layout as layout
+       (getLists): layout as layout
+
+       * LaTeXFeatures.C (getTClassPreamble): layout as layout
+
+       * CutAndPaste.C (cutSelection): layout as layout
+       (pasteSelection): layout as layout
+       (SwitchLayoutsBetweenClasses): layout as layout
+
+       * BufferView_pimpl.C (Dispatch): layout as layout
+       (smartQuote): layout as layout
+
+       * BufferView2.C (unlockInset): layout as layout
 
 2002-06-24  André Pönitz <poenitz@gmx.net>
 
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * lyxrc.h:
-       * lyxrc.C: 
+       * lyxrc.C:
        * lyxfunc.C: remove display_shortcuts, show_banner
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * Buffer_pimpl.C: oops, update on resize
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
-       * buffer.C: 
-       * converter.C: 
+       * buffer.C:
+       * converter.C:
        * exporter.C:
-       * lyxfunc.C: 
+       * lyxfunc.C:
        * BufferView.h:
        * BufferView.C: use repaint()
 
        * BufferView_pimpl.C: s/updateScreen()/repaint()/
          as it's a clearer description. Remove superfluous
          redraws.
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * text.C: fix bug 488. Not ideal, but getting
          getWord() to work properly for the insets that
          matter is more difficult ...
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * BufferView_pimpl.C:
        * BufferView_pimpl.h:
        * BufferView_pimpl.C: clean up resize() stuff,
          and unnecessary updateScreen()s
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * BufferView.h:
        * BufferView_pimpl.h:
        * BufferView_pimpl.C:
        * lyxfind.h:
-       * lyxfind.C: 
+       * lyxfind.C:
        * minibuffer.C: remove focus management of workarea,
          not needed. Use screen's greyOut()
+
 2002-06-17  Herbert Voss  <voss@lyx.org>
-       * converter.C: (convert) do not post a message, when converting
-       fails, let the calling function decide what to do in this case
+
+       * converter.C: (convert) do not post a message, when converting
+       fails, let the calling function decide what to do in this case
+
 2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
 
        * lyxfunc.C: tidy up a little
+
 2002-06-16    <alstrup@diku.dk>
 
        * BufferView_pimpl.C (Pimpl): Use WorkAreaFactory.
 
 2002-06-15  Lyx Development team  <larsbj@birdstep.com>
 
-       * lyxfunc.[Ch]: Use LyXKeySym instead of KeySym, 
+       * lyxfunc.[Ch]: Use LyXKeySym instead of KeySym,
        so it's X11 independent.
 
        * kb*.[Ch]: ditto.
        * BufferView_pimpl.h:
        * BufferView_pimpl.C: move bogus scrolling logic
          to xforms
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * lyxfunc.C:
        * BufferView_pimpl.C: view->resize() change
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * BufferView_pimpl.C: topCursorVisible
          prototype change
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * Makefile.am:
        * lyx_gui.h:
        * lyx_gui.C: move to frontends/
+
        * main.C:
        * lyx_main.h:
        * lyx_main.C: changes from above
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * intl.C:
        * kbsequence.C:
        * lyx_cb.C:
        * lyx_main.C: minor tidy
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * BufferView_pimpl.h:
        * BufferView.h:
        * BufferView.C: make painter() const,
          remove dead code
+
        * BufferView2.C: use screen() accessor
+
        * lyx_main.h:
        * lyx_main.C: some minor cleanup
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * BufferView_pimpl.h:
        * BufferView_pimpl.C: remove enter/leaveView,
          use workHeight()
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * BufferView.h:
          rename
 
        * lyxrc.C: remove pointless comment
+
 2002-06-11  John Levon  <moz@compsoc.man.ac.uk>
 
-       * BufferView.h: 
+       * BufferView.h:
        * BufferView.C: remove active() and belowMouse()
 
        * BufferView_pimpl.h:
 2002-06-11  John Levon  <moz@compsoc.man.ac.uk>
 
        * lyx_gui.C: add debug message on BadWindow
+
 2002-06-10  Lars Gullik Bjønnes  <larsbj@birdstep.com>
 
        * sp_spell.C: fdopen is not part of the C++ standard.
index b7727b40406afd6785089fe6c7d001adc0b084f5..9d72add1a89a2246fed8b2e8d421069657c70351 100644 (file)
@@ -137,12 +137,12 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
                if (realcut) {
                        buf->params().clear();
                        buf->bibkey = 0;
-                       buf->layout(textclasslist[current_view->buffer()->params.textclass].defaultLayoutName());
+                       buf->layout(textclasslist[current_view->buffer()->params.textclass].defaultLayout());
                }
 
                // paste the paragraphs again, if possible
                if (doclear)
-                       startpar->next()->stripLeadingSpaces(textclass);
+                       startpar->next()->stripLeadingSpaces();
                if (startpar->hasSameLayout(startpar->next()) ||
                    !startpar->next()->size()) {
                        startpar->pasteParagraph(current_view->buffer()->params);
@@ -288,7 +288,7 @@ bool CutAndPaste::pasteSelection(Paragraph ** par, Paragraph ** endpar,
                SwitchLayoutsBetweenClasses(textclass, tc, tmpbuf,
                                            current_view->buffer()->params);
 
-               Paragraph::depth_type max_depth = (*par)->getMaxDepthAfter(current_view->buffer());
+               Paragraph::depth_type max_depth = (*par)->getMaxDepthAfter();
 
                while(tmpbuf) {
                        // if we have a negative jump so that the depth would go below
@@ -304,7 +304,7 @@ bool CutAndPaste::pasteSelection(Paragraph ** par, Paragraph ** endpar,
                        // only set this from the 2nd on as the 2nd depends for maxDepth
                        // still on *par
                        if (tmpbuf->previous() != (*par))
-                               max_depth = tmpbuf->getMaxDepthAfter(current_view->buffer());
+                               max_depth = tmpbuf->getMaxDepthAfter();
                        // set the inset owner of this paragraph
                        tmpbuf->setInsetOwner((*par)->inInset());
                        for(pos_type i = 0; i < tmpbuf->size(); ++i) {
@@ -374,7 +374,7 @@ bool CutAndPaste::pasteSelection(Paragraph ** par, Paragraph ** endpar,
                                lastbuffer->makeSameLayout(lastbuffer->next());
                                lastbuffer->pasteParagraph(current_view->buffer()->params);
                        } else
-                               lastbuffer->next()->stripLeadingSpaces(tc);
+                               lastbuffer->next()->stripLeadingSpaces();
                }
                // restore the simple cut buffer
                buf = simple_cut_clone;
@@ -413,17 +413,17 @@ int CutAndPaste::SwitchLayoutsBetweenClasses(textclass_type c1,
        ParIterator end = ParIterator();
        for (ParIterator it = ParIterator(par); it != end; ++it) {
                par = *it;
-               string const name = par->layout();
+               string const name = par->layout()->name();
                bool hasLayout = tclass2.hasLayout(name);
 
                if (!hasLayout)
-                       par->layout(tclass2.defaultLayoutName());
+                       par->layout(tclass2.defaultLayout());
 
                if (!hasLayout && name != tclass1.defaultLayoutName()) {
                        ++ret;
                        string const s = _("Layout had to be changed from\n")
                                + name + _(" to ")
-                               + par->layout()
+                               + par->layout()->name()
                                + _("\nbecause of class conversion from\n")
                                + textclasslist[c1].name() + _(" to ")
                                + textclasslist[c2].name();
index 40365029b5004b7dd417593a818582ac7057362e..2010eca80c4a3d2d0f84a1234f51327b30411570 100644 (file)
@@ -341,7 +341,7 @@ string const LaTeXFeatures::getTClassPreamble() const
        set<string>::const_iterator cit = layout.begin();
        set<string>::const_iterator end = layout.end();
        for (; cit != end; ++cit) {
-               tcpreamble << tclass[*cit].preamble();
+               tcpreamble << tclass[*cit]->preamble();
        }
 
        return tcpreamble.str().c_str();
index 2c9812fae48b48b1b27f7755e97217d277a2d159..70aaad0b9584927f70782934654c3220c0fdb582 100644 (file)
@@ -341,7 +341,7 @@ bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
 
        if (!par) {
                par = new Paragraph;
-               par->layout(textclasslist[params.textclass].defaultLayoutName());
+               par->layout(textclasslist[params.textclass].defaultLayout());
        } else {
                // We are inserting into an existing document
                users->text->breakParagraph(users);
@@ -621,15 +621,14 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                                first_par = par;
                        else {
                                par = new Paragraph(par);
-                               par->layout(textclasslist[params.textclass].defaultLayoutName());
+                               par->layout(textclasslist[params.textclass].defaultLayout());
                        }
                        pos = 0;
-                       par->layout(layoutname);
+                       par->layout(textclasslist[params.textclass][layoutname]);
                        // Test whether the layout is obsolete.
-                       LyXLayout const & layout =
-                               textclasslist[params.textclass][par->layout()];
-                       if (!layout.obsoleted_by().empty())
-                               par->layout(layout.obsoleted_by());
+                       LyXLayout_ptr const & layout = par->layout();
+                       if (!layout->obsoleted_by().empty())
+                               par->layout(textclasslist[params.textclass][layout->obsoleted_by()]);
                        par->params().depth(depth);
 #ifndef NO_COMPABILITY
                } else {
@@ -637,10 +636,10 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                        // the code then of NO_COMPATIBILITY
                        par->layout(layoutname);
                        // Test whether the layout is obsolete.
-                       LyXLayout const & layout =
+                       LyXLayout_ptr const & layout =
                                textclasslist[params.textclass][par->layout()];
-                       if (!layout.obsoleted_by().empty())
-                               par->layout(layout.obsoleted_by());
+                       if (!layout->obsoleted_by().empty())
+                               par->layout(layout->obsoleted_by());
                        par->params().depth(depth);
                }
 #endif
@@ -734,11 +733,10 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                lex.next();
                font.setLyXColor(lex.getString());
        } else if (token == "\\SpecialChar") {
-               LyXLayout const & layout =
-                       textclasslist[params.textclass][par->layout()];
+               LyXLayout_ptr const & layout = par->layout();
 
                // Insets don't make sense in a free-spacing context! ---Kayvan
-               if (layout.free_spacing || par->isFreeSpacing()) {
+               if (layout->free_spacing || par->isFreeSpacing()) {
                        if (lex.isOK()) {
                                lex.next();
                                string next_token = lex.getString();
@@ -1195,7 +1193,7 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                // only add the length when value > 0 or
                // with option keep
                if ((value.length().len().value() != 0) ||
-                   value.keep() ||
+                  value.keep() ||
                    (value.kind() != VSpace::LENGTH))
                        par->params().spaceBottom(value);
 #ifndef NO_COMPABILITY
@@ -1256,10 +1254,9 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                // This is a backward compability thingie. (Lgb)
                // Remove it later some time...introduced with fileformat
                // 2.16. (Lgb)
-               LyXLayout const & layout =
-                       textclasslist[params.textclass][par->layout()];
+               LyXLayout_ptr const & layout = par->layout();
 
-               if (layout.free_spacing || par->isFreeSpacing()) {
+               if (layout->free_spacing || par->isFreeSpacing()) {
                        par->insertChar(pos, ' ', font);
                } else {
                        Inset * inset = new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
@@ -1500,8 +1497,8 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
 void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
                                 LyXFont const & fn,string const & str) const
 {
-       LyXLayout const & layout =
-               textclasslist[params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
+
        LyXFont font = fn;
 
        par->checkInsertChar(font);
@@ -1512,9 +1509,9 @@ void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
        for(string::const_iterator cit = str.begin();
            cit != str.end(); ++cit) {
                if (*cit == '\n') {
-                       if (autobreakrows && (par->size() || layout.keepempty)) {
+                       if (autobreakrows && (par->size() || layout->keepempty)) {
                                par->breakParagraph(params, pos,
-                                                   layout.isEnvironment());
+                                                   layout->isEnvironment());
                                par = par->next();
                                pos = 0;
                                space_inserted = true;
@@ -1523,12 +1520,12 @@ void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
                        }
                        // do not insert consecutive spaces if !free_spacing
                } else if ((*cit == ' ' || *cit == '\t') &&
-                          space_inserted && !layout.free_spacing &&
+                          space_inserted && !layout->free_spacing &&
                                   !par->isFreeSpacing())
                {
                        continue;
                } else if (*cit == '\t') {
-                       if (!layout.free_spacing && !par->isFreeSpacing()) {
+                       if (!layout->free_spacing && !par->isFreeSpacing()) {
                                // tabs are like spaces here
                                par->insertChar(pos, ' ', font);
                                ++pos;
@@ -1952,7 +1949,7 @@ string const Buffer::asciiParagraph(Paragraph const * par,
 #endif
 
        // First write the layout
-       string const & tmp = par->layout();
+       string const & tmp = par->layout()->name();
        if (compare_no_case(tmp, "itemize") == 0) {
                ltype = 1;
                ltype_depth = depth + 1;
@@ -2680,10 +2677,9 @@ void Buffer::latexParagraphs(ostream & ofs, Paragraph * par,
                // any special options in the paragraph and also we don't allow
                // any environment other then "Standard" to be valid!
                if ((in == 0) || !in->forceDefaultParagraphs(in)) {
-                       LyXLayout const & layout =
-                               textclasslist[params.textclass][par->layout()];
+                       LyXLayout_ptr const & layout = par->layout();
 
-                       if (layout.intitle) {
+                       if (layout->intitle) {
                                if (already_title) {
                                        lyxerr <<"Error in latexParagraphs: You"
                                                " should not mix title layouts"
@@ -2697,7 +2693,7 @@ void Buffer::latexParagraphs(ostream & ofs, Paragraph * par,
                                was_title = false;
                        }
 
-                       if (layout.isEnvironment() ||
+                       if (layout->isEnvironment() ||
                                !par->params().leftIndent().zero())
                        {
                                par = par->TeXEnvironment(this, params, ofs, texrow);
@@ -2755,7 +2751,7 @@ int Buffer::sgmlOpenTag(ostream & os, Paragraph::depth_type depth, bool mixcont,
        if (!latexname.empty() && latexname != "!-- --") {
                if (!mixcont)
                        os << string(" ",depth);
-               os << "<" << latexname << ">";
+               os << "<" << latexname << ">";
        }
 
        if (!mixcont)
@@ -2836,8 +2832,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
        vector<string> environment_stack(5);
 
        while (par) {
-               LyXLayout const & style = tclass[par->layout()];
-
+               LyXLayout_ptr const & style = par->layout();
                // treat <toc> as a special case for compatibility with old code
                if (par->isInset(0)) {
                        Inset * inset = par->getInset(0);
@@ -2858,7 +2853,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                }
 
                // write opening SGML tags
-               switch (style.latextype) {
+               switch (style->latextype) {
                case LATEX_PARAGRAPH:
                        if (depth == par->params().depth()
                           && !environment_stack[depth].empty()) {
@@ -2869,7 +2864,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                                else
                                        ofs << "</p>";
                        }
-                       sgmlOpenTag(ofs, depth, false, style.latexname());
+                       sgmlOpenTag(ofs, depth, false, style->latexname());
                        break;
 
                case LATEX_COMMAND:
@@ -2884,45 +2879,51 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                        }
 
                        environment_stack[depth].erase();
-                       sgmlOpenTag(ofs, depth, false, style.latexname());
+                       sgmlOpenTag(ofs, depth, false, style->latexname());
                        break;
 
                case LATEX_ENVIRONMENT:
                case LATEX_ITEM_ENVIRONMENT:
+               {
+                       string const & latexname = style->latexname();
+
                        if (depth == par->params().depth()
-                           && environment_stack[depth] != style.latexname()) {
-                               sgmlCloseTag(ofs, depth, false, environment_stack[depth]);
+                           && environment_stack[depth] != latexname) {
+                               sgmlCloseTag(ofs, depth, false,
+                                            environment_stack[depth]);
                                environment_stack[depth].erase();
                        }
                        if (depth < par->params().depth()) {
                               depth = par->params().depth();
                               environment_stack[depth].erase();
                        }
-                       if (environment_stack[depth] != style.latexname()) {
+                       if (environment_stack[depth] != latexname) {
                                if (depth == 0) {
                                        sgmlOpenTag(ofs, depth, false, "p");
                                }
-                               sgmlOpenTag(ofs, depth, false, style.latexname());
+                               sgmlOpenTag(ofs, depth, false, latexname);
 
                                if (environment_stack.size() == depth + 1)
                                        environment_stack.push_back("!-- --");
-                               environment_stack[depth] = style.latexname();
+                               environment_stack[depth] = latexname;
                        }
 
-                       if (style.latexparam() == "CDATA")
+                       if (style->latexparam() == "CDATA")
                                ofs << "<![CDATA[";
 
-                       if (style.latextype == LATEX_ENVIRONMENT) break;
+                       if (style->latextype == LATEX_ENVIRONMENT) break;
 
-                       if (style.labeltype == LABEL_MANUAL)
+                       if (style->labeltype == LABEL_MANUAL)
                                item_name = "tag";
                        else
                                item_name = "item";
 
                        sgmlOpenTag(ofs, depth + 1, false, item_name);
-                       break;
+               }
+               break;
+
                default:
-                       sgmlOpenTag(ofs, depth, false, style.latexname());
+                       sgmlOpenTag(ofs, depth, false, style->latexname());
                        break;
                }
 
@@ -2932,22 +2933,22 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
 
                ofs << "\n";
                // write closing SGML tags
-               switch (style.latextype) {
+               switch (style->latextype) {
                case LATEX_COMMAND:
                        break;
                case LATEX_ENVIRONMENT:
                case LATEX_ITEM_ENVIRONMENT:
-                       if (style.latexparam() == "CDATA")
+                       if (style->latexparam() == "CDATA")
                                ofs << "]]>";
                        break;
                default:
-                       sgmlCloseTag(ofs, depth, false, style.latexname());
+                       sgmlCloseTag(ofs, depth, false, style->latexname());
                        break;
                }
        }
 
        // Close open tags
-       for (int i=depth; i >= 0; --i)
+       for (int i = depth; i >= 0; --i)
                sgmlCloseTag(ofs, depth, false, environment_stack[i]);
 
        if (!body_only) {
@@ -3023,18 +3024,18 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
        Paragraph * par,
        Paragraph::depth_type /*depth*/)
 {
-       LyXLayout const & style =
-               textclasslist[params.textclass][par->layout()];
+       LyXLayout_ptr const & style = par->layout();
+
        string::size_type char_line_count = 5;     // Heuristic choice ;-)
 
        // gets paragraph main font
        LyXFont font_old;
        bool desc_on;
-       if (style.labeltype == LABEL_MANUAL) {
-               font_old = style.labelfont;
+       if (style->labeltype == LABEL_MANUAL) {
+               font_old = style->labelfont;
                desc_on = true;
        } else {
-               font_old = style.font;
+               font_old = style->font;
                desc_on = false;
        }
 
@@ -3168,7 +3169,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
                        continue;
                }
 
-               if (style.latexparam() == "CDATA") {
+               if (style->latexparam() == "CDATA") {
                        // "TeX"-Mode on == > SGML-Mode on.
                        if (c != '\0')
                                os << c;
@@ -3176,7 +3177,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
                } else {
                        string sgml_string;
                        if (par->sgmlConvertChar(c, sgml_string)
-                           && !style.free_spacing && !par->isFreeSpacing())
+                           && !style->free_spacing && !par->isFreeSpacing())
                        {
                                // in freespacing mode, spaces are
                                // non-breaking characters
@@ -3302,7 +3303,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                string c_params;
                int desc_on = 0; // description mode
 
-               LyXLayout const & style = tclass[par->layout()];
+               LyXLayout_ptr const & style = par->layout();
 
                // environment tag closing
                for (; depth > par->params().depth(); --depth) {
@@ -3318,7 +3319,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                }
 
                if (depth == par->params().depth()
-                  && environment_stack[depth] != style.latexname()
+                  && environment_stack[depth] != style->latexname()
                   && !environment_stack[depth].empty()) {
                        if (environment_inner[depth] != "!-- --") {
                                item_name= "listitem";
@@ -3334,9 +3335,10 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                }
 
                // Write opening SGML tags.
-               switch (style.latextype) {
+               switch (style->latextype) {
                case LATEX_PARAGRAPH:
-                       sgmlOpenTag(ofs, depth + command_depth, false, style.latexname());
+                       sgmlOpenTag(ofs, depth + command_depth,
+                                   false, style->latexname());
                        break;
 
                case LATEX_COMMAND:
@@ -3345,9 +3347,9 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                          _("Error : Wrong depth for "
                                            "LatexType Command.\n"));
 
-                       command_name = style.latexname();
+                       command_name = style->latexname();
 
-                       sgmlparam = style.latexparam();
+                       sgmlparam = style->latexparam();
                        c_params = split(sgmlparam, c_depth,'|');
 
                        cmd_depth = lyx::atoi(c_depth);
@@ -3405,12 +3407,12 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                environment_stack[depth].erase();
                        }
 
-                       if (environment_stack[depth] != style.latexname()) {
+                       if (environment_stack[depth] != style->latexname()) {
                                if (environment_stack.size() == depth + 1) {
                                        environment_stack.push_back("!-- --");
                                        environment_inner.push_back("!-- --");
                                }
-                               environment_stack[depth] = style.latexname();
+                               environment_stack[depth] = style->latexname();
                                environment_inner[depth] = "!-- --";
                                sgmlOpenTag(ofs, depth + command_depth, false, environment_stack[depth]);
                        } else {
@@ -3422,45 +3424,50 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                }
                        }
 
-                       if (style.latextype == LATEX_ENVIRONMENT) {
-                               if (!style.latexparam().empty()) {
-                                       if (style.latexparam() == "CDATA")
+                       if (style->latextype == LATEX_ENVIRONMENT) {
+                               if (!style->latexparam().empty()) {
+                                       if (style->latexparam() == "CDATA")
                                                ofs << "<![CDATA[";
                                        else
-                                               sgmlOpenTag(ofs, depth + command_depth, false, style.latexparam());
+                                               sgmlOpenTag(ofs, depth + command_depth, false, style->latexparam());
                                }
                                break;
                        }
 
-                       desc_on = (style.labeltype == LABEL_MANUAL);
+                       desc_on = (style->labeltype == LABEL_MANUAL);
 
-                       environment_inner[depth] = desc_on?"varlistentry": "listitem";
-                       sgmlOpenTag(ofs, depth + 1 + command_depth, false, environment_inner[depth]);
+                       environment_inner[depth] = desc_on ? "varlistentry" : "listitem";
+                       sgmlOpenTag(ofs, depth + 1 + command_depth,
+                                   false, environment_inner[depth]);
 
-                       item_name = desc_on? "term": "para";
-                       sgmlOpenTag(ofs, depth + 1 + command_depth, false, item_name);
+                       item_name = desc_on ? "term" : "para";
+                       sgmlOpenTag(ofs, depth + 1 + command_depth,
+                                   false, item_name);
                        break;
                default:
-                       sgmlOpenTag(ofs, depth + command_depth, false, style.latexname());
+                       sgmlOpenTag(ofs, depth + command_depth,
+                                   false, style->latexname());
                        break;
                }
 
-               simpleDocBookOnePar(ofs, par, desc_on, depth+1+command_depth);
+               simpleDocBookOnePar(ofs, par, desc_on,
+                                   depth + 1 + command_depth);
                par = par->next();
 
                string end_tag;
                // write closing SGML tags
-               switch (style.latextype) {
+               switch (style->latextype) {
                case LATEX_COMMAND:
-                       end_tag = c_params.empty()?"title":c_params;
-                       sgmlCloseTag(ofs, depth + command_depth, false, end_tag);
+                       end_tag = c_params.empty() ? "title" : c_params;
+                       sgmlCloseTag(ofs, depth + command_depth,
+                                    false, end_tag);
                        break;
                case LATEX_ENVIRONMENT:
-                       if (!style.latexparam().empty()) {
-                               if (style.latexparam() == "CDATA")
+                       if (!style->latexparam().empty()) {
+                               if (style->latexparam() == "CDATA")
                                        ofs << "]]>";
                                else
-                                       sgmlCloseTag(ofs, depth + command_depth, false, style.latexparam());
+                                       sgmlCloseTag(ofs, depth + command_depth, false, style->latexparam());
                        }
                        break;
                case LATEX_ITEM_ENVIRONMENT:
@@ -3469,10 +3476,10 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                        sgmlCloseTag(ofs, depth + 1 + command_depth, false, end_tag);
                        break;
                case LATEX_PARAGRAPH:
-                       sgmlCloseTag(ofs, depth + command_depth, false, style.latexname());
+                       sgmlCloseTag(ofs, depth + command_depth, false, style->latexname());
                        break;
                default:
-                       sgmlCloseTag(ofs, depth + command_depth, false, style.latexname());
+                       sgmlCloseTag(ofs, depth + command_depth, false, style->latexname());
                        break;
                }
        }
@@ -3514,9 +3521,9 @@ void Buffer::simpleDocBookOnePar(ostream & os,
 {
        bool emph_flag = false;
 
-       LyXLayout const & style = textclasslist[params.textclass][par->layout()];
+       LyXLayout_ptr const & style = par->layout();
 
-       LyXFont font_old = style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
+       LyXFont font_old = (style->labeltype == LABEL_MANUAL ? style->labelfont : style->font);
 
        int char_line_count = depth;
        //if (!style.free_spacing)
@@ -3529,17 +3536,17 @@ void Buffer::simpleDocBookOnePar(ostream & os,
                // handle <emphasis> tag
                if (font_old.emph() != font.emph()) {
                        if (font.emph() == LyXFont::ON) {
-                               if(style.latexparam() == "CDATA")
+                               if (style->latexparam() == "CDATA")
                                        os << "]]>";
                                os << "<emphasis>";
-                               if(style.latexparam() == "CDATA")
+                               if (style->latexparam() == "CDATA")
                                        os << "<![CDATA[";
                                emph_flag = true;
                        } else if (i) {
-                               if(style.latexparam() == "CDATA")
+                               if (style->latexparam() == "CDATA")
                                        os << "]]>";
                                os << "</emphasis>";
-                               if(style.latexparam() == "CDATA")
+                               if (style->latexparam() == "CDATA")
                                        os << "<![CDATA[";
                                emph_flag = false;
                        }
@@ -3549,11 +3556,11 @@ void Buffer::simpleDocBookOnePar(ostream & os,
                if (par->isInset(i)) {
                        Inset * inset = par->getInset(i);
                        // don't print the inset in position 0 if desc_on == 3 (label)
-                       if ( i || desc_on != 3) {
-                               if(style.latexparam() == "CDATA")
+                       if (i || desc_on != 3) {
+                               if (style->latexparam() == "CDATA")
                                        os << "]]>";
                                inset->docbook(this, os, false);
-                               if(style.latexparam() == "CDATA")
+                               if (style->latexparam() == "CDATA")
                                        os << "<![CDATA[";
                        }
                } else {
@@ -3561,9 +3568,9 @@ void Buffer::simpleDocBookOnePar(ostream & os,
                        string sgml_string;
                        par->sgmlConvertChar(c, sgml_string);
 
-                       if (style.pass_thru) {
+                       if (style->pass_thru) {
                                os << c;
-                       } else if (style.free_spacing || par->isFreeSpacing() || c != ' ') {
+                       } else if (style->free_spacing || par->isFreeSpacing() || c != ' ') {
                                        os << sgml_string;
                        } else if (desc_on ==1) {
                                ++char_line_count;
@@ -3577,10 +3584,10 @@ void Buffer::simpleDocBookOnePar(ostream & os,
        }
 
        if (emph_flag) {
-               if(style.latexparam() == "CDATA")
+               if (style->latexparam() == "CDATA")
                        os << "]]>";
                os << "</emphasis>";
-               if(style.latexparam() == "CDATA")
+               if (style->latexparam() == "CDATA")
                        os << "<![CDATA[";
        }
 
@@ -3589,7 +3596,8 @@ void Buffer::simpleDocBookOnePar(ostream & os,
                // <term> not closed...
                os << "</term>\n<listitem><para>&nbsp;</para>";
        }
-       if (style.free_spacing) os << '\n';
+       if (style->free_spacing)
+               os << '\n';
 }
 
 
@@ -3748,7 +3756,8 @@ Buffer::Lists const Buffer::getLists() const
        string const layout("Caption");
 
        while (par) {
-               char const labeltype = textclass[par->layout()].labeltype;
+#warning bogus type (Lgb)
+               char const labeltype = par->layout()->labeltype;
 
                if (labeltype >= LABEL_COUNTER_CHAPTER
                    && labeltype <= LABEL_COUNTER_CHAPTER + params.tocdepth) {
@@ -3780,7 +3789,7 @@ Buffer::Lists const Buffer::getLists() const
                                        // the inset...
                                        Paragraph * tmp = il->inset.paragraph();
                                        while (tmp) {
-                                               if (tmp->layout() == layout) {
+                                               if (tmp->layout()->name() == layout) {
                                                        SingleList & item = l[type];
                                                        string const str =
                                                                tostr(item.size()+1) + ". " + tmp->asString(this, false);
@@ -3894,7 +3903,7 @@ bool Buffer::dispatch(string const & command, bool * result)
 bool Buffer::dispatch(int action, string const & argument, bool * result)
 {
        bool dispatched = true;
+
        switch (action) {
                case LFUN_EXPORT: {
                        bool const tmp = Exporter::Export(this, argument, false);
index fc642d8c1d441fa9539fef25ccb07e10105e2882..1617e1ace31a704c6114ebd9d76387a8c8b88850 100644 (file)
@@ -482,11 +482,11 @@ Buffer * BufferList::newFile(string const & name, string tname, bool isNamed)
                                   MakeDisplayPath(tname));
                        // no template, start with empty buffer
                        b->paragraph = new Paragraph;
-                       b->paragraph->layout(textclasslist[b->params.textclass].defaultLayoutName());
+                       b->paragraph->layout(textclasslist[b->params.textclass].defaultLayout());
                }
        } else {  // start with empty buffer
                b->paragraph = new Paragraph;
-                       b->paragraph->layout(textclasslist[b->params.textclass].defaultLayoutName());
+                       b->paragraph->layout(textclasslist[b->params.textclass].defaultLayout());
        }
 
        if (!lyxrc.new_ask_filename && !isNamed) {
index ac3d6967a01ed6576b0780844ae24f516ab54831..6309406dd71286475f67ee7965cec6f9e2630352 100644 (file)
@@ -1,46 +1,50 @@
+2002-06-24  Lars Gullik Bjønnes  <larsbj@birdstep.com>
+
+       * LyXView.C: layout as layout
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * screen.C: add FIXME
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * WorkArea.h: remove redraw()
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * guiapi.h:
        * Dialogs.h:
        * Dialogs.C: createIndex() doesn't take string
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * WorkArea.h: remove unused resize(..) and change name
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * LyXKeySym.h:
        * LyXKeySym.C: remove un-needed file
+
        * WorkArea.h:
        * WorkArea.C: remove un-needed file. Add back
          comments. Remove focus management, greyOut()
+
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * WorkArea.h: remove focus/unfocus events
+
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * WorkArea.h: remove unused methods
+
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * Toolbar.C: add missing header
+
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * WorkArea.h: remove unused method width()
+
 2002-06-16  Lars Gullik Bjønnes  <larsbj@birdstep.com>
 
        * add a nother layer of inderection for calling gui specific
index 7daffc511a99f172bf533ac4613cceb50f66aa91..d8bc822943717f0a3266aee71f50f4ca3ecbe493 100644 (file)
@@ -68,7 +68,7 @@ void LyXView::init()
 {
        updateLayoutChoice();
        updateMenubar();
-       
+
        // Start autosave timer
        if (lyxrc.autosave) {
                autosave_timeout_->setTimeout(lyxrc.autosave * 1000);
@@ -194,7 +194,7 @@ void LyXView::updateLayoutChoice()
        }
 
        string const & layout =
-               bufferview_->getLyXText()->cursor.par()->layout();
+               bufferview_->getLyXText()->cursor.par()->layout()->name();
 
        if (layout != current_layout) {
                toolbar_->setLayout(layout);
index fcf4187011b4b41d075610309ab2bff8cc2d9814..f9916efbab51318ebb7da11624f20dc094c3071c 100644 (file)
@@ -55,7 +55,7 @@ public:
 
        virtual ~LyXView();
 
-       /** 
+       /**
         * This is called after the concrete view has been created.
         * We have to have the toolbar and the other stuff created
         * before we can populate it with this call.
index 28f3d35ad49b1c74996def583ebc92d8a3de416e..7ecf1aad608c17657a158c26aae4bcd7e87aeebd 100644 (file)
@@ -23,7 +23,7 @@
 #include <utility>
 
 class Painter;
+
 /**
  * The work area class represents the widget that provides the
  * view onto a document. It is owned by the BufferView, and
@@ -37,15 +37,15 @@ public:
        WorkArea() {}
 
        virtual ~WorkArea() {}
+
        /// return the painter object for this work area
        virtual Painter & getPainter() = 0;
+
        /// return the width of the work area in pixels
        virtual int workWidth() const = 0;
        /// return the height of the work area in pixels
        virtual int workHeight() const = 0;
-  
+
        /**
         * Update the scrollbar.
         * @param height the total document height in pixels
@@ -53,7 +53,7 @@ public:
         * @param line_height the line-scroll amount, in pixels
         */
        virtual void setScrollbarParams(int height, int pos, int line_height) = 0;
+
        // FIXME: this is an odd place to have it, but xforms needs it here ...
        /// a selection exists
        virtual void haveSelection(bool) const = 0;
@@ -61,7 +61,7 @@ public:
        virtual string const getClipboard() const = 0;
        /// fill the clipboard
        virtual void putClipboard(string const &) const = 0;
+
        /// work area dimensions have changed
        boost::signal0<void> workAreaResize;
        /// the scrollbar has changed
@@ -83,5 +83,5 @@ public:
        /// emitted when another X client has stolen our selection
        boost::signal0<void> selectionLost;
 };
+
 #endif // WORKAREA_H
index 1d3302853a7a71fa57228ecdd518c2865f9892b4..57e04375b70f5a7cdbfee81d3467b2189573ebeb 100644 (file)
@@ -1,3 +1,7 @@
+2002-06-24  Lars Gullik Bjønnes  <larsbj@birdstep.com>
+
+       * ControlParagraph.C: layout as layout
+
 2002-06-21  Angus Leeming  <leeming@lyx.org>
 
        * tex_helpers.C: Use <vector> not <vector.h>. Reorder header files.
@@ -7,7 +11,7 @@
 
        * ControlBibtex.C:
        * ControlBibitem.C: use repaint()
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * ControlTexinfo.C: do the same for Texinfo
        * tex_helpers.C: don't try to read a file that isn't there
 
 2002-06-21  Herbert Voss  <voss@perce.de>
-       * ControlBibtex.C: do an automatic update, when no bst-list
-       exists
+
+       * ControlBibtex.C: do an automatic update, when no bst-list
+       exists
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * GUI.h: createIndex() changed
+
 2002-06-18  Herbert Voss  <voss@perce.de>
 
        * tex_helpers.[Ch]: move functions from ControlTexinfo into this
@@ -31,7 +35,7 @@
 2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
 
        * ControlGraphics.C: just make the mask *.*
+
 2002-06-16  Lars Gullik Bjønnes  <larsbj@birdstep.com>
 
        * changes to simplify function setup, removal of a lot of includes.
index 0438e044b090e8fd9004b4b5408d24c6860c1866..1f6ed41ed9489530e38db348c9a457e34a6df45b 100644 (file)
@@ -22,7 +22,6 @@
 #include "gettext.h"
 #include "buffer.h"
 #include "lyxtext.h"
-#include "lyxtextclasslist.h"
 #include "support/LAssert.h"
 
 using Liason::setMinibuffer;
@@ -103,13 +102,12 @@ void ControlParagraph::setParams()
        pp_->labelWidthString(par_->getLabelWidthString());
 
        /// alignment
-       LyXTextClass const & tclass =
-               textclasslist[lv_.view()->buffer()->params.textclass];
+       LyXLayout_ptr const & layout = par_->layout();
        if (pp_->align() == LYX_ALIGN_LAYOUT)
-               pp_->align(tclass[par_->layout()].align);
+               pp_->align(layout->align);
 
        /// is alignment possible
-       alignpos_ = tclass[par_->layout()].alignpossible;
+       alignpos_ = layout->alignpossible;
 
        /// is paragraph in inset
        ininset_ = par_->inInset();
index ba7af875884346fb4bd8ebfde2ad7bb4073c5a89..b9720d3be524e632fbdda6dd761cd50467bd1f6a 100644 (file)
@@ -45,25 +45,25 @@ void LyXScreen::showCursor(LyXText const * text, BufferView const * bv)
 {
        if (cursor_visible_)
                return;
+
        workarea().getPainter().start();
+
        Cursor_Shape shape = BAR_SHAPE;
        BufferParams const & bp(bv->buffer()->params);
        LyXFont const & realfont(text->real_current_font);
 
        if (realfont.language() != bp.language
-               || realfont.isVisibleRightToLeft() 
+               || realfont.isVisibleRightToLeft()
                != bp.language->RightToLeft()) {
                shape = (realfont.isVisibleRightToLeft())
                        ? REVERSED_L_SHAPE : L_SHAPE;
        }
+
        showManualCursor(text, text->cursor.x(), text->cursor.y(),
                font_metrics::maxAscent(realfont),
                font_metrics::maxDescent(realfont),
                shape);
+
        workarea().getPainter().end();
 }
 
@@ -73,7 +73,7 @@ bool LyXScreen::fitManualCursor(BufferView * bv, LyXText * text,
 {
        int const vheight = workarea().workHeight();
        int newtop = text->first_y;
+
        if (y + desc - text->first_y >= vheight)
                newtop = y - 3 * vheight / 4;  // the scroll region must be so big!!
        else if (y - asc < text->first_y
@@ -82,7 +82,7 @@ bool LyXScreen::fitManualCursor(BufferView * bv, LyXText * text,
        }
 
        newtop = max(newtop, 0); // can newtop ever be < 0? (Lgb)
+
        if (newtop != text->first_y) {
                draw(text, bv, newtop);
                text->first_y = newtop;
@@ -111,7 +111,7 @@ unsigned int LyXScreen::topCursorVisible(LyXCursor const & cursor, int top_y)
        // Is this a hack? Yes, probably... (Lgb)
        if (!row)
                return max(newtop, 0);
-       
+
        if (cursor.y() - row->baseline() + row->height()
            - top_y >= vheight) {
                if (row->height() < vheight
@@ -124,7 +124,7 @@ unsigned int LyXScreen::topCursorVisible(LyXCursor const & cursor, int top_y)
                        newtop = cursor.y()
                                - vheight / 2;   /* the scroll region must be so big!! */
                }
-               
+
        } else if (static_cast<int>((cursor.y()) - row->baseline()) <
                   top_y && top_y > 0) {
                if (row->height() < vheight
@@ -153,7 +153,7 @@ bool LyXScreen::fitCursor(LyXText * text, BufferView * bv)
        return result;
 }
 
-  
+
 void LyXScreen::update(LyXText * text, BufferView * bv,
        int yo, int xo)
 {
@@ -161,7 +161,7 @@ void LyXScreen::update(LyXText * text, BufferView * bv,
        int const vheight = workarea().workHeight();
 
        workarea().getPainter().start();
+
        switch (text->status()) {
        case LyXText::NEED_MORE_REFRESH:
        {
@@ -197,7 +197,7 @@ void LyXScreen::update(LyXText * text, BufferView * bv,
                // Nothing needs done
                break;
        }
+
        workarea().getPainter().end();
 }
 
@@ -223,32 +223,32 @@ void LyXScreen::toggleSelection(LyXText * text, BufferView * bv,
 
        if (kill_selection)
                text->selection.set(false);
+
        workarea().getPainter().start();
+
        drawFromTo(text, bv, top - text->first_y, bottom - text->first_y,
                   yo, xo);
        expose(0, top - text->first_y,
               workarea().workWidth(),
-              bottom - text->first_y - (top - text->first_y));
+              bottom - text->first_y - (top - text->first_y));
+
        workarea().getPainter().end();
 }
-  
+
+
 void LyXScreen::toggleToggle(LyXText * text, BufferView * bv,
                             int yo, int xo)
 {
        if (text->toggle_cursor.par() == text->toggle_end_cursor.par()
            && text->toggle_cursor.pos() == text->toggle_end_cursor.pos())
                return;
-       
+
        int const top_tmp = text->toggle_cursor.y()
                - text->toggle_cursor.row()->baseline();
        int const bottom_tmp = text->toggle_end_cursor.y()
                - text->toggle_end_cursor.row()->baseline()
                + text->toggle_end_cursor.row()->height();
-       
+
        int const offset = yo < 0 ? yo : 0;
        int const bottom = min(max(bottom_tmp, text->first_y),
                static_cast<int>(text->first_y + workarea().workHeight())) - offset;
@@ -262,7 +262,7 @@ void LyXScreen::toggleToggle(LyXText * text, BufferView * bv,
                   xo);
        expose(0, top - text->first_y, workarea().workWidth(),
               bottom - text->first_y - (top - text->first_y));
+
        workarea().getPainter().end();
 }
 
@@ -280,9 +280,9 @@ void LyXScreen::redraw(LyXText * text, BufferView * bv)
 
        drawFromTo(text, bv, 0, workarea().workHeight(), 0, 0, text == bv->text);
        expose(0, 0, workarea().workWidth(), workarea().workHeight());
+
        workarea().getPainter().end();
+
        if (cursor_visible_) {
                cursor_visible_ = false;
                bv->showCursor();
@@ -341,20 +341,20 @@ void LyXScreen::drawFromTo(LyXText * text, BufferView * bv,
        bool internal)
 {
        lyxerr[Debug::GUI] << "screen: drawFromTo " << y1 << "-" << y2 << endl;
+
        int y_text = text->first_y + y1;
-  
+
        // get the first needed row
        Row * row = text->getRowNearY(y_text);
        // y_text is now the real beginning of the row
-  
+
        int y = y_text - text->first_y;
        // y1 is now the real beginning of row on the screen
-       
+
        while (row != 0 && y < y2) {
                LyXText::text_status st = text->status();
                text->getVisibleRow(bv, y + yo,
-                                   xo, row, y + text->first_y);
+                                   xo, row, y + text->first_y);
                internal = internal && (st != LyXText::CHANGED_IN_DRAW);
                while (internal && text->status() == LyXText::CHANGED_IN_DRAW) {
                        text->fullRebreak(bv);
@@ -362,7 +362,7 @@ void LyXScreen::drawFromTo(LyXText * text, BufferView * bv,
                        text->setCursor(bv, text->cursor.par(), text->cursor.pos());
                        text->status(bv, st);
                        text->getVisibleRow(bv, y + yo,
-                                           xo, row, y + text->first_y);
+                                           xo, row, y + text->first_y);
                }
                y += row->height();
                row = row->next();
index bfa7e82e823c00678385da3d7f3c7fde875a765a..10e9e40a4272436d14e7075182279c2256ee228c 100644 (file)
@@ -14,7 +14,7 @@
 #ifdef __GNUG__
 #pragma interface
 #endif
+
 class LyXText;
 class LyXCursor;
 class WorkArea;
@@ -24,7 +24,7 @@ struct Row;
 /**
  * LyXScreen - document rendering management
  *
- * This class is used to manage the on-screen rendering inside the 
+ * This class is used to manage the on-screen rendering inside the
  * work area; it is responsible for deciding which LyXText rows
  * need re-drawing.
  *
@@ -48,15 +48,15 @@ public:
        LyXScreen();
 
        virtual ~LyXScreen();
-        
+
        /**
         * draw the screen from a given position
         * @param y the text position to draw from
         *
-        * Uses as much of the already printed pixmap as possible 
+        * Uses as much of the already printed pixmap as possible
         */
        virtual void draw(LyXText *, BufferView *, unsigned int y) = 0;
+
        /**
         * showManualCursor - display the cursor on the work area
         * @param text the lyx text containing the cursor
@@ -69,10 +69,10 @@ public:
        virtual void showManualCursor(LyXText const *, int x, int y,
                              int asc, int desc,
                              Cursor_Shape shape) = 0;
-       
+
        /// unpaint the cursor painted by showManualCursor()
        virtual void hideCursor() = 0;
+
        /**
         * fit the cursor onto the visible work area, scrolling if necessary
         * @param bv the buffer view
@@ -86,13 +86,13 @@ public:
         */
        bool fitManualCursor(BufferView * bv, LyXText * text,
                int x, int y, int a, int d);
+
        /// redraw the screen, without using existing pixmap
        virtual void redraw(LyXText *, BufferView *);
-   
+
        /// draw the cursor if it's not already shown
        virtual void showCursor(LyXText const *, BufferView const *);
+
        /**
         * topCursorVisible - get a new "top" to make the cursor visible
         * @param c the cursor
@@ -103,7 +103,7 @@ public:
         * within the LyXText is "nicely" visible.
         */
        virtual unsigned int topCursorVisible(LyXCursor const & c, int top_y);
+
        /**
         * fitCursor - fit the cursor onto the work area
         * @param text the text containing the cursor
@@ -113,7 +113,7 @@ public:
         * Scrolls the screen so that the cursor is visible,
         */
        virtual bool fitCursor(LyXText *, BufferView *);
+
        /// show the cursor if it's not, and vice versa
        virtual void cursorToggle(BufferView *) const;
 
@@ -123,23 +123,23 @@ public:
         * @param bv the bufferview
         * @param xo the x offset into the text
         * @param yo the x offset into the text
-        * 
+        *
         * Updates part of the screen. If text->status is
         * LyXText::NEED_MORE_REFRESH, we update from the
         * point of change and to the end of the screen.
         * If text->status is LyXText::NEED_VERY_LITTLE_REFRESH,
-        * we only update the current row. 
+        * we only update the current row.
         */
        virtual void update(LyXText * text, BufferView * bv, int yo = 0, int xo = 0);
+
        /// FIXME
        virtual void toggleSelection(LyXText *, BufferView *, bool = true,
                             int y_offset = 0, int x_offset = 0);
+
        /// FIXME - at least change the name !!
        virtual void toggleToggle(LyXText *, BufferView *,
                          int y_offset = 0, int x_offset = 0);
-       
+
        /// FIXME
        virtual bool forceClear() const { return force_clear_; }
 
@@ -149,21 +149,21 @@ protected:
 
        /// get the work area
        virtual WorkArea & workarea() const = 0;
+
        /// y1 and y2 are coordinates of the screen
        virtual void drawFromTo(LyXText *, BufferView *, int y1, int y2,
-                       int y_offset = 0, int x_offset = 0, bool internal = false);
+                       int y_offset = 0, int x_offset = 0, bool internal = false);
 
        /// y is a coordinate of the text
        virtual void drawOneRow(LyXText *, BufferView *, Row * row,
                        int y_text, int y_offset = 0, int x_offset = 0);
+
        /// grey out (no buffer)
        void greyOut();
+
        /// FIXME ?
        bool force_clear_;
+
        /// is the blinking cursor currently drawn
        bool cursor_visible_;
 };
index 51bb4af75957e4ee364afa727d3632272d88657d..2cdcf58bc4723afe8f91061dfee7ac36b1e774ed 100644 (file)
@@ -1,3 +1,7 @@
+2002-06-24  Lars Gullik Bjønnes  <larsbj@birdstep.com>
+
+       * Toolbar_pimpl.C: layout as layout
+
 2002-06-21  Angus Leeming  <leeming@lyx.org>
 
        * xscreen.C: add a using std::endl directive.
 
        * FormPreferences.h:
        * FormPreferences.C:
-       * forms/form_preferences.fd: remove show_banner, display_shortcuts 
+       * forms/form_preferences.fd: remove show_banner, display_shortcuts
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * XWorkArea.h:
        * XWorkArea.C: remove splash, should be handled in
          LyXScreen::greyOut()
+
 2002-06-21  John Levon  <moz@compsoc.man.ac.uk>
 
        * forms/form_texinfo.fd: "Update List" not "Rescan"
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * guiapi.C: createIndex() changed
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * FormBibtex.C: use new lyx::eliminate_duplicates
 
 2002-06-20 Herbert Voss  <voss@perce.de>
-       * FormBibtex.C:
-       * forms/form_bibtex.fd: give better support for choosing the
-       bibstyle (new browserfield with the available bibstyles). 
-       move some code of ControlTexinfo into a helper
-       file support/tex-helpers to use some of the functions
+
+       * FormBibtex.C:
+       * forms/form_bibtex.fd: give better support for choosing the
+       bibstyle (new browserfield with the available bibstyles).
+       move some code of ControlTexinfo into a helper
+       file support/tex-helpers to use some of the functions
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * XWorkArea.h:
        * XWorkArea.C: remove unused code, name change
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * XLyXKeySym.h:
        * XLyXKeySym.C: whitespace
+
 2002-06-20  John Levon  <moz@compsoc.man.ac.uk>
 
        * XWorkArea.h: remove focus stuff, greyOut()
+
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * XWorkArea.C: remove focus/unfocus events
+
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * XWorkArea.h: remove unused methods
+
 2002-06-15  Martin Vermeer  <martin.vermeer@hut.fi>
 
-        * FormMathsDelim.C: Redesign of Delimiters dialogue in mathed.
+       * FormMathsDelim.C: Redesign of Delimiters dialogue in mathed.
          Cleaner, smaller.
 
 2002-06-19  John Levon  <moz@compsoc.man.ac.uk>
 
        * XWorkArea.h: remove unused width()
+
 2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
 
        * guiapi.C: fix compile with libAiksaurus
+
 2002-06-17  Herbert Voss  <voss@perce.de>
-       * forms/.cvsignore: ignore the *.lo files
+
+       * forms/.cvsignore: ignore the *.lo files
 
 2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
+
        * FormSearch.h:
-       * FormSearch.C: focus and select search string on open (bug #77)
+       * FormSearch.C: focus and select search string on open (bug #77)
 
 2002-06-16  Lars Gullik Bjønnes  <larsbj@birdstep.com>
+
        * changes to let the function setup happen in frontends
 
        * guiapi.C: new file
+
 2002-06-16    <alstrup@diku.dk>
 
        * xscreen.C (draw): After drawing, we wait for X with XSync..
index 9b63cdac382cb914be68a9d573e843a031ea4fb1..b178c611056f55a5e33ab5e3515c552e91e775ae 100644 (file)
@@ -13,9 +13,9 @@
 #pragma implementation
 #endif
 
+#include "FormAboutlyx.h"
 #include "xformsBC.h"
 #include "ControlAboutlyx.h"
-#include "FormAboutlyx.h"
 #include "forms/form_aboutlyx.h"
 #include "xforms_helpers.h"
 #include FORMS_H_LOCATION
index fa083189936dfc43c8343e4f99374ccb24362201..bc5d5e3b6a6e0671d05c29c7c6cb632310acb63b 100644 (file)
@@ -17,8 +17,6 @@
 
 #include "FormBase.h"
 
-#include <vector>
-
 #include <boost/scoped_ptr.hpp>
 
 class ControlAboutlyx;
index 188f980863dd6ac6328f4ef52660f8df2c336f06..905a31533220efe54dc7b363b5cacda63165bae0 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "forms_fwd.h"
 
-#include <boost/signals/trackable.hpp>
+//#include <boost/signals/trackable.hpp>
 
 class Buffer;
 class Dialogs;
index ee2f78f9810f66451d06c5ea228fd1ddc2c8a157..a4a9df8a3d0a472eecbae7fe0a4aa187e19a41fe 100644 (file)
@@ -62,12 +62,6 @@ FormDocument::FormDocument(LyXView * lv, Dialogs * d)
          ActCell(0), Confirmed(0),
          current_bullet_panel(0), current_bullet_depth(0), fbullet(0)
 {
-#if 0
-       // let the dialog be shown
-       // This is a permanent connection so we won't bother
-       // storing a copy because we won't be disconnecting.
-       d->showDocument = boost::bind(&FormDocument::show, this);
-#endif
 }
 
 
@@ -143,19 +137,12 @@ void FormDocument::build()
        // Create the contents of the unit choices
        // Don't include the "%" terms...
        vector<string> units_vec = getLatexUnits();
-#if 0
-       for (vector<string>::iterator it = units_vec.begin();
-            it != units_vec.end(); ++it) {
-               if (contains(*it, "%"))
-                       it = units_vec.erase(it, it+1) - 1;
-       }
-#else
        vector<string>::iterator ret =
                std::remove_if(units_vec.begin(),
                               units_vec.end(),
                               bind2nd(contains_functor(), "%"));
        units_vec.erase(ret, units_vec.end());
-#endif
+
        string units = getStringFromVector(units_vec, "|");
 
        fl_addto_choice(paper_->choice_custom_width_units,  units.c_str());
index 251ace8f1d2a999dc6a9731af684cc34d486bb75..6510cbd661307d36217857adb084017f23a524b7 100644 (file)
@@ -152,9 +152,6 @@ FormMathsPanel::FormMathsPanel(LyXView * lv, Dialogs * d)
        ams_ops_.reset(new FormMathsBitmap(lv, d, *this, _("AMS Operators"), latex));
 
        //showUnderMouse(false);
-#if 0
-       d->showMathPanel = boost::bind(&FormMathsPanel::show, this);
-#endif
 }
 
 
index ab4a5dab45dd13d2bd990f9044984ce120777cf4..42540b213b9d4e0c6b439c50a2ba4c22c8868895 100644 (file)
@@ -37,7 +37,7 @@ using std::bind2nd;
 using std::remove_if;
 
 typedef FormCB<ControlParagraph, FormDB<FD_paragraph> > base_class;
-  
+
 FormParagraph::FormParagraph(ControlParagraph & c)
        : base_class(c, _("Paragraph Layout"), false)
 {}
@@ -74,19 +74,11 @@ void FormParagraph::build()
        // Create the contents of the unit choices
        // Don't include the "%" terms...
        vector<string> units_vec = getLatexUnits();
-#if 0
-       for (vector<string>::iterator it = units_vec.begin();
-            it != units_vec.end(); ++it) {
-               if (contains(*it, "%"))
-                       it = units_vec.erase(it, it+1) - 1;
-       }
-#else
-       // Something similar to this is a better way to erase
+
        vector<string>::iterator del =
                remove_if(units_vec.begin(), units_vec.end(),
                          bind2nd(contains_functor(), "%"));
        units_vec.erase(del, units_vec.end());
-#endif
 
        string units = getStringFromVector(units_vec, "|");
 
@@ -195,15 +187,15 @@ void FormParagraph::apply()
        // the input field, reset the kind to "None".
        validateVSpaceWidgets(dialog_->choice_space_above,
                              dialog_->input_space_above);
-       
+
        VSpace const space_top =
                setVSpaceFromWidgets(dialog_->choice_space_above,
                                     dialog_->input_space_above,
                                     dialog_->choice_value_space_above,
                                     dialog_->check_space_above);
-       
+
        controller().params().spaceTop(space_top);
-       
+
        validateVSpaceWidgets(dialog_->choice_space_below,
                              dialog_->input_space_below);
 
@@ -212,7 +204,7 @@ void FormParagraph::apply()
                                     dialog_->input_space_below,
                                     dialog_->choice_value_space_below,
                                     dialog_->check_space_below);
-       
+
        controller().params().spaceBottom(space_bottom);
 
        /* lines and pagebreaks */
@@ -224,10 +216,10 @@ void FormParagraph::apply()
 
        bool const pagebreak_top = fl_get_button(dialog_->check_pagebreaks_top);
        controller().params().pagebreakTop(pagebreak_top);
-       
+
        bool const pagebreak_bottom = fl_get_button(dialog_->check_pagebreaks_bottom);
        controller().params().pagebreakBottom(pagebreak_bottom);
-       
+
 
        /* alignment */
        LyXAlignment align;
@@ -240,7 +232,7 @@ void FormParagraph::apply()
        else
                align = LYX_ALIGN_BLOCK;
        controller().params().align(align);
-       
+
        /* label width */
        string const labelwidthstring =
                getStringFromInput(dialog_->input_labelwidth);
@@ -274,7 +266,7 @@ void FormParagraph::apply()
 
        Spacing const spacing(linespacing, other);
        controller().params().spacing(spacing);
-       
+
 }
 
 namespace {
@@ -352,7 +344,7 @@ void FormParagraph::update()
        fl_set_button(dialog_->radio_align_left, 0);
        fl_set_button(dialog_->radio_align_center, 0);
        fl_set_button(dialog_->radio_align_block, 0);
-       
+
        LyXAlignment align = controller().params().align();
 
        switch (align) {
@@ -531,5 +523,3 @@ ButtonPolicy::SMInput FormParagraph::input(FL_OBJECT * ob, long)
 
        return ButtonPolicy::SMI_VALID;
 }
-
-
index 4acd391e7efbdab13ca1e6151a53639affb0217d..40ae2a5ecfb69548cbbe0149b193c1a8f729e1e4 100644 (file)
@@ -80,12 +80,6 @@ FormPreferences::FormPreferences(LyXView & lv, Dialogs & d)
        // let the dialog be shown
        // This is a permanent connection so we won't bother
        // storing a copy because we won't be disconnecting.
-#if 0
-       d->showPreferences = boost::bind(&FormPreferences::show, this);
-#endif
-#if 0
-       d->showSpellcheckerPreferences = boost::bind(&FormPreferences::showSpellPref, this);
-#endif
 }
 
 
index 60150d2cc3ba8eb62cba48bf6744da040aafb58e..cbe494842c00d72c1e99359d724823754cc0454e 100644 (file)
@@ -43,13 +43,6 @@ FormTabular::FormTabular(LyXView & lv, Dialogs & d)
        : FormInset(&lv, &d, _("Tabular Layout")),
          inset_(0), actCell_(-1), closing_(false)
 {
-#if 0
-       // let the dialog be shown
-       // This is a permanent connection so we won't bother
-       // storing a copy because we won't be disconnecting.
-       d->showTabular = boost::bind(&FormTabular::showInset, this, _1);
-       d->updateTabular = boost::bind(&FormTabular::updateInset, this, _1);
-#endif
 }
 
 
@@ -154,18 +147,10 @@ void FormTabular::build()
        // Create the contents of the unit choices
        // Don't include the "%" terms...
        vector<string> units_vec = getLatexUnits();
-#if 0
-       for (vector<string>::iterator it = units_vec.begin();
-            it != units_vec.end(); ++it) {
-               if (contains(*it, "%"))
-                       it = units_vec.erase(it, it + 1) - 1;
-       }
-#else
        vector<string>::iterator ret =
                remove_if(units_vec.begin(), units_vec.end(),
                          bind2nd(contains_functor(), "%"));
        units_vec.erase(ret, units_vec.end());
-#endif
 
        string units = getStringFromVector(units_vec, "|");
 
index 27a4d78894ca63f1f80e45f404ad79a3ee1d16c0..4c29bc95bb7ed92edb892499d729625af3fa1ab0 100644 (file)
@@ -180,8 +180,8 @@ void Toolbar::Pimpl::layoutSelected()
        LyXTextClass::const_iterator end = tc.end();
        for (LyXTextClass::const_iterator cit = tc.begin();
             cit != end; ++cit) {
-               if (_(cit->name()) == layoutguiname) {
-                       owner->getLyXFunc()->dispatch(LFUN_LAYOUT, cit->name());
+               if (_((*cit)->name()) == layoutguiname) {
+                       owner->getLyXFunc()->dispatch(LFUN_LAYOUT, (*cit)->name());
                        return;
                }
        }
@@ -195,7 +195,7 @@ void Toolbar::Pimpl::setLayout(string const & layout)
        if (combox) {
                LyXTextClass const & tc =
                        textclasslist[owner->buffer()->params.textclass];
-               combox->select(_(tc[layout].name()));
+               combox->select(_(tc[layout]->name()));
        }
 }
 
@@ -214,8 +214,8 @@ void Toolbar::Pimpl::updateLayoutList(bool force)
                for (LyXTextClass::const_iterator cit = tc.begin();
                     cit != end; ++cit) {
                        // ignore obsolete entries
-                       if (cit->obsoleted_by().empty())
-                               combox->addline(_(cit->name()));
+                       if ((*cit)->obsoleted_by().empty())
+                               combox->addline(_((*cit)->name()));
                }
        }
        // we need to do this.
index c3cfdf94396ec43ccae3944402e11872524a1adb..346804759561f2ce62e741a8a7ab48e07294e0aa 100644 (file)
@@ -33,7 +33,7 @@
 // xforms doesn't define this (but it should be in <forms.h>).
 extern "C"
 FL_APPEVENT_CB fl_set_preemptive_callback(Window, FL_APPEVENT_CB, void *);
+
 using std::endl;
 using std::abs;
 using std::hex;
@@ -59,7 +59,7 @@ void setXtermCursor(Window win)
        XDefineCursor(fl_get_display(), win, cursor);
        XFlush(fl_get_display());
 }
+
 
 // FIXME !
 mouse_button::state x_button_state(unsigned int button)
@@ -178,9 +178,9 @@ XWorkArea::XWorkArea(int x, int y, int w, int h)
        fl_set_scrollbar_bounds(scrollbar, 0.0, 0.0);
        fl_set_scrollbar_value(scrollbar, 0.0);
        fl_set_scrollbar_size(scrollbar, scrollbar->h);
-       
+
        int const bw = int(abs(fl_get_border_width()));
+
        // Create the workarea pixmap
        createPixmap(w - 15 - 2 * bw, h - 2 * bw);
 
@@ -200,7 +200,7 @@ XWorkArea::XWorkArea(int x, int y, int w, int h)
                                      C_XWorkArea_work_area_handler);
        obj->wantkey = FL_KEY_ALL;
        obj->u_vdata = this;
+
        fl_set_object_boxtype(obj,FL_DOWN_BOX);
        fl_set_object_resize(obj, FL_RESIZE_ALL);
        fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity);
@@ -278,7 +278,7 @@ void XWorkArea::setScrollbarParams(int height, int pos, int line_height)
 
        lyxerr[Debug::GUI] << "scroll: height now " << height << endl;
        lyxerr[Debug::GUI] << "scroll: work_height " << work_height << endl;
+
        /* If the text is smaller than the working area, the scrollbar
         * maximum must be the working area height. No scrolling will
         * be possible */
@@ -335,6 +335,7 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event,
                lyxerr[Debug::WORKAREA] << "Workarea event: DRAW" << endl;
                area->createPixmap(area->workWidth(), area->workHeight());
                area->workAreaResize();
+               area->redraw();
                break;
        case FL_PUSH:
                if (!ev || ev->xbutton.button == 0) break;
@@ -389,7 +390,7 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event,
 //             lyxerr << "We have " << num_keys << " keys in the returned buffer" << endl;
 //             lyxerr << "Our dummy string is " << dummy << endl;
 #endif
-               
+
                if (lyxerr.debugging(Debug::KEY)) {
                        char const * tmp = XKeysymToString(key);
                        char const * tmp2 = XKeysymToString(keysym);
@@ -477,7 +478,7 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event,
 
                XLyXKeySym * xlk = new XLyXKeySym;
                xlk->initFromKeySym(ret_key);
-               
+
                area->workAreaKeyPress(LyXKeySymPtr(xlk),
                                       x_key_state(ret_state));
        }
index 1793a89dd339bf3e3df0124fb039902ec886142c..0b9ba2e6f6c3f5b11f26a25b32a59482d7e4decb 100644 (file)
@@ -40,7 +40,7 @@ public:
        }
        ///
        Window getWin() const { return work_area->form->window; }
-        ///
+       ///
        virtual void setScrollbarParams(int height, int pos, int line_height);
        ///
        Pixmap getPixmap() const { return workareapixmap; }
@@ -48,12 +48,12 @@ public:
        static int work_area_handler(FL_OBJECT *, int event,
                                     FL_Coord, FL_Coord,
                                     int /*key*/, void * xev);
+
        /// return x position of window
        int xpos() const { return work_area->x; }
        /// return y position of window
        int ypos() const { return work_area->y; }
+
        /// xforms callback from scrollbar
        void scroll_cb();
        /// a selection exists
@@ -84,5 +84,5 @@ private:
        /// the current document's height (for scrollbar)
        int doc_height_;
 };
+
 #endif // XWORKAREA_H
index 13ccdb1d33a89fc67c215f400206b94ff9b55ad0..8e4515f16462a01c8348693f896e51054f653d61 100644 (file)
 #include "FormThesaurus.h"
 #include "forms/form_thesaurus.h"
 #endif
+
 #include "FormToc.h"
 #include "forms/form_toc.h"
 
index 36513b90ed5d5e3bbe3b8d852bf253b669266f91..23544eb6a65df73a2de02a10610404defc1ebe9a 100644 (file)
@@ -40,14 +40,14 @@ namespace {
 GC createGC()
 {
        XGCValues val;
-       val.foreground = BlackPixel(fl_get_display(), 
+       val.foreground = BlackPixel(fl_get_display(),
                                    DefaultScreen(fl_get_display()));
-       
+
        val.function = GXcopy;
        val.graphics_exposures = false;
        val.line_style = LineSolid;
        val.line_width = 0;
-       return XCreateGC(fl_get_display(), RootWindow(fl_get_display(), 0), 
+       return XCreateGC(fl_get_display(), RootWindow(fl_get_display(), 0),
                         GCForeground | GCFunction | GCGraphicsExposures
                         | GCLineWidth | GCLineStyle , &val);
 }
@@ -76,13 +76,13 @@ XScreen::~XScreen()
        XFreeGC(fl_get_display(), gc_copy);
 }
 
-void XScreen::setCursorColor() 
+
+void XScreen::setCursorColor()
 {
        if (!lyxColorHandler.get()) return;
 
        GC gc = lyxColorHandler->getGCForeground(LColor::cursor);
-       
+
        XGCValues val;
        XGetGCValues(fl_get_display(),
                     gc, GCForeground, &val);
@@ -95,14 +95,14 @@ void XScreen::showManualCursor(LyXText const * text, int x, int y,
 {
        // Update the cursor color.
        setCursorColor();
-       
+
        int const y1 = max(y - text->first_y - asc, 0);
        int const y_tmp = min(y - text->first_y + desc,
                              static_cast<int>(owner_.workHeight()));
 
        // Secure against very strange situations
        int const y2 = max(y_tmp, y1);
-       
+
        if (cursor_pixmap) {
                XFreePixmap(fl_get_display(), cursor_pixmap);
                cursor_pixmap = 0;
@@ -127,7 +127,7 @@ void XScreen::showManualCursor(LyXText const * text, int x, int y,
                        break;
                }
 
-               cursor_pixmap = 
+               cursor_pixmap =
                        XCreatePixmap (fl_get_display(),
                                       fl_root,
                                       cursor_pixmap_w,
@@ -174,11 +174,11 @@ void XScreen::hideCursor()
        if (!cursor_visible_) return;
 
        if (cursor_pixmap) {
-               XCopyArea (fl_get_display(), 
+               XCopyArea (fl_get_display(),
                           cursor_pixmap,
                           owner_.getWin(),
                           gc_copy,
-                          0, 0, 
+                          0, 0,
                           cursor_pixmap_w, cursor_pixmap_h,
                           cursor_pixmap_x + owner_.xpos(),
                           cursor_pixmap_y + owner_.ypos());
@@ -186,7 +186,7 @@ void XScreen::hideCursor()
        cursor_visible_ = false;
 }
 
+
 void XScreen::expose(int x, int y, int w, int h)
 {
        lyxerr[Debug::GUI] << "expose " << w << "x" << h
@@ -233,8 +233,8 @@ void XScreen::draw(LyXText * text, BufferView * bv, unsigned int y)
                               old_first - text->first_y);
                } else  {
                        drawFromTo(text, bv,
-                                  owner_.workHeight() + old_first - text->first_y,
-                                  owner_.workHeight(), 0, 0, internal);
+                                  owner_.workHeight() + old_first - text->first_y,
+                                  owner_.workHeight(), 0, 0, internal);
                        XCopyArea (fl_get_display(),
                                   owner_.getWin(),
                                   owner_.getWin(),
@@ -250,7 +250,7 @@ void XScreen::draw(LyXText * text, BufferView * bv, unsigned int y)
                               owner_.workWidth(), text->first_y - old_first);
                }
        } else {
-               // make a dumb new-draw 
+               // make a dumb new-draw
                drawFromTo(text, bv, 0, owner_.workHeight(), 0, 0, internal);
                expose(0, 0, owner_.workWidth(), owner_.workHeight());
        }
index 1fc39adc268a39e175e3890eeb5a537e9db53c93..481aab4fcc5a5cd0873ffd6f7e52d8422280dadb 100644 (file)
@@ -20,7 +20,7 @@
 #include "screen.h"
 
 #include "XWorkArea.h"
+
 /** The class XScreen is used for the main Textbody.
     Concretely, the screen is held in a pixmap.  This pixmap is kept up to
     date and used to optimize drawing on the screen.
@@ -42,7 +42,7 @@ public:
        virtual void showManualCursor(LyXText const *, int x, int y,
                              int asc, int desc,
                              Cursor_Shape shape);
-       
+
        /** Draws the screen form textposition y. Uses as much of
            the already printed pixmap as possible */
        virtual void draw(LyXText *, BufferView *, unsigned int y);
@@ -50,14 +50,14 @@ public:
 protected:
        /// get the work area
        virtual WorkArea & workarea() const { return owner_; }
+
        /// Copies specified area of pixmap to screen
-       virtual void expose(int x, int y, int w, int h); 
+       virtual void expose(int x, int y, int w, int h);
+
 private:
        /// our owning widget
        XWorkArea & owner_;
+
        ///
        Pixmap cursor_pixmap;
        ///
index 72e3de1b05e0bedb5453002fdcc52108192ad9ff..d60be2f84a59d93c5c2651ab2aa661e4088616d2 100644 (file)
@@ -1,3 +1,6 @@
+2002-06-24  Lars Gullik Bjønnes  <larsbj@birdstep.com>
+
+       * insettext.C: layout as layout
 
 2002-05-28  André Pönitz <poenitz@gmx.net>
 
@@ -6,12 +9,12 @@
        * insetref.C: tiny whitespace
 
 2002-06-15  Herbert Voss  <voss@perce.de>
-       * insetgraphics.C: (prepareFile) fix bug with zipped eps-files
-       and take always convert when no userdefined converter was
-       found
-       (latex) small changes in the lyxerr output
+
+       * insetgraphics.C: (prepareFile) fix bug with zipped eps-files
+       and take always convert when no userdefined converter was
+       found
+       (latex) small changes in the lyxerr output
+
 2002-06-15  LyX Development team <lyx@rilke>
 
        * inset*.[Ch] (docbook): Added new argument to take the pernicious
@@ -24,7 +27,7 @@
 2002-06-13  Edwin Leuven  <leuven@fee.uva.nl>
 
        * insetquotes.C: change lyxfont::draw to font_metrics::draw
-       
+
 2002-06-12  Vitaly Lipatov  <LAV@VL3143.spb.edu>
 
        * insetquotes.C (draw): fix drawing of double quotes
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * insettabular.C: s/scrollCB/scrollDocView/
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * insettext.C: change of topCursorVisible()
          prototype
+
 2002-06-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * insettext.h:
        * insettext.C: rename/change of LyXScreen
+
 2002-06-07  Angus Leeming  <leeming@lyx.org>
 
        Fixes needed to compile with Compaq cxx 6.5.
-       * insetexternal.C: 
+       * insetexternal.C:
        all c-library variables have been moved into namespace std.
        Wrap using std::xyz declarations inside a #ifndef CXX_GLOBAL_CSTD block.
 
 2002-06-05  Jean-Marc Lasgouttes  <lasgouttes@freesurf.fr>
 
-       * insetinclude.C (uniqueID): 
+       * insetinclude.C (uniqueID):
        * insetgraphics.C (uniqueID): renamed from unique_id, since this
        conflicted with some AIX headers.
 
index f20d5e3583014ca37b1b6d2c6af073b232f0c190..4fa75c48d91b7f6bf4ca6ca694c441197d77e008 100644 (file)
@@ -19,7 +19,7 @@
 #include "BufferView.h"
 #include "support/lstrings.h"
 #include "frontends/Painter.h"
-#include "frontends/mouse_state.h" 
+#include "frontends/mouse_state.h"
 #include "commandtags.h"
 #include "support/lstrings.h"
 #include "gettext.h"
index d0f14006f018d7449c70377229d3760f3842a1cf..2bb302ecf48d3337b7cc33d5d75c4d54b1fa6889 100644 (file)
@@ -454,7 +454,7 @@ public:
        // if that one has one!
        ///
        virtual bool insetButtonRelease(BufferView *,
-                                       int x, int y, mouse_button::state button);
+                                       int x, int y, mouse_button::state button);
        ///
        virtual void insetMotionNotify(BufferView *, int x, int y, mouse_button::state state);
        ///
index b66e5e5e447cbffa910847631dcf8c089b0ac753..0f2cde6adee5604983db25974290227a8f756267 100644 (file)
@@ -235,7 +235,7 @@ void InsetCollapsable::draw(BufferView * bv, LyXFont const & f,
 
 
 void InsetCollapsable::edit(BufferView * bv, int xp, int yp,
-                            mouse_button::state button)
+                           mouse_button::state button)
 {
        UpdatableInset::edit(bv, xp, yp, button);
 
index cb009011b89582558000436d3904c65eaa01bfb0..7b71bfec59e95d80df74e39b2eb13ed22150d187 100644 (file)
@@ -309,7 +309,7 @@ void InsetERT::insetButtonPress(BufferView * bv,
 }
 
 
-bool InsetERT::insetButtonRelease(BufferView * bv, int x, int y, 
+bool InsetERT::insetButtonRelease(BufferView * bv, int x, int y,
        mouse_button::state button)
 {
        if (button == mouse_button::button3) {
@@ -454,7 +454,7 @@ InsetERT::localDispatch(BufferView * bv, kb_action action, string const & arg)
 
        switch (action) {
        case LFUN_LAYOUT:
-               bv->owner()->setLayout(inset.paragraph()->layout());
+               bv->owner()->setLayout(inset.paragraph()->layout()->name());
                break;
        default:
                result = InsetCollapsable::localDispatch(bv, action, arg);
@@ -712,7 +712,7 @@ int InsetERT::getMaxWidth(BufferView * bv, UpdatableInset const * in) const
 
 
 void InsetERT::update(BufferView * bv, LyXFont const & font,
-                      bool reinit)
+                     bool reinit)
 {
        if (inset.need_update & InsetText::INIT ||
                inset.need_update & InsetText::FULL)
index 91f45fb071fccab38cf20cbf31c293517c323911..d91cdb669961be3420170530e53bd8498671722f 100644 (file)
@@ -25,7 +25,6 @@
 // the following are needed just to get the layout of the enclosing
 // paragraph. This seems a bit too much to me (JMarc)
 #include "lyxlayout.h"
-#include "lyxtextclasslist.h"
 #include "buffer.h"
 #include "paragraph.h"
 
@@ -65,9 +64,8 @@ int InsetFoot::latex(Buffer const * buf,
                     ostream & os, bool fragile, bool fp) const
 {
        if (buf && parOwner()) {
-               LyXLayout const & layout =
-                       textclasslist[buf->params.textclass][parOwner()->layout()];
-               fragile |= layout.intitle;
+               LyXLayout_ptr const & layout = parOwner()->layout();
+               fragile |= layout->intitle;
        }
 
        os << "%\n\\footnote{";
index e083bc60ff3a36c6e3a76d72bcc9be4de3f13a31..4ace559e77a217f936bd597d91fb4dc3da2724ae 100644 (file)
@@ -601,8 +601,8 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
        string const orig_file = params().filename;
        string orig_file_with_path =
                MakeAbsPath(orig_file, buf->filePath());
-       lyxerr[Debug::GRAPHICS] << "[InsetGraphics::prepareFile] orig_file = " 
-                   << orig_file << "\n\twith path: " 
+       lyxerr[Debug::GRAPHICS] << "[InsetGraphics::prepareFile] orig_file = "
+                   << orig_file << "\n\twith path: "
                    << orig_file_with_path << endl;
 
        if (!IsFileReadable(orig_file_with_path))
@@ -627,13 +627,13 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
                lyxerr[Debug::GRAPHICS] << "\twe have a zipped file ("
                        << getExtFromContents(orig_file_with_path) << ")\n";
        if (params().noUnzip && zipped) {
-               lyxerr[Debug::GRAPHICS] 
+               lyxerr[Debug::GRAPHICS]
                        << "\tpass file unzipped to LaTeX but with full path.\n";
                // latex needs an absolue path, otherwise the coresponding
                // *.eps.bb file isn't found
                return orig_file_with_path;
        }
-       
+
        string temp_file(orig_file);
        // Uncompress the file if necessary. If it has been uncompressed in
        // a previous call to prepareFile, do nothing.
@@ -649,7 +649,7 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
                                << (success ? " succeeded\n" : " failed\n");
                } else
                        lyxerr[Debug::GRAPHICS]
-                               << "\tzipped file " << temp_file 
+                               << "\tzipped file " << temp_file
                                << " exists! Maybe no tempdir ...\n";
                orig_file_with_path = unzipFile(temp_file);
                lyxerr[Debug::GRAPHICS]
@@ -691,12 +691,12 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
                temp_file = MakeAbsPath(temp_file, buf->tmppath);
                lyxerr[Debug::GRAPHICS]
                        << "\tchanged to: " << temp_file << endl;
-                       
+
                // if the file doen't exists, copy it into the tempdi
                if (!IsFileReadable(temp_file)) {
                        bool const success = lyx::copy(orig_file_with_path, temp_file);
                        lyxerr[Debug::GRAPHICS]
-                               << "\tcopying from " << orig_file_with_path << " to " 
+                               << "\tcopying from " << orig_file_with_path << " to "
                                << temp_file
                                << (success ? " succeeded\n" : " failed\n");
                        if (!success) {
@@ -716,7 +716,7 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
                // the orig_file_with_path, maybe it is a zipped one
                return lyxrc.use_tempdir ? temp_file : orig_file_with_path;
        }
-       
+
        string const outfile_base = RemoveExtension(temp_file);
        lyxerr[Debug::GRAPHICS]
                << "\tThe original file is " << orig_file << "\n"
@@ -728,21 +728,21 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
        // if no special converter defined, than we take the default one
        // from ImageMagic: convert from:inname.from to:outname.to
        if (!converters.convert(buf, temp_file, outfile_base, from, to)) {
-               string const command = 
+               string const command =
                        "convert " +
                        from + ':' + temp_file + ' ' +
                        to + ':' + outfile_base + '.' + to;
-               lyxerr[Debug::GRAPHICS] 
+               lyxerr[Debug::GRAPHICS]
                        << "No converter defined! I use convert from ImageMagic:\n\t"
                        << command << endl;
                Systemcall one;
                one.startscript(Systemcall::Wait, command);
                if (!IsFileReadable(ChangeExtension(outfile_base, to)))
-                       Alert::alert(_("Cannot convert Image (not existing file??)"),
+                       Alert::alert(_("Cannot convert Image (not existing file?)"),
                                _("No information for converting from ")
                                + from + _(" to ") + to);
        }
-       
+
        return RemoveExtension(temp_file);
 }
 
@@ -838,7 +838,8 @@ int InsetGraphics::linuxdoc(Buffer const *, ostream &) const
 // For explanation on inserting graphics into DocBook checkout:
 // http://linuxdoc.org/LDP/LDP-Author-Guide/inserting-pictures.html
 // See also the docbook guide at http://www.docbook.org/
-int InsetGraphics::docbook(Buffer const *, ostream & os, bool mixcont) const
+int InsetGraphics::docbook(Buffer const *, ostream & os,
+                          bool /*mixcont*/) const
 {
        // In DocBook v5.0, the graphic tag will be eliminated from DocBook, will
        // need to switch to MediaObject. However, for now this is sufficient and
index dc8e0b508b37154929db44d4faef421ee149adfe..c7a3b9de787834e45d96ad11bf9a38bc50ecc818 100644 (file)
@@ -94,7 +94,7 @@ struct InsetGraphicsParams
        void Write(std::ostream & os) const;
        /// If the token belongs to our parameters, read it.
        bool Read(LyXLex & lex, string const & token);
-       /// convert 
+       /// convert
   // Only a subset of InsetGraphicsParams is needed for display purposes.
   // This function also interrogates lyxrc to ascertain whether
   // to display or not.
index 844d6d3cada3389d6f2f691fc92374ed49862c9e..27fae37715a50fe7bc7c17a85440b7a77a4868a9 100644 (file)
@@ -342,7 +342,8 @@ int InsetInclude::linuxdoc(Buffer const * buffer, ostream & os) const
 }
 
 
-int InsetInclude::docbook(Buffer const * buffer, ostream & os, bool mixcont) const
+int InsetInclude::docbook(Buffer const * buffer, ostream & os,
+                         bool /*mixcont*/) const
 {
        string incfile(params_.cparams.getContents());
 
index 0feb09eee1ec28d861dbe5402473986fb82e969f..7dcbc23afce438745a765e2f59f92dfa57f579b6 100644 (file)
@@ -53,7 +53,7 @@ int InsetSpecialChar::width(BufferView *, LyXFont const & font) const
        case HYPHENATION:
        {
                int w = font_metrics::width('-', font);
-               if (w > 5) 
+               if (w > 5)
                        w -= 2; // to make it look shorter
                return w;
        }
index a3ed108ea85f3509b83267e0e8cd3adcc9810948..c172d3ec13e7c9606fdf5b4d6ac813e8476eed90 100644 (file)
@@ -140,8 +140,7 @@ InsetText::InsetText(BufferParams const & bp)
          do_reinit(false)
 {
        par = new Paragraph;
-       par->layout(textclasslist[bp.textclass].defaultLayoutName());
-
+       par->layout(textclasslist[bp.textclass].defaultLayout());
        init();
 }
 
@@ -219,7 +218,7 @@ InsetText::~InsetText()
 void InsetText::clear()
 {
        // This is a gross hack...
-       string old_layout = par->layout();
+       LyXLayout_ptr old_layout = par->layout();
 
        while (par) {
                Paragraph * tmp = par->next();
@@ -663,7 +662,7 @@ void InsetText::updateLocal(BufferView * bv, int what, bool mark_dirty) const
        bv->owner()->updateMenubar();
        bv->owner()->updateToolbar();
        if (old_par != cpar(bv)) {
-               bv->owner()->setLayout(cpar(bv)->layout());
+               bv->owner()->setLayout(cpar(bv)->layout()->name());
                old_par = cpar(bv);
        }
 }
@@ -807,9 +806,9 @@ void InsetText::insetUnlock(BufferView * bv)
                code = FULL;
        } else if (owner()) {
                bv->owner()->setLayout(owner()->getLyXText(bv)
-                                      ->cursor.par()->layout());
+                                      ->cursor.par()->layout()->name());
        } else
-               bv->owner()->setLayout(bv->text->cursor.par()->layout());
+               bv->owner()->setLayout(bv->text->cursor.par()->layout()->name());
        // hack for deleteEmptyParMech
        if (par->size()) {
                lt->setCursor(bv, par, 0);
@@ -1086,7 +1085,9 @@ void InsetText::insetButtonPress(BufferView * bv,
                                lt = 0;
                        updateLocal(bv, CURSOR, false);
                }
-               bv->owner()->setLayout(cpar(bv)->layout());
+
+               bv->owner()->setLayout(cpar(bv)->layout()->name());
+
                // we moved the view we cannot do mouse selection in this case!
                if (getLyXText(bv)->first_y != old_first_y)
                        no_selection = true;
@@ -1443,7 +1444,7 @@ InsetText::localDispatch(BufferView * bv,
        case LFUN_LAYOUT:
                // do not set layouts on non breakable textinsets
                if (autoBreakRows) {
-                       string cur_layout = cpar(bv)->layout();
+                       string cur_layout = cpar(bv)->layout()->name();
 
                        // Derive layout number from given argument (string)
                        // and current buffer's textclass (number). */
@@ -1454,7 +1455,7 @@ InsetText::localDispatch(BufferView * bv,
                        // If the entry is obsolete, use the new one instead.
                        if (hasLayout) {
                                string const & obs =
-                                       textclasslist[tclass][layout].
+                                       textclasslist[tclass][layout]->
                                        obsoleted_by();
                                if (!obs.empty())
                                        layout = obs;
@@ -1470,13 +1471,13 @@ InsetText::localDispatch(BufferView * bv,
                        if (cur_layout != layout) {
                                cur_layout = layout;
                                lt->setLayout(bv, layout);
-                               bv->owner()->setLayout(cpar(bv)->layout());
+                               bv->owner()->setLayout(cpar(bv)->layout()->name());
                                updwhat = CURSOR_PAR;
                                updflag = true;
                        }
                } else {
                        // reset the layout box
-                       bv->owner()->setLayout(cpar(bv)->layout());
+                       bv->owner()->setLayout(cpar(bv)->layout()->name());
                }
                break;
        case LFUN_PARAGRAPH_SPACING:
@@ -1593,8 +1594,7 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
                string sgmlparam;
                int desc_on = 0; // description mode
 
-               LyXLayout const & style =
-                       textclasslist[buf->params.textclass][p->layout()];
+               LyXLayout_ptr const & style = p->layout();
 
                // environment tag closing
                for (; depth > p->params().depth(); --depth) {
@@ -1610,7 +1610,7 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
                }
 
                if (depth == p->params().depth()
-                  && environment_stack[depth] != style.latexname()
+                  && environment_stack[depth] != style->latexname()
                   && !environment_stack[depth].empty()) {
                        if (environment_inner[depth] != "!-- --") {
                                item_name= "listitem";
@@ -1626,9 +1626,9 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
                }
 
                // Write opening SGML tags.
-               switch (style.latextype) {
+               switch (style->latextype) {
                case LATEX_PARAGRAPH:
-                       lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, style.latexname());
+                       lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, style->latexname());
                        break;
 
                case LATEX_COMMAND:
@@ -1643,12 +1643,12 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
                                environment_stack[depth].erase();
                        }
 
-                       if (environment_stack[depth] != style.latexname()) {
+                       if (environment_stack[depth] != style->latexname()) {
                                if (environment_stack.size() == depth + 1) {
                                        environment_stack.push_back("!-- --");
                                        environment_inner.push_back("!-- --");
                                }
-                               environment_stack[depth] = style.latexname();
+                               environment_stack[depth] = style->latexname();
                                environment_inner[depth] = "!-- --";
                                lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, environment_stack[depth]);
                        } else {
@@ -1660,17 +1660,17 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
                                }
                        }
 
-                       if (style.latextype == LATEX_ENVIRONMENT) {
-                               if (!style.latexparam().empty()) {
-                                       if (style.latexparam() == "CDATA")
+                       if (style->latextype == LATEX_ENVIRONMENT) {
+                               if (!style->latexparam().empty()) {
+                                       if (style->latexparam() == "CDATA")
                                                os << "<![CDATA[";
                                        else
-                                         lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, style.latexparam());
+                                         lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, style->latexparam());
                                }
                                break;
                        }
 
-                       desc_on = (style.labeltype == LABEL_MANUAL);
+                       desc_on = (style->labeltype == LABEL_MANUAL);
 
                        environment_inner[depth] = desc_on?"varlistentry":"listitem";
                        lines += buf->sgmlOpenTag(os, depth + 1 + command_depth, mixcont, environment_inner[depth]);
@@ -1680,7 +1680,7 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
 
                        break;
                default:
-                       lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, style.latexname());
+                       lines += buf->sgmlOpenTag(os, depth + command_depth, mixcont, style->latexname());
                        break;
                }
 
@@ -1689,13 +1689,13 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
 
                string end_tag;
                // write closing SGML tags
-               switch (style.latextype) {
+               switch (style->latextype) {
                case LATEX_ENVIRONMENT:
-                       if (!style.latexparam().empty()) {
-                               if (style.latexparam() == "CDATA")
+                       if (!style->latexparam().empty()) {
+                               if (style->latexparam() == "CDATA")
                                        os << "]]>";
                                else
-                                       lines += buf->sgmlCloseTag(os, depth + command_depth, mixcont, style.latexparam());
+                                       lines += buf->sgmlCloseTag(os, depth + command_depth, mixcont, style->latexparam());
                        }
                        break;
                case LATEX_ITEM_ENVIRONMENT:
@@ -1704,10 +1704,10 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
                        lines += buf->sgmlCloseTag(os, depth + 1 + command_depth, mixcont, end_tag);
                        break;
                case LATEX_PARAGRAPH:
-                       lines += buf->sgmlCloseTag(os, depth + command_depth, mixcont, style.latexname());
+                       lines += buf->sgmlCloseTag(os, depth + command_depth, mixcont, style->latexname());
                        break;
                default:
-                       lines += buf->sgmlCloseTag(os, depth + command_depth, mixcont, style.latexname());
+                       lines += buf->sgmlCloseTag(os, depth + command_depth, mixcont, style->latexname());
                        break;
                }
        }
@@ -1740,9 +1740,9 @@ void InsetText::validate(LaTeXFeatures & features) const
 }
 
 
-int InsetText::beginningOfMainBody(Buffer const * buf, Paragraph * p) const
+int InsetText::beginningOfMainBody(Paragraph * p) const
 {
-       if (textclasslist[buf->params.textclass][p->layout()].labeltype != LABEL_MANUAL)
+       if (p->layout()->labeltype != LABEL_MANUAL)
                return 0;
        else
                return p->beginningOfMainBody();
index fefd364ff8676132dd0b99daeb8f9fb12f9a0fd1..971634b65ef748c22526424e338c482ddace643e 100644 (file)
@@ -286,7 +286,7 @@ private:
        ///
        typedef Cache::value_type value_type;
        ///
-       int beginningOfMainBody(Buffer const *, Paragraph * par) const;
+       int beginningOfMainBody(Paragraph * par) const;
        ///
        UpdatableInset::RESULT moveRight(BufferView *,
                                         bool activate_inset = true,
index 2e2983271755cd526622eecf15ef8fff85a8df90..6548ea1edb4e9b619eb375f0e5a1e4a71e7369b6 100644 (file)
@@ -433,13 +433,12 @@ void MenuInsertLabel(BufferView * bv, string const & arg)
        bv->owner()->prohibitInput();
        if (label.empty()) {
                Paragraph * par = bv->getLyXText()->cursor.par();
-               LyXTextClass const & tclass =
-                       textclasslist[bv->buffer()->params.textclass];
-               LyXLayout const * layout = &tclass[par->layout()];
-
+               LyXLayout_ptr layout = par->layout();
                if (layout->latextype == LATEX_PARAGRAPH && par->previous()) {
                        Paragraph * par2 = par->previous();
-                       LyXLayout const * layout2 = &tclass[par2->layout()];
+
+                       LyXLayout_ptr const & layout2 = par2->layout();
+
                        if (layout2->latextype != LATEX_PARAGRAPH) {
                                par = par2;
                                layout = layout2;
index fb84f8ed6b00856a45724f10a81d7c01b779466d..0e9e289c9e75c0c1fc41e065d21185b3f9ad9b38 100644 (file)
@@ -14,7 +14,7 @@
 #endif
 
 #include "lyx_main.h"
+
 #include "support/filetools.h"
 #include "support/lyxlib.h"
 #include "support/os.h"
@@ -23,7 +23,7 @@
 #include "debug.h"
 #include "gettext.h"
 #include "lyxlex.h"
+
 #include "bufferlist.h"
 #include "lyxtextclasslist.h"
 #include "lyxserver.h"
@@ -55,7 +55,7 @@ extern void LoadLyXFile(string const &);
 extern void QuitLyX();
 
 extern LyXServer * lyxserver;
+
 string system_lyxdir;
 string build_lyxdir;
 string system_tempdir;
@@ -118,7 +118,7 @@ LyX::LyX(int & argc, char * argv[])
        if (first_start) {
                files.push_back(i18nLibFileSearch("examples", "splash.lyx"));
        }
+
 #if 0 // FIXME: GUII
        // Execute batch commands if available
        if (!batch_command.empty()) {
@@ -130,7 +130,7 @@ LyX::LyX(int & argc, char * argv[])
                        last_loaded = bufferlist.newFile("tmpfile", string());
 
                bool success = false;
+
                // try to dispatch to last loaded buffer first
                bool const dispatched = last_loaded->dispatch(batch_command, &success);
 
@@ -145,7 +145,7 @@ LyX::LyX(int & argc, char * argv[])
        lyx_gui::start(batch_command, files);
 }
 
+
 extern "C" {
 
 static
@@ -819,7 +819,7 @@ bool LyX::easyParse(int & argc, char * argv[])
                        commandLineVersionInfo();
                        exit(0);
                }
-               // FIXME: why is this commented out ? 
+               // FIXME: why is this commented out ?
                // Check for "-nw": No XWindows as for emacs this should
                // give a LyX that could be used in a terminal window.
                //else if (arg == "-nw") {
@@ -836,7 +836,7 @@ bool LyX::easyParse(int & argc, char * argv[])
                                lyxerr << _("Missing command string after  -x switch!") << endl;
 
                        // Argh. Setting gui to false segfaults..
-                       // FIXME: when ? how ? 
+                       // FIXME: when ? how ?
                        // gui = false;
                }
 
@@ -859,11 +859,11 @@ bool LyX::easyParse(int & argc, char * argv[])
                                        lyxerr << _("Missing filename for --import") << endl;
                                        exit(1);
                                }
+
                                string const file(argv[i+2]);
                                string const type(argv[i+1]);
                                removeargs = 3;
+
                                batch_command = "buffer-import " + type + " " + file;
                                lyxerr << "batch_command: "
                                       << batch_command << endl;
index 78dd3b416b66e44fa983e51123b91641cf41881a..0b2a5c5906f44411e41f7fcb3f07e798ebd5982f 100644 (file)
@@ -98,7 +98,7 @@ int LyXReplace(BufferView * bv,
 
        return replace_count;
 }
+
 
 bool LyXFind(BufferView * bv,
             string const & searchstr, bool forward,
@@ -135,7 +135,7 @@ bool LyXFind(BufferView * bv,
 
        bv->toggleSelection();
        text->clearSelection();
-       
+
        SearchResult result = forward ?
                SearchForward(bv, text, searchstr, casesens, matchwrd) :
                SearchBackward(bv, text, searchstr, casesens, matchwrd);
@@ -158,7 +158,7 @@ bool LyXFind(BufferView * bv,
 
        return found;
 }
+
 
 SearchResult LyXFind(BufferView * bv, LyXText * text,
                     string const & searchstr, bool forward,
index 4a0202e35fbb41b2d93e30ea1a3ceb4cac651f15..e1850f85bf76c6c14a7645c06b1edcf7db36d230 100644 (file)
@@ -1906,7 +1906,7 @@ void LyXFunc::doImport(string const & argument)
 
        lyxerr[Debug::INFO] << "LyXFunc::doImport: " << format
                            << " file: " << filename << endl;
+
        // need user interaction
        if (filename.empty()) {
                string initpath = lyxrc.document_path;
@@ -1974,7 +1974,7 @@ void LyXFunc::doImport(string const & argument)
                        }
        }
 
-       // if the file exists already, and we didn't do 
+       // if the file exists already, and we didn't do
        // -i lyx thefile.lyx, warn
        if (FileInfo(lyxfile, true).exist() && filename != lyxfile) {
                if (!Alert::askQuestion(_("A document by the name"),
index 130c12803953e50a632c6b5a90679c6ffb900c15..2f6b0fc84d796c6a6d320947a77bd801da6967d6 100644 (file)
@@ -183,15 +183,20 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                                if (tclass.hasLayout(style)) {
                                        string const tmpname = name_;
-                                       this->operator=(tclass[style]);
+                                       this->operator=(*tclass[style]);
                                        name_ = tmpname;
                                } else {
-                                       lyxerr << "Cannot copy unknown style `" << style << "'" << endl;
-                                       LyXTextClass::const_iterator it = tclass.begin();
-                                       LyXTextClass::const_iterator end = tclass.end();
-                                       lyxerr << "All layouts so far:" << endl;
+                                       lyxerr << "Cannot copy unknown style `"
+                                              << style << "'\n"
+                                              << "All layouts so far:"
+                                              << endl;
+                                       LyXTextClass::const_iterator it =
+                                               tclass.begin();
+                                       LyXTextClass::const_iterator end =
+                                               tclass.end();
                                        for (; it != end; ++it) {
-                                               lyxerr << it->name() << endl;
+                                               lyxerr << (*it)->name()
+                                                      << endl;
                                        }
 
                                        //lexrc.printError("Cannot copy known "
@@ -206,7 +211,7 @@ bool LyXLayout::Read (LyXLex & lexrc, LyXTextClass const & tclass)
 
                                if (tclass.hasLayout(style)) {
                                        string const tmpname = name_;
-                                       this->operator=(tclass[style]);
+                                       this->operator=(*tclass[style]);
                                        name_ = tmpname;
                                        if (obsoleted_by().empty())
                                                obsoleted_by_ = style;
diff --git a/src/lyxlayout_ptr_fwd.h b/src/lyxlayout_ptr_fwd.h
new file mode 100644 (file)
index 0000000..dfd6695
--- /dev/null
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *
+ *           Copyright 1995 Matthias Ettrich
+ *           Copyright 1995-2001 The LyX Team.
+ *
+ * ====================================================== */
+
+#ifndef LYXLAYOUT_PTR_FWD_H
+#define LYXLAYOUT_PTR_FWD_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <boost/shared_ptr.hpp>
+
+class LyXLayout;
+
+/// Global typedef
+typedef boost::shared_ptr<LyXLayout> LyXLayout_ptr;
+
+#endif
index 21d0cbf5070269790b264bfaed9dfb01994bfb90..271c9dd3cce6acf1458d7862b2c04b1bf1e6e2a8 100644 (file)
@@ -31,6 +31,20 @@ using std::find_if;
 using std::remove_if;
 using std::ostream;
 
+namespace { // anon
+
+struct compare_name {
+       compare_name(string const & name)
+               : name_(name) {}
+       template <class C>
+       bool operator()(C & c) {
+               return c->name() == name_;
+       }
+       string name_;
+};
+
+} // anon
+
 
 LyXTextClass::LyXTextClass(string const & fn, string const & cln,
                           string const & desc)
@@ -183,14 +197,14 @@ bool LyXTextClass::Read(string const & filename, bool merge)
                                string const name = subst(lexrc.getString(),
                                                    '_', ' ');
                                if (hasLayout(name)) {
-                                       LyXLayout & lay =
-                                               const_cast<LyXLayout &>(operator[](name));
-                                       error = do_readStyle(lexrc, lay);
+                                       LyXLayout * lay =
+                                               operator[](name).get();
+                                       error = do_readStyle(lexrc, *lay);
                                } else {
                                        LyXLayout lay;
                                        lay.setName(name);
                                        if (!(error = do_readStyle(lexrc, lay)))
-                                               layoutlist.push_back(lay);
+                                               layoutlist.push_back(boost::shared_ptr<LyXLayout>(new LyXLayout(lay)));
                                        if (defaultlayout_.empty()) {
                                                // We do not have a default
                                                // layout yet, so we choose
@@ -504,12 +518,12 @@ bool LyXTextClass::hasLayout(string const & n) const
        string const name = (n.empty() ? defaultLayoutName() : n);
 
        return find_if(layoutlist.begin(), layoutlist.end(),
-                      lyx::compare_memfun(&LyXLayout::name, name))
+                      compare_name(name))
                != layoutlist.end();
 }
 
 
-LyXLayout const & LyXTextClass::operator[](string const & n) const
+LyXLayout_ptr const & LyXTextClass::operator[](string const & n) const
 {
        lyx::Assert(!n.empty());
 
@@ -527,7 +541,7 @@ LyXLayout const & LyXTextClass::operator[](string const & n) const
        LayoutList::const_iterator cit =
                find_if(layoutlist.begin(),
                        layoutlist.end(),
-                       lyx::compare_memfun(&LyXLayout::name, name));
+                       compare_name(name));
 
        if (cit == layoutlist.end()) {
                lyxerr << "We failed to find the layout '" << name
@@ -541,7 +555,7 @@ LyXLayout const & LyXTextClass::operator[](string const & n) const
        lastLayoutName = name;
        lastLayoutIndex = std::distance(layoutlist.begin(), cit);
 
-       return *cit;
+       return (*cit);
 }
 
 
@@ -552,7 +566,8 @@ bool LyXTextClass::delete_layout(string const & name)
 
        LayoutList::iterator it =
                remove_if(layoutlist.begin(), layoutlist.end(),
-                         lyx::compare_memfun(&LyXLayout::name, name));
+                         compare_name(name));
+
        LayoutList::iterator end = layoutlist.end();
        bool const ret = (it != end);
        layoutlist.erase(it, end);
@@ -589,7 +604,7 @@ string const LyXTextClass::defaultLayoutName() const
 }
 
 
-LyXLayout const & LyXTextClass::defaultLayout() const
+LyXLayout_ptr const & LyXTextClass::defaultLayout() const
 {
        return operator[](defaultLayoutName());
 }
index 295148afc51ef7b3e64f30fda4f1ebdd5807efcd..1a8a6e8633563dd1d35ab843c3a799c235180685 100644 (file)
 #endif
 
 #include "lyxlayout.h"
+#include "LString.h"
+#include "lyxlayout_ptr_fwd.h"
 
 #include "support/types.h"
 
-#include "LString.h"
-
 #include <vector>
 
 class LyXLex;
 
-
-
 ///
 class LyXTextClass {
 public:
        ///
-       typedef std::vector<LyXLayout> LayoutList;
+       typedef std::vector<LyXLayout_ptr> LayoutList;
        ///
        typedef LayoutList::const_iterator const_iterator;
        ///
@@ -58,7 +56,7 @@ public:
        bool hasLayout(string const & name) const;
 
        ///
-       LyXLayout const & operator[](string const & vname) const;
+       LyXLayout_ptr const & operator[](string const & vname) const;
 
        /// Sees to that the textclass structure has been loaded
        bool load() const;
@@ -66,7 +64,7 @@ public:
        ///
        string const defaultLayoutName() const;
        ///
-       LyXLayout const & defaultLayout() const;
+       LyXLayout_ptr const & defaultLayout() const;
        ///
        string const & name() const;
        ///
index 4a5644cb92ebeace78f9884599aaabea12e9ba2e..14f895d9acc00ca4f580206b4094eb222b67dc1d 100644 (file)
@@ -1,8 +1,13 @@
+#include <config.h>
 
 #include "button_inset.h"
 #include "math_support.h"
 #include "frontends/Painter.h"
 
+#include <algorithm>
+
+using std::max;
+
 
 ButtonInset::ButtonInset()
        : MathNestInset(2)
@@ -38,4 +43,3 @@ void ButtonInset::draw(MathPainterInfo & pi, int x, int y) const
                        pi.base.font);
        }
 }
-
index 9c9b57e3183ae3ea037efcbd1ef1478e441c4aa5..f84f38c25965fc8c0a50330d8dead9934e99a01b 100644 (file)
@@ -193,7 +193,7 @@ void InsetFormula::draw(BufferView * bv, LyXFont const & font,
        if (grfx::ImagePtr image = preview(os.str()))
                pain.image(x, y, w, h, *image);
 #endif
-       
+
        xx += par_->width();
        xo_ = x;
        yo_ = y;
index aec69509a231f78be40d27697f370ae7cf207009..00df0bec9994939132d66f6067f56e389592ec07 100644 (file)
@@ -272,7 +272,7 @@ void InsetFormulaBase::fitInsetCursor(BufferView * bv) const
 {
        if (!mathcursor)
                return;
-       
+
        int const asc = font_metrics::maxAscent(font_);
        int const desc = font_metrics::maxDescent(font_);
        int x, y;
index 54d0fdcc23e1f78a5e8d2f6e6f6ca1a4f60a421e..33ce2d78b73ec2736c9744ce2be1aa1e8f8767fc 100644 (file)
@@ -340,7 +340,7 @@ void MathCursor::insert(string const & str)
 void MathCursor::insert(char c)
 {
        //lyxerr << "inserting '" << c << "'\n";
-       selClearOrDel();        
+       selClearOrDel();
        plainInsert(MathAtom(new MathCharInset(c)));
 }
 
@@ -907,7 +907,7 @@ MathCursor::col_type MathCursor::hullCol() const
 {
        idx_type idx = 0;
        MathHullInset * p = enclosingHull(idx);
-       return p->col(idx);
+       return p->col(idx);
 }
 
 
@@ -915,7 +915,7 @@ MathCursor::row_type MathCursor::hullRow() const
 {
        idx_type idx = 0;
        MathHullInset * p = enclosingHull(idx);
-       return p->row(idx);
+       return p->row(idx);
 }
 
 
@@ -1109,7 +1109,7 @@ bool MathCursor::goUpDown(bool up)
        // check if we had something else in mind, if not, this is the future goal
        if (targetx_ == -1)
                targetx_ = xo;
-       else    
+       else
                xo = targetx_;
 
        // try neigbouring script insets
@@ -1522,7 +1522,7 @@ bool MathCursor::interpret(char c)
 
        // no special circumstances, so insert the character without any fuss
        insert(c);
-       autocorrect_ = true;  
+       autocorrect_ = true;
        return true;
 }
 
@@ -1557,7 +1557,7 @@ string MathCursor::info() const
                Cursor_[i].par_->infoize(os);
                os << "  ";
        }
-       //if (pos() > 0) 
+       //if (pos() > 0)
        //      prevAtom()->infoize(os);
        os << "                ";
        return os.str().c_str(); // .c_str() needed for lyxstring
@@ -1675,7 +1675,7 @@ void MathCursor::handleExtern(const string & arg)
        iss >> lang >> extra;
        if (extra.empty())
                extra = "noextra";
-       
+
 
        if (selection()) {
                MathArray ar;
@@ -1710,7 +1710,7 @@ void MathCursor::handleExtern(const string & arg)
                insert(pipeThroughExtern(lang, extra, ar));
                return;
        }
-       
+
        if (hull->getType() == LM_OT_EQUATION) {
                lyxerr << "use equation inset\n";
                hull->mutate(LM_OT_EQNARRAY);
@@ -1722,8 +1722,8 @@ void MathCursor::handleExtern(const string & arg)
                cursor().cell() = pipeThroughExtern(lang, extra, ar);
                idxLineLast();
                return;
-       } 
-       
+       }
+
        {
                lyxerr << "use eqnarray\n";
                idxLineLast();
index 03657b13bc3db686aefe9771c856bf5a1c081c28..9282349eab1bf20d9f11aba696bb4b85da06ea4d 100644 (file)
@@ -10,6 +10,8 @@
 #include "math_mathmlstream.h"
 #include "math_streamstr.h"
 
+#include <ostream>
+
 
 MathDecorationInset::MathDecorationInset(string const & name)
        : MathNestInset(1), name_(name)
index 484bc2b1d02bb939337285356d85e918e02152a2..e9bb698caa764c5047ad4ca44c92539ae98ca187 100644 (file)
@@ -572,7 +572,7 @@ bool Parser::parse_macro(string & name)
        MathMacroTable::create(name, nargs, ar1, ar2);
        return true;
 }
+
 
 bool Parser::parse_normal(MathAtom & at)
 {
@@ -722,7 +722,7 @@ void Parser::parse_into1(MathGridInset & grid, unsigned flags,
                else if (t.cat() == catAlign) {
                        ++cellcol;
                        //lyxerr << " column now " << cellcol << " max: " << grid.ncols() << "\n";
-                       if (cellcol == grid.ncols()) { 
+                       if (cellcol == grid.ncols()) {
                                lyxerr << "adding column " << cellcol << "\n";
                                grid.addCol(cellcol - 1);
                        }
@@ -811,7 +811,7 @@ void Parser::parse_into1(MathGridInset & grid, unsigned flags,
                        // resize the table if necessary
                        for (int i = 0; i < cols; ++i) {
                                ++cellcol;
-                               if (cellcol == grid.ncols()) { 
+                               if (cellcol == grid.ncols()) {
                                        lyxerr << "adding column " << cellcol << "\n";
                                        grid.addCol(cellcol - 1);
                                }
index f5cdf86f29a561aacf05ce9368bb53a3227ea89e..81e56d569b86d3d6ee68d3bf3d22318da3529b42 100644 (file)
@@ -1,4 +1,3 @@
-
 #include <config.h>
 
 #include "formula.h"
@@ -60,7 +59,7 @@ grfx::ImagePtr preview(string const & str)
        // do we already have access to a rendered version?
        previews_map::const_iterator it = thePreviews.find(str);
        if (it != thePreviews.end())
-               return it->second;      
+               return it->second;
 
        // constructing new item
        //grfx::ImagePtr & im = thePreviews[str];
@@ -130,4 +129,3 @@ grfx::ImagePtr preview(string const & str)
 #endif
        return it->second;      
 }
-
index c607d198121245ad87c79ea1065121d092415bf5..89ef47cd1e0169e1d5e8c6a4c3543e9117930426 100644 (file)
@@ -1,3 +1,4 @@
+#include <config.h>
 
 #include "ref_inset.h"
 #include "math_cursor.h"
@@ -10,6 +11,8 @@
 #include "lyxfunc.h"
 #include "gettext.h"
 #include "LaTeXFeatures.h"
+#include "debug.h"
+
 
 RefInset::RefInset()
        : CommandInset("ref")
@@ -33,17 +36,17 @@ void RefInset::infoize(std::ostream & os) const
 }
 
 
-int RefInset::dispatch(string const & cmd, idx_type, pos_type) 
+int RefInset::dispatch(string const & cmd, idx_type, pos_type)
 {
        if (cmd == "mouse 3") {
-               cerr << "trying to goto ref" << cell(0) << "\n";
+               lyxerr << "trying to goto ref" << cell(0) << "\n";
                mathcursor->formula()->view()->owner()->getLyXFunc()->
                        dispatch(LFUN_REF_GOTO, asString(cell(0)));
                return 1; // dispatched
        }
-       
+
        if (cmd == "mouse 1") {
-               cerr << "trying to open ref" << cell(0) << "\n";
+               lyxerr << "trying to open ref" << cell(0) << "\n";
                // Eventually trigger dialog with button 3 not 1
 //             mathcursor->formula()->view()->owner()->getDialogs()
 //                     ->showRef(this);
@@ -108,6 +111,7 @@ int RefInset::docbook(std::ostream & os, bool) const
        return 0;
 }
 
+
 RefInset::type_info RefInset::types[] = {
        { "ref",        N_("Standard"),                 N_("Ref: ")},
        { "pageref",    N_("Page Number"),              N_("Page: ")},
index f8acbc5fa42f7c61671a49e5f3c8fb98b894478b..94a7a6cc136b8ec3f5c8f6adf350afd5e06a2575 100644 (file)
@@ -209,7 +209,7 @@ int MiniBuffer::peek_event(FL_OBJECT * ob, int event, int key)
                case 27:
                case XK_Escape:
                        // Abort
-                       // FIXME: really needed ? when ? 
+                       // FIXME: really needed ? when ?
                        //owner_->view()->focus(true);
                        init();
                        deactivate();
@@ -236,7 +236,7 @@ int MiniBuffer::peek_event(FL_OBJECT * ob, int event, int key)
 #endif
                                // Return the inputted string
                                deactivate();
-                               // FIXME: really needed ? when ? 
+                               // FIXME: really needed ? when ?
                                //owner_->view()->focus(true);
                                if (!input.empty()) {
                                        history_->push_back(input);
index 4bb88f2b824be88429f5616c7777add205cba1c6..f92968bac2cf75f008b6f518700e99fcd21928cd 100644 (file)
@@ -189,12 +189,7 @@ void Paragraph::writeFile(Buffer const * buf, ostream & os,
        }
 
        // First write the layout
-       string lay = layout();
-       if (lay.empty()) {
-               lay = textclasslist[bparams.textclass].defaultLayoutName();
-       }
-
-       os << "\n\\layout " << layout() << "\n";
+       os << "\n\\layout " << layout()->name() << "\n";
 
        // Maybe some vertical spaces.
        if (params().spaceTop().kind() != VSpace::NONE)
@@ -346,7 +341,7 @@ void Paragraph::validate(LaTeXFeatures & features) const
                features.require("setspace");
 
        // then the layouts
-       features.useLayout(layout());
+       features.useLayout(layout()->name());
 
        // then the fonts
        Language const * doc_language = bparams.language;
@@ -397,14 +392,14 @@ void Paragraph::validate(LaTeXFeatures & features) const
                features.require("ParagraphLeftIndent");
 
        // then the insets
-       LyXLayout const & lout = textclasslist[bparams.textclass][layout()];
+       LyXLayout_ptr const & lout = layout();
 
        InsetList::const_iterator icit = insetlist.begin();
        InsetList::const_iterator iend = insetlist.end();
        for (; icit != iend; ++icit) {
                if (icit->inset) {
                        icit->inset->validate(features);
-                       if (lout.needprotect &&
+                       if (lout->needprotect &&
                            icit->inset->lyxCode() == Inset::FOOT_CODE)
                                features.require("NeedLyXFootnoteCode");
                }
@@ -644,17 +639,17 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams,
 {
        lyx::Assert(pos >= 0);
 
-       LyXLayout const & lout =
-               textclasslist[bparams.textclass][layout()];
+       LyXLayout_ptr const & lout = layout();
+
        pos_type main_body = 0;
-       if (lout.labeltype == LABEL_MANUAL)
+       if (lout->labeltype == LABEL_MANUAL)
                main_body = beginningOfMainBody();
 
        LyXFont layoutfont;
        if (pos < main_body)
-               layoutfont = lout.labelfont;
+               layoutfont = lout->labelfont;
        else
-               layoutfont = lout.font;
+               layoutfont = lout->font;
 
        LyXFont tmpfont = getFontSettings(bparams, pos);
 #ifndef INHERIT_LANGUAGE
@@ -669,10 +664,9 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams,
 
 LyXFont const Paragraph::getLabelFont(BufferParams const & bparams) const
 {
-       LyXLayout const & lout =
-               textclasslist[bparams.textclass][layout()];
+       LyXLayout_ptr const & lout = layout();
 
-       LyXFont tmpfont = lout.labelfont;
+       LyXFont tmpfont = lout->labelfont;
        tmpfont.setLanguage(getParLanguage(bparams));
 
        return pimpl_->realizeFont(tmpfont, bparams);
@@ -681,10 +675,9 @@ LyXFont const Paragraph::getLabelFont(BufferParams const & bparams) const
 
 LyXFont const Paragraph::getLayoutFont(BufferParams const & bparams) const
 {
-       LyXLayout const & lout =
-               textclasslist[bparams.textclass][layout()];
+       LyXLayout_ptr const & lout = layout();
 
-       LyXFont tmpfont = lout.font;
+       LyXFont tmpfont = lout->font;
        tmpfont.setLanguage(getParLanguage(bparams));
 
        return pimpl_->realizeFont(tmpfont, bparams);
@@ -877,8 +870,7 @@ void Paragraph::breakParagraph(BufferParams const & bparams,
 {
        // create a new paragraph
        Paragraph * tmp = new Paragraph(this);
-       tmp->layout(textclasslist[bparams.textclass].defaultLayoutName());
-
+       tmp->layout(textclasslist[bparams.textclass].defaultLayout());
        // remember to set the inset_owner
        tmp->setInsetOwner(inInset());
 
@@ -891,8 +883,8 @@ void Paragraph::breakParagraph(BufferParams const & bparams,
                tmp->setLabelWidthString(params().labelWidthString());
        }
 
-       bool isempty = (textclasslist[bparams.textclass][layout()].keepempty &&
-                       !size());
+       bool isempty = (layout()->keepempty && !size());
+
        if (!isempty && (size() > pos || !size() || flag == 2)) {
                tmp->layout(layout());
                tmp->params().align(params().align());
@@ -932,7 +924,8 @@ void Paragraph::breakParagraph(BufferParams const & bparams,
 
                bibkey = 0;
                params().clear();
-               layout(textclasslist[bparams.textclass].defaultLayoutName());
+
+               layout(textclasslist[bparams.textclass].defaultLayout());
 
                // layout stays the same with latex-environments
                if (flag) {
@@ -952,9 +945,9 @@ void Paragraph::makeSameLayout(Paragraph const * par)
 }
 
 
-int Paragraph::stripLeadingSpaces(lyx::textclass_type tclass)
+int Paragraph::stripLeadingSpaces()
 {
-       if (textclasslist[tclass][layout()].free_spacing ||
+       if (layout()->free_spacing ||
            isFreeSpacing()) {
                return 0;
        }
@@ -1037,14 +1030,14 @@ void Paragraph::pasteParagraph(BufferParams const & bparams)
 }
 
 
-int Paragraph::getEndLabel(BufferParams const & bparams) const
+int Paragraph::getEndLabel() const
 {
        Paragraph const * par = this;
        depth_type par_depth = getDepth();
        while (par) {
-               string const & layout = par->layout();
-               int const endlabeltype =
-                       textclasslist[bparams.textclass][layout].endlabeltype;
+               LyXLayout_ptr const & layout = par->layout();
+               int const endlabeltype = layout->endlabeltype;
+
                if (endlabeltype != END_LABEL_NO_LABEL) {
                        if (!next_)
                                return endlabeltype;
@@ -1072,9 +1065,9 @@ Paragraph::depth_type Paragraph::getDepth() const
 }
 
 
-Paragraph::depth_type Paragraph::getMaxDepthAfter(Buffer const * buffer) const
+Paragraph::depth_type Paragraph::getMaxDepthAfter() const
 {
-       bool const isenv = textclasslist[buffer->params.textclass][layout()].isEnvironment();
+       bool const isenv = layout()->isEnvironment();
 
        if (isenv)
                return params().depth() + 1;
@@ -1117,7 +1110,7 @@ void Paragraph::setLabelWidthString(string const & s)
 }
 
 
-void Paragraph::applyLayout(string const & new_layout)
+void Paragraph::applyLayout(LyXLayout_ptr const & new_layout)
 {
        layout(new_layout);
        params().labelWidthString(string());
@@ -1254,14 +1247,14 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
        lyxerr[Debug::LATEX] << "TeXOnePar...     " << this << endl;
        Inset const * in = inInset();
        bool further_blank_line = false;
-       LyXLayout style;
+       LyXLayout_ptr style;
 
        // well we have to check if we are in an inset with unlimited
        // lenght (all in one row) if that is true then we don't allow
        // any special options in the paragraph and also we don't allow
        // any environment other then "Standard" to be valid!
        if ((in == 0) || !in->forceDefaultParagraphs(in)) {
-               style = textclasslist[bparams.textclass][layout()];
+               style = layout();
 
                if (params().startOfAppendix()) {
                        os << "\\appendix\n";
@@ -1274,7 +1267,7 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
                        texrow.newline();
                }
 
-               if (tex_code_break_column && style.isCommand()) {
+               if (tex_code_break_column && style->isCommand()) {
                        os << '\n';
                        texrow.newline();
                }
@@ -1309,7 +1302,7 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
 
        if (language->babel() != previous_language->babel()
            // check if we already put language command in TeXEnvironment()
-           && !(style.isEnvironment()
+           && !(style->isEnvironment()
                 && (!previous() || previous()->layout() != layout() ||
                         previous()->params().depth() != params().depth())))
        {
@@ -1340,11 +1333,11 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
                texrow.newline();
        }
 
-       switch (style.latextype) {
+       switch (style->latextype) {
        case LATEX_COMMAND:
                os << '\\'
-                  << style.latexname()
-                  << style.latexparam();
+                  << style->latexname()
+                  << style->latexparam();
                break;
        case LATEX_ITEM_ENVIRONMENT:
                if (bibkey) {
@@ -1374,9 +1367,9 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
                (size() == 0
                 ? getLayoutFont(bparams) : getFont(bparams, size() - 1));
 
-       bool is_command = style.isCommand();
+       bool is_command = style->isCommand();
 
-       if (style.resfont.size() != font.size() && next_ && !is_command) {
+       if (style->resfont.size() != font.size() && next_ && !is_command) {
                if (!need_par)
                        os << "{";
                os << "\\" << font.latexSize() << " \\par}";
@@ -1385,7 +1378,7 @@ Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
        } else if (is_command)
                os << "}";
 
-       switch (style.latextype) {
+       switch (style->latextype) {
        case LATEX_ITEM_ENVIRONMENT:
        case LATEX_LIST_ENVIRONMENT:
                if (next_ && (params().depth() < next_->params().depth())) {
@@ -1559,7 +1552,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
 
        bool return_value = false;
 
-       LyXLayout style;
+       LyXLayout_ptr style;
 
        // well we have to check if we are in an inset with unlimited
        // lenght (all in one row) if that is true then we don't allow
@@ -1571,14 +1564,14 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
        if (asdefault) {
                style = textclasslist[bparams.textclass].defaultLayout();
        } else {
-               style = textclasslist[bparams.textclass][layout()];
+               style = layout();
        }
 
        LyXFont basefont;
 
        // Maybe we have to create a optional argument.
        pos_type main_body;
-       if (style.labeltype != LABEL_MANUAL)
+       if (style->labeltype != LABEL_MANUAL)
                main_body = 0;
        else
                main_body = beginningOfMainBody();
@@ -1593,7 +1586,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                basefont = getLayoutFont(bparams);
        }
 
-       moving_arg |= style.needprotect;
+       moving_arg |= style->needprotect;
 
        // Which font is currently active?
        LyXFont running_font(basefont);
@@ -1604,7 +1597,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
 
        // if the paragraph is empty, the loop will not be entered at all
        if (!size()) {
-               if (style.isCommand()) {
+               if (style->isCommand()) {
                        os << '{';
                        ++column;
                }
@@ -1627,7 +1620,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                                os << ']';
                                ++column;
                        }
-                       if (style.isCommand()) {
+                       if (style->isCommand()) {
                                os << '{';
                                ++column;
                        }
@@ -1671,7 +1664,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                        // Do not print the separation of the optional argument
                        if (i != main_body - 1) {
                                pimpl_->simpleTeXBlanks(os, texrow, i,
-                                                      column, font, style);
+                                                      column, font, *style);
                        }
                }
 
@@ -1689,7 +1682,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                if (c == Paragraph::META_NEWLINE) {
                        // newlines are handled differently here than
                        // the default in SimpleTeXSpecialChars().
-                       if (!style.newline_allowed) {
+                       if (!style->newline_allowed) {
                                os << '\n';
                        } else {
                                if (open_font) {
@@ -1715,7 +1708,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                                                      os, texrow, moving_arg,
                                                      font, running_font,
                                                      basefont, open_font,
-                                                     style, i, column, c);
+                                                     *style, i, column, c);
                }
        }
 
@@ -1826,8 +1819,7 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
 {
        lyxerr[Debug::LATEX] << "TeXEnvironment...     " << this << endl;
 
-       LyXLayout const & style =
-               textclasslist[bparams.textclass][layout()];
+       LyXLayout_ptr const & style = layout();
 
        Language const * language = getParLanguage(bparams);
        Language const * doc_language = bparams.language;
@@ -1860,21 +1852,21 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
                leftindent_open = true;
        }
 
-       if (style.isEnvironment()) {
-               if (style.latextype == LATEX_LIST_ENVIRONMENT) {
-                       os << "\\begin{" << style.latexname() << "}{"
+       if (style->isEnvironment()) {
+               if (style->latextype == LATEX_LIST_ENVIRONMENT) {
+                       os << "\\begin{" << style->latexname() << "}{"
                           << params().labelWidthString() << "}\n";
-               } else if (style.labeltype == LABEL_BIBLIO) {
+               } else if (style->labeltype == LABEL_BIBLIO) {
                        // ale970405
-                       os << "\\begin{" << style.latexname() << "}{"
+                       os << "\\begin{" << style->latexname() << "}{"
                           <<  bibitemWidest(buf)
                           << "}\n";
-               } else if (style.latextype == LATEX_ITEM_ENVIRONMENT) {
-                       os << "\\begin{" << style.latexname() << '}'
-                          << style.latexparam() << '\n';
+               } else if (style->latextype == LATEX_ITEM_ENVIRONMENT) {
+                       os << "\\begin{" << style->latexname() << '}'
+                          << style->latexparam() << '\n';
                } else
-                       os << "\\begin{" << style.latexname() << '}'
-                          << style.latexparam() << '\n';
+                       os << "\\begin{" << style->latexname() << '}'
+                          << style->latexparam() << '\n';
                texrow.newline();
        }
        Paragraph * par = this;
@@ -1882,11 +1874,12 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
                par = par->TeXOnePar(buf, bparams, os, texrow, false);
 
                if (par && par->params().depth() > params().depth()) {
-                       if (textclasslist[bparams.textclass][par->layout()].isParagraph()
+                           if (par->layout()->isParagraph()) {
+
                            // Thinko!
                            // How to handle this? (Lgb)
                            //&& !suffixIs(os, "\n\n")
-                               ) {
+                                   //) {
                                // There should be at least one '\n' already
                                // but we need there to be two for Standard
                                // paragraphs that are depth-increment'ed to be
@@ -1907,8 +1900,8 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
                 && par->params().depth() == params().depth()
                 && par->params().leftIndent() == params().leftIndent());
 
-       if (style.isEnvironment()) {
-               os << "\\end{" << style.latexname() << "}\n";
+       if (style->isEnvironment()) {
+               os << "\\end{" << style->latexname() << "}\n";
                texrow.newline();
        }
 
@@ -2169,16 +2162,14 @@ void  Paragraph::id(int id_arg)
 }
 
 
-string const & Paragraph::layout() const
+LyXLayout_ptr const & Paragraph::layout() const
 {
        return layout_;
 }
 
 
-void Paragraph::layout(string const & new_layout)
+void Paragraph::layout(LyXLayout_ptr const & new_layout)
 {
-       lyx::Assert(!new_layout.empty());
-
        layout_ = new_layout;
 }
 
index 47b1420752f3f33613a592ed2ecfafa0b808a15a..b555faa37686129bc719be17b9fc016207c863fe 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "LString.h"
 
+#include "lyxlayout_ptr_fwd.h"
 #include "insets/inset.h" // Just for Inset::Code
 #include "lyxfont.h" // Just for LyXFont::FONT_SIZE
 #include "support/types.h"
@@ -146,7 +147,7 @@ public:
 
        /** Check if the current paragraph is the last paragraph in a
            proof environment */
-       int getEndLabel(BufferParams const &) const;
+       int getEndLabel() const;
        ///
        Inset * inInset() const;
        ///
@@ -164,9 +165,9 @@ public:
        void clearContents();
 
        ///
-       string const & layout() const;
+       LyXLayout_ptr const & layout() const;
        ///
-       void layout(string const & new_layout);
+       void layout(LyXLayout_ptr const & new_layout);
 
        ///
        void setCounter(int i, int v);
@@ -221,9 +222,9 @@ public:
        /// The nesting depth of a paragraph
        depth_type getDepth() const;
        /// The maximal possible depth of a paragraph after this one
-       depth_type getMaxDepthAfter(Buffer const *) const;
+       depth_type getMaxDepthAfter() const;
        ///
-       void applyLayout(string const & new_layout);
+       void applyLayout(LyXLayout_ptr const & new_layout);
        ///
        int getFirstCounter(int i) const;
        ///
@@ -318,7 +319,7 @@ public:
        Paragraph * getParFromID(int id) const;
 
        ///
-       int stripLeadingSpaces(lyx::textclass_type tclass);
+       int stripLeadingSpaces();
 
 #ifndef NO_PEXTRA_REALLY
        /* If I set a PExtra Indent on one paragraph of a ENV_LIST-TYPE
@@ -338,7 +339,7 @@ public:
        ParagraphParameters const & params() const;
 private:
        ///
-       string layout_;
+       LyXLayout_ptr layout_;
 public:
        /** Both these definitions must be made public to keep Compaq cxx 6.5
         *  happy.
index 4f662fe18258c4c19787388b758f20ca3ceebc5e..76355805cc46f70a9c7abbb985811379a204081a 100644 (file)
@@ -278,7 +278,7 @@ void Paragraph::Pimpl::simpleTeXBlanks(ostream & os, TexRow & texrow,
 bool Paragraph::Pimpl::isTextAt(string const & str, pos_type pos)
 {
        pos_type const len = str.length();
-       
+
        // is the paragraph large enough?
        if (pos + len > size())
                return false;
@@ -384,7 +384,7 @@ void Paragraph::Pimpl::simpleTeXSpecialChars(Buffer const * buf,
                        break;
 
                case '±': case '²': case '³':
-               case '×': case '÷': case '¹': 
+               case '×': case '÷': case '¹':
                case '¬': case 'µ':
                        if ((bparams.inputenc == "latin1" ||
                             bparams.inputenc == "latin9") ||
@@ -544,7 +544,7 @@ Paragraph * Paragraph::Pimpl::TeXDeeper(Buffer const * buf,
        Paragraph * par = owner_;
 
        while (par && par->params().depth() == owner_->params().depth()) {
-               if (textclasslist[bparams.textclass][par->layout()].isEnvironment()) {
+               if (par->layout()->isEnvironment()) {
                        par = par->TeXEnvironment(buf, bparams,
                                                  os, texrow);
                } else {
@@ -584,7 +584,7 @@ LyXFont const Paragraph::Pimpl::realizeFont(LyXFont const & font,
        while (par && par->getDepth() && !tmpfont.resolved()) {
                par = par->outerHook();
                if (par) {
-                       tmpfont.realize(tclass[par->layout()].font
+                       tmpfont.realize(par->layout()->font
 #ifdef INHERIT_LANGUAGE
                                        , bparams.language
 #endif
index 60aaff7b2b6ddfda9a790e63393cf9265b4b8f02..7f4fda7281f9c23cd8cd7449e0a3fc7228c3ec7a 100644 (file)
@@ -54,7 +54,7 @@ struct firster {
 
 
 /**
- * copy elements in the given range to the output iterator 
+ * copy elements in the given range to the output iterator
  * if the predicate evaluates as true
  */
 template <class InputIter, class OutputIter, class Func>
index d3653e8662f7cae1823375006742cbd95786867e..eae53660711a8fe4c323e176fa63c252b4d111f5 100644 (file)
@@ -1449,7 +1449,8 @@ void LyXTabular::OldFormatRead(BufferParams const & bp,
        Paragraph * par = new Paragraph;
        Paragraph * return_par = 0;
 
-       par->layout(textclasslist[bp.textclass].defaultLayoutName());
+       par->layout(textclasslist[bp.textclass].defaultLayout());
+
        string tmptok;
        int pos = 0;
        Paragraph::depth_type depth = 0;
@@ -2371,7 +2372,8 @@ int LyXTabular::docbookRow(Buffer const * buf, ostream & os, int row) const
 }
 
 
-int LyXTabular::docbook(Buffer const * buf, ostream & os, bool mixcont) const
+int LyXTabular::docbook(Buffer const * buf, ostream & os,
+                       bool /*mixcont*/) const
 {
        int ret = 0;
 
index faffc5fce0651bb66442b8b6f3a12642093cfd55..248919e886e86feb2180c058e42961e23738e5e6 100644 (file)
@@ -90,10 +90,9 @@ int LyXText::workWidth(BufferView * bview, Inset * inset) const
                return workWidth(bview);
        }
 
-       LyXLayout const & layout =
-               textclasslist[bview->buffer()->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
-       if (layout.margintype != MARGIN_RIGHT_ADDRESS_BOX) {
+       if (layout->margintype != MARGIN_RIGHT_ADDRESS_BOX) {
                // Optimization here: in most cases, the real row is
                // not needed, but only the par/pos values. So we just
                // construct a dummy row for leftMargin. (JMarc)
@@ -215,7 +214,7 @@ int LyXText::singleWidth(BufferView * bview, Paragraph * par,
                return font_metrics::width(c, font);
 
        } else if (IsHfillChar(c)) {
-               // Because of the representation as vertical lines 
+               // Because of the representation as vertical lines
                return 3;
        } else if (c == Paragraph::META_INSET) {
                Inset * tmpinset = par->getInset(pos);
@@ -707,25 +706,25 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
 
        LyXTextClass const & tclass =
                textclasslist[bview->buffer()->params.textclass];
-       LyXLayout const & layout = tclass[row->par()->layout()];
+       LyXLayout_ptr const & layout = row->par()->layout();
 
-       string parindent = layout.parindent;
+       string parindent = layout->parindent;
 
        int x = LYX_PAPER_MARGIN;
-       
+
        x += font_metrics::signedWidth(tclass.leftmargin(), tclass.defaultfont());
 
        // this is the way, LyX handles the LaTeX-Environments.
        // I have had this idea very late, so it seems to be a
        // later added hack and this is true
        if (!row->par()->getDepth()) {
-               if (row->par()->layout() == tclass.defaultLayoutName()) {
+               if (row->par()->layout() == tclass.defaultLayout()) {
                        // find the previous same level paragraph
                        if (row->par()->previous()) {
                                Paragraph * newpar = row->par()
                                        ->depthHook(row->par()->getDepth());
                                if (newpar &&
-                                   tclass[newpar->layout()].nextnoindent)
+                                   newpar->layout()->nextnoindent)
                                        parindent.erase();
                        }
                }
@@ -738,7 +737,7 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
                // make a corresponding row. Needed to call LeftMargin()
 
                // check wether it is a sufficent paragraph
-               if (newpar && tclass[newpar->layout()].isEnvironment()) {
+               if (newpar && newpar->layout()->isEnvironment()) {
                        Row dummyrow;
                        dummyrow.par(newpar);
                        dummyrow.pos(newpar->size());
@@ -751,67 +750,69 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
                        row->par()->params().depth(0);
                }
 
-               if (newpar && row->par()->layout() == tclass.defaultLayoutName()) {
+               if (newpar && row->par()->layout() == tclass.defaultLayout()) {
                        if (newpar->params().noindent())
                                parindent.erase();
-                       else
-                               parindent = tclass[newpar->layout()].parindent;
+                       else {
+                               parindent = newpar->layout()->parindent;
+                       }
+
                }
        }
 
        LyXFont const labelfont = getLabelFont(bview->buffer(), row->par());
-       switch (layout.margintype) {
+       switch (layout->margintype) {
        case MARGIN_DYNAMIC:
-               if (!layout.leftmargin.empty()) {
-                       x += font_metrics::signedWidth(layout.leftmargin,
+               if (!layout->leftmargin.empty()) {
+                       x += font_metrics::signedWidth(layout->leftmargin,
                                                  tclass.defaultfont());
                }
                if (!row->par()->getLabelstring().empty()) {
-                       x += font_metrics::signedWidth(layout.labelindent,
+                       x += font_metrics::signedWidth(layout->labelindent,
                                                  labelfont);
                        x += font_metrics::width(row->par()->getLabelstring(),
                                            labelfont);
-                       x += font_metrics::width(layout.labelsep, labelfont);
+                       x += font_metrics::width(layout->labelsep, labelfont);
                }
                break;
        case MARGIN_MANUAL:
-               x += font_metrics::signedWidth(layout.labelindent, labelfont);
+               x += font_metrics::signedWidth(layout->labelindent, labelfont);
                if (row->pos() >= beginningOfMainBody(bview->buffer(), row->par())) {
                        if (!row->par()->getLabelWidthString().empty()) {
                                x += font_metrics::width(row->par()->getLabelWidthString(),
                                               labelfont);
-                               x += font_metrics::width(layout.labelsep, labelfont);
+                               x += font_metrics::width(layout->labelsep, labelfont);
                        }
                }
                break;
        case MARGIN_STATIC:
-               x += font_metrics::signedWidth(layout.leftmargin, tclass.defaultfont()) * 4
+               x += font_metrics::signedWidth(layout->leftmargin, tclass.defaultfont()) * 4
                        / (row->par()->getDepth() + 4);
                break;
        case MARGIN_FIRST_DYNAMIC:
-               if (layout.labeltype == LABEL_MANUAL) {
+               if (layout->labeltype == LABEL_MANUAL) {
                        if (row->pos() >= beginningOfMainBody(bview->buffer(), row->par())) {
-                               x += font_metrics::signedWidth(layout.leftmargin,
+                               x += font_metrics::signedWidth(layout->leftmargin,
                                                          labelfont);
                        } else {
-                               x += font_metrics::signedWidth(layout.labelindent,
+                               x += font_metrics::signedWidth(layout->labelindent,
                                                          labelfont);
                        }
                } else if (row->pos()
                           // Special case to fix problems with
                           // theorems (JMarc)
-                          || (layout.labeltype == LABEL_STATIC
-                              && layout.latextype == LATEX_ENVIRONMENT
+                          || (layout->labeltype == LABEL_STATIC
+                              && layout->latextype == LATEX_ENVIRONMENT
                               && ! row->par()->isFirstInSequence())) {
-                       x += font_metrics::signedWidth(layout.leftmargin,
+                       x += font_metrics::signedWidth(layout->leftmargin,
                                                  labelfont);
-               } else if (layout.labeltype != LABEL_TOP_ENVIRONMENT
-                          && layout.labeltype != LABEL_BIBLIO
-                          && layout.labeltype !=
+               } else if (layout->labeltype != LABEL_TOP_ENVIRONMENT
+                          && layout->labeltype != LABEL_BIBLIO
+                          && layout->labeltype !=
                           LABEL_CENTERED_TOP_ENVIRONMENT) {
-                       x += font_metrics::signedWidth(layout.labelindent,
+                       x += font_metrics::signedWidth(layout->labelindent,
                                                  labelfont);
-                       x += font_metrics::width(layout.labelsep, labelfont);
+                       x += font_metrics::width(layout->labelsep, labelfont);
                        x += font_metrics::width(row->par()->getLabelstring(),
                                            labelfont);
                }
@@ -835,8 +836,8 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
                        if (tmprow->fill() < minfill)
                                minfill = tmprow->fill();
                }
-               
-               x += font_metrics::signedWidth(layout.leftmargin,
+
+               x += font_metrics::signedWidth(layout->leftmargin,
                        tclass.defaultfont());
                x += minfill;
        }
@@ -855,17 +856,17 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
        LyXAlignment align; // wrong type
 
        if (row->par()->params().align() == LYX_ALIGN_LAYOUT)
-               align = layout.align;
+               align = layout->align;
        else
                align = row->par()->params().align();
 
        // set the correct parindent
        if (row->pos() == 0) {
-               if ((layout.labeltype == LABEL_NO_LABEL
-                    || layout.labeltype == LABEL_TOP_ENVIRONMENT
-                    || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
-                    || (layout.labeltype == LABEL_STATIC
-                        && layout.latextype == LATEX_ENVIRONMENT
+               if ((layout->labeltype == LABEL_NO_LABEL
+                    || layout->labeltype == LABEL_TOP_ENVIRONMENT
+                    || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
+                    || (layout->labeltype == LABEL_STATIC
+                        && layout->latextype == LATEX_ENVIRONMENT
                         && ! row->par()->isFirstInSequence()))
                    && align == LYX_ALIGN_BLOCK
                    && !row->par()->params().noindent()
@@ -873,12 +874,12 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
                        && (!row->par()->inInset() || !row->par()->inInset()->owner() ||
                                (row->par()->inInset()->owner()->lyxCode() != Inset::TABULAR_CODE &&
                                 row->par()->inInset()->owner()->lyxCode() != Inset::ERT_CODE))
-                   && (row->par()->layout() != tclass.defaultLayoutName() ||
+                   && (row->par()->layout() != tclass.defaultLayout() ||
                        bview->buffer()->params.paragraph_separation ==
                        BufferParams::PARSEP_INDENT)) {
                        x += font_metrics::signedWidth(parindent,
                                                  tclass.defaultfont());
-               } else if (layout.labeltype == LABEL_BIBLIO) {
+               } else if (layout->labeltype == LABEL_BIBLIO) {
                        // ale970405 Right width for bibitems
                        x += bibitemMaxWidth(bview, tclass.defaultfont());
                }
@@ -897,7 +898,7 @@ int LyXText::rightMargin(Buffer const * buf, Row const * row) const
                return LYX_PAPER_MARGIN;
 
        LyXTextClass const & tclass = textclasslist[buf->params.textclass];
-       LyXLayout const & layout = tclass[row->par()->layout()];
+       LyXLayout_ptr const & layout = row->par()->layout();
 
        int x = LYX_PAPER_MARGIN
                + font_metrics::signedWidth(tclass.rightmargin(),
@@ -919,7 +920,7 @@ int LyXText::rightMargin(Buffer const * buf, Row const * row) const
                // make a corresponding row. Needed to call LeftMargin()
 
                // check wether it is a sufficent paragraph
-               if (newpar && tclass[newpar->layout()].isEnvironment()) {
+               if (newpar && newpar->layout()->isEnvironment()) {
                        Row dummyrow;
                        dummyrow.par(newpar);
                        dummyrow.pos(0);
@@ -934,7 +935,8 @@ int LyXText::rightMargin(Buffer const * buf, Row const * row) const
        }
 
        //lyxerr << "rightmargin: " << layout->rightmargin << endl;
-       x += font_metrics::signedWidth(layout.rightmargin, tclass.defaultfont())
+       x += font_metrics::signedWidth(layout->rightmargin,
+                                      tclass.defaultfont())
                * 4 / (row->par()->getDepth() + 4);
        return x;
 }
@@ -942,17 +944,16 @@ int LyXText::rightMargin(Buffer const * buf, Row const * row) const
 
 int LyXText::labelEnd(BufferView * bview, Row const * row) const
 {
-       if (textclasslist[bview->buffer()->params.textclass][row->par()->layout()].margintype
-           == MARGIN_MANUAL) {
+       if (row->par()->layout()->margintype == MARGIN_MANUAL) {
                Row tmprow;
                tmprow = *row;
                tmprow.pos(row->par()->size());
-               // just the beginning of the main body 
+               // just the beginning of the main body
                return leftMargin(bview, &tmprow);
        } else {
                // LabelEnd is only needed,
-               // if the layout fills a flushleft label. 
-               return 0; 
+               // if the layout fills a flushleft label.
+               return 0;
        }
 }
 
@@ -975,11 +976,11 @@ LyXText::nextBreakPoint(BufferView * bview, Row const * row, int width) const
 
        pos_type const main_body =
                beginningOfMainBody(bview->buffer(), par);
-       LyXLayout const & layout =
-               textclasslist[bview->buffer()->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
+
        pos_type i = pos;
 
-       if (layout.margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+       if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
                // special code for right address boxes, only newlines count
                while (i < par->size()) {
                        if (par->isNewline(i)) {
@@ -1012,8 +1013,8 @@ LyXText::nextBreakPoint(BufferView * bview, Row const * row, int width) const
                                // valid here. if not, change it to
                                // non-display
                                if (in->display() &&
-                                   (layout.isCommand() ||
-                                    (layout.labeltype == LABEL_MANUAL
+                                   (layout->isCommand() ||
+                                    (layout->labeltype == LABEL_MANUAL
                                      && i < beginningOfMainBody(bview->buffer(), par))))
                                {
                                        // display istn't allowd
@@ -1051,7 +1052,7 @@ LyXText::nextBreakPoint(BufferView * bview, Row const * row, int width) const
                        }
                        ++i;
                        if (i == main_body) {
-                               x += font_metrics::width(layout.labelsep,
+                               x += font_metrics::width(layout->labelsep,
                                                    getLabelFont(bview->buffer(), par));
                                if (par->isLineSeparator(i - 1))
                                        x-= singleWidth(bview, par, i - 1);
@@ -1094,9 +1095,7 @@ int LyXText::fill(BufferView * bview, Row * row, int paper_width) const
        pos_type const last = rowLastPrintable(row);
 
        // special handling of the right address boxes
-       if (textclasslist[bview->buffer()->params.textclass][row->par()->layout()].margintype
-           == MARGIN_RIGHT_ADDRESS_BOX)
-       {
+       if (row->par()->layout()->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
                int const tmpfill = row->fill();
                row->fill(0); // the minfill in MarginLeft()
                w = leftMargin(bview, row);
@@ -1104,14 +1103,15 @@ int LyXText::fill(BufferView * bview, Row * row, int paper_width) const
        } else
                w = leftMargin(bview, row);
 
-       LyXLayout const & layout = textclasslist[bview->buffer()->params.textclass][row->par()->layout()];
+       LyXLayout_ptr const & layout = row->par()->layout();
+
        pos_type const main_body =
                beginningOfMainBody(bview->buffer(), row->par());
        pos_type i = row->pos();
 
        while (i <= last) {
                if (main_body > 0 && i == main_body) {
-                       w += font_metrics::width(layout.labelsep, getLabelFont(bview->buffer(), row->par()));
+                       w += font_metrics::width(layout->labelsep, getLabelFont(bview->buffer(), row->par()));
                        if (row->par()->isLineSeparator(i - 1))
                                w -= singleWidth(bview, row->par(), i - 1);
                        int left_margin = labelEnd(bview, row);
@@ -1122,7 +1122,7 @@ int LyXText::fill(BufferView * bview, Row * row, int paper_width) const
                ++i;
        }
        if (main_body > 0 && main_body > last) {
-               w += font_metrics::width(layout.labelsep, getLabelFont(bview->buffer(), row->par()));
+               w += font_metrics::width(layout->labelsep, getLabelFont(bview->buffer(), row->par()));
                if (last >= 0 && row->par()->isLineSeparator(last))
                        w -= singleWidth(bview, row->par(), last);
                int const left_margin = labelEnd(bview, row);
@@ -1266,8 +1266,7 @@ bool LyXText::hfillExpansion(Buffer const * buf, Row const * row_ptr,
                return true;
 
        // in some labels  it does not count
-       if (textclasslist[buf->params.textclass][row_ptr->par()->layout()].margintype
-           != MARGIN_MANUAL
+       if (row_ptr->par()->layout()->margintype != MARGIN_MANUAL
            && pos < beginningOfMainBody(buf, row_ptr->par()))
                return false;
 
@@ -1305,15 +1304,14 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
        // ok , let us initialize the maxasc and maxdesc value.
        // This depends in LaTeX of the font of the last character
        // in the paragraph. The hack below is necessary because
-       // of the possibility of open footnotes 
+       // of the possibility of open footnotes
 
        // Correction: only the fontsize count. The other properties
-       //  are taken from the layoutfont. Nicer on the screen :) 
+       //  are taken from the layoutfont. Nicer on the screen :)
        Paragraph * par = row_ptr->par();
        Paragraph * firstpar = row_ptr->par();
 
-       LyXLayout const & layout
-               = textclasslist[bview->buffer()->params.textclass][firstpar->layout()];
+       LyXLayout_ptr const & layout = firstpar->layout();
 
        // as max get the first character of this row then it can increes but not
        // decrees the height. Just some point to start with so we don't have to
@@ -1335,11 +1333,11 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
        //lyxerr << "spacing_val = " << spacing_val << endl;
 
        int maxasc = int(font_metrics::maxAscent(font) *
-                        layout.spacing.getValue() *
-                        spacing_val);
+                        layout->spacing.getValue() *
+                        spacing_val);
        int maxdesc = int(font_metrics::maxDescent(font) *
-                         layout.spacing.getValue() *
-                         spacing_val);
+                         layout->spacing.getValue() *
+                         spacing_val);
 
        pos_type const pos_end = rowLast(row_ptr);
        int labeladdon = 0;
@@ -1394,13 +1392,13 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                if (bview->buffer()->params.paragraph_separation ==
                        BufferParams::PARSEP_SKIP)
                {
-                       if (layout.isParagraph()
+                       if (layout->isParagraph()
                                && firstpar->getDepth() == 0
                                && firstpar->previous())
                        {
                                maxasc += bview->buffer()->params.getDefSkip().inPixels(bview);
                        } else if (firstpar->previous() &&
-                                  textclasslist[bview->buffer()->params.textclass][firstpar->previous()->layout()].isParagraph() &&
+                                  firstpar->previous()->layout()->isParagraph() &&
                                   firstpar->previous()->getDepth() == 0)
                        {
                                // is it right to use defskip here too? (AS)
@@ -1427,7 +1425,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
 
                // This is special code for the chapter, since the label of this
                // layout is printed in an extra row
-               if (layout.labeltype == LABEL_COUNTER_CHAPTER
+               if (layout->labeltype == LABEL_COUNTER_CHAPTER
                        && bview->buffer()->params.secnumdepth >= 0)
                {
                        float spacing_val = 1.0;
@@ -1438,17 +1436,17 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                        }
 
                        labeladdon = int(font_metrics::maxDescent(labelfont) *
-                                        layout.spacing.getValue() *
-                                        spacing_val)
+                                        layout->spacing.getValue() *
+                                        spacing_val)
                                + int(font_metrics::maxAscent(labelfont) *
-                                     layout.spacing.getValue() *
+                                     layout->spacing.getValue() *
                                      spacing_val);
                }
 
                // special code for the top label
-               if ((layout.labeltype == LABEL_TOP_ENVIRONMENT
-                    || layout.labeltype == LABEL_BIBLIO
-                    || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
+               if ((layout->labeltype == LABEL_TOP_ENVIRONMENT
+                    || layout->labeltype == LABEL_BIBLIO
+                    || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
                    && row_ptr->par()->isFirstInSequence()
                    && !row_ptr->par()->getLabelstring().empty())
                {
@@ -1461,13 +1459,13 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
 
                        labeladdon = int(
                                (font_metrics::maxAscent(labelfont) *
-                                layout.spacing.getValue() *
+                                layout->spacing.getValue() *
                                 spacing_val)
                                +(font_metrics::maxDescent(labelfont) *
-                                 layout.spacing.getValue() *
+                                 layout->spacing.getValue() *
                                  spacing_val)
-                               + layout.topsep * defaultHeight()
-                               + layout.labelbottomsep *  defaultHeight());
+                               + layout->topsep * defaultHeight()
+                               + layout->labelbottomsep *  defaultHeight());
                }
 
                // and now the layout spaces, for example before and after a section,
@@ -1481,17 +1479,17 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                                prev->getDepth() == firstpar->getDepth() &&
                                prev->getLabelWidthString() == firstpar->getLabelWidthString())
                        {
-                               layoutasc = (layout.itemsep * defaultHeight());
+                               layoutasc = (layout->itemsep * defaultHeight());
                        } else if (row_ptr->previous()) {
-                               tmptop = layout.topsep;
+                               tmptop = layout->topsep;
 
                                if (row_ptr->previous()->par()->getDepth() >= row_ptr->par()->getDepth())
-                                       tmptop -= textclasslist[bview->buffer()->params.textclass][row_ptr->previous()->par()->layout()].bottomsep;
+                                       tmptop -= row_ptr->previous()->par()->layout()->bottomsep;
 
                                if (tmptop > 0)
                                        layoutasc = (tmptop * defaultHeight());
                        } else if (row_ptr->par()->params().lineTop()) {
-                               tmptop = layout.topsep;
+                               tmptop = layout->topsep;
 
                                if (tmptop > 0)
                                        layoutasc = (tmptop * defaultHeight());
@@ -1499,7 +1497,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
 
                        prev = row_ptr->par()->outerHook();
                        if (prev)  {
-                               maxasc += int(textclasslist[bview->buffer()->params.textclass][prev->layout()].parsep * defaultHeight());
+                               maxasc += int(prev->layout()->parsep * defaultHeight());
                        } else {
                                if (firstpar->previous() &&
                                        firstpar->previous()->getDepth() == 0 &&
@@ -1508,7 +1506,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                                {
                                        // avoid parsep
                                } else if (firstpar->previous()) {
-                                       maxasc += int(layout.parsep * defaultHeight());
+                                       maxasc += int(layout->parsep * defaultHeight());
                                }
                        }
                }
@@ -1529,7 +1527,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                // there height depends on the font of the nearest character
                if (firstpar->params().lineBottom())
                        maxdesc += 2 * font_metrics::ascent('x',
-                                                      getFont(bview->buffer(),
+                                                      getFont(bview->buffer(),
                                                               par,
                                                               max(pos_type(0), par->size() - 1)));
 
@@ -1548,13 +1546,13 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                        float unusual = 0;
 
                        if (comparepar->getDepth() > nextpar->getDepth()) {
-                               usual = (textclasslist[bview->buffer()->params.textclass][comparepar->layout()].bottomsep * defaultHeight());
+                               usual = (comparepar->layout()->bottomsep * defaultHeight());
                                comparepar = comparepar->depthHook(nextpar->getDepth());
                                if (comparepar->layout()!= nextpar->layout()
                                        || nextpar->getLabelWidthString() !=
                                        comparepar->getLabelWidthString())
                                {
-                                       unusual = (textclasslist[bview->buffer()->params.textclass][comparepar->layout()].bottomsep * defaultHeight());
+                                       unusual = (comparepar->layout()->bottomsep * defaultHeight());
                                }
                                if (unusual > usual)
                                        layoutdesc = unusual;
@@ -1565,7 +1563,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
                                if (comparepar->layout() != nextpar->layout()
                                        || nextpar->getLabelWidthString() !=
                                        comparepar->getLabelWidthString())
-                                       layoutdesc = int(textclasslist[bview->buffer()->params.textclass][comparepar->layout()].bottomsep * defaultHeight());
+                                       layoutdesc = int(comparepar->layout()->bottomsep * defaultHeight());
                        }
                }
        }
@@ -1582,7 +1580,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
 
        height += row_ptr->height();
        float x = 0;
-       if (layout.margintype != MARGIN_RIGHT_ADDRESS_BOX) {
+       if (layout->margintype != MARGIN_RIGHT_ADDRESS_BOX) {
                float dummy;
                // this IS needed
                row_ptr->width(maxwidth);
@@ -1602,7 +1600,7 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const
 
 
 // Appends the implicit specified paragraph behind the specified row,
-// start at the implicit given position 
+// start at the implicit given position
 void LyXText::appendParagraph(BufferView * bview, Row * row) const
 {
        bool not_ready = true;
@@ -1675,7 +1673,7 @@ void LyXText::breakAgain(BufferView * bview, Row * row) const
                        not_ready = false;
                }
 
-               // set the dimensions of the row 
+               // set the dimensions of the row
                tmprow->fill(fill(bview, tmprow, workWidth(bview)));
                setHeightOfRow(bview, tmprow);
        } while (not_ready);
@@ -1692,7 +1690,7 @@ void LyXText::breakAgainOneRow(BufferView * bview, Row * row)
        if (z < row->par()->size()) {
                if (!row->next()
                    || (row->next() && row->next()->par() != row->par())) {
-                       // insert a new row 
+                       // insert a new row
                        ++z;
                        insertRow(row, row->par(), z);
                        row = row->next();
@@ -1727,13 +1725,13 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout)
 {
        LyXTextClass const & tclass =
                textclasslist[bview->buffer()->params.textclass];
-       LyXLayout const & layout = tclass[cursor.par()->layout()];
+       LyXLayout_ptr const & layout = cursor.par()->layout();
 
        // this is only allowed, if the current paragraph is not empty or caption
        // and if it has not the keepempty flag aktive
        if ((cursor.par()->size() <= 0)
-          && layout.labeltype != LABEL_SENSITIVE
-          && !layout.keepempty)
+          && layout->labeltype != LABEL_SENSITIVE
+          && !layout->keepempty)
                return;
 
        setUndo(bview, Undo::FINISH, cursor.par(), cursor.par()->next());
@@ -1750,32 +1748,32 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout)
        if (keep_layout)
                keep_layout = 2;
        else
-               keep_layout = layout.isEnvironment();
+               keep_layout = layout->isEnvironment();
 
        // we need to set this before we insert the paragraph. IMO the
        // breakParagraph call should return a bool if it inserts the
        // paragraph before or behind and we should react on that one
        // but we can fix this in 1.3.0 (Jug 20020509)
-       bool const isempty = (layout.keepempty && !cursor.par()->size());
+       bool const isempty = (layout->keepempty && !cursor.par()->size());
        cursor.par()->breakParagraph(bview->buffer()->params, cursor.pos(),
                                keep_layout);
 
        // well this is the caption hack since one caption is really enough
-       if (layout.labeltype == LABEL_SENSITIVE) {
+       if (layout->labeltype == LABEL_SENSITIVE) {
                if (!cursor.pos())
                        // set to standard-layout
-                       cursor.par()->applyLayout(tclass.defaultLayoutName());
+                       cursor.par()->applyLayout(tclass.defaultLayout());
                else
                        // set to standard-layout
-                       cursor.par()->next()->applyLayout(tclass.defaultLayoutName());
+                       cursor.par()->next()->applyLayout(tclass.defaultLayout());
        }
 
        // if the cursor is at the beginning of a row without prior newline,
        // move one row up!
        // This touches only the screen-update. Otherwise we would may have
-       // an empty row on the screen 
+       // an empty row on the screen
        if (cursor.pos() && !cursor.row()->par()->isNewline(cursor.row()->pos() - 1)
-                        && cursor.row()->pos() == cursor.pos())
+                        && cursor.row()->pos() == cursor.pos())
        {
                cursorLeft(bview);
        }
@@ -1785,7 +1783,7 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout)
        refresh_y = cursor.y() - cursor.row()->baseline();
 
        // Do not forget the special right address boxes
-       if (layout.margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+       if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
                while (refresh_row->previous() &&
                       refresh_row->previous()->par() == refresh_row->par())
                {
@@ -1832,7 +1830,7 @@ void LyXText::redoParagraph(BufferView * bview) const
 
 
 // insert a character, moves all the following breaks in the
-// same Paragraph one to the right and make a rebreak 
+// same Paragraph one to the right and make a rebreak
 void LyXText::insertChar(BufferView * bview, char c)
 {
        setUndo(bview, Undo::INSERT, cursor.par(), cursor.par()->next());
@@ -1840,8 +1838,7 @@ void LyXText::insertChar(BufferView * bview, char c)
        // When the free-spacing option is set for the current layout,
        // disable the double-space checking
 
-       bool const freeSpacing =
-               textclasslist[bview->buffer()->params.textclass][cursor.row()->par()->layout()].free_spacing ||
+       bool const freeSpacing = cursor.row()->par()->layout()->free_spacing ||
                cursor.row()->par()->isFreeSpacing();
 
        if (lyxrc.auto_number) {
@@ -1904,9 +1901,9 @@ void LyXText::insertChar(BufferView * bview, char c)
        // CHECK There is a bug here! (Asger)
 
        LyXFont realtmpfont = real_current_font;
-       LyXFont rawtmpfont = current_font; 
+       LyXFont rawtmpfont = current_font;
        // store the current font.  This is because of the use of cursor
-       // movements. The moving cursor would refresh the current font 
+       // movements. The moving cursor would refresh the current font
 
        // Get the font that is used to calculate the baselineskip
        pos_type const lastpos = cursor.par()->size();
@@ -2084,7 +2081,7 @@ void LyXText::insertChar(BufferView * bview, char c)
                redoHeightOfParagraph(bview, cursor);
        } else {
                // now the special right address boxes
-               if (textclasslist[bview->buffer()->params.textclass][cursor.par()->layout()].margintype
+               if (cursor.par()->layout()->margintype
                    == MARGIN_RIGHT_ADDRESS_BOX) {
                        redoDrawingOfParagraph(bview, cursor);
                }
@@ -2134,11 +2131,10 @@ void LyXText::prepareToPrint(BufferView * bview,
                        ? leftMargin(bview, row) : 0;
 
        // is there a manual margin with a manual label
-       LyXTextClass const & tclass = textclasslist[bview->buffer()->params.textclass];
-       LyXLayout const & layout = tclass[row->par()->layout()];
+       LyXLayout_ptr const & layout = row->par()->layout();
 
-       if (layout.margintype == MARGIN_MANUAL
-           && layout.labeltype == LABEL_MANUAL) {
+       if (layout->margintype == MARGIN_MANUAL
+           && layout->labeltype == LABEL_MANUAL) {
                // one more since labels are left aligned
                nlh = numberOfLabelHfills(bview->buffer(), row) + 1;
                if (nlh && !row->par()->getLabelWidthString().empty()) {
@@ -2160,7 +2156,7 @@ void LyXText::prepareToPrint(BufferView * bview,
                // set x how you need it
                int align;
                if (row->par()->params().align() == LYX_ALIGN_LAYOUT) {
-                       align = layout.align;
+                       align = layout->align;
                } else {
                        align = row->par()->params().align();
                }
@@ -2215,7 +2211,7 @@ void LyXText::prepareToPrint(BufferView * bview,
                if (main_body > 0 &&
                    (main_body - 1 > last ||
                     !row->par()->isLineSeparator(main_body - 1))) {
-                       x += font_metrics::width(layout.labelsep,
+                       x += font_metrics::width(layout->labelsep,
                                            getLabelFont(bview->buffer(), row->par()));
                        if (main_body - 1 <= last)
                                x += fill_label_hfill;
@@ -2224,12 +2220,12 @@ void LyXText::prepareToPrint(BufferView * bview,
 }
 
 
-// important for the screen 
+// important for the screen
 
 
 // the cursor set functions have a special mechanism. When they
 // realize, that you left an empty paragraph, they will delete it.
-// They also delete the corresponding row 
+// They also delete the corresponding row
 
 void LyXText::cursorRightOneWord(BufferView * bview) const
 {
@@ -2282,7 +2278,7 @@ void LyXText::cursorTab(BufferView * bview) const
 
 
 // Skip initial whitespace at end of word and move cursor to *start*
-// of prior word, not to end of next prior word. 
+// of prior word, not to end of next prior word.
 void LyXText::cursorLeftOneWord(BufferView * bview)  const
 {
        LyXCursor tmpcursor = cursor;
@@ -2320,7 +2316,7 @@ void LyXText::cursorLeftOneWord(LyXCursor  & cur)  const
 
 
 // Select current word. This depends on behaviour of
-// CursorLeftOneWord(), so it is patched as well. 
+// CursorLeftOneWord(), so it is patched as well.
 void LyXText::getWord(LyXCursor & from, LyXCursor & to,
                      word_location const loc) const
 {
@@ -2382,7 +2378,7 @@ void LyXText::selectWord(BufferView * bview, word_location const loc)
 
 
 // Select the word currently under the cursor when no
-// selection is currently set 
+// selection is currently set
 bool LyXText::selectWordWhenUnderCursor(BufferView * bview,
                                        word_location const loc)
 {
@@ -2544,7 +2540,7 @@ void LyXText::deleteWordBackward(BufferView * bview)
 }
 
 
-// Kill to end of line. 
+// Kill to end of line.
 void LyXText::deleteLineForward(BufferView * bview)
 {
        if (!cursor.par()->size())
@@ -2782,12 +2778,12 @@ void LyXText::backspace(BufferView * bview)
                // because the user would be confused if the footnote behaves
                // different wether it is open or closed.
 
-               //      Correction: Pasting is always allowed with standard-layout
+               //      Correction: Pasting is always allowed with standard-layout
                LyXTextClass const & tclass = textclasslist[bview->buffer()->params.textclass];
 
                if (cursor.par() != tmppar
                    && (cursor.par()->layout() == tmppar->layout()
-                       || tmppar->layout() == tclass.defaultLayoutName())
+                       || tmppar->layout() == tclass.defaultLayout())
                    && cursor.par()->getAlign() == tmppar->getAlign()) {
                        removeParagraph(tmprow);
                        removeRow(tmprow);
@@ -2823,7 +2819,7 @@ void LyXText::backspace(BufferView * bview)
                }
        } else {
                // this is the code for a normal backspace, not pasting
-               // any paragraphs 
+               // any paragraphs
                setUndo(bview, Undo::DELETE,
                        cursor.par(), cursor.par()->next());
                // We used to do cursorLeftIntern() here, but it is
@@ -2851,7 +2847,7 @@ void LyXText::backspace(BufferView * bview)
                int y = cursor.y() - row->baseline();
                pos_type z;
                // remember that a space at the end of a row doesnt count
-               // when calculating the fill 
+               // when calculating the fill
                if (cursor.pos() < rowLast(row) ||
                    !cursor.par()->isLineSeparator(cursor.pos())) {
                        row->fill(row->fill() + singleWidth(bview,
@@ -2860,7 +2856,7 @@ void LyXText::backspace(BufferView * bview)
                }
 
                // some special code when deleting a newline. This is similar
-               // to the behavior when pasting paragraphs 
+               // to the behavior when pasting paragraphs
                if (cursor.pos() && cursor.par()->isNewline(cursor.pos())) {
                        cursor.par()->erase(cursor.pos());
                        // refresh the positions
@@ -2963,7 +2959,7 @@ void LyXText::backspace(BufferView * bview)
                        // it can happen that a paragraph loses one row
                        // without a real breakup. This is when a word
                        // is to long to be broken. Well, I don t care this
-                       // hack ;-) 
+                       // hack ;-)
                        if (rowLast(row) == row->par()->size() - 1)
                                removeRow(row->next());
 
@@ -3018,9 +3014,8 @@ void LyXText::backspace(BufferView * bview)
                redoHeightOfParagraph(bview, cursor);
        } else {
                // now the special right address boxes
-               if (textclasslist
-                   [bview->buffer()->params.textclass]
-                   [cursor.par()->layout()].margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+               if (cursor.par()->layout()->margintype
+                   == MARGIN_RIGHT_ADDRESS_BOX) {
                        redoDrawingOfParagraph(bview, cursor);
                }
        }
@@ -3153,13 +3148,10 @@ void LyXText::paintRowSelection(DrawRowParams & p)
                pos_type pos = vis2log(vpos);
                float const old_tmpx = tmpx;
                if (main_body > 0 && pos == main_body - 1) {
-                       LyXLayout const & layout =
-                               textclasslist
-                               [buffer->params.textclass]
-                               [par->layout()];
+                       LyXLayout_ptr const & layout = par->layout();
                        LyXFont const lfont = getLabelFont(buffer, par);
 
-                       tmpx += p.label_hfill + font_metrics::width(layout.labelsep, lfont);
+                       tmpx += p.label_hfill + font_metrics::width(layout->labelsep, lfont);
 
                        if (par->isLineSeparator(main_body - 1))
                                tmpx -= singleWidth(p.bv, par, main_body - 1);
@@ -3376,20 +3368,19 @@ void LyXText::paintFirstRow(DrawRowParams & p)
 
        Buffer const * buffer = p.bv->buffer();
 
-       LyXTextClass const & tclass = textclasslist[buffer->params.textclass];
-       LyXLayout const & layout = tclass[par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        // think about the parskip
        // some parskips VERY EASY IMPLEMENTATION
        if (buffer->params.paragraph_separation == BufferParams::PARSEP_SKIP) {
                if (par->previous()) {
-                       if (layout.latextype == LATEX_PARAGRAPH
+                       if (layout->latextype == LATEX_PARAGRAPH
                                && !par->getDepth()) {
                                y_top += buffer->params.getDefSkip().inPixels(p.bv);
                        } else {
-                               LyXLayout const & playout =
-                                       tclass[par->previous()->layout()];
-                               if (playout.latextype == LATEX_PARAGRAPH
+                               LyXLayout_ptr const & playout =
+                                       par->previous()->layout();
+                               if (playout->latextype == LATEX_PARAGRAPH
                                        && !par->previous()->getDepth()) {
                                        // is it right to use defskip here, too? (AS)
                                        y_top += buffer->params.getDefSkip().inPixels(p.bv);
@@ -3419,9 +3410,9 @@ void LyXText::paintFirstRow(DrawRowParams & p)
        bool const is_rtl = p.row->par()->isRightToLeftPar(p.bv->buffer()->params);
 
        // should we print a label?
-       if (layout.labeltype >= LABEL_STATIC
-           && (layout.labeltype != LABEL_STATIC
-               || layout.latextype != LATEX_ENVIRONMENT
+       if (layout->labeltype >= LABEL_STATIC
+           && (layout->labeltype != LABEL_STATIC
+               || layout->latextype != LATEX_ENVIRONMENT
                || par->isFirstInSequence())) {
 
                LyXFont font = getLabelFont(buffer, par);
@@ -3432,7 +3423,7 @@ void LyXText::paintFirstRow(DrawRowParams & p)
                        // this is special code for the chapter layout. This is
                        // printed in an extra row and has a pagebreak at
                        // the top.
-                       if (layout.labeltype == LABEL_COUNTER_CHAPTER) {
+                       if (layout->labeltype == LABEL_COUNTER_CHAPTER) {
                                if (buffer->params.secnumdepth >= 0) {
                                        float spacing_val = 1.0;
                                        if (!parparams.spacing().isDefault()) {
@@ -3442,8 +3433,8 @@ void LyXText::paintFirstRow(DrawRowParams & p)
                                        }
 
                                        int const maxdesc =
-                                               int(font_metrics::maxDescent(font) * layout.spacing.getValue() * spacing_val)
-                                               + int(layout.parsep) * defaultHeight();
+                                               int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val)
+                                               + int(layout->parsep) * defaultHeight();
 
                                        if (is_rtl) {
                                                x = ww - leftMargin(p.bv, p.row) -
@@ -3458,9 +3449,9 @@ void LyXText::paintFirstRow(DrawRowParams & p)
                        } else {
                                if (is_rtl) {
                                        x = ww - leftMargin(p.bv, p.row)
-                                               + font_metrics::width(layout.labelsep, font);
+                                               + font_metrics::width(layout->labelsep, font);
                                } else {
-                                       x = p.x - font_metrics::width(layout.labelsep, font)
+                                       x = p.x - font_metrics::width(layout->labelsep, font)
                                                - font_metrics::width(str, font);
                                }
 
@@ -3470,9 +3461,9 @@ void LyXText::paintFirstRow(DrawRowParams & p)
        // the labels at the top of an environment.
        // More or less for bibliography
        } else if (par->isFirstInSequence() &&
-               (layout.labeltype == LABEL_TOP_ENVIRONMENT ||
-               layout.labeltype == LABEL_BIBLIO ||
-               layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) {
+               (layout->labeltype == LABEL_TOP_ENVIRONMENT ||
+               layout->labeltype == LABEL_BIBLIO ||
+               layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) {
                LyXFont font = getLabelFont(buffer, par);
                if (!par->getLabelstring().empty()) {
                        string const str = par->getLabelstring();
@@ -3484,11 +3475,11 @@ void LyXText::paintFirstRow(DrawRowParams & p)
                        }
 
                        int maxdesc =
-                               int(font_metrics::maxDescent(font) * layout.spacing.getValue() * spacing_val
-                               + (layout.labelbottomsep * defaultHeight()));
+                               int(font_metrics::maxDescent(font) * layout->spacing.getValue() * spacing_val
+                               + (layout->labelbottomsep * defaultHeight()));
 
                        float x = p.x;
-                       if (layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
+                       if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
                                x = ((is_rtl ? leftMargin(p.bv, p.row) : p.x)
                                         + ww - rightMargin(buffer, p.row)) / 2;
                                x -= font_metrics::width(str, font) / 2;
@@ -3502,14 +3493,14 @@ void LyXText::paintFirstRow(DrawRowParams & p)
                }
        }
 
-       if (layout.labeltype == LABEL_BIBLIO && par->bibkey) {
+       if (layout->labeltype == LABEL_BIBLIO && par->bibkey) {
                LyXFont font = getLayoutFont(buffer, par);
                float x;
                if (is_rtl) {
                        x = ww - leftMargin(p.bv, p.row)
-                               + font_metrics::width(layout.labelsep, font);
+                               + font_metrics::width(layout->labelsep, font);
                } else {
-                       x = p.x - font_metrics::width(layout.labelsep, font)
+                       x = p.x - font_metrics::width(layout->labelsep, font)
                                - par->bibkey->width(p.bv, font);
                }
                par->bibkey->draw(p.bv, font, p.yo + p.row->baseline(), x, p.cleared);
@@ -3577,7 +3568,7 @@ void LyXText::paintLastRow(DrawRowParams & p)
        }
 
        bool const is_rtl = p.row->par()->isRightToLeftPar(p.bv->buffer()->params);
-       int const endlabel = par->getEndLabel(buffer->params);
+       int const endlabel = par->getEndLabel();
 
        // draw an endlabel
        switch (endlabel) {
@@ -3602,10 +3593,13 @@ void LyXText::paintLastRow(DrawRowParams & p)
        }
        case END_LABEL_STATIC:
        {
+#if 0
                LyXFont font(LyXFont::ALL_SANE);
-               string const & layout = par->layout();
-               string const str = textclasslist[buffer->params.textclass][layout].endlabelstring();
                font = getLabelFont(buffer, par);
+#else
+               LyXFont font = getLabelFont(buffer, par);
+#endif
+               string const & str = par->layout()->endlabelstring();
                int const x = is_rtl ?
                        int(p.x) - font_metrics::width(str, font)
                        : ww - rightMargin(buffer, p.row) - p.row->fill();
@@ -3631,8 +3625,7 @@ void LyXText::paintRowText(DrawRowParams & p)
                main_body = 0;
        }
 
-       LyXLayout const & layout =
-               textclasslist[buffer->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        pos_type vpos = p.row->pos();
        while (vpos <= last) {
@@ -3645,7 +3638,7 @@ void LyXText::paintRowText(DrawRowParams & p)
                        continue;
                }
                if (main_body > 0 && pos == main_body - 1) {
-                       int const lwidth = font_metrics::width(layout.labelsep,
+                       int const lwidth = font_metrics::width(layout->labelsep,
                                getLabelFont(buffer, par));
 
                        p.x += p.label_hfill + lwidth
@@ -3756,12 +3749,12 @@ int LyXText::defaultHeight() const
 {
        LyXFont font(LyXFont::ALL_SANE);
        return int(font_metrics::maxAscent(font)
-                + font_metrics::maxDescent(font) * 1.5);
+                + font_metrics::maxDescent(font) * 1.5);
 }
 
 
 // returns the column near the specified x-coordinate of the row
-// x is set to the real beginning of this column 
+// x is set to the real beginning of this column
 pos_type
 LyXText::getColumnNearX(BufferView * bview, Row * row, int & x,
                        bool & boundary) const
@@ -3777,9 +3770,9 @@ LyXText::getColumnNearX(BufferView * bview, Row * row, int & x,
        pos_type vc = row->pos();
        pos_type last = rowLastPrintable(row);
        pos_type c = 0;
-       LyXLayout const & layout =
-               textclasslist[bview->buffer()->params.textclass][
-                                   row->par()->layout()];
+
+       LyXLayout_ptr const & layout = row->par()->layout();
+
        bool left_side = false;
 
        pos_type main_body = beginningOfMainBody(bview->buffer(), row->par());
@@ -3795,7 +3788,7 @@ LyXText::getColumnNearX(BufferView * bview, Row * row, int & x,
                last_tmpx = tmpx;
                if (main_body > 0 && c == main_body-1) {
                        tmpx += fill_label_hfill +
-                               font_metrics::width(layout.labelsep,
+                               font_metrics::width(layout->labelsep,
                                               getLabelFont(bview->buffer(), row->par()));
                        if (row->par()->isLineSeparator(main_body - 1))
                                tmpx -= singleWidth(bview, row->par(), main_body-1);
@@ -3927,17 +3920,10 @@ Row * LyXText::getRowNearY(int & y) const
 
        if (y < tmpy) {
                lyxerr << "up" << endl;
-#if 0
-               while (tmprow && tmpy - tmprow->height() >= y) {
-                       tmpy -= tmprow->height();
-                       tmprow = tmprow->previous();
-               }
-#else
                do {
                        tmpy -= tmprow->height();
                        tmprow = tmprow->previous();
                } while (tmprow && tmpy - tmprow->height() >= y);
-#endif
        } else if (y > tmpy) {
                lyxerr << "down" << endl;
 
index e8d347f0126e3b0320e1434d23520e10a2cb25c8..80c9a487cbc29ac6306d6b529599a0e53879d3a4 100644 (file)
@@ -128,12 +128,11 @@ LyXFont const realizeFont(LyXFont const & font,
                par = par->outerHook();
                if (par) {
 #ifndef INHERIT_LANGUAGE
-                       tmpfont.realize(textclasslist[buf->params.textclass][
-                                             par->layout()].font);
+                       tmpfont.realize(par->layout()->font);
 #else
                        tmpfont.realize(textclasslist.
                                        Style(buf->params.textclass,
-                                             par->layout()).font,
+                                             par->layout())->font,
                                        buf->params.language);
 #endif
                        par_depth = par->getDepth();
@@ -165,20 +164,19 @@ LyXFont const LyXText::getFont(Buffer const * buf, Paragraph * par,
 {
        lyx::Assert(pos >= 0);
 
-       LyXLayout const & layout =
-               textclasslist[buf->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        Paragraph::depth_type par_depth = par->getDepth();
        // We specialize the 95% common case:
        if (!par_depth) {
-               if (layout.labeltype == LABEL_MANUAL
+               if (layout->labeltype == LABEL_MANUAL
                    && pos < beginningOfMainBody(buf, par)) {
                        // 1% goes here
                        LyXFont f = par->getFontSettings(buf->params, pos);
                        if (par->inInset())
                                par->inInset()->getDrawFont(f);
 #ifndef INHERIT_LANGUAGE
-                       return f.realize(layout.reslabelfont);
+                       return f.realize(layout->reslabelfont);
 #else
                        return f.realize(layout.reslabelfont, buf->params.language);
 #endif
@@ -187,7 +185,7 @@ LyXFont const LyXText::getFont(Buffer const * buf, Paragraph * par,
                        if (par->inInset())
                                par->inInset()->getDrawFont(f);
 #ifndef INHERIT_LANGUAGE
-                       return f.realize(layout.resfont);
+                       return f.realize(layout->resfont);
 #else
                        return f.realize(layout.resfont, buf->params.language);
 #endif
@@ -200,10 +198,10 @@ LyXFont const LyXText::getFont(Buffer const * buf, Paragraph * par,
 
        if (pos < beginningOfMainBody(buf, par)) {
                // 1% goes here
-               layoutfont = layout.labelfont;
+               layoutfont = layout->labelfont;
        } else {
                // 99% goes here
-               layoutfont = layout.font;
+               layoutfont = layout->font;
        }
 
        LyXFont tmpfont = par->getFontSettings(buf->params, pos);
@@ -221,31 +219,29 @@ LyXFont const LyXText::getFont(Buffer const * buf, Paragraph * par,
 
 LyXFont const LyXText::getLayoutFont(Buffer const * buf, Paragraph * par) const
 {
-       LyXLayout const & layout =
-               textclasslist[buf->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        Paragraph::depth_type par_depth = par->getDepth();
 
        if (!par_depth) {
-               return layout.resfont;
+               return layout->resfont;
        }
 
-       return realizeFont(layout.font, buf, par);
+       return realizeFont(layout->font, buf, par);
 }
 
 
 LyXFont const LyXText::getLabelFont(Buffer const * buf, Paragraph * par) const
 {
-       LyXLayout const & layout =
-               textclasslist[buf->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        Paragraph::depth_type par_depth = par->getDepth();
 
        if (!par_depth) {
-               return layout.reslabelfont;
+               return layout->reslabelfont;
        }
 
-       return realizeFont(layout.labelfont, buf, par);
+       return realizeFont(layout->labelfont, buf, par);
 }
 
 
@@ -277,15 +273,15 @@ void LyXText::setCharFont(Buffer const * buf, Paragraph * par,
        LyXFont font(fnt);
 
        LyXTextClass const & tclass = textclasslist[buf->params.textclass];
-       LyXLayout const & layout = tclass[par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        // Get concrete layout font to reduce against
        LyXFont layoutfont;
 
        if (pos < beginningOfMainBody(buf, par))
-               layoutfont = layout.labelfont;
+               layoutfont = layout->labelfont;
        else
-               layoutfont = layout.font;
+               layoutfont = layout->font;
 
        // Realize against environment font information
        if (par->getDepth()) {
@@ -294,7 +290,7 @@ void LyXText::setCharFont(Buffer const * buf, Paragraph * par,
                        tp = tp->outerHook();
                        if (tp)
 #ifndef INHERIT_LANGUAGE
-                               layoutfont.realize(tclass[tp->layout()].font);
+                               layoutfont.realize(tp->layout()->font);
 #else
                                layoutfont.realize(textclasslist.
                                                   Style(buf->params.textclass,
@@ -460,15 +456,14 @@ void LyXText::toggleInset(BufferView * bview)
 void LyXText::makeFontEntriesLayoutSpecific(Buffer const * buf,
                                            Paragraph * par)
 {
-       LyXLayout const & layout =
-               textclasslist[buf->params.textclass][par->layout()];
+       LyXLayout_ptr const & layout = par->layout();
 
        LyXFont layoutfont;
        for (pos_type pos = 0; pos < par->size(); ++pos) {
                if (pos < beginningOfMainBody(buf, par))
-                       layoutfont = layout.labelfont;
+                       layoutfont = layout->labelfont;
                else
-                       layoutfont = layout.font;
+                       layoutfont = layout->font;
 
                LyXFont tmpfont = par->getFontSettings(buf->params, pos);
                tmpfont.reduce(layoutfont);
@@ -502,22 +497,22 @@ Paragraph * LyXText::setLayout(BufferView * bview,
        Paragraph * par = sstart_cur.par();
        Paragraph * epar = send_cur.par()->next();
 
-       LyXLayout const & lyxlayout =
+       LyXLayout_ptr const & lyxlayout =
                textclasslist[bview->buffer()->params.textclass][layout];
 
        do {
-               par->applyLayout(layout);
+               par->applyLayout(lyxlayout);
                makeFontEntriesLayoutSpecific(bview->buffer(), par);
                Paragraph * fppar = par;
-               fppar->params().spaceTop(lyxlayout.fill_top ?
+               fppar->params().spaceTop(lyxlayout->fill_top ?
                                         VSpace(VSpace::VFILL)
                                         : VSpace(VSpace::NONE));
-               fppar->params().spaceBottom(lyxlayout.fill_bottom ?
+               fppar->params().spaceBottom(lyxlayout->fill_bottom ?
                                            VSpace(VSpace::VFILL)
                                            : VSpace(VSpace::NONE));
-               if (lyxlayout.margintype == MARGIN_MANUAL)
-                       par->setLabelWidthString(lyxlayout.labelstring());
-               if (lyxlayout.labeltype != LABEL_BIBLIO
+               if (lyxlayout->margintype == MARGIN_MANUAL)
+                       par->setLabelWidthString(lyxlayout->labelstring());
+               if (lyxlayout->labeltype != LABEL_BIBLIO
                    && fppar->bibkey) {
                        delete fppar->bibkey;
                        fppar->bibkey = 0;
@@ -593,17 +588,14 @@ void  LyXText::incDepth(BufferView * bview)
 
        bool anything_changed = false;
 
-       LyXTextClass const & tclass =
-               textclasslist[bview->buffer()->params.textclass];
-
        while (true) {
                // NOTE: you can't change the depth of a bibliography entry
-               if (tclass[cursor.par()->layout()].labeltype != LABEL_BIBLIO) {
+               if (cursor.par()->layout()->labeltype != LABEL_BIBLIO) {
                        Paragraph * prev = cursor.par()->previous();
 
                        if (prev) {
                                if (cursor.par()->getDepth()
-                                   < prev->getMaxDepthAfter(bview->buffer())){
+                                   < prev->getMaxDepthAfter()) {
                                        cursor.par()->params().depth(cursor.par()->getDepth() + 1);
                                        anything_changed = true;
                                }
@@ -917,7 +909,7 @@ void LyXText::fullRebreak(BufferView * bview)
 
 // the cursor set functions have a special mechanism. When they
 // realize, that you left an empty paragraph, they will delete it.
-// They also delete the corresponding row 
+// They also delete the corresponding row
 
 // need the selection cursor:
 void LyXText::setSelection(BufferView * bview)
@@ -1136,11 +1128,10 @@ string LyXText::getStringToIndex(BufferView * bview)
 }
 
 
-pos_type LyXText::beginningOfMainBody(Buffer const * buf,
+pos_type LyXText::beginningOfMainBody(Buffer const * /*buf*/,
                             Paragraph const * par) const
 {
-       if (textclasslist[buf->params.textclass][
-                               par->layout()].labeltype != LABEL_MANUAL)
+       if (par->layout()->labeltype != LABEL_MANUAL)
                return 0;
        else
                return par->beginningOfMainBody();
@@ -1188,8 +1179,6 @@ void LyXText::setParagraph(BufferView * bview,
 
 
        Paragraph * tmppar = selection.end.par();
-       LyXTextClass const & tclass =
-               textclasslist[bview->buffer()->params.textclass];
 
        while (tmppar != selection.start.par()->previous()) {
                setCursor(bview, tmppar, 0);
@@ -1204,12 +1193,12 @@ void LyXText::setParagraph(BufferView * bview,
                cursor.par()->params().spaceBottom(space_bottom);
                cursor.par()->params().spacing(spacing);
                // does the layout allow the new alignment?
-               LyXLayout const & layout = tclass[cursor.par()->layout()];
+               LyXLayout_ptr const & layout = cursor.par()->layout();
 
                if (align == LYX_ALIGN_LAYOUT)
-                       align = layout.align;
-               if (align & layout.alignpossible) {
-                       if (align == layout.align)
+                       align = layout->align;
+               if (align & layout->alignpossible) {
+                       if (align == layout->align)
                                cursor.par()->params().align(LYX_ALIGN_LAYOUT);
                        else
                                cursor.par()->params().align(align);
@@ -1290,8 +1279,7 @@ string const romanCounter(int n)
 void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
 {
        LyXTextClass const & textclass = textclasslist[buf->params.textclass];
-       LyXLayout const & layout = textclass[par->layout()];
-
+       LyXLayout_ptr const & layout = par->layout();
 
        // copy the prev-counters to this one,
        // unless this is the first paragraph
@@ -1326,16 +1314,16 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
         */
        if (par->previous()
            && par->previous()->getDepth() < par->getDepth()
-           && textclass[par->previous()->layout()].labeltype == LABEL_COUNTER_ENUMI
+           && par->previous()->layout()->labeltype == LABEL_COUNTER_ENUMI
            && par->enumdepth < 3
-           && layout.labeltype != LABEL_BIBLIO) {
+           && layout->labeltype != LABEL_BIBLIO) {
                par->enumdepth++;
        }
 
        // Maybe we have to decrement the enumeration depth, see note above
        if (par->previous()
            && par->previous()->getDepth() > par->getDepth()
-           && layout.labeltype != LABEL_BIBLIO) {
+           && layout->labeltype != LABEL_BIBLIO) {
                par->enumdepth = par->depthHook(par->getDepth())->enumdepth;
                par->setCounter(6 + par->enumdepth,
                                par->depthHook(par->getDepth())->getCounter(6 + par->enumdepth));
@@ -1348,30 +1336,30 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
                par->params().labelString(string());
        }
 
-       if (layout.margintype == MARGIN_MANUAL) {
+       if (layout->margintype == MARGIN_MANUAL) {
                if (par->params().labelWidthString().empty()) {
-                       par->setLabelWidthString(layout.labelstring());
+                       par->setLabelWidthString(layout->labelstring());
                }
        } else {
                par->setLabelWidthString(string());
        }
 
        // is it a layout that has an automatic label?
-       if (layout.labeltype >=  LABEL_COUNTER_CHAPTER) {
+       if (layout->labeltype >=  LABEL_COUNTER_CHAPTER) {
 
-               int i = layout.labeltype - LABEL_COUNTER_CHAPTER;
+               int i = layout->labeltype - LABEL_COUNTER_CHAPTER;
                if (i >= 0 && i<= buf->params.secnumdepth) {
                        par->incCounter(i);     // increment the counter
 
                        // Is there a label? Useful for Chapter layout
                        if (!par->params().appendix()) {
-                               if (!layout.labelstring().empty())
-                                       par->params().labelString(layout.labelstring());
+                               if (!layout->labelstring().empty())
+                                       par->params().labelString(layout->labelstring());
                                else
                                        par->params().labelString(string());
                        } else {
-                               if (!layout.labelstring_appendix().empty())
-                                       par->params().labelString(layout.labelstring_appendix());
+                               if (!layout->labelstring_appendix().empty())
+                                       par->params().labelString(layout->labelstring_appendix());
                                else
                                        par->params().labelString(string());
                        }
@@ -1509,12 +1497,12 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
                                // reset the following counters
                                par->setCounter(i, 0);
                        }
-               } else if (layout.labeltype < LABEL_COUNTER_ENUMI) {
+               } else if (layout->labeltype < LABEL_COUNTER_ENUMI) {
                        for (i++; i < 10; ++i) {
                                // reset the following counters
                                par->setCounter(i, 0);
                        }
-               } else if (layout.labeltype == LABEL_COUNTER_ENUMI) {
+               } else if (layout->labeltype == LABEL_COUNTER_ENUMI) {
                        par->incCounter(i + par->enumdepth);
                        int number = par->getCounter(i + par->enumdepth);
 
@@ -1561,7 +1549,7 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
                        }
 
                }
-       } else if (layout.labeltype == LABEL_BIBLIO) {// ale970302
+       } else if (layout->labeltype == LABEL_BIBLIO) {// ale970302
                int i = LABEL_COUNTER_ENUMI - LABEL_COUNTER_CHAPTER + par->enumdepth;
                par->incCounter(i);
                int number = par->getCounter(i);
@@ -1570,14 +1558,14 @@ void LyXText::setCounter(Buffer const * buf, Paragraph * par) const
                        par->bibkey = new InsetBibKey(p);
                }
                par->bibkey->setCounter(number);
-               par->params().labelString(layout.labelstring());
+               par->params().labelString(layout->labelstring());
 
                // In biblio should't be following counters but...
        } else {
-               string s = layout.labelstring();
+               string s = layout->labelstring();
 
                // the caption hack:
-               if (layout.labeltype == LABEL_SENSITIVE) {
+               if (layout->labeltype == LABEL_SENSITIVE) {
                        bool isOK (par->inInset() && par->inInset()->owner() &&
                                   (par->inInset()->owner()->lyxCode() == Inset::FLOAT_CODE));
 
@@ -1625,12 +1613,10 @@ void LyXText::updateCounters(BufferView * bview, Row * row) const
 
                // now check for the headline layouts. remember that they
                // have a dynamic left margin
-               LyXTextClass const & tclass =
-                       textclasslist[bview->buffer()->params.textclass];
-               LyXLayout const & layout = tclass[par->layout()];
+               LyXLayout_ptr const & layout = par->layout();
 
-               if (layout.margintype == MARGIN_DYNAMIC
-                   || layout.labeltype == LABEL_SENSITIVE) {
+               if (layout->margintype == MARGIN_DYNAMIC
+                   || layout->labeltype == LABEL_SENSITIVE) {
                        // Rebreak the paragraph
                        removeParagraph(row);
                        appendParagraph(bview, row);
@@ -1664,7 +1650,7 @@ void LyXText::insertInset(BufferView * bview, Inset * inset)
 
 void LyXText::copyEnvironmentType()
 {
-       copylayouttype = cursor.par()->layout();
+       copylayouttype = cursor.par()->layout()->name();
 }
 
 
@@ -1736,7 +1722,7 @@ void LyXText::cutSelection(BufferView * bview, bool doclear, bool realcut)
 
        // sometimes necessary
        if (doclear)
-               selection.start.par()->stripLeadingSpaces(bview->buffer()->params.textclass);
+               selection.start.par()->stripLeadingSpaces();
 
        redoParagraphs(bview, selection.start, endpar);
 
@@ -1971,10 +1957,7 @@ void LyXText::checkParagraph(BufferView * bview, Paragraph * par,
                status(bview, LyXText::NEED_MORE_REFRESH);
 
        // check the special right address boxes
-       if (textclasslist[bview->buffer()->params.textclass][
-                               par->layout()].margintype
-           == MARGIN_RIGHT_ADDRESS_BOX)
-       {
+       if (par->layout()->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
                tmpcursor.par(par);
                tmpcursor.row(row);
                tmpcursor.y(y);
@@ -2143,13 +2126,13 @@ float LyXText::getCursorX(BufferView * bview, Row * row,
                pos_type pos = vis2log(vpos);
                if (main_body > 0 && pos == main_body - 1) {
                        x += fill_label_hfill +
-                               font_metrics::width(textclasslist[
-                                                      bview->buffer()->params.textclass][
-                                       row->par()->layout()]
-                                              .labelsep,
-                                              getLabelFont(bview->buffer(), row->par()));
-                       if (row->par()->isLineSeparator(main_body-1))
-                               x -= singleWidth(bview, row->par(),main_body-1);
+                               font_metrics::width(
+                                       row->par()->layout()->labelsep,
+                                       getLabelFont(bview->buffer(),
+                                                    row->par()));
+                       if (row->par()->isLineSeparator(main_body - 1))
+                               x -= singleWidth(bview,
+                                                row->par(), main_body - 1);
                }
                if (hfillExpansion(bview->buffer(), row, pos)) {
                        x += singleWidth(bview, row->par(), pos);
@@ -2419,10 +2402,8 @@ bool LyXText::deleteEmptyParagraphMechanism(BufferView * bview,
                return false;
 
        // We allow all kinds of "mumbo-jumbo" when freespacing.
-       if (textclasslist[bview->buffer()->params.textclass][
-                               old_cursor.par()->layout()].free_spacing
-           || old_cursor.par()->isFreeSpacing())
-       {
+       if (old_cursor.par()->layout()->free_spacing
+           || old_cursor.par()->isFreeSpacing()) {
                return false;
        }
 
@@ -2488,9 +2469,7 @@ bool LyXText::deleteEmptyParagraphMechanism(BufferView * bview,
                return false;
 
        // Do not delete empty paragraphs with keepempty set.
-       if (textclasslist
-           [bview->buffer()->params.textclass]
-           [old_cursor.par()->layout()].keepempty)
+       if (old_cursor.par()->layout()->keepempty)
                return false;
 
        // only do our magic if we changed paragraph
@@ -2586,7 +2565,7 @@ bool LyXText::deleteEmptyParagraphMechanism(BufferView * bview,
                }
        }
        if (!deleted) {
-               if (old_cursor.par()->stripLeadingSpaces(bview->buffer()->params.textclass)) {
+               if (old_cursor.par()->stripLeadingSpaces()) {
                        redoParagraphs(bview, old_cursor,
                                       old_cursor.par()->next());
                        // correct cursor y
index 577293af301aa96c27998fc8012158208664aca8..49ad788a2cd744677387bf6da31d9450e5277208 100644 (file)
@@ -43,7 +43,7 @@ LyXCursor const & undoCursor(BufferView * bv)
                return bv->theLockingInset()->cursor(bv);
        return bv->text->cursor;
 }
+
 /**
  * returns a pointer to the very first Paragraph depending of where we are
  * so it will return the first paragraph of the buffer or the first paragraph
@@ -73,13 +73,13 @@ void finishNoUndo(BufferView * bv)
        bv->text->status(bv, LyXText::NEED_MORE_REFRESH);
        unFreezeUndo();
 }
+
+
 // returns false if no undo possible
 bool textHandleUndo(BufferView * bv, Undo & undo)
 {
        Buffer * b = bv->buffer();
+
        Paragraph * before =
                b->getParFromID(undo.number_of_before_par);
        Paragraph * behind =
@@ -128,9 +128,9 @@ bool textHandleUndo(BufferView * bv, Undo & undo)
        }
 
        vector<Paragraph *> deletelist;
+
        Paragraph * deletepar;
+
        // now add old paragraphs to be deleted
        if (before != behind || (!behind && !before)) {
                if (before)
@@ -142,7 +142,7 @@ bool textHandleUndo(BufferView * bv, Undo & undo)
                        deletelist.push_back(deletepar);
                        tmppar = deletepar;
                        deletepar = deletepar->next();
+
                        // a memory optimization for edit:
                        // Only layout information
                        // is stored in the undo. So restore
@@ -215,7 +215,7 @@ bool textHandleUndo(BufferView * bv, Undo & undo)
                        // clear any selection and set the selection cursor
                        // for an evt. new selection.
                        t->clearSelection();
-                       t->selection.cursor = t->cursor; 
+                       t->selection.cursor = t->cursor;
                        t->updateCounters(bv, t->cursor.row());
                        bv->fitCursor();
                }
@@ -237,7 +237,7 @@ bool textHandleUndo(BufferView * bv, Undo & undo)
                        // clear any selection and set the selection cursor
                        // for an evt. new selection.
                        t->clearSelection();
-                       t->selection.cursor = t->cursor; 
+                       t->selection.cursor = t->cursor;
                        t->updateCounters(bv, t->cursor.row());
                }
        }
@@ -251,13 +251,13 @@ bool textHandleUndo(BufferView * bv, Undo & undo)
                                delete (*pit);
                        }
                }
+
        finishUndo();
        bv->text->status(bv, LyXText::NEED_MORE_REFRESH);
        return true;
 }
 
+
 bool createUndo(BufferView * bv, Undo::undo_kind kind,
        Paragraph const * first, Paragraph const * behind, shared_ptr<Undo> & u)
 {
@@ -275,7 +275,7 @@ bool createUndo(BufferView * bv, Undo::undo_kind kind,
                inset_id = first->inInset()->id();
 
        Buffer * b = bv->buffer();
+
        // Undo::EDIT  and Undo::FINISH are
        // always finished. (no overlapping there)
        // overlapping only with insert and delete inside one paragraph:
@@ -293,7 +293,7 @@ bool createUndo(BufferView * bv, Undo::undo_kind kind,
                        return false;
                }
        }
+
        // create a new Undo
        Paragraph * undopar;
 
@@ -382,16 +382,16 @@ void unFreezeUndo()
 bool textUndo(BufferView * bv)
 {
        Buffer * b = bv->buffer();
+
        if (b->undostack.empty()) {
                finishNoUndo(bv);
                return false;
        }
+
        shared_ptr<Undo> undo = b->undostack.top();
        b->undostack.pop();
        finishUndo();
+
        if (!undo_frozen) {
                Paragraph * first = b->getParFromID(undo->number_of_before_par);
                if (first && first->next())
@@ -405,7 +405,7 @@ bool textUndo(BufferView * bv)
                                b->redostack.push(u);
                }
        }
+
        // now we can unlock the inset for saftey because the inset pointer could
        // be changed during the undo-function. Anyway if needed we have to lock
        // the right inset/position if this is requested.
@@ -426,11 +426,11 @@ bool textRedo(BufferView * bv)
                finishNoUndo(bv);
                return false;
        }
+
        shared_ptr<Undo> undo = b->redostack.top();
        b->redostack.pop();
        finishUndo();
+
        if (!undo_frozen) {
        Paragraph * first = bv->buffer()->getParFromID(undo->number_of_before_par);
                if (first && first->next())
@@ -444,7 +444,7 @@ bool textRedo(BufferView * bv)
                                bv->buffer()->undostack.push(u);
                }
        }
+
        // now we can unlock the inset for saftey because the inset pointer could
        // be changed during the undo-function. Anyway if needed we have to lock
        // the right inset/position if this is requested.