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