]> Shamusworld >> Repos - architektonas/blob - src/mainapp/qc_dialogfactory.cpp
8a6c79ac86682231c01d399b098db4d002b66151
[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 "qc_applicationwindow.h"
18
19 //QC_DialogFactory::QC_DialogFactory(QWidget * parent, QWidget * ow): QG_DialogFactory(parent, ow)
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         QC_ApplicationWindow * appWindow = QC_ApplicationWindow::getAppWindow();
36         QC_MDIWindow * parent = appWindow->getMDIWindow();
37
38         if (parent != NULL)
39         {
40                 //RS_BlockList* blist = blockWidget->getBlockList();
41                 if (blockList != NULL)
42                 {
43                         RS_Block * blk = blockList->getActive();
44
45                         if (blk != NULL)
46                         {
47                                 QC_MDIWindow * w = appWindow->slotFileNew(blk);
48                                 // the parent needs a pointer to the block window and
49                                 //   vice versa
50                                 parent->addChildWindow(w);
51                                 w->getGraphicView()->zoomAuto(false);
52                         }
53                 }
54         }
55 }
56
57 /**
58  * Closes all windows that are editing the given block.
59  */
60 void QC_DialogFactory::closeEditBlockWindow(RS_Block * block)
61 {
62         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow");
63
64         QC_ApplicationWindow * appWindow = QC_ApplicationWindow::getAppWindow();
65         QMdiArea * workspace = appWindow->getWorkspace();
66
67         if (workspace != NULL)
68         {
69                 RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: workspace found");
70
71                 QList<QMdiSubWindow *> windows = workspace->subWindowList();
72
73                 for(int i=0; i<int(windows.count()); ++i)
74                 {
75                         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: window: %d", i);
76                         QC_MDIWindow * m = (QC_MDIWindow *)windows.at(i);
77
78                         if (m != NULL)
79                         {
80                                 RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: got mdi");
81
82                                 if (m->getDocument() == block)
83                                 {
84                                         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: closing mdi");
85                                         //m->closeMDI(true, false);
86 //                                      m->close(true);
87                                         m->close();
88                                 }
89                         }
90                 }
91         }
92
93         appWindow->slotWindowActivated(NULL);
94
95         RS_DEBUG->print("QC_DialogFactory::closeEditBlockWindow: OK");
96 }