void PopUpDockWindow::ShowInnerPopUps(DockCont &dc, DockCont *target) { ASSERT(target); Rect wrect = GetScreenRect(); Size psz(style->innersize, style->innersize); Rect prect = Rect(psz); Point cp; psz /= 2; cp = target->GetScreenRect().CenterPoint(); int d = psz.cy * 5; cp.x = minmax(cp.x, wrect.left + d, wrect.right - d); cp.y = minmax(cp.y, wrect.top + d, wrect.bottom - d); int align = GetDockAlign(*target); if (IsTB(align)) { // Left/right docking allowed ShowPopUp(inner[DOCK_LEFT], prect.Offseted(cp.x - psz.cx*3, cp.y - psz.cy)); ShowPopUp(inner[DOCK_RIGHT], prect.Offseted(cp.x + psz.cx, cp.y - psz.cy)); } else { inner[DOCK_LEFT].Close(); inner[DOCK_RIGHT].Close(); } if (!IsTB(align)) { // Top/bottom docking allowed ShowPopUp(inner[DOCK_TOP], prect.Offseted(cp.x - psz.cx, cp.y - psz.cy*3)); ShowPopUp(inner[DOCK_BOTTOM], prect.Offseted(cp.x - psz.cx, cp.y + psz.cy)); } else { inner[DOCK_TOP].Close(); inner[DOCK_BOTTOM].Close(); } if (IsTabbing()) ShowPopUp(inner[4], prect.Offseted(cp.x-psz.cx, cp.y-psz.cy)); }
void PopUpDockWindow::ShowOuterPopUps(DockCont &dc) { Rect wrect = GetScreenRect(); Point cp = wrect.CenterPoint(); Size psz(style->outersize, style->outersize); Rect prect = Rect(psz); psz /= 2; wrect.Deflate(12, 12); if (dc.IsDockAllowed(DOCK_LEFT)) ShowPopUp(outer[DOCK_LEFT], prect.Offseted(wrect.left + POPUP_SPACING, cp.y - psz.cy)); if (dc.IsDockAllowed(DOCK_TOP)) ShowPopUp(outer[DOCK_TOP], prect.Offseted(cp.x - psz.cx, wrect.top + POPUP_SPACING)); if (dc.IsDockAllowed(DOCK_RIGHT)) ShowPopUp(outer[DOCK_RIGHT], prect.Offseted(wrect.right - POPUP_SPACING - psz.cx*2, cp.y - psz.cy)); if (dc.IsDockAllowed(DOCK_BOTTOM)) ShowPopUp(outer[DOCK_BOTTOM], prect.Offseted(cp.x - psz.cx, wrect.bottom - POPUP_SPACING - psz.cy*2)); }
void SeqPhraseMatrixView::MessageReceived(BMessage* msg) { if (TrackMessageReceived(msg) ) return; SeqSongWinPropertiesI* win = dynamic_cast<SeqSongWinPropertiesI*>( Window() ); _SeqPhraseToolTarget* target; if (win && (target = new _SeqPhraseToolTarget(win, this, &mMtc)) ) { track_id trackId = CurrentTrackId(); bool handled = mTool.HandleMessage(msg, trackId, target); delete target; if (handled) return; } switch (msg->what) { case AmSong::END_TIME_CHANGE_OBS: AmTime endTime; if(find_time(*msg, "end_time", &endTime ) == B_OK) { mCachedEndTime = endTime; SetupScrollBars(true, false); } break; case AmSong::TRACK_CHANGE_OBS: TrackChangeReceived(msg); break; case AmTrack::MODE_CHANGE_OBS: { BRect invalid = arp_invalid_rect(); track_id tid; BRect b(Bounds() ); for (uint32 k = 0; msg->FindPointer(SZ_TRACK_ID, k, & tid) == B_OK; k++) { _SeqTrackMetric* metric = TrackMetric(tid); if (metric) { BRect r(b.left, metric->mTop, b.right, metric->mBottom); invalid = arp_merge_rects(invalid, r); } } if (arp_is_valid_rect(invalid) ) Invalidate(invalid); } break; case SHOW_POPUP_MSG: if (mDownTime >= 0) { StopPopUpTimer(); ShowPopUp(); mDownTime = -1; } break; case PROPERTIES_MSG: { BPoint where; if (msg->FindPoint(WHERE_STR, &where) == B_OK) ShowProperties(where); } break; default: inherited::MessageReceived(msg); break; } }