]> Shamusworld >> Repos - architektonas/blob - src/mainapp/qc_dialogfactory.cpp
d7f6eeb95dd0b22727d1f78d9fa1791993451dec
[architektonas] / src / mainapp / qc_dialogfactory.cpp
1 // qc_dialogfactory.cpp
2 //
3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // (C) 2010 Underground Software
7 //
8 // JLH = James L. Hammons <jlhamm@acm.org>
9 //
10 // Who  When        What
11 // ---  ----------  -----------------------------------------------------------
12 // JLH  05/17/2010  Added this text. :-)
13 //
14
15 #include "qc_dialogfactory.h"
16
17 #include "applicationwindow.h"
18 #include "qg_graphicview.h"
19
20 QC_DialogFactory::QC_DialogFactory(QWidget * parent, QToolBar * ow): QG_DialogFactory(parent, ow)
21 {
22 }
23
24 /*virtual*/ QC_DialogFactory::~QC_DialogFactory()
25 {
26 }
27
28 /**
29  * Provides a new window for editing the active block.
30  */
31 void QC_DialogFactory::requestEditBlockWindow(RS_BlockList * blockList)
32 {
33         RS_DEBUG->print("QC_DialogFactory::requestEditBlockWindow()");
34
35         ApplicationWindow * appWindow = ApplicationWindow::getAppWindow();
36         MDIWindow * parent = appWindow->getMDIWindow();
37
38         if (parent && blockList)
39         {
40                 RS_Block * block = blockList->getActive();
41
42                 if (block)
43                 {
44                         MDIWindow * w = appWindow->slotFileNew(block);
45                         // the parent needs a pointer to the block window and vice versa
46                         parent->addChildWindow(w);
47                         w->getGraphicView()->zoomAuto(false);
48                 }
49         }
50 }
51
52 /**
53  * Closes all windows that are editing the given block.
54  */
55 void QC_DialogFactory::closeEditBlockWindow(RS_Block * block)
56 {
57         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow");
58
59         ApplicationWindow * appWindow = ApplicationWindow::getAppWindow();
60         QMdiArea * workspace = appWindow->getWorkspace();
61
62         if (workspace)
63         {
64                 RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: workspace found");
65
66                 QList<QMdiSubWindow *> windows = workspace->subWindowList();
67
68                 for(int i=0; i<windows.count(); i++)
69                 {
70                         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: window: %d", i);
71                         MDIWindow * m = (MDIWindow *)windows.at(i);
72
73                         if (m)
74                         {
75                                 RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: got mdi");
76
77                                 if (m->getDocument() == block)
78                                 {
79                                         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: closing mdi");
80                                         //m->closeMDI(true, false);
81 //                                      m->close(true);
82                                         m->close();
83                                 }
84                         }
85                 }
86         }
87
88         appWindow->slotWindowActivated(NULL);
89
90         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: OK");
91 }