diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c89fd9f0..83f1dd049 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,7 +70,7 @@ install(TARGETS okularcore DESTINATION ${LIB_INSTALL_DIR} ) set(okularpart_SRCS part.cpp ui/embeddedfilesdialog.cpp - ui/embeddedannotationdialog.cpp + ui/annotwindow.cpp ui/annotationpropertiesdialog.cpp ui/minibar.cpp ui/newstuff.cpp diff --git a/ui/annotwindow.cpp b/ui/annotwindow.cpp new file mode 100644 index 000000000..ced417ac6 --- /dev/null +++ b/ui/annotwindow.cpp @@ -0,0 +1,175 @@ + +/*************************************************************************** + * Copyright (C) 2006 by Chu Xiaodong * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ +#include +#include "annotwindow.h" + + +MouseBox::MouseBox( QWidget * parent) + : QWidget(parent),pointpressed(0,0)//pointpressed(QPoint(0,0))// m_parent(parent) +{ +} + +void MouseBox::paintEvent(QPaintEvent *e) +{ + emit paintevent(e); +} +void MouseBox::mousePressEvent(QMouseEvent *e) +{ + pointpressed=e->pos(); + //kDebug( )<<"astario: mousebox pressed"<window.text, this); + connect(textEdit,SIGNAL(textChanged()), + this,SLOT(slotsaveWindowText())); + modTime=m_annot->modifyDate.toString(Qt::ISODate); + + setPalette( QPalette(m_annot->style.color)); + QPalette pl=textEdit->palette(); + pl.setColor(QPalette::Base,m_annot->style.color); + textEdit->setPalette(pl); + titleBox=new MouseBox(this); + titleBox->setCursor(Qt::SizeAllCursor); + resizerBox=new MouseBox(this); + resizerBox->setCursor(Qt::SizeFDiagCursor); + connect( titleBox,SIGNAL(mousemoveevent(QMouseEvent*)), + this,SLOT(slotTitleMouseMove(QMouseEvent*))); + connect( resizerBox,SIGNAL(mousemoveevent(QMouseEvent*)), + this,SLOT(slotResizerMouseMove(QMouseEvent*))); + connect( resizerBox,SIGNAL(paintevent(QPaintEvent*)), + this,SLOT(slotResizerPaint(QPaintEvent*))); + btnClose=new MouseBox(this); + connect( btnClose,SIGNAL(mousereleaseevent( QMouseEvent* )), + this,SLOT(slotCloseBtn( QMouseEvent* ))); + connect( btnClose,SIGNAL(paintevent( QPaintEvent* )), + this,SLOT(slotPaintCloseBtn( QPaintEvent* ))); + btnOption=new MouseBox(this); + + connect( btnOption,SIGNAL(mousereleaseevent( QMouseEvent* )), + this,SLOT(slotOptionBtn( QMouseEvent* ))); + // connect( btnOption,SIGNAL(paintevent( QPaintEvent* )), + // this,SLOT(slotPaintOptionBtn( QPaintEvent* ))); + + + setGeometry(10,10,300,300 ); + + + +} + +void AnnotWindow::paintEvent(QPaintEvent *) +{ + QPainter annopainter(this); + QRect rc=rect(); + QPen pen=QPen(Qt::black); + annopainter.setPen(pen); + annopainter.setBrush(m_annot->style.color); + annopainter.drawRect( rc ); + annopainter.translate( rc.topLeft() ); + +// QFont qft=annopainter.font(); +// qft.setPointSize( 10 ); +// annopainter.setFont( qft); + annopainter.drawText(rc.right()-150,16,modTime); + annopainter.drawText(2,32,m_annot->author); + + pen.setWidth(2); + annopainter.setPen(pen); + annopainter.drawText(2,16,m_annot->window.summary); + + + //draw options button: + pen.setWidth(1); + annopainter.setPen(pen); + rc=btnOption->geometry(); //(0,0,x,x) + annopainter.drawRect(rc.left(),rc.top(),rc.width()-1,rc.height()-1); + annopainter.drawText( rc.left(),rc.top(),rc.width(),rc.height(),Qt::AlignLeft,"options"); + +// annopainter.drawLine( 0,10,rc.width(),10); +} + + +void AnnotWindow::resizeEvent ( QResizeEvent * e ) +{ //size: + QSize sz=e->size(); + btnClose->setGeometry( sz.width()-16,2,14,14); + btnOption->setGeometry( sz.width()-80,16,75,16); + titleBox->setGeometry(0,0,sz.width(),32); + textEdit->setGeometry(0,32,sz.width(),sz.height()-32-14); + resizerBox->setGeometry(sz.width()-14,sz.height()-14,14,14); + //titlerc.setRect( 0,0,sz.width(),20); + //sizegriprc.setRect(sz.width()-14,sz.height()-14,14,14); +} + +void AnnotWindow::slotTitleMouseMove(QMouseEvent* e) +{ + if (e->buttons() != Qt::LeftButton) + return; + move(e->pos()-titleBox->pointpressed+pos()); +} +void AnnotWindow::slotResizerMouseMove(QMouseEvent* e) +{ + if (e->buttons() != Qt::LeftButton) + return; + QSize sz=size(); + QPoint dpt=e->pos()-resizerBox->pointpressed; + sz.setHeight(qMax(10,sz.height()+dpt.y())); + sz.setWidth(qMax(20,sz.width()+dpt.x())); + resize(sz); +} +void AnnotWindow::slotResizerPaint(QPaintEvent* ) +{ + //draw Size griper: + QPainter pnter(resizerBox); + int w=resizerBox->rect().width(),h=resizerBox->rect().height(); + for(int i=0;i<5;i++) + { + pnter.drawLine( w-1-i*3,h,w,h-1-i*3); + } +} + + +void AnnotWindow::slotPaintCloseBtn(QPaintEvent* ) +{ + //draw close button + QPainter pnter(btnClose); + QRect rc=btnClose->rect(); + rc.moveTo( 0,0); + pnter.drawRect(rc.left(),rc.top(),rc.width()-1,rc.height()-1); + pnter.drawLine(rc.topLeft(),rc.bottomRight()); + pnter.drawLine(rc.topRight(),rc.bottomLeft()); +} + +void AnnotWindow::slotCloseBtn( QMouseEvent* e) +{ + this->hide(); +} +void AnnotWindow::slotOptionBtn( QMouseEvent* e) +{ + //TODO: call context menu in pageview + //emit sig... +} + void AnnotWindow::slotsaveWindowText() +{ + m_annot->window.text=textEdit->text(); +} +#include "annotwindow.moc" diff --git a/ui/annotwindow.h b/ui/annotwindow.h new file mode 100644 index 000000000..87fdb3521 --- /dev/null +++ b/ui/annotwindow.h @@ -0,0 +1,85 @@ +/*************************************************************************** + * Copyright (C) 2006 by Chu Xiaodong * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ +//annotwindow.h +#ifndef _ANNOTWINDOW_H_ +#define _ANNOTWINDOW_H_ + +#include +#include +#include +#include +#include +#include + +#include "core/annotations.h" +//this widget is for the titlebar and size griper +class MouseBox : public QWidget +{ + Q_OBJECT + public: + MouseBox( QWidget * parent); + signals: + void paintevent(QPaintEvent *e); + void mousepressevent(QMouseEvent *e); + void mousemoveevent(QMouseEvent *e); + void mousereleaseevent(QMouseEvent *e); + private: + //QWidget * m_parent; + public: + QPoint pointpressed; + protected: + void paintEvent(QPaintEvent *e); + void mousePressEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + +}; + +class AnnotWindow : public QWidget +{ + Q_OBJECT + public: + AnnotWindow( QWidget * parent, Annotation * annot); + + private: + QFrame *frame; + //QLabel *labelAnnotName; + //QLabel *labelTimeDate; + //QRect rcCloseBtn; + //QRect rcOptionBtn; + //QSizeGrip *resizer; + MouseBox* titleBox; + MouseBox* resizerBox; + MouseBox* btnClose; + MouseBox* btnOption; + QString modTime; + + // QRect titlerc; + // QRect sizegriprc; + + QTextEdit *textEdit; + public: + Annotation* m_annot; + protected: + void paintEvent(QPaintEvent * e); + void resizeEvent ( QResizeEvent * e ); +// void mousePressEvent(QMouseEvent * e); +// void mouseMoveEvent(QMouseEvent * e); + private slots: + void slotTitleMouseMove(QMouseEvent* e); + void slotResizerMouseMove(QMouseEvent* e); + void slotResizerPaint(QPaintEvent* e); + void slotPaintCloseBtn(QPaintEvent* e); + // void slotPaintOptionBtn(QPaintEvent* e); + void slotCloseBtn( QMouseEvent* e); + void slotOptionBtn( QMouseEvent* e); + void slotsaveWindowText(); + +}; +#endif diff --git a/ui/pagepainter.cpp b/ui/pagepainter.cpp index 924ed11a8..a154a4bd6 100644 --- a/ui/pagepainter.cpp +++ b/ui/pagepainter.cpp @@ -457,8 +457,10 @@ void PagePainter::paintPageOnPainter( QPainter * destPainter, const KPDFPage * p painter.setPen( Qt::black );//( NoPen ); //painter.setBrush( bule); painter.drawRect( 0, 0, sz.width()-2, sz.height()-2 ); - painter.drawText(2,sz.height()/2+int(rcf.height()/2),text->inplaceText); - //kDebug()<<"astario: w,h="<inplaceText); + painter.drawText(0,0,sz.width(),sz.height(), + Qt::AlignVCenter|Qt::AlignLeft|Qt::TextWrapAnywhere, + text->inplaceText); painter.end(); QImage scaledImage; scalePixmapOnImage( scaledImage, &pixmap, diff --git a/ui/pageview.cpp b/ui/pageview.cpp index a0852b099..e5d33d8b4 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -56,7 +56,7 @@ #include "pageviewutils.h" #include "pagepainter.h" #include "core/annotations.h" -#include "embeddedannotationdialog.h" +#include "annotwindow.h" //"embeddedannotationdialog.h" #include "annotationpropertiesdialog.h" #include "pageviewannotator.h" #include "core/document.h" @@ -115,7 +115,7 @@ public: // annotations PageViewAnnotator * annotator; //text annotation dialogs list - QList m_annowindows; + QList m_annowindows; // other stuff QTimer * delayResizeTimer; bool dirtyLayout; @@ -215,7 +215,7 @@ PageView::PageView( QWidget *parent, KPDFDocument *document ) PageView::~PageView() { // delete the local storage structure - foreach(EmbeddedAnnotationDialog* tempwnd, d->m_annowindows) + foreach(AnnotWindow* tempwnd, d->m_annowindows) { if(tempwnd) delete tempwnd; @@ -344,8 +344,8 @@ void PageView::setAnnotsWindow(Annotation * annot) if(!annot) return; //find the annot window - EmbeddedAnnotationDialog* existWindow=0; - foreach(EmbeddedAnnotationDialog* tempwnd, d->m_annowindows) + AnnotWindow* existWindow=0; + foreach(AnnotWindow* tempwnd, d->m_annowindows) { if(tempwnd) { @@ -357,7 +357,7 @@ void PageView::setAnnotsWindow(Annotation * annot) } } - if(annot->window.flags & Annotation::Hidden) + /* if(annot->window.flags & Annotation::Hidden) { if(existWindow) { @@ -365,14 +365,15 @@ void PageView::setAnnotsWindow(Annotation * annot) } } else - { + {*/ if(existWindow==0) { - existWindow=new EmbeddedAnnotationDialog(this,annot); + existWindow=new AnnotWindow(this,annot); + d->m_annowindows<show(); - } + //} return; } @@ -1250,10 +1251,10 @@ if (d->document->handleEvent( e ) ) KMenu menu( this ); QAction *popoutWindow=0, *deleteNote=0, *showProperties=0; menu.addTitle( i18n("Annotation")); - if(ann->window.flags & Annotation::Hidden) + // if(ann->window.flags & Annotation::Hidden) popoutWindow = menu.addAction( SmallIconSet("comment"), i18n( "&Open Pop-up Note" ) ); - else - popoutWindow = menu.addAction( SmallIconSet("comment"), i18n( "&Close Pop-up Note" ) ); + // else + // popoutWindow = menu.addAction( SmallIconSet("comment"), i18n( "&Close Pop-up Note" ) ); deleteNote = menu.addAction( SmallIconSet("remove"), i18n( "&Delete" ) ); showProperties = menu.addAction( SmallIconSet("thumbnail"), i18n( "&Properties..." ) ); @@ -1264,21 +1265,22 @@ if (d->document->handleEvent( e ) ) { if ( choice == popoutWindow) { - if(ann->window.flags & Annotation::Hidden) - { - kDebug()<<"astario: select popoutWindow"<window.flags ^= Annotation::Hidden; + // ann->window.flags ^= Annotation::Hidden; this->setAnnotsWindow(ann); } if(choice==deleteNote) { kDebug()<<"astario: select deleteNote"<m_annowindows) + { + if(ann==annwnd->m_annot) + { + delete annwnd; + break; + } + } d->document->removePageAnnotation(pageItem->page()->number(),ann); kDebug()<<"astario: deleted Note"<boundary=this->rect; + ta->window.summary="TextBox"; } } else if ( typeString == "Text") @@ -317,7 +318,7 @@ class PickPointEngine : public AnnotatorEngine TextAnnotation * ta = new TextAnnotation(); ann = ta; ta->textType = TextAnnotation::Linked; - ta->window.text="This is a text annotation"; + ta->window.text=""; //ta->window.flags &= ~(Annotation::Hidden); ta->textIcon="comment"; double iconhei=0.03; @@ -326,6 +327,7 @@ class PickPointEngine : public AnnotatorEngine rect.right=rect.left+iconhei; rect.bottom=rect.top+iconhei*xscale/yscale; ta->boundary=this->rect; + ta->window.summary="Note"; } // create StampAnnotation from path else if ( typeString == "Stamp" )