示例#1
0
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));
}
示例#2
0
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));
}
示例#3
0
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;
    }
}