[Scummvm-cvs-logs] SF.net SVN: scummvm: [27905] scummex/branches/gsoc2007-gameresbrowser/src

zbychs at users.sourceforge.net zbychs at users.sourceforge.net
Wed Jul 4 22:45:30 CEST 2007


Revision: 27905
          http://scummvm.svn.sourceforge.net/scummvm/?rev=27905&view=rev
Author:   zbychs
Date:     2007-07-04 13:45:30 -0700 (Wed, 04 Jul 2007)

Log Message:
-----------
Minor bug fixes in DirectoryPresenter, some extra ASSERTs.

Modified Paths:
--------------
    scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.h
    scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.h
    scummex/branches/gsoc2007-gameresbrowser/src/gui/VirtualNode.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/VirtualNode.h

Modified: scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.cpp	2007-07-04 19:42:10 UTC (rev 27904)
+++ scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.cpp	2007-07-04 20:45:30 UTC (rev 27905)
@@ -144,8 +144,11 @@
 }
 
 /*static*/ void InitializedObjects::release() {
-	if (_instance)
+	if (_instance) {
+		ASSERT( _instance->_initializedObjects.size() == 0 );
 		delete _instance;
+	}
+
 	_instance = NULL;
 }
 

Modified: scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.h	2007-07-04 19:42:10 UTC (rev 27904)
+++ scummex/branches/gsoc2007-gameresbrowser/src/core/pinslot.h	2007-07-04 20:45:30 UTC (rev 27905)
@@ -401,6 +401,7 @@
 
 	//when overriding allways run super
 	virtual void destroy() {
+		ASSERT( !isRealizedAnywhere() );
 		delete_pins_slots();
 		RCObject::destroy();
 		InitializedObjects::get()->unregisterObject(this);
@@ -410,6 +411,10 @@
 	//The implementations provided here are a good base for an object that can be
 	//realized only in one ObjectChain at once.
 
+	virtual bool isRealizedAnywhere() {
+		return _realized;
+	}
+
 	virtual bool isRealized(ObjectChain* ochain) {
 		return _realized && (_ochain == ochain);
 	}

Modified: scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.cpp	2007-07-04 19:42:10 UTC (rev 27904)
+++ scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.cpp	2007-07-04 20:45:30 UTC (rev 27905)
@@ -64,6 +64,10 @@
 void DirectoryPresenter::unrealize(ObjectChain* ochain) {
 	if (!isRealized(ochain))
 		return;
+	std::cout << "DirectoryPresenter::unrealize(): "
+			  << (_inodeprovider ? toString(_inodeprovider->getNode()->getTreeItemName()) : "<error>") << " "
+			  << (_idirectory ? _idirectory->getName() : "<not expanded>") << " "
+			  << std::endl;
 
 	ExplorationTree::get()->unregisterDirectoryPresenter(this);
 
@@ -78,27 +82,18 @@
 		recDel(ExplorationTree::_getTree(), node->getTreeItem());
 	}
 
+	_expanded = false;
+	_idirectory = NULL;
+	_inodeprovider = NULL;
+
 	_directorySlot->releaseInterface();
 	_nodeSlot->releaseInterface();
 
 	BObject::unrealize(ochain);
 }
 
