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 ***************************************************************************/
26 #include "insets/insetref.h"
32 FormRef::FormRef(LyXView *v, Dialogs *d)
33 : dialog_(0), lv_(v), d_(d), inset_(0), h_(0), u_(0), ih_(0),
34 sort(0), gotowhere(GOTOREF), refs(0)
36 // let the dialog be shown
37 // This is a permanent connection so we won't bother
38 // storing a copy because we won't be disconnecting.
39 d->showRef.connect(slot(this, &FormRef::showRef));
40 d->createRef.connect(slot(this, &FormRef::createRef));
48 void FormRef::showRef(InsetCommand * const inset)
50 // FIXME: when could inset be 0 here ?
55 readonly = lv_->buffer()->isReadonly();
56 ih_ = inset_->hide.connect(slot(this,&FormRef::hide));
57 params = inset->params();
62 void FormRef::createRef(string const & arg)
67 readonly = lv_->buffer()->isReadonly();
68 params.setFromString(arg);
72 void FormRef::select(const char *text)
78 void FormRef::highlight(const char *text)
80 if (gotowhere==GOTOBACK)
83 dialog_->buttonGoto->setEnabled(true);
85 dialog_->type->setEnabled(true);
86 dialog_->reference->setText(text);
87 dialog_->buttonOk->setEnabled(true);
91 void FormRef::set_sort(bool on)
95 dialog_->refs->clear();
100 void FormRef::goto_ref()
104 lv_->getLyXFunc()->Dispatch(LFUN_REF_GOTO, dialog_->reference->text());
106 dialog_->buttonGoto->setText(_("&Go back"));
107 QToolTip::remove(dialog_->buttonGoto);
108 QToolTip::add(dialog_->buttonGoto,_("Jump back to original position"));
111 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
113 dialog_->buttonGoto->setText(_("&Goto reference"));
114 QToolTip::remove(dialog_->buttonGoto);
115 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
120 void FormRef::updateRefs()
122 // list will be re-done, should go back if necessary
123 if (gotowhere==GOTOBACK) {
124 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
126 dialog_->buttonGoto->setText(_("&Goto reference"));
127 QToolTip::remove(dialog_->buttonGoto);
128 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
131 dialog_->refs->setAutoUpdate(false);
133 // need this because Qt will send a highlight() here for
134 // the first item inserted
135 string tmp(dialog_->reference->text());
137 for (vector< string >::const_iterator iter = refs.begin();
138 iter != refs.end(); ++iter) {
140 dialog_->refs->inSort(iter->c_str());
142 dialog_->refs->insertItem(iter->c_str());
145 dialog_->reference->setText(tmp.c_str());
147 for (unsigned int i = 0; i < dialog_->refs->count(); ++i) {
148 if (!strcmp(dialog_->reference->text(),dialog_->refs->text(i)))
149 dialog_->refs->setCurrentItem(i);
152 dialog_->refs->setAutoUpdate(true);
153 dialog_->refs->update();
156 void FormRef::do_ref_update()
159 dialog_->refs->clear();
160 refs = lv_->buffer()->getLabelList();
162 dialog_->sort->setEnabled(true);
166 void FormRef::update(bool switched)
173 dialog_->reference->setText(params.getContents().c_str());
174 dialog_->refname->setText(params.getOptions().c_str());
177 dialog_->type->setCurrentItem(InsetRef::getType(params.getCmdName()));
179 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_SAVE, "0");
180 dialog_->buttonGoto->setText(_("&Goto reference"));
181 QToolTip::remove(dialog_->buttonGoto);
182 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
186 dialog_->sort->setChecked(sort);
190 dialog_->buttonGoto->setEnabled(params.getContents()!="");
191 dialog_->buttonOk->setEnabled(params.getContents()!="");
193 dialog_->type->setEnabled(!readonly);
194 dialog_->sort->setEnabled(!readonly);
195 dialog_->refs->setEnabled(!readonly);
196 dialog_->buttonOk->setEnabled(!readonly);
197 dialog_->buttonUpdate->setEnabled(!readonly);
199 dialog_->buttonCancel->setText(_("&Close"));
201 dialog_->buttonCancel->setText(_("&Cancel"));
204 void FormRef::apply()
209 if (!lv_->view()->available())
212 params.setCmdName(InsetRef::getName(dialog_->type->currentItem()));
213 params.setContents(dialog_->reference->text());
214 params.setOptions(dialog_->refname->text());
217 if (params != inset_->params()) {
218 inset_->setParams(params);
219 lv_->view()->updateInset(inset_, true);
222 lv_->getLyXFunc()->Dispatch(LFUN_REF_INSERT, params.getAsString().c_str());
228 dialog_ = new RefDialog(this, 0, _("LyX: Cross Reference"), false);
230 if (!dialog_->isVisible()) {
231 h_ = d_->hideBufferDependent.connect(slot(this, &FormRef::hide));
232 u_ = d_->updateBufferDependent.connect(slot(this, &FormRef::update));
236 dialog_->setActiveWindow();
242 void FormRef::close()