added everything
This commit is contained in:
175
engine/gui/controls/guiDirectoryFileListCtrl.cc
Executable file
175
engine/gui/controls/guiDirectoryFileListCtrl.cc
Executable file
@@ -0,0 +1,175 @@
|
||||
#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 && isMethod("onDoubleClick") )
|
||||
Con::executef(this, 1, "onDoubleClick");
|
||||
|
||||
}
|
||||
|
||||
|
||||
void GuiDirectoryFileListCtrl::openDirectory()
|
||||
{
|
||||
Vector<Platform::FileInfo> fileVector;
|
||||
Platform::dumpPath( mFilePath, fileVector, 0 );
|
||||
|
||||
// Clear the current file listing
|
||||
clearItems();
|
||||
|
||||
// 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 ) )
|
||||
addItem( (*i).pFileName );
|
||||
}
|
||||
|
||||
//Done!
|
||||
}
|
||||
|
||||
|
||||
void GuiDirectoryFileListCtrl::setCurrentFilter( const char* filter )
|
||||
{
|
||||
if( ! filter )
|
||||
return;
|
||||
|
||||
mFilter = StringTable->insert( filter );
|
||||
|
||||
// Update our view
|
||||
openDirectory();
|
||||
|
||||
}
|
||||
|
||||
ConsoleMethod( GuiDirectoryFileListCtrl, setFilter, void, 3, 3, "%obj.setFilter([mask space delimited])")
|
||||
{
|
||||
object->setCurrentFilter( argv[2] );
|
||||
}
|
||||
|
||||
bool GuiDirectoryFileListCtrl::setCurrentPath( const char* path, const char* 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;
|
||||
|
||||
// A bad path!? For shame...
|
||||
if( !Platform::isDirectory( FullPath ) && !Platform::hasSubDirectory( FullPath ) )
|
||||
return false;
|
||||
|
||||
// Store our new info
|
||||
mFilePath = StringTable->insert( FullPath );
|
||||
|
||||
if( filter && dStricmp( filter, "" ) )
|
||||
mFilter = StringTable->insert( filter );
|
||||
|
||||
// Update our view
|
||||
openDirectory();
|
||||
|
||||
// Peace out!
|
||||
return true;
|
||||
}
|
||||
|
||||
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, getSelectedFiles, const char*, 2, 2, "getSelectedFiles () - returns a word separated list of selected file(s)" )
|
||||
{
|
||||
Vector<S32> ItemVector;
|
||||
object->getSelectedItems( ItemVector );
|
||||
|
||||
if( ItemVector.empty() )
|
||||
return StringTable->insert( "" );
|
||||
|
||||
// Get an adequate buffer
|
||||
char itemBuffer[256];
|
||||
dMemset( itemBuffer, 0, 256 );
|
||||
|
||||
char* returnBuffer = Con::getReturnBuffer( ItemVector.size() * 64 );
|
||||
dMemset( returnBuffer, 0, ItemVector.size() * 64 );
|
||||
|
||||
// Fetch the first entry
|
||||
StringTableEntry itemText = object->getItemText( ItemVector[0] );
|
||||
if( !itemText )
|
||||
return StringTable->lookup("");
|
||||
dSprintf( returnBuffer, ItemVector.size() * 64, "%s", itemText );
|
||||
|
||||
// If only one entry, return it.
|
||||
if( ItemVector.size() == 1 )
|
||||
return returnBuffer;
|
||||
|
||||
// Fetch the remaining entries
|
||||
for( S32 i = 1; i < ItemVector.size(); i++ )
|
||||
{
|
||||
StringTableEntry itemText = object->getItemText( ItemVector[i] );
|
||||
if( !itemText )
|
||||
continue;
|
||||
|
||||
dMemset( itemBuffer, 0, 256 );
|
||||
dSprintf( itemBuffer, 256, " %s", itemText );
|
||||
dStrcat( returnBuffer, itemBuffer );
|
||||
}
|
||||
|
||||
return returnBuffer;
|
||||
|
||||
}
|
||||
|
||||
StringTableEntry GuiDirectoryFileListCtrl::getSelectedFileName()
|
||||
{
|
||||
S32 item = getSelectedItem();
|
||||
if( item == -1 )
|
||||
return StringTable->lookup("");
|
||||
|
||||
StringTableEntry itemText = getItemText( item );
|
||||
if( !itemText )
|
||||
return StringTable->lookup("");
|
||||
|
||||
return itemText;
|
||||
}
|
||||
|
||||
ConsoleMethod( GuiDirectoryFileListCtrl, getSelectedFile, const char*, 2, 2, "getSelectedFile () - returns the currently selected file name" )
|
||||
{
|
||||
return object->getSelectedFileName();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user