1 /*
2     SPDX-License-Identifier: GPL-2.0-or-later
3     SPDX-FileCopyrightText: 2012-2014 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
4 */
5 
6 #include "cmdcreatediagram.h"
7 
8 #include "model_utils.h"
9 #include "umldoc.h"
10 #include "umlscene.h"
11 #include "umlview.h"
12 
13 #include <KLocalizedString>
14 
15 namespace Uml
16 {
17 
CmdCreateDiagram(UMLDoc * doc,Uml::DiagramType::Enum type,const QString & name,UMLFolder * parent)18     CmdCreateDiagram::CmdCreateDiagram(UMLDoc* doc, Uml::DiagramType::Enum type, const QString& name, UMLFolder *parent)
19       : QUndoCommand(),
20         m_name(name),
21         m_type(type),
22         m_pUMLDoc(doc),
23         m_pUMLView(0),
24         m_parent(parent)
25     {
26         QString msg = i18n("Create diagram %1: %2", DiagramType::toString(type), name);
27         setText(msg);
28 
29         m_sceneId = Uml::ID::None;
30     }
31 
~CmdCreateDiagram()32     CmdCreateDiagram::~CmdCreateDiagram()
33     {
34     }
35 
redo()36     void CmdCreateDiagram::redo()
37     {
38         if (!m_pUMLDoc->findView(m_type, m_name, true)) {
39             Uml::ModelType::Enum modelType = Model_Utils::convert_DT_MT(m_type);
40             UMLFolder* folder = m_parent ? m_parent : m_pUMLDoc->rootFolder(modelType);
41             m_pUMLView = m_pUMLDoc->createDiagram(folder, m_type, m_name, m_sceneId);
42         }
43 
44         // Remember the scene-ID, it might be auto generated. The ID must
45         // not change after undo/redo because other commands may try to
46         // lookup the diagram later.
47         m_sceneId = m_pUMLView->umlScene()->ID();
48     }
49 
undo()50     void CmdCreateDiagram::undo()
51     {
52         if (m_pUMLView) {
53             m_pUMLDoc->removeDiagramCmd(m_sceneId);
54         }
55     }
56 
57 }
58