You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/keduca/libkeduca/kgallerydialog.cpp

232 lines
6.9 KiB

/***************************************************************************
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 <kdebug.h>
#include <kconfig.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <kio/netaccess.h>
#include <tqlineedit.h>
#include <tqlistview.h>
#include <tqsplitter.h>
#include <tqdom.h>
#include <tqfileinfo.h>
KGalleryDialog::KGalleryDialog(TQWidget *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) {
TQString tmpFile;
bool returnval=false;
if( KIO::NetAccess::download( url, tmpFile, this ) )
{
returnval=loadFile( tmpFile );
if (returnval) {
_currentURL = url;
kdDebug()<<"... load successful: "<<_currentURL.url()<<endl;
}
KIO::NetAccess::removeTempFile( tmpFile );
}else
kdDebug()<<"FileRead::openFile(): download NOT successful: "<<url.url()<<endl;
return returnval;
}
bool KGalleryDialog::loadFile( const TQString &filename )
{
TQDomDocument doc("document.xml");
TQFile file(filename);
if(!file.open(IO_ReadOnly))
{
return false;
}
doc.setContent( &file );
if( doc.doctype().name() != "educagallery" )
{ return false; }
TQDomElement docElem = doc.documentElement();
TQDomNode n = docElem.firstChild();
kdDebug()<<"... load attributes: "<< docElem.tagName() <<endl;
TQDomNodeList dnList = n.childNodes();
for( unsigned int i = 0; i < dnList.count(); ++i)
{
TQListViewItem *newItem = new TQListViewItem(listDocuments);
TQDomElement serversNode = dnList.item(i).toElement();
kdDebug()<<"... load attributes: "<< serversNode.text() <<endl;
newItem->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();
TQStringList servers;
TQStringList ipservers;
TQStringList::Iterator it_ipservers;
appconfig->setGroup( "kgallerydialog" );
_split->setSizes( appconfig->readIntListEntry("Splitter_size") );
TQSize 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 ( TQStringList::Iterator it_servers = servers.begin(); it_servers != servers.end(); ++it_servers )
{
TQListViewItem *newItem = new TQListViewItem(listServers);
newItem->setText(0,*it_servers);
newItem->setText(1,*it_ipservers);
newItem->setSelected(false);
++it_ipservers;
}
}
/** Write servers lists */
void KGalleryDialog::configWrite()
{
TQStringList servers;
TQStringList ipservers;
KConfig *config = KGlobal::config();
config->setGroup( "kgallerydialog" );
config->writeEntry("Splitter_size", _split->sizes() );
config->writeEntry("Geometry", size() );
config->sync();
config->setGroup("Galleries Servers");
TQListViewItem *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;
}
TQListViewItem *newItem = new TQListViewItem(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( TQDialog::Accepted );
}
/** Select Server */
void KGalleryDialog::slotServerSelected( TQListViewItem *item )
{
if (!item)
return;
KURL url_server = KURL( item->text(1) );
listDocuments->clear();
openFile( url_server );
}
/** Get keduca test url */
KURL KGalleryDialog::getURL()
{
TQListViewItem *item = listDocuments->currentItem();
if (!item)
return KURL();
TQString urlAddress = item->text(5);
if( _currentURL.isLocalFile() && !KURL(urlAddress).isValid() )
{
if( !TQFileInfo(urlAddress).exists() )
urlAddress = _currentURL.directory(false,true) + urlAddress;
kdDebug()<< "Imagen en local" <<endl;
} else if( !_currentURL.isLocalFile() && !KURL(urlAddress).isValid() )
urlAddress = _currentURL.protocol() + "://" + _currentURL.host() + _currentURL.directory(false,true) + urlAddress;
kdDebug()<< urlAddress <<endl;
return KURL( urlAddress );
}
/** Add url */
void KGalleryDialog::putURL(const KURL &urlFile)
{
TQListViewItem *newItem = new TQListViewItem(listServers);
newItem->setText( 1, urlFile.url() );
newItem->setSelected(false);
}