Commit Graph

128 Commits

Author SHA1 Message Date
Christian Kandeler
e59bcd9962 ProjectExplorer: Add a "product" tag to the ProjectNode class
A product is a project node from which a target binary is produced, such
as a Product item in qbs or a .pro file in qmake.

Change-Id: I6a0e6bed6c02684cb03b2b18fed6a1b493fa78b2
Reviewed-by: hjk <hjk@qt.io>
2019-05-27 08:25:57 +00:00
BogDan Vatra
57c48630a8 Android: Add proper QBS support
Now we can use QtCreator to build, deploy, run & debug QBS projects.

[ChangeLog][Android][QBS] Add Android support for QBS projects.

Fixes: QTCREATORBUG-15573
Fixes: QTCREATORBUG-19880
Fixes: QTCREATORBUG-22182
Change-Id: I08b153a44dcf7ca178689c1c30fa2201c4cc0dbb
Reviewed-by: hjk <hjk@qt.io>
2019-04-26 06:37:00 +00:00
hjk
e3a7aa1ad2 ProjectExplorer: Flip default for ProjectNode::showInSimpleTree
Change-Id: Ibd4f91ad55b2be93d20dfc4f583de95274e981ca
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:57:05 +00:00
hjk
729c74379a ProjectExplorer: Merge Node::isFileNodeType and asFileNode
They were identifying the same set of nodes.

Change-Id: I3316cbc434ff740547bcf0baf9e5f1544f6e3f56
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:44:22 +00:00
hjk
ad4e2562fa ProjectExplorer: Replace Node::setNodeType by virtual functions
Not the usual direction of change, but currently there are
several systems to identify or invoke node functionality.

Virtual functions are likely to stay in this context, so this
here attempts to help consolidation by reducing the influence
of the node type flags, hopefully leading to full removal
by making remaining functionality available through the
other mechanisms (virtual functions, asFooNode() 'casts',
less so the FileType flag).

Change-Id: I12a17ce30b3c8883995b29b4720408020ee0fa3e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:32:14 +00:00
hjk
f066af4c14 Qbs: Remove QbsBaseProjectNode layer
Change-Id: I7c43b0b04503d4c9a25c5fe758defc589655f387
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-27 12:09:12 +00:00
hjk
a2d9acb6ec Qbs: Remove QbsFileNode
It's a ProjectExplorer::FileNode with a custom constructor.

Change-Id: I3057647a5843141ef9e55c97dd19255ea454479a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 15:22:04 +00:00
hjk
44a42db1ae ProjectExplorer: "Upstream" line number display for FileNodes
So far only used and set with QBS, but conceptually usable more
generally, and harmless if not used.

Change-Id: I1d2d615f5613340690de22a1c7d716a193fb1f05
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 13:58:18 +00:00
hjk
5cc1aee7ff Qbs: Move QbsBaseProjectNode::showInSimpleTree()
... to QbsGroupNode::showInSimpleTree(). It's the only subclass
that didn't re-implement it.

It's easier to reason about the actual value when the value isn't
flipped too often in the inheritance chain.

Change-Id: I61f6020acc95a3dc0383b44ad8d40ee39f923d0f
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 13:31:43 +00:00
hjk
f844f54cb7 ProjectExplorer: Use setters in ProjectExplorer::Node
Instead of constructor arguments. This makes it clearer on the
user side which value is actually changed.

Change-Id: I63ae8cd139a49700996c8874098111aad89ace22
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 08:26:43 +00:00
hjk
2b1b00d0e6 QbsProjectManager: Remove unused class QbsFolderNode
Change-Id: I94656ed4508084ecc9b2d0da623c6885b06341f1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-25 14:46:33 +00:00
hjk
09372918c1 ProjectExplorer: Remove FileNode's isGenerated constructor bool
Use setter of base class, similar to setListInProject() before.

