X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmainapp%2Fmdiwindow.cpp;h=a592c4bd6bc1f1d9ab335646b3e57c841174f2c2;hb=43c13b052d069ba435277d93867380d00c04931f;hp=d20e4e7055659bc165e3aae64771ce3970725291;hpb=16354e0421b316a62c6b9f7b0b4f3b8cf6f06284;p=architektonas diff --git a/src/mainapp/mdiwindow.cpp b/src/mainapp/mdiwindow.cpp index d20e4e7..a592c4b 100644 --- a/src/mainapp/mdiwindow.cpp +++ b/src/mainapp/mdiwindow.cpp @@ -30,17 +30,27 @@ int MDIWindow::idCounter = 0; * * @param doc Pointer to an existing document of NULL if a new * document shall be created for this window. - * @param parent Parent widget. Usually a workspace. + * @param parent Parent widget. Usually a workspace (QMdiArea). */ MDIWindow::MDIWindow(Document * doc, QWidget * parent, const char * name/*= NULL*/, - Qt::WindowFlags wflags/*= Qt::WDestructiveClose*/): - QMdiSubWindow(parent, Qt::SubWindow), owner(false), forceClosing(false) + Qt::WindowFlags wflags/*= Qt::SubWindow*/): + QMdiSubWindow(parent, Qt::SubWindow), +owner(false) #warning "!!! wflags is ignored !!!" { +// This warning not longer occurs...! //This warning is most likely coming from the QMdiSubWindow() constructor above... -#warning "QWidget::setMinimumSize: (/QMdi::ControlLabel) Negative sizes (-1,-1) are not possible" +//#warning "QWidget::setMinimumSize: (/QMdi::ControlLabel) Negative sizes (-1,-1) are not possible" initDoc(doc); - initView(); + + graphicView = new QG_GraphicView(document, this); +//Let's see if the trouble is in the graphicView... +//And it is... So... How to fix this??? + setWidget(graphicView); +//THIS was the problem... Somehow, setting focus on the this widget was screwing +//*everything* about the MDI system up! +// graphicView->setFocus(); + id = idCounter++; parentWindow = NULL; @@ -90,12 +100,10 @@ MDIWindow::~MDIWindow() */ void MDIWindow::addChildWindow(MDIWindow * w) { - DEBUG->print("RS_MDIWindow::addChildWindow()"); - - childWindows.append(w); - w->setParentWindow(this); - - DEBUG->print("children: %d", childWindows.count()); + DEBUG->print("RS_MDIWindow::addChildWindow()"); + childWindows.append(w); + w->setParentWindow(this); + DEBUG->print("children: %d", childWindows.count()); } /** @@ -105,13 +113,10 @@ void MDIWindow::addChildWindow(MDIWindow * w) */ void MDIWindow::removeChildWindow(MDIWindow * w) { - DEBUG->print("RS_MDIWindow::removeChildWindow()"); - -// bool suc = childWindows.remove(w); - bool suc = childWindows.removeOne(w); - DEBUG->print("successfully removed child window: %d", (int)suc); - - DEBUG->print("children: %d", childWindows.count()); + DEBUG->print("RS_MDIWindow::removeChildWindow()"); + bool success = childWindows.removeOne(w); + DEBUG->print("successfully removed child window: %s.", (success ? "yes" : "NO")); + DEBUG->print("# of children: %d", childWindows.count()); } /** @@ -119,11 +124,11 @@ void MDIWindow::removeChildWindow(MDIWindow * w) */ MDIWindow * MDIWindow::getPrintPreview() { - for(uint i=0; igetGraphicView()->isPrintPreview()) + if (childWindows.at(i)->getGraphicView()->isPrintPreview()) return childWindows.at(i); - } + } return NULL; } @@ -134,13 +139,13 @@ MDIWindow * MDIWindow::getPrintPreview() * @param force Disable cancel button (demo versions) * @param ask Ask user before closing. */ -bool MDIWindow::closeMDI(bool force, bool ask) +bool MDIWindow::CloseMDI(void) { - // should never happen: + // This should never happen: if (!document) return true; - bool ret = false; + bool closed = false; bool isBlock = (parentWindow != NULL); // This is a block and we don't need to ask the user for closing @@ -148,6 +153,7 @@ bool MDIWindow::closeMDI(bool force, bool ask) if (isBlock) { DEBUG->print(" closing block"); + // tell parent window we're not here anymore. if (parentWindow) { @@ -156,15 +162,14 @@ bool MDIWindow::closeMDI(bool force, bool ask) } emit(signalClosing()); - ret = true; + closed = true; } - // This is a graphic document. ask user for closing. - else if (!ask || slotFileClose(force)) + // This is a drawing document. Ask user for closing. + else if (slotFileClose()) { DEBUG->print(" closing graphic"); - // close all child windows: - bool done; + // Close all child windows: while (!childWindows.isEmpty()) { MDIWindow * child = childWindows.takeFirst(); @@ -174,15 +179,10 @@ bool MDIWindow::closeMDI(bool force, bool ask) } emit(signalClosing()); - ret = true; - } - // User decided not to close graphic document: - else - { - ret = false; + closed = true; } - return (ret || force); + return closed; } /** @@ -190,22 +190,15 @@ bool MDIWindow::closeMDI(bool force, bool ask) */ void MDIWindow::closeEvent(QCloseEvent * ce) { - DEBUG->print("MDIWindow::closeEvent begin"); + DEBUG->print("MDIWindow::closeEvent begin"); - if (closeMDI(false, !forceClosing)) - ce->accept(); - else - ce->ignore(); + (CloseMDI() ? ce->accept() : ce->ignore()); - DEBUG->print("MDIWindow::closeEvent end"); + DEBUG->print("MDIWindow::closeEvent end"); } /** - * Init the document. - * - * @param type Document type. RS:EntityGraphic or RS2::EntityBlock - * @param container Entity container to be used as document or NULL - * if a new document should be created. + * Initialize the document. */ void MDIWindow::initDoc(Document * doc) { @@ -213,7 +206,7 @@ void MDIWindow::initDoc(Document * doc) if (!doc) { - document = new Drawing(); + document = new Drawing(); // Drawing is derived from Document document->newDoc(); owner = true; } @@ -224,19 +217,6 @@ void MDIWindow::initDoc(Document * doc) } } -/** - * Init the view. - */ -void MDIWindow::initView() -{ - DEBUG->print("MDIWindow::initView()"); - -// graphicView = new QC_GraphicView(document, this); - graphicView = new QG_GraphicView(document, this); - setWidget(graphicView); - graphicView->setFocus(); -} - /** * Called when the current pen (color, style, width) has changed. * Sets the active pen for the document in this MDI window. @@ -368,71 +348,63 @@ bool MDIWindow::slotFileSaveAs(bool & cancelled) /** * Requests the closing of this MDI window. - * - * @param force Force closing by disabling the cancel button (for demo versions). */ -bool MDIWindow::slotFileClose(bool force) +bool MDIWindow::slotFileClose(void) { DEBUG->print("MDIWindow::slotFileClose()"); + bool succeeded = true; + + if (document == NULL || !document->isModified()) + return succeeded; - bool succ = true; - int exit = 0; + ExitDialog dlg(this); - if (document && document->isModified()) + if (document->getFilename().isEmpty()) + dlg.setText(tr("Do you really want to discard this drawing?")); + else { - ExitDialog dlg(this); - dlg.setForce(force); + QString fn = document->getFilename(); - if (document->getFilename().isEmpty()) - dlg.setText(tr("Do you really want to close the drawing?")); - else - { - QString fn = document->getFilename(); + if (fn.length() > 50) + fn = QString("%1...%2").arg(fn.left(24)).arg(fn.right(24)); - if (fn.length() > 50) - fn = QString("%1...%2").arg(fn.left(24)).arg(fn.right(24)); + dlg.setText(tr("Do you really want to discard changes to the file\n%1?").arg(fn)); + } - dlg.setText(tr("Do you really want to close the file\n%1?").arg(fn)); - } + dlg.setTitle(tr("Close Drawing")); - dlg.setTitle(tr("Closing Drawing")); + bool again = false; - bool again; + do + { bool cancelled; + int exit = dlg.exec(); - do + switch (exit) { + case 0: // Cancel + succeeded = false; + again = false; + break; + case 1: // OK (Leave) + succeeded = true; again = false; - exit = dlg.exec(); - - switch (exit) - { - case 0: // cancel - succ = false; - break; - case 1: // leave - succ = true; - break; - case 2: // save - succ = slotFileSave(cancelled); - again = !succ || cancelled; - break; - case 3: // save as - succ = slotFileSaveAs(cancelled); - again = !succ || cancelled; - break; - default: - break; - } + break; + case 2: // Save + succeeded = slotFileSave(cancelled); + again = !succeeded || cancelled; + break; + case 3: // Save As + succeeded = slotFileSaveAs(cancelled); + again = !succeeded || cancelled; + break; + default: + break; } - while (again); - } - else - { - succ = true; } + while (again); - return succ; + return succeeded; } void MDIWindow::slotFilePrint() @@ -459,32 +431,37 @@ void MDIWindow::slotFilePrint() //statusBar()->message(tr("Ready.")); } -/** @return Pointer to graphic view */ +/** + * @return Pointer to graphic view + */ //QC_GraphicView * MDIWindow::getGraphicView() QG_GraphicView * MDIWindow::getGraphicView() { return graphicView; } -/** @return Pointer to document */ +/** + * @return Pointer to document + */ Document * MDIWindow::getDocument() { return document; } -/** @return Pointer to graphic or NULL */ -Drawing * MDIWindow::getGraphic() +/** + * @return Pointer to Drawing or NULL + */ +Drawing * MDIWindow::GetDrawing() { - return document->getGraphic(); + return document->GetDrawing(); } -/** @return Pointer to current event handler */ +/** + * @return Pointer to current event handler + */ EventHandler * MDIWindow::getEventHandler() { - if (graphicView) - return graphicView->getEventHandler(); - else - return NULL; + return (graphicView ? graphicView->getEventHandler() : NULL); } /** @@ -504,11 +481,6 @@ int MDIWindow::getId() return id; } -void MDIWindow::setForceClosing(bool on) -{ - forceClosing = on; -} - /** * Streams some info about an MDI window to stdout. */ @@ -521,7 +493,7 @@ std::ostream & operator<<(std::ostream & os, MDIWindow & w) else os << " parentWindow: NULL\n"; - for(uint i=0; igetId() << "\n"; return os;