]> git.lyx.org Git - lyx.git/blob - src/figureForm.C
the rest read the ChangeLog, hope I remembered all
[lyx.git] / src / figureForm.C
1 /* This file is part of
2  * ====================================================== 
3  * 
4  *           LyX, The Document Processor
5  *       
6  *          Copyright 1995 Matthias Ettrich,
7  *          Copyright 1995-2000 The LyX Team.
8  *
9  * ====================================================== */
10
11 #include <config.h>
12
13 #include <fstream>
14 #include <algorithm>
15 #include <utility> 
16 #include <iostream>
17
18 #include FORMS_H_LOCATION
19
20 #include "figure_form.h"
21 #include "insets/figinset.h"
22 #include "BufferView.h"
23 #include "lyxtext.h"
24 #include "LyXView.h"
25 #include "lyxfunc.h"
26 #include "gettext.h"
27
28 extern FD_form_figure * fd_form_figure;
29 extern BufferView * current_view;
30
31 void Figure()
32 {
33         if (fd_form_figure->form_figure->visible) {
34                 fl_raise_form(fd_form_figure->form_figure);
35         } else {
36                 fl_show_form(fd_form_figure->form_figure,
37                              FL_PLACE_MOUSE | FL_FREE_SIZE, FL_TRANSIENT,
38                              _("Insert Figure"));
39         }
40 }
41
42
43 /* callbacks for form form_figure */
44 extern "C"
45 void FigureApplyCB(FL_OBJECT *, long)
46 {
47         if (!current_view->available())
48                 return;
49
50         Buffer * buffer = current_view->buffer();
51         if (buffer->isReadonly()) // paranoia
52                 return;
53
54         current_view->owner()->getLyXFunc()
55                 ->Dispatch(LFUN_MESSAGE,
56                            _("Inserting figure..."));
57         if (fl_get_button(fd_form_figure->radio_inline)) {
58                 InsetFig * new_inset = new InsetFig(100, 20, *buffer);
59                 current_view->insertInset(new_inset);
60                 current_view->owner()->getLyXFunc()
61                         ->Dispatch(LFUN_MESSAGE,
62                                    _("Figure inserted"));
63                 new_inset->Edit(current_view, 0, 0, 0);
64                 return;
65         }
66         
67         current_view->hideCursor();
68         current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR);
69         current_view->beforeChange(current_view->text);
70       
71         current_view->text->SetCursorParUndo(current_view->buffer()); 
72         current_view->text->FreezeUndo();
73
74         current_view->text->BreakParagraph(current_view);
75         current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
76
77 #ifndef NEW_INSETS
78         if (current_view->text->cursor.par()->Last()) {
79 #else
80         if (current_view->text->cursor.par()->size()) {
81 #endif
82                 current_view->text->CursorLeft(current_view);
83          
84                 current_view->text->BreakParagraph(current_view);
85                 current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
86         }
87
88         // The standard layout should always be numer 0;
89         current_view->text->SetLayout(current_view, 0);
90
91 #ifndef NEW_INSETS
92         if (current_view->text->cursor.par()->footnoteflag == 
93             LyXParagraph::NO_FOOTNOTE) {
94 #endif
95                 current_view->text->
96                         SetParagraph(current_view, 0, 0,
97                                      0, 0,
98                                      VSpace (0.3 * buffer->params.spacing.getValue(),
99                                              LyXLength::CM),
100                                      VSpace (0.3 *
101                                              buffer->params.spacing.getValue(),
102                                              LyXLength::CM),
103                                      LYX_ALIGN_CENTER, string(), 0);
104 #ifndef NEW_INSETS
105         } else {
106                 current_view->text->SetParagraph(current_view, 0, 0,
107                                                  0, 0,
108                                                  VSpace(VSpace::NONE),
109                                                  VSpace(VSpace::NONE),
110                                                  LYX_ALIGN_CENTER, 
111                                                  string(),
112                                                  0);
113         }
114 #endif
115         
116         current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
117       
118         Inset * new_inset = new InsetFig(100, 100, *buffer);
119         current_view->insertInset(new_inset);
120         new_inset->Edit(current_view, 0, 0, 0);
121         current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR);
122         current_view->owner()->getLyXFunc()->Dispatch(LFUN_MESSAGE,
123                                                       _("Figure inserted"));
124         current_view->text->UnFreezeUndo();
125         current_view->setState();
126 }
127
128
129 extern "C"
130 void FigureCancelCB(FL_OBJECT *, long)
131 {
132         fl_hide_form(fd_form_figure->form_figure);
133 }
134
135
136 extern "C"
137 void FigureOKCB(FL_OBJECT * ob, long data)
138 {
139         FigureApplyCB(ob, data);
140         FigureCancelCB(ob, data);
141 }