20 #include "base/Debug.h" 28 m_lowerLimit(lowerLimit ? lowerLimit : 14),
29 m_upperLimit(upperLimit ? upperLimit : (m_lowerLimit * 5) / 2),
35 int upperLimit, QWidget *parent) :
37 m_lowerLimit(lowerLimit ? lowerLimit : 14),
38 m_upperLimit(upperLimit ? upperLimit : (m_lowerLimit * 5) / 2),
56 int total = entries.size();
61 QMenu *chunkMenu =
new QMenu();
62 chunkMenu->setTearOffEnabled(isTearOffEnabled());
64 QString firstNameInChunk;
65 QChar firstInitialInChunk;
66 bool discriminateStartInitial =
false;
68 for (set<QString>::const_iterator j = entries.begin();
76 set<QString>::iterator k = j;
79 QChar initial = (*j)[0];
82 firstNameInChunk = *j;
83 firstInitialInChunk = initial;
88 bool lastInChunk = (k == entries.end() ||
91 (*k)[0] != initial)));
97 bool discriminateEndInitial = (k != entries.end() &&
100 bool initialsEqual = (firstInitialInChunk == initial);
102 QString from = QString(
"%1").arg(firstInitialInChunk);
103 if (discriminateStartInitial ||
104 (discriminateEndInitial && initialsEqual)) {
105 from = firstNameInChunk.left(3);
108 QString to = QString(
"%1").arg(initial);
109 if (discriminateEndInitial ||
110 (discriminateStartInitial && initialsEqual)) {
116 if (from == to) menuText = from;
117 else menuText = tr(
"%1 - %2").arg(from).arg(to);
119 discriminateStartInitial = discriminateEndInitial;
121 chunkMenu->setTitle(menuText);
123 QMenu::addMenu(chunkMenu);
125 chunkMenu =
new QMenu();
126 chunkMenu->setTearOffEnabled(isTearOffEnabled());
132 if (count == 0)
delete chunkMenu;
139 cerr <<
"ERROR: SubdividingMenu::entriesAdded: setEntries was also called -- should use one mechanism or the other, but not both" << endl;
143 set<QString> entries;
146 entries.insert(i->first);
154 QMenu *menu = dynamic_cast<QMenu *>(i->second);
160 QAction *action = dynamic_cast<QAction *>(i->second);
173 QString name = action->text();
182 QMenu::addAction(action);
194 QAction *action =
new QAction(name,
this);
201 return QMenu::addAction(name);
218 QMenu::addAction(action);
229 QString name = menu->title();
238 QMenu::addMenu(menu);
250 QMenu *menu =
new QMenu(name,
this);
251 menu->setTearOffEnabled(isTearOffEnabled());
258 return QMenu::addMenu(name);
275 QMenu::addMenu(menu);