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