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 |