4 * John Levon, moz@compsoc.man.ac.uk
7 /***************************************************************************
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
14 ***************************************************************************/
24 #include "formrefdialog.h"
27 FormRef::FormRef(LyXView *v, Dialogs *d)
28 : dialog_(0), lv_(v), d_(d), inset_(0), h_(0), u_(0), ih_(0),
29 sort(0), gotowhere(GOTOREF), type(REF), refs(0)
31 // let the dialog be shown
32 // This is a permanent connection so we won't bother
33 // storing a copy because we won't be disconnecting.
34 d->showRef.connect(slot(this, &FormRef::showRef));
35 d->createRef.connect(slot(this, &FormRef::createRef));
43 void FormRef::showRef(InsetCommand * const inset)
45 // FIXME: when could inset be 0 here ?
50 readonly = lv_->buffer()->isReadonly();
51 ih_ = inset_->hide.connect(slot(this,&FormRef::hide));
52 params = inset->params();
57 void FormRef::createRef(string const & arg)
62 readonly = lv_->buffer()->isReadonly();
63 params.setFromString(arg);
67 void FormRef::select(const char *text)
69 params.setContents(text);
70 lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK);
72 dialog_->buttonGoto->setText(_("&Goto reference"));
73 dialog_->buttonGoto->setEnabled(true);
75 dialog_->type->setEnabled(true);
76 dialog_->reference->setText(text);
77 dialog_->buttonOk->setEnabled(true);
81 void FormRef::set_sort(bool on)
85 dialog_->refs->clear();
90 void FormRef::goto_ref()
94 lv_->getLyXFunc()->Dispatch(LFUN_REF_GOTO, params.getContents().c_str());
96 dialog_->buttonGoto->setText(_("&Go back"));
99 lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK, params.getContents().c_str());
101 dialog_->buttonGoto->setText(_("&Goto reference"));
106 void FormRef::updateRefs()
108 dialog_->refs->setAutoUpdate(false);
110 for (vector< string >::const_iterator iter = refs.begin();
111 iter != refs.end(); ++iter) {
113 dialog_->refs->inSort(iter->c_str());
115 dialog_->refs->insertItem(iter->c_str());
117 dialog_->refs->setAutoUpdate(true);
118 dialog_->refs->update();
121 void FormRef::update()
123 dialog_->reference->setText(params.getContents().c_str());
124 dialog_->refname->setText(params.getOptions().c_str());
126 if (params.getCmdName()=="prettyref") {
128 dialog_->type->setCurrentItem(4);
129 } else if (params.getCmdName()=="pageref") {
131 dialog_->type->setCurrentItem(1);
132 } else if (params.getCmdName()=="vref") {
134 dialog_->type->setCurrentItem(2);
135 } else if (params.getCmdName()=="vpageref") {
137 dialog_->type->setCurrentItem(3);
140 dialog_->type->setCurrentItem(0);
143 dialog_->buttonGoto->setText(_("&Goto reference"));
147 dialog_->sort->setChecked(sort);
149 dialog_->refs->clear();
150 dialog_->type->setEnabled(false);
153 // FIXME: should totally remove and re-size dialog,
154 // but doesn't seem easily possible
155 dialog_->refs->hide();
156 dialog_->labelrefs->hide();
157 dialog_->sort->hide();
158 dialog_->buttonUpdate->hide();
159 dialog_->buttonGoto->setEnabled(true);
161 dialog_->refs->show();
162 dialog_->labelrefs->show();
163 dialog_->sort->show();
164 dialog_->buttonUpdate->show();
165 refs = lv_->buffer()->getLabelList();
167 dialog_->sort->setEnabled(true);
171 if (params.getContents()=="") {
172 dialog_->buttonGoto->setEnabled(false);
173 dialog_->buttonOk->setEnabled(false);
175 dialog_->buttonGoto->setEnabled(true);
176 dialog_->buttonOk->setEnabled(true);
180 dialog_->type->setEnabled(false);
181 dialog_->buttonOk->setEnabled(false);
182 dialog_->buttonUpdate->setEnabled(false);
183 dialog_->buttonCancel->setText(_("&Close"));
185 dialog_->type->setEnabled(true);
186 dialog_->buttonUpdate->setEnabled(true);
187 dialog_->buttonCancel->setText(_("&Cancel"));
191 void FormRef::apply()
196 if (!lv_->view()->available())
199 switch (dialog_->type->currentItem()) {
201 params.setCmdName("ref");
204 params.setCmdName("pageref");
207 params.setCmdName("vref");
210 params.setCmdName("vpageref");
213 params.setCmdName("prettyref");
216 lyxerr[Debug::GUI] << "Unknown Ref Type" << endl;
219 params.setOptions(dialog_->refname->text());
222 if (params != inset_->params()) {
223 inset_->setParams(params);
224 lv_->view()->updateInset(inset_, true);
227 lv_->getLyXFunc()->Dispatch(LFUN_REF_INSERT, params.getAsString().c_str());
233 dialog_ = new FormRefDialog(this, 0, _("LyX: Cross Reference"), false);
235 if (!dialog_->isVisible()) {
236 h_ = d_->hideBufferDependent.connect(slot(this, &FormRef::hide));
237 u_ = d_->updateBufferDependent.connect(slot(this, &FormRef::update));
241 dialog_->setActiveWindow();
247 void FormRef::close()