diff --git a/build_num b/build_num index 9c9ee97c5..65279e63c 100644 --- a/build_num +++ b/build_num @@ -1 +1 @@ -#define BUILD_NUM 363 +#define BUILD_NUM 364 diff --git a/src/gui/FWObjectClipboard.cpp b/src/gui/FWObjectClipboard.cpp index b1db22d2b..77ed85885 100644 --- a/src/gui/FWObjectClipboard.cpp +++ b/src/gui/FWObjectClipboard.cpp @@ -57,7 +57,14 @@ void FWObjectClipboard::clear() for (vector::iterator i=ids.begin(); i!=ids.end(); ++i) { FWObject *obj = mw->db()->findInIndex(*i); - if (obj) obj->unref(); + if (obj) + { + if (fwbdebug) + qDebug("FWObjectClipboard::clear unref obj=%p (%s)", + obj, obj->getName().c_str()); + + obj->unref(); + } } ids.clear(); window=NULL; diff --git a/src/gui/ObjectManipulator.cpp b/src/gui/ObjectManipulator.cpp index 144b4b412..9126fcdd6 100644 --- a/src/gui/ObjectManipulator.cpp +++ b/src/gui/ObjectManipulator.cpp @@ -828,28 +828,30 @@ void ObjectManipulator::addTreePage( FWObject *lib) //objTreeView->setContextMenuPolicy( Qt::CustomContextMenu ); connect(m_objectManipulator->widgetStack, SIGNAL( currentChanged(int) ), - this, SLOT( currentTreePageChanged(int) ) ); + this, SLOT( currentTreePageChanged(int) ) ); - connect(objTreeView,SIGNAL( editCurrentObject_sign() ), - this, SLOT( editSelectedObject()) ); + connect(objTreeView, SIGNAL( editCurrentObject_sign() ), + this, SLOT( editSelectedObject()) ); // connect(objTreeView,SIGNAL( editCurrentObject_sign() ), -// this, SLOT( editSelectedObject()) ); +// this, SLOT( editSelectedObject()) ); - connect(objTreeView,SIGNAL( switchObjectInEditor_sign(libfwbuilder::FWObject*) ), - this, SLOT( switchObjectInEditor(libfwbuilder::FWObject*)) ); + connect(objTreeView, + SIGNAL( switchObjectInEditor_sign(libfwbuilder::FWObject*) ), + this, SLOT( switchObjectInEditor(libfwbuilder::FWObject*)) ); connect(objTreeView, SIGNAL( deleteObject_sign(libfwbuilder::FWObject*) ), - this, SLOT( deleteObj() ) ); + this, SLOT( deleteObj() ) ); connect(objTreeView, SIGNAL( objectDropped_sign(libfwbuilder::FWObject*) ), - this, SLOT( openObject(libfwbuilder::FWObject*) ) ); + this, SLOT( openObject(libfwbuilder::FWObject*) ) ); connect(objTreeView, SIGNAL( contextMenuRequested_sign(const QPoint&) ), - this, SLOT( contextMenuRequested(const QPoint&) ) ); + this, SLOT( contextMenuRequested(const QPoint&) ) ); - connect(objTreeView, SIGNAL( currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*) ), - this, SLOT( selectionChanged(QTreeWidgetItem*) ) ); + connect(objTreeView, + SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*) ), + this, SLOT(selectionChanged(QTreeWidgetItem*))); ObjectTreeViewItem *itm1=new ObjectTreeViewItem( objTreeView ); @@ -862,7 +864,7 @@ void ObjectManipulator::addTreePage( FWObject *lib) itm1->setFlags(itm1->flags() | Qt::ItemIsDragEnabled); - itm1->setText( 0 , getTreeLabel( lib ) ); + itm1->setText( 0, getTreeLabel( lib ) ); if (lib->isReadOnly()) { QPixmap pm; @@ -885,7 +887,7 @@ void ObjectManipulator::addTreePage( FWObject *lib) itm1->setIcon( 0, pm); } - //itm1->setProperty("id", lib->getId().c_str() ); + //itm1->setProperty("id", lib->getId().c_str() ); itm1->setProperty("type", lib->getTypeName().c_str() ); itm1->setFWObject( lib ); allItems[lib] = itm1; @@ -989,7 +991,7 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) if (otvi==NULL) return; // happens when user clicks outside an item if (!getCurrentObjectTree()->isSelected(otvi->getFWObject())) - openObject( otvi , true ); + openObject( otvi, true ); if (currentObj==NULL) currentObj=otvi->getFWObject(); @@ -1055,7 +1057,7 @@ void ObjectManipulator::contextMenuRequested(const QPoint &pos) duptargets->addAction(tr("place here"), this, SLOT( duplicateObjUnderSameParent())); //QAction *dupID = duptargets->addAction( tr("Duplicate ...") ); // BUGFIX-2346 -QAction *dupID = popup->addAction( tr("Duplicate ...") ,this, SLOT (duplicateObjUnderSameParent()));//popup-> +QAction *dupID = popup->addAction( tr("Duplicate ..."),this, SLOT (duplicateObjUnderSameParent()));//popup-> QAction *movID; if (moveTargets!=0) @@ -1070,16 +1072,16 @@ QAction *movID; popup->addSeparator(); - QAction *copyID = popup->addAction( tr("Copy") , this , + QAction *copyID = popup->addAction( tr("Copy"), this, SLOT( copyObj() ) ); - QAction *cutID =popup->addAction( tr("Cut") , this , + QAction *cutID =popup->addAction( tr("Cut"), this, SLOT( cutObj() ) ); - QAction *pasteID =popup->addAction( tr("Paste") , this , + QAction *pasteID =popup->addAction( tr("Paste"), this, SLOT( pasteObj() ) ); popup->addSeparator(); - QAction * delID =popup->addAction( tr("Delete") , this , + QAction * delID =popup->addAction( tr("Delete"), this, SLOT( deleteObj() ) ); QAction *newID1=NULL; @@ -1092,115 +1094,115 @@ QAction *movID; if ( (Firewall::isA(currentObj) || Host::isA(currentObj)) && ! currentObj->isReadOnly() ) { - newID1=popup->addAction( tr("Add Interface"), this , + newID1=popup->addAction( tr("Add Interface"), this, SLOT( newInterface() ) ); } if ((Firewall::isA(currentObj) &&! currentObj->isReadOnly())) { - newID1=popup->addAction( tr("Add Policy Rule Set"), this , + newID1=popup->addAction( tr("Add Policy Rule Set"), this, SLOT( newPolicyRuleSet() ) ); - newID1=popup->addAction( tr("Add NAT Rule Set"), this , + newID1=popup->addAction( tr("Add NAT Rule Set"), this, SLOT( newNATRuleSet() ) ); } if (Interface::isA(currentObj) && ! currentObj->isReadOnly()) { - newID1=popup->addAction( tr("Add IP Address"), this , + newID1=popup->addAction( tr("Add IP Address"), this, SLOT( newInterfaceAddress() ) ); - newID1=popup->addAction( tr("Add IPv6 Address"), this , + newID1=popup->addAction( tr("Add IPv6 Address"), this, SLOT( newInterfaceAddressIPv6() ) ); - newID2=popup->addAction( tr("Add MAC Address"), this , + newID2=popup->addAction( tr("Add MAC Address"), this, SLOT( newPhysicalAddress() ) ); } if (currentObj->getPath(true)=="Firewalls") - newID1=popup->addAction( tr("New Firewall"), this , + newID1=popup->addAction( tr("New Firewall"), this, SLOT( newFirewall() ) ); if (currentObj->getPath(true)=="Objects/Addresses") { - newID1=popup->addAction( tr("New Address"), this , + newID1=popup->addAction( tr("New Address"), this, SLOT( newAddress() ) ); } if (currentObj->getPath(true)=="Objects/DNS Names") { - newID1=popup->addAction( tr("New DNS Name"), this , + newID1=popup->addAction( tr("New DNS Name"), this, SLOT( newDNSName() ) ); } if (currentObj->getPath(true)=="Objects/Address Tables") { - newID1=popup->addAction( tr("New Address Table"), this , + newID1=popup->addAction( tr("New Address Table"), this, SLOT( newAddressTable() ) ); } if (currentObj->getPath(true)=="Objects/Address Ranges") - newID1=popup->addAction( tr("New Address Range"), this , + newID1=popup->addAction( tr("New Address Range"), this, SLOT( newAddressRange() ) ); if (currentObj->getPath(true)=="Objects/Hosts") - newID1=popup->addAction( tr("New Host"), this , + newID1=popup->addAction( tr("New Host"), this, SLOT( newHost() ) ); if (currentObj->getPath(true)=="Objects/Networks") - newID1=popup->addAction( tr("New Network"), this , + newID1=popup->addAction( tr("New Network"), this, SLOT( newNetwork() ) ); if (currentObj->getPath(true)=="Objects/Groups") - newID1=popup->addAction( tr("New Group"), this , + newID1=popup->addAction( tr("New Group"), this, SLOT( newObjectGroup() ) ); if (currentObj->getPath(true)=="Services/Custom") - newID1=popup->addAction( tr("New Custom Service"),this , + newID1=popup->addAction( tr("New Custom Service"),this, SLOT( newCustom() ) ); if (currentObj->getPath(true)=="Services/IP") - newID1=popup->addAction( tr("New IP Service"), this , + newID1=popup->addAction( tr("New IP Service"), this, SLOT( newIP() ) ); if (currentObj->getPath(true)=="Services/ICMP") { - newID1=popup->addAction( tr("New ICMP Service"), this , + newID1=popup->addAction( tr("New ICMP Service"), this, SLOT( newICMP() ) ); - newID2=popup->addAction( tr("New ICMP6 Service"), this , + newID2=popup->addAction( tr("New ICMP6 Service"), this, SLOT( newICMP6() ) ); } if (currentObj->getPath(true)=="Services/TCP") - newID1=popup->addAction( tr("New TCP Service"), this , + newID1=popup->addAction( tr("New TCP Service"), this, SLOT( newTCP() ) ); if (currentObj->getPath(true)=="Services/UDP") - newID1=popup->addAction( tr("New UDP Service"), this , + newID1=popup->addAction( tr("New UDP Service"), this, SLOT( newUDP() ) ); if (currentObj->getPath(true)=="Services/TagServices") - newID1=popup->addAction( tr("New TagService"), this , + newID1=popup->addAction( tr("New TagService"), this, SLOT( newTagService() ) ); if (currentObj->getPath(true)=="Services/Groups") - newID1=popup->addAction( tr("New Group"), this , + newID1=popup->addAction( tr("New Group"), this, SLOT( newServiceGroup() ) ); if (currentObj->getPath(true)=="Time") - newID1=popup->addAction( tr("New Time Interval"), this , + newID1=popup->addAction( tr("New Time Interval"), this, SLOT( newInterval() ) ); popup->addSeparator(); - popup->addAction( tr("Find") , this , SLOT( findObject())); - popup->addAction( tr("Where used") , this , SLOT( findWhereUsedSlot())); + popup->addAction( tr("Find"), this, SLOT( findObject())); + popup->addAction( tr("Where used"), this, SLOT( findWhereUsedSlot())); /* if (Firewall::cast(currentObj)!=NULL) { popup->addSeparator(); - popup->addAction( tr("Compile") , this , SLOT( compile())); - popup->addAction( tr("Install") , this , SLOT( install())); + popup->addAction( tr("Compile"), this, SLOT( compile())); + popup->addAction( tr("Install"), this, SLOT( install())); } */ } else { - popup->addAction( tr("Group"), this , + popup->addAction( tr("Group"), this, SLOT( groupObjects() ) ); } @@ -1208,17 +1210,17 @@ QAction *movID; if (Firewall::cast(currentObj)!=NULL || ObjectGroup::cast(currentObj)!=NULL) { popup->addSeparator(); - popup->addAction( tr("Compile") , this , SLOT( compile())); - popup->addAction( tr("Install") , this , SLOT( install())); + popup->addAction( tr("Compile"), this, SLOT( compile())); + popup->addAction( tr("Install"), this, SLOT( install())); // popup->addSeparator(); -// popup->addAction( tr("Simulate install") , this , SLOT( simulateInstall())); +// popup->addAction( tr("Simulate install"), this, SLOT( simulateInstall())); } popup->addSeparator(); - QAction* lcID=popup->addAction( tr("Lock"), this , + QAction* lcID=popup->addAction( tr("Lock"), this, SLOT( lockObject() ) ); - QAction* unlcID=popup->addAction( tr("Unlock"), this , + QAction* unlcID=popup->addAction( tr("Unlock"), this, SLOT( unlockObject() ) ); lcID->setEnabled(getCurrentObjectTree()->isLockable()); unlcID->setEnabled(getCurrentObjectTree()->isUnlockable()); @@ -1227,7 +1229,7 @@ QAction *movID; { /* keep this for debugging */ popup->addSeparator(); - popup->addAction( tr("dump") , this , SLOT( dumpObj())); + popup->addAction( tr("dump"), this, SLOT( dumpObj())); } if (getCurrentObjectTree()->getNumSelected()==1) @@ -1317,7 +1319,7 @@ void ObjectManipulator::getMenuState(bool haveMoveTargets, //QString s2 = obj->getTypeName().c_str(); } QString s3 = obj->getTypeName().c_str(); - FWObject *nobj=pasteTo( obj , co , false, true); + FWObject *nobj=pasteTo( obj, co, false, true); pasteMenuItem = pasteMenuItem && (nobj!=NULL); } } @@ -2257,6 +2259,8 @@ void ObjectManipulator::info() if (currentObj) { + if (fwbdebug) qDebug("currentObj=%s", currentObj->getName().c_str()); + m_project->info(currentObj, true); //forcing info window update active=true; } @@ -2275,6 +2279,8 @@ void ObjectManipulator::restoreSelection(bool same_widget) void ObjectManipulator::editSelectedObject() { + if (fwbdebug) qDebug("ObjectManipulator::editSelectedObject"); + if (getCurrentObjectTree()->getNumSelected()==0) return; FWObject *obj=getCurrentObjectTree()->getSelectedObjects().front(); @@ -2293,6 +2299,8 @@ void ObjectManipulator::editSelectedObject() bool ObjectManipulator::editObject(FWObject *obj) { + if (fwbdebug) qDebug("ObjectManipulator::editObject"); + /* if (RuleSet::isA (obj)) { // if (m_project->getCurrentRuleSet()!=obj) @@ -2300,6 +2308,7 @@ bool ObjectManipulator::editObject(FWObject *obj) } */ if (!m_project->isEditorVisible()) m_project->showEditor(); + /* QList subWindowList = mw->getMdiArea()->subWindowList(); QString fileName = m_project->getRCS()->getFileName(); @@ -2328,37 +2337,47 @@ bool ObjectManipulator::switchObjectInEditor(FWObject *obj) { if (fwbdebug) qDebug("ObjectManipulator::switchObjectInEditor"); + if (obj && fwbdebug) + { + qDebug("obj: %s", obj->getName().c_str()); + FWObject *edt_obj = m_project->getOpenedEditor(); + if (edt_obj) + qDebug("in editor: %s", edt_obj->getName().c_str()); + } + m_project->unselectRules(); if (RuleSet::cast(obj)!=NULL) - { -// qDebug("!2"); + { if (obj!=m_project->getCurrentRuleSet()) { -// if (m_project->getCurrentRuleSet()!=NULL) - m_project->openRuleSet(obj); + m_project->openRuleSet(obj); } - } + } if (!m_project->isEditorVisible()) return false; - if (!m_project->requestEditorOwnership(this, - obj, - ObjectEditor::optNone, - true)) + if (!m_project->requestEditorOwnership( + this, obj, ObjectEditor::optNone, true)) + { + if (fwbdebug) qDebug("Can not get editor panel ownership"); return false; + } + + if (fwbdebug) qDebug("Calling select"); select(); - if (obj!=m_project->getOpenedEditor()) + if (obj != m_project->getOpenedEditor()) { - + if (fwbdebug) qDebug("Open object in editor"); m_project->openEditor(obj); - currentObj=obj; - active=true; + currentObj = obj; + active = true; openObject(obj); // position the tree so that obj is visible -// qDebug("!1"); - + if (fwbdebug) qDebug("Done"); } + + if (fwbdebug) qDebug("ObjectManipulator::switchObjectInEditor done"); return true; // successfully (re)opened obj in the editor } @@ -2406,7 +2425,7 @@ void ObjectManipulator::selectionChanged(QTreeWidgetItem *cur) if (otvi==NULL) return; - FWObject *obj=otvi->getFWObject(); + FWObject *obj = otvi->getFWObject(); if (obj==NULL) return; FWObject *o=obj; @@ -2727,7 +2746,7 @@ FWObject* ObjectManipulator::copyObj2Tree( ids.clear(); if (Interface::isA(copyFrom) && Firewall::isA(parent)) { - FWObject *no = pasteTo (parent,copyFrom , false, false, true); + FWObject *no = pasteTo (parent,copyFrom, false, false, true); return no; } FWObject *nobj=copyFrom->getRoot()->create(copyFrom->getTypeName()); @@ -3301,23 +3320,25 @@ bool ObjectManipulator::validateDialog() void ObjectManipulator::select() { - if (fwbdebug) - qDebug("ObjectManipulator::select()"); + if (fwbdebug) qDebug("ObjectManipulator::select()"); if (currentObj==NULL) return; - ObjectTreeViewItem *otvi=allItems[currentObj]; + + if (fwbdebug) qDebug("currentObj=%s", currentObj->getName().c_str()); + + ObjectTreeViewItem *otvi = allItems[currentObj]; if (otvi) { - otvi->setSelected(true); - active=true; - otvi->treeWidget()->setFocus(); - otvi->treeWidget()->update(); +// Commented out 07/15/08 --vk +// otvi->setSelected(true); + active = true; +// otvi->treeWidget()->setFocus(); +// otvi->treeWidget()->update(); } m_project->updateRuleSetViewSelection(); - if (fwbdebug) - qDebug("/ObjectManipulator::select()"); + if (fwbdebug) qDebug("ObjectManipulator::select() done"); } void ObjectManipulator::unselect() diff --git a/src/gui/ObjectTreeView.cpp b/src/gui/ObjectTreeView.cpp index 79941c0e2..c76512f0f 100644 --- a/src/gui/ObjectTreeView.cpp +++ b/src/gui/ObjectTreeView.cpp @@ -74,9 +74,13 @@ ObjectTreeView* ObjectTreeViewItem::getTree() * ****************************************************************************/ -ObjectTreeView::ObjectTreeView(ProjectPanel* project, QWidget* parent, const char * name, Qt::WFlags f) : +ObjectTreeView::ObjectTreeView(ProjectPanel* project, + QWidget* parent, + const char * name, + Qt::WFlags f) : QTreeWidget(parent), - singleClickTimer(this), m_project(project) + singleClickTimer(this), + m_project(project) { setObjectName(name); this->setParent(parent, f); @@ -108,23 +112,23 @@ ObjectTreeView::ObjectTreeView(ProjectPanel* project, QWidget* parent, const cha */ process_mouse_release_event = true; - connect( this, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), - this, SLOT(currentItemChanged(QTreeWidgetItem*)) ); + connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(currentItemChanged(QTreeWidgetItem*))); - connect( this, SIGNAL( itemSelectionChanged() ), - this, SLOT( itemSelectionChanged() ) ); + connect(this, SIGNAL(itemSelectionChanged()), + this, SLOT(itemSelectionChanged())); - connect(this, SIGNAL( itemCollapsed(QTreeWidgetItem*)), - this, SLOT( itemCollapsed(QTreeWidgetItem*)) ); + connect(this, SIGNAL(itemCollapsed(QTreeWidgetItem*)), + this, SLOT(itemCollapsed(QTreeWidgetItem*))); - connect(this, SIGNAL( itemExpanded(QTreeWidgetItem*)), - this, SLOT( itemExpanded(QTreeWidgetItem*)) ); + connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), + this, SLOT(itemExpanded(QTreeWidgetItem*))); - connect( &singleClickTimer, SIGNAL( timeout() ), - this, SLOT( resetSelection() ) ); + connect(&singleClickTimer, SIGNAL(timeout()), + this, SLOT(resetSelection())); - connect( this, SIGNAL( itemActivated(QTreeWidgetItem *, int)), - this, SLOT( itemOpened() )); + connect(this, SIGNAL(itemActivated(QTreeWidgetItem *, int)), + this, SLOT(itemOpened())); setColumnCount(1); @@ -166,7 +170,7 @@ bool ObjectTreeView::event( QEvent *event ) FWObject *obj=NULL; QRect cr; - QTreeWidgetItem *itm = itemAt( QPoint(cx,cy - header()->height()) ); + QTreeWidgetItem *itm = itemAt(QPoint(cx, cy - header()->height())); if (itm==NULL) return false; ObjectTreeViewItem *oivi = dynamic_cast(itm); assert(oivi!=NULL); @@ -177,14 +181,17 @@ bool ObjectTreeView::event( QEvent *event ) cr = visualItemRect(itm); QRect global = QRect( - viewport()->mapToGlobal(cr.topLeft()), viewport()->mapToGlobal(cr.bottomRight())); + viewport()->mapToGlobal(cr.topLeft()), + viewport()->mapToGlobal(cr.bottomRight())); //finally stretch rect up to component's width and even more //(it fixes bug with horizontal scroll) global.setWidth(width() + horizontalOffset()); QToolTip::showText(mapToGlobal( he->pos() ), - FWObjectPropertiesFactory::getObjectPropertiesDetailed(obj,true,true), + FWObjectPropertiesFactory::getObjectPropertiesDetailed(obj, + true, + true), this, global); } @@ -197,8 +204,8 @@ bool ObjectTreeView::event( QEvent *event ) void ObjectTreeView::currentItemChanged(QTreeWidgetItem *cur) { - if (fwbdebug) - qDebug("ObjectTreeView::currentChanged itm=%s",cur->text(0).toAscii().constData()); + if (fwbdebug) qDebug("ObjectTreeView::currentChanged itm=%s", + cur->text(0).toAscii().constData()); expandOrCollapse = false; // lastSelected = ovi; @@ -208,14 +215,16 @@ void ObjectTreeView::currentItemChanged(QTreeWidgetItem *cur) void ObjectTreeView::itemCollapsed(QTreeWidgetItem* itm) { if (fwbdebug) - qDebug("ObjectTreeView::collapsed itm=%s",itm->text(0).toAscii().constData()); + qDebug("ObjectTreeView::collapsed itm=%s", + itm->text(0).toAscii().constData()); expandOrCollapse = true; } void ObjectTreeView::itemExpanded(QTreeWidgetItem* itm) { if (fwbdebug) - qDebug("ObjectTreeView::expanded itm=%s",itm->text(0).toAscii().constData()); + qDebug("ObjectTreeView::expanded itm=%s", + itm->text(0).toAscii().constData()); expandOrCollapse = true; } @@ -338,6 +347,9 @@ void ObjectTreeView::startDrag(Qt::DropActions supportedActions) FWObject *current_obj = getCurrentObject(); + if (fwbdebug) qDebug("ObjectTreeView::startDrag: this: %p current_obj: %s", + this, current_obj->getName().c_str()); + /* can't drag system folders in fact, I have to allow to drag system folders because otherwise @@ -357,6 +369,11 @@ void ObjectTreeView::startDrag(Qt::DropActions supportedActions) for (vector::iterator v=so.begin(); v!=so.end(); v++) { //m_project->check4Depends(*v, dragobj); + + if (fwbdebug) + qDebug("ObjectTreeView::startDrag: adding object to drag list: %s", + (*v)->getName().c_str()); + dragobj.push_back( *v ); } FWObjectDrag *drag = new FWObjectDrag(dragobj, this); @@ -474,7 +491,7 @@ void ObjectTreeView::dragMoveEvent( QDragMoveEvent *ev) if (isCurrReadOnly(ev) || !ev->mimeData()->hasFormat(FWObjectDrag::FWB_MIME_TYPE)) { - qDebug("ObjectTreeView::itemOpened"); + qDebug("ObjectTreeView::dragMoveEvent"); ev->setAccepted(false); return; } @@ -627,7 +644,6 @@ void ObjectTreeView::mouseReleaseEvent( QMouseEvent *e ) QTreeWidget::mouseReleaseEvent(e); - if (!process_mouse_release_event) { // just do not switch object in the editor, otherwise @@ -666,21 +682,32 @@ void ObjectTreeView::mouseReleaseEvent( QMouseEvent *e ) */ void ObjectTreeView::editCurrentObject() { - if (fwbdebug) - qDebug("ObjectTreeView::editCurrentObject"); - + if (fwbdebug) qDebug("ObjectTreeView::editCurrentObject"); emit editCurrentObject_sign(); - - if (fwbdebug) - qDebug("ObjectTreeView::editCurrentObject done"); + if (fwbdebug) qDebug("ObjectTreeView::editCurrentObject done"); } +// QAbstractItemView (base class of QTreeWidget) calls this when +// element is double-clicked +void ObjectTreeView::edit(const QModelIndex & index) +{ + if (fwbdebug) qDebug("ObjectTreeView::edit "); + + FWObject *obj = getCurrentObject(); + +/* system folders open on doubleclick, while for regular objects it + * opens an editor + */ + if (m_project->isSystem(obj)) QTreeWidget::edit(index); + else editCurrentObject(); +} + +#if 0 void ObjectTreeView::mouseDoubleClickEvent( QMouseEvent *e ) { - if (fwbdebug) - qDebug("ObjectTreeView::mouseDoubleClickEvent"); + if (fwbdebug) qDebug("ObjectTreeView::mouseDoubleClickEvent"); - second_click=true; + second_click = true; singleClickTimer.stop(); FWObject *obj = getCurrentObject(); @@ -693,6 +720,7 @@ void ObjectTreeView::mouseDoubleClickEvent( QMouseEvent *e ) else editCurrentObject(); } +#endif void ObjectTreeView::keyPressEvent( QKeyEvent* ev ) { @@ -749,9 +777,7 @@ void ObjectTreeView::keyReleaseEvent( QKeyEvent* ev ) void ObjectTreeView::itemOpened () { - if (fwbdebug) - qDebug("ObjectTreeView::itemOpened"); - + if (fwbdebug) qDebug("ObjectTreeView::itemOpened"); editCurrentObject(); } @@ -782,20 +808,24 @@ void ObjectTreeView::itemSelectionChanged() selectedObjects.clear(); - QTreeWidgetItemIterator it(this); - while ( *it ) + QList selected = selectedItems(); + QList::Iterator it; +// QTreeWidgetItemIterator it(this); +// while ( *it ) + for (it=selected.begin(); it!=selected.end(); it++) { - if ((*it)->isSelected()) - { - QTreeWidgetItem *itm= (*it); - ObjectTreeViewItem *otvi=dynamic_cast(itm); +// if ((*it)->isSelected()) +// { + QTreeWidgetItem *itm = (*it); + ObjectTreeViewItem *otvi = dynamic_cast(itm); selectedObjects.push_back(otvi->getFWObject()); - if (fwbdebug) - qDebug("ObjectTreeView::selectionChanged: selected otvi=%p object %s", otvi, otvi->getFWObject()->getName().c_str()); - } - ++it; + if (fwbdebug) qDebug( + "ObjectTreeView::selectionChanged: selected otvi=%p object %s", + otvi, otvi->getFWObject()->getName().c_str()); +// } +// ++it; } setLockFlags(); diff --git a/src/gui/ObjectTreeView.h b/src/gui/ObjectTreeView.h index f4ffa000d..4a9bebffc 100644 --- a/src/gui/ObjectTreeView.h +++ b/src/gui/ObjectTreeView.h @@ -70,8 +70,10 @@ class ObjectTreeView : public QTreeWidget { std::vector selectedObjects; ProjectPanel* m_project; bool isCurrReadOnly(QDragMoveEvent *ev); - libfwbuilder::FWObject *getDropTarget(QDropEvent *ev, libfwbuilder::FWObject* dragobj); - protected: + libfwbuilder::FWObject *getDropTarget( + QDropEvent *ev, libfwbuilder::FWObject* dragobj); + +protected: bool event( QEvent *event ); @@ -83,7 +85,7 @@ class ObjectTreeView : public QTreeWidget { virtual void keyPressEvent( QKeyEvent* ev ); virtual void mousePressEvent( QMouseEvent *e ); virtual void mouseReleaseEvent( QMouseEvent *e ); - virtual void mouseDoubleClickEvent( QMouseEvent *e ); + //virtual void mouseDoubleClickEvent( QMouseEvent *e ); virtual void mouseMoveEvent( QMouseEvent *e ); virtual void keyReleaseEvent( QKeyEvent* ev ); @@ -132,13 +134,14 @@ class ObjectTreeView : public QTreeWidget { public slots: - void itemSelectionChanged(); - void resetSelection(); - void currentItemChanged(QTreeWidgetItem *cur); - void itemCollapsed(QTreeWidgetItem *itm); - void itemExpanded(QTreeWidgetItem *itm); - void itemOpened (); - virtual void updateTreeItems(); + void edit(const QModelIndex & index); + void itemSelectionChanged(); + void resetSelection(); + void currentItemChanged(QTreeWidgetItem *cur); + void itemCollapsed(QTreeWidgetItem *itm); + void itemExpanded(QTreeWidgetItem *itm); + void itemOpened (); + virtual void updateTreeItems(); signals: diff --git a/src/gui/ObjectTreeViewItem.cpp b/src/gui/ObjectTreeViewItem.cpp index 96be78331..669c23e70 100644 --- a/src/gui/ObjectTreeViewItem.cpp +++ b/src/gui/ObjectTreeViewItem.cpp @@ -36,7 +36,7 @@ using namespace std; using namespace libfwbuilder; -QVariant ObjectTreeViewItem::data (int column, int role) const +QVariant ObjectTreeViewItem::data(int column, int role) const { if (role == Qt::FontRole) { @@ -62,11 +62,13 @@ QVariant ObjectTreeViewItem::data (int column, int role) const return QTreeWidgetItem::data(column, role); } -bool ObjectTreeViewItem::operator< ( const QTreeWidgetItem & other ) const +bool ObjectTreeViewItem::operator<( const QTreeWidgetItem & other ) const { int rank1 = -1 ; int rank2 = -1; - const ObjectTreeViewItem * otvi = dynamic_cast(& other); + const ObjectTreeViewItem * otvi = + dynamic_cast(& other); + if (otvi->objptr==NULL) return true ; if (objptr==NULL) diff --git a/src/gui/ProjectPanel.cpp b/src/gui/ProjectPanel.cpp index 93f53b29e..fd09b25e2 100644 --- a/src/gui/ProjectPanel.cpp +++ b/src/gui/ProjectPanel.cpp @@ -813,10 +813,6 @@ void ProjectPanel::fileClose() { if (fwbdebug) qDebug("ProjectPanel::fileClose(): start"); -// These are called from closeEvent() -// saveState(); -// storeLastOpenedLib(); - closing=true ; findObjectWidget->init(); @@ -829,14 +825,7 @@ void ProjectPanel::fileClose() if (fwbdebug) qDebug("ProjectPanel::fileClose(): clearing widgets"); -#if 0 - firewalls.clear(); - visibleFirewall = NULL; - visibleRuleSet = NULL; - clearFirewallTabs(); - clearObjects(); FWObjectClipboard::obj_clipboard->clear(); -#endif mdiWindow->close(); @@ -845,7 +834,6 @@ void ProjectPanel::fileClose() visibleRuleSet = NULL; clearFirewallTabs(); clearObjects(); - FWObjectClipboard::obj_clipboard->clear(); if (fwbdebug) qDebug("ProjectPanel::fileClose(): done"); } @@ -3048,10 +3036,12 @@ void ProjectPanel::stateChanged(Qt::WindowStates oldState, bool is_maximized = ((newState & Qt::WindowMaximized) != 0); bool was_maximized = ((oldState & Qt::WindowMaximized) != 0); bool is_active = ((newState & Qt::WindowActive) != 0); +#if 0 if (fwbdebug) qDebug("ProjectPanel::stateChanged " "newState=%d was_maximized=%d is_maximized=%d is_active=%d", int(newState), was_maximized, is_maximized, is_active); +#endif st->setInt("Window/maximized", is_maximized); if (!was_maximized && is_maximized) saveState(); // restore size only if state of the window changes from "maximized" diff --git a/src/gui/RuleSetView.cpp b/src/gui/RuleSetView.cpp index 46c962fd1..e029306d8 100644 --- a/src/gui/RuleSetView.cpp +++ b/src/gui/RuleSetView.cpp @@ -3810,8 +3810,8 @@ void RuleSetView::dragEnterEvent( QDragEnterEvent *ev) void RuleSetView::dragMoveEvent( QDragMoveEvent *ev) { - if (fwbdebug) - qDebug("RuleSetView::dragMoveEvent"); +// if (fwbdebug) qDebug("RuleSetView::dragMoveEvent"); + QWidget *fromWidget = ev->source(); // The source of DnD object must be the same instance of fwbuilder @@ -3883,10 +3883,10 @@ void RuleSetView::dragMoveEvent( QDragMoveEvent *ev) } -void RuleSetView::dropEvent( QDropEvent *ev) +void RuleSetView::dropEvent(QDropEvent *ev) { - if (fwbdebug) - qDebug("RuleSetView::dropEvent"); + if (fwbdebug) qDebug("RuleSetView::dropEvent"); + if (!isTreeReadWrite(this,ruleset)) return; int row = rowAt( ev->pos().y() ); @@ -3906,7 +3906,8 @@ void RuleSetView::dropEvent( QDropEvent *ev) if (fwbdebug) { - qDebug("RuleSetView::dropEvent drop event mode=%d", ev->proposedAction()); + qDebug("RuleSetView::dropEvent drop event mode=%d", + ev->proposedAction()); qDebug(" src widget = %p", ev->source()); qDebug(" this = %p", this ); } @@ -3920,6 +3921,10 @@ void RuleSetView::dropEvent( QDropEvent *ev) FWObject *dragobj = *i; assert(dragobj!=NULL); + if (fwbdebug) + qDebug("RuleSetView::dropEvent dragobj=%s", + dragobj->getName().c_str()); + if (ev->source()!=this) { insertObjectFromOther(row, col, dragobj);