mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-07 20:34:14 +02:00
ce0e7e6867
Typing a cell reference into the "Atteindre un élément" popup now offers "Case B13"; Enter zooms the view onto that cell with one cell of margin. The cell is read the way the border labels it: row letter(s) then column number, honouring the "columns start at 0" setting and multi-letter rows (AA, AB...). Cells outside the folio are not offered. BorderTitleBlock::cellRect() is the reverse of convertPosition(); a round trip over every cell of a 30x23 folio, under both column-numbering settings, returned the same cell for all 1380. When an element is labelled exactly like the cell (K1), the element stays first so Enter keeps its old meaning; the cell is listed after it. DiagramView::zoomToRect() re-centres from a queued call: zooming in makes the scroll bars appear, and the viewport resize that follows is anchored under the mouse (setResizeAnchor(AnchorUnderMouse)), which otherwise scrolls the view away from the cell straight after the zoom. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G2d2Zi8BfrYRPX88zhaoFG
71 lines
2.0 KiB
C++
71 lines
2.0 KiB
C++
/*
|
|
Copyright 2006-2026 The QElectroTech Team
|
|
This file is part of QElectroTech.
|
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef JUMPTOELEMENTDIALOG_H
|
|
#define JUMPTOELEMENTDIALOG_H
|
|
|
|
#include <QDialog>
|
|
#include <QPointer>
|
|
|
|
class Diagram;
|
|
class Element;
|
|
class QLineEdit;
|
|
class QListWidget;
|
|
|
|
/**
|
|
@brief The JumpToElementDialog class
|
|
A lightweight, transient "quick open" popup: type part of an element's
|
|
label or other information to live-filter the elements on a diagram,
|
|
then Enter to select the chosen element on the diagram and scroll it
|
|
into view. Typing a cell of the border instead (ex : B13) offers to
|
|
zoom on that cell. Up/Down move through the filtered list, Escape cancels
|
|
without changing the current selection.
|
|
*/
|
|
class JumpToElementDialog : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit JumpToElementDialog(Diagram *diagram, QWidget *parent = nullptr);
|
|
~JumpToElementDialog() override;
|
|
|
|
protected:
|
|
bool eventFilter(QObject *watched, QEvent *event) override;
|
|
|
|
private slots:
|
|
void updateFilteredList(const QString &filter_text);
|
|
void activateCurrentItem();
|
|
|
|
private:
|
|
void buildCandidates();
|
|
void zoomToCell(const QRectF &cell_rect);
|
|
|
|
struct Candidate {
|
|
QPointer<Element> element;
|
|
QString label;
|
|
QString display_text;
|
|
QString search_text;
|
|
};
|
|
|
|
QPointer<Diagram> m_diagram;
|
|
QList<Candidate> m_candidates;
|
|
QLineEdit *m_filter_edit;
|
|
QListWidget *m_result_list;
|
|
};
|
|
|
|
#endif // JUMPTOELEMENTDIALOG_H
|