Change-Id: Id620f0084a5dec0410f29c80f8f6393a6bcd5050
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-02-25 12:23:31 +00:00
Christian Kandeler
e9d3a9b1e8 QbsProjectManager: Implement ProjectNode::targetApplications()
Change-Id: Ied997dcb7e0a3d68b48bb7149f3494a2077ec014
Reviewed-by: hjk <hjk@qt.io>
2018-12-17 14:51:34 +00:00
hjk
18669c8215 ProjectExplorer: Reduce qmake specific logic
- add a QString FileNode::buildKey(), returning the build key
  for a build represented by that node, if any.

     * for QmakeProFileNodes the build key is traditionally equal
       to the file name, so use that.

     * for QbsProductNode use the uniqueProductName()

- add a Project::findNodeForBuildKey(QString buildKey) convenience
  function searching a Project(!)Node matching that build key.
  That's the only use case there is right now, and I see no reason
  yet to travers all files (yet).

Change-Id: I388c0e06c03111e12d630899d762448e974a5737
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-12-04 08:53:34 +00:00
Alessandro Portale
11632bbedd QbsProjectManager: Modernize
modernize-use-auto
modernize-use-nullptr
modernize-use-override

Change-Id: I8a67b87e614f54554f9ca50c9f5e3f3297458ec1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2018-07-27 12:35:12 +00:00
Christian Kandeler
491b057d14 QbsProjectManager: Add new files to the top-level product
... by default. The "New File" wizard, if not invoked from the context
menu, implicitly prefers Groups over Products, because the respective
nodes are tried first. Thus, we lower the priority of group nodes so
that their parent product will be a better match unless the group was
specifically selected.

Task-number: QTCREATORBUG-20480
Change-Id: I0c5b2dbf861065ee97ab957ec8bd86132295893e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-05-28 10:46:38 +00:00
hjk
e20d620043 ProjectExplorer: Let RunConfiguration declare what nodes it belongs to
This feature in question is the availability of the "Run" button in the
context menu of certain project nodes in the project tree to run
something presumably related to/build from that (sub)project.

Previously, the decision was made for certain qmake based projects
(those targeting Desktop, iOS and VxWorks) by some indirection
through the corresponding RunConfigurationFactories.

The patch lets the RunConfigurations decide themselves directly
and removes the indirection, potentially opening the feature for
other qmake based RCs, as well as other combinations (e.g.
PythonRunConfiguration could be associated with its .py file,
without the need to have a dummy project)

Change-Id: Ic489bd1dfa25fcd9102ffa4fa30125565dd2e40e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-03-16 09:55:03 +00:00
Tobias Hunger
1cf1700d1c Core::FileIconProvider: Add helper method to get a directory icon with overlay
Add a helper method to request a directory icon with an overlay icon for the
project tree.

Change-Id: Idea2ea9ec2ea6790bf8d087723700364fbcafec6
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-09-08 11:18:09 +00:00
Tobias Hunger
45046f7071 ProjectNodes: Do not derive Project Nodes from QObject
That should save some memory per node, and since creator has a lot of nodes
(e.g. opening the LLVM project adds about 1 000 000 nodes) this should be
noticeable:-)

Calling update inside ProjectTree::currentNode() and rename it to
findCurrentNode() to make sure it is an still existing pointer.
Also, try to reduce the somehow more expensive currentNode() calls
and sprinkle some const around that usage.

Change-Id: I6a7c5db01a71d53d39544d3013cad557d5b96cdc
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-08-01 11:24:53 +00:00
Christian Stenger
bde8ebc56c QbsPM: Re-introduce uniqueProductName()
This patch prepares for enhancing information stored inside
buildSystemTarget.

Change-Id: I5d81fd01ab6b06c162f47fd9536de697ddfd24a3
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-06-19 08:14:39 +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
Joerg Bornemann
848b8c0f44 Update qbs submodule
To HEAD of 1.8 branch, and adapt to changed API.

