Commit Graph

178 Commits

Author SHA1 Message Date
Orgad Shaneh
7a3eb71cf7 ProjectExplorer: Minor cleanup
Change-Id: I9388053eafae661bb16c75917ca8cc738df8b3c1
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-05-22 10:29:14 +00:00
Tobias Hunger
6dc6eb9ad0 ProjectNodes: Make FolderNode::replaceSubtree safer
Make it safe for an existing note to replace itself.

Change-Id: I8ce04ea45cb851c814b9efbc7d8490c5fb44150e
Reviewed-by: hjk <hjk@qt.io>
2017-05-18 09:19:11 +00:00
Orgad Shaneh
3fe9765073 ProjectExplorer: List sub-project (like pri) files in the locator
Change-Id: Ic501ba0af8bba4589cba62d78f0ef62cd5f5d46f
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-05-09 11:43:00 +00:00
Tobias Hunger
d056df2c15 ProjectNodes: Fix crash in FolderNode::addFileFilter()
Task-number: QTCREATORBUG-18160
Change-Id: I1b8fe9f949ca9aa04858321317ebb13eb01236ab
Reviewed-by: hjk <hjk@qt.io>
2017-05-08 12:54:12 +00:00
Christian Stenger
face7b13cd ProjectExplorer: Fix compile for Qt5.6
Change-Id: I259dd516a9b28e34a256321e8ac754f4215205a7
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-05-04 12:26:19 +00:00
Tobias Hunger
0a3409112b ProjectNodes: add listInProject() to Node
Add a setter/getter for listInProject to Node and make the project
list all nodes with this property set in Project::files.

Task-number: QTCREATORBUG-18132
Change-Id: I334e627856d1bc0d033e13c5d629f6657d8d7fee
Reviewed-by: hjk <hjk@qt.io>
2017-05-04 09:16:56 +00:00
Tobias Hunger
4593092649 ProjectNodes: Move isGenerated from FileNode to Node
We have complex nodes like the ResourceTopLevelNode which can be generated.

Change-Id: Ifdbe72323b668961c50252f597a0bf67ec41f30b
Reviewed-by: hjk <hjk@qt.io>
2017-05-04 09:16:42 +00:00
Tobias Hunger
cea68a3fe3 ProjectNodes: Use a set of flags for bools in Node
This has the potential to save some space per node.

Change-Id: I2b8b65c13b355e680965bb7307f9e8d8714dae64
Reviewed-by: hjk <hjk@qt.io>
2017-05-04 09:16:36 +00:00
Tobias Hunger
175643fd7e ProjectNodes: Do not define a copy constructor for FileNode
Nodes are QObjects (still), so they should not have a copy constructor.

Change-Id: I1b20663ee0ec121cda4d39ced7a9f204fb4621a1
Reviewed-by: hjk <hjk@qt.io>
2017-05-04 09:16:27 +00:00
Tobias Hunger
1d160fb7d9 ProjectNodes: Fix forEachGenericNode
Iterate over all nodes in the whole tree, not just the FileNodes
of the children of the current node.

Change-Id: Ib8bf0eaecb2b13bd01dbc61417b83d0873ab6527
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-05-04 09:15:55 +00:00
Orgad Shaneh
b1180280d0 ProjectExplorer: Fix infinite recursion
If some ProjectNode doesn't override supportsAction (like CMake), then the
fallback is FolderNode, which calls the root project node again...

Change-Id: Ie7a469d6aaaae38c8c2ff56e33fed27cf1477b49
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: hjk <hjk@qt.io>
2017-04-07 08:44:34 +00:00
hjk
bd5e2faa75 ProjectNodes: Handle supported actions one-by-one
Getting the full list for a node can get quite expensive e.g. in
cases of recursive calls of QMakeProjectManager::findPriFile.

However, the FlatModel needs to decide quickly on whether an item
is editable to potentially allow renaming.

So split up QList<Actions> supportedActions() into individual
bool supportsAction(action) calls and make sure Rename is not
on the critical path.

