]> git.lyx.org Git - lyx.git/blob - src/insets/graphicinset.h
Enable the external inset to handle unknown templates gracefully.
[lyx.git] / src / insets / graphicinset.h
1 // -*- C++ -*-
2 /**
3  * \file graphicinset.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #ifndef GRAPHICINSET_H
13 #define GRAPHICINSET_H
14
15 #include "dimension.h"
16
17 #include "graphics/GraphicsLoader.h"
18 #include "graphics/GraphicsParams.h"
19 #include "graphics/GraphicsTypes.h"
20
21 #include <boost/weak_ptr.hpp>
22 #include <boost/signals/signal0.hpp>
23
24
25 class BufferView;
26 class MetricsInfo;
27 class PainterInfo;
28
29
30 class GraphicInset
31 {
32 public:
33         GraphicInset();
34         GraphicInset(GraphicInset const &);
35
36         /** Set the message that the inset will show when the
37          *  display of the graphic is deactivated.
38          *  The default is nothing, meaning that the inset will
39          *  show a message descibing the state of the image
40          *  loading process.
41          */
42         void setNoDisplayMessage(string const & msg);
43         
44         /// Refresh the info about which file to display and how to display it.
45         void update(grfx::Params const & params);
46
47         /// compute the size of the object returned in dim
48         void metrics(MetricsInfo & mi, Dimension & dim) const;
49         /// draw inset and update (xo, yo)-cache
50         void draw(PainterInfo & pi, int x, int y) const;
51
52         /// Is the stored checksum different to that of the graphics loader?
53         bool hasFileChanged() const;
54         /// An accessor function to the cached store.
55         BufferView * view() const;
56
57         /** Connect and you'll be informed when the loading status of the image
58          *  changes.
59          */
60         typedef boost::signal0<void>::slot_type slot_type;
61         boost::signals::connection connect(slot_type const &) const;
62
63 private:
64         /// Not implemented.
65         GraphicInset & operator=(GraphicInset const &);
66
67         /// The message to display instead of the graphic itself.
68         string const statusMessage() const;
69
70         enum DisplayType {
71                 IMAGE,
72                 STATUS_MESSAGE,
73                 NODISPLAY_MESSAGE
74         };
75
76         /// Is the image ready to draw, or should we display a message instead?
77         DisplayType displayType() const;
78         
79         /// The stored data.
80         grfx::Loader loader_;
81         grfx::Params params_;
82         string nodisplay_message_;
83
84         /// These are all cached variables.
85         mutable unsigned long checksum_;
86         mutable boost::weak_ptr<BufferView> view_;
87         mutable Dimension dim_;
88 };
89
90
91 #endif // NOT GRAPHICINSET_H