Now BMenu also calculate the triggers for BMenuItems.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10827 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1498,12 +1498,54 @@ BMenu::IsStickyMode() const
|
|||||||
void
|
void
|
||||||
BMenu::CalcTriggers()
|
BMenu::CalcTriggers()
|
||||||
{
|
{
|
||||||
|
BList triggersList;
|
||||||
|
|
||||||
|
// Gathers the existing triggers
|
||||||
|
// TODO: Oh great, reinterpret_cast.
|
||||||
|
for (int32 i = 0; i < CountItems(); i++) {
|
||||||
|
char trigger = ItemAt(i)->Trigger();
|
||||||
|
if (trigger != 0)
|
||||||
|
triggersList.AddItem(reinterpret_cast<void *>((uint32)trigger));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set triggers for items which don't have one yet
|
||||||
|
for (int32 i = 0; i < CountItems(); i++) {
|
||||||
|
BMenuItem *item = ItemAt(i);
|
||||||
|
if (item->Trigger() == 0) {
|
||||||
|
const char *newTrigger = ChooseTrigger(item->Label(), &triggersList);
|
||||||
|
if (newTrigger != NULL) {
|
||||||
|
item->SetSysTrigger(*newTrigger);
|
||||||
|
// TODO: This is crap. I'd prefer to have
|
||||||
|
// BMenuItem::SetSysTrigger(const char *) update fTriggerIndex.
|
||||||
|
// This isn't the case on beos, but it will probably be like that on haiku.
|
||||||
|
item->fTriggerIndex = newTrigger - item->Label();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
BMenu::ChooseTrigger(const char *title, BList *chars)
|
BMenu::ChooseTrigger(const char *title, BList *chars)
|
||||||
{
|
{
|
||||||
|
ASSERT(chars != NULL);
|
||||||
|
|
||||||
|
if (title == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
char *titlePtr = const_cast<char *>(title);
|
||||||
|
|
||||||
|
char trigger;
|
||||||
|
// TODO: Oh great, reinterpret_cast all around
|
||||||
|
while ((trigger = *titlePtr) != '\0') {
|
||||||
|
if (!chars->HasItem(reinterpret_cast<void *>((uint32)trigger))) {
|
||||||
|
chars->AddItem(reinterpret_cast<void *>((uint32)trigger));
|
||||||
|
return titlePtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
titlePtr++;
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user