]> git.lyx.org Git - lyx.git/blob - src/insets/inseturl.C
Small cleanup from Angus
[lyx.git] / src / insets / inseturl.C
1 #include <config.h>
2
3 #include <cstdlib>
4
5 #ifdef __GNUG__
6 #pragma implementation
7 #endif
8
9 #include FORMS_H_LOCATION 
10 #include "inseturl.h"
11 #include "LString.h"
12 #include "commandtags.h"
13 #include "debug.h"
14 #include "gettext.h"
15 #include "LaTeXFeatures.h"
16 #include "lyx_gui_misc.h" // CancelCloseBoxCB
17
18 using std::ostream;
19
20
21 InsetUrl::InsetUrl(string const & cmd)
22         : fd_form_url(0)
23 {
24         scanCommand(cmd);
25         if (getCmdName() == "url")
26                 flag = InsetUrl::URL;
27         else
28                 flag = InsetUrl::HTML_URL;
29 }
30
31
32 InsetUrl::InsetUrl(InsetCommand const & inscmd)
33         : fd_form_url(0)
34 {
35         setCmdName(inscmd.getCmdName());
36         setContents(inscmd.getContents());
37         setOptions(inscmd.getOptions());
38         if (getCmdName() == "url")
39                 flag = InsetUrl::URL;
40         else
41                 flag = InsetUrl::HTML_URL;
42 }
43
44
45 InsetUrl::InsetUrl(string const & ins_name, string const & ins_cont,
46                    string const & ins_opt)
47         : fd_form_url(0)
48 {
49         setCmdName(ins_name);
50         setContents(ins_cont);
51         setOptions(ins_opt);
52         if (ins_name == "url")
53                 flag = InsetUrl::URL;
54         else
55                 flag = InsetUrl::HTML_URL;
56 }
57
58
59 InsetUrl::~InsetUrl()
60 {
61         if (fd_form_url) {
62                 fl_hide_form(fd_form_url->form_url);
63                 fl_free_form(fd_form_url->form_url);
64                 fd_form_url = 0;
65         }
66 }
67
68
69 void InsetUrl::CloseUrlCB(FL_OBJECT * ob, long)
70 {
71         Holder * holder = static_cast<Holder*>(ob->u_vdata);
72         
73         InsetUrl * inset = holder->inset;
74         BufferView * bv = holder->view;
75         
76         string url = fl_get_input(inset->fd_form_url->url_name);
77         string name = fl_get_input(inset->fd_form_url->name_name);
78         string cmdname;
79         if (fl_get_button(inset->fd_form_url->radio_html))
80                 cmdname = "htmlurl";
81         else
82                 cmdname = "url";
83         
84         Buffer * buffer = bv->buffer();
85         
86         if ((url != inset->getContents() ||
87              name != inset->getOptions() ||
88              cmdname != inset->getCmdName())
89             && !(buffer->isReadonly()) ) {
90                 buffer->markDirty();
91                 inset->setContents(url);
92                 inset->setOptions(name);
93                 inset->setCmdName(cmdname);
94                 if (cmdname == "url")
95                         inset->flag = InsetUrl::URL;
96                 else
97                         inset->flag = InsetUrl::HTML_URL;
98                 bv->updateInset(inset, true);
99         }
100         
101         if (inset->fd_form_url) {
102                 fl_hide_form(inset->fd_form_url->form_url);
103                 fl_free_form(inset->fd_form_url->form_url);
104                 inset->fd_form_url = 0;
105         }
106 }
107
108
109 extern "C"
110 void C_InsetUrl_CloseUrlCB(FL_OBJECT * ob, long data)
111 {
112         InsetUrl::CloseUrlCB(ob, data);
113 }
114
115
116 char const * InsetUrl::EditMessage() const 
117 {
118         return _("Opened Url");
119 }
120
121
122 void InsetUrl::Edit(BufferView * bv, int, int, unsigned int)
123 {
124         static int ow = -1, oh;
125
126         if(bv->buffer()->isReadonly())
127                 WarnReadonly(bv->buffer()->fileName());
128
129         if (!fd_form_url) {
130                 fd_form_url = create_form_form_url();
131                 holder.inset = this;
132                 fd_form_url->button_close->u_vdata = &holder;
133                 fl_set_form_atclose(fd_form_url->form_url,
134                                     CancelCloseBoxCB, 0);
135         }
136         holder.view = bv;
137         fl_set_input(fd_form_url->url_name, getContents().c_str());
138         fl_set_input(fd_form_url->name_name, getOptions().c_str());
139         switch(flag) {
140         case InsetUrl::URL:
141                 fl_set_button(fd_form_url->radio_html, 0);
142                 break;
143         case InsetUrl::HTML_URL:
144                 fl_set_button(fd_form_url->radio_html, 1);
145                 break;
146         }
147         
148         if (fd_form_url->form_url->visible) {
149                 fl_raise_form(fd_form_url->form_url);
150         } else {
151                 fl_show_form(fd_form_url->form_url,
152                              FL_PLACE_MOUSE | FL_FREE_SIZE,
153                              FL_FULLBORDER, _("Insert Url"));
154                 if (ow < 0) {
155                         ow = fd_form_url->form_url->w;
156                         oh = fd_form_url->form_url->h;
157                 }
158                 fl_set_form_minsize(fd_form_url->form_url, ow, oh);
159         }
160 }
161
162
163 string InsetUrl::getScreenLabel() const
164 {
165         string temp;
166         if (flag == InsetUrl::HTML_URL)
167                 temp += _("HtmlUrl: ");
168         else 
169                 temp += _("Url: ");
170         if(!getOptions().empty()) {
171                 temp += getOptions();
172         } else {
173           temp += getContents();
174         }
175         return temp;
176 }
177
178
179 int InsetUrl::Latex(Buffer const *, ostream & os,
180                     bool fragile, bool /*free_spc*/) const
181 {
182         if (!getOptions().empty())
183                 os << getOptions() + ' ';
184         if (fragile)
185                 os << "\\protect";
186         os << "\\url{" << getContents() << '}';
187         return 0;
188 }
189
190
191 int InsetUrl::Ascii(Buffer const *, ostream & os) const
192 {
193         if (getOptions().empty())
194                 os << "[" << getContents() << "]";
195         else
196                 os << "[" << getContents() << "||" <<  getOptions() << "]";
197         return 0;
198 }
199
200
201 int InsetUrl::Linuxdoc(Buffer const *, ostream & os) const
202 {
203         os << "<" << getCmdName()
204            << " url=\""  << getContents() << "\""
205            << " name=\"" << getOptions() << "\">";
206
207         return 0;
208 }
209
210
211 int InsetUrl::DocBook(Buffer const *, ostream & os) const
212 {
213         os << "<ulink url=\"" << getContents() << "\">"
214            << getOptions() << "</ulink>";
215         return 0;
216 }
217
218
219 void InsetUrl::Validate(LaTeXFeatures & features) const
220 {
221         features.url = true;
222 }