name());
+ mimeType.setComment(metaData->name);
// If there's a user modification for this mime type, we want to use the
// modified patterns and rule-based matchers. If not, just consider what
@@ -269,7 +267,7 @@ void ManagerProcessor::process(QFutureInterfacepatterns()) {
+ foreach (const QString &pattern, metaData->patterns) {
static const QLatin1String mark("*.");
if (pattern.startsWith(mark)) {
const QString &suffix = pattern.right(pattern.length() - 2);
@@ -360,14 +358,14 @@ QSharedPointer Manager::parseMetadata(const QFileIn
if (reader.readNext() == QXmlStreamReader::StartElement && reader.name() == kLanguage) {
const QXmlStreamAttributes &atts = reader.attributes();
- metaData->setFileName(fileInfo.fileName());
- metaData->setId(fileInfo.absoluteFilePath());
- metaData->setName(atts.value(HighlightDefinitionMetaData::kName).toString());
- metaData->setVersion(atts.value(HighlightDefinitionMetaData::kVersion).toString());
- metaData->setPriority(atts.value(HighlightDefinitionMetaData::kPriority).toString()
- .toInt());
- metaData->setPatterns(atts.value(HighlightDefinitionMetaData::kExtensions)
- .toString().split(kSemiColon, QString::SkipEmptyParts));
+ metaData->fileName = fileInfo.fileName();
+ metaData->id = fileInfo.absoluteFilePath();
+ metaData->name = atts.value(HighlightDefinitionMetaData::kName).toString();
+ metaData->version = atts.value(HighlightDefinitionMetaData::kVersion).toString();
+ metaData->priority = atts.value(HighlightDefinitionMetaData::kPriority).toString()
+ .toInt();
+ metaData->patterns = atts.value(HighlightDefinitionMetaData::kExtensions)
+ .toString().split(kSemiColon, QString::SkipEmptyParts);
QStringList mimeTypes = atts.value(HighlightDefinitionMetaData::kMimeType).
toString().split(kSemiColon, QString::SkipEmptyParts);
@@ -375,10 +373,10 @@ QSharedPointer Manager::parseMetadata(const QFileIn
// There are definitions which do not specify a MIME type, but specify file
// patterns. Creating an artificial MIME type is a workaround.
QString artificialType(kArtificial);
- artificialType.append(metaData->name().trimmed().replace(kSpace, kDash));
+ artificialType.append(metaData->name.trimmed().replace(kSpace, kDash));
mimeTypes.append(artificialType);
}
- metaData->setMimeTypes(mimeTypes);
+ metaData->mimeTypes = mimeTypes;
break;
}
@@ -402,13 +400,13 @@ QList Manager::parseAvailableDefinitionsList(QIODev
const QXmlStreamAttributes &atts = reader.attributes();
HighlightDefinitionMetaData metaData;
- metaData.setName(atts.value(HighlightDefinitionMetaData::kName).toString());
- metaData.setVersion(atts.value(HighlightDefinitionMetaData::kVersion).toString());
+ metaData.name = atts.value(HighlightDefinitionMetaData::kName).toString();
+ metaData.version = atts.value(HighlightDefinitionMetaData::kVersion).toString();
QString url(atts.value(HighlightDefinitionMetaData::kUrl).toString());
- metaData.setUrl(QUrl(url));
+ metaData.url = QUrl(url);
const int slash = url.lastIndexOf(kSlash);
if (slash != -1)
- metaData.setFileName(url.right(url.length() - slash - 1));
+ metaData.fileName = url.right(url.length() - slash - 1);
metaDataList.append(metaData);
}
diff --git a/src/plugins/updateinfo/updateinfo.qbs b/src/plugins/updateinfo/updateinfo.qbs
index 2d305410840..0063247ce5e 100644
--- a/src/plugins/updateinfo/updateinfo.qbs
+++ b/src/plugins/updateinfo/updateinfo.qbs
@@ -5,7 +5,6 @@ import "../QtcPlugin.qbs" as QtcPlugin
QtcPlugin {
name: "UpdateInfo"
- Depends { name: "cpp" }
Depends { name: "Core" }
Depends { name: "Qt"; submodules: ["widgets", "xml", "network"] }
diff --git a/src/plugins/vcsbase/vcsbase.pro b/src/plugins/vcsbase/vcsbase.pro
index 0cfdef3b924..ee0dc3b030f 100644
--- a/src/plugins/vcsbase/vcsbase.pro
+++ b/src/plugins/vcsbase/vcsbase.pro
@@ -71,3 +71,4 @@ FORMS += commonsettingspage.ui \
cleandialog.ui \
submiteditorwidget.ui
+OTHER_FILES += VcsBase.mimetypes.xml
diff --git a/src/plugins/vcsbase/vcsbase.qbs b/src/plugins/vcsbase/vcsbase.qbs
index b5265d7b8cc..97e6a11b64a 100644
--- a/src/plugins/vcsbase/vcsbase.qbs
+++ b/src/plugins/vcsbase/vcsbase.qbs
@@ -9,7 +9,6 @@ QtcPlugin {
Depends { name: "TextEditor" }
Depends { name: "ProjectExplorer" }
Depends { name: "Find" }
- Depends { name: "cpp" }
Depends { name: "Qt.widgets" }
Depends { name: "CppTools" }
Depends { name: "CPlusPlus" }
diff --git a/src/plugins/welcome/welcome.qbs b/src/plugins/welcome/welcome.qbs
index a99fe82ab9b..39bc5b152b5 100644
--- a/src/plugins/welcome/welcome.qbs
+++ b/src/plugins/welcome/welcome.qbs
@@ -9,7 +9,6 @@ QtcPlugin {
Depends { name: "Core" }
Depends { name: "ProjectExplorer" }
- Depends { name: "cpp" }
cpp.includePaths: base.concat("../../shared/scriptwrapper")
files: [
diff --git a/src/qtcreatorplugin.pri b/src/qtcreatorplugin.pri
index ca1c0aa844d..c12c7c417a2 100644
--- a/src/qtcreatorplugin.pri
+++ b/src/qtcreatorplugin.pri
@@ -1,21 +1,24 @@
include($$replace(_PRO_FILE_PWD_, ([^/]+$), \\1/\\1_dependencies.pri))
TARGET = $$QTC_PLUGIN_NAME
+plugin_deps = $$QTC_PLUGIN_DEPENDS
+plugin_recmds = $$QTC_PLUGIN_RECOMMENDS
+
+include(../qtcreator.pri)
+
# for substitution in the .pluginspec
dependencyList = ""
-for(dep, QTC_PLUGIN_DEPENDS) {
+for(dep, plugin_deps) {
include($$PWD/plugins/$$dep/$${dep}_dependencies.pri)
dependencyList += " "
}
-for(dep, QTC_PLUGIN_RECOMMENDS) {
+for(dep, plugin_recmds) {
include($$PWD/plugins/$$dep/$${dep}_dependencies.pri)
dependencyList += " "
}
dependencyList += " "
dependencyList = $$join(dependencyList, $$escape_expand(\\n))
-include(../qtcreator.pri)
-
# use gui precompiled header for plugins by default
isEmpty(PRECOMPILED_HEADER):PRECOMPILED_HEADER = $$PWD/shared/qtcreator_gui_pch.h
diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp
index 8c3baa3fcbe..6e2cd8afcde 100644
--- a/src/shared/proparser/qmakebuiltins.cpp
+++ b/src/shared/proparser/qmakebuiltins.cpp
@@ -1106,11 +1106,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
}
return ReturnFalse;
-#ifdef PROEVALUATOR_FULL
case T_REQUIRES:
+#ifdef PROEVALUATOR_FULL
checkRequirements(args);
- return ReturnFalse; // Another qmake breakage
#endif
+ return ReturnFalse; // Another qmake breakage
case T_EVAL: {
VisitReturn ret = ReturnFalse;
ProFile *pro = m_parser->parsedProBlock(args.join(statics.field_sep),
@@ -1377,14 +1377,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
return (func_t == T_ERROR && !m_cumulative) ? ReturnError : ReturnTrue;
}
-#ifdef PROEVALUATOR_FULL
case T_SYSTEM: {
- if (m_cumulative) // Anything else would be insanity
- return ReturnFalse;
if (args.count() != 1) {
evalError(fL1S("system(exec) requires one argument."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
+ if (m_cumulative) // Anything else would be insanity
+ return ReturnFalse;
#ifndef QT_BOOTSTRAPPED
QProcess proc;
proc.setProcessChannelMode(QProcess::ForwardedChannels);
@@ -1395,8 +1395,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
+ IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
+ QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData()) == 0);
#endif
- }
+#else
+ return ReturnTrue;
#endif
+ }
case T_ISEMPTY: {
if (args.count() != 1) {
evalError(fL1S("isEmpty(var) requires one argument."));
@@ -1423,17 +1425,18 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
return ReturnFalse;
}
-#ifdef PROEVALUATOR_FULL
case T_MKPATH: {
if (args.count() != 1) {
evalError(fL1S("mkpath(file) requires one argument."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
const QString &fn = resolvePath(args.at(0).toQString(m_tmp1));
if (!QDir::current().mkpath(fn)) {
evalError(fL1S("Cannot create directory %1.").arg(QDir::toNativeSeparators(fn)));
return ReturnFalse;
}
+#endif
return ReturnTrue;
}
case T_WRITE_FILE: {
@@ -1441,6 +1444,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
evalError(fL1S("write_file(name, [content var, [append]]) requires one to three arguments."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
QIODevice::OpenMode mode = QIODevice::Truncate;
QString contents;
if (args.count() >= 2) {
@@ -1452,12 +1456,16 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
mode = QIODevice::Append;
}
return writeFile(QString(), resolvePath(args.at(0).toQString(m_tmp1)), mode, contents);
+#else
+ return ReturnTrue;
+#endif
}
case T_TOUCH: {
if (args.count() != 2) {
evalError(fL1S("touch(file, reffile) requires two arguments."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
const QString &tfn = resolvePath(args.at(0).toQString(m_tmp1));
const QString &rfn = resolvePath(args.at(1).toQString(m_tmp2));
#ifdef Q_OS_UNIX
@@ -1493,6 +1501,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
SetFileTime(wHand, 0, 0, &ft);
CloseHandle(wHand);
+#endif
#endif
return ReturnTrue;
}
@@ -1501,6 +1510,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
evalError(fL1S("cache(var, [set|add|sub] [transient] [super], [srcvar]) requires one to three arguments."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
bool persist = true;
bool super = false;
enum { CacheSet, CacheAdd, CacheSub } mode = CacheSet;
@@ -1626,8 +1636,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
fn = m_cachefile;
}
return writeFile(fL1S("cache "), fn, QIODevice::Append, varstr);
- }
+#else
+ return ReturnTrue;
#endif
+ }
default:
evalError(fL1S("Function '%1' is not implemented.").arg(function.toQString(m_tmp1)));
return ReturnFalse;
diff --git a/src/tools/qtcdebugger/qtcdebugger.qbs b/src/tools/qtcdebugger/qtcdebugger.qbs
index 5b862877465..8edb4cc3428 100644
--- a/src/tools/qtcdebugger/qtcdebugger.qbs
+++ b/src/tools/qtcdebugger/qtcdebugger.qbs
@@ -14,7 +14,6 @@ QtcTool {
"advapi32"
]
- Depends { name: "cpp" }
Depends { name: "Qt.widgets" }
Depends { name: "app_version_header" }
diff --git a/src/tools/qtcreatorcrashhandler/qtcreatorcrashhandler.qbs b/src/tools/qtcreatorcrashhandler/qtcreatorcrashhandler.qbs
index 35d6187d568..9e523222f01 100644
--- a/src/tools/qtcreatorcrashhandler/qtcreatorcrashhandler.qbs
+++ b/src/tools/qtcreatorcrashhandler/qtcreatorcrashhandler.qbs
@@ -10,7 +10,6 @@ QtcTool {
"../../libs"
]
- Depends { name: "cpp" }
Depends { name: "Qt.widgets" }
Depends { name: "app_version_header" }
diff --git a/src/tools/qtpromaker/qtpromaker.qbs b/src/tools/qtpromaker/qtpromaker.qbs
index c6b761f58c5..7c441d8fec7 100644
--- a/src/tools/qtpromaker/qtpromaker.qbs
+++ b/src/tools/qtpromaker/qtpromaker.qbs
@@ -4,7 +4,6 @@ import "../QtcTool.qbs" as QtcTool
QtcTool {
name: "qtpromaker"
- Depends { name: "cpp" }
Depends { name: "Qt.core" }
files: [ "main.cpp" ]
diff --git a/src/tools/sdktool/sdktool.qbs b/src/tools/sdktool/sdktool.qbs
index 7d8e571a909..fc80c51bc32 100644
--- a/src/tools/sdktool/sdktool.qbs
+++ b/src/tools/sdktool/sdktool.qbs
@@ -4,7 +4,6 @@ import "../QtcTool.qbs" as QtcTool
QtcTool {
name: "sdktool"
- Depends { name: "cpp" }
Depends { name: "Qt.core" }
Depends { name: "Utils" }
Depends { name: "app_version_header" }
diff --git a/tests/system/objects.map b/tests/system/objects.map
index 7d0f5f29f5d..152f208d224 100644
--- a/tests/system/objects.map
+++ b/tests/system/objects.map
@@ -50,6 +50,7 @@
:Debugger Toolbar.StatusText_Utils::StatusLabel {container=':DebugModeWidget.Debugger Toolbar_QDockWidget' type='Utils::StatusLabel' unnamed='1'}
:Dialog.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'}
:Dialog.componentNameEdit_QLineEdit {name='componentNameEdit' type='Utils::ClassNameValidatingLineEdit' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'}
+:Dialog_Debugger::Internal::SymbolPathsDialog {name='Debugger__Internal__SymbolPathsDialog' type='Debugger::Internal::SymbolPathsDialog' visible='1' windowTitle='Dialog'}
:Dialog_QmlJSEditor::Internal::ComponentNameDialog {name='QmlJSEditor__Internal__ComponentNameDialog' type='QmlJSEditor::Internal::ComponentNameDialog' visible='1' windowTitle='Move Component into Separate File'}
:Edit Environment_ProjectExplorer::EnvironmentItemsDialog {type='ProjectExplorer::EnvironmentItemsDialog' unnamed='1' visible='1' windowTitle='Edit Environment'}
:Events.QmlProfilerEventsTable_QmlProfiler::Internal::QmlProfilerEventsMainView {container=':*Qt Creator.Events_QDockWidget' name='QmlProfilerEventsTable' type='QmlProfiler::Internal::QmlProfilerEventsMainView' visible='1'}
@@ -143,8 +144,8 @@
:RunSettingsUseBuildEnvironment_QLabel {text~='Us(e|ing) Build Environment' type='QLabel' unnamed='1' visible='1'}
:Session Manager_ProjectExplorer::Internal::SessionDialog {name='ProjectExplorer__Internal__SessionDialog' type='ProjectExplorer::Internal::SessionDialog' visible='1' windowTitle='Session Manager'}
:Startup.contextHelpComboBox_QComboBox {container=':Form.Startup_QGroupBox' name='contextHelpComboBox' type='QComboBox' visible='1'}
-:Symbol Server_Utils::CheckableMessageBox {type='Utils::CheckableMessageBox' unnamed='1' visible='1' windowTitle='Symbol Server'}
:User Interface.languageBox_QComboBox {container=':Core__Internal__GeneralSettings.User Interface_QGroupBox' name='languageBox' type='QComboBox' visible='1'}
+:WritePermissions_Core::Internal::ReadOnlyFilesDialog {name='Core__Internal__ReadOnlyFilesDialog' type='Core::Internal::ReadOnlyFilesDialog' visible='1' windowTitle='Files Without Write Permissions'}
:addToVersionControlComboBox_QComboBox {name='addToVersionControlComboBox' type='QComboBox' visible='1'}
:fileNameEdit_QLineEdit {buddy=':Open File.File name:_QLabel' name='fileNameEdit' type='QLineEdit' visible='1'}
:formFileLineEdit_Utils::FileNameValidatingLineEdit {buddy=':Qt Gui Application.Form file:_QLabel' name='formFileLineEdit' type='Utils::FileNameValidatingLineEdit' visible='1'}
diff --git a/tests/system/shared/debugger.py b/tests/system/shared/debugger.py
index 7f352a265e8..29b79c77618 100644
--- a/tests/system/shared/debugger.py
+++ b/tests/system/shared/debugger.py
@@ -32,18 +32,20 @@ import re
def handleDebuggerWarnings(config, isMsvcBuild=False):
if isMsvcBuild:
try:
- popup = waitForObject("{text?='*' type='QLabel' unnamed='1' visible='1' window=':Symbol Server_Utils::CheckableMessageBox'}", 10000)
- symServerNotConfiged = ("The debugger is not configured to use the public "
- "Microsoft Symbol Server. "
- "This is recommended for retrieval of the symbols of the operating system libraries.
"
- "Note: A fast internet connection is required for this to work smoothly. "
- "Also, a delay might occur when connecting for the first time.
"
- "Would you like to set it up?
")
+ popup = waitForObject("{name='msgLabel' text?='*' type='QLabel' visible='1' window=':Dialog_Debugger::Internal::SymbolPathsDialog'}", 10000)
+ symServerNotConfiged = ("\nThe debugger is not configured to use the public "
+ "Microsoft Symbol Server.
"
+ "This is recommended for retrieval of the symbols of the operating system libraries.
\n"
+ "Note: It is recommended, that if you use the Microsoft Symbol Server, "
+ "to also use a local symbol cache.
"
+ "Also, a fast internet connection is required for this to work smoothly,
"
+ "and a delay might occur when connecting for the first time, when caching the symbols for the first time.
\n"
+ "Would you like to set it up?
\n")
if popup.text == symServerNotConfiged:
test.log("Creator warned about the debugger not being configured to use the public Microsoft Symbol Server.")
else:
test.warning("Creator showed an unexpected warning: " + str(popup.text))
- clickButton(waitForObject("{text='No' type='QPushButton' unnamed='1' visible='1' window=':Symbol Server_Utils::CheckableMessageBox'}", 10000))
+ clickButton(waitForObject("{text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Dialog_Debugger::Internal::SymbolPathsDialog'}", 10000))
except LookupError:
pass # No warning. Fine.
else:
diff --git a/tests/system/suite_editors/tst_modify_readonly/test.py b/tests/system/suite_editors/tst_modify_readonly/test.py
index bf847d39e98..7d2a05f5aaa 100644
--- a/tests/system/suite_editors/tst_modify_readonly/test.py
+++ b/tests/system/suite_editors/tst_modify_readonly/test.py
@@ -90,11 +90,6 @@ def testModifyFile(fileName, editor, line, expectWarning):
def testSaveChangesAndMakeWritable(modifiedFiles, readOnlyFiles):
saveDlgStr = ("{name='Core__Internal__SaveItemsDialog' type='Core::Internal::SaveItemsDialog' "
"visible='1' windowTitle='Save Changes'}")
- readOnlyMBoxStr = ("{type='QMessageBox' unnamed='1' visible='1' text~='The file .+ "
- "is read only\.'}")
- cannotResetStr = ("{text='Cannot set permissions to writable.' type='QMessageBox' "
- "unnamed='1' visible='1'}")
- filePattern = re.compile('The file (.+) is read only\.')
try:
waitForObject(saveDlgStr)
except:
@@ -105,45 +100,36 @@ def testSaveChangesAndMakeWritable(modifiedFiles, readOnlyFiles):
checkUnsavedChangesContains(treeWidget.model(), modifiedFiles)
clickButton(waitForObject("{text='Save All' type='QPushButton' unnamed='1' visible='1' "
"window=%s}" % saveDlgStr))
- # iterating over the number of modified files (order is unpredictable)
- for i in range(len(modifiedFiles)):
- try:
- currentText = str(waitForObject(readOnlyMBoxStr, 3000).text)
- currentFile = filePattern.match(currentText).group(1)
- clickButton(waitForObject("{text='Make Writable' type='QPushButton' unnamed='1' "
- "visible='1' window=%s}" % readOnlyMBoxStr))
- try:
- if not waitFor('__checkForMsgBoxOrQuit__(cannotResetStr)', 3000):
- raise Exception('Unexpected messagebox did not appear (EXPECTED!).')
- # should not be possible
- test.fail("Could not reset file '%s' to writable state." % currentFile)
- clickButton("{text='OK' type='QPushButton' window=%s}" % cannotResetStr)
- except:
- if isWritable(currentFile):
- if currentFile in readOnlyFiles:
- test.passes("File '%s' reset to writable state and saved." % currentFile)
- readOnlyFiles.remove(currentFile)
- else:
- test.fatal("Creator states file '%s' is read-only - but supposed to be "
- "writable." % currentFile)
- else:
- test.fail("Creator states file '%s' had been made writable - "
- "but it's still read only." % currentFile)
- except:
- if len(readOnlyFiles) != 0:
- test.fail("Missing QMessageBox about a read only file.")
- if not test.compare(len(readOnlyFiles), 0,
- "Checking whether all files have been handled correctly."):
- try:
- invokeMenuItem("File", "Exit")
- waitForObject(saveDlgStr)
- clickButton(waitForObject("{text='Do not Save' type='QPushButton' unnamed='1' "
- "visible='1' window=%s}" % saveDlgStr))
- except:
- pass
-
-def __checkForMsgBoxOrQuit__(crs):
- return currentApplicationContext().isRunning and object.exists(crs)
+ try:
+ filesTree = waitForObject("{name='treeWidget' type='QTreeWidget' visible='1' "
+ "window=':WritePermissions_Core::Internal::ReadOnlyFilesDialog'}")
+ items = map(os.path.join, dumpItems(filesTree.model(), column=4),
+ dumpItems(filesTree.model(), column=3))
+ difference = set(readOnlyFiles) ^ set(items)
+ test.verify(len(difference) == 0, "Verifying whether all modified files without write "
+ "permission are listed.")
+ clickButton("{text='Change Permission' type='QPushButton' visible='1' unnamed='1' "
+ "window=':WritePermissions_Core::Internal::ReadOnlyFilesDialog'}")
+ except:
+ test.fatal("Missing dialog regarding missing permission on read only files.")
+ exitCanceled = False
+ try:
+ mBoxStr = "{type='QMessageBox' unnamed='1' visible='1' text?='*Could not save the files.'}"
+ msgBox = waitForObject(mBoxStr, 3000)
+ test.fatal("Creator failed to set permissions.", str(msgBox.text))
+ exitCanceled = True
+ clickButton(waitForObject("{text='OK' type='QPushButton' unnamed='1' visible='1' "
+ "window=%s}" % mBoxStr))
+ except:
+ for current in readOnlyFiles:
+ test.verify(isWritable(current),
+ "Checking whether Creator made '%s' writable again." % current)
+ if exitCanceled:
+ invokeMenuItem("File", "Exit")
+ test.log("Exiting without saving.")
+ waitForObject(saveDlgStr)
+ clickButton(waitForObject("{text='Do not Save' type='QPushButton' unnamed='1' "
+ "visible='1' window=%s}" % saveDlgStr))
def checkOpenDocumentsContains(itemName):
openDocsTreeViewModel = waitForObject(":OpenDocuments_Widget").model()