-bool DirectoryPresenter::prepareKidChain(const RCPtr<VirtualNode>& virtualNode,
-										 std::string nodeName, bool isFile) {
+bool DirectoryPresenter::prepareKidChain(const RCPtr<VirtualNode>& virtualNode, bool isFile) {
 
-	VirtualNode* parent = _inodeprovider->getNode();
-
-	wxTreeItemId kidTreeItem = ExplorationTree::_getTree()->
-		AppendItem(parent->getTreeItem(),
-				   wxString(nodeName.c_str(), wxConvUTF8),
-				   -1, -1, NULL);
-
-	virtualNode->setTreeItem(kidTreeItem);
-
-	ExplorationTree::_getTree()->SetItemData(kidTreeItem,
-		new VirtualNodeItemData( virtualNode.get() ) );
-
 	//Here we try to figure the fileType and the best parsers for it:
 
 	guid_list parsers;
@@ -154,13 +149,24 @@
 
 	std::cout << "DirectoryPresenter::expand(): " << _idirectory->getName() << std::endl;
 
+	VirtualNode* parent = _inodeprovider->getNode();
+
 	const std::list<IDirectory*>& subdirs = _idirectory->getSubDirs();
 	std::list<IDirectory*>::const_iterator j;
 	for (j = subdirs.begin(); j != subdirs.end(); ++j) {
 		IDirectory* idirectory = *j;
 
-		RCPtr<VirtualNode> virtualDir( new VirtualDirectory(wxTreeItemId(), idirectory) );
-		prepareKidChain(virtualDir, idirectory->getName(), false);
+		wxTreeItemId kidTreeItem = ExplorationTree::_getTree()->
+			AppendItem(parent->getTreeItem(),
+					   wxString(idirectory->getName().c_str(), wxConvUTF8),
+					   -1, -1, NULL);
+
+		RCPtr<VirtualNode> virtualDir( new VirtualDirectory(kidTreeItem, idirectory) );
+
+		ExplorationTree::_getTree()->SetItemData(kidTreeItem,
+			new VirtualNodeItemData( virtualDir.get() ) );
+
+		prepareKidChain(virtualDir, false);
 	}
 
 	const std::list<IFile*>& files = _idirectory->getFiles();
@@ -168,8 +174,17 @@
 	for (i = files.begin(); i != files.end(); ++i) {
 		IFile* ifile = *i;
 
-		RCPtr<VirtualNode> virtualFile( new VirtualFile(wxTreeItemId(), ifile) );
-		prepareKidChain(virtualFile, ifile->getName(), true);
+		wxTreeItemId kidTreeItem = ExplorationTree::_getTree()->
+			AppendItem(parent->getTreeItem(),
+					   wxString(ifile->getName().c_str(), wxConvUTF8),
+					   -1, -1, NULL);
+
+		RCPtr<VirtualNode> virtualFile( new VirtualFile(kidTreeItem, ifile) );
+
+		ExplorationTree::_getTree()->SetItemData(kidTreeItem,
+			new VirtualNodeItemData( virtualFile.get() ) );
+
+		prepareKidChain(virtualFile, true);
 	}
 
 	//now realize those chains:

Modified: scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.h	2007-07-04 19:42:10 UTC (rev 27904)
+++ scummex/branches/gsoc2007-gameresbrowser/src/gui/DirectoryPresenter.h	2007-07-04 20:45:30 UTC (rev 27905)
@@ -36,6 +36,9 @@
 
 	SLOTS_DECL
 
+	DirectoryPresenter()
+	: _idirectory(NULL), _inodeprovider(NULL), _expanded(false) {}
+
 	virtual bool realize(ObjectChain* ochain);
 	virtual void unrealize(ObjectChain* ochain);
 
@@ -43,7 +46,7 @@
 	virtual void deleteKidChains();
 
 	virtual void expand();
-	bool prepareKidChain(const RCPtr<VirtualNode>& virtualNode, std::string nodeName, bool isFile);
+	bool prepareKidChain(const RCPtr<VirtualNode>& virtualNode, bool isFile);
 };
 
 /////////////////////////////////////////////////////////////////////////////

Modified: scummex/branches/gsoc2007-gameresbrowser/src/gui/VirtualNode.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/gui/VirtualNode.cpp	2007-07-04 19:42:10 UTC (rev 27904)
+++ scummex/branches/gsoc2007-gameresbrowser/src/gui/VirtualNode.cpp	2007-07-04 20:45:30 UTC (rev 27905)
@@ -55,11 +55,18 @@
 /////////////////////////////////////////////////////////////////////////////
 
 VirtualNode* VirtualNode::getParent() {
+	ASSERT(_mineTreeItem.IsOk());
 	wxTreeItemId parentTreeItem = ExplorationTree::_getTree()->GetItemParent(_mineTreeItem);
 	return VirtualNodeItemData::getNode(parentTreeItem);
 }
 
+wxString VirtualNode::getTreeItemName() {
+	ASSERT(_mineTreeItem.IsOk());
+	wxString name = ExplorationTree::_getTree()->GetItemText(_mineTreeItem);
+	return name;
+}
 
+
 PIN_DESCS_EX(VirtualNode)
 	PIN_DESC(_nodePin, PIN_MULTICAST, getNodeProviderImpl, releaseNodeProviderImpl)
 END_DESCS

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/VirtualNode.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/VirtualNode.h	2007-07-04 19:42:10 UTC (rev 27904)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/VirtualNode.h	2007-07-04 20:45:30 UTC (rev 27905)
@@ -57,17 +57,22 @@
 	PINS_DECL
 
 	VirtualNode(wxTreeItemId mineTreeItem)
-		: _mineTreeItem(mineTreeItem) {}
+		: _mineTreeItem(mineTreeItem) {
+		ASSERT(_mineTreeItem.IsOk());
+	}
 
 	/*const std::string& getName() {
 		return _name;
 	}*/
 
 	wxTreeItemId getTreeItem() {
+		ASSERT(_mineTreeItem.IsOk());
 		return _mineTreeItem;
 	}
+	wxString getTreeItemName();
 
 	void setTreeItem(wxTreeItemId mineTreeItem) {
+		ASSERT(mineTreeItem.IsOk());
 		_mineTreeItem = mineTreeItem;
 	}
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list