12 #include <tqstringlist.h> 14 #include <tdefiledialog.h> 15 #include <tdecmdlineargs.h> 17 #include <tdelocale.h> 18 #include <tdemessagebox.h> 20 #include <khelpmenu.h> 22 #include <tqtooltip.h> 24 #include "themesdlg.h" 25 #include "karambainterface.h" 26 #include "karambaapp.h" 27 #include "dcopinterface_stub.h" 29 #include "superkarambasettings.h" 30 #include "tqwidgetlist.h" 32 int KarambaApplication::fd = -1;
34 KarambaApplication::KarambaApplication() :
35 m_helpMenu(0), iface(0), themeListWindow(0), dcopIfaceStub(0),
36 karambaList(0), sysTrayIcon(0)
38 iface =
new KarambaIface();
39 karambaList =
new TQObjectList();
41 dcopClient()->registerAs(name());
42 dcopClient()->setDefaultObject(dcopIface()->objId());
45 KarambaApplication::~KarambaApplication()
49 delete themeListWindow;
54 void KarambaApplication::initDcopStub(TQCString app)
57 app = dcopClient()->appId();
58 dcopIfaceStub =
new dcopIface_stub(app, iface->objId());
61 TQString KarambaApplication::getMainKaramba()
63 TQStringList karambas = getKarambas();
64 TQStringList::Iterator it;
66 for (it = karambas.begin(); it != karambas.end(); ++it)
68 if((*it).ascii() == dcopClient()->appId())
70 dcopIface_stub dcop((*it).ascii(), iface->objId());
71 if (dcop.isMainKaramba())
77 bool KarambaApplication::themeExists(TQString pretty_name)
79 TQWidgetList *list = TQApplication::allWidgets();
80 TQWidgetListIt it( *list );
82 while ( (w=it.current()) != 0 )
85 if (TQString(w->name()).startsWith(
"karamba"))
87 karamba* k = (karamba*) w;
88 if (k->getPrettyName() == pretty_name)
96 TQStringList KarambaApplication::getKarambas()
98 QCStringList applst = dcopClient()->registeredApplications();
99 QCStringList::Iterator it;
103 for (it = applst.begin(); (s = *it) != 0; ++it)
105 if (s.left(strlen(name())) == name())
111 void KarambaApplication::checkSuperKarambaDir()
114 TQDir configDir(TQDir::home().absPath() +
"/.superkaramba");
115 if (!configDir.exists())
117 tqWarning(
"~/.superkaramba doesn't exist");
118 if(!configDir.mkdir(TQDir::home().absPath() +
"/.superkaramba"))
120 tqWarning(
"Couldn't create Directory ~/.superkaramba");
124 tqWarning(
"created ~/.superkaramba");
129 void KarambaApplication::setUpSysTray(TDEAboutData* about)
136 themeListWindow =
new ThemesDlg();
139 sysTrayIcon =
new KSystemTray(themeListWindow);
141 TDEPopupMenu *menu = sysTrayIcon->contextMenu();
142 menu->insertItem(SmallIconSet(
"superkaramba"),
143 i18n(
"Hide System Tray Icon"),
this,
144 TQ_SLOT(globalHideSysTray()));
145 menu->insertSeparator();
147 m_helpMenu =
new KHelpMenu(themeListWindow, about);
148 action = KStdAction::help(m_helpMenu, TQ_SLOT(appHelpActivated()),
149 sysTrayIcon->actionCollection());
151 action = KStdAction::aboutApp(m_helpMenu, TQ_SLOT(aboutApplication()),
152 sysTrayIcon->actionCollection());
154 action = KStdAction::aboutKDE(m_helpMenu, TQ_SLOT(aboutKDE()),
155 sysTrayIcon->actionCollection());
158 sysTrayIcon->setPixmap(sysTrayIcon->loadIcon(
"superkaramba"));
161 if(SuperKarambaSettings::showSysTray())
167 TQObject::connect(sysTrayIcon, TQ_SIGNAL(quitSelected()),
168 this, TQ_SLOT(globalQuitSuperKaramba()));
171 void KarambaApplication::showKarambaMenuExtension(
bool show)
177 for (k = karambaList->first(); k; k = karambaList->next())
179 ((karamba*)k)->showMenuExtension();
184 for (k = karambaList->first(); k; k = karambaList->next())
186 ((karamba*)k)->hideMenuExtension();
191 void KarambaApplication::setToolTip(
const TQString &tip)
193 TQToolTip::remove(sysTrayIcon);
195 TQToolTip::add(sysTrayIcon, i18n(
"SuperKaramba"));
197 TQToolTip::add(sysTrayIcon, tip);
200 void KarambaApplication::buildToolTip()
202 if(!sysTrayIcon || !themeListWindow)
205 TQStringList list = themeListWindow->runningThemes();
213 TQString toolTip(
"<b><center>" + i18n(
"SuperKaramba") +
"</center></b>");
214 toolTip +=
"<table width=300>";
216 bool firstRun =
true;
217 for(TQStringList::Iterator it = list.begin(); it != list.end(); ++it )
222 "<tr><td align=right>" +
223 i18n(
"1 Running Theme:",
"%n Running Themes:", list.count()) +
224 "</td><td align=left>" + (*it) +
"</td></tr>";
229 toolTip +=
"<tr><td></td><td align=left>" + (*it) +
"</td></tr>";
233 toolTip +=
"</table>";
238 void KarambaApplication::checkPreviousSession(TDEApplication &app,
244 if (app.isSessionRestored())
246 TDEConfig* config = app.sessionConfig();
247 config->setGroup(
"General Options");
248 TQString restartThemes = config->readEntry(
"OpenThemes");
251 lst = TQStringList::split(TQString(
";"), restartThemes);
255 void KarambaApplication::checkCommandLine(TDECmdLineArgs *args, TQStringList &lst)
260 if(args->count() > 0)
262 for(
int i = 0; i < (args->count()); i++)
264 if( args->arg(i) && *args->arg(i) )
266 KURL url = args->url(i);
268 lst.push_back(url.path());
274 bool KarambaApplication::startThemes(TQStringList &lst)
278 for(TQStringList::Iterator it = lst.begin(); it != lst.end(); ++it )
280 karamba *mainWin = 0;
282 mainWin =
new karamba(*it , TQString());
291 void KarambaApplication::addKaramba(karamba* k,
bool reloading)
293 if(!reloading && karambaApp->dcopStub())
295 int instance = karambaApp->dcopStub()->themeAdded(
296 karambaApp->dcopClient()->appId(), k->theme().file());
297 k->setInstance(instance);
299 karambaList->append(k);
302 void KarambaApplication::deleteKaramba(karamba* k,
bool reloading)
304 if(!reloading && karambaApp->dcopStub())
305 karambaApp->dcopStub()->themeClosed(
306 karambaApp->dcopClient()->appId(), k->theme().file(), k->instance());
307 karambaList->removeRef(k);
310 bool KarambaApplication::hasKaramba(karamba* k)
312 return karambaList->containsRef(k) > 0;
318 bool KarambaApplication::lockKaramba()
320 TQString file = TQDir::home().absPath() +
"/.superkaramba/.lock";
321 mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
323 fd = open(file.ascii(), O_CREAT | O_RDWR | O_TRUNC, mode);
326 tqWarning(
"Open failed in lock.");
330 if(lockf(fd, F_LOCK, 0))
332 tqWarning(
"Lock failed.");
338 void KarambaApplication::unlockKaramba()
342 lockf(fd, F_ULOCK, 0);
349 void KarambaApplication::hideSysTray(
bool hide)
356 KMessageBox::information(0,
357 i18n(
"<qt>Hiding the system tray icon will keep SuperKaramba running " 358 "in background. To show it again use the theme menu.</qt>"),
359 i18n(
"Hiding System Tray Icon"),
"hideIcon");
362 showKarambaMenuExtension();
366 showKarambaMenuExtension(
false);
372 void KarambaApplication::showThemeDialog()
376 themeListWindow->show();
379 void KarambaApplication::quitSuperKaramba()
382 themeListWindow->saveUserAddedThemes();
383 tqApp->closeAllWindows();
387 void KarambaApplication::globalQuitSuperKaramba()
389 TQStringList apps = getKarambas();
390 TQStringList::Iterator it;
392 for (it = apps.begin(); it != apps.end(); ++it)
394 dcopIface_stub dcop((*it).ascii(), dcopIface()->objId());
399 void KarambaApplication::globalShowThemeDialog()
401 TQStringList apps = getKarambas();
402 TQStringList::Iterator it;
404 for (it = apps.begin(); it != apps.end(); ++it)
406 dcopIface_stub dcop((*it).ascii(), dcopIface()->objId());
407 dcop.showThemeDialog();
411 void KarambaApplication::globalHideSysTray(
bool hide)
414 TQStringList apps = getKarambas();
415 TQStringList::Iterator it;
417 SuperKarambaSettings::setShowSysTray(!hide);
418 SuperKarambaSettings::writeConfig();
420 for (it = apps.begin(); it != apps.end(); ++it)
422 dcopIface_stub dcop((*it).ascii(), dcopIface()->objId());
423 dcop.hideSystemTray(hide);
427 #include "karambaapp.moc"