Double click a TerminalStripItem open the editor

This commit is contained in:
joshua
2022-12-02 18:12:47 +01:00
parent a18cd2461f
commit 81640015e5
7 changed files with 93 additions and 8 deletions

View File

@@ -17,6 +17,8 @@
*/ */
#include "terminalstripitem.h" #include "terminalstripitem.h"
#include "../../qetgraphicsitem/qgraphicsitemutility.h" #include "../../qetgraphicsitem/qgraphicsitemutility.h"
#include "../terminalstrip.h"
#include "../ui/terminalstripeditorwindow.h"
TerminalStripItem::TerminalStripItem(QPointer<TerminalStrip> strip, QGraphicsItem *parent) : TerminalStripItem::TerminalStripItem(QPointer<TerminalStrip> strip, QGraphicsItem *parent) :
QetGraphicsItem{parent}, QetGraphicsItem{parent},
@@ -53,5 +55,12 @@ QRectF TerminalStripItem::boundingRect() const
* @return usual name of this item * @return usual name of this item
*/ */
QString TerminalStripItem::name() const { QString TerminalStripItem::name() const {
return tr("plan de bornes"); return tr("plan de bornes");
}
void TerminalStripItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED (event);
TerminalStripEditorWindow::edit(m_strip);
} }

View File

@@ -39,6 +39,8 @@ class TerminalStripItem : public QetGraphicsItem
QRectF boundingRect() const override; QRectF boundingRect() const override;
QString name() const override; QString name() const override;
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
private: private:
QPointer<TerminalStrip> m_strip; QPointer<TerminalStrip> m_strip;
TerminalStripDrawer m_drawer; TerminalStripDrawer m_drawer;

View File

