• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

superkaramba

  • sources
  • kde-4.12
  • kdeutils
  • superkaramba
  • src
karambaapp.cpp
Go to the documentation of this file.
1 /***************************************************************************
2 * Copyright (C) 2003-2004 Adam Geitgey <adam@rootnode.org> *
3 * Copyright (C) 2003 Hans Karlsson <karlsson.h@home.se> *
4 * Copyright (C) 2007 Alexander Wiedenbruch <mail@wiedenbruch.de> *
5 * Copyright (C) 2007 Matt Broadstone <mbroadst@gmail.com> *
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 ***************************************************************************/
12 #include "karambaapp.h"
13 #include "karambaapp.moc"
14 
15 #include "superkarambasettings.h"
16 #include "mainwidget.h"
17 #include "themesdlg.h"
18 #include "karamba.h"
19 #include "superkarambaadaptor.h"
20 #include "karambamanager.h"
21 
22 #include <QDesktopWidget>
23 #include <QGraphicsView>
24 #include <QGraphicsScene>
25 #include <QMenu>
26 #include <QDBusConnection>
27 
28 #include <KUrl>
29 #include <KAction>
30 #include <KMessageBox>
31 #include <KDebug>
32 #include <KCmdLineArgs>
33 #include <KSystemTrayIcon>
34 #include <KHelpMenu>
35 #include <KStandardAction>
36 #include <KActionCollection>
37 #include <KMenu>
38 
39 KarambaApplication::KarambaApplication(Display *display, Qt::HANDLE visual, Qt::HANDLE colormap)
40  : KUniqueApplication(display, visual, colormap),
41  m_themesDialog(0)
42 {
43  connect(KarambaManager::self(), SIGNAL(karambaStarted(QGraphicsItemGroup*)), this, SLOT(karambaStarted(QGraphicsItemGroup*)));
44  connect(KarambaManager::self(), SIGNAL(karambaClosed(QGraphicsItemGroup*)), this, SLOT(karambaClosed(QGraphicsItemGroup*)));
45 
46  new SuperKarambaAdaptor(this);
47  QDBusConnection dbus = QDBusConnection::sessionBus();
48  dbus.registerObject("/SuperKaramba", this);
49 }
50 
51 KarambaApplication::~KarambaApplication()
52 {
53  delete m_themesDialog;
54 }
55 
56 void KarambaApplication::checkCommandLine(KCmdLineArgs *args, QList<KUrl> &lst)
57 {
58  /******
59  * Not a saved session - check for themes given on command line
60  **/
61 
62  if (args->count() > 0) {
63  for (int i = 0; i < (args->count()); i++) {
64  if (!args->arg(i).isEmpty()) {
65  KUrl url = args->url(i);
66  lst.append(url);
67  }
68  }
69  }
70 }
71 
72 void KarambaApplication::startThemes(const QList<KUrl> &lst)
73 {
74  foreach(const KUrl &url, lst) {
75  new Karamba(url);
76  }
77 }
78 
79 void KarambaApplication::karambaStarted(QGraphicsItemGroup *item)
80 {
81  Karamba *k = dynamic_cast<Karamba*>(item);
82  if (!k) {
83  return;
84  }
85 
86  int instance = m_themesDialog->addTheme(k->prettyName(), k->theme().file());
87  k->setInstance(instance);
88 
89  if (!SuperKarambaSettings::showSysTray()) {
90  showKarambaMenuExtension();
91  }
92 
93  buildToolTip();
94 }
95 
96 void KarambaApplication::karambaClosed(QGraphicsItemGroup *item)
97 {
98  Karamba *k = dynamic_cast<Karamba*>(item);
99  if (!k) {
100  return;
101  }
102 
103  m_themesDialog->removeTheme(k->prettyName(), k->theme().file(), k->instance());
104 
105  buildToolTip();
106 }
107 
108 void KarambaApplication::checkPreviousSession(QList<KUrl> &lst)
109 {
110  if (isSessionRestored()) {
111  KSharedConfigPtr config = KGlobal::config();
112  KConfigGroup group(config, "Session");
113  const QList<QString> themePaths = group.readEntry("OpenThemes", QList<QString>());
114  /*
115  KConfig *config = sessionConfig();
116  KConfigGroup group(config, "Session");
117  QList<QString> themePaths = group.readEntry("OpenThemes", QList<QString>());
118  */
119 
120  foreach(const QString &path, themePaths) {
121  lst.append(KUrl(path));
122  }
123  }
124 }
125 
126 int KarambaApplication::newInstance()
127 {
128  KCmdLineArgs *args = 0;
129  QList<KUrl> lst;
130 
131  if (restoringSession()) {
132  checkPreviousSession(lst);
133  } else {
134  args = KCmdLineArgs::parsedArgs();
135  checkCommandLine(args, lst);
136 // args->clear();
137  }
138 
139  if (lst.count() > 0)
140  startThemes(lst);
141  else {
142  if (m_themesDialog)
143  m_themesDialog->show();
144  }
145 
146  if (!KWindowSystem::compositingActive()) {
147  KMessageBox::information(0,
148  i18n("Please enable the desktop effects to get "
149  "full transparency support in SuperKaramba."),
150  QString(),
151  "noTransparencyMessage");
152  }
153 
154  return 0;
155 }
156 
157 void KarambaApplication::buildToolTip()
158 {
159  if (!m_sysTrayIcon || !m_themesDialog)
160  return;
161 
162  QStringList list = m_themesDialog->runningThemes();
163  if (list.isEmpty()) {
164  setToolTip();
165  return;
166  }
167 
168  QString toolTip("<b><center>" + i18n("SuperKaramba") + "</center></b>");
169  toolTip += "<table width=300>";
170 
171  bool firstRun = true;
172  for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) {
173  if (firstRun) {
174  toolTip += "<tr><td align=right>";
175  toolTip += i18np("1 Running Theme:", "%1 Running Themes:", list.count());
176  toolTip += "</td><td align=left>" + (*it) + "</td></tr>";
177  firstRun = false;
178  } else {
179  toolTip += "<tr><td></td><td align=left>" + (*it) + "</td></tr>";
180  }
181  }
182  toolTip += "</table>";
183 
184  setToolTip(toolTip);
185 }
186 
187 void KarambaApplication::setToolTip(const QString &tip)
188 {
189  m_sysTrayIcon->setToolTip(tip);
190 }
191 
192 void KarambaApplication::toggleSystemTray()
193 {
194  //kDebug() ;
195  if (m_sysTrayIcon->isVisible()) {
196  KMessageBox::information(m_themesDialog, i18n("<qt>Hiding the system tray icon will keep SuperKaramba running "
197  "in background. To show it again use the theme menu.</qt>"),
198  i18n("Hiding System Tray Icon"), "hideIcon");
199 
200  m_sysTrayIcon->hide();
201  showKarambaMenuExtension();
202  } else {
203  showKarambaMenuExtension(false);
204 
205  m_sysTrayIcon->show();
206  }
207 
208  SuperKarambaSettings::setShowSysTray(m_sysTrayIcon->isVisible());
209  SuperKarambaSettings::self()->writeConfig();
210 }
211 
212 void KarambaApplication::showKarambaMenuExtension(bool show)
213 {
214  foreach(Karamba *k, KarambaManager::self()->getKarambas()) {
215  if (show && !k->hasMenuExtension()) {
216  KMenu *menu = new KMenu();
217  menu->setTitle("SuperKaramba");
218 
219  menu->addAction(KIcon( QLatin1String( "superkaramba" )),
220  i18n("Show System Tray Icon"), this,
221  SLOT(toggleSystemTray()),
222  Qt::CTRL + Qt::Key_S);
223 
224  menu->addAction(KIcon( QLatin1String( "get-hot-new-stuff" )),
225  i18n("&Manage Themes..."), this,
226  SLOT(showThemesDialog()), Qt::CTRL + Qt::Key_M);
227 
228  menu->addAction(KIcon( QLatin1String( "application-exit" )),
229  i18n("&Quit SuperKaramba"), this,
230  SLOT(quitSuperKaramba()), Qt::CTRL + Qt::Key_Q);
231  k->setMenuExtension(menu);
232  } else if (!show) {
233  k->removeMenuExtension();
234  }
235  }
236 }
237 
238 void KarambaApplication::showThemesDialog(QSystemTrayIcon::ActivationReason reason)
239 {
240  if (reason == QSystemTrayIcon::Context)
241  m_sysTrayIcon->show();
242  else {
243  if (m_themesDialog->isVisible()) {
244  m_themesDialog->hide();
245  } else {
246  m_themesDialog->show();
247  }
248  }
249 }
250 
251 void KarambaApplication::setupSysTray(KAboutData* about)
252 {
253  KAction* action;
254 
255  //Create theme list window.
256  //This will function as the main window for the tray icon
257  m_themesDialog = new ThemesDlg();
258 
259  //Set up systray icon
260  m_sysTrayIcon = new KSystemTrayIcon();
261 
262  QMenu *menu = m_sysTrayIcon->contextMenu();
263  menu->addAction(KIcon( QLatin1String( "superkaramba" )),
264  i18n("Hide System Tray Icon"), this,
265  SLOT(toggleSystemTray()));
266 
267  menu->addSeparator();
268 
269  m_helpMenu = new KHelpMenu(m_themesDialog, about);
270  action = KStandardAction::help(m_helpMenu,
271  SLOT(appHelpActivated()),
272  m_sysTrayIcon->actionCollection());
273 
274  menu->addAction(action);
275 
276  action = KStandardAction::aboutApp(m_helpMenu, SLOT(aboutApplication()),
277  m_sysTrayIcon->actionCollection());
278  menu->addAction(action);
279 
280  action = KStandardAction::aboutKDE(m_helpMenu, SLOT(aboutKDE()),
281  m_sysTrayIcon->actionCollection());
282  menu->addAction(action);
283 
284  m_sysTrayIcon->setIcon(m_sysTrayIcon->loadIcon("superkaramba"));
285 
286  setToolTip();
287 
288  if (SuperKarambaSettings::showSysTray())
289  m_sysTrayIcon->show();
290  else
291  m_sysTrayIcon->hide();
292 
293  connect(m_sysTrayIcon, SIGNAL(quitSelected()),
294  this, SLOT(quitSuperKaramba()));
295  connect(m_sysTrayIcon,
296  SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
297  this, SLOT(showThemesDialog(QSystemTrayIcon::ActivationReason)));
298 }
299 
300 void KarambaApplication::sendDataToTheme(const QString &themeName, const QString &data, bool notify)
301 {
302  if (notify) {
303  themeNotify(themeName, data);
304  } else {
305  setIncomingData(themeName, data);
306  }
307 }
308 
309 //
310 // D-Bus methods
311 //
312 bool KarambaApplication::closeTheme(const QString &themeName)
313 {
314  foreach(Karamba *k, KarambaManager::self()->getKarambas()) {
315  if (k->prettyName() == themeName) {
316  k->closeWidget();
317  return true;
318  }
319  }
320 
321  return false;
322 }
323 
324 
325 void KarambaApplication::hideSystemTray(bool hide)
326 {
327  if (hide && m_sysTrayIcon->isVisible()) {
328  toggleSystemTray();
329  } else if (!hide && !m_sysTrayIcon->isVisible()) {
330  toggleSystemTray();
331  }
332 }
333 
334 void KarambaApplication::openNamedTheme(const QString &file, const QString &themeName, bool subTheme)
335 {
336  Karamba *k = new Karamba(KUrl(file), 0, -1, subTheme);
337  k->setPrettyName(themeName);
338 }
339 
340 void KarambaApplication::openTheme(const QString &file)
341 {
342  new Karamba(KUrl(file));
343 }
344 
345 void KarambaApplication::quitSuperKaramba()
346 {
347  delete KarambaManager::self();
348 
349  if (m_themesDialog) {
350  m_themesDialog->saveUserAddedThemes();
351  }
352 
353  quit();
354 }
355 
356 bool KarambaApplication::setIncomingData(const QString &prettyThemeName, const QString &data)
357 {
358  Karamba *k = KarambaManager::self()->getKarambaByName(prettyThemeName);
359  if (k == 0) {
360  return false;
361  }
362 
363  k->setIncomingData(data);
364 
365  return true;
366 }
367 
368 void KarambaApplication::showThemeDialog()
369 {
370  showThemesDialog();
371 }
372 
373 bool KarambaApplication::themeNotify(const QString &prettyThemeName, const QString &data)
374 {
375  Karamba *k = KarambaManager::self()->getKarambaByName(prettyThemeName);
376  if (k == 0) {
377  return false;
378  }
379 
380  k->notifyTheme(prettyThemeName, data);
381 
382  return true;
383 }
384 
KarambaApplication::showThemeDialog
Q_SCRIPTABLE void showThemeDialog()
Definition: karambaapp.cpp:368
KarambaApplication::openTheme
Q_SCRIPTABLE void openTheme(const QString &file)
Definition: karambaapp.cpp:340
superkarambasettings.h
hide
int hide(long widget)
Definition: misc.cpp:618
KarambaApplication::~KarambaApplication
~KarambaApplication()
Definition: karambaapp.cpp:51
KarambaApplication::KarambaApplication
KarambaApplication(Display *display, Qt::HANDLE visual, Qt::HANDLE colormap)
Definition: karambaapp.cpp:39
KarambaApplication::openNamedTheme
Q_SCRIPTABLE void openNamedTheme(const QString &file, const QString &themeName, bool subTheme)
Definition: karambaapp.cpp:334
ThemeFile::file
const QString & file() const
Definition: themefile.cpp:561
Karamba::prettyName
QString prettyName() const
Definition: karamba.cpp:511
ThemesDlg::saveUserAddedThemes
void saveUserAddedThemes()
Definition: themesdlg.cpp:60
Karamba::removeMenuExtension
void removeMenuExtension()
Definition: karamba.cpp:2127
Karamba::setMenuExtension
void setMenuExtension(KMenu *)
Definition: karamba.cpp:2119
Karamba::hasMenuExtension
bool hasMenuExtension() const
Definition: karamba.cpp:2133
Karamba::notifyTheme
void notifyTheme(const QString &sender, const QString &data)
Definition: karamba.cpp:2190
KarambaManager::getKarambaByName
Karamba * getKarambaByName(const QString &name) const
Definition: karambamanager.cpp:80
ThemesDlg
Definition: themesdlg.h:35
Karamba::theme
const ThemeFile & theme() const
Definition: karamba.cpp:2071
KarambaApplication::quitSuperKaramba
Q_SCRIPTABLE void quitSuperKaramba()
Definition: karambaapp.cpp:345
Karamba
Definition: karamba.h:52
karamba.h
ThemesDlg::addTheme
int addTheme(const QString &appId, const QString &file)
Definition: themesdlg.cpp:345
KarambaApplication::newInstance
int newInstance()
Definition: karambaapp.cpp:126
ThemesDlg::removeTheme
void removeTheme(const QString &appId, const QString &file, int instance)
Definition: themesdlg.cpp:357
Karamba::setPrettyName
void setPrettyName(const QString &prettyThemeName)
Definition: karamba.cpp:516
SuperKarambaSettings::self
static SuperKarambaSettings * self()
Definition: superkarambasettings.cpp:17
karambamanager.h
Karamba::setIncomingData
void setIncomingData(const QString &data)
Definition: karamba.cpp:2185
KarambaManager::self
static KarambaManager * self()
Definition: karambamanager.cpp:47
KarambaApplication::hideSystemTray
Q_SCRIPTABLE void hideSystemTray(bool hide)
Definition: karambaapp.cpp:325
mainwidget.h
KarambaApplication::karambaClosed
void karambaClosed(QGraphicsItemGroup *)
Definition: karambaapp.cpp:96
SuperKarambaSettings::showSysTray
static bool showSysTray()
Get Show system tray icon.
Definition: superkarambasettings.h:30
QGraphicsItemGroup
Karamba::closeWidget
void closeWidget()
Definition: karamba.cpp:1376
Karamba::instance
int instance()
Definition: karamba.cpp:2138
Karamba::setInstance
void setInstance(int instance)
Definition: karamba.cpp:2143
KUniqueApplication
karambaapp.h
KarambaApplication::showThemesDialog
void showThemesDialog(QSystemTrayIcon::ActivationReason reason=QSystemTrayIcon::Unknown)
Definition: karambaapp.cpp:238
SuperKarambaSettings::setShowSysTray
static void setShowSysTray(bool v)
Set Show system tray icon.
Definition: superkarambasettings.h:20
KarambaApplication::closeTheme
Q_SCRIPTABLE bool closeTheme(const QString &prettyThemeName)
Definition: karambaapp.cpp:312
KarambaApplication::setIncomingData
Q_SCRIPTABLE bool setIncomingData(const QString &prettyThemeName, const QString &data)
Definition: karambaapp.cpp:356
KarambaApplication::karambaStarted
void karambaStarted(QGraphicsItemGroup *)
Definition: karambaapp.cpp:79
KarambaApplication::setupSysTray
void setupSysTray(KAboutData *about)
Definition: karambaapp.cpp:251
ThemesDlg::runningThemes
QStringList runningThemes()
Definition: themesdlg.cpp:475
KarambaApplication::themeNotify
Q_SCRIPTABLE bool themeNotify(const QString &prettyThemeName, const QString &data)
Definition: karambaapp.cpp:373
themesdlg.h
show
int show(long widget)
Definition: misc.cpp:600
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:07:19 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

superkaramba

Skip menu "superkaramba"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • kremotecontrol
  • ktimer
  • kwallet
  • superkaramba
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal