forked from qt-creator/qt-creator
S60: Detect Device SDK from paths if registry entry is missing.
Display the error in a label of the preferences page. Reviewed-by: con
This commit is contained in:
@@ -98,22 +98,56 @@ bool S60Devices::read()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Windows: Get list of paths containing common program data
|
||||||
|
// as pointed to by environment.
|
||||||
|
static QStringList commonProgramFilesPaths()
|
||||||
|
{
|
||||||
|
const QChar pathSep = QLatin1Char(';');
|
||||||
|
QStringList rc;
|
||||||
|
const QByteArray commonX86 = qgetenv("CommonProgramFiles(x86)");
|
||||||
|
if (!commonX86.isEmpty())
|
||||||
|
rc += QString::fromLocal8Bit(commonX86).split(pathSep);
|
||||||
|
const QByteArray common = qgetenv("CommonProgramFiles");
|
||||||
|
if (!common.isEmpty())
|
||||||
|
rc += QString::fromLocal8Bit(common).split(pathSep);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
// Windows EPOC
|
// Windows EPOC
|
||||||
|
|
||||||
|
// Find the "devices.xml" file containing the SDKs
|
||||||
|
static QString devicesXmlFile(QString *errorMessage)
|
||||||
|
{
|
||||||
|
const QString devicesFile = QLatin1String(SYMBIAN_DEVICES_FILE);
|
||||||
|
// Try registry
|
||||||
|
const QSettings settings(QLatin1String(SYMBIAN_SDKS_KEY), QSettings::NativeFormat);
|
||||||
|
const QString devicesRegistryXmlPath = settings.value(QLatin1String(SYMBIAN_PATH_KEY)).toString();
|
||||||
|
if (!devicesRegistryXmlPath.isEmpty())
|
||||||
|
return QDir::cleanPath(devicesRegistryXmlPath + QLatin1Char('/') + devicesFile);
|
||||||
|
// Look up common program data files
|
||||||
|
const QString symbianDir = QLatin1String("/symbian/");
|
||||||
|
foreach(const QString &commonDataDir, commonProgramFilesPaths()) {
|
||||||
|
const QFileInfo fi(commonDataDir + symbianDir + devicesFile);
|
||||||
|
if (fi.isFile())
|
||||||
|
return fi.absoluteFilePath();
|
||||||
|
}
|
||||||
|
// None found...
|
||||||
|
*errorMessage = QString::fromLatin1("The file '%1' containing the device SDK configuration "
|
||||||
|
"could not be found looking at the registry key "
|
||||||
|
"%2\\%3 or the common program data directories.").
|
||||||
|
arg(devicesFile, QLatin1String(SYMBIAN_SDKS_KEY),
|
||||||
|
QLatin1String(SYMBIAN_PATH_KEY));
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
bool S60Devices::readWin()
|
bool S60Devices::readWin()
|
||||||
{
|
{
|
||||||
// Check the windows registry via QSettings for devices.xml path
|
const QString devicesXmlPath = devicesXmlFile(&m_errorString);
|
||||||
QSettings settings(SYMBIAN_SDKS_KEY, QSettings::NativeFormat);
|
if (devicesXmlPath.isEmpty())
|
||||||
QString devicesXmlPath = settings.value(SYMBIAN_PATH_KEY).toString();
|
|
||||||
if (devicesXmlPath.isEmpty()) {
|
|
||||||
m_errorString = "Could not find installed SDKs in registry.";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
devicesXmlPath += QLatin1String("/") + QLatin1String(SYMBIAN_DEVICES_FILE);
|
|
||||||
QFile devicesFile(devicesXmlPath);
|
QFile devicesFile(devicesXmlPath);
|
||||||
if (!devicesFile.open(QIODevice::ReadOnly)) {
|
if (!devicesFile.open(QIODevice::ReadOnly|QIODevice::Text)) {
|
||||||
m_errorString = QString("Could not read devices file at %1.").arg(devicesXmlPath);
|
m_errorString = QString::fromLatin1("Could not open the devices file %1: %2").arg(devicesXmlPath, devicesFile.errorString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QXmlStreamReader xml(&devicesFile);
|
QXmlStreamReader xml(&devicesFile);
|
||||||
@@ -152,10 +186,10 @@ bool S60Devices::readWin()
|
|||||||
}
|
}
|
||||||
devicesFile.close();
|
devicesFile.close();
|
||||||
if (xml.hasError()) {
|
if (xml.hasError()) {
|
||||||
m_errorString = xml.errorString();
|
m_errorString = QString::fromLatin1("Syntax error in devices file %1: %2").
|
||||||
|
arg(devicesXmlPath, xml.errorString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -72,7 +72,25 @@ void S60DevicesWidget::updateDevicesList()
|
|||||||
item->setToolTip(1, tooltip);
|
item->setToolTip(1, tooltip);
|
||||||
m_ui->list->addTopLevelItem(item);
|
m_ui->list->addTopLevelItem(item);
|
||||||
}
|
}
|
||||||
|
const QString errorString = m_devices->errorString();
|
||||||
|
if (errorString.isEmpty()) {
|
||||||
|
clearErrorLabel();
|
||||||
|
} else {
|
||||||
|
setErrorLabel(errorString);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void S60DevicesWidget::setErrorLabel(const QString& t)
|
||||||
|
{
|
||||||
|
m_ui->errorLabel->setText(t);
|
||||||
|
m_ui->errorLabel->setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void S60DevicesWidget::clearErrorLabel()
|
||||||
|
{
|
||||||
|
m_ui->errorLabel->setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
S60DevicesPreferencePane::S60DevicesPreferencePane(S60Devices *devices, QObject *parent)
|
S60DevicesPreferencePane::S60DevicesPreferencePane(S60Devices *devices, QObject *parent)
|
||||||
: Core::IOptionsPage(parent),
|
: Core::IOptionsPage(parent),
|
||||||
@@ -121,3 +139,5 @@ void S60DevicesPreferencePane::apply()
|
|||||||
void S60DevicesPreferencePane::finish()
|
void S60DevicesPreferencePane::finish()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -56,6 +56,9 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void updateDevicesList();
|
void updateDevicesList();
|
||||||
|
void setErrorLabel(const QString&);
|
||||||
|
void clearErrorLabel();
|
||||||
|
|
||||||
Ui::S60DevicesPreferencePane *m_ui;
|
Ui::S60DevicesPreferencePane *m_ui;
|
||||||
S60Devices *m_devices;
|
S60Devices *m_devices;
|
||||||
};
|
};
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="titleLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Installed S60 SDKs:</string>
|
<string>Installed S60 SDKs:</string>
|
||||||
</property>
|
</property>
|
||||||
@@ -50,6 +50,22 @@
|
|||||||
</column>
|
</column>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="errorLabel">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: red;</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Error</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
|
Reference in New Issue
Block a user