|
|
|
import org.kde.qt.*;
|
|
|
|
import org.kde.koala.*;
|
|
|
|
|
|
|
|
/** The KScribbleView class provides the view widget for the KScribble instance.
|
|
|
|
* The View instance inherits TQWidget as a base class and represents the view object of a KMainWindow. As KScribbleView is part of the
|
|
|
|
* docuement-view model, it needs a reference to the document object connected with it by the KScribble class to manipulate and display
|
|
|
|
* the document structure provided by the KScribbleDoc class.
|
|
|
|
*
|
|
|
|
* @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
|
|
|
|
* @version KDevelop version 0.4 code generation
|
|
|
|
*/
|
|
|
|
public class KScribbleView extends TQScrollView {
|
|
|
|
|
|
|
|
private TQClipboard cb;
|
|
|
|
private KScribbleDoc doc;
|
|
|
|
private static final int IDLE = 0;
|
|
|
|
private static final int DRAW = 1;
|
|
|
|
private static final int SELECT = 2;
|
|
|
|
private static final int PASTE = 3;
|
|
|
|
private static final int DRAG = 4;
|
|
|
|
|
|
|
|
private TQPixmap tmp = new TQPixmap();
|
|
|
|
|
|
|
|
private int action = IDLE;
|
|
|
|
private TQRect select = new TQRect();
|
|
|
|
|
|
|
|
private KIconLoader k = new KIconLoader();
|
|
|
|
private TQImageDrag qid;
|
|
|
|
|
|
|
|
public KScribbleView(KScribbleDoc pDoc, TQWidget parent, String name, int wflags) {
|
|
|
|
super(parent, name,wflags | WPaintClever | WNorthWestGravity | WRepaintNoErase);
|
|
|
|
setBackgroundMode(PaletteBase);
|
|
|
|
cb = TQApplication.clipboard();
|
|
|
|
viewport().setAcceptDrops(true);
|
|
|
|
setDragAutoScroll(true);
|
|
|
|
doc=pDoc;
|
|
|
|
action=IDLE;
|
|
|
|
viewport().setCursor( Qt.crossCursor() );
|
|
|
|
|
|
|
|
TQSize size=doc.docSize();
|
|
|
|
resizeContents(size.width(), size.height());
|
|
|
|
resize(size);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void update(KScribbleView pSender){
|
|
|
|
if(pSender != this)
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public KScribbleDoc getDocument() {
|
|
|
|
return doc;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void keyPressEvent( TQKeyEvent e ) {
|
|
|
|
switch (e.key()) {
|
|
|
|
case Key_Right:
|
|
|
|
scrollBy( 10, 0 );
|
|
|
|
break;
|
|
|
|
case Key_Left:
|
|
|
|
scrollBy( -10,0);
|
|
|
|
break;
|
|
|
|
case Key_Up:
|
|
|
|
scrollBy( 0, -10 );
|
|
|
|
break;
|
|
|
|
case Key_Down:
|
|
|
|
scrollBy( 0, 10 );
|
|
|
|
break;
|
|
|
|
case Key_Home:
|
|
|
|
setContentsPos(0,0);
|
|
|
|
break;
|
|
|
|
case Key_End:
|
|
|
|
setContentsPos(0,viewport().height()-viewport().height());
|
|
|
|
break;
|
|
|
|
case Key_PageUp:
|
|
|
|
scrollBy( 0, -viewport().height() );
|
|
|
|
break;
|
|
|
|
case Key_PageDown:
|
|
|
|
scrollBy( 0, viewport().height() );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/** cuts out a selection */
|
|
|
|
void cutSelection() {
|
|
|
|
select=select.normalize();
|
|
|
|
TQPixmap cb_pix = new TQPixmap();
|
|
|
|
cb_pix.resize(select.size());
|
|
|
|
// copy selection to cb_pix and copy to clipboard
|
|
|
|
bitBlt(cb_pix,0, 0, doc.buffer, select.x()+contentsX(), select.y()+contentsY(), cb_pix.width(),cb_pix.height());
|
|
|
|
cb.setPixmap(cb_pix);
|
|
|
|
// fill cb_pix with white and copy to selection area
|
|
|
|
cb_pix.fill(Qt.white());
|
|
|
|
bitBlt(doc.buffer, select.x()+contentsX(), select.y()+contentsY(),cb_pix, 0, 0, cb_pix.width(), cb_pix.height());
|
|
|
|
action = IDLE;
|
|
|
|
doc.setModified();
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
/** pastes the clipboard contents to a selection that can be inserted into the picture */
|
|
|
|
void pasteSelection(){
|
|
|
|
select=cb.pixmap().rect();
|
|
|
|
action = PASTE;
|
|
|
|
viewport().setCursor( Qt.sizeAllCursor() );
|
|
|
|
}
|
|
|
|
|
|
|
|
/** copies a selection to the clipboard */
|
|
|
|
void copySelection(){
|
|
|
|
select=select.normalize();
|
|
|
|
TQPixmap cb_pix = new TQPixmap();
|
|
|
|
cb_pix.resize(select.size());
|
|
|
|
// copy selection to cb_pix and copy to clipboard
|
|
|
|
bitBlt(cb_pix, 0, 0,doc.buffer, select.x()+contentsX(), select.y()+contentsY(), cb_pix.width(),cb_pix.height());
|
|
|
|
cb.setPixmap(cb_pix);
|
|
|
|
action = IDLE;
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void print(TQPrinter pPrinter) {
|
|
|
|
if (pPrinter.setup(this)) {
|
|
|
|
TQPainter p = new TQPainter();
|
|
|
|
p.begin(pPrinter);
|
|
|
|
|
|
|
|
///////////////////////////////
|
|
|
|
// TODO: add your printing code here
|
|
|
|
p.drawPixmap(0,0,doc.buffer);
|
|
|
|
///////////////////////////////
|
|
|
|
p.end();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportMousePressEvent( TQMouseEvent e ) {
|
|
|
|
if ( e.button() == LeftButton && action == IDLE) {
|
|
|
|
action=DRAW;
|
|
|
|
doc.polyline.setPoint(0,viewportToContents(e.pos()));
|
|
|
|
doc.polyline.setPoint(1,viewportToContents(e.pos()));
|
|
|
|
doc.polyline.setPoint(2,viewportToContents(e.pos()));
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
}
|
|
|
|
else if ( e.button() == RightButton && action == IDLE) {
|
|
|
|
action = SELECT;
|
|
|
|
TQPoint pt=e.pos();
|
|
|
|
int x = pt.x() > contentsWidth() ? contentsWidth() : pt.x();
|
|
|
|
int y = pt.y() > contentsHeight() ? contentsHeight() : pt.y();
|
|
|
|
select.setLeft(x-1);
|
|
|
|
select.setTop(y-1);
|
|
|
|
select.setRight(x-1);
|
|
|
|
select.setBottom(y-1);
|
|
|
|
}
|
|
|
|
else if( action == SELECT ) {
|
|
|
|
action = IDLE;
|
|
|
|
|
|
|
|
select=select.normalize();
|
|
|
|
// drag
|
|
|
|
if(select.contains(e.pos(), true)) { // point inside the selection
|
|
|
|
tmp.resize(select.size());
|
|
|
|
bitBlt(tmp, 0, 0, doc.buffer, select.x()+contentsX(), select.y()+contentsY(), tmp.width(),tmp.height());
|
|
|
|
TQImage img =tmp.convertToImage();
|
|
|
|
TQDragObject d = new TQImageDrag( img, viewport(), "" );
|
|
|
|
d.setPixmap(KDE.BarIcon("filenew"));
|
|
|
|
d.drag();
|
|
|
|
}
|
|
|
|
// remove selection
|
|
|
|
else
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
else if( action == PASTE ) {
|
|
|
|
if ( e.button() == RightButton ) {
|
|
|
|
action = IDLE;
|
|
|
|
viewport().setCursor( Qt.crossCursor() );
|
|
|
|
}
|
|
|
|
TQPoint mv_pt = new TQPoint(viewport().height(), viewport().width());
|
|
|
|
if(new TQRect(0,0,mv_pt.x(),mv_pt.y()).contains(e.pos()))
|
|
|
|
select.moveCenter(e.pos());
|
|
|
|
else {
|
|
|
|
select.moveBottomRight(mv_pt);
|
|
|
|
}
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportMouseReleaseEvent( TQMouseEvent e ) {
|
|
|
|
if ( action == DRAW ) {
|
|
|
|
action = IDLE;
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
}
|
|
|
|
if ( action == SELECT) {
|
|
|
|
TQPoint pt=e.pos();
|
|
|
|
int x = pt.x() > 0 ? pt.x() : 0;
|
|
|
|
int y = pt.y() > 0 ? pt.y() : 0;
|
|
|
|
select.setRight(x);
|
|
|
|
select.setBottom(y);
|
|
|
|
TQSize size=doc.docSize();
|
|
|
|
select = select.intersect(new TQRect(0,0,size.width(), size.height()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** On paste actions inserts the pasted clipboard contents
|
|
|
|
*/
|
|
|
|
protected void viewportMouseDoubleClickEvent(TQMouseEvent e) {
|
|
|
|
if( action == PASTE ) {
|
|
|
|
action = IDLE;
|
|
|
|
select.moveCenter(e.pos());
|
|
|
|
viewport().setCursor( Qt.crossCursor() );
|
|
|
|
TQPixmap cb_pix = new TQPixmap();
|
|
|
|
cb_pix.resize(cb.pixmap().size());
|
|
|
|
cb_pix=cb.pixmap();
|
|
|
|
bitBlt( doc.buffer,contentsX()+select.x(), contentsY()+select.y(),cb_pix, 0, 0, select.width(), select.height());
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
doc.setModified();
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportMouseMoveEvent( TQMouseEvent e ) {
|
|
|
|
if ( action == DRAW ) {
|
|
|
|
TQPainter painter = new TQPainter();
|
|
|
|
painter.begin( doc.buffer );
|
|
|
|
painter.setPen( doc.currentPen() );
|
|
|
|
doc.polyline.setPoint(2, doc.polyline.at(1));
|
|
|
|
doc.polyline.setPoint(1, doc.polyline.at(0));
|
|
|
|
doc.polyline.setPoint(0, viewportToContents(e.pos()));
|
|
|
|
painter.drawPolyline( doc.polyline );
|
|
|
|
painter.end();
|
|
|
|
|
|
|
|
TQRect r = doc.polyline.boundingRect();
|
|
|
|
r = r.normalize();
|
|
|
|
r.setLeft( r.left() - doc.penWidth() );
|
|
|
|
r.setTop( r.top() - doc.penWidth() );
|
|
|
|
r.setRight( r.right() + doc.penWidth() );
|
|
|
|
r.setBottom( r.bottom() + doc.penWidth() );
|
|
|
|
|
|
|
|
bitBlt(viewport(), r.x()-contentsX(), r.y()-contentsY(), doc.buffer, r.x(), r.y(), r.width(),r.height());
|
|
|
|
doc.setModified();
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
}
|
|
|
|
if ( action == SELECT ) {
|
|
|
|
TQPoint pt=e.pos();
|
|
|
|
select.setWidth(select.x()+pt.x());
|
|
|
|
select.setHeight(select.y()+pt.y());
|
|
|
|
select.setRight(pt.x());
|
|
|
|
select.setBottom(pt.y());
|
|
|
|
TQSize size=doc.docSize();
|
|
|
|
select = select.intersect(new TQRect(0,0,size.width(), size.height()));
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
if( action == PASTE ) {
|
|
|
|
TQPoint mv_pt = new TQPoint(viewport().height(), viewport().width());
|
|
|
|
if(new TQRect(0,0,mv_pt.x(),mv_pt.y()).contains(e.pos()))
|
|
|
|
select.moveCenter(e.pos());
|
|
|
|
else {
|
|
|
|
select.moveBottomRight(mv_pt);
|
|
|
|
}
|
|
|
|
TQRect pm_rect=cb.pixmap().rect();
|
|
|
|
select.setWidth(pm_rect.width());
|
|
|
|
select.setHeight(pm_rect.height());
|
|
|
|
TQSize size=doc.docSize();
|
|
|
|
select = select.intersect(new TQRect(0,0,size.width(), size.height()));
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
doc.setModified();
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//void KScribbleView::viewportResizeEvent( TQResizeEvent *e )
|
|
|
|
//{
|
|
|
|
//}
|
|
|
|
|
|
|
|
protected void viewportPaintEvent( TQPaintEvent e ) {
|
|
|
|
bitBlt( viewport(),0, 0, doc.buffer, contentsX(), contentsY(), doc.buffer.width(),doc.buffer.width());
|
|
|
|
|
|
|
|
if( action == PASTE )
|
|
|
|
{
|
|
|
|
tmp.resize(cb.pixmap().size());
|
|
|
|
tmp=cb.pixmap();
|
|
|
|
}
|
|
|
|
if( action == PASTE || action == DRAG )
|
|
|
|
{
|
|
|
|
TQSize size=doc.docSize();
|
|
|
|
select = select.intersect(new TQRect(0,0,size.width(), size.height()));
|
|
|
|
if(select.intersects(e.rect()))
|
|
|
|
bitBlt(viewport(), select.x(), select.y(), tmp, 0, 0, select.width(), select.height());
|
|
|
|
}
|
|
|
|
if( action == PASTE || action == DRAG || action == SELECT ) {
|
|
|
|
if(select.intersects(e.rect())) {
|
|
|
|
TQPainter paint_area = new TQPainter();
|
|
|
|
paint_area.begin(viewport());
|
|
|
|
paint_area.setPen(new TQPen(Qt.black(), 0, DashLine));
|
|
|
|
paint_area.drawRect( select );
|
|
|
|
paint_area.end();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// not implemented for TQScrollView yet
|
|
|
|
// super.viewportPaintEvent(e);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportDragEnterEvent ( TQDragEnterEvent e) {
|
|
|
|
e.accept(TQImageDrag.canDecode(e));
|
|
|
|
action = DRAG;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportDragMoveEvent ( TQDragMoveEvent e) {
|
|
|
|
TQImage img = new TQImage();
|
|
|
|
|
|
|
|
if ( TQImageDrag.canDecode(e) ){
|
|
|
|
TQImageDrag.decode(e, img);
|
|
|
|
tmp.resize(img.size());
|
|
|
|
tmp.convertFromImage(img);
|
|
|
|
select.setWidth(tmp.width());
|
|
|
|
select.setHeight(tmp.height());
|
|
|
|
select.moveCenter(e.pos());
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportDragLeaveEvent ( TQDragLeaveEvent e ) {
|
|
|
|
action = IDLE;
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void viewportDropEvent ( TQDropEvent e) {
|
|
|
|
TQImage img = new TQImage();
|
|
|
|
if ( TQImageDrag.canDecode(e) ) {
|
|
|
|
TQImageDrag.decode(e, img);
|
|
|
|
tmp.resize(img.size());
|
|
|
|
tmp.convertFromImage(img);
|
|
|
|
select.setWidth(tmp.width());
|
|
|
|
select.setHeight(tmp.height());
|
|
|
|
select.moveCenter(e.pos());
|
|
|
|
bitBlt(doc.buffer, select.x()+contentsX(), select.y()+contentsY(), tmp,0,0,tmp.width(), tmp.height());
|
|
|
|
doc.setModified();
|
|
|
|
doc.updateAllViews(this);
|
|
|
|
}
|
|
|
|
action = IDLE;
|
|
|
|
viewport().repaint(0,0,visibleWidth(), visibleHeight(), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|