Instead of creating them for all items when composer window
is opened, instead just create and destroy them when
required. None are too heavy to have a noticable delay
when selecting items, but in contrast keeping them around
forever is wasteful on memory.
Also clean up a lot of duplicate composer/composition
code and remove unnecessary signals from api (use a single
itemAdded signal instead of multiple signals for every
item type)
Since composer windows are now only created on demand, and
destroyed when the window is closed, the old interface methods
no longer apply. The new interface methods openComposers(),
openComposer(), closeComposer(), composerOpened(),
composerWillBeClosed() and composerClosed() are similar, but
only apply to composer windows when they are exist (i.e.
are currently open).
To access all compositions from a project, the project's
layoutManager() should be used instead.
Additionally, the new interface methods work with
QgsComposerInterface objects instead of QgsComposerView
objects. This should allow future hooks for plugins to interact
with open composer windows in a more useful way.
Not much there yet, but it adds an interface with stable API
which can be used by plugins and scripts to interact with
composer windows.
Could be expanded in future to add hooks for toolbars, menus,
etc, allowing plugins to extend composer functionality.
This adds a new QgsLayoutManager class which is used for
storage and serializing/deserializing of compositions.
A QgsLayoutManager is attached to QgsProject. This allows
core code to access the compositions attached to a project.
The intention is to move all handling of compositions from
app to core, making it easy for server to access project
compositions without resorting to fragile xml parsing.
This adds a new QgsScrollArea widget which is a subclass of QScrollArea.
QgsScrollArea has extra logic which temporarily blocks wheel events
from hitting child widgets for a short period following a scroll
of the area. This means that when scrolling a scroll area using the
mouse wheel, values won't be accidentally changed if the mouse
cursor momentarily lands on top of a widget.
QScrollArea should no longer be used in any QGIS code or plugins,
instead use QgsScrollArea to benefit from this fix.
This enum value has not been in use since filter rects were
separated from other filter types. Leaving it in API is confusing
and leads to incorrect use.
This reverts commit ecc49256a37d4333d9cefdeefff1f3fd7a38d893.
Works very badly for touchpads, where horizontal movement is interpreted
as a magnify request