diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 4aed2c8219774f5d797760606b8489a92ddc5163 (patch) | |
tree | 3f8c130f7d269626bf6a9447407ef6c35954426a /kicker/kicker/ui/recentapps.cpp | |
download | tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kicker/kicker/ui/recentapps.cpp')
-rw-r--r-- | kicker/kicker/ui/recentapps.cpp | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/kicker/kicker/ui/recentapps.cpp b/kicker/kicker/ui/recentapps.cpp new file mode 100644 index 000000000..54241cb29 --- /dev/null +++ b/kicker/kicker/ui/recentapps.cpp @@ -0,0 +1,172 @@ +/***************************************************************** + +Copyright (c) 2000 the kicker authors. See file AUTHORS. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +******************************************************************/ + +#include <time.h> + +#include <qregexp.h> +#include <qstringlist.h> + +#include <dcopclient.h> +#include <kapplication.h> +#include <kdebug.h> +#include <kglobal.h> +#include <klocale.h> + +#include "kickerSettings.h" + +#include "recentapps.h" + +RecentlyLaunchedApps& RecentlyLaunchedApps::the() +{ + static RecentlyLaunchedApps obj; + return obj; +} + +RecentlyLaunchedApps::RecentlyLaunchedApps() +{ + // set defaults + m_nNumMenuItems = 0; + m_bNeedToUpdate = false; + m_bInitialised = false; + init(); +} + +void RecentlyLaunchedApps::init() +{ + if (m_bInitialised) + { + return; + } + + m_nNumMenuItems = 0; + m_appInfos.clear(); + + configChanged(); + + QStringList recentApps = KickerSettings::recentAppsStat(); + + for (QStringList::ConstIterator it = recentApps.begin(); + it != recentApps.end(); ++it ) + { + QRegExp re( "(\\d*) (\\d*) (.*)" ); + if (re.search(*it) != -1) + { + int nCount = re.cap(1).toInt(); + long lTime = re.cap(2).toLong(); + QString szPath = re.cap(3); + m_appInfos.append(RecentlyLaunchedAppInfo( + szPath, nCount, time_t(lTime))); + } + } + + qHeapSort(m_appInfos); + + m_bInitialised = true; +} + +void RecentlyLaunchedApps::configChanged() +{ + qHeapSort(m_appInfos); +} + +void RecentlyLaunchedApps::save() +{ + QStringList recentApps; + + for (QValueList<RecentlyLaunchedAppInfo>::const_iterator it = + m_appInfos.constBegin(); it != m_appInfos.constEnd(); ++it) + { + recentApps.append(QString("%1 %2 %3").arg((*it).getLaunchCount()) + .arg((*it).getLastLaunchTime()) + .arg((*it).getDesktopPath())); + } + + KickerSettings::setRecentAppsStat(recentApps); + KickerSettings::writeConfig(); +} + +void RecentlyLaunchedApps::appLaunched(const QString& strApp) +{ + // Inform other applications (like the quickstarter applet) + // that an application was started + QByteArray params; + QDataStream stream(params, IO_WriteOnly); + stream << launchDCOPSignalSource() << strApp; + KApplication::kApplication()->dcopClient()->emitDCOPSignal("appLauncher", + "serviceStartedByStorageId(QString,QString)", params); + + for (QValueList<RecentlyLaunchedAppInfo>::iterator it = m_appInfos.begin(); + it != m_appInfos.end(); ++it) + { + if ((*it).getDesktopPath() == strApp) + { + (*it).increaseLaunchCount(); + (*it).setLastLaunchTime(time(0)); + qHeapSort(m_appInfos); + return; + } + } + + m_appInfos.append(RecentlyLaunchedAppInfo(strApp, 1, time(0))); + qHeapSort(m_appInfos); +} + +void RecentlyLaunchedApps::getRecentApps(QStringList& recentApps) +{ + recentApps.clear(); + + int maximumNum = KickerSettings::numVisibleEntries(); + int i = 0; + for (QValueList<RecentlyLaunchedAppInfo>::const_iterator it = + m_appInfos.constBegin(); + it != m_appInfos.constEnd() && i < maximumNum; + ++it, ++i) + { + recentApps.append((*it).getDesktopPath()); + } +} + +void RecentlyLaunchedApps::removeItem( const QString& strName ) +{ + for (QValueList<RecentlyLaunchedAppInfo>::iterator it = m_appInfos.begin(); + it != m_appInfos.end(); ++it) + { + if ((*it).getDesktopPath() == strName) + { + m_appInfos.erase(it); + return; + } + } +} + +void RecentlyLaunchedApps::clearRecentApps() +{ + m_appInfos.clear(); +} + +QString RecentlyLaunchedApps::caption() const +{ + return KickerSettings::recentVsOften() ? + i18n("Recently Used Applications") : + i18n("Most Used Applications"); +} |