kspread

kspread_handler.cc

00001 //
00002 // TODO: insert copyright header
00003 //
00004 
00005 #include <qpainter.h>
00006 
00007 #include "kspread_view.h"
00008 
00009 #include "kspread_handler.h"
00010 
00011 #define KS_MIN_RECTSIZE 3
00012 
00013 using namespace KSpread;
00014 
00015 InsertHandler::InsertHandler( View* view, QWidget* widget )
00016     : KoEventHandler( widget )
00017 {
00018     m_view = view;
00019     m_started = false;
00020     m_clicked = false;
00021 
00022     widget->setCursor( crossCursor );
00023 }
00024 
00025 InsertHandler::~InsertHandler()
00026 {
00027     ((QWidget*)target())->setCursor( arrowCursor );
00028     m_view->resetInsertHandle();
00029 }
00030 
00031 bool InsertHandler::eventFilter( QObject*, QEvent* ev )
00032 {
00033     if ( ev->type() == QEvent::MouseButtonPress )
00034     {
00035     QMouseEvent* e = (QMouseEvent*)ev;
00036     
00037     m_geometryStart = e->pos();
00038     m_geometryEnd = e->pos();
00039     m_started = false;
00040     m_clicked = true;
00041     
00042     return true;
00043     }
00044     else if ( ev->type() == QEvent::MouseMove )
00045     {
00046     if ( !m_clicked )
00047         return true;
00048     
00049     QMouseEvent* e = (QMouseEvent*)ev;
00050     
00051     QPainter painter;
00052     painter.begin( (QWidget*)target() );
00053     painter.setRasterOp( NotROP );
00054 
00055     QPen pen;
00056     pen.setStyle( DashLine );
00057     painter.setPen( pen );
00058 
00059     if ( m_started )
00060         {
00061         int x = m_geometryStart.x();
00062         int y = m_geometryStart.y();
00063         if ( x > m_geometryEnd.x() )
00064         x = m_geometryEnd.x();
00065         if ( y > m_geometryEnd.y() )
00066         y = m_geometryEnd.y();
00067         int w = m_geometryEnd.x() - m_geometryStart.x();
00068         if ( w < 0 ) w *= -1;
00069         int h = m_geometryEnd.y() - m_geometryStart.y();
00070         if ( h < 0 ) h *= -1;
00071 
00072         if ( w < KS_MIN_RECTSIZE ) w = KS_MIN_RECTSIZE;
00073         if ( h < KS_MIN_RECTSIZE ) h = KS_MIN_RECTSIZE;
00074 
00075         painter.drawRect( x, y, w, h );
00076     }
00077     else
00078         m_started = true;
00079 
00080     m_geometryEnd = e->pos();
00081 
00082     int x = m_geometryStart.x();
00083     int y = m_geometryStart.y();
00084     if ( x > m_geometryEnd.x() )
00085         x = m_geometryEnd.x();
00086     if ( y > m_geometryEnd.y() )
00087         y = m_geometryEnd.y();
00088     int w = m_geometryEnd.x() - m_geometryStart.x();
00089     if ( w < 0 ) w *= -1;
00090     int h = m_geometryEnd.y() - m_geometryStart.y();
00091     if ( h < 0 ) h *= -1;
00092 
00093     if ( w < KS_MIN_RECTSIZE ) w = KS_MIN_RECTSIZE;
00094     if ( h < KS_MIN_RECTSIZE ) h = KS_MIN_RECTSIZE;
00095 
00096     painter.drawRect( x, y, w, h );
00097     painter.end();
00098 
00099     return true;
00100     }
00101     else if ( ev->type() == QEvent::MouseButtonRelease )
00102     {
00103     QMouseEvent* e = (QMouseEvent*)ev;
00104     
00105     if ( !m_started )
00106         {
00107         delete this;
00108         return true;
00109     }
00110     
00111     m_geometryEnd = e->pos();
00112 
00113     int x = m_geometryStart.x();
00114     int y = m_geometryStart.y();
00115     if ( x > m_geometryEnd.x() )
00116         x = m_geometryEnd.x();
00117     if ( y > m_geometryEnd.y() )
00118         y = m_geometryEnd.y();
00119     int w = m_geometryEnd.x() - m_geometryStart.x();
00120     if ( w < 0 ) w *= -1;
00121     int h = m_geometryEnd.y() - m_geometryStart.y();
00122     if ( h < 0 ) h *= -1;
00123 
00124     if ( w < KS_MIN_RECTSIZE ) w = KS_MIN_RECTSIZE;
00125     if ( h < KS_MIN_RECTSIZE ) h = KS_MIN_RECTSIZE;
00126         
00127     QPainter painter;
00128     painter.begin( (QWidget*)target() );
00129 
00130     QPen pen;
00131     pen.setStyle( DashLine );
00132     painter.setPen( pen );
00133 
00134     painter.setRasterOp( NotROP );
00135     painter.drawRect( x, y, w, h );
00136     painter.end();
00137 
00138     insertObject( QRect( x, y, w, h)  );
00139 
00140     delete this;
00141     return true;
00142     }
00143     else if ( ev->type() == QEvent::KeyPress )
00144     {
00145     QKeyEvent* e = (QKeyEvent*)ev;
00146     if ( e->key() != Key_Escape )
00147         return false;
00148     
00149     delete this;
00150     return true;
00151     }
00152 
00153     return false;
00154 }
00155 
00156 InsertPartHandler::InsertPartHandler( View* view, QWidget* widget, const KoDocumentEntry& entry )
00157   : InsertHandler( view, widget ), m_entry( entry )
00158 {
00159 }
00160 InsertPartHandler::~InsertPartHandler()
00161 {
00162 }
00163 void InsertPartHandler::insertObject( QRect r)
00164 {
00165   m_view->insertChild( r, m_entry );
00166 }
00167 
00168 
00169 InsertChartHandler::InsertChartHandler( View* view, QWidget* widget, const KoDocumentEntry& entry )
00170   : InsertHandler( view, widget ), m_entry( entry )
00171 {
00172 }
00173 InsertChartHandler::~InsertChartHandler()
00174 {
00175 }
00176 void InsertChartHandler::insertObject( QRect r)
00177 {
00178   m_view->insertChart( r, m_entry );
00179 }
00180 
00181 InsertPictureHandler::InsertPictureHandler( View* view, QWidget* widget, const KURL &file )
00182   : InsertHandler( view, widget )
00183 {
00184   m_file = file;
00185 }
00186 InsertPictureHandler::~InsertPictureHandler()
00187 {
00188 }
00189 void InsertPictureHandler::insertObject( QRect r)
00190 {
00191   //m_view->insertPicture(/* r,*/ m_file );
00192 }
00193 
00194 #include "kspread_handler.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys