umbrello 25.11.70
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
umlappprivate.h
Go to the documentation of this file.
1/*
2 SPDX-License-Identifier: GPL-2.0-or-later
3 SPDX-FileCopyrightText: 2002-2022 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
4*/
5
6#ifndef UMLAPPPRIVATE_H
7#define UMLAPPPRIVATE_H
8
9// app includes
10#include "cmds.h"
11#include "finddialog.h"
12#include "findresults.h"
13#include "uml.h"
14#include "umldoc.h"
15#include "diagramswindow.h"
16#include "objectswindow.h"
17#include "stereotypeswindow.h"
18
19// kde includes
20#include <KActionCollection>
21#include <KToggleAction>
22#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
23#include <ktexteditor/configinterface.h>
24#endif
25#include <ktexteditor/document.h>
26#include <ktexteditor/editor.h>
27#include <ktexteditor/view.h>
28
29// qt includes
30#include <QDesktopServices>
31#include <QFile>
32#include <QFileInfo>
33#include <QFont>
34#include <QListWidget>
35#include <QObject>
36#ifdef WEBKIT_WELCOMEPAGE
37#include <QWebView>
38#else
39#include <QTextBrowser>
40#endif
41
42class QWidget;
43
44
51class UMLAppPrivate : public QObject
52{
53 Q_OBJECT
54public:
58 QListWidget *logWindow;
59 KToggleAction *viewDiagramsWindow;
60 KToggleAction *viewObjectsWindow;
61 KToggleAction *viewStereotypesWindow;
62 KToggleAction *viewWelcomeWindow;
66 QDockWidget *welcomeWindow;
67 QDockWidget *editorWindow;
68
69 KTextEditor::Editor *editor;
70 KTextEditor::View *view;
71 KTextEditor::Document *document;
72
73 explicit UMLAppPrivate(UMLApp *_parent)
74 : parent(_parent),
75 findDialog(_parent),
76 viewDiagramsWindow(nullptr),
77 viewObjectsWindow(nullptr),
78 viewStereotypesWindow(nullptr),
79 viewWelcomeWindow(nullptr),
80 diagramsWindow(nullptr),
81 objectsWindow(nullptr),
82 stereotypesWindow(nullptr),
83 welcomeWindow(nullptr),
84 editorWindow(nullptr),
85 view(nullptr),
86 document(nullptr)
87 {
88 /* TODO: On the call to KTextEditor::Editor::instance() Valgrind reports
89 "Conditional jump or move depends on uninitialised value(s)".
90 */
91 editor = KTextEditor::Editor::instance();
92 logWindow = new QListWidget;
93 QFont mono;
94 mono.setFamily(QStringLiteral("Monospace"));
95 logWindow->setFont(mono);
96 connect(logWindow, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotLogWindowItemDoubleClicked(QListWidgetItem *)));
97 }
98
100 {
101 delete diagramsWindow;
102 delete editorWindow;
103 delete logWindow;
104 delete objectsWindow;
105 delete stereotypesWindow;
106 delete welcomeWindow;
107 }
108
109 bool openFileInEditor(const QUrl &file, int startCursor=0, int endCursor=0);
110
111public Q_SLOTS:
112 void slotLogWindowItemDoubleClicked(QListWidgetItem *item)
113 {
114 QStringList columns = item->text().split(QChar::fromLatin1(':'));
115
116 openFileInEditor(QUrl::fromLocalFile(columns[0]), columns[1].toInt()-1, columns[2].toInt());
117 }
118
120 {
121 // create the tree viewer
122 diagramsWindow = new DiagramsWindow(i18n("&Diagrams"), parent);
123 parent->addDockWidget(Qt::LeftDockWidgetArea, diagramsWindow);
124
125 viewDiagramsWindow = parent->actionCollection()->add<KToggleAction>(QStringLiteral("view_show_diagrams"));
126 connect(viewDiagramsWindow, SIGNAL(triggered(bool)), diagramsWindow, SLOT(setVisible(bool)));
127 }
128
130 {
131 // create the object window
132 objectsWindow = new ObjectsWindow(i18n("&UML Objects"), parent);
133 parent->addDockWidget(Qt::LeftDockWidgetArea, objectsWindow);
134
135 viewObjectsWindow = parent->actionCollection()->add<KToggleAction>(QStringLiteral("view_show_objects"));
136 connect(viewObjectsWindow, SIGNAL(triggered(bool)), objectsWindow, SLOT(setVisible(bool)));
137 }
138
140 {
141 // create the tree viewer
142 stereotypesWindow = new StereotypesWindow(i18n("&Stereotypes"), parent);
143 parent->addDockWidget(Qt::LeftDockWidgetArea, stereotypesWindow);
144
145 viewStereotypesWindow = parent->actionCollection()->add<KToggleAction>(QStringLiteral("view_show_stereotypes"));
146 connect(viewStereotypesWindow, SIGNAL(triggered(bool)), stereotypesWindow, SLOT(setVisible(bool)));
147 }
148
150 {
151 QString file = findWelcomeFile();
152 if (file.isEmpty())
153 return;
154 QString html = readWelcomeFile(file);
155 if (html.isEmpty())
156 return;
157 // qDebug() << html;
158 welcomeWindow = new QDockWidget(i18n("Welcome"), parent);
159 welcomeWindow->setObjectName(QStringLiteral("WelcomeDock"));
160#ifdef WEBKIT_WELCOMEPAGE
161 QWebView *view = new QWebView;
162 view->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
163 view->setContextMenuPolicy(Qt::NoContextMenu);
164 connect(view, SIGNAL(linkClicked(const QUrl)), this, SLOT(slotWelcomeWindowLinkClicked(const QUrl)));
165 view->setHtml(html);
166 view->show();
167 welcomeWindow->setWidget(view);
168#else
169 QTextBrowser *tb = new QTextBrowser(dynamic_cast<QWidget*>(this));
170 tb->setOpenExternalLinks(true);
171 tb->setOpenLinks(false);
172 tb->setHtml(html);
173 connect(tb, SIGNAL(anchorClicked(const QUrl)), this, SLOT(slotWelcomeWindowLinkClicked(const QUrl)));
174 welcomeWindow->setWidget(tb);
175#endif
176 parent->addDockWidget(Qt::RightDockWidgetArea, welcomeWindow);
177
178 viewWelcomeWindow = parent->actionCollection()->add<KToggleAction>(QStringLiteral("view_show_welcome"));
179 connect(viewWelcomeWindow, SIGNAL(triggered(bool)), welcomeWindow, SLOT(setVisible(bool)));
180 }
181
182 void slotWelcomeWindowLinkClicked(const QUrl &url)
183 {
184 //qDebug() << url;
185 if (url.scheme() == QStringLiteral("mailto") || url.scheme().startsWith(QStringLiteral("http"))) {
186 QDesktopServices::openUrl(url);
187 return;
188 }
189 QStringList list = url.toString().split(QLatin1Char('-'));
190 list.removeLast();
191 QString key;
192 for(const QString &s: list) {
193 QString a = s;
194 a[0] = a[0].toUpper();
195 key.append(a);
196 }
198 if (type == Uml::DiagramType::Undefined)
199 return;
200 QString diagramName = UMLApp::app()->document()->createDiagramName(type);
201 if (!diagramName.isEmpty())
203 }
204
205private:
206 QString findWelcomeFile();
207 QString readWelcomeFile(const QString &file);
208};
209
210#endif
Definition diagramswindow.h:15
Definition finddialog.h:20
Definition findresults.h:25
Definition objectswindow.h:16
Definition stereotypeswindow.h:15
KTextEditor::Editor * editor
Definition umlappprivate.h:69
bool openFileInEditor(const QUrl &file, int startCursor=0, int endCursor=0)
Definition umlappprivate.cpp:128
void createStereotypesWindow()
Definition umlappprivate.h:139
KTextEditor::View * view
Definition umlappprivate.h:70
DiagramsWindow * diagramsWindow
Definition umlappprivate.h:63
void createWelcomeWindow()
Definition umlappprivate.h:149
QString findWelcomeFile()
Definition umlappprivate.cpp:19
KToggleAction * viewObjectsWindow
Definition umlappprivate.h:60
~UMLAppPrivate()
Definition umlappprivate.h:99
UMLApp * parent
Definition umlappprivate.h:55
FindDialog findDialog
Definition umlappprivate.h:56
KTextEditor::Document * document
Definition umlappprivate.h:71
QString readWelcomeFile(const QString &file)
Definition umlappprivate.cpp:67
KToggleAction * viewStereotypesWindow
Definition umlappprivate.h:61
KToggleAction * viewDiagramsWindow
Definition umlappprivate.h:59
FindResults findResults
Definition umlappprivate.h:57
StereotypesWindow * stereotypesWindow
Definition umlappprivate.h:65
QDockWidget * welcomeWindow
Definition umlappprivate.h:66
void createObjectsWindow()
Definition umlappprivate.h:129
void slotWelcomeWindowLinkClicked(const QUrl &url)
Definition umlappprivate.h:182
void slotLogWindowItemDoubleClicked(QListWidgetItem *item)
Definition umlappprivate.h:112
UMLAppPrivate(UMLApp *_parent)
Definition umlappprivate.h:73
QListWidget * logWindow
Logging window.
Definition umlappprivate.h:58
QDockWidget * editorWindow
Definition umlappprivate.h:67
void createDiagramsWindow()
Definition umlappprivate.h:119
ObjectsWindow * objectsWindow
Definition umlappprivate.h:64
KToggleAction * viewWelcomeWindow
Definition umlappprivate.h:62
Definition uml.h:85
UMLDoc * document() const
Definition uml.cpp:1063
void executeCommand(QUndoCommand *cmd)
Definition uml.cpp:3433
static UMLApp * app()
Definition uml.cpp:304
QString createDiagramName(Uml::DiagramType::Enum type, bool askForName=true)
Definition umldoc.cpp:1530
Definition cmdcreatediagram.h:20
Enum fromString(const QString &item)
Definition basictypes.cpp:218
Enum
Definition basictypes.h:63
@ Undefined
Definition basictypes.h:66
QString a
Definition petalnode.cpp:13