@@ -19,6 +19,8 @@
#include "../UndoCommand/addterminalstripcommand.h" #include "../UndoCommand/addterminalstripcommand.h"
#include "freeterminaleditor.h" #include "freeterminaleditor.h"
#include "../../qetapp.h"
#include "../../qetdiagrameditor.h"
#include "../../qetproject.h" #include "../../qetproject.h"
#include "../realterminal.h" #include "../realterminal.h"
#include "../terminalstrip.h" #include "../terminalstrip.h"
@@ -27,6 +29,8 @@
#include "terminalstripeditorwindow.h" #include "terminalstripeditorwindow.h"
#include "terminalstriptreedockwidget.h" #include "terminalstriptreedockwidget.h"
QPointer<TerminalStripEditorWindow> TerminalStripEditorWindow::window_;
static const int EMPTY_PAGE = 0; static const int EMPTY_PAGE = 0;
static const int FREE_TERMINAL_PAGE = 1; static const int FREE_TERMINAL_PAGE = 1;
static const int TERMINAL_STRIP_PAGE = 2; static const int TERMINAL_STRIP_PAGE = 2;
@@ -35,6 +39,16 @@ static const int TERMINAL_STRIP_PAGE = 2;
* @param project * @param project
* @param parent * @param parent
*/ */
void TerminalStripEditorWindow::edit(TerminalStrip *strip)
{
if (const auto project_ = strip->project())
{
auto editor_ = TerminalStripEditorWindow::instance(project_, QETApp::diagramEditor(project_));
editor_->setCurrentStrip(strip);
editor_->show();
}
}
TerminalStripEditorWindow::TerminalStripEditorWindow(QETProject *project, QWidget *parent) : TerminalStripEditorWindow::TerminalStripEditorWindow(QETProject *project, QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
ui(new Ui::TerminalStripEditorWindow), ui(new Ui::TerminalStripEditorWindow),
@@ -59,7 +73,11 @@ TerminalStripEditorWindow::TerminalStripEditorWindow(QETProject *project, QWidge
*/ */
TerminalStripEditorWindow::~TerminalStripEditorWindow() TerminalStripEditorWindow::~TerminalStripEditorWindow()
{ {
delete ui; delete ui;
}
void TerminalStripEditorWindow::setCurrentStrip(TerminalStrip *strip) {
m_tree_dock->setSelectedStrip(strip);
} }
/** /**

View File

@@ -19,6 +19,8 @@
#define TERMINALSTRIPEDITORWINDOW_H #define TERMINALSTRIPEDITORWINDOW_H
#include <QMainWindow> #include <QMainWindow>
#include <QMutex>
#include <QPointer>
class QETProject; class QETProject;
class TerminalStripTreeDockWidget; class TerminalStripTreeDockWidget;
@@ -35,16 +37,47 @@ class TerminalStripEditorWindow : public QMainWindow
{ {
Q_OBJECT Q_OBJECT
public: private:
//We need to use a QPointer instead of a raw pointer because when window_
//have got a parent widget, the parent widget can delete the window_
//instance in her destrucor and then window_ become a dangling pointer.
static QPointer<TerminalStripEditorWindow> window_;
public:
static TerminalStripEditorWindow* instance(QETProject *project, QWidget *parent = nullptr) {
static QMutex mutex_;
if (!window_) {
mutex_.lock();
if (!window_)
window_ = new TerminalStripEditorWindow{project, parent};
mutex_.unlock();
}
return window_;
}
static void dropInstance () {
static QMutex mutex;
if (window_) {
mutex.lock();
window_->deleteLater();
window_.clear();
mutex.unlock();
}
}
static void edit(TerminalStrip *strip);
public:
explicit TerminalStripEditorWindow(QETProject *project, QWidget *parent = nullptr); explicit TerminalStripEditorWindow(QETProject *project, QWidget *parent = nullptr);
~TerminalStripEditorWindow(); ~TerminalStripEditorWindow();
void setCurrentStrip(TerminalStrip *strip);
private slots: private slots:
void on_m_add_terminal_strip_triggered(); void on_m_add_terminal_strip_triggered();
void on_m_remove_terminal_triggered(); void on_m_remove_terminal_triggered();
void on_m_reload_triggered(); void on_m_reload_triggered();
void on_m_button_box_clicked(QAbstractButton *button); void on_m_button_box_clicked(QAbstractButton *button);
void on_m_stacked_widget_currentChanged(int arg1); void on_m_stacked_widget_currentChanged(int arg1);
private: private:

View File

@@ -36,6 +36,7 @@
#include "ui/aboutqetdialog.h" #include "ui/aboutqetdialog.h"
#include "ui/configpage/generalconfigurationpage.h" #include "ui/configpage/generalconfigurationpage.h"
#include "machine_info.h" #include "machine_info.h"
#include "TerminalStrip/ui/terminalstripeditorwindow.h"
#include <cstdlib> #include <cstdlib>
#include <iostream> #include <iostream>
@@ -159,6 +160,7 @@ QETApp::~QETApp()
ElementFactory::dropInstance(); ElementFactory::dropInstance();
ElementPictureFactory::dropInstance(); ElementPictureFactory::dropInstance();
MachineInfo::dropInstance(); MachineInfo::dropInstance();
TerminalStripEditorWindow::dropInstance();
} }
@@ -1128,7 +1130,28 @@ QFont QETApp::indiTextsItemFont(qreal size)
*/ */
QList<QETDiagramEditor *> QETApp::diagramEditors() QList<QETDiagramEditor *> QETApp::diagramEditors()
{ {
return(QETApp::instance() -> detectWindows<QETDiagramEditor>()); return(QETApp::instance() -> detectWindows<QETDiagramEditor>());
}
/**
* @brief QETApp::diagramEditor
* @param project
* @return The diagram editor of @a project or nullptr.
*/
QETDiagramEditor *QETApp::diagramEditor(QETProject *project)
{
for (const auto &editor : QETApp::instance()->detectWindows<QETDiagramEditor>())
{
for (const auto &project_view : editor->openedProjects())
{
if (project_view->project() == project)
{
return editor;
}
}
}
return nullptr;
} }
/** /**

View File

@@ -148,7 +148,8 @@ class QETApp : public QObject
static QFont indiTextsItemFont (qreal = -1.0); static QFont indiTextsItemFont (qreal = -1.0);
static QETDiagramEditor *diagramEditorForFile(const QString &); static QETDiagramEditor *diagramEditorForFile(const QString &);
static QETDiagramEditor *diagramEditorAncestorOf (const QWidget *child); static QETDiagramEditor *diagramEditorAncestorOf (const QWidget *child);
static QList<QETDiagramEditor *> diagramEditors(); static QList<QETDiagramEditor *> diagramEditors();
static QETDiagramEditor* diagramEditor(QETProject *project);
static QList<QETElementEditor *> elementEditors(); static QList<QETElementEditor *> elementEditors();
static QList<QETElementEditor *> elementEditors(QETProject *); static QList<QETElementEditor *> elementEditors(QETProject *);
static QList<QETTitleBlockTemplateEditor *> titleBlockTemplateEditors(); static QList<QETTitleBlockTemplateEditor *> titleBlockTemplateEditors();

View File

@@ -447,8 +447,7 @@ void QETDiagramEditor::setUpActions()
{ {
if (auto project = this->currentProject()) if (auto project = this->currentProject())
{ {
auto tsew {new TerminalStripEditorWindow{project, this}}; TerminalStripEditorWindow::instance(project, this)->show();
tsew->show();
} }
}); });