Unity 8
 All Classes Functions Properties
paths.h
1 /*
2  * Copyright (C) 2012 Canonical, Ltd.
3  *
4  * Authors:
5  * Ugo Riboni <ugo.riboni@canonical.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; version 3.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef PATHS_H
21 #define PATHS_H
22 
23 // Qt
24 #include <QtCore/QCoreApplication>
25 #include <QtCore/QDir>
26 #include <QtGui/QIcon>
27 #include <QtQml/QQmlEngine>
28 #include <QStandardPaths>
29 
30 inline bool isRunningInstalled() {
31  static bool installed = (QCoreApplication::applicationDirPath() ==
32  QDir(("/usr/bin")).canonicalPath());
33  return installed;
34 }
35 
36 inline QString translationDirectory() {
37  if (isRunningInstalled()) {
38  return QString("/usr/share/locale");
39  } else {
40  return QString("/build/buildd/unity8-7.90+14.10.20140723.4/obj-i686-linux-gnu/po/locale");
41  }
42 }
43 
44 inline QString qmlDirectory() {
45  if (isRunningInstalled()) {
46  return QString("/usr/share/unity8/");
47  } else {
48  return QString("/build/buildd/unity8-7.90+14.10.20140723.4/qml/");
49  }
50 }
51 
52 inline QStringList overrideImportPaths() {
53  QStringList paths;
54  if (!isRunningInstalled()) {
55  paths << QString("/build/buildd/unity8-7.90+14.10.20140723.4/obj-i686-linux-gnu/plugins");
56  }
57  return paths;
58 }
59 
60 inline QStringList nonMirImportPaths() {
61  QStringList paths;
62  if (isRunningInstalled()) {
63  paths << QString("/usr/lib/i386-linux-gnu/unity8/qml/nonmirplugins");
64  } else {
65  paths << QString("/build/buildd/unity8-7.90+14.10.20140723.4/obj-i686-linux-gnu/nonmirplugins");
66  }
67  return paths;
68 }
69 
70 inline QStringList fallbackImportPaths() {
71  QStringList paths;
72  if (isRunningInstalled()) {
73  paths << QString("/usr/lib/i386-linux-gnu/unity8/qml");
74  paths << QString("/usr/lib/i386-linux-gnu/unity8/qml");
75  paths << QString("/usr/lib/i386-linux-gnu/unity8/qml/mocks");
76  } else {
77  paths << QString("/usr/lib/i386-linux-gnu/unity8/qml");
78  paths << QString("/build/buildd/unity8-7.90+14.10.20140723.4/obj-i686-linux-gnu/tests/mocks");
79  }
80  return paths;
81 }
82 
83 inline QStringList shellDataDirs() {
84  QStringList dirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
85  if (!isRunningInstalled()) {
86  if (getenv("UNITY_TEST_ENV")==NULL) {
87  dirs.prepend("/build/buildd/unity8-7.90+14.10.20140723.4/obj-i686-linux-gnu/share");
88  }
89  }
90  else {
91  // append so by default we use xdg files.
92  dirs.append(qmlDirectory());
93  }
94  return dirs;
95 }
96 
97 inline QString sourceDirectory() {
98  return QString("/build/buildd/unity8-7.90+14.10.20140723.4/");
99 }
100 
101 inline void prependImportPaths(QQmlEngine *engine, const QStringList &paths)
102 {
103  QStringList importPathList = engine->importPathList();
104  for (int i = paths.count() -1; i >= 0; i--) {
105  // don't duplicate
106  const QString& path = paths[i];
107  QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
108  if (iter == importPathList.end()) {
109  engine->addImportPath(path);
110  }
111  }
112 }
113 
114 /* When you append and import path to the list of import paths it will be the *last*
115  place where Qt will search for QML modules.
116  The usual QQmlEngine::addImportPath() actually prepends the given path.*/
117 inline void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
118 {
119  QStringList importPathList = engine->importPathList();
120  Q_FOREACH(const QString& path, paths) {
121  // don't duplicate
122  QStringList::iterator iter = qFind(importPathList.begin(), importPathList.end(), path);
123  if (iter == importPathList.end()) {
124  importPathList.append(path);
125  }
126  }
127  engine->setImportPathList(importPathList);
128 }
129 
130 #endif