The inverted painting, the rubber band replay and the changed()
receiver lived in DiagramView, which the unit tests cannot link, so the
update-flag regression was only covered through a stand-in view. They
now live in PaletteGraphicsView, a QGraphicsView subclass with no
other dependency, and DiagramView derives from it. The view tells a
subclass through paintingInverted(bool) when it renders for an
inverted display; DiagramView forwards that to the diagram. The grid
dot rule moves out of Diagram::drawBackground into
QET::Palette::gridDotColor().
tst_qetpalette now links the real class: gridDotColorSoftensInvertedDots,
paletteViewFollowsThePalette (light sheet, dark sheet at text contrast
with a red box still red and the paintingInverted calls in order, back
to light), paletteViewKeepsSceneUpdatesFlowing (three whole-scene
updates and a selection each repaint, scene set after construction),
paletteViewDrawsTheRubberBand.
On a dark palette the folio stayed a white sheet with black ink, and
the white/gray toggle only darkened the sheet while the ink stayed
black. DiagramView now renders each repaint into an image and inverts
its lightness before blitting it: white becomes the palette's Base,
black becomes its Text, and colored conductors and elements keep their
hue. The document, printing and export are untouched; only the screen
rendering changes, and only while the palette is dark.
QET::Palette::invertLightness does the inversion in one integer pass
(adding 255 - max - min to the three channels inverts the HSL lightness
and keeps hue and saturation), then stretches the result between the
sheet and ink colors through three lookup tables. A 4K viewport costs
about 9 ms in a release build. QGraphicsView::render() skips the
selection rubber band, so the view draws it again after the inversion.
Tests in tst_qetpalette: invertLightnessMapsSheetAndInk,
invertedViewReadsOnDarkSheet, invertLightnessSpeed.
Tab cycles the folio's items, which means focusNextPrevChild() has to
refuse the usual focus traversal. On its own that leaves someone working
without a mouse able to reach the drawing area and never leave it -- the
exact person the Tab cycling was added for.
Escape now steps back out in two stages: it drops the selection first,
then hands focus to the next widget. The one-shot m_releasing_focus flag
is what lets that second Escape through the override.
Verified under Xvfb: with an item selected, Escape clears it (193k pixels
change); a second Escape changes nothing visually; a Tab after that moves
widget focus in the toolbar (306 pixels) instead of selecting on the
canvas, which is the behaviour of a view that no longer holds focus.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Implements the second pillar of #574: keyboard-driven selection on the
diagram canvas.
Tab / Shift+Tab select the next / previous item on the current
diagram, cycling through items() (z-order) and wrapping at either
end. If nothing is selected, Tab selects the first item and
Shift+Tab the last. Skipped while a text item has focus, for the
same reason arrow-key movement already guards on !focusItem().
Candidates use the same "what counts as a real selectable diagram
item" filter (QetGraphicsItem / DiagramTextItem / Conductor) already
established by Diagram::invertSelection(), so the cycling order
always matches what a user could reach by clicking.
Getting Tab to actually reach the scene needed two separate fixes,
each independently discovered by empirical testing rather than
assumption:
- QWidget (DiagramView) intercepts Tab/Backtab for widget focus-chain
traversal before generating a key event at all. Overriding
DiagramView::focusNextPrevChild() to return false disables that.
- QGraphicsScene (Diagram) has its own, separate item-focus-chain
traversal, checked before keyPressEvent() is ever reached. The
obvious fix -- overriding Diagram::focusNextPrevChild() the same
way -- silently does nothing on Qt 5, because
QGraphicsScene::focusNextPrevChild() only becomes virtual in Qt 6
(guarded by the QT6_VIRTUAL macro); a compile error surfaced this
immediately when attempted directly, rather than shipping a fix
that worked on Qt 6 and silently no-opped on Qt 5. Intercepting
QEvent::KeyPress in Diagram::event() instead is virtual on every Qt
version and sidesteps the scene's internal traversal entirely.
Also adds Diagram::selectAllConductors() / selectAllTextFields(),
wired up as two new actions in the existing select_all /
select_nothing / select_invert action group in
qetdiagrameditor.cpp, so they appear in the Edit menu and go through
the same QAction -> data() -> selectGroupTriggered() dispatch as the
existing selection commands.
Verified end-to-end in a real running session (Xvfb + xdotool) with
a multi-transistor schematic: Tab/Shift+Tab correctly move a single
selection forward/backward through elements and text fields
(confirmed via the properties panel updating to each new item and
the visual selection box moving on canvas); Tab/Shift+Tab from no
selection correctly select the first/last item; "Select all
conductors" and "Select all text fields" each correctly select every
matching item and deselect everything else.
See discussion #574.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
DiagramView::zoom() had the same unbounded scale() as the element editor:
a held scroll-wheel zoom could overflow the view transform. Clamp the
resulting scale to [m_min_zoom, m_max_zoom] before applying it.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HdWpDp3TrPKbHnv7YUcNJj
Before this commit :
ElementPropertiesWidget emit a signal of Diagram to edit an element, and
the signal goes up from Diagram -> DiagramView -> ProjectView ->
QetDiagramEditor and QetDiagramEditor call a static function.
Now :
ElementPropertiesWidget call the static function itself and that all.
All unnecessary signals are removed.
At time of closing project, if a master element(may be every linkable
element) is selected and the editor dock display a lot of available
slave, qet crash.
Use like normal selection + hold the ctrl key.
The code made in this commit are largely inspired by the the rubber band of QGraphicsView.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5716 bfdf4180-ca20-0410-9c96-a3a8aa849046
The keybord shortcut for texts group alignment change. Now it's ctrl + arrow-left/up/right
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5141 bfdf4180-ca20-0410-9c96-a3a8aa849046
The check box for this functionality in the DiagramProporties window was deleted.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4022 bfdf4180-ca20-0410-9c96-a3a8aa849046
-Set maximum Visualized scene to diagram scene rect*2.
-At first activation, view call zoom fit to see all of the diagram
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3861 bfdf4180-ca20-0410-9c96-a3a8aa849046
-Cette ligne, et les suivantes ci-dessous, seront ignorées--
M sources/aboutqet.cpp
M sources/bordertitleblock.cpp
M sources/conductorproperties.h
M sources/configdialog.cpp
M sources/configpages.cpp
M sources/configpages.h
M sources/createdxf.h
M sources/diagram.cpp
M sources/diagram.h
M sources/diagramcommands.cpp
M sources/diagramcommands.h
M sources/diagramprintdialog.cpp
M sources/diagramprintdialog.h
M sources/diagramschooser.cpp
M sources/diagramschooser.h
M sources/diagramview.cpp
M sources/diagramview.h
M sources/dvevent/dveventaddimage.cpp
M sources/dvevent/dveventaddshape.cpp
M sources/editor/arceditor.cpp
M sources/editor/arceditor.h
M sources/editor/editorcommands.cpp
M sources/editor/editorcommands.h
M sources/editor/elementitemeditor.h
M sources/editor/elementprimitivedecorator.cpp
M sources/editor/elementscene.cpp
M sources/editor/elementscene.h
M sources/editor/elementview.cpp
M sources/editor/ellipseeditor.cpp
M sources/editor/ellipseeditor.h
M sources/editor/esevent/eseventaddtext.cpp
M sources/editor/esevent/eseventaddtextfield.cpp
M sources/editor/esevent/eseventinterface.cpp
M sources/editor/graphicspart/customelementpart.h
M sources/editor/graphicspart/parttext.cpp
M sources/editor/graphicspart/parttext.h
M sources/editor/graphicspart/parttextfield.cpp
M sources/editor/graphicspart/parttextfield.h
M sources/editor/lineeditor.cpp
M sources/editor/lineeditor.h
M sources/editor/polygoneditor.cpp
M sources/editor/qetelementeditor.cpp
M sources/editor/qetelementeditor.h
M sources/editor/rectangleeditor.cpp
M sources/editor/rectangleeditor.h
M sources/editor/styleeditor.cpp
M sources/editor/styleeditor.h
M sources/editor/terminaleditor.cpp
M sources/editor/terminaleditor.h
M sources/editor/texteditor.cpp
M sources/editor/texteditor.h
M sources/editor/textfieldeditor.cpp
M sources/editor/textfieldeditor.h
M sources/editor/ui/elementpropertieseditorwidget.cpp
M sources/elementdefinition.cpp
M sources/elementdeleter.cpp
M sources/elementdeleter.h
M sources/elementdialog.cpp
M sources/elementscategorieslist.h
M sources/elementscategorieswidget.cpp
M sources/elementscategorieswidget.h
M sources/elementscategory.cpp
M sources/elementscategorydeleter.cpp
M sources/elementscategorydeleter.h
M sources/elementscategoryeditor.cpp
M sources/elementscategoryeditor.h
M sources/elementscollection.cpp
M sources/elementscollectioncache.cpp
M sources/elementspanel.cpp
M sources/elementspanel.h
M sources/elementspanelwidget.cpp
M sources/elementspanelwidget.h
M sources/elementtextsmover.h
M sources/exportdialog.cpp
M sources/exportdialog.h
M sources/exportproperties.cpp
M sources/exportpropertieswidget.cpp
M sources/exportpropertieswidget.h
M sources/genericpanel.cpp
M sources/integrationmoveelementshandler.cpp
M sources/integrationmoveelementshandler.h
M sources/interactivemoveelementshandler.cpp
M sources/nameslistwidget.cpp
M sources/nameslistwidget.h
M sources/newelementwizard.cpp
M sources/newelementwizard.h
M sources/nomenclature.cpp
M sources/nomenclature.h
M sources/projectconfigpages.cpp
M sources/projectview.cpp
M sources/projectview.h
M sources/qet.cpp
M sources/qetapp.cpp
M sources/qetapp.h
M sources/qetdiagrameditor.cpp
M sources/qetdiagrameditor.h
M sources/qetgraphicsitem/conductor.cpp
M sources/qetgraphicsitem/conductortextitem.cpp
M sources/qetgraphicsitem/customelement.cpp
M sources/qetgraphicsitem/diagramimageitem.cpp
M sources/qetgraphicsitem/diagramtextitem.cpp
M sources/qetgraphicsitem/diagramtextitem.h
M sources/qetgraphicsitem/element.cpp
M sources/qetgraphicsitem/ghostelement.cpp
M sources/qetgraphicsitem/qetshapeitem.cpp
M sources/qetgraphicsitem/terminal.cpp
M sources/qetgraphicsitem/terminal.h
M sources/qeticons.cpp
M sources/qeticons.h
M sources/qetmainwindow.cpp
M sources/qetmessagebox.cpp
M sources/qetmessagebox.h
M sources/qetprintpreviewdialog.cpp
M sources/qetprintpreviewdialog.h
M sources/qetproject.cpp
M sources/qetsingleapplication.cpp
M sources/qettabbar.h
M sources/qfilenameedit.cpp
M sources/qtextorientationspinboxwidget.cpp
M sources/qtextorientationspinboxwidget.h
M sources/qtextorientationwidget.cpp
M sources/qtextorientationwidget.h
M sources/richtext/richtexteditor.cpp
M sources/richtext/richtexteditor_p.h
M sources/richtext/ui_addlinkdialog.h
M sources/titleblock/dimensionwidget.h
M sources/titleblock/gridlayoutanimation.h
M sources/titleblock/helpercell.h
M sources/titleblock/integrationmovetemplateshandler.cpp
M sources/titleblock/integrationmovetemplateshandler.h
M sources/titleblock/qettemplateeditor.cpp
M sources/titleblock/qettemplateeditor.h
M sources/titleblock/templatecellsset.h
M sources/titleblock/templatecellwidget.cpp
M sources/titleblock/templatecellwidget.h
M sources/titleblock/templatecommands.cpp
M sources/titleblock/templatedeleter.cpp
M sources/titleblock/templatedeleter.h
M sources/titleblock/templatelocationchooser.cpp
M sources/titleblock/templatelocationchooser.h
M sources/titleblock/templatelocationsaver.cpp
M sources/titleblock/templatelocationsaver.h
M sources/titleblock/templatelogomanager.cpp
M sources/titleblock/templatelogomanager.h
M sources/titleblock/templateview.cpp
M sources/titleblock/templatevisualcell.h
M sources/titleblockcell.cpp
M sources/titleblocktemplate.cpp
M sources/treecoloranimation.h
M sources/ui/conductorpropertieswidget.cpp
M sources/ui/diagrampropertiesdialog.cpp
M sources/ui/diagramselection.cpp
M sources/ui/dialogautonum.cpp
M sources/ui/dialogwaiting.cpp
M sources/ui/elementpropertieswidget.cpp
M sources/ui/elementselectorwidget.cpp
M sources/ui/linksingleelementwidget.cpp
M sources/ui/masterpropertieswidget.cpp
M sources/ui/potentialtextsdialog.cpp
M sources/ui/projectpropertiesdialog.cpp
M sources/ui/selectautonumw.cpp
M sources/ui/titleblockpropertieswidget.cpp
M sources/ui/xrefpropertieswidget.cpp
M sources/undocommand/changeelementinformationcommand.cpp
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@3783 bfdf4180-ca20-0410-9c96-a3a8aa849046