kspread_handler.cc
00001 #include "kspread_handler.h"
00002 #include "kspread_view.h"
00003
00004 #include <qpainter.h>
00005 #define KS_MIN_RECTSIZE 3
00006
00007 KSpreadInsertHandler::KSpreadInsertHandler( KSpreadView* view, QWidget* widget, const KoDocumentEntry& entry, bool ischart )
00008 : EventHandler( widget ), m_entry( entry )
00009 {
00010 m_isChart = ischart;
00011 m_view = view;
00012 m_started = FALSE;
00013 m_clicked = FALSE;
00014
00015 widget->setCursor( crossCursor );
00016 }
00017
00018 KSpreadInsertHandler::~KSpreadInsertHandler()
00019 {
00020 ((QWidget*)target())->setCursor( arrowCursor );
00021 m_view->resetInsertHandle();
00022 }
00023
00024 bool KSpreadInsertHandler::eventFilter( QObject*, QEvent* ev )
00025 {
00026 if ( ev->type() == QEvent::MouseButtonPress )
00027 {
00028 QMouseEvent* e = (QMouseEvent*)ev;
00029
00030 m_geometryStart = e->pos();
00031 m_geometryEnd = e->pos();
00032 m_started = FALSE;
00033 m_clicked = TRUE;
00034
00035 return TRUE;
00036 }
00037 else if ( ev->type() == QEvent::MouseMove )
00038 {
00039 if ( !m_clicked )
00040 return TRUE;
00041
00042 QMouseEvent* e = (QMouseEvent*)ev;
00043
00044 QPainter painter;
00045 painter.begin( (QWidget*)target() );
00046 painter.setRasterOp( NotROP );
00047
00048 QPen pen;
00049 pen.setStyle( DashLine );
00050 painter.setPen( pen );
00051
00052 if ( m_started )
00053 {
00054 int x = m_geometryStart.x();
00055 int y = m_geometryStart.y();
00056 if ( x > m_geometryEnd.x() )
00057 x = m_geometryEnd.x();
00058 if ( y > m_geometryEnd.y() )
00059 y = m_geometryEnd.y();
00060 int w = m_geometryEnd.x() - m_geometryStart.x();
00061 if ( w < 0 ) w *= -1;
00062 int h = m_geometryEnd.y() - m_geometryStart.y();
00063 if ( h < 0 ) h *= -1;
00064
00065 if ( w < KS_MIN_RECTSIZE ) w = KS_MIN_RECTSIZE;
00066 if ( h < KS_MIN_RECTSIZE ) h = KS_MIN_RECTSIZE;
00067
00068 painter.drawRect( x, y, w, h );
00069 }
00070 else
00071 m_started = TRUE;
00072
00073 m_geometryEnd = e->pos();
00074
00075 int x = m_geometryStart.x();
00076 int y = m_geometryStart.y();
00077 if ( x > m_geometryEnd.x() )
00078 x = m_geometryEnd.x();
00079 if ( y > m_geometryEnd.y() )
00080 y = m_geometryEnd.y();
00081 int w = m_geometryEnd.x() - m_geometryStart.x();
00082 if ( w < 0 ) w *= -1;
00083 int h = m_geometryEnd.y() - m_geometryStart.y();
00084 if ( h < 0 ) h *= -1;
00085
00086 if ( w < KS_MIN_RECTSIZE ) w = KS_MIN_RECTSIZE;
00087 if ( h < KS_MIN_RECTSIZE ) h = KS_MIN_RECTSIZE;
00088
00089 painter.drawRect( x, y, w, h );
00090 painter.end();
00091
00092 return TRUE;
00093 }
00094 else if ( ev->type() == QEvent::MouseButtonRelease )
00095 {
00096 QMouseEvent* e = (QMouseEvent*)ev;
00097
00098 if ( !m_started )
00099 {
00100 delete this;
00101 return TRUE;
00102 }
00103
00104 m_geometryEnd = e->pos();
00105
00106 int x = m_geometryStart.x();
00107 int y = m_geometryStart.y();
00108 if ( x > m_geometryEnd.x() )
00109 x = m_geometryEnd.x();
00110 if ( y > m_geometryEnd.y() )
00111 y = m_geometryEnd.y();
00112 int w = m_geometryEnd.x() - m_geometryStart.x();
00113 if ( w < 0 ) w *= -1;
00114 int h = m_geometryEnd.y() - m_geometryStart.y();
00115 if ( h < 0 ) h *= -1;
00116
00117 if ( w < KS_MIN_RECTSIZE ) w = KS_MIN_RECTSIZE;
00118 if ( h < KS_MIN_RECTSIZE ) h = KS_MIN_RECTSIZE;
00119
00120 QPainter painter;
00121 painter.begin( (QWidget*)target() );
00122
00123 QPen pen;
00124 pen.setStyle( DashLine );
00125 painter.setPen( pen );
00126
00127 painter.setRasterOp( NotROP );
00128 painter.drawRect( x, y, w, h );
00129 painter.end();
00130
00131 if ( m_isChart )
00132 m_view->insertChart( QRect( x, y, w, h ), m_entry );
00133 else
00134 m_view->insertChild( QRect( x, y, w, h ), m_entry );
00135
00136 delete this;
00137 return TRUE;
00138 }
00139 else if ( ev->type() == QEvent::KeyPress )
00140 {
00141 QKeyEvent* e = (QKeyEvent*)ev;
00142 if ( e->key() != Key_Escape )
00143 return FALSE;
00144
00145 delete this;
00146 return TRUE;
00147 }
00148
00149 return FALSE;
00150 }
00151
00152 #include "kspread_handler.moc"
This file is part of the documentation for kspread Library Version 1.4.2.