20#include "karambaapp.h"
21#include "dcopinterface_stub.h"
22#include "karambainterface.h"
24#include "themewidget.h"
25#include "kwidgetlistbox.h"
32#ifdef HAVE_TDENEWSTUFF
33 #include "sknewstuff.h"
36#include "superkarambasettings.h"
39#include <tdefiledialog.h>
40#include <kpushbutton.h>
41#include <kstandarddirs.h>
42#include <tdeapplication.h>
43#include <kiconloader.h>
45#include <tqlineedit.h>
49#include <tqcombobox.h>
52#include <kprotocolinfo.h>
54ThemesDlg::ThemesDlg(TQWidget *parent,
const char *name)
55 : ThemesLayout(parent, name)
58#ifdef HAVE_TDENEWSTUFF
63ThemesDlg::~ThemesDlg()
66 saveUserAddedThemes();
67#ifdef HAVE_TDENEWSTUFF
75void ThemesDlg::saveUserAddedThemes()
78 TQStringList t = themes();
79 TQStringList dirs = ksd.findDirs(
"data", TQString(kapp->name()) +
"/themes");
80 TQStringList::Iterator it = t.begin();
86 TQStringList::Iterator jtend( dirs.end() );
87 for(TQStringList::Iterator jt = dirs.begin(); jt != jtend; ++jt)
89 if(TQFileInfo(*it).dir().path() +
"/" == *jt)
100 SuperKarambaSettings::setUserAddedThemes(t);
101 SuperKarambaSettings::writeConfig();
104TQStringList ThemesDlg::themes()
109 for(uint i = 2; i < tableThemes->count(); ++i)
111 w =
static_cast<ThemeWidget*
>(tableThemes->item(i));
113 result.append(w->themeFile()->file());
118void ThemesDlg::populateListbox()
126 tableThemes->clear();
129 item->icon->setPixmap(TDEGlobal::iconLoader()->loadIcon(
"knewstuff",
130 TDEIcon::NoGroup, TDEIcon::SizeHuge));
131 item->setHeaderText(i18n(
"Get New Stuff"));
132 item->setDescriptionText(i18n(
"Download new themes."));
134 item->buttonGo->setText(i18n(
"New Stuff..."));
135#ifdef HAVE_TDENEWSTUFF
136 item->buttonGo->setEnabled(
true);
137 connect(item->buttonGo, TQ_SIGNAL(clicked()),
138 this, TQ_SLOT(getNewStuff()));
140 item->buttonGo->setEnabled(
false);
142 tableThemes->insertItem(item);
145 item->icon->setPixmap(TDEGlobal::iconLoader()->loadIcon(
"ksysguard",
146 TDEIcon::NoGroup, TDEIcon::SizeHuge));
147 item->setHeaderText(i18n(
"Open Local Theme"));
148 item->setDescriptionText(i18n(
"Add local theme to the list."));
149 item->buttonGo->setProperty(
"stdItem", 18);
150 item->buttonGo->setText(i18n(
"Open..."));
151 connect(item->buttonGo, TQ_SIGNAL(clicked()),
152 this, TQ_SLOT(openLocalTheme()));
153 tableThemes->insertItem(item);
155 dirs = ksd.findDirs(
"data", TQString(kapp->name()) +
"/themes");
157 TQStringList::Iterator itend( dirs.end() );
158 for(TQStringList::Iterator it = dirs.begin(); it != itend; ++it )
161 t = dir.entryList(
"*.skz; *.theme");
162 for(TQStringList::Iterator it = t.begin(); it != t.end(); ++it )
165 tableThemes->insertItem(item);
166 item->buttonGo->setText(i18n(
"Uninstall"));
167 connect(item->buttonGo, TQ_SIGNAL(clicked()),
168 this, TQ_SLOT(uninstall()));
171 t = SuperKarambaSettings::userAddedThemes();
172 for(TQStringList::Iterator it = t.begin(); it != t.end(); ++it )
179 tableThemes->insertItem(item);
180 item->buttonGo->setText(i18n(
"Uninstall"));
181 connect(item->buttonGo, TQ_SIGNAL(clicked()),
182 this, TQ_SLOT(uninstall()));
187 tableThemes->setSelected(0);
190void ThemesDlg::addToDesktop()
198 (
new karamba(tf->file(), TQString()))->show();
203void ThemesDlg::openLocalTheme()
205 TQStringList fileNames;
206 fileNames = KFileDialog::getOpenFileNames(
":<themes>",
207 i18n(
"*.theme *.skz|Themes"),
208 this, i18n(
"Open Themes"));
209 for(TQStringList::Iterator it = fileNames.begin(); it != fileNames.end(); ++it)
213 (
new karamba(*it, TQString()))->show();
217void ThemesDlg::getNewStuff()
219#ifdef HAVE_TDENEWSTUFF
220 TDEConfig* config = TDEGlobal::config();
221 config->setGroup(
"TDENewStuff");
222 config->writePathEntry(
"ProvidersUrl",
223 TQString::fromLatin1(
"https://www.trinitydesktop.org/ocs/karamba-providers.xml"));
225 m_newStuffStatus = config->entryMap(
"TDENewStuffStatus").keys();
232 mNewStuff =
new SKNewStuff(
this);
234 mNewStuff->download();
238void ThemesDlg::selectionChanged(
int index)
240 buttonAddToDesktop->setEnabled(index > 1);
242 for(uint i=2; i < tableThemes->count(); ++i)
245 w->showButton(
false);
249 if(themeFile && themeFile->canUninstall())
253int ThemesDlg::themeIndex(TQString file)
256 file = ThemeFile::canonicalFile(file);
258 for(uint i = 2; i < tableThemes->count(); ++i)
260 w =
static_cast<ThemeWidget*
>(tableThemes->item(i));
262 if(w->themeFile()->file() == file)
268void ThemesDlg::addSkzThemeToDialog(
const TQString &file)
270 kdDebug() <<
"addSkzThemeToDialog(): file = " << file << endl;
271 addThemeToList(file);
272 writeNewStuffConfig(file);
275void ThemesDlg::addThemeToDialog(
const KArchiveDirectory *archiveDir,
276 const TQString& destDir)
278 kdDebug() <<
"addThemeToDialog(): destDir = " << destDir << endl;
279 TQStringList entries = archiveDir->entries();
281 TQStringList::Iterator end( entries.end() );
282 for(TQStringList::Iterator it = entries.begin(); it != end; ++it)
284 if(archiveDir->entry(*it)->isDirectory())
286 addThemeToDialog(
static_cast<const KArchiveDirectory*
>(archiveDir->entry(*it)),
287 destDir + *it +
"/");
292 if(fi.extension( FALSE ) ==
"theme")
294 addThemeToList(destDir + *it);
295 writeNewStuffConfig(destDir);
301void ThemesDlg::writeNewStuffConfig(
const TQString &file)
303#ifdef HAVE_TDENEWSTUFF
304 TDEConfig* config = TDEGlobal::config();
305 TQStringList keys = config->entryMap(
"TDENewStuffStatus").keys();
307 for(TQStringList::Iterator it = m_newStuffStatus.begin();
308 it != m_newStuffStatus.end(); ++it)
314 config->setGroup(
"TDENewStuffNames");
315 config->writeEntry(file, keys[0]);
321void ThemesDlg::configSanityCheck()
323#ifdef HAVE_TDENEWSTUFF
324 TDEConfig* config = TDEGlobal::config();
325 TQStringList statusKeys = config->entryMap(
"TDENewStuffStatus").keys();
326 TQStringList nameKeys = config->entryMap(
"TDENewStuffNames").keys();
327 TQStringList removeList;
329 for(TQStringList::Iterator it = statusKeys.begin();
330 it != statusKeys.end(); ++it)
332 TQString keyName(*it);
333 bool removeKey =
true;
334 config->setGroup(
"TDENewStuffNames");
335 for(TQStringList::Iterator it2 = nameKeys.begin();
336 it2 != nameKeys.end(); ++it2)
338 TQString tempName(config->readEntry(*it2));
339 if( tempName.compare(keyName) == 0)
347 kdDebug() <<
"sanityCheck() deleting entry " << keyName << endl;
348 config->setGroup(
"TDENewStuffStatus");
349 config->deleteEntry( keyName );
356int ThemesDlg::addThemeToList(
const TQString &file)
358 kdDebug() <<
"addThemeToList() file: " << file << endl;
359 int i = themeIndex(file);
364 i = tableThemes->insertItem(item);
365 item->buttonGo->setText(i18n(
"Uninstall"));
366 connect(item->buttonGo, TQ_SIGNAL(clicked()),
367 this, TQ_SLOT(uninstall()));
369 tableThemes->setSelected(i);
373int ThemesDlg::addTheme(
const TQString& ,
const TQString &file)
375 int i = addThemeToList(file);
380 result = w->addInstance();
381 karambaApp->buildToolTip();
385void ThemesDlg::removeTheme(
const TQString&,
const TQString& file,
int instance)
387 int i = themeIndex(file);
391 w->removeInstance(instance);
392 karambaApp->buildToolTip();
395void ThemesDlg::search(
const TQString&)
397 tableThemes->showItems(&filter,
this);
400bool ThemesDlg::filter(
int index, TQWidget* widget,
void* data)
405 ThemesDlg* dlg =
static_cast<ThemesDlg*
>(data);
408 if(dlg->comboShow->currentItem() == 1)
409 if(w->instances() == 0)
412 TQString searchText = dlg->editSearch->text().lower();
413 if(searchText.isEmpty())
419 if(w->themeName->text().lower().contains(searchText))
421 if(w->description->text().lower().contains(searchText))
427bool ThemesDlg::isDownloaded(
const TQString& path )
429 kdDebug() <<
"isDownloaded path: " << path << endl;
430 TDEConfig* config = TDEGlobal::config();
431 config->setGroup(
"TDENewStuffNames");
432 return !config->readEntry(path).isEmpty();
435void ThemesDlg::uninstall()
439 KURL trash(
"trash:/");
440 KURL theme(tf->file());
441 TQString tempPath(tf->path());
443 karambaApp->dcopIface()->closeTheme(tf->name());
444 if(!KProtocolInfo::isKnownProtocol(trash))
445 trash = TDEGlobalSettings::trashPath();
447 if(!tf->isZipTheme())
449 kdDebug() <<
"encountered unpacked theme" << endl;
451 if(isDownloaded(tempPath))
453 TQFileInfo remPath(tf->path());
454 TQDir remDir(remPath.dir());
456 kdDebug() <<
"moving " << remDir.path() <<
" to the trash" << endl;
457 TDEIO::move(remDir.path(), trash);
459 tableThemes->removeItem(w);
463 TQPtrList<ThemeWidget> list;
464 for(uint i = 2; i < tableThemes->count(); ++i)
468 if( tempTf->path().compare( tempPath ) == 0 )
470 list.append( tempW );
474 for ( twPtr = list.first(); twPtr; twPtr = list.next() )
476 karambaApp->dcopIface()->closeTheme(twPtr->themeFile()->name());
477 tableThemes->removeItem( twPtr );
479#ifdef HAVE_TDENEWSTUFF
481 TDEConfig* config = TDEGlobal::config();
482 config->setGroup(
"TDENewStuffNames");
483 TQString name = config->readEntry(tempPath);
486 kdDebug() <<
"removing " << tempPath <<
" under TDENewStuffNames from superkarambarc"
488 kapp->config()->deleteEntry(tempPath);
489 config->setGroup(
"TDENewStuffStatus");
490 kdDebug() <<
"removing " << name <<
" under TDENewStuffStatus from superkarambarc"
492 kapp->config()->deleteEntry(name);
493 kapp->config()->sync();
500 kdDebug() <<
"encountered skz theme" << endl;
501 if(isDownloaded(theme.path()))
503 TQFileInfo remPath(theme.path());
504 TQDir remDir(remPath.dir());
505 kdDebug() <<
"moving " << remDir.path() <<
" to the trash" << endl;
506 TDEIO::move(remDir.path(), trash);
508 tableThemes->removeItem(w);
509#ifdef HAVE_TDENEWSTUFF
511 TDEConfig* config = TDEGlobal::config();
512 config->setGroup(
"TDENewStuffNames");
513 TQString name = config->readEntry(theme.path());
516 kdDebug() <<
"removing " << theme.path() <<
" from superkarambarc" << endl;
517 kapp->config()->deleteEntry(theme.path());
518 config->setGroup(
"TDENewStuffStatus");
519 kdDebug() <<
"removing " << name <<
" from superkarambarc" << endl;
520 kapp->config()->deleteEntry(name);
521 kapp->config()->sync();
525 selectionChanged(tableThemes->selected());
528TQStringList ThemesDlg::runningThemes()
533 for(uint i = 2; i < tableThemes->count(); ++i)
535 w =
static_cast<ThemeWidget*
>(tableThemes->item(i));
537 if(w->instances() > 0)
538 list.append(w->themeFile()->name());
543#include "themesdlg.moc"