# A.5. kscribbledoc.h

       1 /***************************************************************************
       2                           kscribbledoc.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 KSCRIBBLEDOC_H
      19 #define KSCRIBBLEDOC_H
      20
      21 #ifdef HAVE_CONFIG_H
      22 #include <config.h>
      23 #endif
      24
      25 // include files for QT
      26 #include <qobject.h>
      27 #include <qstring.h>
      28 #include <qlist.h>
      29
      30 #include <qsize.h>
      31 #include <qpen.h>
      32 #include <qpoint.h>
      33 //#include <qpixmap.h>
      34 #include <qpointarray.h>
      35
      36 #include <kpixmap.h>
      37
      38
      39 // forward declaration of the KScribble classes
      40 class KScribbleView;
      41
      42 /**  KScribbleDoc provides a document object for a document-view model.
      43   *
      44   * The KScribbleDoc class provides a document object that can be used in conjunction with the classes
      45   * KScribbleApp and KScribbleView to create a document-view model for MDI (Multiple Document Interface)
      46   * KDE 2 applications based on KApplication and KTMainWindow as main classes and QWorkspace as MDI manager widget.
      47   * Thereby, the document object is created by the KScribbleApp instance (and kept in a document list) and contains
      48   * the document structure with the according methods for manipulating the document
      49   * data by KScribbleView objects. Also, KScribbleDoc contains the methods for serialization of the document data
      50   * from and to files.
      51   * @author Source Framework Automatically Generated by KDevelop, (c) The KDevelop Team.
      52   * @version KDevelop version 1.1 code generation
      53   */
      54 class KScribbleDoc : public QObject
      55 {
      56   Q_OBJECT
      57
      58   friend KScribbleView;
      59
      60   public:
      61     /** Constructor for the fileclass of the application */
      62     KScribbleDoc();
      63     /** Destructor for the fileclass of the application */
      64     ~KScribbleDoc();
      65
      66     /** adds a view to the document which represents the document contents. Usually this is your main view. */
      67     void addView(KScribbleView *view);
      68     /** removes a view from the list of currently connected views */
      69     void removeView(KScribbleView *view);
      70     /** gets called if a view is removed or added */
      71     void changedViewList();
      72     /** returns the first view instance */
      73     KScribbleView* firstView(){ return pViewList->first(); };
      74     /** returns true, if the requested view is the last view of the document */
      75     bool isLastView();
      76     /** This method gets called when the user is about to close a frame window. It checks, if more than one view
      77      * is connected to the document (then the frame can be closed), if pFrame is the last view and the document is
      78      * modified, the user gets asked if he wants to save the document.
      79      */
      80     bool canCloseFrame(KScribbleView* pFrame);
      81     /** sets the modified flag for the document after a modifying action on the view connected to the document.*/
      82     void setModified(bool _m=true){ modified=_m; };
      83     /** returns if the document is modified or not. Use this to determine if your document needs
      84      * saving by the user on closing.
      85      */
      86     bool isModified(){ return modified; };
      87     /** deletes the document's contents */
      88     void deleteContents();
      89     /** initializes the document generally */
      90     bool newDocument();
      91     /** closes the acutal document */
      92     void closeDocument();
      93     /** loads the document by filename and format and emits the updateViews() signal */
      94     bool openDocument(const QString &&;filename, const char *format=0);
      95     /** saves the document under filename and format.*/
      96     bool saveDocument(const QString &&;filename, const char *format=0);
      97     /** sets the path to the file connected with the document */
      98     void setPathName(const QString &&;name);
      99     /** returns the pathname of the current document file*/
     100     const QString&&; pathName() const;
     101
     102     /** sets the filename of the document */
     103     void setTitle(const QString &&;title);
     104     /** returns the title of the document */
     105     const QString&&; title() const;
     106     /** get the current Pen */
     107     const QPen currentPen(){ return pen;};
     108     /** returns the pen width */
     109     const int penWidth() { return pen.width(); }
     110     /** returns the pen color */
     111     const QColor penColor(){ return pen.color(); }
     112     /** sets the pen width */
     113     void setPenWidth( int w ){ pen.setWidth( w ); }
     114     /** sets the pen color */
     115     void setPenColor( const QColor &&;c ){ pen.setColor( c ); }
     116     /** sets the pen style by a second toolbar */
     117     void setPenStyle( PenStyle s){ pen.setStyle(s);}
     118     /** clears the document contents */
     119     void editClearAll();
     120
     121     /** get the document size */
     122     const QSize docSize(){ return size;};
     123     /** sets the pixmap contents. Used by KScribbleApp
     124     to create a new document by drop events */
     125     void setPixmap(KPixmap pix) { buffer=pix;};
     126     void resizeDocument(QSize m_size) { size=m_size; };
     127   public slots:
     128     /** calls repaint() on all views connected to the document object and is called by the view by
     129      * which the document has been changed.
     130      * As this view normally repaints itself, it is excluded from the paintEvent.
     131      */
     132     void updateAllViews(KScribbleView *sender);
     133
     134   protected:
     135
     136     QPen pen;
     137     QPointArray polyline;
     138     KPixmap buffer;
     139
     140   private:
     141     /** the modified flag of the current document */
     142     bool modified;
     143     QString m_title;
     144     QString m_filename;
     145     /** the list of the views currently connected to the document */
     146     QList<KScribbleView> *pViewList;
     147     QSize size;
     148 };
     149
     150 #endif // KSCRIBBLEDOC_H