📄 diagramentitycontainer.cpp
字号:
============================================================*/
{
int max = m_objs.GetSize();
if( index1 >= 0 && index1 < max && index2 >= 0 && index2 < max )
{
CDiagramEntity* obj1 = GetAt( index1 );
CDiagramEntity* obj2 = GetAt( index2 );
SetAt( index1, obj2 );
SetAt( index2, obj1 );
}
}
void CDiagramEntityContainer::Undo()
/* ============================================================
Function : CDiagramEntityContainer::Undo
Description : Sets the container data to the last entry
in the undo stack.
Access : Public
Return : void
Parameters : none
Usage : Call to undo the last operation
============================================================*/
{
if( m_undo.GetSize() )
{
// We remove all current data
RemoveAll();
// We get the last entry from the undo-stack
// and clone it into the container data
CUndoItem* undo = static_cast< CUndoItem* >( m_undo.GetAt( m_undo.GetUpperBound() ) );
int count = ( undo->arr ).GetSize();
for( int t = 0 ; t < count ; t++ )
{
CDiagramEntity* obj = static_cast< CDiagramEntity* >( ( undo->arr ).GetAt( t ) );
Add( obj->Clone() );
}
// Set the saved virtual size as well
SetVirtualSize( undo->pt );
// We remove the entry from the undo-stack
delete undo;
m_undo.RemoveAt( m_undo.GetUpperBound() );
}
}
void CDiagramEntityContainer::Snapshot()
/* ============================================================
Function : CDiagramEntityContainer::Snapshot
Description : Copies the current state of the data to
the undo-stack.
Access : Public
Return : void
Parameters : none
Usage : Call to add the current state to the undo-stack.
If the undo stack has a maximum size and
the stack will grow above the stack limit,
the first undo array will be removed.
============================================================*/
{
if( m_maxstacksize > 0 && m_undo.GetSize() == m_maxstacksize )
{
delete m_undo.GetAt( 0 );
m_undo.RemoveAt( 0 );
}
CUndoItem* undo = new CUndoItem;
while( !undo && m_undo.GetSize() )
{
// We seem - however unlikely -
// to be out of memory.
// Remove first element in
// undo-stack and try again
delete m_undo.GetAt( 0 );
m_undo.RemoveAt( 0 );
undo = new CUndoItem;
}
if( undo )
{
// Save current virtual size
undo->pt = GetVirtualSize();
// Save all objects
int count = m_objs.GetSize();
for( int t = 0 ; t < count ; t++ )
( undo->arr ).Add( GetAt( t )->Clone() );
// Add to undo stack
m_undo.Add( undo );
}
}
void CDiagramEntityContainer::ClearUndo()
/* ============================================================
Function : CDiagramEntityContainer::ClearUndo
Description : Remove all undo arrays from the undo stack
Access : Public
Return : void
Parameters : none
Usage : Call to clear the undo-stack. All memory will
be deleted.
============================================================*/
{
int count = m_undo.GetSize() - 1;
for( int t = count ; t >= 0 ; t-- )
{
CUndoItem* undo = static_cast< CUndoItem* >( m_undo.GetAt( t ) );
// Remove the stack entry itself.
delete undo;
}
m_undo.RemoveAll();
}
BOOL CDiagramEntityContainer::IsUndoPossible() const
/* ============================================================
Function : CDiagramEntityContainer::IsUndoPossible
Description : Check if it is possible to undo.
Access : Public
Return : BOOL - "TRUE" if undo is possible.
Parameters : none
Usage : Use this call for command enabling
============================================================*/
{
return m_undo.GetSize();
}
void CDiagramEntityContainer::SetUndoStackSize( int maxstacksize )
/* ============================================================
Function : CDiagramEntityContainer::SetUndoStackSize
Description : Sets the size of the undo stack.
Access : Public
Return : void
Parameters : int maxstacksize - New size. -1 means
no limit, 0 no undo.
Usage : Call to set the max undo stack size.
============================================================*/
{
m_maxstacksize = maxstacksize;
}
int CDiagramEntityContainer::GetUndoStackSize() const
/* ============================================================
Function : CDiagramEntityContainer::GetUndoStackSize
Description : Returns the size of the undo-stack
Access : Public
Return : int - Current size
Parameters : none
Usage : Call to get the max undo stack size.
============================================================*/
{
return m_maxstacksize;
}
void CDiagramEntityContainer::PopUndo()
/* ============================================================
Function : CUMLEntityContainer::PopUndo
Description : Pops the undo stack (removes the last stack
item)
Access : Public
Return : void
Parameters : none
Usage : Call do undo the last Snapshot
============================================================*/
{
int size = m_undo.GetSize();
if( size )
{
delete m_undo.GetAt( size - 1 );
m_undo.RemoveAt( size - 1 );
}
}
CObArray* CDiagramEntityContainer::GetData()
/* ============================================================
Function : CDiagramEntityContainer::GetData
Description : Accessor for the internal data array
Access : Public
Return : CObArray* - A pointer to the internal
data array.
Parameters : none
Usage : Call to access the internal data array. To
be used in derived classes.
============================================================*/
{
return &m_objs;
}
CObArray* CDiagramEntityContainer::GetPaste()
/* ============================================================
Function : CDiagramEntityContainer::GetPaste
Description : Accessor for the internal paste array
Access : Protected
Return : CObArray* - A pointer to the paste
array
Parameters : none
Usage : Call to access the internal paste array. To
be used in derived classes.
============================================================*/
{
CObArray* arr = NULL;
if( m_clip )
arr = m_clip->GetData();
return arr;
}
CObArray* CDiagramEntityContainer::GetUndo()
/* ============================================================
Function : CDiagramEntityContainer::GetUndo
Description : Accessor for the internal undo array
Access : Protected
Return : CObArray* - A pointer to the undo
array
Parameters : none
Usage : Call to access the internal undo array. To
be used in derived classes.
============================================================*/
{
return &m_undo;
}
void CDiagramEntityContainer::Group()
/* ============================================================
Function : CDiagramEntityContainer::Group
Description : Groups the currently selected objects into
the same group.
Access : Public
Return : void
Parameters : none
Usage : Call to group all selected items into the
same group.
Grouped objects can be moved as a
single entity. Technically, when one object
in a group is selected, all other objects
are also selected automatically.
============================================================*/
{
CDiagramEntity* obj;
int count = 0;
int group = CGroupFactory::GetNewGroup();
while( ( obj = GetAt( count ) ) )
{
if( obj->IsSelected() )
obj->SetGroup( group );
count++;
}
}
void CDiagramEntityContainer::Ungroup()
/* ============================================================
Function : CDiagramEntityContainer::Ungroup
Description : Ungroups the currently selected objects.
Access : Public
Return : void
Parameters : none
Usage : Call to ungroup all selected items.
Grouped objects can be moved as a
single entity. Technically, when one object
in a group is selected, all other objects
are also selected automatically.
============================================================*/
{
CDiagramEntity* obj;
int count = 0;
while( ( obj = GetAt( count ) ) )
{
if( obj->IsSelected() )
obj->SetGroup( 0 );
count++;
}
}
CSize CDiagramEntityContainer::GetTotalSize()
/* ============================================================
Function : CDiagramEntityContainer::GetTotalSize
Description : Gets the minimum bounding size for the
objects in the container.
Access :
Return : CSize - Minimum bounding size
Parameters : none
Usage : Call to get the screen size of the objects
in the container.
============================================================*/
{
CPoint start = GetStartPoint();
double width = 0;
double height = 0;
CDiagramEntity* obj;
int count = 0;
while( ( obj = GetAt( count ) ) )
{
width = max( width, obj->GetLeft() );
width = max( width, obj->GetRight() );
height = max( height, obj->GetTop() );
height = max( height, obj->GetBottom() );
count++;
}
return CSize( round( width - start.x ), round( height - start.y ) );
}
CPoint CDiagramEntityContainer::GetStartPoint()
/* ============================================================
Function : CDiagramEntityContainer::GetStartPoint
Description : Gets the starting screen position of the
objects in the container (normally the
top-left corner of the top-left object).
Access :
Return : CPoint - Top-left position of the
objects.
Parameters : none
Usage : Call to get the starting point on screen of
the objects.
============================================================*/
{
double startx = 2000.0;
double starty = 2000.0;
CDiagramEntity* obj;
int count = 0;
while( ( obj = GetAt( count ) ) )
{
startx = min( startx, obj->GetLeft() );
startx = min( startx, obj->GetRight() );
starty = min( starty, obj->GetTop() );
starty = min( starty, obj->GetBottom() );
count++;
}
return CPoint( round( startx ), round( starty ) );
}
int CDiagramEntityContainer::GetSelectCount() const
/* ============================================================
Function : int CDiagramEntityContainer::GetSelectCount
Description : Gets the number of currently selected
objects in the container.
Access :
Return : int - Currently selected objects.
Parameters : none
Usage : Call to get the number of selected objects.
============================================================*/
{
int max = GetSize();
int count = 0;
for( int t = 0 ; t < max ; t++ )
if( GetAt( t )->IsSelected() )
count++;
return count;
}
void CDiagramEntityContainer::SelectAll()
{
int max = GetSize();
for( int t = 0 ; t < max ; t++ )
GetAt( t )->Select( TRUE );
}
void CDiagramEntityContainer::UnselectAll()
{
int max = GetSize();
for( int t = 0 ; t < max ; t++ )
GetAt( t )->Select( FALSE );
}
#pragma warning( default : 4706 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -