You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
586 lines
11 KiB
586 lines
11 KiB
//
|
|
// 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;
|
|
|
|
TQDateTime _tmpStartDateTime, _tmpEndDateTime;
|
|
|
|
|
|
void
|
|
xQGanttBarViewPort::mousePressEvent(TQMouseEvent* 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() == Qt::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() == Qt::MidButton && _mode == Select) {
|
|
|
|
xTQTaskPosition* tp = _gItemList.find(_currentItem);
|
|
TQPainter p(this);
|
|
|
|
TQRect 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() == Qt::LeftButton && _mode == Select) {
|
|
|
|
_timediff = 0;
|
|
|
|
switch(pos) {
|
|
|
|
case Handle:
|
|
|
|
_currentItem->open( !_currentItem->isOpen() );
|
|
break;
|
|
|
|
case Center:
|
|
|
|
_changeEnd = true;
|
|
_changeStart = true;
|
|
|
|
if(e->state() == ShiftButton) {
|
|
|
|
TQString 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(TQMouseEvent* 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();
|
|
TQWidget::update();
|
|
|
|
}
|
|
}
|
|
else {
|
|
if(_currentItem && _selectItem) {
|
|
|
|
|
|
if(e->state() & ControlButton) {
|
|
_currentItem->select( !_currentItem->isSelected() );
|
|
}
|
|
else {
|
|
bool state = _currentItem->isSelected();
|
|
unselectAll();
|
|
_currentItem->select( !state );
|
|
}
|
|
|
|
TQWidget::update();
|
|
_selectItem = false;
|
|
|
|
}
|
|
}
|
|
|
|
_changeEnd = false;
|
|
_changeStart = false;
|
|
|
|
}
|
|
break;
|
|
|
|
|
|
case Zoom:
|
|
|
|
if(!_Mousemoved) {
|
|
|
|
if(e->button() == Qt::LeftButton)
|
|
zoom(1.4, e->x(), e->y() );
|
|
|
|
|
|
if(e->button() == Qt::RightButton)
|
|
zoom(0.7, e->x(), e->y() );
|
|
|
|
|
|
if(e->button() == Qt::MidButton)
|
|
zoomAll();
|
|
|
|
}
|
|
else {
|
|
|
|
if(_currentMButton == Qt::LeftButton) {
|
|
|
|
TQPainter p(this);
|
|
TQPen 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(TQMouseEvent* e)
|
|
{
|
|
if(fabs((float)(_startPoint->x() - e->x())) < 2 &&
|
|
fabs((float)(_startPoint->y() - e->y())) < 2 )
|
|
return;
|
|
|
|
static TQPen _dashPen(TQColor(255,0,0),DashLine);
|
|
static TQPen _solidPen(TQColor(200,200,200));
|
|
|
|
_Mousemoved = true;
|
|
|
|
switch(_mode) {
|
|
|
|
case Select: {
|
|
|
|
if(_currentMButton == Qt::LeftButton && _currentItem) {
|
|
|
|
TQPainter p(this);
|
|
p.setRasterOp(XorROP);
|
|
// TQPen pen(DashLine);
|
|
// pen.setColor(red);
|
|
p.setPen( _dashPen );
|
|
|
|
TQString stmp;
|
|
stmp.sprintf("%s\n", _currentItem->getText().latin1() );
|
|
|
|
int pixeldiff = e->x() - _startPoint->x();
|
|
_timediff = (int) ((double) pixeldiff / _scaleX + 0.5 );
|
|
|
|
xTQTaskPosition* 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) {
|
|
|
|
TQDateTime movedStart( _currentItem->getStart().addSecs(_timediff*60) );
|
|
|
|
_tmpStartDateTime.setDate( movedStart.date() );
|
|
_tmpStartDateTime.setTime(TQTime(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) {
|
|
|
|
TQDateTime movedEnd( _currentItem->getEnd().addSecs(_timediff*60) );
|
|
|
|
_tmpEndDateTime.setDate( movedEnd.date() );
|
|
_tmpEndDateTime.setTime(TQTime(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,
|
|
TQBrush(TQColor(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,
|
|
TQBrush(TQColor(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 == Qt::LeftButton) {
|
|
|
|
static TQString strpos;
|
|
|
|
strpos = "";
|
|
|
|
int s = worldX(_startPoint->x());
|
|
TQDateTime d1 = _toplevelitem->getStart().addSecs(s*60);
|
|
|
|
s = worldX(e->x());
|
|
TQDateTime d2 = _toplevelitem->getStart().addSecs(s*60);
|
|
|
|
strpos += d1.date().toString();
|
|
strpos += " - ";
|
|
strpos += d2.date().toString();
|
|
|
|
emit message(strpos);
|
|
|
|
TQPainter p(this);
|
|
TQPen 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());
|
|
|
|
TQBrush _selectedbrush( TQColor(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(TQKeyEvent* 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(TQPaintEvent * e)
|
|
/////////////////////////////////////////////////
|
|
{
|
|
update(e->rect().left(), e->rect().top(),
|
|
e->rect().right(), e->rect().bottom() );
|
|
}
|