lyx_mirror/src/insets/insetinclude.h
Jürgen Spitzmüller 1bed69439f Much better performance when using natbib (bug 2460):
* src/BufferView_pimpl.C
	(bool BufferView::Pimpl::dispatch): update bibfiles cache after adding or
	deleting a bib database
* src/buffer.C
	(bool Buffer::readDocument): update bibfiles cache after the document 
	was read
* src/buffer.[Ch]
	(void Buffer::updateBibfilesCache): new method to build or update a cached
	vector with all used bibtex databases. 
	(void Buffer::getBibfilesCache): new method that returns the actual cache.
	(Buffer * Buffer::getMasterBuffer): new (non-const) method to get the buffer 
	of the master document

* src/insets/insetbibtex.C
	(void InsetBibtex::doDispatch): update the bibfiles cache after the inset has
	been modified.
* src/insets/insetinclude.C.
	(void Insetinclude::doDispatch): update the bibfiles cache after the inset 
	has Been modified.
* src/insets/insetinclude.[Ch]:
	(void Insetinclude::updateBibfilesCache): new method to build or update 
	a cached vector with all used bibtex databases. 
	(void Insetinclude::getBibfilesCache): new method that returns the actual 
	cache.
* src/insets/insetcite.C
	(string const getNatbibLabel): store a map of timestamps for all used bibtex 
	files (buffer's bibfiles cache) and rebuild the list of keys only if the timestamps
	or the list of files have changed. This is the actual performance boost. 

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13681 a592a061-630c-0410-9148-cb99ea01b6c8
2006-04-15 11:46:17 +00:00

153 lines
4.0 KiB
C++

// -*- C++ -*-
/**
* \file insetinclude.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Lars Gullik Bjønnes
*
* Full author contact details are available in file CREDITS.
*/
#ifndef INSET_INCLUDE_H
#define INSET_INCLUDE_H
#include "inset.h"
#include "insetcommandparams.h"
#include "render_button.h"
#include <boost/scoped_ptr.hpp>
class Buffer;
class Dimension;
class LaTeXFeatures;
class RenderMonitoredPreview;
/// for including tex/lyx files
class InsetInclude: public InsetOld {
public:
///
InsetInclude(InsetCommandParams const &);
~InsetInclude();
/// Override these InsetButton methods if Previewing
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
virtual bool display() const;
/// get the parameters
InsetCommandParams const & params(void) const;
///
InsetBase::Code lyxCode() const { return InsetBase::INCLUDE_CODE; }
/** Fills \c list
* \param buffer the Buffer containing this inset.
* \param list the list of labels in the child buffer.
*/
void getLabelList(Buffer const & buffer,
std::vector<std::string> & list) const;
/** Fills \c keys
* \param buffer the Buffer containing this inset.
* \param keys the list of bibkeys in the child buffer.
*/
void fillWithBibKeys(Buffer const & buffer,
std::vector<std::pair<std::string,std::string> > & keys) const;
/** Update the cache with all bibfiles in use of the child buffer
* (including bibfiles of grandchild documents).
* \param buffer the Buffer containing this inset.
*/
void updateBibfilesCache(Buffer const & buffer);
/** Return the cache with all bibfiles in use of the child buffer
* (including bibfiles of grandchild documents).
* \param buffer the Buffer containing this inset.
*/
std::vector<std::string> const &
getBibfilesCache(Buffer const & buffer) const;
///
EDITABLE editable() const { return IS_EDITABLE; }
///
void write(Buffer const &, std::ostream &) const;
///
void read(Buffer const &, LyXLex &);
///
int latex(Buffer const &, std::ostream &,
OutputParams const &) const;
///
int plaintext(Buffer const &, std::ostream &,
OutputParams const &) const;
///
int linuxdoc(Buffer const &, std::ostream &,
OutputParams const &) const;
///
int docbook(Buffer const &, std::ostream &,
OutputParams const &) const;
///
void validate(LaTeXFeatures &) const;
///
void addPreview(lyx::graphics::PreviewLoader &) const;
///
bool getStatus(LCursor &, FuncRequest const &, FuncStatus &) const;
protected:
InsetInclude(InsetInclude const &);
///
virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
private:
virtual std::auto_ptr<InsetBase> doClone() const;
/** Slot receiving a signal that the external file has changed
* and the preview should be regenerated.
*/
void fileChanged() const;
friend class InsetIncludeMailer;
/// set the parameters
void set(InsetCommandParams const & params, Buffer const &);
/// get the text displayed on the button
std::string const getScreenLabel(Buffer const &) const;
///
void write(std::ostream &) const;
///
void read(LyXLex &);
/// the parameters
InsetCommandParams params_;
/// holds the entity name that defines the file location (SGML)
std::string const include_label;
/// The pointer never changes although *preview_'s contents may.
boost::scoped_ptr<RenderMonitoredPreview> const preview_;
/// cache
mutable bool set_label_;
mutable RenderButton button_;
};
#include "mailinset.h"
class InsetIncludeMailer : public MailInset {
public:
///
InsetIncludeMailer(InsetInclude & inset);
///
virtual InsetBase & inset() const { return inset_; }
///
virtual std::string const & name() const { return name_; }
///
virtual std::string const inset2string(Buffer const &) const;
///
static void string2params(std::string const &, InsetCommandParams &);
///
static std::string const params2string(InsetCommandParams const &);
private:
///
static std::string const name_;
///
InsetInclude & inset_;
};
#endif // INSETINCLUDE_H