Change-Id: Ie180b114726134a06dfefe9dc3a6dc27997f246c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-03-31 14:44:49 +00:00
hjk
58214f09e3 QbsProjectManager: Code cosmetics
Remove unused QbsProductNode::findGroupNode and productPath.
Also, simplify setup of static icons.

Change-Id: Ibfaa1398eefcf3f764173d5b37aa4382b68976c9
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-03-21 12:49:46 +00:00
Christian Kandeler
5090c2929a QbsProjectManager: Add missing assignment in QbsProductNode constructor
At least the "build product" functionality was broken because of this.

Change-Id: Ia552e53ba783b2b037ce7289d554e4061ed62262
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-03-10 15:12:09 +00:00
Tobias Hunger
45ffa75054 Qbs: Move root project setup into QbsNodeTreeBuilder
Change-Id: If8ba7fc6e4edf1346e0636d0bbc78efb27cb433e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-03-02 15:07:21 +00:00
Tobias Hunger
8cb57c734e Qbs: Move setup code for QbsProjectNodes into QbsNodeTreeBuilder
Change-Id: Ice5b445db916648bb8fb0d0f31bafe1d53e11182
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-03-02 15:07:14 +00:00
Tobias Hunger
5ed7728d46 Qbs: Simplify QbsProjectNode
Change-Id: I463407a38ed9acfc1332cbeb7cdc37f709c724d9
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-03-02 15:07:08 +00:00
Tobias Hunger
b6b7605357 Qbs: Move ProductNode setup into QbsNodeTreeBuilder
Move closer to a setup where the project tree API can change.

This patch also makes sure "Generated files" will be below the
product file of each product and above any Groups/folders/files.

Change-Id: I728289372d40b809105f55adbe50fd424b19e0a0
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-03-02 15:07:03 +00:00
Tobias Hunger
7b3db8ee1d qbs: Move setup of Group node tree into QbsNodeTreeBuilder
Move code to set up the tree of project nodes out of the project
nodes themselves. This makes them easier to manage and will enable
creator to change to a less update-intense project tree.

Change-Id: I2d0702d257e87543f47ebfb456344423ebe4f871
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-03-02 15:06:59 +00:00
Tobias Hunger
68b1859f58 qbs: Simplify add/remove file code
There is no need to call setupFiles on the QbsGroupNode before calling
update() on the root node. That will just redo the work anyway.

Change-Id: I54048395f87dd6fb5436f5d9d47b97e82460b568
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-02-28 14:24:59 +00:00
hjk
10b56f8930 QbsProjectManager: Replace some uses of Node::projectNodes()
No need to use two filters with a temporary list when the
task can be done in one go.

Change-Id: I96468099eb28c9698dbc637e432a38071d054e39
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-02-15 17:32:23 +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
cbfedd4328 ProjectExplorer: Fix display of .qrc contents
Change-Id: I2779e12daa8a7972380f51b72a56de3466d453a5
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-01-30 13:43:31 +00:00
Tobias Hunger
e8b4e180cd RunConfiguration: Introduce buildSystemTarget()
Introduce a method that maps a RunConfiguration to the build system target
that created the executable.

Implement the method in all RunConfigurations where that makes sense (e.g.
no CustomExecutables).

Change-Id: Ifaac859c2cd9b2806a0d7c185b2239312a67752a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2017-01-30 13:27:16 +00:00
hjk
30bf801629 ProjectExplorer: Further tree node related simplification
Drop the list sorting and difference generation which is not
needed in the "build from scratch" setup.

This also removes some of the intermediately introduced
convienience functions and fixes a regression that led to
missing project files.

Change-Id: I39d1966324917f466fb347da3a52552393ca4a01
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2017-01-30 07:56:05 +00:00
hjk
87304b3ce0 ProjectExplorer: Introduce some FolderNode convenience functions
... and use them.

