umbrello 26.03.70-1a62d36
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 "birdview.h"
11#include "birdviewdockwidget.h"
12#include "cmdcreatediagram.h"
13#include "debug_utils.h"
14#include "diagramswindow.h"
15#include "docwindow.h"
16#include "finddialog.h"
17#include "findresults.h"
18#include "objectswindow.h"
19#include "stereotypeswindow.h"
20#include "umlapp.h"
21#include "umldoc.h"
22#include "umllistview.h"
23#include "umlview.h"
24
25// kde includes
26#include <KActionCategory>
27#include <KActionCollection>
28#include <KToggleAction>
29#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
30#include <ktexteditor/configinterface.h>
31#endif
32#include <ktexteditor/document.h>
33#include <ktexteditor/editor.h>
34#include <ktexteditor/view.h>
35
36// qt includes
37#include <QDesktopServices>
38#include <QFile>
39#include <QFileInfo>
40#include <QFont>
41#include <QListWidget>
42#include <QObject>
43#include <QUndoView>
44#ifdef WEBKIT_WELCOMEPAGE
45#include <QWebView>
46#else
47#include <QTextBrowser>
48#endif
49
50class QWidget;
51
52
59class UMLAppPrivate : public QObject
60{
61 Q_OBJECT
62public:
66 QListWidget *logWindow;
73 QUndoView* pQUndoView;
74
76 QDockWidget *editorWindow;
77 QDockWidget *logDock;
78 QDockWidget *welcomeWindow;
79 QDockWidget* cmdHistoryDock;
80 QDockWidget* debugDock;
81 QDockWidget* documentationDock;
82 QDockWidget* listDock;
83
84 KTextEditor::Editor *editor;
85 KTextEditor::View *view;
86 KTextEditor::Document *document;
87 KActionCategory *dockCategory;
88
89 explicit UMLAppPrivate(UMLApp *_parent)
90 : parent(_parent)
91 , findDialog(_parent)
92 , diagramsWindow(nullptr)
93 , objectsWindow(nullptr)
94 , stereotypesWindow(nullptr)
95 , birdView(nullptr)
96 , listView(nullptr)
97 , pQUndoView(nullptr)
98 , editorWindow(nullptr)
99 , welcomeWindow(nullptr)
100 , debugDock(nullptr)
101 , view(nullptr)
102 , document(nullptr)
103 , dockCategory(new KActionCategory(i18n("Show/hide window"), parent->actionCollection()))
104 {
105 }
106
108 {
109 delete diagramsWindow;
110 delete editorWindow;
111 delete logWindow;
112 delete objectsWindow;
113 delete stereotypesWindow;
114 delete welcomeWindow;
115 delete birdView;
116 delete listView;
117 }
118
119 bool openFileInEditor(const QUrl &file, int startCursor=0, int endCursor=0);
120
122 {
123 const bool showDebugWindows = optionState.generalState.showDebugWindows;
124
125 if (showDebugWindows) {
127 if (debugDock && logDock)
128 parent->tabifyDockWidget(logDock, debugDock);
129#ifdef ENABLE_UML_OBJECTS_WINDOW
132 parent->tabifyDockWidget(diagramsWindow, objectsWindow);
133#endif
134 }
135
136 if (debugDock) {
137 debugDock->setVisible(showDebugWindows);
138 debugDock->toggleViewAction()->setChecked(showDebugWindows);
139 }
140 if (objectsWindow) {
141 objectsWindow->setVisible(showDebugWindows);
142 objectsWindow->toggleViewAction()->setChecked(showDebugWindows);
143 }
144 Tracer::onSettingsChanged(optionState);
145 }
146
147public Q_SLOTS:
148 void slotLogWindowItemDoubleClicked(QListWidgetItem *item)
149 {
150 QStringList columns = item->text().split(QChar::fromLatin1(':'));
151
152 openFileInEditor(QUrl::fromLocalFile(columns[0]), columns[1].toInt()-1, columns[2].toInt());
153 }
154
156 {
166
167 parent->tabifyDockWidget(documentationDock, cmdHistoryDock);
168 parent->tabifyDockWidget(cmdHistoryDock, logDock);
169 //tabifyDockWidget(m_cmdHistoryDock, m_propertyDock); //:TODO:
170 parent->tabifyDockWidget(listDock, stereotypesWindow);
171 parent->tabifyDockWidget(stereotypesWindow, diagramsWindow);
172 if (welcomeWindow) {
173 parent->tabifyDockWidget(welcomeWindow, birdViewDock);
174 welcomeWindow->raise();
175 }
176 listDock->raise();
177 }
178
180 {
181 /* TODO: On the call to KTextEditor::Editor::instance() Valgrind reports
182 "Conditional jump or move depends on uninitialised value(s)".
183 */
184 editor = KTextEditor::Editor::instance();
185 }
186
188 {
189 birdViewDock = new BirdViewDockWidget(i18n("&Bird's eye view"), parent);
190 birdViewDock->setObjectName(QStringLiteral("BirdViewDock"));
191 parent->addDockWidget(Qt::RightDockWidgetArea, birdViewDock);
192 dockCategory->addAction(QStringLiteral("view_show_bird"), birdViewDock->toggleViewAction());
193 }
194
196 {
197 cmdHistoryDock = new QDockWidget(i18n("Co&mmand history"), parent);
198 cmdHistoryDock->setObjectName(QStringLiteral("CmdHistoryDock"));
199 parent->addDockWidget(Qt::LeftDockWidgetArea, cmdHistoryDock);
200 pQUndoView = new QUndoView(cmdHistoryDock);
202 pQUndoView->setStack(parent->m_pUndoStack);
203 cmdHistoryDock->setWidget(pQUndoView);
204 dockCategory->addAction(QStringLiteral("view_show_undo"), cmdHistoryDock->toggleViewAction());
205 }
206
208 {
209 if (debugDock)
210 return;
211
212 debugDock = new QDockWidget(i18n("&Debug"), parent);
213 debugDock->setObjectName(QStringLiteral("DebugDock"));
214 parent->addDockWidget(Qt::LeftDockWidgetArea, debugDock);
215 debugDock->setWidget(Tracer::instance());
216 dockCategory->addAction(QStringLiteral("view_show_debug"), debugDock->toggleViewAction());
217 }
218
220 {
221 diagramsWindow = new DiagramsWindow(i18n("&Diagrams"), parent);
222 parent->addDockWidget(Qt::LeftDockWidgetArea, diagramsWindow);
223 dockCategory->addAction(QStringLiteral("view_show_diagrams"), diagramsWindow->toggleViewAction());
224 }
225
227 {
228 documentationDock = new QDockWidget(i18n("Doc&umentation"), parent);
229 documentationDock->setObjectName(QStringLiteral("DocumentationDock"));
230 parent->addDockWidget(Qt::LeftDockWidgetArea, documentationDock);
232 docWindow->setObjectName(QStringLiteral("DOCWINDOW"));
233 documentationDock->setWidget(docWindow);
234 dockCategory->addAction(QStringLiteral("view_show_doc"), documentationDock->toggleViewAction());
235 }
236
238 {
239 logWindow = new QListWidget;
240 QFont mono;
241 mono.setFamily(QStringLiteral("Monospace"));
242 logWindow->setFont(mono);
243 connect(logWindow, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotLogWindowItemDoubleClicked(QListWidgetItem *)));
244
245 logDock = new QDockWidget(i18n("&Log"), parent);
246 logDock->setObjectName(QStringLiteral("LogDock"));
247 parent->addDockWidget(Qt::LeftDockWidgetArea, logDock);
248 logDock->setWidget(logWindow);
249 dockCategory->addAction(QStringLiteral("view_show_log"), logDock->toggleViewAction());
250 }
251
253 {
254 if (objectsWindow)
255 return;
256
257 objectsWindow = new ObjectsWindow(i18n("&UML Objects"), parent);
258 parent->addDockWidget(Qt::LeftDockWidgetArea, objectsWindow);
259 dockCategory->addAction(QStringLiteral("view_show_objects"), objectsWindow->toggleViewAction());
260 }
261
263 {
264 //m_propertyDock = new QDockWidget(i18n("&Properties"), this);
265 //m_propertyDock->setObjectName(QStringLiteral("PropertyDock"));
266 //addDockWidget(Qt::LeftDockWidgetArea, m_propertyDock); //:TODO:
267 }
268
270 {
271 stereotypesWindow = new StereotypesWindow(i18n("&Stereotypes"), parent);
272 parent->addDockWidget(Qt::LeftDockWidgetArea, stereotypesWindow);
273 dockCategory->addAction(QStringLiteral("view_show_stereotypes"), stereotypesWindow->toggleViewAction());
274 }
275
277 {
278 listDock = new QDockWidget(i18n("&Tree View"), parent);
279 listDock->setObjectName(QStringLiteral("TreeViewDock"));
280 parent->addDockWidget(Qt::LeftDockWidgetArea, listDock);
282 //m_listView->setSorting(-1);
284 listView->init();
285 listDock->setWidget(listView);
286 dockCategory->addAction(QStringLiteral("view_show_tree"), listDock->toggleViewAction());
287 }
288
290 {
291 QString file = findWelcomeFile();
292 if (file.isEmpty())
293 return;
294 QString html = readWelcomeFile(file);
295 if (html.isEmpty())
296 return;
297 // qDebug() << html;
298 welcomeWindow = new QDockWidget(i18n("Welcome"), parent);
299 welcomeWindow->setObjectName(QStringLiteral("WelcomeDock"));
300#ifdef WEBKIT_WELCOMEPAGE
301 QWebView *view = new QWebView;
302 view->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
303 view->setContextMenuPolicy(Qt::NoContextMenu);
304 connect(view, SIGNAL(linkClicked(const QUrl)), this, SLOT(slotWelcomeWindowLinkClicked(const QUrl)));
305 view->setHtml(html);
306 view->show();
307 welcomeWindow->setWidget(view);
308#else
309 QTextBrowser *tb = new QTextBrowser(dynamic_cast<QWidget*>(this));
310 tb->setOpenExternalLinks(true);
311 tb->setOpenLinks(false);
312 tb->setHtml(html);
313 connect(tb, SIGNAL(anchorClicked(const QUrl)), this, SLOT(slotWelcomeWindowLinkClicked(const QUrl)));
314 welcomeWindow->setWidget(tb);
315#endif
316 parent->addDockWidget(Qt::RightDockWidgetArea, welcomeWindow);
317 dockCategory->addAction(QStringLiteral("view_show_welcome"), welcomeWindow->toggleViewAction());
318 }
319
320 void slotWelcomeWindowLinkClicked(const QUrl &url)
321 {
322 //qDebug() << url;
323 if (url.scheme() == QStringLiteral("mailto") || url.scheme().startsWith(QStringLiteral("http"))) {
324 QDesktopServices::openUrl(url);
325 return;
326 }
327 QStringList list = url.toString().split(QLatin1Char('-'));
328 list.removeLast();
329 QString key;
330 for(const QString &s: list) {
331 QString a = s;
332 a[0] = a[0].toUpper();
333 key.append(a);
334 }
336 if (type == Uml::DiagramType::Undefined)
337 return;
338 QString diagramName = UMLApp::app()->document()->createDiagramName(type);
339 if (!diagramName.isEmpty())
341 }
342
347 {
348 if (birdView) {
349 delete birdView;
350 }
352 connect(birdView, SIGNAL(viewPositionChanged(QPointF)), this, SLOT(slotBirdViewChanged(QPointF)));
353 connect(birdViewDock, SIGNAL(sizeChanged(QSize)), birdView, SLOT(slotDockSizeChanged(QSize)));
354 }
355
357 {
358 disconnect(birdView, SIGNAL(viewPositionChanged(QPointF)), this, SLOT(slotBirdViewChanged(QPointF)));
359 disconnect(birdViewDock, SIGNAL(sizeChanged(QSize)), birdView, SLOT(slotDockSizeChanged(QSize)));
360
361 if (birdView) {
362 delete birdView;
363 }
364 birdView = nullptr;
365 }
366
371 void slotBirdViewChanged(const QPointF& delta)
372 {
375 QPointF oldCenter = view->mapToScene(view->viewport()->rect().center());
376 QPointF newCenter = oldCenter + delta;
377 view->centerOn(newCenter);
378 // DEBUG() << "view moved with: " << delta;
380 }
381
382private:
383 QString findWelcomeFile();
384 QString readWelcomeFile(const QString &file);
385};
386
387#endif
The class BirdViewDockWidget contains the bird view.
Definition: birdviewdockwidget.h:19
The class BirdView controls the view of the whole scene.
Definition: birdview.h:30
void setSlotsEnabled(bool enabled)
Definition: birdview.cpp:222
Definition: diagramswindow.h:15
Definition: docwindow.h:25
Definition: finddialog.h:20
Definition: findresults.h:25
Definition: objectswindow.h:16
bool showDebugWindows
Definition: optionstate.h:66
Definition: optionstate.h:314
GeneralState generalState
Definition: optionstate.h:326
Definition: stereotypeswindow.h:15
static Tracer * instance()
Definition: debug_utils.cpp:113
static void onSettingsChanged(const Settings::OptionState &state)
Definition: debug_utils.cpp:159
Definition: umlapp.h:85
UMLDoc * document() const
Definition: umlapp.cpp:948
void executeCommand(QUndoCommand *cmd)
Definition: umlapp.cpp:3265
static UMLApp * app()
Definition: umlapp.cpp:284
QUndoStack * m_pUndoStack
UndoStack used to store actions, to provide Undo/Redo feature.
Definition: umlapp.h:450
UMLView * currentView() const
Definition: umlapp.cpp:3019
Definition: umlappprivate.h:60
KTextEditor::Editor * editor
Definition: umlappprivate.h:84
bool openFileInEditor(const QUrl &file, int startCursor=0, int endCursor=0)
Definition: umlappprivate.cpp:128
void createStereotypesWindow()
Definition: umlappprivate.h:269
KTextEditor::View * view
Definition: umlappprivate.h:85
void deleteBirdView()
Definition: umlappprivate.h:356
void createCommandHistoryWindow()
Definition: umlappprivate.h:195
DiagramsWindow * diagramsWindow
Definition: umlappprivate.h:67
void createWelcomeWindow()
Definition: umlappprivate.h:289
void createTreeWindow()
Definition: umlappprivate.h:276
QString findWelcomeFile()
Definition: umlappprivate.cpp:19
void onSettingsChanged(const Settings::OptionState &optionState)
Definition: umlappprivate.h:121
~UMLAppPrivate()
Definition: umlappprivate.h:107
void createDocumentationWindow()
Definition: umlappprivate.h:226
void slotBirdViewChanged(const QPointF &delta)
Definition: umlappprivate.h:371
UMLApp * parent
Definition: umlappprivate.h:63
FindDialog findDialog
Definition: umlappprivate.h:64
KTextEditor::Document * document
Definition: umlappprivate.h:86
QString readWelcomeFile(const QString &file)
Definition: umlappprivate.cpp:67
void createLogWindow()
Definition: umlappprivate.h:237
FindResults findResults
Definition: umlappprivate.h:65
void createBirdView(UMLView *view)
Definition: umlappprivate.h:346
KActionCategory * dockCategory
Definition: umlappprivate.h:87
StereotypesWindow * stereotypesWindow
Definition: umlappprivate.h:69
void createPropertyWindow()
Definition: umlappprivate.h:262
QDockWidget * debugDock
Contains the debug DocWindow widget.
Definition: umlappprivate.h:80
DocWindow * docWindow
Documentation window.
Definition: umlappprivate.h:70
QDockWidget * listDock
Contains the UMLListView tree view.
Definition: umlappprivate.h:82
void createBirdWindow()
Definition: umlappprivate.h:187
QDockWidget * welcomeWindow
Definition: umlappprivate.h:78
QDockWidget * logDock
Contains the log window widget.
Definition: umlappprivate.h:77
BirdViewDockWidget * birdViewDock
Contains the bird's eye view.
Definition: umlappprivate.h:75
void createDebugWindow()
Definition: umlappprivate.h:207
UMLListView * listView
Listview shows the current open file.
Definition: umlappprivate.h:72
void createObjectsWindow()
Definition: umlappprivate.h:252
void slotWelcomeWindowLinkClicked(const QUrl &url)
Definition: umlappprivate.h:320
void initWidgets()
Definition: umlappprivate.h:179
QUndoView * pQUndoView
Undo / Redo Viewer.
Definition: umlappprivate.h:73
QDockWidget * cmdHistoryDock
Contains the undo/redo viewer widget.
Definition: umlappprivate.h:79
void slotLogWindowItemDoubleClicked(QListWidgetItem *item)
Definition: umlappprivate.h:148
UMLAppPrivate(UMLApp *_parent)
Definition: umlappprivate.h:89
QDockWidget * documentationDock
Contains the documentation DocWindow widget.
Definition: umlappprivate.h:81
QListWidget * logWindow
Logging window.
Definition: umlappprivate.h:66
QDockWidget * editorWindow
Definition: umlappprivate.h:76
BirdView * birdView
Bird View window.
Definition: umlappprivate.h:71
void createDiagramsWindow()
Definition: umlappprivate.h:219
void initActions()
Definition: umlappprivate.h:155
ObjectsWindow * objectsWindow
Definition: umlappprivate.h:68
QString createDiagramName(Uml::DiagramType::Enum type, bool askForName=true)
Definition: umldoc.cpp:1617
Displays the list view for the program.
Definition: umllistview.h:43
void setDocument(UMLDoc *doc)
Definition: umllistview.cpp:1199
void init()
Definition: umllistview.cpp:1419
Definition: umlview.h:30
Definition: cmdcreatediagram.h:20
@ it_UndoView
Definition: icon_utils.h:122
QPixmap SmallIcon(IconType type)
Definition: icon_utils.cpp:32
Enum fromString(const QString &item)
Definition: basictypes.cpp:219
Enum
Definition: basictypes.h:63
@ Undefined
Definition: basictypes.h:66
QString a
Definition: petalnode.cpp:13