# A.7. kscribbleview.h

       1 /***************************************************************************
       2                           kscribbleview.h  -  description
       3                              -------------------
       4     begin                : Mon Jan 31 11:05:05 CET 2000
       5     copyright            : (C) 2000 by Ralf Nolden
       6     email                : Ralf.Nolden@post.rwth-aachen.de
       7  ***************************************************************************/
       8
       9 /***************************************************************************
      10  *                                                                         *
      11  *   This program is free software; you can redistribute it and/or modify  *
      12  *   it under the terms of the GNU General Public License as published by  *
      13  *   the Free Software Foundation; either version 2 of the License, or     *
      14  *   (at your option) any later version.                                   *
      15  *                                                                         *
      16  ***************************************************************************/
      17
      18 #ifndef KSCRIBBLEVIEW_H
      19 #define KSCRIBBLEVIEW_H
      20
      21 #ifdef HAVE_CONFIG_H
      22 #include <config.h>
      23 #endif
      24
      25 // include files for Qt
      26 #include <qscrollview.h>
      27 #include <kpixmap.h>
      28
      29 class KScribbleDoc;
      30
      31 /** The KScribbleView class provides the view widget for the document instance connected to it and is displayed
      32  * as a MDI child window in the main view area of the KScribbleApp class instance. The KScribbleApp
      33  * class also has an eventFilter()  method that gets installed on every KScribbleView instance to
      34  * control events of the type QEvent::Close.The document connected to the view instance keeps a list
      35  * of all view that represent the document contents as there can be more than one view. Views get created in
      36  * KScribbleApp::createClient() and automatically added to the list of views.
      37  * The KScribbleView class inherits QWidget as a base. Another possible inheritance besides specialized
      38  + widgets could be QMainWindow so that you can easily set up the main area of your view by setting another view
      39  * as main widget (QMainWindow::setMainWidget() ).
      40  * NOTE: The close event always has to be empty (DON`T CALL QWidget::closeEvent(e) in closeEvent())
      41  * because the installed event filter can only manage a forward implementation. If the QCloseEvent
      42  * is received by the KScribbleView, the overwritten event handler has to do nothing as the eventFilter
      43  * has set accept() or ignore() already. If QWidget::closeEvent() is called again, the default event
      44  * handler will accept the close event and the window gets destroyed even if the installed eventFilter
      45  * has set the event to be ignored.
      46  * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
      47  * @version KDevelop version 1.1 code generation
      48  */
      49 class KScribbleView : public QScrollView
      50 {
      51   Q_OBJECT
      52
      53   friend KScribbleDoc;
      54
      55   public:
      56     /** Constructor for the view
      57       * @param pDoc  your document instance that the view represents. Create a document
      58       * before calling the constructor or connect an already existing document to a new MDI child widget.*/
      59     KScribbleView(KScribbleDoc* pDoc, QWidget* parent, const char *name, int wflags);
      60     /** Destructor for the main view */
      61     ~KScribbleView();
      62     /** returns a pointer to the document connected to the view*/
      63     KScribbleDoc *getDocument() const;
      64     /** gets called to redraw the document contents if it has been modified */
      65     void update(KScribbleView* pSender);
      66     /** contains the implementation for printing functionality and gets called by KScribbleApp::slotFilePrint() */
      67     void print(QPrinter *pPrinter);
      68     /** cuts out a selection */
      69     void cutSelection();
      70     /** copies a selection to the clipboard */
      71     void copySelection();
      72     /** pastes the clipboard contents to a selection that can be inserted into the picture */
      73     void pasteSelection();
      74
      75   protected:
      76
      77     /** overwritten QWidget::closeEvent() to catch closing views. Does nothing, as the closeEvents for
      78     * KScribbleView's are processed by KScribbleApp::eventFilter(), so this overwitten closeEvent is necessary
      79     * and has to be empty. Don't overwrite this method !
      80     */
      81     virtual void closeEvent(QCloseEvent* );
      82     /** overwritten to interpret key events for scrollbars */
      83     virtual void keyPressEvent( QKeyEvent* );
      84     /** changed from mousePressEvent() overwriting QScrollView method */
      85     virtual void viewportMousePressEvent( QMouseEvent* );
      86     /** changed from mouseReleaseEvent() overwriting QScrollView method */
      87     virtual void viewportMouseReleaseEvent( QMouseEvent* );
      88     /** On paste actions inserts the pasted clipboard contents */
      89     virtual void viewportMouseDoubleClickEvent(QMouseEvent* e);
      90     /** changed from mouseMoveEvent() overwriting QScrollView method */
      91     virtual void viewportMouseMoveEvent( QMouseEvent* );
      92     /** changed from resizeEvent() overwriting QScrollView method */
      93 //    virtual void viewportResizeEvent( QResizeEvent* );
      94     /** changed from paintEvent() overwriting QScrollView method */
      95     virtual void viewportPaintEvent( QPaintEvent* );
      96
      97     virtual void viewportDragEnterEvent ( QDragEnterEvent * );
      98
      99     virtual void viewportDragMoveEvent ( QDragMoveEvent * );
     100
     101     virtual void viewportDragLeaveEvent ( QDragLeaveEvent * );
     102
     103     virtual void viewportDropEvent ( QDropEvent * );
     104
     105     /** the document instance */
     106     KScribbleDoc *doc;
     107
     108   private:
     109     KPixmap tmp;
     110     QRect select;
     111     QClipboard *cb;
     112     enum Action{IDLE=0, DRAW, SELECT, PASTE, DRAG} action;
     113 };
     114
     115 #endif // KSCRIBBLEVIEW_H