コード例 #1
0
ファイル: StatusView.cpp プロジェクト: AmirAbrams/haiku
void StatusView::FrameResized(
	float width,
	float height) {
	D_HOOK(("StatusView::FrameResized()\n"));

	allocBackBitmap(width, height);

	// get the tip manager instance and reset
	TipManager *manager = TipManager::Instance();
	manager->removeAll(this);

	// re-truncate the string if necessary
	BString text = m_fullText;
	if (be_plain_font->StringWidth(text.String()) > Bounds().Width() - 25.0) {
		be_plain_font->TruncateString(&text, B_TRUNCATE_END,
									  Bounds().Width() - 25.0);
		manager->setTip(m_fullText.String(), this);
	}
	BStringView::SetText(text.String());

	float minWidth, maxWidth, minHeight, maxHeight;
	Window()->GetSizeLimits(&minWidth, &maxWidth, &minHeight, &maxHeight);
	minWidth = width + 6 * B_V_SCROLL_BAR_WIDTH;
	Window()->SetSizeLimits(minWidth, maxWidth, minHeight, maxHeight);
}
コード例 #2
0
ファイル: StatusBar.cpp プロジェクト: HaikuArchives/MeV
void
CStatusBar::Draw(
	BRect updateRect)
{
	D_HOOK(("CStatusBar::Draw()\n"));

	if (!m_backView)
	{
		DrawInto(this, updateRect);
	}
	else
	{
		if (m_dirty)
		{
			m_backBitmap->Lock();
			DrawInto(m_backView, updateRect);
			m_backView->Sync();
			m_backBitmap->Unlock();
			m_dirty = false;
		}

		SetDrawingMode(B_OP_COPY);
		DrawBitmap(m_backBitmap, updateRect, updateRect);
	}
}
コード例 #3
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
void
CTrackListView::AttachedToWindow()
{
	D_HOOK(("CTrackListView::AttachedToWindow()\n"));

	BuildTrackList();
}
コード例 #4
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
void
CTrackListView::KeyDown(
	const char *bytes,
	int32 numBytes)
{
	D_HOOK(("CTrackListView::KeyDown()\n"));

	switch (bytes[0])
	{
		case B_ENTER:
		{
			Window()->PostMessage(CTrackListItem::EDIT_TRACK, this);
			break;
		}
		case B_DELETE:
		{
			Window()->PostMessage(CTrackListItem::DELETE_TRACK, this);
			break;
		}
		default:
		{
			BListView::KeyDown(bytes, numBytes);
		}
	}
}
コード例 #5
0
ファイル: StatusBar.cpp プロジェクト: HaikuArchives/MeV
void
CStatusBar::MouseDown(
	BPoint point)
{
	D_HOOK(("CStatusBar::MouseDown()\n"));

	if ((m_scrollBar == NULL) || !Window()->IsActive())
		return;

	int32 buttons;
	if (Window()->CurrentMessage()->FindInt32("buttons", &buttons) != B_OK)
		buttons = B_PRIMARY_MOUSE_BUTTON;

	if (buttons == B_PRIMARY_MOUSE_BUTTON)
	{
		// drag rect
		BRect dragRect(Bounds());
		dragRect.left = dragRect.right - 10.0;
		if (dragRect.Contains(point))
		{
			// resize
			m_dragging = true;
			SetMouseEventMask(B_POINTER_EVENTS,
							  B_LOCK_WINDOW_FOCUS | B_NO_POINTER_HISTORY);
		}
	}
}
コード例 #6
0
void ParameterWindow::Zoom(
    BPoint origin,
    float width,
    float height) {
    D_HOOK(("ParameterWindow::Zoom()\n"));

    m_zooming = true;

    BScreen screen(this);
    if (!screen.Frame().Contains(Frame())) {
        m_zoomed = false;
    }

    if (!m_zoomed) {
        // resize to the ideal size
        m_manualSize = Bounds();
        ResizeTo(m_idealSize.Width(), m_idealSize.Height());
        _constrainToScreen();
        m_zoomed = true;
    }
    else {
        // resize to the most recent manual size
        ResizeTo(m_manualSize.Width(), m_manualSize.Height());
        m_zoomed = false;
    }
}
コード例 #7
0
ファイル: StatusBar.cpp プロジェクト: HaikuArchives/MeV
void
CStatusBar::MouseMoved(
	BPoint point,
	uint32 transit,
	const BMessage *message) {
	D_HOOK(("CStatusBar::MouseMoved()\n"));

	if (!m_scrollBar)
		return;

	if (m_dragging)
	{
		float x = point.x - (Bounds().right - 5.0);
		if ((Bounds().Width() + x) <= 16.0)
			return;
		if (m_scrollBar
		 && ((m_scrollBar->Bounds().Width() - x) < (3 * B_V_SCROLL_BAR_WIDTH + 3)))
			x = m_scrollBar->Bounds().Width() - (3 * B_V_SCROLL_BAR_WIDTH + 3);
		if ((Bounds().Width() + x) < m_minWidth)
			x = m_minWidth - Bounds().Width();
		ResizeBy(x, 0.0);
		BRect rect(Bounds());
		rect.left = rect.right - 10.0;
		m_dirty = true;
		Invalidate(rect);
		if (m_scrollBar)
		{
			m_scrollBar->ResizeBy(-x, 0.0);
			m_scrollBar->MoveBy(x, 0.0);
		}
	}
}
コード例 #8
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
void DormantNodeView::MouseMoved(
	BPoint point,
	uint32 transit,
	const BMessage *message) {
	D_HOOK(("DormantNodeView::MouseMoved()\n"));

	int32 index;
	if (!message && ((index = IndexOf(point)) >= 0)) {
		DormantNodeListItem *item = dynamic_cast<DormantNodeListItem *>(ItemAt(index));
		DormantNodeListItem *last = dynamic_cast<DormantNodeListItem *>(m_lastItemUnder);
		BRect r = item->getRealFrame(be_plain_font);
		if (item && r.Contains(point)) {
			if (item != last) {
				if (last)
					last->MouseOver(this, point, B_EXITED_VIEW);
				item->MouseOver(this, point, B_ENTERED_VIEW);
				m_lastItemUnder = item;
			}
			else {
				item->MouseOver(this, point, B_INSIDE_VIEW);
			}
		}
		else if (last) {
			last->MouseOver(this, point, B_EXITED_VIEW);
		}
	}
	
	_inherited::MouseMoved(point, transit, message);
}
コード例 #9
0
ファイル: StatusView.cpp プロジェクト: AmirAbrams/haiku
void StatusView::fadeTick() {
	D_HOOK(("StatusView::fadeTick()\n"));

	if (m_opacity > 0.0) {
		if(m_decayDelay > 0) {
			m_decayDelay -= TICK_PERIOD;
			return;
		}
		
		float steps = static_cast<float>(TEXT_DECAY_TIME)
					  / static_cast<float>(TICK_PERIOD);
		m_opacity -= (1.0 / steps);
		if (m_opacity < 0.001) {
			m_opacity = 0.0;
		}
		m_dirty = true;
		Invalidate();
	}
	else if (m_clock) {
		delete m_clock;
		m_clock = 0;
		
		// get the tip manager instance and reset
		TipManager *manager = TipManager::Instance();
		manager->removeAll(this);
	}
}
コード例 #10
0
ファイル: StatusView.cpp プロジェクト: AmirAbrams/haiku
void StatusView::MouseMoved(
	BPoint point,
	uint32 transit,
	const BMessage *message) {
	D_HOOK(("StatusView::MouseMoved()\n"));

	if (m_dragging) {
		float x = point.x - (Bounds().right - 5.0);
		if ((Bounds().Width() + x) <= 16.0) {
			return;
		}
		if (m_scrollBar
		 && ((m_scrollBar->Bounds().Width() - x) <= (6 * B_V_SCROLL_BAR_WIDTH))) {
			return;
		}
		ResizeBy(x, 0.0);
		BRect r(Bounds());
		r.left = r.right - 5.0;
		if (x > 0)
			r.left -= x;
		m_dirty = true;
		Invalidate(r);
		if (m_scrollBar) {
			m_scrollBar->ResizeBy(-x, 0.0);
			m_scrollBar->MoveBy(x, 0.0);
		}
	}
}
コード例 #11
0
ファイル: RouteWindow.cpp プロジェクト: mariuz/haiku
void
RouteWindow::Zoom(BPoint origin, float width, float height)
{
	D_HOOK(("RouteWindow::Zoom()\n"));

	m_zooming = true;

	BScreen screen(this);
	if (!screen.Frame().Contains(Frame())) {
		m_zoomed = false;
	}

	if (!m_zoomed) {
		// resize to the ideal size
		m_manualSize = Bounds();
		float width, height;
		m_routingView->GetPreferredSize(&width, &height);
		width += B_V_SCROLL_BAR_WIDTH;
		height += B_H_SCROLL_BAR_HEIGHT;
		if (KeyMenuBar()) {
			height += KeyMenuBar()->Frame().Height();
		}
		ResizeTo(width, height);
		_constrainToScreen();
		m_zoomed = true;
	}
	else {
		// resize to the most recent manual size
		ResizeTo(m_manualSize.Width(), m_manualSize.Height());
		m_zoomed = false;
	}
}
コード例 #12
0
ファイル: StatusBar.cpp プロジェクト: HaikuArchives/MeV
void
CStatusBar::AttachedToWindow()
{
	D_HOOK(("CStatusBar::AttachedToWindow()\n"));

	FrameResized(Bounds().Width(), Bounds().Height());
}
コード例 #13
0
ファイル: StatusView.cpp プロジェクト: AmirAbrams/haiku
void StatusView::AttachedToWindow() {
	D_HOOK(("StatusView::AttachedToWindow()\n"));

	if (m_manager) {
		m_manager->setLogTarget(BMessenger(this, Window()));
	}
	
	allocBackBitmap(Bounds().Width(), Bounds().Height());
}
コード例 #14
0
ファイル: StatusBar.cpp プロジェクト: HaikuArchives/MeV
void CStatusBar::MouseUp(
	BPoint point) {
	D_HOOK(("CStatusBar::MouseUp()\n"));

	if (m_scrollBar == NULL)
		return;

	m_dragging = false;
}
コード例 #15
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
void DormantNodeView::_freeList() {
	D_HOOK(("DormantNodeView::_freeList()\n"));

	// remove and delete all items in the list
	while (CountItems() > 0) {
		BListItem *item = ItemAt(0);
		if (RemoveItem(item)) {
			delete item;
		}
	}
}
コード例 #16
0
bool ParameterWindow::QuitRequested() {
    D_HOOK(("ParameterWindow::QuitRequested()\n"));

    // stop watching the MediaRoster
    BMediaRoster *roster = BMediaRoster::CurrentRoster();
    if (roster)	{
        roster->StopWatching(this, m_node, B_MEDIA_WILDCARD);
    }

    // tell the notification target to forget about us
    if (m_notifyTarget && m_notifyTarget->IsValid()) {
        BMessage message(M_CLOSED);
        message.AddInt32("nodeID", m_node.node);
        status_t error = m_notifyTarget->SendMessage(&message);
        if (error) {
            D_HOOK((" -> error sending message (%s) !\n", strerror(error)));
        }
    }

    return true;
}
コード例 #17
0
ファイル: RouteWindow.cpp プロジェクト: mariuz/haiku
void
RouteWindow::FrameResized(float width, float height)
{
	D_HOOK(("RouteWindow::FrameResized()\n"));

	if (!m_zooming) {
		m_zoomed = false;
	}
	else {
		m_zooming = false;
	}
}
コード例 #18
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
void DormantNodeView::AttachedToWindow() {
	D_HOOK(("DormantNodeView::AttachedToWindow()\n"));

	// populate the list
	_populateList();

	// Start watching the MediaRoster for flavor changes
	BMediaRoster *roster = BMediaRoster::CurrentRoster();
	if (roster) {
		BMessenger messenger(this, Window());
		roster->StartWatching(messenger, B_MEDIA_FLAVORS_CHANGED);
	}
}
コード例 #19
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
void DormantNodeView::DetachedFromWindow() {
	D_HOOK(("DormantNodeView::DetachedFromWindow()\n"));

	// delete the lists contents
	_freeList();

	// Stop watching the MediaRoster for flavor changes
	BMediaRoster *roster = BMediaRoster::CurrentRoster();
	if (roster) {
		BMessenger messenger(this, Window());
		roster->StopWatching(messenger, B_MEDIA_FLAVORS_CHANGED);
	}
}
コード例 #20
0
ファイル: Destination.cpp プロジェクト: HaikuArchives/MeV
void
CDestination::Stack(
	CEvent &event,
	const CEventTask &task,
	CEventStack &stack,
	long duration)
{
	D_HOOK(("CDestination::Stack(%s, %ld)\n",
			event.NameText(), duration));

	event.stack.destination = this;

	// this does not seem to work, disable for release
//	event.stack.start -= (Latency() / 1000);
}
コード例 #21
0
ファイル: StatusBar.cpp プロジェクト: HaikuArchives/MeV
void
CStatusBar::FrameResized(
	float width,
	float height)
{
	D_HOOK(("CStatusBar::FrameResized()\n"));

	AllocBackBitmap(width, height);

	if (m_scrollBar)
	{
		float minWidth, maxWidth, minHeight, maxHeight;
		Window()->GetSizeLimits(&minWidth, &maxWidth, &minHeight, &maxHeight);
		minWidth = width + 6 * B_V_SCROLL_BAR_WIDTH + 2.0;
		Window()->SetSizeLimits(minWidth, maxWidth, minHeight, maxHeight);
	}
}
コード例 #22
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
void
CTrackListView::Draw(
	BRect updateRect)
{
	D_HOOK(("CTrackListView::Draw()\n"));

	SetHighColor(ViewColor());
	FillRect(m_lastReorderMark, B_SOLID_HIGH);

	if (m_reordering)
	{
		SetHighColor(64, 64, 64, 255);
		FillRect(m_currentReorderMark, B_SOLID_HIGH);
	}
	
	BListView::Draw(updateRect);
}
コード例 #23
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
bool DormantNodeView::InitiateDrag(
	BPoint point,
	int32 index,
	bool wasSelected) {
	D_HOOK(("DormantNodeView::InitiateDrag()\n"));

	DormantNodeListItem *item = dynamic_cast<DormantNodeListItem *>(ItemAt(CurrentSelection()));
	if (item) {
		BMessage dragMsg(M_INSTANTIATE_NODE);
		dragMsg.AddData("which", B_RAW_TYPE,
						reinterpret_cast<const void *>(&item->info()),
						sizeof(item->info()));
		point -= ItemFrame(index).LeftTop();
		DragMessage(&dragMsg, item->getDragBitmap(), B_OP_ALPHA, point);
		return true;
	}
	return false;
}
コード例 #24
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
void
CTrackListView::MouseUp(
	BPoint point)
{
	D_HOOK(("CTrackListView::MouseUp()\n"));

	// disable reordering, actually changing the track order
	// will be done in MessageReceived() when drag message is
	// received
	if (m_reordering)
	{
		m_reordering = false;
		m_lastReorderMark = m_currentReorderMark;
		m_currentReorderMark = BRect(0.0, 0.0, -1.0, -1.0);
		Invalidate(m_lastReorderMark);
	}

	BListView::MouseUp(point);
}
コード例 #25
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
void DormantNodeView::GetPreferredSize(
	float* width,
	float* height) {
	D_HOOK(("DormantNodeView::GetPreferredSize()\n"));

	// calculate the accumulated size of all list items
	*width = 0;
	*height = 0;
	for (int32 i = 0; i < CountItems(); i++) {
		DormantNodeListItem *item;
		item = dynamic_cast<DormantNodeListItem *>(ItemAt(i));
		if (item) {
			BRect r = item->getRealFrame(be_plain_font);
			if (r.Width() > *width) {
				*width = r.Width();
			}
			*height += r.Height() + 1.0;
		}
	}
}
コード例 #26
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
void
CTrackListView::GetPreferredSize(
	float *width,
	float *height)
{
	D_HOOK(("CTrackListView::GetPreferredSize()\n"));

	*width = 0.0;
	*height = 0.0;
	for (int32 i = 0; i < CountItems(); i++)
	{
		CTrackListItem *item = dynamic_cast<CTrackListItem *>(ItemAt(i));
		if (item)
		{
			if ((item->Width() + 6.0) > *width)
				*width = item->Width() + 6.0;
			*height += item->Height() + 1.0;
		}
	}
	*width += 15.0;
}
コード例 #27
0
ファイル: DormantNodeView.cpp プロジェクト: mariuz/haiku
void DormantNodeView::MouseDown(
	BPoint point) {
	D_HOOK(("DormantNodeView::MouseDown()\n"));

	BMessage* message = Window()->CurrentMessage();
	int32 buttons = message->FindInt32("buttons");
	if (buttons == B_SECONDARY_MOUSE_BUTTON) {
		int32 index;
		if ((index = IndexOf(point)) >= 0) {
			DormantNodeListItem *item = dynamic_cast<DormantNodeListItem *>(ItemAt(index));
			if (item) {
				Select(index);
				BRect r = item->getRealFrame(be_plain_font);
				if (r.Contains(point)) {
					item->showContextMenu(point, this);
				}
			}
		}
	}

	_inherited::MouseDown(point);
}
コード例 #28
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
void
CTrackListView::MouseDown(
	BPoint point)
{
	D_HOOK(("CTrackListView::MouseDown()\n"));

	Window()->Activate();

	int32 buttons = B_PRIMARY_MOUSE_BUTTON;
	if (Window()->CurrentMessage()->FindInt32("buttons", &buttons) != B_OK)
		return;
	int32 clicks = 0;
	if (Window()->CurrentMessage()->FindInt32("clicks", &clicks) != B_OK)
		return;

	if ((buttons == B_SECONDARY_MOUSE_BUTTON) || (modifiers() & B_CONTROL_KEY))
	{
		int32 index = IndexOf(point);
		Select(index);
		ShowContextMenu(point);
	}
	else
	{
		if (clicks == 2)
		{
			BRect dblClickRect = BRect(m_lastClickPoint - BPoint(2.0, 2.0),
									   m_lastClickPoint + BPoint(2.0, 2.0));
			if ((buttons == m_lastClickButton)
			 && (dblClickRect.Contains(point)))
			{
				Window()->PostMessage(CTrackListItem::EDIT_TRACK, this);
				return;
			}
		}
		m_lastClickPoint = point;
		m_lastClickButton = buttons;
		BListView::MouseDown(point);
	}
}
コード例 #29
0
ファイル: TrackListView.cpp プロジェクト: HaikuArchives/MeV
bool
CTrackListView::InitiateDrag(
	BPoint point,
	int32 index,
	bool wasSelected)
{
	D_HOOK(("CTrackListView::InitiateDrag()\n"));

	CTrackListItem *item = dynamic_cast<CTrackListItem *>(ItemAt(index));
	if (item)
	{
		BMessage dragMsg(MeVDragMsg_ID);
		dragMsg.AddInt32("Type", DragTrack_ID);
		dragMsg.AddInt32("TrackID", item->GetTrackID());
		dragMsg.AddInt32("Index", index);
		dragMsg.AddPointer("Document", m_doc);
		point -= ItemFrame(index).LeftTop();
		DragMessage(&dragMsg, item->GetDragBitmap(), B_OP_ALPHA, point);
		return true;
	}
	return false;
}
コード例 #30
0
ファイル: Destination.cpp プロジェクト: HaikuArchives/MeV
void
CDestinationDeleteUndoAction::Undo()
{
	D_HOOK(("CDestinationDeleteUndoAction::Undo()\n"));
	m_dest->Undelete(m_index);
}