Task-number: QTCREATORBUG-17953
Change-Id: I31841847f8aa7d7b94c63d76ce71efb1c930fa69
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-04-05 12:47:03 +00:00
Tobias Hunger
5afc149b69 ProjectExlorer: Match filenames only to find filetypes
Do look at filenames only to decide which filetype a file is.

Change-Id: Ie64ad0a91df1ddd22c1cec4089f2611030560f3e
Reviewed-by: hjk <hjk@qt.io>
2017-03-30 11:36:57 +00:00
Tobias Hunger
14f3a86cf3 Project: Set filepath on ContainerNode
This fixes search via the context menu.

Change-Id: Ie675cae3f6e35d5d02234f3a49f7a71d02b08bc2
Reviewed-by: hjk <hjk@qt.io>
2017-03-29 11:54:05 +00:00
hjk
2ee7967750 ProjectExplorer: Fix enabling state of main project nodes
Since the rootProjectNode() containing the parsed files is now nested
under a new project node the main node needs to delegate enable/disable
decisions.

Task-number: QTCREATORBUG-17922
Change-Id: Ie7bb6d6802072a2127b32c0fe51fb25fc1c9c6cc
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2017-03-28 07:10:54 +00:00
Tobias Hunger
54be52a4fa ProjectNodes: Enable nested nodes outside of the top level node
Enable adding nested nodes not a child of the top level node.

Change-Id: Ia6bb4ed6e3e6649a98151c88133ff5ec7197573d
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-03-27 11:53:29 +00:00
Tobias Hunger
e8498acde0 ProjectNodes: Be less enthusiastic about compression opportunities
Do not compress foldernodes that differ on their type. This makes it
possible to use FolderNode::compress() in one more place in CMake.

Change-Id: I4721d5d12e3032ee70a1c3d9e87df49d59751f04
Reviewed-by: hjk <hjk@qt.io>
2017-03-24 17:41:07 +00:00
Tobias Hunger
b302eb2d0f ProjectNodes: Avoid QFileInfo
Avoid creating an unnecessary QFileInfo object.

Change-Id: Ibd85ccdf948872c2505085aa04cc5525d25c4d29
Reviewed-by: hjk <hjk@qt.io>
2017-03-24 17:40:58 +00:00
hjk
ebae6426f8 ProjectManager: Remove SessionNode
Instead, get root project nodes directly from the project.

Change-Id: I5cf95a7dce1fa29c1adc26013ad03cc017f38a6d
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-03-21 12:48:41 +00:00
hjk
8b8ba51ef3 ProjectNode: Let add/removeSubprojects operate on single files
That's the only way that is used.

Change-Id: I57e7942f9dccf74ff7588c3bca0ccf05f528a3df
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-03-20 10:56:34 +00:00
Tobias Hunger
a8f64bd1b9 ProjectNodes: Do not crash when adding a nullptr as a node
Change-Id: Ic75ddbf3bd6b72779342e53ea73f7622f6ce2823
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2017-03-16 14:26:01 +00:00
Tobias Hunger
831864c56c ProjectExplorer: Report VCS topics in all cases
Report VCS topics when the top level project node is a file or
a directory.

Task-number: QTCREATORBUG-17498
Change-Id: Ie20109b228afc79bfc2ac21505a8798d9fd5efd6
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2017-03-15 10:28:23 +00:00
Tobias Hunger
1621aaa26e CMake: Fix some more SOFT-ASSERTS in CMake server-mode
Fix two more SOFT-ASSERTs in CMake server-mode that could be triggered
by complex projects.

Move and simplify search functionality into FolderNode and use that instead
of hand-crafting a custom tree search in CMake.

Change-Id: If4bde5c4a7ff84c7d5dba4f595e99b39f54ac8aa
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-03-15 10:23:14 +00:00
Tobias Hunger
b8417e0f0c CMake: Fix projects with complex CMakeLists.txt layouts
This fixes soft assserts in e.g. Musescore.

