-
-}
-
-void add_references2(int menu, vector<int> & smn, Window win,
- vector<string> const & label_list, string const & type)
-{
- size_type const max_number_of_items = 25;
- size_type const max_number_of_items2 = 20;
- string::size_type const max_item_length = 40;
- string::size_type const max_item_length2 = 20;
-
- if (label_list.size() <= max_number_of_items)
- for (size_type i = 0; i < label_list.size(); ++i) {
- int action = (type == "goto")
- ? lyxaction.getPseudoAction(LFUN_REF_GOTO,
- label_list[i])
- : lyxaction.getPseudoAction(LFUN_REF_INSERT,
- type + "|++||++|"
- + label_list[i]);
- string label = label_list[i];
- if (label.size() > max_item_length)
- label = label.substr(0, max_item_length-1) + "$";
- label += "%x" + tostr(action);
- fl_addtopup(menu, label.c_str());
- }
- else {
- size_type count = 0;
- for (size_type i = 0; i < label_list.size();
- i += max_number_of_items2) {
- ++count;
- if (count > max_number_of_items) {
- fl_addtopup(menu, ". . .%d");
- break;
- }
- size_type j = min(label_list.size(),
- i+max_number_of_items2);
-
- string label;
- label += (label_list[i].size() > max_item_length2)
- ? label_list[i].substr(0, max_item_length2-1) + "$"
- : label_list[i];
- label += "..";
- label += (label_list[j-1].size() > max_item_length2)
- ? label_list[j-1].substr(0, max_item_length2-1) + "$"
- : label += label_list[j-1];
-
- if (smn.size() < max_number_of_menus) {
- int menu2 = fl_newpup(win);
- smn.push_back(menu2);
- for (size_type k = i; k < j; ++k) {
- int action = (type == "goto")
- ? lyxaction.getPseudoAction(LFUN_REF_GOTO,
- label_list[k])
- : lyxaction.getPseudoAction(LFUN_REF_INSERT,
- type + "|++||++|"
- + label_list[k]);
- string label2 = label_list[k];
- if (label2.size() > max_item_length)
- label2 = label2.substr(0, max_item_length-1) + "$";
- label2 += "%x" + tostr(action);
- fl_addtopup(menu2, label2.c_str());
- }
- label += "%m";
- fl_addtopup(menu, label.c_str(), menu2);
- } else {
- label += "%d";
- fl_addtopup(menu, label.c_str());
- }
- }
- }
-}
-
-
-void Menubar::Pimpl::add_references(int menu, string const & extra_label,
- vector<int> & smn, Window win)
-{
- //xgettext:no-c-format
- static char const * MenuNames[6] = { N_("Insert Reference%m"),
- //xgettext:no-c-format
- N_("Insert Page Number%m"),
- //xgettext:no-c-format
- N_("Insert vref%m"),
- //xgettext:no-c-format
- N_("Insert vpageref%m"),
- //xgettext:no-c-format
- N_("Insert Pretty Ref%m"),
- //xgettext:no-c-format
- N_("Goto Reference%m") };
-
- int const EMPTY = 1;
- int const SGML = 2;
- int const READONLY = 4;
-
- static int MenuFlags[6] = {
- EMPTY | READONLY,
- EMPTY | READONLY,
- EMPTY | READONLY | SGML,
- EMPTY | READONLY | SGML,
- EMPTY | READONLY | SGML,
- EMPTY };
-
- static string const MenuTypes[6] = {
- "ref", "pageref", "vref", "vpageref", "prettyref", "goto" };
-
- vector<string> label_list = owner_->buffer()->getLabelList();
-
- int flag = 0;
- if (label_list.empty())
- flag += EMPTY;
- if (owner_->buffer()->isSGML())
- flag += SGML;
- if (owner_->buffer()->isReadonly())
- flag += READONLY;
-
- int max_nonempty = -1;
- for (int i = 0; i < 6; ++i)
- if ((MenuFlags[i] & flag) == 0)
- max_nonempty = i;
-
- for (int i = 0; i < 6; ++i) {
- if ((MenuFlags[i] & flag) == 0) {
- string label = _(MenuNames[i]);
- if (i == max_nonempty)
- label += extra_label;
- if (smn.size() < max_number_of_menus) {
- int menu2 = fl_newpup(win);
- smn.push_back(menu2);
- add_references2(menu2, smn, win, label_list,
- MenuTypes[i]);
- fl_addtopup(menu, label.c_str(), menu2);
- } else {
- label += "%d";
- fl_addtopup(menu, label.c_str());
- }
+#else
+#warning Fix Me! (Lgb)
+ Buffer::Lists toc_list = owner_->buffer()->getLists();
+ Buffer::Lists::const_iterator cit = toc_list.begin();
+ Buffer::Lists::const_iterator end = toc_list.end();
+ for (; cit != end; ++cit) {
+ // Handle this elsewhere
+ if (cit->first == "TOC") continue;
+
+ int menu2 = get_new_submenu(smn, win);
+ Buffer::SingleList::const_iterator ccit = cit->second.begin();
+ Buffer::SingleList::const_iterator eend = cit->second.end();
+ for (; ccit != eend; ++ccit) {
+ int const action =
+ lyxaction
+ .getPseudoAction(LFUN_GOTO_PARAGRAPH,
+ tostr(ccit->par->id()));
+ string label = fixlabel(ccit->str);
+ label = limit_string_length(label);
+ label += "%x" + tostr(action + action_offset);
+ fl_addtopup(menu2, label.c_str());