/* This file is part of the KDE project Copyright (C) 2000 Werner Trobin This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include KoTemplate::KoTemplate(const TQString &name, const TQString &description, const TQString &file, const TQString &picture, const TQString &fileName, const TQString &_measureSystem, bool hidden, bool touched) : m_name(name), m_descr(description), m_file(file), m_picture(picture), m_fileName(fileName), m_hidden(hidden), m_touched(touched), m_cached(false), m_measureSystem(_measureSystem) { } const TQPixmap &KoTemplate::loadPicture( TDEInstance* instance ) { if(m_cached) return m_pixmap; m_cached=true; if ( m_picture[ 0 ] == '/' ) { // ### TODO: use the class KoPicture instead of TQImage to support non-image pictures TQImage img( m_picture ); if (img.isNull()) { kdWarning() << "Couldn't find icon " << m_picture << endl; m_pixmap=TQPixmap(); return m_pixmap; } const int maxHeightWidth = 128; // ### TODO: some people would surely like to have 128x128 if (img.width() > maxHeightWidth || img.height() > maxHeightWidth) { img = img.smoothScale( maxHeightWidth, maxHeightWidth, TQ_ScaleMax ); } m_pixmap.convertFromImage(img); return m_pixmap; } else { // relative path m_pixmap = instance->iconLoader()->loadIcon( m_picture, KIcon::Desktop, 128 ); return m_pixmap; } } KoTemplateGroup::KoTemplateGroup(const TQString &name, const TQString &dir, int _sortingWeight, bool touched) : m_name(name), m_touched(touched), m_sortingWeight(_sortingWeight) { m_dirs.append(dir); m_templates.setAutoDelete(true); } bool KoTemplateGroup::isHidden() const { TQPtrListIterator it(m_templates); bool hidden=true; while(it.current()!=0L && hidden) { hidden=it.current()->isHidden(); ++it; } return hidden; } void KoTemplateGroup::setHidden(bool hidden) const { TQPtrListIterator it(m_templates); for( ; it.current()!=0L; ++it) it.current()->setHidden(hidden); m_touched=true; } bool KoTemplateGroup::add(KoTemplate *t, bool force, bool touch) { KoTemplate *myTemplate=find(t->name()); if(myTemplate==0L) { m_templates.append(t); m_touched=touch; return true; } else if(myTemplate && force) { //kdDebug() << "removing :" << myTemplate->fileName() << endl; TQFile::remove( myTemplate->fileName() ); TQFile::remove( myTemplate->picture() ); TQFile::remove( myTemplate->file() ); m_templates.removeRef(myTemplate); m_templates.append(t); m_touched=touch; return true; } return false; } KoTemplate *KoTemplateGroup::find(const TQString &name) const { TQPtrListIterator it(m_templates); while(it.current() && it.current()->name()!=name) ++it; return it.current(); } KoTemplateTree::KoTemplateTree(const TQCString &templateType, TDEInstance *instance, bool readTree) : m_templateType(templateType), m_instance(instance), m_defaultGroup(0L), m_defaultTemplate(0L) { m_groups.setAutoDelete(true); if(readTree) readTemplateTree(); } void KoTemplateTree::readTemplateTree() { readGroups(); readTemplates(); } void KoTemplateTree::writeTemplateTree() { TQString localDir=m_instance->dirs()->saveLocation(m_templateType); for(KoTemplateGroup *group=m_groups.first(); group!=0L; group=m_groups.next()) { //kdDebug() << "---------------------------------" << endl; //kdDebug() << "group: " << group->name() << endl; bool touched=false; for(KoTemplate *t=group->first(); t!=0L && !touched && !group->touched(); t=group->next()) touched=t->touched(); if(group->touched() || touched) { //kdDebug() << "touched" << endl; if(!group->isHidden()) { //kdDebug() << "not hidden" << endl; KStandardDirs::makeDir(localDir+group->name()); // create the local group dir } else { //kdDebug() << "hidden" << endl; if(group->dirs().count()==1 && !group->dirs().grep(localDir).isEmpty()) { //kdDebug() << "local only" << endl; KIO::NetAccess::del(group->dirs().first(), 0); //kdDebug() << "removing: " << group->dirs().first() << endl; } else { //kdDebug() << "global" << endl; KStandardDirs::makeDir(localDir+group->name()); } } } for(KoTemplate *t=group->first(); t!=0L; t=group->next()) { if(t->touched()) { //kdDebug() << "++template: " << t->name() << endl; writeTemplate(t, group, localDir); } if(t->isHidden() && t->touched() ) { //kdDebug() << "+++ delete local template ##############" << endl; writeTemplate(t, group, localDir); TQFile::remove(t->file()); TQFile::remove(t->picture()); } } } } void KoTemplateTree::add(KoTemplateGroup *g) { KoTemplateGroup *group=find(g->name()); if(group==0L) m_groups.append(g); else group->addDir(g->dirs().first()); // "...there can be only one..." (Queen) } KoTemplateGroup *KoTemplateTree::find(const TQString &name) const { TQPtrListIterator it(m_groups); while(it.current() && it.current()->name()!=name) ++it; return it.current(); } void KoTemplateTree::readGroups() { TQStringList dirs = m_instance->dirs()->resourceDirs(m_templateType); for(TQStringList::ConstIterator it=dirs.begin(); it!=dirs.end(); ++it) { //kdDebug() << "dir: " << *it << endl; TQDir dir(*it); // avoid the annoying warning if(!dir.exists()) continue; dir.setFilter(TQDir::Dirs); TQStringList templateDirs=dir.entryList(); for(TQStringList::ConstIterator tdirIt=templateDirs.begin(); tdirIt!=templateDirs.end(); ++tdirIt) { if(*tdirIt=="." || *tdirIt=="..") // we don't want to check those dirs :) continue; TQDir templateDir(*it+*tdirIt); TQString name=*tdirIt; TQString defaultTab; int sortingWeight = 1000; if(templateDir.exists(".directory")) { KSimpleConfig config(templateDir.absPath()+"/.directory", true); config.setDesktopGroup(); name=config.readEntry("Name"); defaultTab=config.readEntry("X-TDE-DefaultTab"); sortingWeight=config.readNumEntry("X-TDE-SortingWeight", 1000); //kdDebug() << "name: " << name <pageSize() == TQPrinter::Letter) { dontShow = "metric"; } TQPtrListIterator groupIt(m_groups); for( ; groupIt.current()!=0L; ++groupIt) { TQStringList dirs=groupIt.current()->dirs(); for(TQStringList::ConstIterator it=dirs.begin(); it!=dirs.end(); ++it) { TQDir d(*it); if( !d.exists() ) continue; TQStringList files=d.entryList( TQDir::Files | TQDir::Readable, TQDir::Name ); for(unsigned int i=0; i