20#include <KoTemplates.h>
26#include <kdesktopfile.h>
27#include <ksimpleconfig.h>
29#include <tdeversion.h>
30#include <tdeinstance.h>
32#include <kstandarddirs.h>
33#include <kiconloader.h>
34#include <tdeio/netaccess.h>
40KoTemplate::KoTemplate(
const TQString &name,
const TQString &description,
const TQString &file,
41 const TQString &picture,
const TQString &fileName,
const TQString &_measureSystem,
42 bool hidden,
bool touched) :
43 m_name(
name), m_descr(description), m_file(file), m_picture(picture), m_fileName(fileName),
44 m_hidden(hidden), m_touched(touched), m_cached(false), m_measureSystem(_measureSystem)
48const TQPixmap &KoTemplate::loadPicture( TDEInstance* instance ) {
53 if ( m_picture[ 0 ] ==
'/' )
56 TQImage img( m_picture );
58 kdWarning() <<
"Couldn't find icon " << m_picture << endl;
62 const int maxHeightWidth = 128;
63 if (img.width() > maxHeightWidth || img.height() > maxHeightWidth) {
64 img = img.smoothScale( maxHeightWidth, maxHeightWidth, TQImage::ScaleMax );
66 m_pixmap.convertFromImage(img);
69 m_pixmap = instance->iconLoader()->loadIcon( m_picture, TDEIcon::Desktop, 128 );
75KoTemplateGroup::KoTemplateGroup(
const TQString &name,
const TQString &dir,
76 int _sortingWeight,
bool touched) :
77 m_name(
name), m_touched(touched), m_sortingWeight(_sortingWeight)
80 m_templates.setAutoDelete(
true);
83bool KoTemplateGroup::isHidden()
const {
85 TQPtrListIterator<KoTemplate> it(m_templates);
87 while(it.current()!=0L && hidden) {
88 hidden=it.current()->isHidden();
94void KoTemplateGroup::setHidden(
bool hidden)
const {
96 TQPtrListIterator<KoTemplate> it(m_templates);
97 for( ; it.current()!=0L; ++it)
98 it.current()->setHidden(hidden);
102bool KoTemplateGroup::add(KoTemplate *t,
bool force,
bool touch) {
104 KoTemplate *myTemplate=
find(t->name());
106 m_templates.append(t);
110 else if(myTemplate && force) {
112 TQFile::remove( myTemplate->fileName() );
113 TQFile::remove( myTemplate->picture() );
114 TQFile::remove( myTemplate->file() );
115 m_templates.removeRef(myTemplate);
116 m_templates.append(t);
123KoTemplate *KoTemplateGroup::find(
const TQString &name)
const {
125 TQPtrListIterator<KoTemplate> it(m_templates);
126 while(it.current() && it.current()->name()!=name)
132KoTemplateTree::KoTemplateTree(
const TQCString &templateType,
133 TDEInstance *instance,
bool readTree) :
134 m_templateType(templateType), m_instance(instance), m_defaultGroup(0L),
135 m_defaultTemplate(0L) {
137 m_groups.setAutoDelete(
true);
142void KoTemplateTree::readTemplateTree() {
148void KoTemplateTree::writeTemplateTree() {
149 TQString localDir=m_instance->dirs()->saveLocation(m_templateType);
151 for(KoTemplateGroup *group=m_groups.first(); group!=0L; group=m_groups.next()) {
156 for(KoTemplate *t=group->first(); t!=0L && !touched && !group->touched(); t=group->next())
157 touched=t->touched();
159 if(group->touched() || touched) {
161 if(!group->isHidden()) {
163 TDEStandardDirs::makeDir(localDir+group->name());
167 if(group->dirs().count()==1 && !group->dirs().grep(localDir).isEmpty()) {
169 TDEIO::NetAccess::del(group->dirs().first(), 0);
174 TDEStandardDirs::makeDir(localDir+group->name());
178 for(KoTemplate *t=group->first(); t!=0L; t=group->next()) {
181 writeTemplate(t, group, localDir);
183 if(t->isHidden() && t->touched() ) {
185 writeTemplate(t, group, localDir);
186 TQFile::remove(t->file());
187 TQFile::remove(t->picture());
193void KoTemplateTree::add(KoTemplateGroup *g) {
195 KoTemplateGroup *group=
find(g->name());
199 group->addDir(g->dirs().first());
202KoTemplateGroup *KoTemplateTree::find(
const TQString &name)
const {
204 TQPtrListIterator<KoTemplateGroup> it(m_groups);
205 while(it.current() && it.current()->name()!=name)
210void KoTemplateTree::readGroups() {
212 TQStringList dirs = m_instance->dirs()->resourceDirs(m_templateType);
213 for(TQStringList::ConstIterator it=dirs.begin(); it!=dirs.end(); ++it) {
219 dir.setFilter(TQDir::Dirs);
220 TQStringList templateDirs=dir.entryList();
221 for(TQStringList::ConstIterator tdirIt=templateDirs.begin(); tdirIt!=templateDirs.end(); ++tdirIt) {
222 if(*tdirIt==
"." || *tdirIt==
"..")
224 TQDir templateDir(*it+*tdirIt);
225 TQString
name=*tdirIt;
227 int sortingWeight = 1000;
228 if(templateDir.exists(
".directory")) {
229 KSimpleConfig config(templateDir.absPath()+
"/.directory",
true);
230 config.setDesktopGroup();
231 name=config.readEntry(
"Name");
232 defaultTab=config.readEntry(
"X-TDE-DefaultTab");
233 sortingWeight=config.readNumEntry(
"X-TDE-SortingWeight", 1000);
236 KoTemplateGroup *g=
new KoTemplateGroup(name, *it+*tdirIt+TQChar(
'/'), sortingWeight);
238 if(defaultTab==
"true")
244void KoTemplateTree::readTemplates() {
245 TQString dontShow =
"imperial";
247 if(TDEGlobal::locale()->pageSize() == TQPrinter::Letter) {
251 TQPtrListIterator<KoTemplateGroup> groupIt(m_groups);
252 for( ; groupIt.current()!=0L; ++groupIt) {
253 TQStringList dirs=groupIt.current()->dirs();
254 for(TQStringList::ConstIterator it=dirs.begin(); it!=dirs.end(); ++it) {
258 TQStringList files=d.entryList( TQDir::Files | TQDir::Readable, TQDir::Name );
259 for(
unsigned int i=0; i<files.count(); ++i) {
260 TQString filePath = *it + files[i];
264 TQString description;
268 bool defaultTemplate =
false;
269 TQString templatePath;
270 TQString measureSystem;
273 if (KDesktopFile::isDesktopFile(filePath)) {
274 KSimpleConfig config(filePath,
true);
275 config.setDesktopGroup();
276 if (config.readEntry(
"Type")==
"Link") {
277 text=config.readEntry(
"Name");
279 description=config.readEntry(
"Comment");
281 icon=config.readEntry(
"Icon");
283 TQFile::exists(*it+icon))
286 hidden=config.readBoolEntry(
"X-TDE-Hidden",
false);
287 defaultTemplate = config.readBoolEntry(
"X-TDE-DefaultTemplate",
false);
288 measureSystem=config.readEntry(
"X-TDE-MeasureSystem").lower();
291 if(measureSystem == dontShow)
295 templatePath=config.readPathEntry(
"URL");
297 if(templatePath[0]!=
'/') {
298 if(templatePath.left(6)==
"file:/")
299 templatePath=templatePath.right(templatePath.length()-6);
302 templatePath=*it+templatePath;
309 else if ( files[i].right(4) !=
".png" )
315 TQFileInfo fi(filePath);
316 text = fi.baseName();
317 templatePath = filePath;
320 KoTemplate *t=
new KoTemplate(text, description, templatePath, icon, fileName,
321 measureSystem, hidden);
322 groupIt.current()->add(t,
false,
false);
325 if ( defaultTemplate )
326 m_defaultTemplate = t;
332void KoTemplateTree::writeTemplate(KoTemplate *t, KoTemplateGroup *group,
333 const TQString &localDir) {
337 fileName = t->fileName();
339 if ( TQFile::remove(fileName) || !TQFile::exists(fileName) )
341 TQFile::remove( t->name() );
342 TQFile::remove( t->picture() );
347 TQString
const path = localDir + group->name() +
'/';
348 TQString
const name = KoTemplates::stripWhiteSpace( t->name() );
349 fileName = path +
name +
".desktop";
350 if ( t->isHidden() && TQFile::exists(fileName) )
353 while ( TDEIO::NetAccess::exists( fileName,
true, 0 ) )
356 fileName = path + fill +
name +
".desktop";
359 KSimpleConfig config( fileName );
360 config.setDesktopGroup();
361 config.writeEntry(
"Type",
"Link");
362 config.writePathEntry(
"URL", t->file());
363 config.writeEntry(
"Name", t->name());
364 config.writeEntry(
"Icon", t->picture());
365 config.writeEntry(
"X-TDE-Hidden", t->isHidden());
368namespace KoTemplates {
369TQString stripWhiteSpace(
const TQString &
string) {
372 for(
unsigned int i=0; i<
string.length(); ++i) {
373 TQChar tmp(
string[i]);
TDEAction * find(const TQObject *recvr, const char *slot, TDEActionCollection *parent, const char *name=0)
const char * name(StdAction id)