summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXTra.KrazzY <XTra.KrazzY@gmail.com>2008-10-10 13:23:10 +0000
committerXTra.KrazzY <XTra.KrazzY@gmail.com>2008-10-10 13:23:10 +0000
commit15c3ea50fc2d62344ec8d1666ea07bc12f855552 (patch)
tree4ce7f9f77b82629c74eb7fa9b206ee55ed735ec3
parent08984104d7a2920676bcc91602fcb9ab42c80bb8 (diff)
Made filesystem viewer to show folders and subfolders right. Only bug remaining (supposed to be simple) is that after the first folder recursion the searching stops.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@826 8ced0084-cf51-0410-be5f-012b33b47a6e
-rw-r--r--Source/Core/DolphinWX/Src/FilesystemViewer.cpp43
-rw-r--r--Source/Core/DolphinWX/Src/FilesystemViewer.h7
2 files changed, 44 insertions, 6 deletions
diff --git a/Source/Core/DolphinWX/Src/FilesystemViewer.cpp b/Source/Core/DolphinWX/Src/FilesystemViewer.cpp
index 0b5b56bb9c..da10f04759 100644
--- a/Source/Core/DolphinWX/Src/FilesystemViewer.cpp
+++ b/Source/Core/DolphinWX/Src/FilesystemViewer.cpp
@@ -51,14 +51,11 @@ CFilesystemViewer::CFilesystemViewer(const std::string fileName, wxWindow* paren
CreateGUIControls();
// shuffle2: things only appear in the tree for me when using debug build; why? :<
- // TODO: make proper looking dirs
wxTreeItemId dirId = NULL;
- for(u32 a = 1; a < Our_Files.size(); ++a)
- {
- m_Treectrl->AppendItem(RootId, wxString::Format(_T("%s"), Our_Files[a]->m_FullPath));
+ fileIter beginning = Our_Files.begin(), pos = Our_Files.begin();
+
+ CreateDirectoryTree(RootId, beginning, pos, "\\");
- //if(Our_Files[a]->IsDirectory())
- }
m_Treectrl->Expand(RootId);
// Disk header and apploader
@@ -99,6 +96,40 @@ CFilesystemViewer::~CFilesystemViewer()
delete OpenISO;
}
+void CFilesystemViewer::CreateDirectoryTree(wxTreeItemId& parent,
+ fileIter& begin,
+ fileIter& iterPos,
+ char *directory)
+{
+ //TODO(XK): Fix more than one folder/file not appearing in the root
+ if(iterPos == begin)
+ ++iterPos;
+
+ char *name = (char *)((*iterPos)->m_FullPath);
+
+ do
+ {
+ if((*iterPos)->IsDirectory()) {
+ char *dirName;
+ name[strlen(name) - 1] = '\0';
+ dirName = strrchr(name, '\\');
+ if(!dirName)
+ dirName = name;
+ else
+ dirName++;
+ //filename = strrchr(name, '\\'); ++filename;
+ wxTreeItemId item = m_Treectrl->AppendItem(parent, wxT(dirName));
+ CreateDirectoryTree(item, begin, ++iterPos, name);
+ } else {
+
+ //filename = strrchr(name, '\\'); ++filename;
+ m_Treectrl->AppendItem(parent, wxT(strrchr(name, '\\') + 1));
+ }
+ ++iterPos;
+ name = (char *)((*iterPos)->m_FullPath);
+ } while(strstr(name, directory));
+}
+
void CFilesystemViewer::CreateGUIControls()
{
m_Close = new wxButton(this, ID_CLOSE, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
diff --git a/Source/Core/DolphinWX/Src/FilesystemViewer.h b/Source/Core/DolphinWX/Src/FilesystemViewer.h
index 1dc2a19636..cbbf2b706a 100644
--- a/Source/Core/DolphinWX/Src/FilesystemViewer.h
+++ b/Source/Core/DolphinWX/Src/FilesystemViewer.h
@@ -25,6 +25,8 @@
#include <wx/treectrl.h>
#include <wx/gbsizer.h>
#include <string>
+
+#include "Filesystem.h"
#undef FILESYSTEM_VIEWER_STYLE
#define FILESYSTEM_VIEWER_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX
@@ -132,6 +134,11 @@ class CFilesystemViewer : public wxDialog
void OnExtractFile(wxCommandEvent& event);
void OnReplaceFile(wxCommandEvent& event);
void OnRenameFile(wxCommandEvent& event);
+
+ typedef std::vector<const DiscIO::SFileInfo *>::iterator fileIter;
+
+ void CreateDirectoryTree(wxTreeItemId& parent,fileIter& begin,
+ fileIter& iterPos, char *directory);
};
#endif