3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
19 #include "insets/insetref.h"
25 FormRef::FormRef(LyXView *v, Dialogs *d)
26 : dialog_(0), lv_(v), d_(d), inset_(0), h_(0), u_(0), ih_(0),
27 sort(0), gotowhere(GOTOREF), refs(0)
29 d->showRef.connect(slot(this, &FormRef::showRef));
30 d->createRef.connect(slot(this, &FormRef::createRef));
40 void FormRef::showRef(InsetCommand * const inset)
42 // FIXME: when could inset be 0 here ?
47 readonly = lv_->buffer()->isReadonly();
48 ih_ = inset_->hide.connect(slot(this,&FormRef::hide));
49 params = inset->params();
55 void FormRef::createRef(string const & arg)
60 readonly = lv_->buffer()->isReadonly();
61 params.setFromString(arg);
66 void FormRef::select(char const * text)
73 void FormRef::highlight(char const * text)
75 if (gotowhere==GOTOBACK)
78 dialog_->buttonGoto->setEnabled(true);
80 dialog_->type->setEnabled(true);
81 dialog_->reference->setText(text);
82 dialog_->buttonOk->setEnabled(true);
87 void FormRef::set_sort(bool on)
91 dialog_->refs->clear();
97 void FormRef::goto_ref()
101 lv_->getLyXFunc()->Dispatch(LFUN_REF_GOTO, dialog_->reference->text());
103 dialog_->buttonGoto->setText(_("&Go back"));
104 QToolTip::remove(dialog_->buttonGoto);
105 QToolTip::add(dialog_->buttonGoto,_("Jump back to original position"));
108 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
110 dialog_->buttonGoto->setText(_("&Goto reference"));
111 QToolTip::remove(dialog_->buttonGoto);
112 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
118 void FormRef::updateRefs()
120 // list will be re-done, should go back if necessary
121 if (gotowhere == GOTOBACK) {
122 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
124 dialog_->buttonGoto->setText(_("&Goto reference"));
125 QToolTip::remove(dialog_->buttonGoto);
126 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
129 dialog_->refs->setAutoUpdate(false);
131 // need this because Qt will send a highlight() here for
132 // the first item inserted
133 string tmp(dialog_->reference->text());
135 for (vector< string >::const_iterator iter = refs.begin();
136 iter != refs.end(); ++iter) {
138 dialog_->refs->inSort(iter->c_str());
140 dialog_->refs->insertItem(iter->c_str());
143 dialog_->reference->setText(tmp.c_str());
145 for (unsigned int i=0; i < dialog_->refs->count(); ++i) {
146 if (!compare(dialog_->reference->text(),
147 dialog_->refs->text(i)))
148 dialog_->refs->setCurrentItem(i);
151 dialog_->refs->setAutoUpdate(true);
152 dialog_->refs->update();
156 void FormRef::do_ref_update()
159 dialog_->refs->clear();
160 refs = lv_->buffer()->getLabelList();
162 dialog_->sort->setEnabled(true);
167 void FormRef::update(bool switched)
174 dialog_->reference->setText(params.getContents().c_str());
175 dialog_->refname->setText(params.getOptions().c_str());
178 dialog_->type->setCurrentItem(InsetRef::getType(params.getCmdName()));
180 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_SAVE, "0");
181 dialog_->buttonGoto->setText(_("&Goto reference"));
182 QToolTip::remove(dialog_->buttonGoto);
183 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
187 dialog_->sort->setChecked(sort);
191 dialog_->buttonGoto->setEnabled(params.getContents()!="");
192 dialog_->buttonOk->setEnabled(params.getContents()!="");
194 dialog_->type->setEnabled(!readonly);
195 dialog_->sort->setEnabled(!readonly);
196 dialog_->refs->setEnabled(!readonly);
197 dialog_->buttonOk->setEnabled(!readonly);
198 dialog_->buttonUpdate->setEnabled(!readonly);
200 dialog_->buttonCancel->setText(_("&Close"));
202 dialog_->buttonCancel->setText(_("&Cancel"));
206 void FormRef::apply()
211 if (!lv_->view()->available())
214 params.setCmdName(InsetRef::getName(dialog_->type->currentItem()));
215 params.setContents(dialog_->reference->text());
216 params.setOptions(dialog_->refname->text());
219 if (params != inset_->params()) {
220 inset_->setParams(params);
221 lv_->view()->updateInset(inset_, true);
224 lv_->getLyXFunc()->Dispatch(LFUN_REF_INSERT, params.getAsString().c_str());
231 dialog_ = new RefDialog(this, 0, _("LyX: Cross Reference"), false);
233 if (!dialog_->isVisible()) {
234 h_ = d_->hideBufferDependent.connect(slot(this, &FormRef::hide));
235 u_ = d_->updateBufferDependent.connect(slot(this, &FormRef::update));
239 dialog_->setActiveWindow();
246 void FormRef::close()