Initial commit
This commit is contained in:
108
engine/gui/controls/guiDirectoryFileListCtrl.cc
Executable file
108
engine/gui/controls/guiDirectoryFileListCtrl.cc
Executable file
@@ -0,0 +1,108 @@
|
||||
#include "core/findMatch.h"
|
||||
#include "gui/controls/guiDirectoryFileListCtrl.h"
|
||||
|
||||
|
||||
IMPLEMENT_CONOBJECT( GuiDirectoryFileListCtrl );
|
||||
|
||||
GuiDirectoryFileListCtrl::GuiDirectoryFileListCtrl()
|
||||
{
|
||||
}
|
||||
|
||||
bool GuiDirectoryFileListCtrl::onWake()
|
||||
{
|
||||
if( !Parent::onWake() )
|
||||
return false;
|
||||
|
||||
setCurrentPath( "/", "*.*" );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GuiDirectoryFileListCtrl::onMouseDown(const GuiEvent &event)
|
||||
{
|
||||
Parent::onMouseDown( event );
|
||||
|
||||
if( event.mouseClickCount == 2 && getNamespace() )
|
||||
Con::executef(this, 1, "onDoubleClick");
|
||||
|
||||
}
|
||||
|
||||
|
||||
void GuiDirectoryFileListCtrl::openDirectory()
|
||||
{
|
||||
Vector<Platform::FileInfo> fileVector;
|
||||
Platform::dumpPath( mFilePath, fileVector, 0 );
|
||||
|
||||
// Clear the current file listing
|
||||
clear();
|
||||
|
||||
// Does this dir have any files?
|
||||
if( fileVector.empty() )
|
||||
return;
|
||||
|
||||
// If so, iterate through and list them
|
||||
Vector<Platform::FileInfo>::iterator i = fileVector.begin();
|
||||
for( S32 j=0 ; i != fileVector.end(); i++, j++ )
|
||||
{
|
||||
if( FindMatch::isMatchMultipleExprs( mFilter, (*i).pFileName,false ) )
|
||||
addEntry( j++, (*i).pFileName );
|
||||
}
|
||||
|
||||
//Done!
|
||||
}
|
||||
|
||||
bool GuiDirectoryFileListCtrl::setCurrentPath( StringTableEntry path, StringTableEntry filter )
|
||||
{
|
||||
// Oops, gotta give us a path to work with
|
||||
if( !path )
|
||||
return false;
|
||||
|
||||
char ExpandedPath[512];
|
||||
char FullPath[512];
|
||||
dMemset( ExpandedPath, 0, 512 );
|
||||
dMemset( FullPath, 0, 512 );
|
||||
|
||||
Con::expandScriptFilename( ExpandedPath, 512, path );
|
||||
|
||||
if( ExpandedPath[0] != '/' )
|
||||
dSprintf( FullPath, 512, "%s/%s", Platform::getWorkingDirectory(), ExpandedPath );
|
||||
else
|
||||
dSprintf( FullPath, 512, "%s%s", Platform::getWorkingDirectory(), ExpandedPath );
|
||||
|
||||
// Platform::isDirectory expects no trailing / so make sure we conform
|
||||
if( FullPath[ dStrlen( FullPath ) - 1 ] == '/' )
|
||||
FullPath[ dStrlen( FullPath ) - 1 ] = 0x00;
|
||||
|
||||
if( ! filter )
|
||||
filter = StringTable->insert("*.*");
|
||||
|
||||
// A bad path!? For shame...
|
||||
if( !Platform::isDirectory( FullPath ) && !Platform::hasSubDirectory( FullPath ) )
|
||||
return false;
|
||||
|
||||
// Store our new info
|
||||
mFilePath = StringTable->insert( FullPath );
|
||||
mFilter = StringTable->insert( filter );
|
||||
|
||||
// Update our view
|
||||
openDirectory();
|
||||
|
||||
// Peace out!
|
||||
return true;
|
||||
}
|
||||
|
||||
StringTableEntry GuiDirectoryFileListCtrl::getSelectedFileName()
|
||||
{
|
||||
return StringTable->insert( getSelectedText() );
|
||||
}
|
||||
|
||||
ConsoleMethod( GuiDirectoryFileListCtrl, setPath, bool, 3, 4, "setPath(path,filter) - directory to enumerate files from (without trailing slash)" )
|
||||
{
|
||||
return object->setCurrentPath( argv[2], argv[3] );
|
||||
}
|
||||
|
||||
ConsoleMethod( GuiDirectoryFileListCtrl, getSelectedFile, const char*, 2, 2, "getSelectedFile () - returns the currently selected file name" )
|
||||
{
|
||||
return object->getSelectedFileName();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user