Change-Id: I860c8c184161e53918fb901d66b89cffb0c09e23
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-03-15 10:22:24 +00:00
hjk
a6a271881f ProjectExplorer: Inline FolderNode::recursiveFileNodes()
... into its only remaining user.

Change-Id: I5efa716ce34ba6a237dfcbcfebb257c863fdd21d
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-03-14 12:33:47 +00:00
hjk
4d8352a6c1 ProjectExplorer: Add a FolderNode::addNestedNode() function
Also, rename buildTree() to addNestedNodes(), it's really
adding things, not recompletely (re-)building the subtree.

Use it whenever possible to avoid intermediate lists of items
to insert.

Change-Id: I5fde41e5b164a8a292410bd381a85f5efadf3471
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-03-14 12:26:22 +00:00
Tobias Hunger
a70370cc04 ProjectNodes: Add method to query FileType
Add methods to get the FileType based on filepath or mimetype.

Use that method in treescanner.

Change-Id: I3de50d7afd8262cc86ae722e7de4ca53921153d2
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 16:44:30 +00:00
Tobias Hunger
7648504a30 FolderNode: Remove makeEmpty() again
It is no longer necessary.

Change-Id: Id044ace6f0861bc0fc659fb6d6823da1f0082bc9
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 16:44:23 +00:00
Tobias Hunger
3c85c00577 Resources: Register as tree manager
Change-Id: I400c1d77b23e465de7acbc517530f6c080549c5e
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 16:44:19 +00:00
Tobias Hunger
d78e0edb5d ProjectNodes: Remove no longer necessary signaling
The project tree is updated in one go now, so there is no need to
signal each and every change.

Change-Id: I7d5829d688b406ee2e701a2aa004b9e8bb5870a9
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 16:22:36 +00:00
Tobias Hunger
71a5aee36f Session: Update SessionNode when Project tree changes
This moves ownership of the project's root node from the
project into the project tree!

Change-Id: I84eba884bd63b44e56c75023d8bf12caf5cc2833
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 16:22:21 +00:00
Tobias Hunger
49989d46dc FolderNode: Add isAncesterOf(Node *)
Change-Id: I716593e7fd25f4acc31933e2f28273ced4674b73
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 15:30:46 +00:00
Tobias Hunger
5a5a464dfa ProjectNodes: Introduce FolderNode::replaceSubtree
Introduce FolderNode::replaceSubtree incl. necessary signalling

Change-Id: I57762cd24a2986d3a04d0de6b794c1f6c772dbe6
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 15:17:25 +00:00
Tobias Hunger
94c33d95ed ProjectNodes: Remove recursiveFileNode
Change-Id: Ibde61428517b187c84eca9293b17f8f665fb38ae
Reviewed-by: hjk <hjk@qt.io>
2017-03-10 14:45:03 +00:00
Tobias Hunger
1b9c18951a ProjectNodes: Make folderNode(FileName) method inaccessible
Change-Id: Ie355ea8fd5e909e9c3e6e2630faabe366d02051a
Reviewed-by: hjk <hjk@qt.io>
2017-03-09 14:29:11 +00:00
Tobias Hunger
aa51fd3962 ProjectNodes: Make recursiveFindOrCreateFolderNode private
Change-Id: I43315f19d931bec0ad7b81d3c72a4e7486f70445
Reviewed-by: hjk <hjk@qt.io>
2017-03-09 14:29:03 +00:00
hjk
d6df4492d0 ProjectExplorer: Use visitor-by-lambda for project tree
And inline it into user code. Less code in total and no intermediate
node lists.

Change-Id: I3724883408bfaa868266110aee27bbffd4d96bd8
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-03-08 09:05:29 +00:00
Tobias Hunger
9e8b427a70 ProjectExplorer: Nodes: Do not makeEmpty() as part of buildTree()
Do not call makeEmpty() as part of buildTree(). That makes it
impossible to combine buildTree with manual tree setup.

