mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-20 12:44:46 +00:00
331 lines
10 KiB
Plaintext
331 lines
10 KiB
Plaintext
//-----------------------------------------------------------------------------
|
|
// Copyright (c) 2012 GarageGames, LLC
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to
|
|
// deal in the Software without restriction, including without limitation the
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
// IN THE SOFTWARE.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Add to Sim Callback
|
|
// Purpose : Intitialize Variables and Setup State.
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::onAdd( %this )
|
|
{
|
|
// Callback function Succeed
|
|
%this.SuccessCallback = 0;
|
|
// Callback function Cancel
|
|
%this.CancelCallback = 0;
|
|
|
|
// Multiple Select Flag
|
|
%this.MultipleSelect = false;
|
|
|
|
// File Extensions Group
|
|
%this.FileExtensions = new SimGroup();
|
|
|
|
%this.AddFilter("*.*","All Files");
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Remove from Sim Callback
|
|
// Purpose : Destroy Resources.
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::onRemove( %this )
|
|
{
|
|
|
|
// Remove FileExtensions Group
|
|
if ( isObject( %this.FileExtensions ) )
|
|
%this.FileExtensions.delete();
|
|
|
|
// Remove Returned Files Group
|
|
if( isObject( %this.ReturnFiles ) )
|
|
%this.ReturnFiles.delete();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Show on Screen Callback
|
|
// Purpose : Destroy Resources.
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::onWake( %this )
|
|
{
|
|
// Necessary
|
|
%dirTree = %this.findObjectByInternalName("DirectoryTree", true);
|
|
%fileList = %this.findObjectByInternalName("FileList", true);
|
|
%filterList = %this.findObjectByInternalName("FilterList", true);
|
|
%cancelButton = %this.findObjectByInternalName("CancelButton", true);
|
|
%okButton = %this.findObjectByInternalName("OkButton", true);
|
|
|
|
// Optional
|
|
%fileName = %this.findObjectByInternalName("FileName", true);
|
|
|
|
// Check for functionality Components.
|
|
if( !isObject( %dirTree ) || !isObject( %fileList ) || !isObject( %filterList ) )
|
|
{
|
|
error("FileDialogBase::onWake - Unable to find NECESSARY child controls.");
|
|
return false;
|
|
}
|
|
|
|
// Check for button components.
|
|
if( !isObject( %cancelButton ) || !isObject( %okButton ) )
|
|
{
|
|
error("FileDialogBase::onWake - Unable to find accept and cancel buttons!");
|
|
return false;
|
|
}
|
|
|
|
// Tag controls so that they can navigate our dialog.
|
|
%dirTree.parent = %this;
|
|
%fileList.parent = %this;
|
|
%filterList.parent = %this;
|
|
%okButton.parent = %this;
|
|
%cancelButton.parent = %this;
|
|
|
|
// Tag optionals
|
|
if( isObject( %fileName ) )
|
|
%fileName.parent = %this;
|
|
|
|
// Finally, make sure our ReturnFiles group is empty.
|
|
if( isObject( %this.ReturnFiles ) )
|
|
%this.ReturnFiles.delete();
|
|
|
|
%this.ReturnFiles = new SimGroup();
|
|
%this.add( %this.ReturnFiles );
|
|
|
|
// If no filters
|
|
if( %this.GetFilterCount() == 0 )
|
|
%this.addfilter("*.*","All Files");
|
|
|
|
%this.PopulateFilters();
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Add a file extension filter to the list
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::AddFilter( %this, %extension, %caption )
|
|
{
|
|
if( !isObject( %this.FileExtensions ) )
|
|
{
|
|
error("OpenFileDialog::AddFilter - FileExtensions Group does not exist!");
|
|
return false;
|
|
}
|
|
|
|
%filter = new ScriptObject()
|
|
{
|
|
extension = %extension;
|
|
caption = %caption;
|
|
};
|
|
|
|
// Add to filter list
|
|
%this.FileExtensions.add( %filter );
|
|
|
|
return %filter;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Clear filters by file extension
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::ClearFilters( %this )
|
|
{
|
|
if( isObject( %this.FileExtensions ) )
|
|
%this.FileExtensions.delete();
|
|
|
|
%this.FileExtensions = new SimGroup();
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Get number of filters
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::GetFilterCount( %this )
|
|
{
|
|
if( !isObject( %this.FileExtensions ) )
|
|
return 0;
|
|
|
|
// Return Count
|
|
return %this.FileExtensions.getCount();
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// File Dialog Base - Populate dropdown with filter options
|
|
//-----------------------------------------------------------------------------
|
|
function FileDialogBase::PopulateFilters( %this )
|
|
{
|
|
%fileExtensions = %this.FileExtensions;
|
|
if( !isObject( %fileExtensions ) )
|
|
{
|
|
error("OpenFileDialog::PopulateFilters - FileExtensions Group does not exist!");
|
|
return false;
|
|
}
|
|
|
|
%filterList = %this.findObjectByInternalName("FilterList", true);
|
|
if( !isObject( %filterList ) )
|
|
{
|
|
error("FileDialogBase::PopulateFilters - Filter List Dropdown not found!");
|
|
return false;
|
|
}
|
|
|
|
// Clear filter list
|
|
%filterList.clear();
|
|
|
|
// Populate List
|
|
for( %i = 0; %i < %fileExtensions.getCount(); %i++ )
|
|
{
|
|
// Fetch Filter Script Object
|
|
%filter = %fileExtensions.getObject( %i );
|
|
|
|
// Add item to list
|
|
%filterList.add( %filter.Caption SPC "(" SPC %filter.Extension SPC ")", %filter.getID() );
|
|
}
|
|
|
|
// Set First Item to Selected.
|
|
%filterList.setFirstSelected();
|
|
|
|
|
|
}
|
|
|
|
function FileDialogOkButton::onClick( %this )
|
|
{
|
|
if( !isObject( %this.parent ) )
|
|
{
|
|
error("FileDialogBase->FileDialogOkButton::onClick - Unable to find proper parent control! Functionality Compromised!");
|
|
return;
|
|
}
|
|
|
|
%dirTree = %this.parent.findObjectByInternalName("DirectoryTree", true);
|
|
%fileList = %this.parent.findObjectByInternalName("FileList", true);
|
|
%filterList = %this.parent.findObjectByInternalName("FilterList", true);
|
|
|
|
// Check for functionality Components.
|
|
if( !isObject( %dirTree ) || !isObject( %fileList ) || !isObject( %filterList ) )
|
|
{
|
|
error("FileDialogOkButton::onClick - Unable to find NECESSARY sibling controls.");
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Fetch Path
|
|
//
|
|
%path = %dirTree.getSelectedPath();
|
|
|
|
//
|
|
// Compose File Name
|
|
//
|
|
%fileNameCtrl = %this.parent.findObjectByInternalName("FileName", true);
|
|
|
|
// FileName TextEdit?
|
|
if( isObject( %fileNameCtrl ) )
|
|
{
|
|
// Get FileName from TextEdit
|
|
%fileName = %fileNameCtrl.getText();
|
|
|
|
// Get Filter Object from dropdown list
|
|
%filterObj = %filterList.getSelected();
|
|
|
|
// Validate File Extension
|
|
if( fileExt( %fileName ) $= "" && isObject( %filterObj ) )
|
|
{
|
|
// Append Extension to FileName
|
|
%fileName = %fileName @ fileExt( %filterObj.Extension );
|
|
}
|
|
}
|
|
else
|
|
%fileName = %fileList.getSelectedFile();
|
|
|
|
//
|
|
// Build Full Path
|
|
//
|
|
%fullPath = %path @ "/" @ %fileName;
|
|
|
|
Canvas.popDialog( %this.parent );
|
|
|
|
// Callback
|
|
eval( %this.parent.SuccessCallback @ "(\"" @ %fullPath @"\");" );
|
|
%this.parent.SuccessCallback = 0;
|
|
|
|
//error("Ok");
|
|
|
|
}
|
|
|
|
function FileDialogCancelButton::onClick( %this )
|
|
{
|
|
Canvas.popDialog( %this.parent );
|
|
//error("Cancel");
|
|
}
|
|
|
|
|
|
function FileDialogDirectoryTree::onSelectPath( %this, %path )
|
|
{
|
|
%fileList = %this.parent.findObjectByInternalName("FileList", true);
|
|
%filterList = %this.parent.findObjectByInternalName("FilterList", true);
|
|
|
|
|
|
%filterObj = %filterList.getSelected();
|
|
if( !isObject( %filterObj ) )
|
|
%filter = "*.*";
|
|
else
|
|
%filter = %filterObj.Extension;
|
|
|
|
%fileList.setPath( %path, %filter );
|
|
}
|
|
|
|
|
|
function FileDialogFilterList::onSelect( %this, %id, %text )
|
|
{
|
|
if( !isObject( %id ) )
|
|
{
|
|
error("FileDialogFilterList::onSelect - Invalid Filter Object!");
|
|
return;
|
|
}
|
|
|
|
%fileList = %this.parent.findObjectByInternalName("FileList", true);
|
|
|
|
%fileList.setFilter( %id.Extension );
|
|
|
|
}
|
|
|
|
|
|
function FileDialogFileList::onDoubleClick( %this )
|
|
{
|
|
//error("DoubleClick");
|
|
%okButton = %this.parent.findObjectByInternalName("OkButton", true);
|
|
|
|
if( isObject( %okButton ) )
|
|
%okButton.performClick();
|
|
}
|
|
|
|
function FileDialogFileList::onSelect( %this, %listid, %file )
|
|
{
|
|
%fileNameCtrl = %this.parent.findObjectByInternalName("FileName", true);
|
|
|
|
// FileName TextEdit?
|
|
if( !isObject( %fileNameCtrl ) )
|
|
return;
|
|
|
|
// Update our file name to the one selected
|
|
%fileNameCtrl.setText( %file );
|
|
}
|
|
|
|
function FileDialogFileName::onReturn( %this )
|
|
{
|
|
//error("onReturn");
|
|
%okButton = %this.parent.findObjectByInternalName("OkButton", true);
|
|
|
|
if( isObject( %okButton ) )
|
|
%okButton.performClick();
|
|
}
|