void DeskbarView::MouseDown(BPoint pos) { Looper()->CurrentMessage()->FindInt32("buttons", &fLastButtons); if ((fLastButtons & B_SECONDARY_MOUSE_BUTTON) != 0) { ConvertToScreen(&pos); BPopUpMenu* menu = _BuildMenu(); menu->Go(pos, true, true, BRect(pos.x - 2, pos.y - 2, pos.x + 2, pos.y + 2), true); } }
CronoView::CronoView() : BView("CronoView", B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE), fAccentsList(false) { fReplicated = false; // Core fCore = new Core(); SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); rgb_color barColor = { 0, 200, 0 }; rgb_color fillColor = { 240, 240, 240 }; _BuildMenu(); // Volume slider BBox* volBox = new BBox("volbox"); volBox->SetLabel("Volume"); BGroupLayout* volLayout = new BGroupLayout(B_VERTICAL); volLayout->SetInsets(10, volBox->TopBorderOffset() * 2 + 10, 10, 10); volBox->SetLayout(volLayout); fVolumeSlider = new VolumeSlider("", 0, 1000, DEFAULT_VOLUME, new BMessage(MSG_VOLUME)); fVolumeSlider->SetLimitLabels("Min", "Max"); fVolumeSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); fVolumeSlider->SetHashMarkCount(20); fVolumeSlider->SetValue((int32)fCore->Volume()*10); fVolumeSlider->UseFillColor(true, &fillColor); fVolumeSlider->SetPosition(gCronoSettings.CronoVolume); fVolumeSlider->SetLabel(BString() << gCronoSettings.CronoVolume); volLayout->AddView(fVolumeSlider); // Speed Slider & TextControl BBox* speedBox = new BBox("speedbox"); speedBox->SetLabel("BPM"); BGroupLayout* speedLayout = new BGroupLayout(B_HORIZONTAL); speedLayout->SetInsets(10, speedBox->TopBorderOffset() * 2 + 10, 10, 10); speedBox->SetLayout(speedLayout); fSpeedSlider = new VolumeSlider("", MIN_SPEED, MAX_SPEED, DEFAULT_SPEED, new BMessage(MSG_SPEED_SLIDER)); fSpeedSlider->SetLimitLabels(BString() << MIN_SPEED, BString() << MAX_SPEED); fSpeedSlider->SetKeyIncrementValue(5); fSpeedSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); fSpeedSlider->SetHashMarkCount(15); fSpeedSlider->SetValue(fCore->Speed()); fSpeedSlider->UseFillColor(true, &fillColor); _UpdateTempoName(gCronoSettings.Speed); fSpeedEntry = new BTextControl("", "", BString() << gCronoSettings.Speed, new BMessage(MSG_SPEED_ENTRY), B_WILL_DRAW); fSpeedEntry->SetDivider(70); fSpeedEntry->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_RIGHT); fSpeedEntry->SetExplicitSize(BSize(35, 20)); speedLayout->AddView(fSpeedSlider); speedLayout->AddView(fSpeedEntry); // Meter buttons BBox* tempoBox = new BBox("tempoBox"); tempoBox->SetLabel("Tempo"); for(int i = 0; i < 5; i++) fTempoRadios[i] = new BRadioButton("", "", new BMessage(MSG_METER_RADIO)); fTempoRadios[0]->SetLabel("1/4"); fTempoRadios[1]->SetLabel("2/4"); fTempoRadios[2]->SetLabel("3/4"); fTempoRadios[3]->SetLabel("4/4"); fTempoRadios[4]->SetLabel("Other"); fTempoRadios[fCore->Meter()]->SetValue(1); fTempoEntry = new BTextControl("", "", "4", new BMessage(MSG_METER_ENTRY), B_WILL_DRAW); fTempoEntry->SetDivider(70); if (fTempoRadios[4]->Value() == 1) fTempoEntry->SetEnabled(true); else fTempoEntry->SetEnabled(false); fAccentsView = new BGroupView(B_HORIZONTAL, 0); BLayoutBuilder::Group<>(tempoBox, B_VERTICAL, 0) .SetInsets(10, tempoBox->TopBorderOffset() * 2 + 10, 10, 10) .AddGroup(B_HORIZONTAL, 0) .Add(fTempoRadios[0]) .Add(fTempoRadios[1]) .Add(fTempoRadios[2]) .Add(fTempoRadios[3]) .Add(fTempoRadios[4]) .Add(fTempoEntry) .AddGlue() .End() .Add(fAccentsView) .AddGlue() .End(); if (gCronoSettings.AccentTable == true) _ShowTable(true); fStartButton = new BButton("Start", new BMessage(MSG_START)); fStartButton->MakeDefault(true); fStopButton = new BButton("Stop", new BMessage(MSG_STOP)); #ifdef CRONO_REPLICANT_ACTIVE // Dragger BRect frame(Bounds()); frame.left = frame.right - 7; frame.top = frame.bottom - 7; BDragger *dragger = new BDragger(frame, this, B_FOLLOW_RIGHT | B_FOLLOW_TOP); #endif // Create view BLayoutBuilder::Group<>(this, B_VERTICAL, 0) .Add(fMenuBar) .Add(volBox) .Add(speedBox) .Add(tempoBox) .AddGroup(B_HORIZONTAL) .Add(fStartButton) .Add(fStopButton) .End() #ifdef CRONO_REPLICANT_ACTIVE .Add(dragger) #endif .End(); }
BMenu* MenuBuilder::BuildTracksMenu() { return _BuildMenu(kTracksMenu); }
// SavePanel class SavePanel::SavePanel(const char* name, BMessenger* target, entry_ref* startDirectory, uint32 nodeFlavors, bool allowMultipleSelection, BMessage* message, BRefFilter* filter, bool modal, bool hideWhenDone) : BFilePanel(B_SAVE_PANEL, target, startDirectory, nodeFlavors, allowMultipleSelection, message, filter, modal, hideWhenDone), BHandler(name), fConfigWindow(NULL), fFormatM(NULL), fExportMode(EXPORT_MODE_ICON_RDEF) { BWindow* window = Window(); if (!window || !window->Lock()) return; window->SetTitle(B_TRANSLATE("Save image")); // add this instance as BHandler to the window's looper window->AddHandler(this); // find a couple of important views and mess with their layout BView* background = Window()->ChildAt(0); BButton* cancel = dynamic_cast<BButton*>(background->FindView("cancel button")); BView* textview = background->FindView("text view"); BScrollBar* hscrollbar = dynamic_cast<BScrollBar*>(background->FindView("HScrollBar")); if (!background || !cancel || !textview || !hscrollbar) { printf("SavePanel::SavePanel() - couldn't find necessary controls.\n"); return; } _BuildMenu(); BRect rect = textview->Frame(); rect.top = cancel->Frame().top; font_height fh; be_plain_font->GetHeight(&fh); rect.bottom = rect.top + fh.ascent + fh.descent + 5.0; fFormatMF = new BMenuField(rect, "format popup", B_TRANSLATE("Format"), fFormatM, true, B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW | B_NAVIGABLE); fFormatMF->SetDivider(be_plain_font->StringWidth( B_TRANSLATE("Format")) + 7); fFormatMF->MenuBar()->ResizeToPreferred(); fFormatMF->ResizeToPreferred(); float height = fFormatMF->Bounds().Height() + 8.0; // find all the views that are in the way and // move up them up the height of the menu field BView *poseview = background->FindView("PoseView"); if (poseview) poseview->ResizeBy(0, -height); BButton *insert = (BButton *)background->FindView("default button"); if (hscrollbar) hscrollbar->MoveBy(0, -height); BScrollBar *vscrollbar = (BScrollBar *)background->FindView("VScrollBar"); if (vscrollbar) vscrollbar->ResizeBy(0, -height); BView *countvw = (BView *)background->FindView("CountVw"); if (countvw) countvw->MoveBy(0, -height); textview->MoveBy(0, -height); #if HAIKU_TARGET_PLATFORM_DANO fFormatMF->MoveTo(textview->Frame().left, fFormatMF->Frame().top + 2); #else fFormatMF->MoveTo(textview->Frame().left, fFormatMF->Frame().top); #endif background->AddChild(fFormatMF); // Build the "Settings" button relative to the format menu rect = cancel->Frame(); rect.OffsetTo(fFormatMF->Frame().right + 5.0, rect.top); fSettingsB = new BButton(rect, "settings", B_TRANSLATE("Settings"B_UTF8_ELLIPSIS), new BMessage(MSG_SETTINGS), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW | B_NAVIGABLE); fSettingsB->ResizeToPreferred(); background->AddChild(fSettingsB); fSettingsB->SetTarget(this); textview->ResizeTo(fSettingsB->Frame().right - fFormatMF->Frame().left, textview->Frame().Height()); // Make sure the smallest window won't draw the "Settings" button over anything else float minWindowWidth = textview->Bounds().Width() + cancel->Bounds().Width() + (insert ? insert->Bounds().Width() : 0.0) + 90; Window()->SetSizeLimits(minWindowWidth, 10000, 250, 10000); if (Window()->Bounds().IntegerWidth() + 1 < minWindowWidth) Window()->ResizeTo(minWindowWidth, Window()->Bounds().Height()); window->Unlock(); }
BMenu* MenuBuilder::BuildEditMenu() { return _BuildMenu(kEditMenu); }
BMenu* MenuBuilder::BuildFileMenu() { return _BuildMenu(kFileMenu); }
BMenu* MenuBuilder::BuildHelpMenu() { return _BuildMenu(kHelpMenu); }
BMenu* MenuBuilder::BuildProjectMenu() { return _BuildMenu(kProjectMenu); }
BMenu* MenuBuilder::BuildEngineMenu() { return _BuildMenu(kEngineMenu); }