Example #1
0
void CRender::SelectItemsWithin(const RectF &r)
{
	CComPtr<boost::scoped_lock_ref_counted> lock;
	CComPtr<IGraphItem> item;
	CComPtr<IUnknown> unk;
	CComQIPtr<IRenderer> ir;
	RectF box;

	IGraphItemVector results;
	m_graph->GetChildren(results);

	for(IGraphItemVector::iterator itr=results.begin(); itr!=results.end(); ++itr)
	{
		item=*itr;			
		unk=item->GetPropertyUnknown(0);

		if(unk)
		{
			ir=static_cast<IRenderer*>(unk.p);
			if(ir!=0)
			{
				ir->GetBoundsBox(box);
				if(box.IntersectsWith(r))
					ir->SetSelected(true, true);
			}
		}
	}
}
Example #2
0
bool CItemEdit::EditNext(unsigned newindex)
{
    bool bSuccess=IsWindow()!=0;

    if(bSuccess)
    {
        CComQIPtr<IRenderer> ir;

        m_gi=m_parent->GetChild(newindex);
        ATLASSERT(m_gi);

        bSuccess=m_gi!=0;
        if(bSuccess)
        {
            m_index=newindex;

#ifdef _DEBUG
            CComQIPtr<IGraphVertex> v=m_gi;
            if(v!=0)
            {
                ATLASSERT(m_index==v->GetOrder());
            }
#endif

            ir=m_canvas->GetRenderer(m_gi);
            ATLASSERT(ir);
            bSuccess=ir!=0;
        }
        
        if(bSuccess)
        {
            RectF rc;
            ir->GetBoundsBox(rc);
            CRect irc=static_cast<CRect>(rc);
            MoveWindow(&irc);
            UpdateText();
        }
    }

    return bSuccess;
}
Example #3
0
RectF CRender::getGraphExtent(bool selectedOnly) const
{
	RectF retVal;
	bool first = true;
	CComPtr<boost::scoped_lock_ref_counted> lock;

	CComPtr<IGraphItem> item;
	CComPtr<IUnknown> unk;
	CComQIPtr<IListWindowRenderer> lw;
	CComQIPtr<ILegacyRenderer> lv;

	RectF rc;
	IGraphItemVector results;
	m_graph->GetChildren(results);

	for(IGraphItemVector::iterator itr=results.begin(); itr!=results.end(); ++itr)
	{
		item=*itr;	

		CUniqueID id = item->GetID();
		unk=item->GetPropertyUnknown(0);

		if(unk!=0)
		{
			lv=unk.p;
			if(lv!=0)
			{
				if (selectedOnly && !lv->IsSelected())
				{
					continue;
				}
			
				if (first)
				{
					lv->GetTitlePos(retVal);
					first = false;
				}
				else
				{
					lv->GetTitlePos(rc);
					retVal.Union(retVal, retVal, rc);
				}

				lv->GetIconPos(rc);
				retVal.Union(retVal, retVal, rc);
				lv->GetImagePos(rc);
				retVal.Union(retVal, retVal, rc);
			}
			else
			{
				lw=unk.p;
				if(lw!=0)
				{
					if (selectedOnly && !lw->IsSelected())
					{
						continue;
					}

					if (first)
					{
						lw->GetBoundsBox(retVal);
						first = false;
					}
					else
					{
						lw->GetBoundsBox(rc);
						retVal.Union(retVal, retVal, rc);
					}
				}
			}
		}
	}

	return retVal;
}
Example #4
0
LRESULT CItemEdit::OnKeyDown(
    UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
    bHandled = FALSE;

    switch(wParam) 
    {
    case VK_ESCAPE:
        {
            RestoreState();
            m_canvas->DestroyEditor();
        }
        break;
    case VK_RETURN:
        {
            ChangeLabel(false);
            RestoreState();
            m_canvas->DestroyEditor();
        }
        break;
    case VK_TAB:
    case VK_UP:
    case VK_DOWN:
        {
            if(m_parent!=0)
            {
                unsigned newidx=m_index;
                bool bUp=wParam==VK_UP || (wParam==VK_TAB
                    && (GetAsyncKeyState(VK_SHIFT)&0x8000)!=0);

                if(bUp && m_index>0)
                {
                    newidx--;
                }
                else if(!bUp)
                {
                    newidx++;
                }
                
                bool gotonext=newidx!=m_index;

                IGraphItem* next = NULL;

                if(gotonext)
                {
                    ChangeLabel(false); 
                    m_canvas->Invalidate();
                    next=m_parent->GetChild(newidx);
                    gotonext=next!=0;
                }

                CComQIPtr<IListWindowRenderer> ilw;

                if(gotonext)
                {
                    ilw=m_canvas->GetRenderer(m_parent);
                    ATLASSERT(ilw);
                    gotonext=ilw!=0;
                }

                if(gotonext)
                {
                    // prevent editing item covered by scrollbars and outside viewport

                    CComPtr<IRenderer> ir=m_canvas->GetRenderer(next);
                    ATLASSERT(ir);
                    RectF rc;
                    ir->GetBoundsBox(rc);

                    RectF vp;
                    m_canvas->GetViewport(vp);
                    gotonext=rc.x>=vp.x &&
                        rc.y>=vp.y &&
                        (rc.x+rc.Width)<=(vp.x+vp.Width) &&
                        (rc.y+rc.Height)<=(vp.y+vp.Height);

                    // prevent editing item covered outside its parent

                    if(gotonext)
                    {
                        RectF rcparent;
                        ilw->GetBoundsBox(rcparent);
                        gotonext=rc.x>=rcparent.x &&
                            rc.y>=rcparent.y &&
                            (rc.x+rc.Width)<=(rcparent.x+rcparent.Width) &&
                            (rc.y+rc.Height)<=(rcparent.y+rcparent.Height);
                    }
                }

                if(gotonext)
                {
                    if(ilw->OnEditItem(next))
                    {
                        CWindow pwnd=GetParent();
                        pwnd.UpdateWindow(); // redraw to give it resize chance
                        EditNext(newidx);
                    }
                    else
                        m_gi=m_parent->GetChild(m_index);
                    bHandled = TRUE;
                }
                else
                {
                    m_gi=m_parent->GetChild(m_index);
                }
            }
        }
        break;
    }
    return 0;
}