-
-
-//
-// Table of Contents
-//
-
-static vector<Buffer::TocItem> toclist;
-
-
-extern "C" void TocSelectCB(FL_OBJECT * ob, long)
-{
- if (!current_view->available())
- return;
-
- TocUpdateCB(0, 0);
- unsigned int choice = fl_get_browser(ob);
- if (0 < choice && choice - 1 < toclist.size()) {
- current_view->beforeChange();
- current_view->text->SetCursor(current_view, toclist[choice-1].par, 0);
- current_view->text->sel_cursor =
- current_view->text->cursor;
- current_view->update(BufferView::SELECT|BufferView::FITCUR);
- } else {
- WriteAlert(_("Error"),
- _("Couldn't find this label"),
- _("in current document."));
- }
-}
-
-
-extern "C" void TocCancelCB(FL_OBJECT *, long)
-{
- fl_hide_form(fd_form_toc->form_toc);
-}
-
-
-extern "C"
-void TocUpdateCB(FL_OBJECT *, long)
-{
- if (!current_view->available()) {
- toclist.clear();
- fl_clear_browser(fd_form_toc->browser_toc);
- fl_add_browser_line(fd_form_toc->browser_toc,
- _("*** No Document ***"));
- return;
- }
-
- vector<vector<Buffer::TocItem> > tmp =
- current_view->buffer()->getTocList();
- int type = fl_get_choice(fd_form_toc->toctype)-1;
- //if (toclist == tmp[type])
- // return;
- if (toclist.size() == tmp[type].size()) {
- // Check if all elements are the same.
- unsigned int i = 0;
- for (; i < toclist.size(); ++i) {
- if (toclist[i] != tmp[type][i])
- break;
- }
- if (i >= toclist.size()) return;
- }
-
- toclist = tmp[type];
-
- static Buffer * buffer = 0;
- int topline = 0;
- int line = 0;
- if (buffer == current_view->buffer()) {
- topline = fl_get_browser_topline(fd_form_toc->browser_toc);
- line = fl_get_browser(fd_form_toc->browser_toc);
- } else
- buffer = current_view->buffer();
-
- fl_clear_browser(fd_form_toc->browser_toc);
- fl_hide_object(fd_form_toc->browser_toc);
-
- for (vector<Buffer::TocItem>::const_iterator it = toclist.begin();
- it != toclist.end(); ++it)
- fl_add_browser_line(fd_form_toc->browser_toc,
- (string(4*(*it).depth,' ')+
- (*it).str).c_str());
-
- fl_set_browser_topline(fd_form_toc->browser_toc, topline);
- fl_select_browser_line(fd_form_toc->browser_toc, line);
- fl_show_object(fd_form_toc->browser_toc);
-}
-
-
-/* callbacks for form form_ref */
-extern "C" void RefSelectCB(FL_OBJECT *, long data)
-{
- if (!current_view->available())
- return;
-
- string s =
- fl_get_browser_line(fd_form_ref->browser_ref,
- fl_get_browser(fd_form_ref->browser_ref));
- string u = frontStrip(strip(fl_get_input(fd_form_ref->ref_name)));
-
- if (s.empty())
- return;
-
- if (data == 5) {
- current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFGOTO, s.c_str());
- if (!current_view->NoSavedPositions()) {
- fl_activate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
- }
- return;
- } else if (data >= 6) {
- current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFBACK);
- if (current_view->NoSavedPositions()) {
- fl_deactivate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
- }
- return;
- }
-
- static string const commands[5]
- = { "\\ref", "\\pageref", "\\vref", "\\vpageref",
- "\\prettyref"};
- string t = commands[data];
-
- if (current_view->buffer()->isSGML())
- t += "[" + u + "]" + "{" + s + "}";
- else
- t += "{" + s + "}";
-
- Inset * new_inset =
- new InsetRef(t, current_view->buffer());
- current_view->insertInset(new_inset);
-}
-
-
-extern "C" void RefUpdateCB(FL_OBJECT *, long)
-{
- if (!current_view->available()) {
- fl_clear_browser(fd_form_ref->browser_ref);
- return;
- }
-
- FL_OBJECT * brow = fd_form_ref->browser_ref;
-
- // Get the current line, in order to restore it later
- char const * const btmp = fl_get_browser_line(brow,
- fl_get_browser(brow));
- string currentstr = btmp ? btmp : "";
-
- fl_clear_browser(brow);
- fl_hide_object(brow);
-
- vector<string> refs = current_view->buffer()->getLabelList();
- if (fl_get_button(fd_form_ref->sort))
- sort(refs.begin(),refs.end());
- for (vector<string>::const_iterator it = refs.begin();
- it != refs.end(); ++it)
- fl_add_browser_line(brow, (*it).c_str());
-
- int topline = 1;
- int total_lines = fl_get_browser_maxline(brow);
- for (int i = 1; i <= total_lines ; ++i) {
- if (fl_get_browser_line(brow, i) == currentstr) {
- topline = i;
- break;
- }
- }
- fl_set_browser_topline(brow, topline);
-
- bool empty = refs.empty();
- bool sgml = current_view->buffer()->isSGML();
- bool readonly = current_view->buffer()->isReadonly();
-
- if (current_view->NoSavedPositions()) {
- fl_deactivate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
- } else {
- fl_activate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
- }
-
- if (empty) {
- fl_add_browser_line(brow,
- _("*** No labels found in document ***"));
- fl_deactivate_object(brow);
- fl_deactivate_object(fd_form_ref->gotoref);
- fl_set_object_lcol(fd_form_ref->gotoref, FL_INACTIVE);
- } else {
- fl_select_browser_line(brow, topline);
- fl_activate_object(brow);
- fl_activate_object(fd_form_ref->gotoref);
- fl_set_object_lcol(fd_form_ref->gotoref, FL_BLACK);
- }
-
- if (empty || readonly) {
- fl_deactivate_object(fd_form_ref->ref);
- fl_set_object_lcol(fd_form_ref->ref, FL_INACTIVE);
- fl_deactivate_object(fd_form_ref->pageref);
- fl_set_object_lcol(fd_form_ref->pageref, FL_INACTIVE);
- } else {
- fl_activate_object(fd_form_ref->ref);
- fl_set_object_lcol(fd_form_ref->ref, FL_BLACK);
- fl_activate_object(fd_form_ref->pageref);
- fl_set_object_lcol(fd_form_ref->pageref, FL_BLACK);
- }
-
- if (empty || readonly || sgml) {
- fl_deactivate_object(fd_form_ref->vref);
- fl_set_object_lcol(fd_form_ref->vref, FL_INACTIVE);
- fl_deactivate_object(fd_form_ref->vpageref);
- fl_set_object_lcol(fd_form_ref->vpageref, FL_INACTIVE);
- fl_deactivate_object(fd_form_ref->prettyref);
- fl_set_object_lcol(fd_form_ref->prettyref, FL_INACTIVE);
- } else {
- fl_activate_object(fd_form_ref->vref);
- fl_set_object_lcol(fd_form_ref->vref, FL_BLACK);
- fl_activate_object(fd_form_ref->vpageref);
- fl_set_object_lcol(fd_form_ref->vpageref, FL_BLACK);
- fl_activate_object(fd_form_ref->prettyref);
- fl_set_object_lcol(fd_form_ref->prettyref, FL_BLACK);
- }
-
- if (sgml) {
- fl_activate_object(fd_form_ref->ref_name);
- fl_set_object_lcol(fd_form_ref->ref_name, FL_BLACK);
- } else {
- fl_deactivate_object(fd_form_ref->ref_name);
- fl_set_object_lcol(fd_form_ref->ref_name, FL_INACTIVE);
- }
-
- fl_show_object(brow);
-}
-
-
-extern "C" void RefHideCB(FL_OBJECT *, long)
-{
- fl_hide_form(fd_form_ref->form_ref);
-}