// PopulateMenu void FontValueView::_PolulateMenu(BMenu* menu, BHandler* target, const char* markedFamily, const char* markedStyle) { if (!menu) return; FontManager* manager = FontManager::Default(); if (!manager->Lock()) return; BMenu* fontMenu = NULL; font_family family; font_style style; int32 count = manager->CountFontFiles(); for (int32 i = 0; i < count; i++) { if (!manager->GetFontAt(i, family, style)) break; BMessage* message = new BMessage(MSG_FONT_CHANGED); message->AddString("font family", family); message->AddString("font style", style); FontMenuItem* item = new FontMenuItem(style, family, style, message); item->SetTarget(target); bool markStyle = false; if (!fontMenu || (fontMenu->Name() && strcmp(fontMenu->Name(), family) != 0)) { // create new entry fontMenu = new BMenu(family); fontMenu->AddItem(item); menu->AddItem(fontMenu); // mark the menu if necessary if (markedFamily && strcmp(markedFamily, family) == 0) { if (BMenuItem* superItem = fontMenu->Superitem()) superItem->SetMarked(true); markStyle = true; } } else { // reuse old entry fontMenu->AddItem(item); } // mark the item if necessary if (markStyle && markedStyle && strcmp(markedStyle, style) == 0) item->SetMarked(true); } manager->Unlock(); }
Tearoff::Tearoff(BRect frame, const char *name, MainWindow *parent, MenuName menu_name, int idx) : BWindow(frame, name, B_FLOATING_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE, 0) { int y = 0; BFont font; BMenu *menu; this->parent = parent; menu = parent->GetMenu(menu_name); menu->GetFont(&font); for(int i = 1; i < menu->CountItems(); i++) { BMenuItem *item = menu->ItemAt(i); if(item->Message()) { BButton *b = new BButton(BRect(0, y, frame.IntegerWidth(), y + TEAROFF_BUTTON_HEIGHT), "", item->Label(), new BMessage(item->Message()->what), B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW); font.SetSize(TEAROFF_FONT_SIZE); b->SetFont(&font); AddChild(b); y = y + TEAROFF_BUTTON_HEIGHT; } } this->ResizeTo(frame.IntegerWidth(), y); this->SetTitle(menu->Name()); this->index = idx; delete menu; }
void YabWindow::MessageReceived(BMessage *message) { // if(message) message->PrintToStream(); switch(message->what) { case YABBUTTON: { BString tmpMessage(""); BButton *myButtonPressed; message->FindPointer("source",(void **) &myButtonPressed); tmpMessage += myButtonPressed->Name(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABMENU: { BString tmpMessage(""); BMenuItem *mySelectedMenu; message->FindPointer("source",(void **) &mySelectedMenu); BMenu *myMenu = mySelectedMenu->Menu(); tmpMessage += ((BMenuBar*)myMenu->Supermenu())->Parent()->Name(); tmpMessage += ":"; tmpMessage += myMenu->Name(); tmpMessage += ":"; tmpMessage += mySelectedMenu->Label(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABSUBMENU: { BString tmpMessage(""); BMenuItem *mySelectedMenu; message->FindPointer("source",(void **) &mySelectedMenu); BMenu *myMenu = mySelectedMenu->Menu(); tmpMessage += ((BMenuBar*)myMenu->Supermenu()->Supermenu())->Parent()->Name(); tmpMessage += ":"; tmpMessage += myMenu->Supermenu()->Name(); tmpMessage += ":"; tmpMessage += myMenu->Name(); tmpMessage += ":"; tmpMessage += mySelectedMenu->Label(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABTEXTCONTROL: { BString tmpMessage(""); BTextControl *myTextControl; message->FindPointer("source",(void **) &myTextControl); tmpMessage += myTextControl->Name(); tmpMessage += ":"; tmpMessage += myTextControl->Text(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABCHECKBOX: { BString tmpMessage(""); BCheckBox *myCheckBox; message->FindPointer("source",(void **) &myCheckBox); tmpMessage += myCheckBox->Name(); tmpMessage += ":"; if(myCheckBox->Value()==B_CONTROL_ON) tmpMessage += "ON|"; else tmpMessage += "OFF|"; messageString += tmpMessage; } break; case YABRADIOBUTTON: { BString tmpMessage(""); BRadioButton *myRadioButton; message->FindPointer("source",(void **) &myRadioButton); tmpMessage += myRadioButton->Name(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABLISTBOXINVOKE: { BListView *myList; message->FindPointer("source",(void **) &myList); int i = myList->CurrentSelection(); if(i>=0) { BString tmpMessage(""); tmpMessage += myList->Name(); tmpMessage += ":_Invoke:"; // tmpMessage += ((BStringItem*)(myList->ItemAt(i)))->Text(); tmpMessage << i+1; tmpMessage += "|"; messageString += tmpMessage; } } break; case YABLISTBOXSELECT: { BListView *myList; message->FindPointer("source",(void **) &myList); int i = myList->CurrentSelection(); if(i>=0) { BString tmpMessage(""); tmpMessage += myList->Name(); tmpMessage += ":_Select:"; // tmpMessage += ((BStringItem*)(myList->ItemAt(i)))->Text(); tmpMessage << i+1; tmpMessage += "|"; messageString += tmpMessage; } } break; case YABDROPBOX: { BString tmpMessage(""); BMenuItem *myMenuItem; message->FindPointer("source",(void **) &myMenuItem); tmpMessage += (myMenuItem->Menu())->Supermenu()->Parent()->Name(); tmpMessage += ":"; tmpMessage += myMenuItem->Label(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABSLIDER: { BString tmpMessage(""); BSlider *mySlider; message->FindPointer("source",(void **) &mySlider); tmpMessage += mySlider->Name(); tmpMessage += ":"; tmpMessage << mySlider->Value(); tmpMessage += "|"; messageString += tmpMessage; } break; case YABCOLORCONTROL: { rgb_color col; BString tmpMessage(""); BColorControl *myCControl; message->FindPointer("source",(void **) &myCControl); tmpMessage += myCControl->Name(); tmpMessage += ":"; col = myCControl->ValueAsColor(); tmpMessage << col.red << ":" << col.green << ":" << col.blue; tmpMessage += "|"; messageString += tmpMessage; } break; case YABTREEBOXINVOKE: { BOutlineListView *myList; message->FindPointer("source",(void **) &myList); int i = myList->FullListCurrentSelection(); if(i>=0) { BString tmpMessage(""); const char* txt = ((BStringItem*)(myList->FullListItemAt(i)))->Text(); tmpMessage += myList->Name(); tmpMessage += ":_Invoke:"; tmpMessage << i+1; /* int n = tmpMessage.Length(); BListItem *superitem = myList->Superitem(myList->FullListItemAt(i)); while(superitem) { BString t(""); t << ((BStringItem*)superitem)->Text() << ":"; tmpMessage.Insert(t,n); superitem = myList->Superitem(superitem); } tmpMessage += txt;*/ tmpMessage += "|"; messageString += tmpMessage; } } break; case YABTREEBOXSELECT: { BOutlineListView *myList; message->FindPointer("source",(void **) &myList); int i = myList->FullListCurrentSelection(); if(i>=0) { BString tmpMessage(""); const char* txt = ((BStringItem*)(myList->FullListItemAt(i)))->Text(); tmpMessage += myList->Name(); tmpMessage += ":_Select:"; tmpMessage << i+1; /* int n = tmpMessage.Length(); BListItem *superitem = myList->Superitem(myList->FullListItemAt(i)); while(superitem) { BString t(""); t << ((BStringItem*)superitem)->Text() << ":"; tmpMessage.Insert(t,n); superitem = myList->Superitem(superitem); } tmpMessage += txt;*/ tmpMessage += "|"; messageString += tmpMessage; } } break; case YABFILEBOXSELECT: { BColumnListView *myList; message->FindPointer("source",(void **) &myList); BRow *myRow = NULL; if(myList) myRow = myList->CurrentSelection(); if(myRow) { // if(!myList->IsFocus()) myList->MakeFocus(); BString tmpMessage(""); tmpMessage += myList->Name(); tmpMessage += ":_Select:"; tmpMessage << myList->IndexOf(myRow)+1; tmpMessage += "|"; messageString += tmpMessage; } } break; case YABFILEBOXINVOKE: { BColumnListView *myList; message->FindPointer("source",(void **) &myList); BRow *myRow = NULL; if(myList) myRow = myList->CurrentSelection(); if(myRow) { // if(!myList->IsFocus()) myList->MakeFocus(); BString tmpMessage(""); tmpMessage += myList->Name(); tmpMessage += ":_Invoke:"; tmpMessage << myList->IndexOf(myRow)+1; tmpMessage += "|"; messageString += tmpMessage; } } break; case YABSHORTCUT: { const char* myMsg; if(message->FindString("shortcut", &myMsg) == B_OK) { messageString += myMsg; messageString += "|"; } } break; default: BWindow::MessageReceived(message); break; } }