]> git.lyx.org Git - lyx.git/blob - src/insets/insetbase.h
ws changes only
[lyx.git] / src / insets / insetbase.h
1 // -*- C++ -*-
2 /**
3  * \file insetbase.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author none
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #ifndef INSETBASE_H
13 #define INSETBASE_H
14
15 #include <string>
16 #include <vector>
17 #include <memory>
18
19 class Buffer;
20 class BufferView;
21 class FuncRequest;
22 class MetricsInfo;
23 class Dimension;
24 class PainterInfo;
25 class LaTeXFeatures;
26
27 /** Dispatch result codes
28                 DISPATCHED          = the inset catched the action
29                 DISPATCHED_NOUPDATE = the inset catched the action and no update
30                                 is needed here to redraw the inset
31                 FINISHED            = the inset must be unlocked as a result
32                                 of the action
33                 FINISHED_RIGHT      = FINISHED, but put the cursor to the RIGHT of
34                                 the inset.
35                 FINISHED_UP         = FINISHED, but put the cursor UP of
36                                 the inset.
37                 FINISHED_DOWN       = FINISHED, but put the cursor DOWN of
38                                 the inset.
39                 UNDISPATCHED        = the action was not catched, it should be
40                                 dispatched by lower level insets
41 */
42 enum dispatch_result {
43         UNDISPATCHED = 0,
44         DISPATCHED,
45         DISPATCHED_NOUPDATE,
46         FINISHED,
47         FINISHED_RIGHT,
48         FINISHED_UP,
49         FINISHED_DOWN,
50         DISPATCHED_POP
51 };
52
53 /** \c DispatchResult is a wrapper for dispatch_result.
54  *  It can be forward-declared and passed as a function argument without
55  *  having to expose insetbase.h.
56  */
57 class DispatchResult {
58         dispatch_result val_;
59 public:
60         DispatchResult(dispatch_result val) : val_(val) {}
61         operator dispatch_result() const{ return val_; }
62 };
63
64
65
66 /// Common base class to all insets
67 class InsetBase {
68 public:
69         ///
70         typedef int      difference_type;
71         /// short of anything else reasonable
72         typedef size_t   size_type;
73         /// type for cell indices
74         typedef size_t  idx_type;
75         /// type for cursor positions
76         typedef size_t  pos_type;
77         /// type for row numbers
78         typedef size_t  row_type;
79         /// type for column numbers
80         typedef size_t  col_type;
81
82         /// virtual base class destructor
83         virtual ~InsetBase() {}
84         /// replicate ourselves
85         virtual std::auto_ptr<InsetBase> clone() const = 0;
86
87         // the real dispatcher
88         virtual dispatch_result dispatch
89                 (FuncRequest const & cmd, idx_type & idx, pos_type & pos);
90
91         /// small wrapper for the time being
92         virtual dispatch_result localDispatch(FuncRequest const & cmd);
93         /// compute the size of the object returned in dim
94         virtual void metrics(MetricsInfo & mi, Dimension & dim) const = 0;
95         /// draw inset and update (xo, yo)-cache
96         virtual void draw(PainterInfo & pi, int x, int y) const = 0;
97
98         /// request "external features"
99         virtual void validate(LaTeXFeatures &) const {}
100         /// Appends \c list with all labels found within this inset.
101         virtual void getLabelList(Buffer const &,
102                                   std::vector<std::string> & /* list */) const {}
103 };
104
105 #endif