]> git.lyx.org Git - lyx.git/blob - src/frontends/kde/FormRef.C
implement getLabelList
[lyx.git] / src / frontends / kde / FormRef.C
1 /**
2  * \file FormRef.C
3  * Copyright 2001 the LyX Team
4  * Read the file COPYING
5  *
6  * \author John Levon
7  */
8
9 #include <config.h>
10
11 #include "support/lstrings.h"
12  
13 #include "FormRef.h"
14 #include "ControlRef.h"
15 #include "gettext.h"
16 #include "refdlg.h"
17 #include "insets/insetref.h"
18
19 #include <qtooltip.h>
20
21 using std::endl;
22
23 FormRef::FormRef(ControlRef & c)
24         : KFormBase<ControlRef, RefDialog>(c),
25         sort_(0), gotowhere_(GOTOREF), refs_(0)
26 {
27 }
28
29
30 void FormRef::build()
31 {
32         dialog_.reset(new RefDialog(this, 0, _("LyX: Cross Reference"), false));
33
34         //bc().setUndoAll(dialog_->buttonRestore); 
35         bc().setOK(dialog_->buttonOk); 
36         //bc().setApply(dialog_->buttonApply); 
37         bc().setCancel(dialog_->buttonCancel); 
38         // FIXME 
39 }
40
41  
42 void FormRef::update()
43 {
44         dialog_->reference->setText(controller().params().getContents().c_str());
45         dialog_->refname->setText(controller().params().getOptions().c_str());
46
47         dialog_->type->setCurrentItem(InsetRef::getType(controller().params().getCmdName()));
48
49         // Name is irrelevant to LaTeX/Literate documents
50         dialog_->refname->setEnabled(controller().docType() != ControlRef::LATEX &&
51             controller().docType() != ControlRef::LITERATE);
52
53         // type is irrelevant to LinuxDoc/DocBook.
54         if (controller().docType() == ControlRef::LINUXDOC ||
55             controller().docType() == ControlRef::DOCBOOK) {
56                 dialog_->type->setCurrentItem(0);
57                 dialog_->type->setEnabled(false);
58         } else
59                 dialog_->type->setEnabled(true);
60
61         dialog_->buttonGoto->setText(_("&Goto reference"));
62         QToolTip::remove(dialog_->buttonGoto);
63         QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
64
65         gotowhere_ = GOTOREF;
66
67         dialog_->sort->setChecked(sort_);
68
69         do_ref_update();
70
71         //dialog_->buttonGoto->setEnabled(params.getContents()!="");
72         //dialog_->buttonOk->setEnabled(params.getContents()!="");
73 }
74
75
76 void FormRef::apply()
77 {
78         controller().params().setCmdName(InsetRef::getName(dialog_->type->currentItem()));
79         controller().params().setContents(dialog_->reference->text());
80         controller().params().setOptions(dialog_->refname->text());
81 }
82
83
84 void FormRef::select(char const * text)
85 {
86         highlight(text);
87         goto_ref();
88 }
89
90
91 void FormRef::highlight(char const * text)
92 {
93         // FIXME 
94         if (gotowhere_==GOTOBACK)
95                 goto_ref();
96
97         dialog_->buttonGoto->setEnabled(true);
98 }
99
100
101 void FormRef::set_sort(bool on)
102 {
103         if (on != sort_) {
104                 sort_=on;
105                 dialog_->refs->clear();
106                 updateRefs();
107         }
108 }
109
110
111 void FormRef::goto_ref()
112 {
113         /* FIXME 
114         switch (gotowhere_) {
115                 case GOTOREF:
116                         lv_->getLyXFunc()->Dispatch(LFUN_REF_GOTO, dialog_->reference->text());
117                         gotowhere=GOTOBACK;
118                         dialog_->buttonGoto->setText(_("&Go back"));
119                         QToolTip::remove(dialog_->buttonGoto); 
120                         QToolTip::add(dialog_->buttonGoto,_("Jump back to original position"));
121                         break;
122                 case GOTOBACK:
123                         lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
124                         gotowhere=GOTOREF;
125                         dialog_->buttonGoto->setText(_("&Goto reference"));
126                         QToolTip::remove(dialog_->buttonGoto); 
127                         QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
128                         break;
129                 }
130         */ 
131 }
132
133
134 void FormRef::updateRefs()
135 {
136         // list will be re-done, should go back if necessary
137         /* FIXME if (gotowhere == GOTOBACK) {
138                 lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
139                 gotowhere = GOTOREF;
140                 dialog_->buttonGoto->setText(_("&Goto reference"));
141                 QToolTip::remove(dialog_->buttonGoto); 
142                 QToolTip::add(dialog_->buttonGoto,_("Jump to selected reference"));
143         }*/
144
145         dialog_->refs->setAutoUpdate(false);
146
147         // need this because Qt will send a highlight() here for
148         // the first item inserted
149         string tmp(dialog_->reference->text());
150
151         for (vector<string>::const_iterator iter = refs_.begin();
152                 iter != refs_.end(); ++iter) {
153                 if (sort_)
154                         dialog_->refs->inSort(iter->c_str());
155                 else
156                         dialog_->refs->insertItem(iter->c_str());
157         }
158
159         dialog_->reference->setText(tmp.c_str());
160
161         for (unsigned int i=0; i < dialog_->refs->count(); ++i) {
162                 if (!compare(dialog_->reference->text(),
163                              dialog_->refs->text(i)))
164                         dialog_->refs->setCurrentItem(i);
165         }
166
167         dialog_->refs->setAutoUpdate(true);
168         dialog_->refs->update();
169 }
170
171
172 void FormRef::do_ref_update()
173 {
174         refs_.clear();
175         dialog_->refs->clear();
176         refs_ = controller().getLabelList();
177         if (!refs_.empty())
178                 dialog_->sort->setEnabled(true);
179         updateRefs();
180 }