This should work, shouldn't it? Why doesn't it?

The conditional where the insets are created is 
entered as witnessed by the lyxerr.

The insets don't even show up on screen; yet they
appear to save correctly using the write method.
Also latex works, but not right.

I have experimented by creating the inset as a 
standalone, in an arbitrary text location, using a
minibuffer command; that works great. But now I want 
it tied to section etc. and make the label the
section number. But that seems to be an entirely 
different thing. I use insetbib/bibkey as my model,
but it appears not suitable.

What am I missing?

Martin

Index: text2.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/text2.C,v
retrieving revision 1.243
diff -u -p -r1.243 text2.C
--- text2.C     2002/08/07 16:31:45     1.243
+++ text2.C     2002/08/09 18:04:25
@@ -39,6 +39,7 @@
 #include "insets/insetspecialchar.h"
 #include "insets/insettext.h"
 #include "insets/insetfloat.h"
+#include "insets/insetshorttitle.h"
 
 #include "support/LAssert.h"
 #include "support/textutils.h"
@@ -408,6 +409,8 @@ Inset * LyXText::getInset() const
        Inset * inset = 0;
        if (cursor.pos() == 0 && cursor.par()->bibkey) {
                inset = cursor.par()->bibkey;
+       } else if (cursor.pos()== 0 && cursor.par()->shorttitle) {
+               inset = cursor.par()->shorttitle;
        } else if (cursor.pos() < cursor.par()->size()
                   && cursor.par()->isInset(cursor.pos())) {
                inset = cursor.par()->getInset(cursor.pos());
@@ -1313,7 +1319,13 @@ void LyXText::setCounter(Buffer const * 
                        s << par->counters().numberLabel(par->counters().sects[i], 
                                numbertype, langtype, head);
 
-                       par->params().labelString(par->params().labelString() 
+s.str().c_str());
+                       if (!par->shorttitle) {
+                               par->shorttitle = new InsetShortTitle(buf->params);
+                               lyxerr << "par->shorttitle " << s.str() << endl;
+                               par->shorttitle->setLabel(s.str());
+                       }
+               
+                       // par->params().labelString(par->params().labelString() + 
+s.str().c_str());
                        // We really want to remove the c_str as soon as
                        // possible...
 
// -*- C++ -*-
/* This file is part of*
 * ======================================================
 *
 *           LyX, The Document Processor
 *
 *           Copyright 1995 Matthias Ettrich
 *           Copyright 1995-2001 The LyX Team
 *
 * ====================================================== */

#ifndef INSETSHORTTITLE_H
#define INSETSHORTTITLE_H

#ifdef __GNUG__
#pragma interface
#endif

#include "insettext.h"
#include "insetcollapsable.h"

class InsetShortTitle : public InsetCollapsable {
public:
        InsetShortTitle(BufferParams const &);
        ///
        InsetShortTitle(InsetShortTitle const &, bool same_id = false);

        Inset * clone(Buffer const &, bool same_id = false) const;
        ///
        void draw(BufferView *, LyXFont const &, int, float &, bool) ;
        ///
        EDITABLE editable() const { return IS_EDITABLE; }
        ///
        Inset::Code lyxCode() const { return Inset::SHORTTITLE_CODE; }
        ///
        void edit(BufferView *, int, int, mouse_button::state);
        ///
        void edit(BufferView * bv, bool front = true);
        ///
        string const editMessage() const;
        ///
        int latex(Buffer const *, std::ostream &) const;
        ///
        void write(Buffer const * buf, ostream & os) const;
        ///
        //int ascii(Buffer const *, std::ostream &, int linelen) const;
        ///
        //int linuxdoc(Buffer const *, std::ostream &) const;
        ///
        //int docbook(Buffer const *, std::ostream &) const;
};

#endif
/* This file is part of
 * ======================================================
 *
 *           LyX, The Document Processor
 *
 *          Copyright 1995 Matthias Ettrich
 *          Copyright 1995-2001 The LyX Team.
 *
 * ====================================================== */

#include <config.h>

#ifdef __GNUG__
#pragma implementation
#endif

#include "insetshorttitle.h"
#include "support/LOstream.h"
#include "frontends/Alert.h"
#include "support/lstrings.h" //frontStrip, strip
#include "lyxtext.h"
#include "buffer.h"
#include "gettext.h"
#include "BufferView.h"
#include "support/lstrings.h"

using std::ostream;
using std::vector;
using std::pair;

/* Shorttitle. Used to insert a short version of sectioning header etc.
 *  automatically */


InsetShortTitle::InsetShortTitle(BufferParams const & ins)
        : InsetCollapsable(ins, false)
{
}

InsetShortTitle::InsetShortTitle(InsetShortTitle const & in, bool same_id)
                    : InsetCollapsable(in, same_id)
{
}

Inset * InsetShortTitle::clone(Buffer const &, bool same_id) const
{
                    return new InsetShortTitle(*this, same_id);
}

void InsetShortTitle::draw(BufferView * bv, LyXFont const & f,
                                             int baseline, float & x, bool cleared)
{
        //InsetText::setDrawFrame(bv, ALWAYS);
        InsetCollapsable::draw(bv, f, baseline, x, cleared);
}

void InsetShortTitle::edit(BufferView * bv, int x, int y, mouse_button::state button)
{
        InsetCollapsable::edit(bv, x, y, button);
}


void InsetShortTitle::edit(BufferView * bv, bool)
{
        edit(bv, 0, 0, mouse_button::none);
}

string const InsetShortTitle::editMessage() const
{
        return _("Opened Short Title Inset");
}


void InsetShortTitle::write(Buffer const * buf, ostream & os) const
{
        os << "\\begin_inset ShortTitle" << "\n";
        InsetCollapsable::write(buf, os);
        os << "\\end_inset" << "\n";
}

int InsetShortTitle::latex(Buffer const * buf, ostream & os) const
{
        int i(0);
        if (!buf) {
                os << '[';
                i = inset.latex(buf, os, false, false);
                //InsetCollapsable::write(buf, os);
                os << ']';
        }
        return i + 2;
}

/* Dunno what to do with these, if anything -- MV
 *
int InsetShortTitle::ascii(Buffer const *, ostream & os, int) const
{
        os << "<" << getContents()  << ">";
        return 0;
}


int InsetShortTitle::linuxdoc(Buffer const *, ostream & os) const
{
        os << "<label id=\"" << getContents() << "\" >";
        return 0;
}


int InsetShortTitle::docbook(Buffer const *, ostream & os) const
{
        os << "<anchor id=\"" << getContents() << "\">";
        return 0;
}

*/

Attachment: msg42333/pgp00000.pgp
Description: PGP signature

Reply via email to