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.
tdebindings/kdejava/koala/examples/kscribble/KScribbleView.java

343 lines
12 KiB

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);
}
}