// -*- C++ -*-
-/* This file is part of*
- * ======================================================
+/**
+ * \file insetcite.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * LyX, The Document Processor
- *
- * Copyright 2000 The LyX Team.
- *
- * ====================================================== */
+ * \author Angus Leeming
+ * \author Herbert Voss
+ *
+ * Full author contact details are available in file CREDITS
+ */
#ifndef INSET_CITE_H
#define INSET_CITE_H
-#ifdef __GNUG__
-#pragma interface
-#endif
#include "insetcommand.h"
-/** Used to insert citations
+/** Used to insert citations
*/
class InsetCitation : public InsetCommand {
public:
///
InsetCitation(InsetCommandParams const &);
///
- Inset * Clone() const { return new InsetCitation(params()); }
+ ~InsetCitation();
+ ///
+ std::auto_ptr<InsetBase> clone() const {
+ return std::auto_ptr<InsetBase>(new InsetCitation(params()));
+ }
+ ///
+ string const getScreenLabel(Buffer const *) const;
+ ///
+ EDITABLE editable() const { return IS_EDITABLE; }
+ ///
+ InsetOld::Code lyxCode() const { return InsetOld::CITE_CODE; }
///
- string const getScreenLabel() const;
+ int ascii(Buffer const *, std::ostream &, int linelen) const;
+ ///
+ int latex(Buffer const *, std::ostream &,
+ LatexRunParams const &) const;
+ ///
+ dispatch_result localDispatch(FuncRequest const & cmd);
+ ///
+ void validate(LaTeXFeatures &) const;
+ /** Invoked by BufferView::Pimpl::dispatch when a new citation key
+ is inserted. Tells us that the buffer is no longer being loaded
+ and that the cache of BibTeX keys should be reloaded in the future.
+ */
+ void setLoadingBuffer(Buffer const * buffer, bool state) const;
+private:
+ struct Cache {
+ ///
+ enum Style {
+ ///
+ BASIC,
+ ///
+ NATBIB_AY,
+ ///
+ NATBIB_NUM
+ };
+ ///
+ Cache() : style(BASIC) {}
+ ///
+ Style style;
+ ///
+ InsetCommandParams params;
+ ///
+ string generated_label;
+ ///
+ string screen_label;
+ };
+
+ /// This function does the donkey work of creating the pretty label
+ string const generateLabel(Buffer const *) const;
+ ///
+ Cache::Style getStyle(Buffer const * buffer) const;
+
///
- EDITABLE Editable() const { return IS_EDITABLE; }
- ///
- void Edit(BufferView *, int, int, unsigned int);
+ mutable Cache cache;
};
#endif // INSET_CITE_H