00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "AlignAction.h"
00021 #include <KIcon>
00022 #include "GraphVisualEditor.h"
00023 #include "GraphScene.h"
00024 #include "generics.h"
00025 #include <KDebug>
00026
00027 AlignAction::AlignAction( const QString& tooltip, AlignAction::Orientation o, QWidget* parent )
00028 : KAction( KIcon(), tooltip, parent )
00029 {
00030 m_orientation = o;
00031 connect( this, SIGNAL( triggered() ), this, SLOT( align() ) );
00032 kDebug() << " Allign Action Created!";
00033 switch( o )
00034 {
00035 case Left :
00036 setIcon( KIcon( "rocsallignleft" ) );
00037 break;
00038 case Right :
00039 setIcon( KIcon( "rocsallignright" ) );
00040 break;
00041 case Top :
00042 setIcon( KIcon( "rocsalligntop" ) );
00043 break;
00044 case Bottom :
00045 setIcon( KIcon( "rocsallignbottom" ) );
00046 break;
00047 case HCenter :
00048 setIcon( KIcon( "rocsallignhmiddle" ) );
00049 break;
00050 case VCenter :
00051 setIcon( KIcon( "rocsallignvmiddle" ) );
00052 break;
00053 }
00054 }
00055
00056 void AlignAction::align()
00057 {
00058 GraphVisualEditor* gEditor = qobject_cast<GraphVisualEditor*>( parent() );
00059 QList<NodeItem*> l = gEditor->selectedNodes();
00060
00061 if( l.size() < 1 ) return;
00062 gEditor->scene()->setHideEdges( true );
00063 switch( m_orientation )
00064 {
00065 case Left :
00066 case VCenter :
00067 qSort( l.begin(), l.end(), leftLessThan );
00068 allignX( l );
00069 break;
00070 case Bottom :
00071 case HCenter :
00072 qSort( l.begin(), l.end(), bottomLessThan );
00073 allignY( l );
00074 break;
00075 case Right :
00076 qSort( l.begin(), l.end(), rightLessThan );
00077 allignX( l );
00078 break;
00079 case Top :
00080 qSort( l.begin(), l.end(), topLessThan );
00081 allignY( l );
00082 break;
00083 }
00084
00085 gEditor->scene()->setHideEdges( false );
00086 }
00087
00088 void AlignAction::allignY( QList<NodeItem*>& l )
00089 {
00090 qreal final = l[0]->node()->y();
00091
00092 kDebug() << "final sould be:" << final;
00093 if( m_orientation == VCenter || m_orientation == HCenter )
00094 {
00095 qreal otherSide = l[l.size()-1]->node()->y();
00096 final = ( final + otherSide ) / 2;
00097 }
00098 foreach( NodeItem * i, l )
00099 {
00100 i->node()->setY( final );
00101 }
00102 kDebug() << "but it is:" << l[0]->node()->y();
00103 }
00104
00105 void AlignAction::allignX( QList<NodeItem*>& l )
00106 {
00107 qreal final = l[0]->node()->x();
00108 kDebug() << "final should be:" << final;
00109 if( m_orientation == VCenter || m_orientation == HCenter )
00110 {
00111 qreal otherSide = l[l.size()-1]->node()->x();
00112 final = ( final + otherSide ) / 2;
00113 }
00114 foreach( NodeItem * i, l )
00115 {
00116 i->node()->setX( final );
00117 }
00118 kDebug() << "but it is:" << l[0]->node()->x();
00119 }