From ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeedu@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- keduca/libkeduca/Makefile.am | 10 + keduca/libkeduca/fileread.cpp | 999 +++++++++++++++++++++++++++++++++ keduca/libkeduca/fileread.h | 274 +++++++++ keduca/libkeduca/kgallerydialog.cpp | 231 ++++++++ keduca/libkeduca/kgallerydialog.h | 70 +++ keduca/libkeduca/kgallerydialogbase.ui | 370 ++++++++++++ 6 files changed, 1954 insertions(+) create mode 100644 keduca/libkeduca/Makefile.am create mode 100644 keduca/libkeduca/fileread.cpp create mode 100644 keduca/libkeduca/fileread.h create mode 100644 keduca/libkeduca/kgallerydialog.cpp create mode 100644 keduca/libkeduca/kgallerydialog.h create mode 100644 keduca/libkeduca/kgallerydialogbase.ui (limited to 'keduca/libkeduca') diff --git a/keduca/libkeduca/Makefile.am b/keduca/libkeduca/Makefile.am new file mode 100644 index 00000000..f3424f00 --- /dev/null +++ b/keduca/libkeduca/Makefile.am @@ -0,0 +1,10 @@ +INCLUDES=$(all_includes) + +noinst_LTLIBRARIES = libkeduca.la +libkeduca_la_SOURCES = kgallerydialogbase.ui fileread.cpp kgallerydialog.cpp +libkeduca_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) +libkeduca_la_LIBADD = -lkdeprint +noinst_HEADERS = fileread.h kgallerydialog.h kgallerydialogbase.h + +METASOURCES=AUTO +include ../../admin/Doxyfile.am diff --git a/keduca/libkeduca/fileread.cpp b/keduca/libkeduca/fileread.cpp new file mode 100644 index 00000000..db8f56cb --- /dev/null +++ b/keduca/libkeduca/fileread.cpp @@ -0,0 +1,999 @@ +/*************************************************************************** + fileread.cpp - description + ------------------- + begin : Wed May 23 2001 + copyright : (C) 2001 by Javier Campos + email : javi@asyris.org +***************************************************************************/ + +/*************************************************************************** + * * + * 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 "fileread.h" + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +FileRead::FileRead( QObject *parent, const char *name ) + :QObject(parent, name), + _changed(false), + _tmpfile(0) +{ +} + +FileRead::~FileRead() +{ +} + +bool FileRead::openFile(const KURL &url) { + QString tmpFile; + bool returnval=false; + if( KIO::NetAccess::download( url, tmpFile, 0 ) ) + { + returnval=loadFile( tmpFile ); + if (returnval) { + _currentURL = url; + kdDebug()<<"... load successful: "<<_currentURL.url()<name() << endl; + + QFile file(filename); + + if(!file.open(IO_ReadOnly)) + { + return false; + } + + if (type->name() == "text/html") // Non-compressed files are recognized as HTML... + { + doc.setContent(&file); + } + else + { + doc.setContent(qUncompress(file.readAll())); + } + + QDomElement docElem = doc.documentElement(); + if( (doc.doctype().isNull()) || (doc.doctype().name() != "educa") ) { + file.close(); + return false; + } + + QDomNode n = docElem.firstChild(); + + QDomNodeList dnList = n.childNodes(); + for( unsigned int i = 0; i < dnList.count(); ++i) + { + // ------------------- INFORMATION BODY ----------------------- + QDomElement element = dnList.item(i).toElement(); + if( element.tagName() == "default" || element.tagName() == "author" ) + { + if( element.tagName() == "default" ) { _header.insert( "image", element.attribute( "image", "default.png" ) ); } + if( element.tagName() == "author" ) { + QDomNodeList AuthordnList = element.childNodes(); + for( unsigned int i = 0; i < AuthordnList.count(); ++i) { + QDomElement authorelement = AuthordnList.item(i).toElement(); + _header.insert( authorelement.tagName(), authorelement.text() ); + } + } + } else { + _header.insert( element.tagName(), element.text() ); + } + } + + n = n.nextSibling(); + + dnList = n.childNodes(); + for( unsigned int i = 0; i < dnList.count(); ++i) + { + insertQuestion(); + // --------------------- QUESTION ATTRIBUTE------------------------ + QDomElement elementNODE = dnList.item(i).toElement(); + setQuestion( QF_TYPE, elementNODE.attribute( "type", "1" ).toInt() ); + setQuestion( QF_PICTURE, elementNODE.attribute( "image", "" ) ); + setQuestion( QF_TIME, elementNODE.attribute( "time", "0" ).toInt() ); + setQuestion( QF_POINTS, elementNODE.attribute( "points", "0" ).toInt() ); + + QDomNodeList quList = elementNODE.childNodes(); + for( unsigned int x = 0; x < quList.count(); ++x) + { + // --------------------- QUESTION AND RESPONSES------------------ + QDomElement element = quList.item(x).toElement(); + if( element.tagName() == "text" ) setQuestion( QF_TEXT, element.text() ); + if( element.tagName() == "true" ) setAnswer( element.text(), true, element.attribute( "points", "0" ).toInt() ); + if( element.tagName() == "false" ) setAnswer( element.text(), false,element.attribute( "points", "0" ).toInt() ); + if( element.tagName() == "tip" ) setQuestion( QF_TIP, element.text() ); + if( element.tagName() == "explain" ) setQuestion( QF_EXPLAIN, element.text() ); + } + } + + n = n.nextSibling(); + + dnList = n.childNodes(); + + if( dnList.count() > 0 ) + { + for( unsigned int i = 0; i < dnList.count(); ++i) + { + insertResult(); + // --------------------- QUESTION ATTRIBUTE------------------------ + QDomElement elementNODE = dnList.item(i).toElement(); + setResult( RS_TEXT, elementNODE.text() ); + setResult( RS_PICTURE, elementNODE.attribute( "image", "" ) ); + setResult( RS_MIN, elementNODE.attribute( "min", "0" ).toInt() ); + setResult( RS_MAX, elementNODE.attribute( "max", "0" ).toInt() ); + } + } + + file.close(); + + refreshData(); + + _changed=false; + return true; +} + +void FileRead::setQuestion( QuestionField field, const QString& text) +{ +// QF_text, QF_picture, QF_type, QF_time, QF_tip, QF_explain + switch( field ) + { + case QF_TEXT: + (*_recordQuestions).text = text; + break; + case QF_PICTURE: + (*_recordQuestions).picture = text; + break; + case QF_TIP: + (*_recordQuestions).tip = text; + break; + case QF_EXPLAIN: + (*_recordQuestions).explain = text; + break; + default: + kdDebug()<<"FileRead::setQuestion(QuestionField field, QString text) called for not handled field value "<unlink(); + delete _tmpfile; + _tmpfile = 0; + } + if( saveFile(_currentURL.path(), copyimages, saveCompressed) ) { + emit completed(); + emit setWindowCaption( _currentURL.prettyURL() ); + return true; + } + } + else + { // Remote file + // We haven't saved yet, or we did but locally - provide a temp file + if ( _tmpfile == 0 ) + { + _tmpfile = new KTempFile; + } + // otherwise, we already had a temp file + if( saveFile(_tmpfile->name(), copyimages, saveCompressed) ) { + // upload the file + KIO::Job * job = KIO::file_copy( KURL::fromPathOrURL( _tmpfile->name() ), _currentURL, -1, true /*overwrite*/ ); + connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotUploadFinished (KIO::Job *) ) ); + return true; + } + } + + // Save local file and upload local file + return false; +} + +bool FileRead::saveFile( const QString &filename, bool copyimages, bool saveCompressed ) +{ + QDomDocument doc("document.xml"); + QTextStream stream; + QString line; + QByteArray data; + QBuffer buffer(data); + QFile file(filename); + QStringList copyJOB; + + stream.setDevice(&buffer); + + if ( (!file.open(IO_WriteOnly)) || (!buffer.open(IO_WriteOnly)) ) + { + return false; + } + /* + stream.setDevice(&file); + + if(!file.open(IO_WriteOnly)) + { + // No puede abrir la base + return false; + } + */ + + QString head( "" ); + doc.setContent( head ); + + QDomElement Root = doc.createElement("Document"); + doc.appendChild( Root ); + + QDomElement NodeInfo = doc.createElement("Info"); + Root.appendChild( NodeInfo ); + + insertXML( doc, NodeInfo, "title", _header["title"] ); + insertXML( doc, NodeInfo, "category", _header["category"] ); + insertXML( doc, NodeInfo, "type", _header["type"] ); + insertXML( doc, NodeInfo, "level", _header["level"] ); + insertXML( doc, NodeInfo, "language", _header["language"] ); + + if( !(_header["image"]).isEmpty() ) + { + QDomElement Nodedefault = doc.createElement("default"); + + if( copyimages ) + { + copyJOB.append( _header["image"] ); + Nodedefault.setAttribute( "image", QFileInfo(_header["image"]).fileName() ); + } else { + Nodedefault.setAttribute( "image", _header["image"]); + } + NodeInfo.appendChild( Nodedefault ); + } + + if( !_header["name"].isEmpty() || !_header["email"].isEmpty() || !_header["www"].isEmpty() ) + { + QDomElement Nodeauthor = doc.createElement("author"); + NodeInfo.appendChild( Nodeauthor ); + if( !_header["name"].isEmpty() ) insertXML( doc, Nodeauthor, "name", _header["name"] ); + if( !_header["email"].isEmpty() ) insertXML( doc, Nodeauthor, "email", _header["email"] ); + if( !_header["www"].isEmpty() ) insertXML( doc, Nodeauthor, "www", _header["www"] ); + } + + QDomElement NodeData = doc.createElement("Data"); + Root.appendChild( NodeData ); + + recordFirst(); + while ( !recordEOF() ) + { + QDomElement question = doc.createElement("question"); + if( !getQuestion( QF_PICTURE ).isEmpty() ) + { + if( copyimages ) + { + copyJOB.append( getQuestion( QF_PICTURE ) ); + question.setAttribute("image", QFileInfo( getQuestion( QF_PICTURE ) ).fileName() ); + } else { + question.setAttribute("image", getQuestion( QF_PICTURE ) ); + } + } + question.setAttribute( "type", getQuestionInt( QF_TYPE ) ); + if( getQuestionInt( QF_POINTS ) > 0 ) question.setAttribute( "points", getQuestion( QF_POINTS ) ); + if( getQuestionInt( QF_TIME ) > 0 ) question.setAttribute( "time", getQuestion( QF_TIME ) ); + insertXML( doc, question, "text", getQuestion( QF_TEXT ) ); + + recordAnswerFirst(); + while( !recordAnswerEOF() ) + { + if( getAnswerValue() ) + { + QDomElement domELEMENT = doc.createElement( "true" ); + if( getAnswerPoints() > 0 ) domELEMENT.setAttribute("points", getAnswerPoints() ); + QDomText DATAelement = doc.createTextNode( getAnswer( AF_TEXT ) ); + question.appendChild( domELEMENT ); + domELEMENT.appendChild( DATAelement ); + } else { +// insertXML( doc, question, "false", getAnswer( AF_text ) ); + QDomElement domELEMENT = doc.createElement( "false" ); + if( getAnswerPoints() > 0 ) domELEMENT.setAttribute("points", getAnswerPoints() ); + QDomText DATAelement = doc.createTextNode( getAnswer( AF_TEXT ) ); + question.appendChild( domELEMENT ); + domELEMENT.appendChild( DATAelement ); + } + recordAnswerNext(); + }; + + if( !getQuestion( QF_TIP ).isEmpty() ) insertXML( doc, question, "tip", getQuestion( QF_TIP ) ); + if( !getQuestion( QF_EXPLAIN ).isEmpty() ) insertXML( doc, question, "explain", getQuestion( QF_EXPLAIN ) ); + + NodeData.appendChild( question ); + recordNext(); + } + + doc.save( stream, 4); + buffer.close(); + if ( saveCompressed ) + file.writeBlock(qCompress(data)); + else + file.writeBlock(data); + file.close(); + + if( copyimages == true && copyJOB.count() > 0 ) + { + KURL::List KurlLIST( copyJOB ); + KIO::CopyJob *copyjob; + + copyjob = KIO::copy( KurlLIST, KURL( _currentURL.directory(false,true) ), true); + } + _changed=false; + return true; + +} + +/** Save results */ +bool FileRead::saveResults( const KURL &url, const QString &results ) +{ + if (url.isValid()) + { + _currentURL = url; + } + kdDebug()<<"FileRead::saveResults() to "<<_currentURL.url()<unlink(); + delete _tmpfile; + _tmpfile = 0; + } + if( saveResults(_currentURL.path(), results) ) { + emit completed(); + emit setWindowCaption( _currentURL.prettyURL() ); + return true; + } + } + else + { // Remote file + // We haven't saved yet, or we did but locally - provide a temp file + if ( _tmpfile == 0 ) + { + _tmpfile = new KTempFile; + } + // otherwise, we already had a temp file + if( saveResults(_tmpfile->name(), results) ) { + // upload the file + KIO::Job * job = KIO::file_copy( KURL::fromPathOrURL( _tmpfile->name() ), _currentURL, -1, true /*overwrite*/ ); + connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotUploadFinished (KIO::Job *) ) ); + return true; + } + } + + // Save local file and upload local file + return false; +} + +bool FileRead::saveResults( const QString &filename, const QString &results ) +{ + QTextStream stream; + QFile file(filename); + QStringList copyJOB; + + stream.setDevice(&file); + + if(!file.open(IO_WriteOnly)) + { + // Cannot open + return false; + } + stream << results; + file.close(); + return true; +} + +/** Insert xml format data */ +void FileRead::insertXML( QDomDocument &doc, QDomElement &parent, const QString &tagName, const QString &data) +{ + QDomElement domELEMENT = doc.createElement( tagName ); + QDomText DATAelement = doc.createTextNode( data ); + + parent.appendChild( domELEMENT ); + domELEMENT.appendChild( DATAelement ); +} + +/** Insert xml data format */ +void FileRead::insertXML( QDomDocument &doc, QDomElement &parent, const QString &data) +{ + QDomText DATAelement = doc.createTextNode( data ); + parent.appendChild( DATAelement ); +} + +/** Get Header */ +QString FileRead::getHeader(const QString &head) +{ + return _header[head]; +} + +/** Set header data */ +void FileRead::setHeader( const QString field, const QString value) +{ + _changed = _header[field]!=value; + + if( (_header[field]).isEmpty() ) + _header.insert( field, value ); + else + _header.replace( field, value ); +} + +/** is Multi Answer */ +bool FileRead::isMultiAnswer() +{ + int numOKanswer = 0; + + recordAnswerFirst(); + + while( !recordAnswerEOF() ) + { + if( (*(*_recordQuestions).recordAnswers).value == true ) numOKanswer++; + recordAnswerNext(); + } + + if( numOKanswer > 1 ) { + return true; + } else { + return false; + } +} + +/** is Multi Answer */ +bool FileRead::isResult() +{ + return _listResults.count() > 0 ? true : false; +} + +void FileRead::slotUploadFinished( KIO::Job * job ) +{ + if (job->error()) { + emit canceled( job->errorString() ); + kdDebug()<< "FileRead::slotUploadFinished(): " <errorString()< remove temp file + { + _tmpfile->unlink(); + delete _tmpfile; + _tmpfile=0; + } + emit setWindowCaption( _currentURL.prettyURL() ); + emit completed(); + } +} + +/** Record at index */ +void FileRead::recordAt( uint index ) +{ + _recordQuestions = _listQuestions.begin(); + for( unsigned int i = 0; i < index; ++i) + ++_recordQuestions; +} + +/** Total questions */ +uint FileRead::getTotalQuestions() +{ + return _totalQuestions; +} + +/** Total points */ +uint FileRead::getTotalPoints() +{ + return _totalPoints; +} + +/** Total time */ +uint FileRead::getTotalTime() +{ + return _totalTime; +} + +/** Refresh stadistical data - Points, number questions and total points */ +void FileRead::refreshData() +{ + _totalTime = 0; + _totalPoints = 0; + _totalQuestions = 0; + + _recordQuestions = _listQuestions.begin(); + while ( _recordQuestions != _listQuestions.end() ) + { + _totalQuestions++; + _totalPoints += (*_recordQuestions).points; + _totalTime += (*_recordQuestions).time; + ++_recordQuestions; + } +} + +#include "fileread.moc" diff --git a/keduca/libkeduca/fileread.h b/keduca/libkeduca/fileread.h new file mode 100644 index 00000000..3dc82a0b --- /dev/null +++ b/keduca/libkeduca/fileread.h @@ -0,0 +1,274 @@ +/*************************************************************************** + fileread.h - description + ------------------- + begin : Wed May 23 2001 + copyright : (C) 2001 by Javier Campos + email : javi@asyris.org +***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef FILEREAD_H +#define FILEREAD_H + +#include + +#include + +// forward declarations +class KTempFile; + +class QFile; + +/**File Read operations. This class read a keduca file an pass the records. + *@author Javier Campos + *@author Klas Kalass + */ + +class FileRead : public QObject { + Q_OBJECT + +public: + FileRead( QObject *parent=0, const char *name=0 ); + virtual ~FileRead(); + enum QuestionField { QF_TEXT, QF_PICTURE, QF_POINTS, QF_TYPE, QF_TIME, QF_TIP, QF_EXPLAIN }; + enum AnswerField { AF_TEXT, AF_VALUE, AF_POINT }; + enum ResultField { RS_TEXT, RS_MIN, RS_MAX, RS_PICTURE }; + + /** Open keduca file. This function can open a remote or local url. */ + bool openFile( const KURL &url ); + /** Set value to questions fields */ + void setQuestion( QuestionField field, const QString& text); + /** Set value to questions fields */ + void setQuestion( QuestionField field, int value ); + /** Set value to results fields */ + void setResult( ResultField field, const QString& text); + /** Set value to results fields */ + void setResult( ResultField field, int value ); + /** Insert an answer field */ + void setAnswer( const QString& text, bool value, int points=0); + /** Go to the Last Record */ + void recordLast(); + /** Go to the First record */ + void recordFirst(); + /** Go to the Last Record */ + void recordResultLast(); + /** Go to the First record */ + void recordResultFirst(); + /** Insert a blank question */ + void insertQuestion(); + /** Insert a blank result */ + void insertResult(); + /** Record Next */ + void recordNext(); + /** Record previous */ + void recordPrevious(); + /** Record Next */ + void recordResultNext(); + /** Record previous */ + void recordResultPrevious(); + /** Go to the Last Record */ + void recordAnswerLast(); + /** Go to the First record */ + void recordAnswerFirst(); + /** Record Next */ + void recordAnswerNext(); + /** Record previous */ + void recordAnswerPrevious(); + /** Move to record */ + void recordAnswerAt( unsigned int index); + /** Record answer count */ + unsigned int recordAnswerCount(); + /** Get the value of the field question */ + QString getQuestion( QuestionField field ); + /** Get the value of the field questions in integer */ + int getQuestionInt( QuestionField field ); + /** Get Answer field */ + QString getAnswer( AnswerField field ); + /** Get answer field */ + int getAnswerPoints(); + /** Get Answer field */ + bool getAnswerValue(); + /** Get the value of the field result */ + QString getResult( ResultField field ); + /** Get the value of the field result */ + int getResultInt( ResultField field ); + /** Returns if this record is a begin of file */ + bool recordBOF(); + /** Returns if this record is a end of file */ + bool recordEOF(); + /** Returns if this record is a begin of file */ + bool recordResultBOF(); + /** Returns if this record is a end of file */ + bool recordResultEOF(); + /** Returns if this record is a begin of file */ + bool recordAnswerBOF(); + /** Returns if this record is a end of file */ + bool recordAnswerEOF(); + /** Clear answers */ + void clearAnswers(); + /** Delete current record */ + void recordDelete(); + /** Swap two variables */ + void recordSwap( bool ); + /** Save file */ + bool saveFile( const KURL &url = KURL(), bool copyimages = false, bool saveCompressed = true ); + /** Save results */ + bool saveResults( const KURL &url, const QString &results ); + /** Get real picture */ + QString getPicture(); + /** Get real picture */ + QPixmap getPicturePixmap(); + /** Set header data */ + void setHeader( const QString field, const QString value); + /** Get Header */ + QString getHeader(const QString &head); + /** is Multi Answer */ + bool isMultiAnswer(); + /** is Result */ + bool isResult(); + KURL const &getCurrentURL()const{return _currentURL;} + /** @return true: The document has changed and should be saved*/ + bool changed() {return _changed;} + /** Record at index */ + void recordAt( uint index ); + /** Refresh stadistical data - Points, number questions and total points */ + void refreshData(); + /* get total questions */ + uint getTotalQuestions(); + /* get total Points */ + uint getTotalPoints(); + /* get total Time */ + uint getTotalTime(); +private: + + // Private attributes + + bool _changed; + /** List of General Variables of the header */ + QMap _header; + + struct Answers + { + QString text; + bool value; + int points; + }; + + struct Results + { + QString text; + QString picture; + int min; + int max; + }; + + struct Questions + { + QString text; + int type; + QString picture; + int time; + int points; + QString tip; + QString explain; + QValueList listAnswers; + QValueListIterator recordAnswers; + }; + + /** List to Data struct */ + QValueList _listQuestions; + QValueListIterator _recordQuestions; + + QValueList _listResults; + QValueListIterator _recordResults; + + /** Returns if the database finds End Of File */ + bool _fileEOF; + /** Returns if the database finds Bof Of File */ + bool _fileBOF; + /** Returns if the database finds End Of File */ + bool _fileAnswerEOF; + /** Returns if the database finds Bof Of File */ + bool _fileAnswerBOF; + /** Returns if the database finds End Of File */ + bool _fileResultEOF; + /** Returns if the database finds Bof Of File */ + bool _fileResultBOF; + /** Current url */ + KURL _currentURL; + /** the temporary file to which the document is saved, NULL if no temporary file is needed */ + KTempFile *_tmpfile; + /** the temporary image file */ + QString _tmpfileImage; + /** Total Questions */ + uint _totalQuestions; + /** Total Time */ + uint _totalTime; + /** Total Points */ + uint _totalPoints; + + // Private methods + + /** Insert xml format data */ + void insertXML( QDomDocument &doc, QDomElement &parent, const QString &tagName, const QString &data); + /** Insert xml data format */ + void insertXML( QDomDocument &doc, QDomElement &parent, const QString &data); + +protected: + /** Open keduca file. This function does the actual work and expects a local filename . */ + bool loadFile( const QString &filename ); + /** Save KEduca file to the file*/ + bool saveFile( const QString &filename, bool copyimages, bool saveCompressed = true ); + /** Save Results file to the file */ + bool saveResults( const QString &filename, const QString &results ); + +protected slots: + void slotUploadFinished( KIO::Job * job ); + +signals: +/* Stolen from kparts */ + + /** + * Emit this when you have completed loading data. + * Hosting apps will want to know when the process of loading the data + * is finished, so that they can access the data when everything is loaded. + **/ + void completed(); + + /** + * Same as the above signal except besides indicating that the data has + * been completely loaded it also informs the host, by setting the flag, + * that a pending action has been generated as a result of completing the + * requested task (loading the data). An example of this is meta-refresh + * tags on HTML pages which result in the page either being refreshed or + * the viewer being redirected to another page. By emitting this signal + * after appropriately setting the flag, the part can tell the host of the + * pending scheduled action inorder to give it a chance to accept or cancel + * that action. + * + * @p pendingAction if true, a pending action exists (ex: a scheduled refresh) + */ + void completed( bool pendingAction ); + + /** + * Emit this if loading is canceled by the user or by an error. + **/ + void canceled( const QString &errMsg ); + + /** + * Emitted by the part, to set the caption of the window(s) + * hosting this part + */ + void setWindowCaption( const QString & caption ); + +}; + +#endif diff --git a/keduca/libkeduca/kgallerydialog.cpp b/keduca/libkeduca/kgallerydialog.cpp new file mode 100644 index 00000000..0ab2d126 --- /dev/null +++ b/keduca/libkeduca/kgallerydialog.cpp @@ -0,0 +1,231 @@ +/*************************************************************************** + kgallerydialog.cpp - description + ------------------- + begin : mar abr 1 2003 + copyright : (C) 2003 by Javier Campos + email : javi@asyris.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 "kgallerydialog.h" +#include "kgallerydialog.moc" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +KGalleryDialog::KGalleryDialog(QWidget *parent, const char *name ) + :KGalleryDialogBase(parent,name) +{ + configRead(); +} + +KGalleryDialog::~KGalleryDialog() +{ +} + +/** Open keduca file. This function can open a remote or local url. */ +bool KGalleryDialog::openFile(const KURL &url) { + QString tmpFile; + bool returnval=false; + if( KIO::NetAccess::download( url, tmpFile, this ) ) + { + returnval=loadFile( tmpFile ); + if (returnval) { + _currentURL = url; + kdDebug()<<"... load successful: "<<_currentURL.url()<setText( 0, serversNode. text() ); + newItem->setText( 1, serversNode.attribute( "language" ) ); + newItem->setText( 2, serversNode.attribute( "category" ) ); + newItem->setText( 3, serversNode.attribute( "type" ) ); + newItem->setText( 4, serversNode.attribute( "author" ) ); + newItem->setText( 5, serversNode.attribute( "address" ) ); + newItem->setSelected(false); + } + + file.close(); + + return true; +} + +/** Read servers */ +void KGalleryDialog::configRead() +{ + KConfig *appconfig = KGlobal::config(); + QStringList servers; + QStringList ipservers; + QStringList::Iterator it_ipservers; + + appconfig->setGroup( "kgallerydialog" ); + _split->setSizes( appconfig->readIntListEntry("Splitter_size") ); + QSize defaultSize(500,400); + resize( appconfig->readSizeEntry("Geometry", &defaultSize ) ); + + appconfig->setGroup("Galleries Servers"); + servers = appconfig->readListEntry ( "Servers" ); + ipservers = appconfig->readListEntry ( "ServersIP" ); + + if( ipservers.count() == 0 ) + { + servers.append( "KEduca Main Server" ); + ipservers.append( "http://keduca.sourceforge.net/gallery/gallery.edugallery" ); + } + + it_ipservers=ipservers.begin(); + for ( QStringList::Iterator it_servers = servers.begin(); it_servers != servers.end(); ++it_servers ) + { + QListViewItem *newItem = new QListViewItem(listServers); + newItem->setText(0,*it_servers); + newItem->setText(1,*it_ipservers); + newItem->setSelected(false); + ++it_ipservers; + } +} + +/** Write servers lists */ +void KGalleryDialog::configWrite() +{ + QStringList servers; + QStringList ipservers; + KConfig *config = KGlobal::config(); + + config->setGroup( "kgallerydialog" ); + config->writeEntry("Splitter_size", _split->sizes() ); + config->writeEntry("Geometry", size() ); + config->sync(); + + config->setGroup("Galleries Servers"); + QListViewItem *item = listServers->firstChild(); + while (item) { + servers.append( item->text(0) ); + ipservers.append( item->text(1) ); + item = item->nextSibling(); + } + config->writeEntry("Servers", servers); + config->writeEntry("ServersIP", ipservers); + + config->sync(); +} + +/** No descriptions */ +void KGalleryDialog::slotButtonAdd() +{ + if( (lineName->text()).isEmpty() || (lineAddress->text()).isEmpty() ) + { + KMessageBox::sorry(this, i18n("You need to specify a server!")); + return; + } + + QListViewItem *newItem = new QListViewItem(listServers); + newItem->setText(0,lineName->text()); + newItem->setText(1,lineAddress->text()); + newItem->setSelected(false); +} + +/** Open selected document */ +void KGalleryDialog::accept() +{ + if (getURL().isEmpty()) + KMessageBox::sorry(this, i18n("You need to specify the file to open!")); + else + { + configWrite(); + KGalleryDialogBase::accept(); + } +// done( QDialog::Accepted ); +} + +/** Select Server */ +void KGalleryDialog::slotServerSelected( QListViewItem *item ) +{ + if (!item) + return; + + KURL url_server = KURL( item->text(1) ); + + listDocuments->clear(); + openFile( url_server ); +} + +/** Get keduca test url */ +KURL KGalleryDialog::getURL() +{ + QListViewItem *item = listDocuments->currentItem(); + + if (!item) + return KURL(); + + QString urlAddress = item->text(5); + + if( _currentURL.isLocalFile() && !KURL(urlAddress).isValid() ) + { + if( !QFileInfo(urlAddress).exists() ) + urlAddress = _currentURL.directory(false,true) + urlAddress; + kdDebug()<< "Imagen en local" <setText( 1, urlFile.url() ); + newItem->setSelected(false); +} diff --git a/keduca/libkeduca/kgallerydialog.h b/keduca/libkeduca/kgallerydialog.h new file mode 100644 index 00000000..a662bde6 --- /dev/null +++ b/keduca/libkeduca/kgallerydialog.h @@ -0,0 +1,70 @@ +/*************************************************************************** + kgallerydialog.h - description + ------------------- + begin : mar abr 1 2003 + copyright : (C) 2003 by javi + email : javi@recibos + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KGALLERYDIALOG_H +#define KGALLERYDIALOG_H + +#include "kgallerydialogbase.h" + +#include +// #include +// #include + +/**Gallery + *@author Javier Campos + */ + +// forward declarations +class KTempFile; + +namespace KIO { class Job; } + +class KGalleryDialog : public KGalleryDialogBase { + Q_OBJECT +public: + KGalleryDialog(QWidget *parent=0, const char *name=0); + ~KGalleryDialog(); + /** Open keduca file. This function can open a remote or local url. */ + bool openFile( const KURL &url ); + /** Get keduca test url */ + KURL getURL(); + /** Add url */ + void putURL(const KURL &urlFile); +protected slots: // Private slots + /** No descriptions */ + void slotButtonAdd(); + /** Open selected document */ + void accept(); + /** Select Server */ + void slotServerSelected( QListViewItem *item ); +protected: + /** Open keduca file. This function does the actual work and expects a local filename . */ + bool loadFile( const QString &filename ); +private: // Private attributes + /** Current url */ + KURL _currentURL; + /** The temporary file to which the document is saved, NULL if no temporary file is needed */ + KTempFile *_tmpfile; +private: // Private methods + /** Read servers */ + void configRead(); + /** Write servers lists */ + void configWrite(); + /** Init gui settings */ +}; + +#endif diff --git a/keduca/libkeduca/kgallerydialogbase.ui b/keduca/libkeduca/kgallerydialogbase.ui new file mode 100644 index 00000000..ccd51e46 --- /dev/null +++ b/keduca/libkeduca/kgallerydialogbase.ui @@ -0,0 +1,370 @@ + +KGalleryDialogBase + + + KGalleryDialogBase + + + + 0 + 0 + 657 + 400 + + + + Gallery + + + TabFocus + + + + unnamed + + + + layout13 + + + + unnamed + + + + layout4 + + + + unnamed + + + + textLabel1_2 + + + Name: + + + AlignVCenter + + + + + lineName + + + + + + + layout3 + + + + unnamed + + + + textLabel2 + + + Address: + + + + + lineAddress + + + + + + + layout12 + + + + unnamed + + + + spacer4 + + + Vertical + + + Preferred + + + + 20 + 10 + + + + + + buttonAdd + + + + 100 + 0 + + + + &Add Server + + + + + + + + + line1 + + + HLine + + + Sunken + + + Horizontal + + + + + _split + + + + 7 + 7 + 0 + 0 + + + + Horizontal + + + + + Servers + + + true + + + true + + + + + Address + + + false + + + true + + + + listServers + + + true + + + true + + + + + + Description + + + true + + + true + + + + + Language + + + true + + + true + + + + + Category + + + true + + + true + + + + + Type + + + true + + + true + + + + + Author + + + true + + + true + + + + + Address + + + true + + + true + + + + listDocuments + + + true + + + true + + + + + + layout2 + + + + unnamed + + + + buttonHelp + + + + 100 + 0 + + + + &Help + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 40 + 20 + + + + + + buttonOpen + + + + 100 + 0 + + + + &Open + + + true + + + + + buttonCancel + + + + 100 + 0 + + + + &Cancel + + + + + + + + + buttonAdd + clicked() + KGalleryDialogBase + slotButtonAdd() + + + buttonCancel + clicked() + KGalleryDialogBase + reject() + + + buttonOpen + clicked() + KGalleryDialogBase + accept() + + + listServers + selectionChanged(QListViewItem*) + KGalleryDialogBase + slotServerSelected(QListViewItem*) + + + + slotButtonAdd() + slotServerSelected(QListViewItem*) + + + -- cgit v1.2.1