- added exception to skip preview of unsupported audio clips

- fixed a feature that automatically resizes asset Type and Size columns by content
- fixed sorting issue when loading a new file/folder
- asset list is now sorted by 2 columns, first by the column you click, then by the column you previously clicked
This commit is contained in:
RaduMCosma 2015-11-04 14:16:03 +02:00
parent 5ba447aba2
commit 2c94852939
3 changed files with 125 additions and 97 deletions

View File

@ -105,6 +105,10 @@ namespace Unity_Studio
extension = ".fsb"; extension = ".fsb";
preloadData.InfoText += "FSB"; preloadData.InfoText += "FSB";
break; break;
case 2://FSB5
extension = ".fsb";
preloadData.InfoText += "FSB";
break;
case 13: case 13:
extension = ".mp3"; extension = ".mp3";
preloadData.InfoText += "MP3"; preloadData.InfoText += "MP3";

View File

@ -62,7 +62,6 @@
this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage(); this.tabPage1 = new System.Windows.Forms.TabPage();
this.sceneTreeView = new Unity_Studio.GOHierarchy();
this.treeSearch = new System.Windows.Forms.TextBox(); this.treeSearch = new System.Windows.Forms.TextBox();
this.tabPage2 = new System.Windows.Forms.TabPage(); this.tabPage2 = new System.Windows.Forms.TabPage();
this.assetListView = new System.Windows.Forms.ListView(); this.assetListView = new System.Windows.Forms.ListView();
@ -75,6 +74,7 @@
this.previewPanel = new System.Windows.Forms.Panel(); this.previewPanel = new System.Windows.Forms.Panel();
this.assetInfoLabel = new System.Windows.Forms.Label(); this.assetInfoLabel = new System.Windows.Forms.Label();
this.FMODpanel = new System.Windows.Forms.Panel(); this.FMODpanel = new System.Windows.Forms.Panel();
this.FMODcopyright = new System.Windows.Forms.Label();
this.FMODinfoLabel = new System.Windows.Forms.Label(); this.FMODinfoLabel = new System.Windows.Forms.Label();
this.FMODtimerLabel = new System.Windows.Forms.Label(); this.FMODtimerLabel = new System.Windows.Forms.Label();
this.FMODstatusLabel = new System.Windows.Forms.Label(); this.FMODstatusLabel = new System.Windows.Forms.Label();
@ -100,7 +100,7 @@
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.saveFolderDialog1 = new System.Windows.Forms.SaveFileDialog(); this.saveFolderDialog1 = new System.Windows.Forms.SaveFileDialog();
this.treeTip = new System.Windows.Forms.ToolTip(this.components); this.treeTip = new System.Windows.Forms.ToolTip(this.components);
this.FMODcopyright = new System.Windows.Forms.Label(); this.sceneTreeView = new Unity_Studio.GOHierarchy();
this.menuStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel1.SuspendLayout();
@ -391,8 +391,6 @@
this.splitContainer1.SplitterDistance = 420; this.splitContainer1.SplitterDistance = 420;
this.splitContainer1.TabIndex = 2; this.splitContainer1.TabIndex = 2;
this.splitContainer1.TabStop = false; this.splitContainer1.TabStop = false;
this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);
this.splitContainer1.Resize += new System.EventHandler(this.splitContainer1_Resize);
// //
// tabControl1 // tabControl1
// //
@ -419,17 +417,6 @@
this.tabPage1.Text = "Scene Hierarchy"; this.tabPage1.Text = "Scene Hierarchy";
this.tabPage1.UseVisualStyleBackColor = true; this.tabPage1.UseVisualStyleBackColor = true;
// //
// sceneTreeView
//
this.sceneTreeView.CheckBoxes = true;
this.sceneTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
this.sceneTreeView.HideSelection = false;
this.sceneTreeView.Location = new System.Drawing.Point(0, 20);
this.sceneTreeView.Name = "sceneTreeView";
this.sceneTreeView.Size = new System.Drawing.Size(410, 588);
this.sceneTreeView.TabIndex = 1;
this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck);
//
// treeSearch // treeSearch
// //
this.treeSearch.Dock = System.Windows.Forms.DockStyle.Top; this.treeSearch.Dock = System.Windows.Forms.DockStyle.Top;
@ -455,6 +442,7 @@
this.tabPage2.TabIndex = 1; this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "Asset List"; this.tabPage2.Text = "Asset List";
this.tabPage2.UseVisualStyleBackColor = true; this.tabPage2.UseVisualStyleBackColor = true;
this.tabPage2.Resize += new System.EventHandler(this.tabPage2_Resize);
// //
// assetListView // assetListView
// //
@ -491,6 +479,7 @@
// columnHeaderSize // columnHeaderSize
// //
this.columnHeaderSize.Text = "Size"; this.columnHeaderSize.Text = "Size";
this.columnHeaderSize.Width = 23;
// //
// listSearch // listSearch
// //
@ -569,6 +558,16 @@
this.FMODpanel.TabIndex = 2; this.FMODpanel.TabIndex = 2;
this.FMODpanel.Visible = false; this.FMODpanel.Visible = false;
// //
// FMODcopyright
//
this.FMODcopyright.AutoSize = true;
this.FMODcopyright.ForeColor = System.Drawing.SystemColors.ControlLight;
this.FMODcopyright.Location = new System.Drawing.Point(117, 187);
this.FMODcopyright.Name = "FMODcopyright";
this.FMODcopyright.Size = new System.Drawing.Size(283, 13);
this.FMODcopyright.TabIndex = 9;
this.FMODcopyright.Text = "Audio Engine supplied by FMOD by Firelight Technologies.";
//
// FMODinfoLabel // FMODinfoLabel
// //
this.FMODinfoLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight; this.FMODinfoLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight;
@ -803,15 +802,16 @@
this.saveFolderDialog1.RestoreDirectory = true; this.saveFolderDialog1.RestoreDirectory = true;
this.saveFolderDialog1.Title = "Browse for folder"; this.saveFolderDialog1.Title = "Browse for folder";
// //
// FMODcopyright // sceneTreeView
// //
this.FMODcopyright.AutoSize = true; this.sceneTreeView.CheckBoxes = true;
this.FMODcopyright.ForeColor = System.Drawing.SystemColors.ControlLight; this.sceneTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
this.FMODcopyright.Location = new System.Drawing.Point(117, 187); this.sceneTreeView.HideSelection = false;
this.FMODcopyright.Name = "FMODcopyright"; this.sceneTreeView.Location = new System.Drawing.Point(0, 20);
this.FMODcopyright.Size = new System.Drawing.Size(283, 13); this.sceneTreeView.Name = "sceneTreeView";
this.FMODcopyright.TabIndex = 9; this.sceneTreeView.Size = new System.Drawing.Size(410, 588);
this.FMODcopyright.Text = "Audio Engine supplied by FMOD by Firelight Technologies."; this.sceneTreeView.TabIndex = 1;
this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck);
// //
// UnityStudioForm // UnityStudioForm
// //

