kio
krecentdirs.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <krecentdirs.h>
00029 #include <ksimpleconfig.h>
00030 #include <kstandarddirs.h>
00031 #include <kglobalsettings.h>
00032
00033 #define MAX_DIR_HISTORY 3
00034
00035 static void recentdirs_done(KConfig *config)
00036 {
00037 if (config == KGlobal::config())
00038 {
00039 config->sync();
00040 }
00041 else
00042 {
00043 delete config;
00044 }
00045 }
00046
00047 static KConfig *recentdirs_readList(QString &key, QStringList &result, bool readOnly)
00048 {
00049 KConfig *config;
00050 if ((key.length() < 2) || (key[0] != ':'))
00051 key = ":default";
00052 if (key[1] == ':')
00053 {
00054 key = key.mid(2);
00055 config = new KSimpleConfig(QString::fromLatin1("krecentdirsrc"), readOnly);
00056 }
00057 else
00058 {
00059 key = key.mid(1);
00060 config = KGlobal::config();
00061 config->setGroup(QString::fromLatin1("Recent Dirs"));
00062 }
00063
00064 result=config->readPathListEntry(key);
00065 if (result.isEmpty())
00066 {
00067 result.append(KGlobalSettings::documentPath());
00068 }
00069 return config;
00070 }
00071
00072 QStringList KRecentDirs::list(const QString &fileClass)
00073 {
00074 QString key = fileClass;
00075 QStringList result;
00076 recentdirs_done(recentdirs_readList(key, result, true));
00077 return result;
00078 }
00079
00080 QString KRecentDirs::dir(const QString &fileClass)
00081 {
00082 QStringList result = list(fileClass);
00083 return result[0];
00084 }
00085
00086 void KRecentDirs::add(const QString &fileClass, const QString &directory)
00087 {
00088 QString key = fileClass;
00089 QStringList result;
00090 KConfig *config = recentdirs_readList(key, result, false);
00091
00092 result.remove(directory);
00093 result.prepend(directory);
00094 while(result.count() > MAX_DIR_HISTORY)
00095 result.remove(result.fromLast());
00096 config->writePathEntry(key, result);
00097 recentdirs_done(config);
00098 }
00099