summaryrefslogtreecommitdiffstats
path: root/kgantt/kgantt/xQGanttBarViewPort_Events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kgantt/kgantt/xQGanttBarViewPort_Events.cpp')
-rw-r--r--kgantt/kgantt/xQGanttBarViewPort_Events.cpp585
1 files changed, 585 insertions, 0 deletions
diff --git a/kgantt/kgantt/xQGanttBarViewPort_Events.cpp b/kgantt/kgantt/xQGanttBarViewPort_Events.cpp
new file mode 100644
index 000000000..8609962b7
--- /dev/null
+++ b/kgantt/kgantt/xQGanttBarViewPort_Events.cpp
@@ -0,0 +1,585 @@
+//
+// file : xQGanttBarViewPort_Events.C
+// date : 11 nov 2000
+// changed : 27 dec 2000
+// author : jh
+//
+
+
+#include "xQGanttBarViewPort.h"
+#include "xQGanttBarView.h"
+
+#include <math.h>
+
+KGanttItem* xQGanttBarViewPort::_currentItem;
+
+
+static int _currentMButton;
+static bool _Mousemoved;
+static bool _selectItem;
+
+static int _timediff;
+
+static bool _changeEnd, _changeStart;
+static int oldw = -1, oldx = -1;
+
+QDateTime _tmpStartDateTime, _tmpEndDateTime;
+
+
+void
+xQGanttBarViewPort::mousePressEvent(QMouseEvent* e)
+{
+ // set _currentItem to pushed mousebutton
+ _currentMButton = e->button();
+ _Mousemoved = false;
+
+ _startPoint->setX( e->x() );
+ _startPoint->setY( e->y() );
+
+ _endPoint->setX( e->x() );
+ _endPoint->setY( e->y() );
+
+ _itemInfo->hide();
+ _itemTextEdit->hide();
+
+ // right mousebutton & control -> popup menu
+ if(e->button() == RightButton && e->state() == ControlButton ) {
+ _menu->popup(e->globalPos());
+ return;
+ }
+
+
+ /*
+ * get clicked item and position
+ */
+ _currentItem = NULL;
+ Position pos = check(&_currentItem, e->x(), e->y());
+
+ if(!_currentItem) {
+ unselectAll();
+ return;
+ }
+
+
+ /*
+ * edit text
+ */
+ if(e->button() == MidButton && _mode == Select) {
+
+ xQTaskPosition* tp = _gItemList.find(_currentItem);
+ QPainter p(this);
+
+ QRect rect = p.boundingRect(tp->_textPosX,
+ tp->_textPosY, 200,
+ tp->_screenH, AlignLeft, _currentItem->getText() );
+
+ _itemTextEdit->setText(_currentItem->getText());
+ _itemTextEdit->move(tp->_textPosX, tp->_screenY + _margin + 1);
+ _itemTextEdit->setFixedWidth(rect.width()+40);
+ _itemTextEdit->setFixedHeight(tp->_screenH - 2 * _margin - 2);
+ _itemTextEdit->setFocus();
+
+ // if item is not editable, _itemTextEdit should be not editable
+ // as well
+ _itemTextEdit->setReadOnly(!_currentItem->isEditable());
+
+ _itemTextEdit->show();
+
+ }
+
+
+ /*
+ * open/close item, move start, end, item
+ */
+ if(e->button() == LeftButton && _mode == Select) {
+
+ _timediff = 0;
+
+ switch(pos) {
+
+ case Handle:
+
+ _currentItem->open( !_currentItem->isOpen() );
+ break;
+
+ case Center:
+
+ _changeEnd = true;
+ _changeStart = true;
+
+ if(e->state() == ShiftButton) {
+
+ QString tmp; tmp.sprintf("%s\n", _currentItem->getText().latin1() );
+
+ tmp += _currentItem->getStart().toString();
+ tmp += " - ";
+ tmp += _currentItem->getEnd().toString();
+
+ _itemInfo->setText( tmp );
+ _itemInfo->adjustSize();
+
+ _itemInfo->move(e->x() + 25, _gItemList.find(_currentItem)->_screenY - 50 );
+ _itemInfo->show();
+ }
+ else
+ _selectItem = true;
+
+ break;
+
+
+ case East:
+
+ _changeEnd = true;
+ _changeStart = false;
+ break;
+
+
+ case West:
+
+ _changeStart = true;
+ _changeEnd = false;
+ break;
+
+ default :
+ break;
+
+ }
+
+
+
+ } // if(e->button() == LeftButton && _mode == Select)
+
+}
+
+
+
+void
+xQGanttBarViewPort::mouseReleaseEvent(QMouseEvent* e)
+{
+ switch(_mode) {
+
+ case Select: {
+
+ if(_Mousemoved == true) {
+
+ _itemInfo->hide();
+
+ if(_changeStart == true || _changeEnd == true) {
+
+ if(_changeStart == true) {
+ _currentItem->setStart( _tmpStartDateTime );
+ }
+ if(_changeEnd == true) {
+ _currentItem->setEnd( _tmpEndDateTime );
+ }
+
+ oldx = -1; oldw = -1;
+
+ recalc();
+ QWidget::update();
+
+ }
+ }
+ else {
+ if(_currentItem && _selectItem) {
+
+
+ if(e->state() & ControlButton) {
+ _currentItem->select( !_currentItem->isSelected() );
+ }
+ else {
+ bool state = _currentItem->isSelected();
+ unselectAll();
+ _currentItem->select( !state );
+ }
+
+ QWidget::update();
+ _selectItem = false;
+
+ }
+ }
+
+ _changeEnd = false;
+ _changeStart = false;
+
+ }
+ break;
+
+
+ case Zoom:
+
+ if(!_Mousemoved) {
+
+ if(e->button() == LeftButton)
+ zoom(1.4, e->x(), e->y() );
+
+
+ if(e->button() == RightButton)
+ zoom(0.7, e->x(), e->y() );
+
+
+ if(e->button() == MidButton)
+ zoomAll();
+
+ }
+ else {
+
+ if(_currentMButton == LeftButton) {
+
+ QPainter p(this);
+ QPen pen(DashLine);
+ pen.setColor(red);
+ p.setRasterOp(XorROP);
+ p.setPen( pen );
+
+ p.drawRect(_startPoint->x(),
+ _startPoint->y(),
+ _endPoint->x()-_startPoint->x(),
+ _endPoint->y() - _startPoint->y());
+
+ double x1 = _startPoint->x();
+ double y1 = _startPoint->y();
+
+ double x2 = _endPoint->x();
+ double y2 = _endPoint->y();
+
+ double sys_width = fabs(x2 - x1);
+
+ double mass = (_parent->visibleWidth()/ sys_width);
+
+ zoom(mass, (int) (x1+(x2-x1)/2), (int) (y1+(y2-y1)/2) );
+
+
+ }
+ }
+
+ break;
+
+
+ default:
+ break;
+
+ }
+
+ _Mousemoved = false;
+ _currentMButton = 0;
+
+}
+
+
+
+void
+xQGanttBarViewPort::mouseMoveEvent(QMouseEvent* e)
+{
+ if(fabs((float)(_startPoint->x() - e->x())) < 2 &&
+ fabs((float)(_startPoint->y() - e->y())) < 2 )
+ return;
+
+ static QPen _dashPen(QColor(255,0,0),DashLine);
+ static QPen _solidPen(QColor(200,200,200));
+
+ _Mousemoved = true;
+
+ switch(_mode) {
+
+ case Select: {
+
+ if(_currentMButton == LeftButton && _currentItem) {
+
+ QPainter p(this);
+ p.setRasterOp(XorROP);
+ // QPen pen(DashLine);
+ // pen.setColor(red);
+ p.setPen( _dashPen );
+
+ QString stmp;
+ stmp.sprintf("%s\n", _currentItem->getText().latin1() );
+
+ int pixeldiff = e->x() - _startPoint->x();
+ _timediff = (int) ((double) pixeldiff / _scaleX + 0.5 );
+
+ xQTaskPosition* tpos = _gItemList[_currentItem];
+
+ int x = tpos->_screenX; int w = tpos->_screenW;
+
+ if(_changeStart && _changeEnd) {
+ double tmp = (double) _timediff/(double) _snapgrid;
+ _timediff = ((int) (tmp + sgn(tmp) * 0.5)) * _snapgrid;
+ stmp += _currentItem->getStart().addSecs(_timediff*60).toString();
+ stmp += " - ";
+ stmp += _currentItem->getEnd().addSecs(_timediff*60).toString();
+ x += (int) (_timediff * _scaleX);
+
+ _tmpStartDateTime = _currentItem->getStart().addSecs(_timediff*60);
+ _tmpEndDateTime = _currentItem->getEnd().addSecs(_timediff*60);
+
+ }
+ else {
+
+ if(_changeStart) {
+
+ QDateTime movedStart( _currentItem->getStart().addSecs(_timediff*60) );
+
+ _tmpStartDateTime.setDate( movedStart.date() );
+ _tmpStartDateTime.setTime(QTime(0,0,0,0));
+
+ double diff = _tmpStartDateTime.secsTo(movedStart)/60;
+
+ double tmp = diff/(double) _snapgrid;
+ _timediff = ((int) (tmp + sgn(tmp) * 0.5)) * _snapgrid;
+
+ _tmpStartDateTime = _tmpStartDateTime.addSecs(_timediff*60);
+ _timediff = _currentItem->getStart().secsTo(_tmpStartDateTime)/60;
+
+ stmp += _tmpStartDateTime.toString().latin1();
+ stmp += " - ";
+ stmp += _currentItem->getEnd().toString();
+
+ x += (int) (_timediff * _scaleX);
+ w -= (int) (_timediff * _scaleX);
+ }
+
+ if(_changeEnd) {
+
+ QDateTime movedEnd( _currentItem->getEnd().addSecs(_timediff*60) );
+
+ _tmpEndDateTime.setDate( movedEnd.date() );
+ _tmpEndDateTime.setTime(QTime(0,0,0,0));
+
+ double diff = _tmpEndDateTime.secsTo(movedEnd)/60;
+
+ double tmp = diff/(double) _snapgrid;
+ _timediff = ((int) (tmp + sgn(tmp) * 0.5)) * _snapgrid;
+
+ _tmpEndDateTime = _tmpEndDateTime.addSecs(_timediff*60);
+ _timediff = _currentItem->getEnd().secsTo(_tmpEndDateTime)/60;
+
+ stmp += _currentItem->getStart().toString();
+ stmp += " - ";
+ stmp += _tmpEndDateTime.toString().latin1();
+
+ w += (int) (_timediff * _scaleX);
+
+ }
+
+ }
+
+ _itemInfo->setText( stmp );
+ _itemInfo->adjustSize();
+ _itemInfo->move(e->x() + 25, _gItemList.find(_currentItem)->_screenY - 50);
+ _itemInfo->show();
+
+ if(oldx > 0) {
+ p.fillRect(oldx, _gItemList.find(_currentItem)->_screenY,
+ oldw, _gItemList.find(_currentItem)->_screenH,
+ QBrush(QColor(50,50,50), Dense4Pattern));
+ p.drawRect(oldx, _gItemList.find(_currentItem)->_screenY,
+ oldw, _gItemList.find(_currentItem)->_screenH);
+
+ p.setPen(_solidPen);
+ if(_changeStart)
+ p.drawLine(oldx, 0, oldx, height());
+ if(oldw > 2)
+ if(_changeEnd)
+ p.drawLine(oldx + oldw, 0, oldx + oldw, height());
+
+ }
+
+ p.setPen(_dashPen);
+ p.fillRect(x, _gItemList.find(_currentItem)->_screenY,
+ w, _gItemList.find(_currentItem)->_screenH,
+ QBrush(QColor(50,50,50), Dense4Pattern) );
+ p.drawRect(x, _gItemList.find(_currentItem)->_screenY,
+ w, _gItemList.find(_currentItem)->_screenH);
+
+ p.setPen(_solidPen);
+ if(_changeStart)
+ p.drawLine(x, 0, x, height());
+
+ if(w>2)
+ if(_changeEnd)
+ p.drawLine(x + w, 0, x + w, height());
+
+ oldx = x; oldw = w;
+
+ }
+ else {
+
+ static Position _pos = Outside;
+
+ KGanttItem* item = NULL;
+
+ Position pos = check(&item, e->x(), e->y());
+
+ if(_pos != pos) {
+
+ _pos = pos;
+
+ if(pos == West || pos == East) {
+ setCursor( splitHCursor );
+ break;
+ }
+ if(pos == North || pos == South) {
+ setCursor( splitVCursor );
+ break;
+ }
+ if(pos == Center) {
+ setCursor( upArrowCursor);
+ break;
+ }
+ if(pos == Handle) {
+ setCursor(pointingHandCursor);
+ break;
+ }
+
+ setCursor(arrowCursor);
+
+ }
+ }
+ }
+ break;
+
+
+ case Zoom: {
+
+ if(_currentMButton == LeftButton) {
+
+ static QString strpos;
+
+ strpos = "";
+
+ int s = worldX(_startPoint->x());
+ QDateTime d1 = _toplevelitem->getStart().addSecs(s*60);
+
+ s = worldX(e->x());
+ QDateTime d2 = _toplevelitem->getStart().addSecs(s*60);
+
+ strpos += d1.date().toString();
+ strpos += " - ";
+ strpos += d2.date().toString();
+
+ emit message(strpos);
+
+ QPainter p(this);
+ QPen pen(DashLine);
+ pen.setColor(red);
+
+ p.setRasterOp(XorROP);
+
+ p.setPen( pen );
+
+ p.drawRect(_startPoint->x(),
+ _startPoint->y(),
+ _endPoint->x()-_startPoint->x(),
+ _endPoint->y() - _startPoint->y());
+
+ QBrush _selectedbrush( QColor(50,50,50), Dense4Pattern );
+
+ p.fillRect( _startPoint->x(), _startPoint->y(),
+ _endPoint->x()-_startPoint->x(), _endPoint->y() - _startPoint->y(),
+ _selectedbrush );
+
+ _endPoint->setX( e->x() );
+ _endPoint->setY( e->y() );
+
+
+ p.drawRect(_startPoint->x(), _startPoint->y(),
+ _endPoint->x()-_startPoint->x(), _endPoint->y() - _startPoint->y());
+
+ p.fillRect( _startPoint->x(), _startPoint->y(),
+ _endPoint->x()-_startPoint->x(), _endPoint->y() - _startPoint->y(),
+ _selectedbrush );
+ }
+
+ }
+
+ break;
+
+ case Move: {
+ emit scroll(_startPoint->x() - e->x(), _startPoint->y() - e->y() );
+ }
+ break;
+
+
+ default :
+ break;
+
+ }
+}
+
+
+void
+xQGanttBarViewPort::keyPressEvent(QKeyEvent* e)
+{
+
+ printf("xQGanttBarViewPort::keyPressEvent() key = %d \n", e->key() );
+
+ int dx = 15;
+
+ if(e->state() == ControlButton)
+ dx *= 10;
+
+ switch(e->key()) {
+
+ case Key_Left:
+
+ emit scroll(-dx,0);
+ break;
+
+ case Key_Right:
+
+ emit scroll(dx,0);
+ break;
+
+ case Key_Up:
+
+ emit scroll(0,-dx);
+ break;
+
+ case Key_Down:
+
+ emit scroll(0, dx);
+ break;
+
+ case 43: // +
+
+ zoom(1.4);
+ break;
+
+ case 45: // -
+
+ zoom(0.7);
+ break;
+
+ case 4103: // del
+
+ deleteSelectedItems();
+ break;
+
+ case 4102: // einfg
+
+ insertIntoSelectedItem();
+ break;
+
+ case 4119: // bild v
+
+ emit scroll(0, dx*15);
+ break;
+
+ case 4118: // bild ^
+
+ emit scroll(0,-dx*15);
+ break;
+
+ }
+
+}
+
+
+void
+xQGanttBarViewPort::paintEvent(QPaintEvent * e)
+/////////////////////////////////////////////////
+{
+ update(e->rect().left(), e->rect().top(),
+ e->rect().right(), e->rect().bottom() );
+}