View File

@ -14,10 +14,9 @@ using Tao.DevIl;
using System.Web.Script.Serialization; using System.Web.Script.Serialization;
//Load parent nodes even if they are not selected to provide transformations? /*TODO
//For extracting bundles, first check if file exists then decompress Load parent nodes even if they are not selected to provide transformations?
For extracting bundles, first check if file exists then decompress*/
//rigurous search for search files; look into Path.Combine
namespace Unity_Studio namespace Unity_Studio
{ {
@ -25,8 +24,8 @@ namespace Unity_Studio
{ {
private List<string> unityFiles = new List<string>(); //files to load private List<string> unityFiles = new List<string>(); //files to load
public static List<AssetsFile> assetsfileList = new List<AssetsFile>(); //loaded files public static List<AssetsFile> assetsfileList = new List<AssetsFile>(); //loaded files
private List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>(); //used to hold all listItems while the list is being filtered private List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>(); //used to hold all assets while the ListView is filtered
private List<AssetPreloadData> visibleAssets = new List<AssetPreloadData>(); //used to build the listView private List<AssetPreloadData> visibleAssets = new List<AssetPreloadData>(); //used to build the ListView from all or filtered assets
private AssetPreloadData lastSelectedItem = null; private AssetPreloadData lastSelectedItem = null;
private AssetPreloadData lastLoadedAsset = null; private AssetPreloadData lastLoadedAsset = null;
//private AssetsFile mainDataFile = null; //private AssetsFile mainDataFile = null;
@ -40,7 +39,6 @@ namespace Unity_Studio
private FMOD.Sound sound = null; private FMOD.Sound sound = null;
private FMOD.Channel channel = null; private FMOD.Channel channel = null;
private FMOD.SoundGroup masterSoundGroup = null; private FMOD.SoundGroup masterSoundGroup = null;
private FMOD.MODE loopMode = FMOD.MODE.LOOP_OFF; private FMOD.MODE loopMode = FMOD.MODE.LOOP_OFF;
private uint FMODlenms = 0; private uint FMODlenms = 0;
private float FMODVolume = 0.8f; private float FMODVolume = 0.8f;
@ -48,10 +46,11 @@ namespace Unity_Studio
private Bitmap imageTexture = null; private Bitmap imageTexture = null;
private bool startFilter = false; //asset list sortign helpers
private bool isNameSorted = false; private int firstSortColumn = -1;
private bool isTypeSorted = false; private int secondSortColumn = 0;
private bool isSizeSorted = false; private bool reverseSort = false;
private bool enableFiltering = false;
//tree search //tree search
private int nextGObject = 0; private int nextGObject = 0;
@ -753,9 +752,10 @@ namespace Unity_Studio
visibleAssets = exportableAssets; visibleAssets = exportableAssets;
assetListView.VirtualListSize = visibleAssets.Count; assetListView.VirtualListSize = visibleAssets.Count;
assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); //won't work because ListView is not visible
assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); //assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
resizeNameColumn(); //assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
//resizeAssetListColumns();
assetListView.EndUpdate(); assetListView.EndUpdate();
progressBar1.Value = 0; progressBar1.Value = 0;
@ -868,6 +868,7 @@ namespace Unity_Studio
{ {
case 0: treeSearch.Select(); break; case 0: treeSearch.Select(); break;
case 1: case 1:
resizeAssetListColumns(); //required because the ListView is not visible on app launch
classPreviewPanel.Visible = false; classPreviewPanel.Visible = false;
previewPanel.Visible = true; previewPanel.Visible = true;
listSearch.Select(); listSearch.Select();
@ -966,9 +967,62 @@ namespace Unity_Studio
} }
private void resizeAssetListColumns()
{
assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.HeaderSize);
assetListView.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.HeaderSize);
assetListView.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
var test = SystemInformation.VerticalScrollBarWidth;
var vscroll = ((float)visibleAssets.Count / (float)assetListView.Height) > 0.0567f;
columnHeaderName.Width = assetListView.Width - columnHeaderType.Width - columnHeaderSize.Width - (vscroll ? 25 : 5);
}
private void tabPage2_Resize(object sender, EventArgs e)
{
resizeAssetListColumns();
}
/*private void splitContainer1_Resize(object sender, EventArgs e)
{
switch (tabControl1.SelectedIndex)
{
case 1: resizeAssetListColumns(); break;
}
}
private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
{
switch (tabControl1.SelectedIndex)
{
case 1: resizeAssetListColumns(); break;
}
}*/
private void listSearch_Enter(object sender, EventArgs e)
{
if (listSearch.Text == " Filter ")
{
listSearch.Text = "";
listSearch.ForeColor = System.Drawing.SystemColors.WindowText;
enableFiltering = true;
}
}
private void listSearch_Leave(object sender, EventArgs e)
{
if (listSearch.Text == "")
{
enableFiltering = false;
listSearch.Text = " Filter ";
listSearch.ForeColor = System.Drawing.SystemColors.GrayText;
}
}
private void ListSearchTextChanged(object sender, EventArgs e) private void ListSearchTextChanged(object sender, EventArgs e)
{ {
if (startFilter) if (enableFiltering)
{ {
assetListView.BeginUpdate(); assetListView.BeginUpdate();
assetListView.SelectedIndices.Clear(); assetListView.SelectedIndices.Clear();
@ -979,65 +1033,49 @@ namespace Unity_Studio
} }
} }
private void listSearch_Enter(object sender, EventArgs e)
{
if (listSearch.Text == " Filter ")
{
listSearch.Text = "";
listSearch.ForeColor = System.Drawing.SystemColors.WindowText;
startFilter = true;
}
}
private void listSearch_Leave(object sender, EventArgs e)
{
if (listSearch.Text == "")
{
startFilter = false;
listSearch.Text = " Filter ";
listSearch.ForeColor = System.Drawing.SystemColors.GrayText;
}
}
private void assetListView_ColumnClick(object sender, ColumnClickEventArgs e) private void assetListView_ColumnClick(object sender, ColumnClickEventArgs e)
{ {
if (firstSortColumn != e.Column)
{
reverseSort = false;
secondSortColumn = firstSortColumn;
}
else { reverseSort = !reverseSort; }
firstSortColumn = e.Column;
assetListView.BeginUpdate(); assetListView.BeginUpdate();
assetListView.SelectedIndices.Clear(); assetListView.SelectedIndices.Clear();
switch (e.Column) switch (e.Column)
{ {
case 0: case 0:
if (isNameSorted) { visibleAssets.Reverse(); } visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b)
else
{ {
visibleAssets.Sort((x, y) => x.Text.CompareTo(y.Text)); int xdiff = reverseSort ? b.Text.CompareTo(a.Text) : a.Text.CompareTo(b.Text);
isNameSorted = true; if (xdiff != 0) return xdiff;
} else return secondSortColumn == 1 ? a.TypeString.CompareTo(b.TypeString) : a.exportSize.CompareTo(b.exportSize);
});
break; break;
case 1: case 1:
if (isTypeSorted) { visibleAssets.Reverse(); } visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b)
else
{ {
visibleAssets.Sort((x, y) => x.TypeString.CompareTo(y.TypeString)); int xdiff = reverseSort ? b.TypeString.CompareTo(a.TypeString) : a.TypeString.CompareTo(b.TypeString);
isTypeSorted = true; if (xdiff != 0) return xdiff;
} else return secondSortColumn == 2 ? a.exportSize.CompareTo(b.exportSize) : a.Text.CompareTo(b.Text);
});
break; break;
case 2: case 2:
if (isSizeSorted) { visibleAssets.Reverse(); } visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b)
else
{ {
visibleAssets.Sort((x, y) => x.exportSize.CompareTo(y.exportSize)); int xdiff = reverseSort ? b.exportSize.CompareTo(a.exportSize) : a.exportSize.CompareTo(b.exportSize);
isSizeSorted = true; if (xdiff != 0) return xdiff;
} else return secondSortColumn == 1 ? a.TypeString.CompareTo(b.TypeString) : a.Text.CompareTo(b.Text);
});
break; break;
} }
assetListView.EndUpdate(); assetListView.EndUpdate();
}
private void resizeNameColumn() resizeAssetListColumns();
{
var vscroll = ((float)assetListView.VirtualListSize / (float)assetListView.Height) > 0.0567f;
columnHeaderName.Width = assetListView.Width - columnHeaderType.Width - columnHeaderSize.Width - (vscroll ? 25 : 5);
} }
private void selectAsset(object sender, ListViewItemSelectionChangedEventArgs e) private void selectAsset(object sender, ListViewItemSelectionChangedEventArgs e)
@ -1090,23 +1128,6 @@ namespace Unity_Studio
} }
private void splitContainer1_Resize(object sender, EventArgs e)
{
switch (tabControl1.TabIndex)
{
case 1: resizeNameColumn(); break;
}
}
private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
{
switch (tabControl1.TabIndex)
{
case 1: resizeNameColumn(); break;
}
}
private void PreviewAsset(AssetPreloadData asset) private void PreviewAsset(AssetPreloadData asset)
{ {
switch (asset.Type2) switch (asset.Type2)
@ -1158,7 +1179,7 @@ namespace Unity_Studio
{ {
AudioClip m_AudioClip = new AudioClip(asset, true); AudioClip m_AudioClip = new AudioClip(asset, true);
if (m_AudioClip.m_Type != 22 && m_AudioClip.m_Type != 1) if (m_AudioClip.m_Type == 13 && m_AudioClip.m_Type == 14 && m_AudioClip.m_Type == 20)
{ {
//MemoryStream memoryStream = new MemoryStream(m_AudioData, true); //MemoryStream memoryStream = new MemoryStream(m_AudioData, true);
//System.Media.SoundPlayer soundPlayer = new System.Media.SoundPlayer(memoryStream); //System.Media.SoundPlayer soundPlayer = new System.Media.SoundPlayer(memoryStream);
@ -3030,7 +3051,6 @@ namespace Unity_Studio
enablePreview.Checked = (bool)Properties.Settings.Default["enablePreview"]; enablePreview.Checked = (bool)Properties.Settings.Default["enablePreview"];
openAfterExport.Checked = (bool)Properties.Settings.Default["openAfterExport"]; openAfterExport.Checked = (bool)Properties.Settings.Default["openAfterExport"];
assetGroupOptions.SelectedIndex = (int)Properties.Settings.Default["assetGroupOption"]; assetGroupOptions.SelectedIndex = (int)Properties.Settings.Default["assetGroupOption"];
resizeNameColumn();
} }
private void resetForm() private void resetForm()
@ -3064,6 +3084,10 @@ namespace Unity_Studio
fontPreviewBox.Visible = false; fontPreviewBox.Visible = false;
lastSelectedItem = null; lastSelectedItem = null;
lastLoadedAsset = null; lastLoadedAsset = null;
firstSortColumn = -1;
secondSortColumn = 0;
reverseSort = false;
enableFiltering = false;
FMODinit(); FMODinit();