Change-Id: If0a0d9432fe39870917a6ba31594e8dcd6d31868
Reviewed-by: hjk <hjk@qt.io>
2017-02-24 08:40:04 +00:00
hjk
fd5e0a1486 ProjectExplorer: Remove Node::asSessionNode()
The only remaining uses could be removed or replaced by a
check for no parent node.

Change-Id: I13eba8ae418cf3d404bb3df7d389d72091af38d7
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-02-23 15:21:18 +00:00
hjk
4f47a8d745 ProjectExplorer: Remove FolderNode::projectNodes()
Merged into the using code now.

Change-Id: I4b39998799dde530ab48c504ac2a389d72705c4f
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-02-23 15:21:11 +00:00
Tobias Hunger
2c4a27d4d4 ProjectNodes: Add setter for addFileFilters to VirtualFolderNodes
Change-Id: I8a52798546b75f001c5ee447eee6024b06b0d287
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-02-17 12:51:30 +00:00
hjk
bccda22cce ProjectExplorer: Add a way to iterate over the node tree
Similar to what is used in Utils::TreeModel: Use lambdas
as "visitor".

Change-Id: Ia6e1a7ec022b61f94b01e1e8476bb932d22fd161
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-02-15 09:27:20 +00:00
Tobias Hunger
568130da70 ProjectExplorer: Add FolderNode::compress
Add a method to FolderNode that compresses a tree of folders like
A/B/C/file.txt into one FolderNode (A/B/C) and a FileNode (file.txt)

Change-Id: I5efa038c33b91ea01017269daa048ba101085d01
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-02-14 15:39:36 +00:00
Tobias Hunger
c888989a41 ProjectExplorer: Improve FolderNode::buildTree
Treat absolute paths more intelligently in FolderNode::buildTree: Add
them with their absolute paths instead of endless sequences of ..

Change-Id: I9d644588f91f1792f997dedfb20e68d210b9cf73
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-02-14 14:40:28 +00:00
hjk
a2c6e28478 ProjectManager: Show .qrc contents again
This fixes the second regression introduced by 04a525877b.

Change-Id: I5c5c72a036f139fa564c40e95ebf6acafc99792c
Reviewed-by: Mathias Hasselmann <mathias.hasselmann@kdab.com>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-02-10 15:31:00 +00:00
hjk
04a525877b ProjectExplorer: Merge FolderNode's m_{file,folder}Node fields
One step closer to direct use of Utils::TreeNode.

Change-Id: Icd0dfd2fa4d12c2572a68f61ae43c5e906956a0e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-02-09 12:15:23 +00:00
hjk
95e2d7f545 ProjectExplorer: Remove ProjectNode::m_projectNodes
They are duplicated in m_folderNodes, use them.

Change-Id: I4571720f1ef3daf098870a3cf05fa28a1002bb3f
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-02-08 11:15:55 +00:00
Tobias Hunger
ffbc331168 ProjectExplorer: Use makeEmpty in FolderNode::buildTree
Some lines saved.

Change-Id: I5a5e2bb150070aae48ad0ec1abb08bc2532d093b
Reviewed-by: hjk <hjk@qt.io>
2017-02-06 16:57:41 +00:00
Tobias Hunger
bd8fe1c42b ProjectExplorer: Deduplicate functionality of makeEmpty
Only one line saved, but potentially less hassle should FolderNode::makeEmpty
ever change.

Change-Id: I4dd01179a8dce9735744991c3de080739ab693ae
Reviewed-by: hjk <hjk@qt.io>
2017-02-06 16:57:36 +00:00
hjk
39a8442f80 QMake/ProjectManager: Simplify QmakeProFileNode::applyEvaluate
... and remove ProjectNode::removeProjectNode, as this was the
only remaining user.

Change-Id: I2c53392a8e9dacf956270d652525b62ba4c9e0a4
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-02-03 10:09:38 +00:00