Go to the documentation of this file.
28 #include <QLibraryInfo>
31 #include <QMessageBox>
32 #include <QPushButton>
33 #include <QApplication>
34 #include <QDesktopWidget>
43 if ( !
QDir(dir).exists() ) {
46 qWarning(
"Can't create local directory %s!", qPrintable(dir));
51 QFile::ReadUser|QFile::WriteUser|QFile::ExeUser);
53 qWarning(
"Can't set permissions to local config directory `%s' !", qPrintable(dir));
68 for (k = 0; k < qitems.
size(); ++k) {
70 if (interestQueryItems.
isEmpty() || interestQueryItems.
contains(p.first))
71 map[p.first] = p.second;
82 klfDbg(
": 1="<<url1<<
"; 2="<<url2<<
"; interestflags="<<interestFlags<<
"; int.q.i="
83 <<interestQueryItems ) ;
84 uint compareflags = 0x00;
86 Qt::CaseSensitivity queryItemValsCS = Qt::CaseSensitive;
88 queryItemValsCS = Qt::CaseInsensitive;
98 klfDbg(
" after q-i-stripping: u1="<<u1<<
"; u2="<<u2 ) ;
103 qitems_map1 = klf_url_query_items_map(url1, interestQueryItems);
104 qitems_map2 = klf_url_query_items_map(url2, interestQueryItems);
109 if (u1 == u2 && qitems_map1 == qitems_map2)
135 klfDbg(
"... and the result is compareflags="<<compareflags ) ;
154 uint matchType = flags & 0x0F;
155 Qt::CaseSensitivity cs = (flags & Qt::MatchCaseSensitive)
157 : Qt::CaseInsensitive;
159 const QVariant& v = testForHitCandidateValue;
162 if (matchType == Qt::MatchExactly)
163 return (queryValue == v);
169 case Qt::MatchRegExp:
171 case Qt::MatchWildcard:
173 case Qt::MatchStartsWith:
175 case Qt::MatchEndsWith:
177 case Qt::MatchFixedString:
179 case Qt::MatchContains:
191 int level,
int limit)
199 klfDebugf((
"root=`%s', pathlist=`%s', level=%d, limit=%d", qPrintable(root), qPrintable(pathlist.
join(
"\t")),
206 for (k = 0; k < level; ++k) { levelpathlist << newpathlist[k]; }
209 klfDebugf((
"our path = `%s' ...", qPrintable(flpath)));
211 if (flinfo.isDir() && level < pathlist.
size()) {
215 entries = d.entryList(
QStringList()<<pathlist[level], QDir::AllEntries|QDir::System|QDir::Hidden);
216 if (entries.
size()) {
217 klfDebugf((
"got entry list: %s", qPrintable(entries.
join(
"\t"))));
220 for (k = 0; k < (int)entries.
size(); ++k) {
221 newpathlist[level] = entries[k];
222 hitlist += __search_find_test(root, newpathlist, level+1, limit - hitlist.
size());
223 if (limit >= 0 && (
int)hitlist.
size() >= limit)
228 if (flinfo.exists()) {
245 klfDbg(
"looking for "+wildcard_expression) ;
252 static QRegExp driveregexp(
"^[A-Za-z]?:$");
255 root = pathlist[0]+
"/";
258 return __search_find_test(root, pathlist, 0, limit);
265 static const QString PATH = getenv(
"PATH");
275 path = extra_path + pathsep + path;
277 const QStringList paths = path.split(pathsep, QString::KeepEmptyParts);
280 for (k = 0; k < (int)paths.
size(); ++k) {
281 klfDbg(
"searching for "<<programName<<
" in "<<paths[k]) ;
283 klfDbg(
"\t...resulting in hits = "<<hits) ;
284 for (j = 0; j < (int)hits.
size(); ++j) {
286 klfDbg(
"\tFound definitive (executable) hit at "+hits[j]) ;
291 return QString::null;
304 for (k = 0; k < (int)paths.
size(); ++k) {
305 klfDbg(
"searching for "<<fname<<
" in "<<paths[k]) ;
307 klfDbg(
"\t...resulting in hits = "<<hits) ;
308 if (hits.
size() > 0) {
309 klfDbg(
"\t...returning "<<hits[0]);
313 return QString::null;
323 klfDbg(
"path="<<path<<
"; reference="<<ref) ;
353 klfDbg(
"reference is "<<ref) ;
356 klfDbg(
"result = " << result) ;
369 for (k = 0; k < env.
size(); ++k) {
370 if (env[k].startsWith(vareq)) {
384 for (k = 0; k < env->
size(); ++k) {
386 env->operator[](k) = vareq+value;
407 list << it.key() +
"=" + it.
value();
418 klfWarning(
"Line "<<s<<
" is not an environment variable setting.") ;
432 if (!parse_env_line(s, &var, &val))
435 klfWarning(
"Line "<<s<<
" will overwrite previous value of variable "<<var) ;
448 if (!parse_env_line(s, &var, &val))
488 if (items.
size() >= 2) {
489 if (items[0].isEmpty() && items[1].isEmpty())
531 klfWarning(
"No or unknown action specified! action="<<action) ;
538 for (k = 0; k < newitems.
size(); ++k) {
539 if (newitems2.
contains(newitems[k]))
541 newitems2.
append(newitems[k]);
543 newitems = newitems2;
556 const QString& var, uint action)
564 const QString& var, uint action)
576 QRegExp rx(
"\\$(?:(\\$|(?:[A-Za-z0-9_]+))|\\{([A-Za-z0-9_]+)\\})");
578 while ( (i = rx.indexIn(s, i)) != -1 ) {
580 QString envvarname = rx.cap(1);
589 if (recstack.
contains(envvarname)) {
590 klfWarning(
"Recursive definition detected for variable "<<envvarname<<
"!") ;
591 i += rx.matchedLength();
597 const char *svalue = getenv(qPrintable(envvarname));
604 val = __klf_expandenvironmentvariables(val, env,
true,
QStringList()<<recstack<<envvarname) ;
606 klfDbg(
"Replaced value of "<<envvarname<<
" is "<<val) ;
607 s.
replace(i, rx.matchedLength(), val);
617 return __klf_expandenvironmentvariables(expression, env, recursive,
QStringList());
654 for (k = 0; k < targeters.
size(); ++k) {
655 targeters[k]->pTarget = NULL;
670 klfDbg(
"target="<<target) ;
void append(const T &value)
@ KlfEnvPathNoDuplicates
Remove duplicates from the variable.
@ KlfEnvPathReplace
Replace current path items by given ones.
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const
#define klfDebugf(arglist)
print debug stream items
KLF_EXPORT bool klfMatch(const QVariant &testForHitCandidateValue, const QVariant &queryValue, Qt::MatchFlags flags, const QString &queryStringCache)
Generalized value matching.
@ KlfEnvMergeExpandVars
Merge environments by expanding new values according to current environment.
QStringList klfMapToEnvironmentList(const QMap< QString, QString > &map)
convert a map of variable names to values to an environment list
bool contains(const Key &key) const
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
KLF_EXPORT QString klfSearchPath(const QString &programName, const QString &extra_path)
Smart executable searching in a given path list with wildcards.
int removeAll(const T &value)
@ KlfEnvPathAppend
Append given path items to current list.
QStringList systemEnvironment()
bool contains(const QString &str, Qt::CaseSensitivity cs) const
virtual bool setPermissions(Permissions permissions)
QStringList klfGetEnvironmentPath(const QStringList &env, const QString &var)
get the path items of an environment variable (commonly $PATH)
QString klfExpandEnvironmentVariables(const QString &expression, const QStringList &env, bool recursive)
Expands references to environment variables to their values.
bool klfMapIsIncludedIn(const QMap< Key, Value > &a, const QMap< Key, Value > &b, ValCompareFunc cfunc=klfEqualFunc< Value >())
Compares two QMap's for inclusion.
QString applicationDirPath()
KLF_EXPORT void klfSetEnvironmentVariable(QStringList *env, const QString &var, const QString &value)
set the value of a variable in environment variables list, replacing existing definition if any.
@ KlfUrlCompareBaseEqual
Urls have same base URL. Query items are ignored.
QMap< QString, QString > klfEnvironmentListToMap(const QStringList &env)
convert environment list into a map of variable names to values
@ KlfEnvMergeExpandNotRecursive
If we're expanding new environment variables, don't expand them recursively.
@ KlfUrlCompareEqual
Urls are equal. The order of query items may be different, but the same are given with the same value...
QStringList klfSetEnvironmentPath(const QStringList &oldpaths, const QStringList &newpaths, uint action)
set/add path items to a PATH-like environment variable (commonly $PATH)
bool isExecutable() const
#define klfDbg(streamableItems)
print debug stream items
QString fromLocal8Bit(const char *str, int size)
QString absoluteFilePath() const
#define KLF_DEBUG_BLOCK(msg)
Utility to debug the execution of a block.
QString klfGetEnvironmentVariable(const QStringList &env, const QString &var)
returns the value of an environment variable, defined in env.
QList< T > mid(int pos, int length) const
QString toNativeSeparators(const QString &pathName)
#define KLF_PATH_SEP
The character used in the $PATH environment variable to separate different locations.
KLF_EXPORT QStringList klfSearchFind(const QString &wildcard_expression, int limit)
Find files matching a path with wildcards.
bool mkpath(const QString &dirPath) const
QString fromNativeSeparators(const QString &pathName)
@ KlfUrlCompareLessSpecific
Urls have same base URL. All query items in url1 are present in url2 with the same values,...
QString join(const QString &separator) const
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
bool exactMatch(const QString &str) const
QString & replace(int position, int n, QChar after)
KLF_EXPORT uint klfUrlCompare(const QUrl &url1, const QUrl &url2, uint interestFlags, const QStringList &interestQueryItems)
Compares two URLs and returns some flags as to how they differ.
void setQuery(const QString &query, ParsingMode mode)
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
bool startsWith(const T &value) const
#define klfWarning(streamableItems)
QString path(ComponentFormattingOptions options) const
@ klfUrlCompareFlagIgnoreQueryItemValueCase
This is NOT a specific test. It modifies the behavior of klfUrlCompare() by instructing it to compare...
@ KlfEnvPathActionMask
Mask out the requested action.
KLF_EXPORT QString klfUrlLocalFilePath(const QUrl &url)
QString klfJoinEnvironmentPath(const QStringList &paths)
join several paths together to form a PATH-like environment variable value (common for $PATH)
KLF_EXPORT QString klfPrefixedPath(const QString &path_, const QString &ref_)
Returns absolute path to path as seen from reference.
KLF_EXPORT bool klfEnsureDir(const QString &dir)
Ensure existence of a directory.
KLF_EXPORT QStringList klfCurrentEnvironment()
Returns the current system's environment.
@ KlfEnvPathNoAction
Don't take any action, just apply flags.
QStringList klfSplitEnvironmentPath(const QString &value)
split the value of a PATH-like environment variable into paths (common for $PATH)
@ KlfEnvPathPrepend
Prepend given value to list of path items.
void klfMergeEnvironment(QStringList *env, const QStringList &addvars, const QStringList &pathvars, uint actions)
merge two environment definitions
int compare(const QString &other, Qt::CaseSensitivity cs) const
bool contains(QChar ch, Qt::CaseSensitivity cs) const
@ KlfUrlCompareMoreSpecific
Urls have same base URL. All query items in url2 are present in url1 with the same values,...
#define KLF_ASSERT_NOT_NULL(ptr, msg, failaction)
Asserting Non-NULL pointers (NON-FATAL)
virtual void setTarget(KLFTarget *target)
QString mid(int position, int n) const
QList< KLFTargeter * > pTargetOf
QList< QPair< QString, QString > > queryItems(QUrl::ComponentFormattingOptions encoding) const
Generated by doxygen 1.8.20