1 /*************************************************************************** 2 kscribbledoc.cpp - 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 // include files for Qt 19 #include <qdir.h> 20 #include <qfileinfo.h> 21 #include <qwidget.h> 22 23 // include files for KDE 24 #include <klocale.h> 25 #include <kmessagebox.h> 26 #include <kfiledialog.h> 27 28 // application specific includes 29 #include "kscribbledoc.h" 30 #include "kscribble.h" 31 #include "kscribbleview.h" 32 33 34 KScribbleDoc::KScribbleDoc() 35 { 36 pViewList = new QList<KScribbleView>; 37 pViewList->setAutoDelete(false); 38 } 39 40 KScribbleDoc::~KScribbleDoc() 41 { 42 delete pViewList; 43 } 44 45 void KScribbleDoc::addView(KScribbleView *view) 46 { 47 pViewList->append(view); 48 changedViewList(); 49 } 50 51 void KScribbleDoc::removeView(KScribbleView *view) 52 { 53 pViewList->remove(view); 54 if(!pViewList->isEmpty()) 55 changedViewList(); 56 else 57 deleteContents(); 58 } 59 60 void KScribbleDoc::changedViewList(){ 61 62 KScribbleView *w; 63 if((int)pViewList->count() == 1){ 64 w=pViewList->first(); 65 w->setCaption(m_title); 66 } 67 else{ 68 int i; 69 for( i=1,w=pViewList->first(); w!=0; i++, w=pViewList->next()) 70 w->setCaption(QString(m_title+":%1").arg(i)); 71 } 72 } 73 74 bool KScribbleDoc::isLastView() { 75 return ((int) pViewList->count() == 1); 76 } 77 78 79 void KScribbleDoc::updateAllViews(KScribbleView *sender) 80 { 81 KScribbleView *w; 82 for(w=pViewList->first(); w!=0; w=pViewList->next()) 83 { 84 w->update(sender); 85 } 86 87 } 88 89 void KScribbleDoc::setPathName(const QString &&;name) 90 { 91 m_filename=name; 92 m_title=QFileInfo(name).fileName(); 93 } 94 95 const QString&&; KScribbleDoc::pathName() const 96 { 97 return m_filename; 98 } 99 100 void KScribbleDoc::setTitle(const QString &&;title) 101 { 102 m_title=title; 103 } 104 105 const QString &&;KScribbleDoc::title() const 106 { 107 return m_title; 108 } 109 110 111 void KScribbleDoc::closeDocument() 112 { 113 KScribbleView *w; 114 if(!isLastView()) 115 { 116 for(w=pViewList->first(); w!=0; w=pViewList->next()) 117 { 118 if(!w->close()) 119 break; 120 } 121 } 122 if(isLastView()) 123 { 124 w=pViewList->first(); 125 w->close(); 126 } 127 } 128 129 bool KScribbleDoc::newDocument() 130 { 131 ///////////////////////////////////////////////// 132 // TODO: Add your document initialization code here 133 size=QSize(300,200 ); 134 pen=QPen( Qt::black, 3 ); 135 polyline=QPointArray(3); 136 buffer.resize(size); 137 buffer.fill( Qt::white ); 138 ///////////////////////////////////////////////// 139 modified=false; 140 return true; 141 } 142 143 bool KScribbleDoc::openDocument(const QString &&;filename, const char *format /*=0*/) 144 { 145 146 QFile f( filename ); 147 // if ( !f.open( IO_ReadOnly ) ) 148 // return false; 149 ///////////////////////////////////////////////// 150 // TODO: Add your document opening code here 151 if(!buffer.load( filename, format )) 152 return false; 153 size=buffer.size(); 154 ///////////////////////////////////////////////// 155 // f.close(); 156 157 modified=false; 158 m_filename=filename; 159 m_title=QFileInfo(f).fileName(); 160 return true; 161 } 162 163 bool KScribbleDoc::saveDocument(const QString &&;filename, const char *format /*=0*/) 164 { 165 QFile f( filename ); 166 // if ( !f.open( IO_WriteOnly ) ) 167 // return false; 168 169 ///////////////////////////////////////////////// 170 // TODO: Add your document saving code here 171 if(!buffer.save( filename, format )) 172 return false; 173 ///////////////////////////////////////////////// 174 175 // f.close(); 176 177 modified=false; 178 m_filename=filename; 179 m_title=QFileInfo(f).fileName(); 180 return true; 181 } 182 183 void KScribbleDoc::deleteContents() 184 { 185 ///////////////////////////////////////////////// 186 // TODO: Add implementation to delete the document contents 187 buffer.fill( Qt::white ); 188 ///////////////////////////////////////////////// 189 190 } 191 192 bool KScribbleDoc::canCloseFrame(KScribbleView* pFrame) 193 { 194 if(!isLastView()) 195 return true; 196 197 bool ret=false; 198 if(isModified()) 199 { 200 QString saveName; 201 switch(KMessageBox::warningYesNoCancel(pFrame, i18n("The current file has been modified.\n" 202 "Do you want to save it?"),title())) 203 { 204 case KMessageBox::Yes: 205 if(title().contains(i18n("Untitled"))) 206 { 207 saveName=KFileDialog::getSaveFileName(QDir::currentDirPath(), 208 i18n("*|All files"), pFrame, i18n("Save as...")); 209 if(saveName.isEmpty()) 210 return false; 211 } 212 else 213 saveName=pathName(); 214 215 if(!saveDocument(saveName)) 216 { 217 switch(KMessageBox::warningYesNo(pFrame,i18n("Could not save the current document !\n" 218 "Close anyway ?"), i18n("I/O Error !"))) 219 { 220 case KMessageBox::Yes: 221 ret=true; 222 case KMessageBox::No: 223 ret=false; 224 } 225 } 226 else 227 ret=true; 228 break; 229 case KMessageBox::No: 230 ret=true; 231 break; 232 case KMessageBox::Cancel: 233 default: 234 ret=false; 235 break; 236 } 237 } 238 else 239 ret=true; 240 241 return ret; 242 } 243 244 void KScribbleDoc::editClearAll() 245 { 246 deleteContents(); 247 setModified(); 248 updateAllViews(0); 249 } |