Change-Id: I9f5237e5eac30715c2effbd3301dd2a70516d2a9
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-01-27 08:40:20 +00:00
hjk
beaba559a5 ProjectExplorer: Slim down user side ProjectNode handling
Change-Id: If727ff6cd09cc127e031c49c47f61ffda631a80e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2017-01-26 15:24:57 +00:00
Tobias Hunger
3af1372395 ProjectExplorer: No more pointer to the parent project node
That information is used rarely, and is not too expensive to regenerate,
so there is no need to store and manage it for every node.

Change-Id: I2261853431cd4328ec447031de3b9f5d5347e796
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2016-11-14 09:03:04 +00:00
Tobias Hunger
ad003363b7 ProjectExplorer: Rename Node::projectNode to Node::parentProjectNode
Change-Id: I47fa794a0bd8456ae23271934a957d9667d2d7bb
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2016-11-10 15:24:14 +00:00
Tobias Hunger
67e011ba5f ProjectExplorer: Make naming of methods on Nodes more consistent
Change-Id: I5050a020f0fc0ef4556db1d2020afeadfcd51585
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2016-11-10 15:24:02 +00:00
Tobias Hunger
7150c0778b ProjectExplorer: Allow for disabled nodes in the project tree
Change-Id: I82d8284777f5691eb3ba9cf4ef92da05057aac18
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2016-11-03 15:56:16 +00:00
Tobias Hunger
ce3e586198 ProjectExplorer: Shorten space needed to store a FileType
Use class enum to shorten the FileType to quint16. This frees up a couple
of bytes per FileNode and we can have many of those.

Change-Id: I3a9ae25059690fefa15305a4268269647d6dc1c9
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2016-11-03 15:55:39 +00:00
Tobias Hunger
c9ee7ee378 ProjectExplorer: Shorten NodeType enum
Use a class enum with a type quint16 for the NodeType. Frees 2 bytes
per node that can be used for better things now.

Change-Id: Ib84bf8629e9f4a5fb0793355eff0f0d6302167dd
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2016-11-03 15:55:13 +00:00
Oswald Buddenhagen
424639ecac make resource file handling able to deal with QMakeProject's VFS
resources.prf may create virtual qrc files when RESOURCES contains
non-qrc files.

Change-Id: If591de9b32b775059d67e94bc3cb06d23ee44b08
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2016-11-01 17:34:55 +00:00
Christian Kandeler
8707c7bb1b QbsProjectManager: Do not set up generated files for disabled products
Such products are not guaranteed to have a valid build directory.

Change-Id: I3e6ec211edb8fb9a13e3b785cd19b795f7adee12
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
2016-10-19 08:04:41 +00:00
Christian Kandeler
bfd0827811 QbsProjectManager: Make generated files available in project tree
Task-number: QTCREATORBUG-15978
Change-Id: Ia1890f1c4f8d1fa76568e42e15741281acb7dbb0
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2016-08-17 08:25:24 +00:00
Christian Kandeler
7eacb25ded QbsProjectManager: Re-add null pointer check
That one was accidentally removed in 0b3abfcf6a.

Change-Id: I01d2654175260f9efd1d01e5997170ce0d1faf0e
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2016-08-15 08:53:31 +00:00
Christian Kandeler
0b3abfcf6a Update qbs submodule
To HEAD of master branch. Also do the necessary API adaptations in
QbsProjectManager.

Change-Id: I4709b7a0f35537f5b6f9fd04f4d95be16aef2c8d
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
2016-08-11 09:06:54 +00:00
Alessandro Portale
fdad4bf7b0 New file overlay icons
Change-Id: Icba67a1404b6e4604aef56def00bfe2098b8c8fe
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2016-04-25 08:07:19 +00:00
Orgad Shaneh
c632ce44f7 Qbs: Improve performance even further...
setupFolder is called recursively...

Change-Id: Ief1d1d45294a3821f5496d832a2130a8ff779f44
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2016-02-22 14:00:10 +00:00