00001
00007
00008 #include "rail.h"
00009
00010 #include <QDebug>
00011
00012 Rail::Rail( QSvgRenderer* renderer, QString type, int address, int delay, QString decoder, QString info, QGraphicsItem * parent ) : QGraphicsSvgItem( parent )
00013 {
00014 _type = type ;
00015 _address = address ;
00016 _delay = delay ;
00017 _decoder = decoder ;
00018
00019 initState();
00020 setSharedRenderer( renderer );
00021 setElementIdSafe( _type ) ;
00022 setToolTip( info ) ;
00023 }
00024
00025 void Rail::setElementIdSafe( const QString &id )
00026 {
00027 if ( renderer()->elementExists( id ) )
00028 setElementId( id ) ;
00029 else
00030 setElementId( OrKMap::UnknownId ) ;
00031 }
00032
00033 int Rail::address()
00034 {
00035 return _address ;
00036 }
00037
00038 QString Rail::type()
00039 {
00040 return _type ;
00041 }
00042
00043 QString Rail::decoder()
00044 {
00045 return _decoder ;
00046 }
00047
00048 int Rail::delay()
00049 {
00050 return _delay ;
00051 }
00052
00053 void Rail::initState()
00054 {
00055 if ( _type.contains( OrKMap::StateOpen ) )
00056 _open = TRUE ;
00057 else
00058 _open = FALSE ;
00059 }
00060
00061 void Rail::setState( bool open, bool quiet )
00062 {
00063 _open = open ;
00064
00065 if( !open )
00066 _type.replace( QString( OrKMap::StateOpen ), QString( OrKMap::StateClosed ) ) ;
00067 else
00068 _type.replace( QString( OrKMap::StateClosed ), QString( OrKMap::StateOpen ) ) ;
00069
00070 setElementIdSafe( _type ) ;
00071 update() ;
00072
00073 if ( ! quiet )
00074 emit stateChanged( open ) ;
00075
00076 }
00077
00078 void Rail::toggleState( bool quiet )
00079 {
00080 setState( !_open, quiet ) ;
00081 }
00082
00083 QRectF Rail::boundingRect() const
00084 {
00085 return QRectF ( 0, 0, OrKMap::ItemXSize, OrKMap::ItemYSize ) ;
00086 }
00087
00088 void Rail::mousePressEvent( QGraphicsSceneMouseEvent *event )
00089 {
00090 if( _address == 0 || Qt::LeftButton != event->button() )
00091 return ;
00092
00093
00094 emit clicked() ;
00095 }
00096
00097 bool Rail::isOpen()
00098 {
00099 return _open ;
00100 }