[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