mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
2004 lines
66 KiB
Plaintext
2004 lines
66 KiB
Plaintext
new GuiControl(MaterialSelectorOverlay, EditorGuiGroup) {
|
|
canSaveDynamicFields = "0";
|
|
Profile = "GuiOverlayProfile";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "1024 768";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
hovertime = "1000";
|
|
|
|
new GuiWindowCtrl(MaterialSelector){
|
|
profile = "ToolsGuiWindowProfile";
|
|
HorizSizing = "center";
|
|
VertSizing = "center";
|
|
resizeWidth = "1";
|
|
resizeHeight = "1";
|
|
canClose = "1";
|
|
canMinimize = "0";
|
|
canMaximize = "0";
|
|
position = "72 98";
|
|
extent =" 766 550";
|
|
MinExtent = "383 274";
|
|
text = "Material Selector";
|
|
closeCommand = "MaterialSelector::hideDialog();";
|
|
EdgeSnap = "0";
|
|
canCollapse = "0";
|
|
visible = "0";
|
|
|
|
new GuiContainer(){
|
|
isContainer = "1";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "4 22";
|
|
Extent = "120 31";
|
|
Profile = "inspectorStyleRolloutDarkProfile";
|
|
};
|
|
new GuiTextCtrl(){
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "10 23";
|
|
extent = "30 16";
|
|
text = "Filters";
|
|
};
|
|
new GuiContainer(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "4 39";
|
|
Extent = "120 507";
|
|
HorizSizing = "right";
|
|
VertSizing = "height";
|
|
isContainer = "1";
|
|
|
|
new GuiScrollCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
Profile = "GuiEditorScrollProfile";
|
|
HorizSizing = "width";
|
|
VertSizing = "height";
|
|
Position = "0 0";
|
|
Extent = "128 355";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiDefaultProfile";
|
|
hovertime = "1000";
|
|
Docking = "Client";
|
|
Margin = "0 0 0 0";
|
|
Padding = "0 0 0 0";
|
|
AnchorTop = "1";
|
|
AnchorBottom = "0";
|
|
AnchorLeft = "1";
|
|
AnchorRight = "0";
|
|
willFirstRespond = "1";
|
|
hScrollBar = "alwaysOff";
|
|
vScrollBar = "dynamic";
|
|
lockHorizScroll = true;
|
|
lockVertScroll = "false";
|
|
constantThumbHeight = "0";
|
|
childMargin = "0 0";
|
|
mouseWheelScrollSpeed = "-1";
|
|
|
|
|
|
new GuiDynamicCtrlArrayControl() {
|
|
canSaveDynamicFields = "0";
|
|
internalName = "filterArray";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "width";
|
|
VertSizing = "bottom";
|
|
Position = "18 0";
|
|
Extent = "128 195";
|
|
MinExtent = "8 8";
|
|
dynamicSize = "1";
|
|
rowSpacing = "2";
|
|
colSize = "128";
|
|
rowSize = "18";
|
|
};
|
|
};
|
|
};
|
|
new GuiContainer(){
|
|
Profile = "inspectorStyleRolloutDarkProfile";
|
|
Position = "128 22";
|
|
Extent = "480 31";
|
|
HorizSizing = "width";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
};
|
|
new GuiTextCtrl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "133 23";
|
|
extent = "53 16";
|
|
text = "Materials";
|
|
};
|
|
// Create New Material
|
|
new GuiBitmapButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
position = "594 24";
|
|
Extent = "15 15";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
Command = "MaterialSelector.createNewMaterial();";
|
|
hovertime = "1000";
|
|
tooltip = "Create New Unmapped Material";
|
|
bitmap = "tools/gui/images/new";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "0";
|
|
};
|
|
|
|
new GuiBitmapButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
position = "578 24";
|
|
Extent = "15 15";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
Command = "MaterialSelector.showDeleteDialog();";
|
|
hovertime = "1000";
|
|
tooltip = "Delete Material";
|
|
bitmap = "tools/gui/images/delete";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "0";
|
|
};
|
|
|
|
new GuiContainer(){ // Materials
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "128 39";
|
|
Extent = "480 507";
|
|
HorizSizing = "width";
|
|
VertSizing = "height";
|
|
isContainer = "1";
|
|
|
|
new GuiScrollCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
Profile = "GuiEditorScrollProfile";
|
|
HorizSizing = "width";
|
|
VertSizing = "height";
|
|
Position = "0 0";
|
|
Extent = "480 507";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiDefaultProfile";
|
|
hovertime = "1000";
|
|
Docking = "Client";
|
|
Margin = "0 0 0 0";
|
|
Padding = "0 0 0 0";
|
|
AnchorTop = "1";
|
|
AnchorBottom = "0";
|
|
AnchorLeft = "1";
|
|
AnchorRight = "0";
|
|
willFirstRespond = "1";
|
|
hScrollBar = "alwaysOff";
|
|
vScrollBar = "dynamic";
|
|
lockHorizScroll = "true";
|
|
lockVertScroll = "false";
|
|
constantThumbHeight = "0";
|
|
childMargin = "0 0";
|
|
mouseWheelScrollSpeed = "-1";
|
|
|
|
new GuiStackControl(){
|
|
HorizSizing = "width";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "128 0";
|
|
changeChildPosition = 0;
|
|
changeChildSizeToFit = 1;
|
|
|
|
new GuiControl(){
|
|
Extent = "0 4";
|
|
};
|
|
new GuiDynamicCtrlArrayControl() {
|
|
canSaveDynamicFields = "0";
|
|
internalName = "materialSelection";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "width";
|
|
VertSizing = "bottom";
|
|
Position = "3 0";
|
|
Extent = "128 0";
|
|
MinExtent = "8 8";
|
|
dynamicSize = "1";
|
|
autoCellSize = "1";
|
|
rowSpacing = "2";
|
|
colSpacing = "2";
|
|
margin = "2";
|
|
};
|
|
};
|
|
};
|
|
|
|
new GuiContainer(){
|
|
internalName = "materialPreviewControlContainer";
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "480 20";
|
|
HorizSizing = "width";
|
|
VertSizing = "height";
|
|
isContainer = "1";
|
|
Docking = "Bottom";
|
|
|
|
new GuiTextCtrl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "0 2";
|
|
extent = "100 16";
|
|
text = "Thumbnails per Page:";
|
|
};
|
|
new GuiPopupMenuCtrlEx(){
|
|
internalName = "materialPreviewCountPopup";
|
|
Profile = "ToolsGuiPopUpMenuProfile";
|
|
Position = "104 2";
|
|
Extent = "40 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Command = "MaterialSelector.thumbnailCountUpdate();";
|
|
reverseTextList = "0";
|
|
Text = "16";
|
|
};
|
|
|
|
new GuiStackControl(){
|
|
internalName = "materialPreviewButtonStack";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
Position = "480 2";
|
|
Extent = "0 16";
|
|
dynamic = 1;
|
|
dynamicPos = 1;
|
|
stackingType = "Horizontal";
|
|
changeChildPosition = 1;
|
|
changeChildSizeToFit = 1;
|
|
padding = 2;
|
|
|
|
new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiButtonProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "20 16";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
Command = "MaterialSelector::firstPage();";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
tooltip = "First";
|
|
hovertime = "1000";
|
|
text = "|<";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "1";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiButtonProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "20 16";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
Command = "MaterialSelector::previousPage();";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
tooltip = "Previous";
|
|
hovertime = "1000";
|
|
text = "<";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "1";
|
|
};
|
|
new GuiStackControl(){
|
|
internalName = "materialPreviewPagesStack";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "0 16";
|
|
dynamic = 1;
|
|
stackingType = "Horizontal";
|
|
changeChildPosition = 1;
|
|
changeChildSizeToFit = 1;
|
|
padding = 2;
|
|
};
|
|
new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiButtonProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "20 16";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
Command = "MaterialSelector::nextPage();";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
tooltip = "Next";
|
|
hovertime = "1000";
|
|
text = ">";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "1";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiButtonProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "20 16";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
Command = "MaterialSelector::lastPage();";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
tooltip = "Last";
|
|
hovertime = "1000";
|
|
text = ">|";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "1";
|
|
};
|
|
|
|
};
|
|
};
|
|
};
|
|
new GuiContainer(){
|
|
Profile = "inspectorStyleRolloutDarkProfile";
|
|
Position = "612 206";
|
|
Extent = "150 31";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
};
|
|
new GuiTextCtrl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
position = "618 207";
|
|
extent = "84 16";
|
|
text = "Material Tags";
|
|
};
|
|
new GuiContainer(){ // Filter Selection
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "612 223";
|
|
Extent = "150 295";
|
|
HorizSizing = "left";
|
|
VertSizing = "height";
|
|
isContainer = "1";
|
|
|
|
new GuiScrollCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
Profile = "GuiEditorScrollProfile";
|
|
HorizSizing = "width";
|
|
VertSizing = "height";
|
|
Position = "0 0";
|
|
Extent = "128 195";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiDefaultProfile";
|
|
hovertime = "1000";
|
|
Docking = "Client";
|
|
Margin = "0 0 0 0";
|
|
Padding = "0 0 0 0";
|
|
AnchorTop = "1";
|
|
AnchorBottom = "0";
|
|
AnchorLeft = "1";
|
|
AnchorRight = "0";
|
|
willFirstRespond = "1";
|
|
hScrollBar = "alwaysOff";
|
|
vScrollBar = "dynamic";
|
|
lockHorizScroll = "true";
|
|
lockVertScroll = "false";
|
|
constantThumbHeight = "0";
|
|
childMargin = "0 0";
|
|
mouseWheelScrollSpeed = "-1";
|
|
|
|
new GuiDynamicCtrlArrayControl() {
|
|
canSaveDynamicFields = "0";
|
|
internalName = "materialCategories";
|
|
Enabled = "1";
|
|
isContainer = "1";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "width";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "128 195";
|
|
MinExtent = "8 8";
|
|
dynamicSize = "1";
|
|
rowSpacing = "2";
|
|
colSize = "128";
|
|
rowSize = "18";
|
|
};
|
|
};
|
|
};
|
|
new GuiContainer(){
|
|
Profile = "inspectorStyleRolloutDarkProfile";
|
|
Position = "612 22";
|
|
Extent = "150 167";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
|
|
new GuiBitmapCtrl(){
|
|
internalName = "previewSelection";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiDefaultProfile";
|
|
position = "1 18";
|
|
extent = "148 148";
|
|
bitmap = "";
|
|
};
|
|
};
|
|
new GuiTextCtrl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
position = "618 23";
|
|
extent = "84 16";
|
|
text = "Diffuse Preview";
|
|
};
|
|
|
|
new GuiBitmapCtrl(){
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiDefaultProfile";
|
|
position = "612 39";
|
|
extent = "150 150";
|
|
bitmap = "tools/worldEditor/images/terrainpainter/terrain-painter-border-large";
|
|
visible = false;
|
|
};
|
|
new GuiTextCtrl(){
|
|
internalName = "previewSelectionText";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiTextProfile";
|
|
position = "613 189";
|
|
extent = "149 16";
|
|
text = "";
|
|
};
|
|
new GuiButtonCtrl(){
|
|
internalName = "SelectButton";
|
|
HorizSizing = "left";
|
|
VertSizing = "top";
|
|
profile = "ToolsGuiButtonProfile";
|
|
position = "612 522";
|
|
extent = "94 24";
|
|
text = "Select";
|
|
command = "MaterialSelector.selectMaterial( MaterialSelector.selectedMaterial );";
|
|
};
|
|
new GuiButtonCtrl(){
|
|
HorizSizing = "left";
|
|
VertSizing = "top";
|
|
profile = "ToolsGuiButtonProfile";
|
|
position = "710 522";
|
|
extent = "52 24";
|
|
text = "Cancel";
|
|
command = "MaterialSelector.hideDialog();";
|
|
};
|
|
};
|
|
|
|
new GuiWindowCtrl(MaterialSelector_addFilterWindow) {
|
|
canSaveDynamicFields = "0";
|
|
isContainer = "1";
|
|
Profile = "ToolsGuiWindowProfile";
|
|
HorizSizing = "center";
|
|
VertSizing = "center";
|
|
position = "362 333";
|
|
Extent = "272 99";
|
|
MinExtent = "48 92";
|
|
canSave = "1";
|
|
Visible = "0";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
hovertime = "1000";
|
|
Margin = "0 0 0 0";
|
|
Padding = "0 0 0 0";
|
|
AnchorTop = "1";
|
|
AnchorBottom = "0";
|
|
AnchorLeft = "1";
|
|
AnchorRight = "0";
|
|
resizeWidth = "1";
|
|
resizeHeight = "1";
|
|
canMove = "1";
|
|
canClose = "0";
|
|
canMinimize = "0";
|
|
canMaximize = "0";
|
|
minSize = "50 50";
|
|
EdgeSnap = "1";
|
|
text = "Create New Tag";
|
|
|
|
new GuiTextEditCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
internalName = "tagName";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiTextEditProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "64 35";
|
|
Extent = "196 18";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
hovertime = "1000";
|
|
Margin = "0 0 0 0";
|
|
Padding = "0 0 0 0";
|
|
AnchorTop = "1";
|
|
AnchorBottom = "0";
|
|
AnchorLeft = "1";
|
|
AnchorRight = "0";
|
|
maxLength = "1024";
|
|
historySize = "0";
|
|
password = "0";
|
|
tabComplete = "0";
|
|
sinkAllKeyEvents = "0";
|
|
passwordMask = "*";
|
|
};
|
|
new GuiTextCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiTextProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "12 35";
|
|
Extent = "52 16";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
hovertime = "1000";
|
|
Margin = "0 0 0 0";
|
|
Padding = "0 0 0 0";
|
|
AnchorTop = "1";
|
|
AnchorBottom = "0";
|
|
AnchorLeft = "1";
|
|
AnchorRight = "0";
|
|
maxLength = "1024";
|
|
text = "Tag Name";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiButtonProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "64 68";
|
|
Extent = "126 22";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
hovertime = "1000";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "0";
|
|
text = "Create";
|
|
Command = "MaterialSelector.createFilter( MaterialSelector_addFilterWindow-->tagName.getText() );MaterialSelector_addFilterWindow.setVisible(0);";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiButtonProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "196 68";
|
|
Extent = "64 22";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
hovertime = "1000";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "0";
|
|
text = "Cancel";
|
|
Command = "MaterialSelector_addFilterWindow.setVisible(0);";
|
|
};
|
|
};
|
|
};
|
|
|
|
$Pref::MaterialSelector::CurrentStaticFilter = "MaterialFilterAllArray";
|
|
$Pref::MaterialSelector::CurrentFilter = ""; //ALL
|
|
$Pref::MaterialSelector::ThumbnailCountIndex = 0;
|
|
|
|
new PersistenceManager(MaterialSelectorPerMan);
|
|
|
|
new ArrayObject(UnlistedMaterials);
|
|
UnlistedMaterials.add( "unlistedMaterials", WarningMaterial );
|
|
UnlistedMaterials.add( "unlistedMaterials", materialEd_previewMaterial );
|
|
UnlistedMaterials.add( "unlistedMaterials", notDirtyMaterial );
|
|
UnlistedMaterials.add( "unlistedMaterials", materialEd_cubemapEd_cubeMapPreview );
|
|
UnlistedMaterials.add( "unlistedMaterials", matEdCubeMapPreviewMat );
|
|
UnlistedMaterials.add( "unlistedMaterials", materialEd_justAlphaMaterial );
|
|
UnlistedMaterials.add( "unlistedMaterials", materialEd_justAlphaShader );
|
|
|
|
function MaterialSelector::selectMaterial( %this, %material )
|
|
{
|
|
%name = "";
|
|
|
|
if( MaterialSelector.terrainMaterials )
|
|
{
|
|
%name = %material;
|
|
%material = TerrainMaterialSet.findObjectByInternalName( %material );
|
|
}
|
|
else
|
|
{
|
|
%name = %material.getName();
|
|
}
|
|
|
|
// The callback function should be ready to intake the returned material
|
|
//eval("materialEd_previewMaterial." @ %propertyField @ " = " @ %value @ ";");
|
|
if( MaterialSelector.returnType $= "name" )
|
|
eval( "" @ MaterialSelector.selectCallback @ "(" @ %name @ ");");
|
|
else if( MaterialSelector.returnType $= "index" )
|
|
{
|
|
%index = -1;
|
|
if( MaterialSelector.terrainMaterials )
|
|
{
|
|
// Obtain the index into the terrain's material list
|
|
%mats = ETerrainEditor.getMaterials();
|
|
for(%i = 0; %i < getRecordCount( %mats ); %i++)
|
|
{
|
|
%matInternalName = getRecord( %mats, %i );
|
|
if( %matInternalName $= %name )
|
|
{
|
|
%index = %i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Obtain the index into the material set
|
|
for(%i = 0; %i < materialSet.getCount(); %i++)
|
|
{
|
|
%obj = materialSet.getObject(%i);
|
|
if( %obj.getName() $= %name )
|
|
{
|
|
%index = %i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
eval( "" @ MaterialSelector.selectCallback @ "(" @ %index @ ");");
|
|
}
|
|
else
|
|
eval( "" @ MaterialSelector.selectCallback @ "(" @ %material.getId() @ ");");
|
|
MaterialSelector.hideDialog();
|
|
}
|
|
|
|
function MaterialSelector::showDialog( %this, %selectCallback, %returnType)
|
|
{
|
|
if( MaterialSelector.isVisible() )
|
|
return;
|
|
|
|
%this.showDialogBase(%selectCallback, %returnType, false);
|
|
}
|
|
|
|
function MaterialSelector::showTerrainDialog( %this, %selectCallback, %returnType)
|
|
{
|
|
%this.showDialogBase(%selectCallback, %returnType, true);
|
|
}
|
|
|
|
function MaterialSelector::showDialogBase( %this, %selectCallback, %returnType, %useTerrainMaterials)
|
|
{
|
|
// Set the select callback
|
|
MaterialSelector.selectCallback = %selectCallback;
|
|
MaterialSelector.returnType = %returnType;
|
|
|
|
MaterialSelector.currentStaticFilter = $Pref::MaterialSelector::CurrentStaticFilter;
|
|
MaterialSelector.currentFilter = $Pref::MaterialSelector::CurrentFilter;
|
|
|
|
MaterialSelector.terrainMaterials = %useTerrainMaterials;
|
|
|
|
MaterialSelector-->materialPreviewCountPopup.clear();
|
|
MaterialSelector-->materialPreviewCountPopup.add( "10", 0 );
|
|
MaterialSelector-->materialPreviewCountPopup.add( "15", 1 );
|
|
MaterialSelector-->materialPreviewCountPopup.add( "25", 2 );
|
|
MaterialSelector-->materialPreviewCountPopup.add( "50", 3 );
|
|
MaterialSelector-->materialPreviewCountPopup.add( "75", 4 );
|
|
MaterialSelector-->materialPreviewCountPopup.add( "100", 5 );
|
|
MaterialSelector-->materialPreviewCountPopup.setSelected( $Pref::MaterialSelector::ThumbnailCountIndex );
|
|
|
|
Canvas.pushDialog(MaterialSelectorOverlay);
|
|
MaterialSelector.setVisible(1);
|
|
MaterialSelector.buildStaticFilters();
|
|
|
|
MaterialSelector.selectedMaterial = "";
|
|
MaterialSelector.loadMaterialFilters();
|
|
}
|
|
|
|
function MaterialSelector::hideDialog( %this )
|
|
{
|
|
MaterialSelector.breakdown();
|
|
MaterialSelector.setVisible(0);
|
|
Canvas.popDialog(MaterialSelectorOverlay);
|
|
}
|
|
|
|
function MaterialSelector::breakdown( %this )
|
|
{
|
|
$Pref::MaterialSelector::CurrentStaticFilter = MaterialSelector.currentStaticFilter;
|
|
$Pref::MaterialSelector::CurrentFilter = MaterialSelector.currentFilter;
|
|
|
|
MaterialSelector-->filterArray.deleteAllObjects();
|
|
MaterialSelector-->materialSelection.deleteAllObjects();
|
|
MatEdPreviewArray.delete();
|
|
|
|
MaterialSelector-->materialCategories.deleteAllObjects();
|
|
MaterialFilterAllArray.delete();
|
|
MaterialFilterMappedArray.delete();
|
|
MaterialFilterUnmappedArray.delete();
|
|
|
|
}
|
|
|
|
function MaterialSelector::buildStaticFilters( %this )
|
|
{
|
|
// if you want to add any more containers to staticFilterObjects, here's
|
|
// where to do it
|
|
|
|
%staticFilterContainer = new GuiControl (){
|
|
new GuiContainer(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
parentGroup = %filterArray;
|
|
|
|
new GuiContainer(){
|
|
profile = "inspectorStyleRolloutDarkProfile";
|
|
Position = "-1 0";
|
|
Extent = "128 32";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
};
|
|
new GuiTextCtrl(){
|
|
Profile = "EditorTextProfile";
|
|
position = "5 0";
|
|
Extent = "118 18";
|
|
text = "Types";
|
|
};
|
|
};
|
|
new GuiContainer(){ // All
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "415 191";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
parentGroup = %filterArray;
|
|
|
|
new GuiCheckBoxCtrl(MaterialFilterAllArrayCheckbox){
|
|
Profile = "ToolsGuiCheckBoxListProfile";
|
|
position = "5 2";
|
|
Extent = "118 18";
|
|
text = "All";
|
|
Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterAllArray\");";
|
|
};
|
|
};
|
|
new GuiContainer(){ // Mapped
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "415 191";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
parentGroup = %filterArray;
|
|
|
|
new GuiCheckBoxCtrl(MaterialFilterMappedArrayCheckbox){
|
|
Profile = "ToolsGuiCheckBoxListProfile";
|
|
position = "5 2";
|
|
Extent = "118 18";
|
|
text = "Mapped";
|
|
Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterMappedArray\");";
|
|
};
|
|
};
|
|
new GuiContainer(){ // Unmapped
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "415 191";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
parentGroup = %filterArray;
|
|
|
|
new GuiCheckBoxCtrl(MaterialFilterUnmappedArrayCheckbox){
|
|
Profile = "ToolsGuiCheckBoxListProfile";
|
|
position = "5 2";
|
|
Extent = "118 18";
|
|
text = "Unmapped";
|
|
Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterUnmappedArray\");";
|
|
};
|
|
};
|
|
new GuiContainer(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
parentGroup = %filterArray;
|
|
|
|
new GuiContainer(){
|
|
profile = "inspectorStyleRolloutDarkProfile";
|
|
Position = "-1 0";
|
|
Extent = "128 32";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
};
|
|
|
|
new GuiTextCtrl(){
|
|
Profile = "EditorTextProfile";
|
|
position = "5 0";
|
|
Extent = "118 18";
|
|
text = "Tags";
|
|
};
|
|
// Create New Tag
|
|
new GuiBitmapButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
position = "105 2";
|
|
Extent = "15 15";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
Command = "MaterialSelector_addFilterWindow.setVisible(1); MaterialSelectorOverlay.pushToBack(MaterialSelector_addFilterWindow);";
|
|
hovertime = "1000";
|
|
tooltip = "Create New Tag";
|
|
bitmap = "tools/gui/images/new";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "0";
|
|
};
|
|
new GuiBitmapButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiDefaultProfile";
|
|
HorizSizing = "left";
|
|
VertSizing = "bottom";
|
|
position = "89 2";
|
|
Extent = "13 13";
|
|
MinExtent = "8 2";
|
|
canSave = "1";
|
|
Visible = "1";
|
|
Command = "MaterialSelector.clearMaterialFilters();";
|
|
hovertime = "1000";
|
|
tooltip = "Clear Selected Tag";
|
|
bitmap = "tools/gui/images/clear-btn";
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "0";
|
|
};
|
|
};
|
|
};
|
|
|
|
%i = %staticFilterContainer.getCount();
|
|
for( ; %i != 0; %i--)
|
|
MaterialSelector-->filterArray.addGuiControl(%staticFilterContainer.getObject(0));
|
|
|
|
MaterialSelector.staticFilterObjects = MaterialSelector-->filterArray.getCount();
|
|
|
|
%staticFilterContainer.delete();
|
|
|
|
// Create our category array used in the selector, this code should be taken out
|
|
// in order to make the material selector agnostic
|
|
new ArrayObject(MaterialFilterAllArray);
|
|
new ArrayObject(MaterialFilterMappedArray);
|
|
new ArrayObject(MaterialFilterUnmappedArray);
|
|
|
|
%mats = "";
|
|
%count = 0;
|
|
if( MaterialSelector.terrainMaterials )
|
|
{
|
|
%mats = ETerrainEditor.getTerrainBlocksMaterialList();
|
|
%count = getRecordCount( %mats );
|
|
}
|
|
else
|
|
{
|
|
%count = materialSet.getCount();
|
|
}
|
|
|
|
for(%i = 0; %i < %count; %i++)
|
|
{
|
|
// Process terrain materials
|
|
if( MaterialSelector.terrainMaterials )
|
|
{
|
|
%matInternalName = getRecord( %mats, %i );
|
|
%material = TerrainMaterialSet.findObjectByInternalName( %matInternalName );
|
|
|
|
// Is there no material info for this slot?
|
|
if ( !isObject( %material ) )
|
|
continue;
|
|
|
|
// Add to the appropriate filters
|
|
MaterialFilterMappedArray.add( "", %material );
|
|
MaterialFilterAllArray.add( "", %material );
|
|
|
|
continue;
|
|
}
|
|
|
|
// Process regular materials here
|
|
%material = materialSet.getObject(%i);
|
|
|
|
for( %k = 0; %k < UnlistedMaterials.count(); %k++ )
|
|
{
|
|
%unlistedFound = 0;
|
|
if( UnlistedMaterials.getValue(%k) $= %material.name )
|
|
{
|
|
%unlistedFound = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( %unlistedFound )
|
|
continue;
|
|
|
|
if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
|
|
{
|
|
MaterialFilterUnmappedArray.add( "", %material.name );
|
|
//running through the existing tag names
|
|
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
|
|
MaterialFilterUnmappedArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
|
|
}
|
|
else
|
|
{
|
|
MaterialFilterMappedArray.add( "", %material.name );
|
|
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
|
|
MaterialFilterMappedArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
|
|
}
|
|
|
|
MaterialFilterAllArray.add( "", %material.name );
|
|
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
|
|
MaterialFilterAllArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
|
|
|
|
}
|
|
|
|
MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() @" ) ");
|
|
MaterialFilterMappedArrayCheckbox.setText("Mapped ( " @ MaterialFilterMappedArray.count() @" ) ");
|
|
MaterialFilterUnmappedArrayCheckbox.setText("Unmapped ( " @ MaterialFilterUnmappedArray.count() @" ) ");
|
|
}
|
|
|
|
function MaterialSelector::preloadFilter( %this )
|
|
{
|
|
%selectedFilter = "";
|
|
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount(); %i++ )
|
|
{
|
|
if( MaterialSelector-->filterArray.getObject(%i).getObject(0).getValue() == 1 )
|
|
{
|
|
if( %selectedFilter $= "" )
|
|
%selectedFilter = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
|
|
else
|
|
%selectedFilter = %selectedFilter @ " " @ MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
|
|
}
|
|
}
|
|
MaterialSelector.loadFilter( %selectedFilter );
|
|
}
|
|
|
|
function MaterialSelector::loadFilter( %this, %selectedFilter, %staticFilter )
|
|
{
|
|
// manage schedule array properly
|
|
if(!isObject(MatEdScheduleArray))
|
|
new ArrayObject(MatEdScheduleArray);
|
|
|
|
// if we select another list... delete all schedules that were created by
|
|
// previous load
|
|
for( %i = 0; %i < MatEdScheduleArray.count(); %i++ )
|
|
cancel(MatEdScheduleArray.getKey(%i));
|
|
|
|
// we have to empty out the list; so when we create new schedules, these dont linger
|
|
MatEdScheduleArray.empty();
|
|
|
|
// manage preview array
|
|
if(!isObject(MatEdPreviewArray))
|
|
new ArrayObject(MatEdPreviewArray);
|
|
|
|
// we have to empty out the list; so when we create new guicontrols, these dont linger
|
|
MatEdPreviewArray.empty();
|
|
MaterialSelector-->materialSelection.deleteAllObjects();
|
|
MaterialSelector-->materialPreviewPagesStack.deleteAllObjects();
|
|
|
|
// changed to accomadate tagging. dig through the array for each tag name,
|
|
// call unique value, sort, and we have a perfect set of materials
|
|
if( %staticFilter !$= "" )
|
|
MaterialSelector.currentStaticFilter = %staticFilter;
|
|
|
|
MaterialSelector.currentFilter = %selectedFilter;
|
|
|
|
%filteredObjectsArray = new ArrayObject();
|
|
|
|
%previewsPerPage = MaterialSelector-->materialPreviewCountPopup.getTextById( MaterialSelector-->materialPreviewCountPopup.getSelected() );
|
|
|
|
%tagCount = getWordCount( MaterialSelector.currentFilter );
|
|
if( %tagCount != 0 )
|
|
{
|
|
for( %j = 0; %j < %tagCount; %j++ )
|
|
{
|
|
for( %i = 0; %i < MaterialSelector.currentStaticFilter.count(); %i++ )
|
|
{
|
|
%currentTag = getWord( MaterialSelector.currentFilter, %j );
|
|
if( MaterialSelector.currentStaticFilter.getKey(%i) $= %currentTag)
|
|
%filteredObjectsArray.add( MaterialSelector.currentStaticFilter.getKey(%i), MaterialSelector.currentStaticFilter.getValue(%i) );
|
|
}
|
|
}
|
|
|
|
%filteredObjectsArray.uniqueValue();
|
|
%filteredObjectsArray.sortd();
|
|
|
|
MaterialSelector.totalPages = mCeil( %filteredObjectsArray.count() / %previewsPerPage );
|
|
|
|
//Can we maintain the current preview page, or should we go to page 1?
|
|
if( (MaterialSelector.currentPreviewPage * %previewsPerPage) >= %filteredObjectsArray.count() )
|
|
MaterialSelector.currentPreviewPage = 0;
|
|
|
|
// Build out the pages buttons
|
|
MaterialSelector.buildPagesButtons( MaterialSelector.currentPreviewPage, MaterialSelector.totalPages );
|
|
|
|
%previewCount = %previewsPerPage;
|
|
%possiblePreviewCount = %filteredObjectsArray.count() - MaterialSelector.currentPreviewPage * %previewsPerPage;
|
|
if( %possiblePreviewCount < %previewCount )
|
|
%previewCount = %possiblePreviewCount;
|
|
|
|
%start = MaterialSelector.currentPreviewPage * %previewsPerPage;
|
|
for( %i = %start; %i < %start + %previewCount; %i++ )
|
|
MaterialSelector.buildPreviewArray( %filteredObjectsArray.getValue(%i) );
|
|
|
|
%filteredObjectsArray.delete();
|
|
}
|
|
else
|
|
{
|
|
MaterialSelector.currentStaticFilter.sortd();
|
|
|
|
// Rebuild the static filter list without tagged materials
|
|
%noTagArray = new ArrayObject();
|
|
for( %i = 0; %i < MaterialSelector.currentStaticFilter.count(); %i++ )
|
|
{
|
|
if( MaterialSelector.currentStaticFilter.getKey(%i) !$= "")
|
|
continue;
|
|
|
|
%material = MaterialSelector.currentStaticFilter.getValue(%i);
|
|
|
|
// CustomMaterials are not available for selection
|
|
if ( !isObject( %material ) || %material.isMemberOfClass( "CustomMaterial" ) )
|
|
continue;
|
|
|
|
%noTagArray.add( "", %material );
|
|
}
|
|
|
|
MaterialSelector.totalPages = mCeil( %noTagArray.count() / %previewsPerPage );
|
|
|
|
//Can we maintain the current preview page, or should we go to page 1?
|
|
if( (MaterialSelector.currentPreviewPage * %previewsPerPage) >= %noTagArray.count() )
|
|
MaterialSelector.currentPreviewPage = 0;
|
|
|
|
// Build out the pages buttons
|
|
MaterialSelector.buildPagesButtons( MaterialSelector.currentPreviewPage, MaterialSelector.totalPages );
|
|
|
|
%previewCount = %previewsPerPage;
|
|
%possiblePreviewCount = %noTagArray.count() - MaterialSelector.currentPreviewPage * %previewsPerPage;
|
|
if( %possiblePreviewCount < %previewCount )
|
|
%previewCount = %possiblePreviewCount;
|
|
|
|
%start = MaterialSelector.currentPreviewPage * %previewsPerPage;
|
|
for( %i = %start; %i < %start + %previewCount; %i++ )
|
|
{
|
|
MaterialSelector.buildPreviewArray( %noTagArray.getValue(%i) );
|
|
}
|
|
}
|
|
|
|
|
|
MaterialSelector.loadImages( 0 );
|
|
}
|
|
|
|
|
|
|
|
function MaterialSelector::buildPreviewArray( %this, %material )
|
|
{
|
|
%matName = "";
|
|
|
|
// CustomMaterials are not available for selection
|
|
if ( !isObject( %material ) || %material.isMemberOfClass( "CustomMaterial" ) )
|
|
return;
|
|
|
|
if( %material.isMemberOfClass("TerrainMaterial") )
|
|
{
|
|
%matName = %material.getInternalName();
|
|
|
|
if( %material.diffuseMap $= "")
|
|
%previewImage = "core/images/warnmat";
|
|
else
|
|
%previewImage = %material.diffuseMap;
|
|
}
|
|
else if( %material.toneMap[0] $= "" && %material.diffuseMap[0] $= "" && !isObject(%material.cubemap) )
|
|
{
|
|
%matName = %material.name;
|
|
%previewImage = "core/images/warnmat";
|
|
}
|
|
else
|
|
{
|
|
%matName = %material.name;
|
|
|
|
if( %material.toneMap[0] !$= "" )
|
|
%previewImage = %material.toneMap[0];
|
|
else if( %material.diffuseMap[0] !$= "" )
|
|
%previewImage = %material.diffuseMap[0];
|
|
else if( %material.cubemap.cubeFace[0] !$= "" )
|
|
%previewImage = %material.cubemap.cubeFace[0];
|
|
|
|
//%previewImage = MaterialEditorGui.searchForTexture( %material, %previewImage );
|
|
|
|
// were going to use a couple of string commands in order to properly
|
|
// find out what the img src path is
|
|
// **NEW** this needs to be updated with the above, but has some timing issues
|
|
%materialDiffuse = %previewImage;
|
|
%materialPath = %material.getFilename();
|
|
|
|
if( strchr( %materialDiffuse, "/") $= "" )
|
|
{
|
|
%k = 0;
|
|
while( strpos( %materialPath, "/", %k ) != -1 )
|
|
{
|
|
%foo = strpos( %materialPath, "/", %k );
|
|
%k = %foo + 1;
|
|
}
|
|
|
|
%foobar = getSubStr( %materialPath , %k , 99 );
|
|
%previewImage = strreplace( %materialPath, %foobar, %previewImage );
|
|
}
|
|
else
|
|
%previewImage = strreplace( %materialPath, %materialPath, %previewImage );
|
|
}
|
|
|
|
// it may seem goofy why the checkbox can't be instanciated inside the container
|
|
// reason being its because we need to store the checkbox ctrl in order to make changes
|
|
// on it later in the function.
|
|
|
|
%container = new GuiControl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "74 87";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
|
|
new GuiTextCtrl(){
|
|
position = "7 71";
|
|
profile = "ToolsGuiTextCenterProfile";
|
|
extent = "64 16";
|
|
text = %matName;
|
|
};
|
|
};
|
|
|
|
%previewButton = new GuiBitmapButtonCtrl(){
|
|
internalName = %matName;
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiButtonProfile";
|
|
position = "7 4";
|
|
extent = "64 64";
|
|
buttonType = "PushButton";
|
|
bitmap = "";
|
|
Command = "";
|
|
text = "Loading...";
|
|
useStates = false;
|
|
|
|
new GuiBitmapButtonCtrl(){
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiButtonProfile";
|
|
position = "0 0";
|
|
extent = "64 64";
|
|
Variable = "";
|
|
buttonType = "toggleButton";
|
|
bitmap = "tools/materialEditor/gui/cubemapBtnBorder";
|
|
groupNum = "0";
|
|
text = "";
|
|
};
|
|
};
|
|
|
|
%previewBorder = new GuiButtonCtrl(){
|
|
internalName = %matName@"Border";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiThumbHighlightButtonProfile";
|
|
position = "3 0";
|
|
extent = "72 88";
|
|
Variable = "";
|
|
buttonType = "toggleButton";
|
|
tooltip = %matName;
|
|
Command = "MaterialSelector.updateSelection( $ThisControl.getParent().getObject(1).internalName, $ThisControl.getParent().getObject(1).bitmap );";
|
|
groupNum = "0";
|
|
text = "";
|
|
};
|
|
|
|
%container.add(%previewButton);
|
|
%container.add(%previewBorder);
|
|
// add to the gui control array
|
|
MaterialSelector-->materialSelection.add(%container);
|
|
|
|
// add to the array object for reference later
|
|
MatEdPreviewArray.add( %previewButton, %previewImage );
|
|
}
|
|
|
|
function MaterialSelector::loadImages( %this, %materialNum )
|
|
{
|
|
// this will save us from spinning our wheels in case we don't exist
|
|
if( !MaterialSelector.visible )
|
|
return;
|
|
|
|
// this schedule is here to dynamically load images
|
|
%previewButton = MatEdPreviewArray.getKey(%materialNum);
|
|
%previewImage = MatEdPreviewArray.getValue(%materialNum);
|
|
|
|
%previewButton.setBitmap(%previewImage);
|
|
%previewButton.setText("");
|
|
|
|
%materialNum++;
|
|
|
|
if( %materialNum < MatEdPreviewArray.count() )
|
|
{
|
|
%tempSchedule = %this.schedule(64, "loadImages", %materialNum);
|
|
MatEdScheduleArray.add( %tempSchedule, %materialNum );
|
|
}
|
|
}
|
|
|
|
function MaterialSelector::clearMaterialFilters( %this )
|
|
{
|
|
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount(); %i++ )
|
|
MaterialSelector-->filterArray.getObject(%i).getObject(0).setStateOn(0);
|
|
|
|
MaterialSelector.loadFilter( "", "" );
|
|
}
|
|
|
|
function MaterialSelector::loadMaterialFilters( %this )
|
|
{
|
|
%filteredTypesArray = new ArrayObject();
|
|
|
|
%filteredTypesArray.duplicate( MaterialFilterAllArray );
|
|
%filteredTypesArray.uniqueKey();
|
|
|
|
// sort the the keys before we do anything
|
|
%filteredTypesArray.sortkd();
|
|
|
|
eval( MaterialSelector.currentStaticFilter @ "Checkbox.setStateOn(1);" );
|
|
// it may seem goofy why the checkbox can't be instanciated inside the container
|
|
// reason being its because we need to store the checkbox ctrl in order to make changes
|
|
// on it later in the function.
|
|
%selectedFilter = "";
|
|
for( %i = 0; %i < %filteredTypesArray.count(); %i++ )
|
|
{
|
|
%filter = %filteredTypesArray.getKey(%i);
|
|
if(%filter $= "")
|
|
continue;
|
|
|
|
%container = new GuiControl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
};
|
|
|
|
%checkbox = new GuiCheckBoxCtrl(){
|
|
Profile = "ToolsGuiCheckBoxListProfile";
|
|
position = "5 1";
|
|
Extent = "118 18";
|
|
Command = "";
|
|
groupNum = "0";
|
|
buttonType = "ToggleButton";
|
|
text = %filter @ " ( " @ MaterialFilterAllArray.countKey(%filter) @ " )";
|
|
filter = %filter;
|
|
Command = "MaterialSelector.preloadFilter();";
|
|
};
|
|
%container.add( %checkbox );
|
|
MaterialSelector-->filterArray.add( %container );
|
|
|
|
%tagCount = getWordCount( MaterialSelector.currentFilter );
|
|
for( %j = 0; %j < %tagCount; %j++ )
|
|
{
|
|
if( %filter $= getWord( MaterialSelector.currentFilter, %j ) )
|
|
{
|
|
if( %selectedFilter $= "" )
|
|
%selectedFilter = %filter;
|
|
else
|
|
%selectedFilter = %selectedFilter @ " " @ %filter;
|
|
|
|
%checkbox.setStateOn(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
MaterialSelector.loadFilter( %selectedFilter );
|
|
|
|
%filteredTypesArray.delete();
|
|
}
|
|
|
|
// create category and update current material if there is one
|
|
function MaterialSelector::createFilter( %this, %filter )
|
|
{
|
|
if( %filter $= %existingFilters )
|
|
{
|
|
MessageBoxOK( "Error", "Can not create blank filter.");
|
|
return;
|
|
}
|
|
|
|
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
|
|
{
|
|
%existingFilters = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
|
|
if( %filter $= %existingFilters )
|
|
{
|
|
MessageBoxOK( "Error", "Can not create two filters of the same name.");
|
|
return;
|
|
}
|
|
}
|
|
%container = new GuiControl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "128 18";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
|
|
new GuiCheckBoxCtrl(){
|
|
Profile = "ToolsGuiCheckBoxListProfile";
|
|
position = "5 1";
|
|
Extent = "118 18";
|
|
Command = "";
|
|
groupNum = "0";
|
|
buttonType = "ToggleButton";
|
|
text = %filter @ " ( " @ MaterialFilterAllArray.countKey(%filter) @ " )";
|
|
filter = %filter;
|
|
Command = "MaterialSelector.preloadFilter();";
|
|
};
|
|
};
|
|
|
|
MaterialSelector-->filterArray.add( %container );
|
|
|
|
// if selection exists, lets reselect it to refresh it
|
|
if( isObject(MaterialSelector.selectedMaterial) )
|
|
MaterialSelector.updateSelection( MaterialSelector.selectedMaterial, MaterialSelector.selectedPreviewImagePath );
|
|
|
|
// material category text field to blank
|
|
MaterialSelector_addFilterWindow-->tagName.setText("");
|
|
}
|
|
|
|
function MaterialSelector::updateSelection( %this, %material, %previewImagePath )
|
|
{
|
|
// the material selector will visually update per material information
|
|
// after we move away from the material. eg: if we remove a field from the material,
|
|
// the empty checkbox will still be there until you move fro and to the material again
|
|
|
|
%isMaterialBorder = 0;
|
|
eval("%isMaterialBorder = isObject(MaterialSelector-->"@%material@"Border);");
|
|
if( %isMaterialBorder )
|
|
{
|
|
eval( "MaterialSelector-->"@%material@"Border.setStateOn(1);");
|
|
}
|
|
|
|
%isMaterialBorderPrevious = 0;
|
|
eval("%isMaterialBorderPrevious = isObject(MaterialSelector-->"@$prevSelectedMaterialHL@"Border);");
|
|
if( %isMaterialBorderPrevious )
|
|
{
|
|
eval( "MaterialSelector-->"@$prevSelectedMaterialHL@"Border.setStateOn(0);");
|
|
}
|
|
|
|
MaterialSelector-->materialCategories.deleteAllObjects();
|
|
MaterialSelector.selectedMaterial = %material;
|
|
MaterialSelector.selectedPreviewImagePath = %previewImagePath;
|
|
MaterialSelector-->previewSelectionText.setText( %material );
|
|
MaterialSelector-->previewSelection.setBitmap( %previewImagePath );
|
|
|
|
// running through the existing list of categorynames in the left, so yes
|
|
// some might exist on the left only temporary if not given a home
|
|
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
|
|
{
|
|
%filter = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
|
|
|
|
%checkbox = new GuiCheckBoxCtrl(){
|
|
materialName = %material.name;
|
|
Profile = "ToolsGuiCheckBoxListProfile";
|
|
position = "5 2";
|
|
Extent = "118 18";
|
|
Command = "MaterialSelector.updateMaterialTags( $ThisControl.materialName, $ThisControl.getText(), $ThisControl.getValue() );";
|
|
text = %filter;
|
|
};
|
|
|
|
MaterialSelector-->materialCategories.add( %checkbox );
|
|
// crawl through material for categories in order to check or not
|
|
%filterFound = 0;
|
|
for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
|
|
{
|
|
%tag = %material.getFieldValue("materialTag" @ %j);
|
|
|
|
if( %tag $= %filter )
|
|
{
|
|
%filterFound = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( %filterFound )
|
|
%checkbox.setStateOn(1);
|
|
else
|
|
%checkbox.setStateOn(0);
|
|
}
|
|
|
|
$prevSelectedMaterialHL = %material;
|
|
}
|
|
|
|
function MaterialSelector::updateMaterialTags( %this, %material, %tag, %tagValue )
|
|
{
|
|
if( %tagValue == 1 )
|
|
{
|
|
MaterialFilterAllArray.add( %tag, %material );
|
|
if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
|
|
%secondStaticFilter = MaterialFilterUnmappedArray;
|
|
else
|
|
%secondStaticFilter = MaterialFilterMappedArray;
|
|
|
|
%secondStaticFilter.add( %tag, %material );
|
|
|
|
%createdTag = 0;
|
|
for( %i = 0; %createdTag == 0; %i++ )
|
|
{
|
|
%materialTag = %material.getFieldValue("materialTag" @ %i);
|
|
if( %materialTag $= "" )
|
|
{
|
|
eval( %material @ ".materialTag" @ %i @ "=" @ %tag @ ";" );
|
|
%createdTag = 1;
|
|
|
|
for( %j = MaterialSelector.staticFilterObjects; %j < MaterialSelector-->filterArray.getCount() ; %j++ )
|
|
{
|
|
if( %tag $= MaterialSelector-->filterArray.getObject(%j).getObject(0).filter )
|
|
{
|
|
%count = getWord( MaterialSelector-->filterArray.getObject(%j).getObject(0).getText(), 2 );
|
|
%count++;
|
|
MaterialSelector-->filterArray.getObject(%j).getObject(0).setText( %tag @ " ( "@ %count @ " )");
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
// Remove the material from the "all" category
|
|
for( %i = 0; %i < MaterialFilterAllArray.count(); %i++ )
|
|
{
|
|
if( MaterialFilterAllArray.getKey(%i) $= %tag )
|
|
{
|
|
if( MaterialFilterAllArray.getValue(%i) $= %material )
|
|
{
|
|
MaterialFilterAllArray.erase(%i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Figure out what the material's other category is
|
|
if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
|
|
%secondStaticFilter = MaterialFilterUnmappedArray;
|
|
else
|
|
%secondStaticFilter = MaterialFilterMappedArray;
|
|
|
|
// Remove the material from its other category
|
|
for( %i = 0; %i < %secondStaticFilter.count(); %i++ )
|
|
{
|
|
if( %secondStaticFilter.getKey(%i) $= %tag )
|
|
{
|
|
if( %secondStaticFilter.getValue(%i) $= %material )
|
|
{
|
|
%secondStaticFilter.erase( %i );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
MaterialSelector.updateFilterCount( %tag, false );
|
|
|
|
%tagField = MaterialSelector.getTagField( %material, %tag );
|
|
%lastTagField = MaterialSelector.getLastTagField( %material );
|
|
%lastValidTagField = MaterialSelector.getLastValidTagField( %material, %tag );
|
|
|
|
if( %tagField $= %lastValidTagField || %lastValidTagField $= "" )
|
|
{
|
|
MaterialSelectorPerMan.removeField( %material, %tagField );
|
|
}
|
|
else
|
|
{
|
|
// Replace the current tagFieldValue with the last tagFieldValue
|
|
%lastValidTag = %material.getFieldValue( %lastValidTagField );
|
|
%material.setFieldValue( %tagField, %lastValidTag );
|
|
|
|
// Remove the last tagFieldValue
|
|
MaterialSelectorPerMan.removeField( %material, %lastTagField );
|
|
}
|
|
}
|
|
|
|
// so were not going to save materials that dont current exist...
|
|
// technically all the data is stored in dynamic fields if the user feels like saving
|
|
// their auto-generated or new material
|
|
if( %material.getFilename() !$= "" &&
|
|
%material.getFilename() !$= "tools/gui/MaterialSelector.ed.gui" &&
|
|
%material.getFilename() !$= "tools/materialEditor/scripts/materialEditor.ed.cs" )
|
|
{
|
|
MaterialSelectorPerMan.setDirty( %material );
|
|
MaterialSelectorPerMan.saveDirty();
|
|
MaterialSelectorPerMan.removeDirty( %material );
|
|
|
|
if(!%tagValue)
|
|
%material.setFieldValue( %lastTagField, "" );
|
|
}
|
|
}
|
|
|
|
function MaterialSelector::updateFilterCount( %this, %tag, %add )
|
|
{
|
|
for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
|
|
{
|
|
if( %tag $= MaterialSelector-->filterArray.getObject(%i).getObject(0).filter )
|
|
{
|
|
// Get the filter count and apply the operation
|
|
%idx = getWord( MaterialSelector-->filterArray.getObject(%i).getObject(0).getText(), 2 );
|
|
|
|
if( %add )
|
|
%idx++;
|
|
else
|
|
%idx--;
|
|
|
|
MaterialSelector-->filterArray.getObject(%i).getObject(0).setText( %tag @ " ( "@ %idx @ " )");
|
|
}
|
|
}
|
|
}
|
|
|
|
// this should create a new material pretty nicely
|
|
function MaterialSelector::createNewMaterial( %this )
|
|
{
|
|
// look for a newMaterial name to grab
|
|
%material = getUniqueName( "newMaterial" );
|
|
|
|
new Material(%material)
|
|
{
|
|
diffuseMap[0] = "core/images/warnmat";
|
|
mapTo = "unmapped_mat";
|
|
parentGroup = RootGroup;
|
|
};
|
|
|
|
// add one to All filter
|
|
MaterialFilterAllArray.add( "", %material.name );
|
|
MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() + 1 @ " ) ");
|
|
|
|
MaterialFilterUnmappedArray.add( "", %material.name );
|
|
MaterialFilterUnmappedArrayCheckbox.setText("Unmapped ( " @ MaterialFilterUnmappedArray.count() + 1 @ " ) ");
|
|
|
|
if( MaterialSelector.currentStaticFilter !$= "MaterialFilterMappedArray" )
|
|
{
|
|
// create the new material gui
|
|
%container = new GuiControl(){
|
|
profile = "ToolsGuiDefaultProfile";
|
|
Position = "0 0";
|
|
Extent = "74 85";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
isContainer = "1";
|
|
new GuiTextCtrl(){
|
|
position = "10 70";
|
|
profile = "ToolsGuiTextCenterProfile";
|
|
extent = "64 16";
|
|
text = %material.name;
|
|
};
|
|
};
|
|
|
|
%previewButton = new GuiBitmapButtonCtrl(){
|
|
internalName = %material.name;
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiButtonProfile";
|
|
position = "7 4";
|
|
extent = "64 64";
|
|
buttonType = "PushButton";
|
|
bitmap = "core/images/warnmat";
|
|
Command = "";
|
|
text = "Loading...";
|
|
useStates = false;
|
|
|
|
new GuiBitmapButtonCtrl(){
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiButtonProfile";
|
|
position = "0 0";
|
|
extent = "64 64";
|
|
Variable = "";
|
|
buttonType = "toggleButton";
|
|
bitmap = "tools/materialEditor/gui/cubemapBtnBorder";
|
|
groupNum = "0";
|
|
text = "";
|
|
};
|
|
};
|
|
|
|
%previewBorder = new GuiButtonCtrl(){
|
|
internalName = %material.name@"Border";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
profile = "ToolsGuiThumbHighlightButtonProfile";
|
|
position = "3 0";
|
|
extent = "72 88";
|
|
Variable = "";
|
|
buttonType = "toggleButton";
|
|
tooltip = %material.name;
|
|
Command = "MaterialSelector.updateSelection( $ThisControl.getParent().getObject(1).internalName, $ThisControl.getParent().getObject(1).bitmap );";
|
|
groupNum = "0";
|
|
text = "";
|
|
};
|
|
|
|
%container.add(%previewButton);
|
|
%container.add(%previewBorder);
|
|
// add to the gui control array
|
|
MaterialSelector-->materialSelection.add(%container);
|
|
}
|
|
|
|
// select me
|
|
MaterialSelector.updateSelection( %material, "core/images/warnmat.png" );
|
|
}
|
|
|
|
//needs to be deleted with the persistence manager and needs to be blanked out of the matmanager
|
|
//also need to update instances... i guess which is the tricky part....
|
|
function MaterialSelector::showDeleteDialog( %this )
|
|
{
|
|
%material = MaterialSelector.selectedMaterial;
|
|
%secondFilter = "MaterialFilterMappedArray";
|
|
%secondFilterName = "Mapped";
|
|
|
|
for( %i = 0; %i < MaterialFilterUnmappedArray.count(); %i++ )
|
|
{
|
|
if( MaterialFilterUnmappedArray.getValue(%i) $= %material )
|
|
{
|
|
%secondFilter = "MaterialFilterUnmappedArray";
|
|
%secondFilterName = "Unmapped";
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( isObject( %material ) )
|
|
{
|
|
MessageBoxYesNoCancel("Delete Material?",
|
|
"Are you sure you want to delete<br><br>" @ %material.getName() @ "<br><br> Material deletion won't take affect until the engine is quit.",
|
|
"MaterialSelector.deleteMaterial( " @ %material @ ", " @ %secondFilter @ ", " @ %secondFilterName @" );",
|
|
"",
|
|
"" );
|
|
}
|
|
}
|
|
|
|
function MaterialSelector::deleteMaterial( %this, %materialName, %secondFilter, %secondFilterName )
|
|
{
|
|
if( !isObject( %materialName ) )
|
|
return;
|
|
|
|
for( %i = 0; %i <= MaterialFilterAllArray.countValue( %materialName ); %i++)
|
|
{
|
|
%index = MaterialFilterAllArray.getIndexFromValue( %materialName );
|
|
MaterialFilterAllArray.erase( %index );
|
|
}
|
|
MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() - 1 @ " ) ");
|
|
|
|
%checkbox = %secondFilter @ "Checkbox";
|
|
for( %k = 0; %k <= %secondFilter.countValue( %materialName ); %k++)
|
|
{
|
|
%index = %secondFilter.getIndexFromValue( %materialName );
|
|
%secondFilter.erase( %index );
|
|
}
|
|
%checkbox.setText( %secondFilterName @ " ( " @ %secondFilter.count() - 1 @ " ) ");
|
|
|
|
for( %i = 0; %materialName.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
|
|
{
|
|
%materialTag = %materialName.getFieldValue("materialTag" @ %i);
|
|
|
|
for( %j = MaterialSelector.staticFilterObjects; %j < MaterialSelector-->filterArray.getCount() ; %j++ )
|
|
{
|
|
if( %materialTag $= MaterialSelector-->filterArray.getObject(%j).getObject(0).filter )
|
|
{
|
|
%count = getWord( MaterialSelector-->filterArray.getObject(%j).getObject(0).getText(), 2 );
|
|
%count--;
|
|
MaterialSelector-->filterArray.getObject(%j).getObject(0).setText( %materialTag @ " ( "@ %count @ " )");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
UnlistedMaterials.add( "unlistedMaterials", %materialName );
|
|
|
|
if( %materialName.getFilename() !$= "" &&
|
|
%materialName.getFilename() !$= "tools/gui/MaterialSelector.ed.gui" &&
|
|
%materialName.getFilename() !$= "tools/materialEditor/scripts/materialEditor.ed.cs" )
|
|
{
|
|
MaterialSelectorPerMan.removeObjectFromFile(%materialName);
|
|
MaterialSelectorPerMan.saveDirty();
|
|
}
|
|
|
|
MaterialSelector.preloadFilter();
|
|
//MaterialSelector.selectMaterial( "WarningMaterial" );
|
|
}
|
|
|
|
function MaterialSelector::switchStaticFilters( %this, %staticFilter)
|
|
{
|
|
switch$(%staticFilter)
|
|
{
|
|
case "MaterialFilterAllArray":
|
|
MaterialFilterAllArrayCheckbox.setStateOn(1);
|
|
|
|
MaterialFilterMappedArrayCheckbox.setStateOn(0);
|
|
MaterialFilterUnmappedArrayCheckbox.setStateOn(0);
|
|
case "MaterialFilterMappedArray":
|
|
MaterialFilterMappedArrayCheckbox.setStateOn(1);
|
|
|
|
MaterialFilterAllArrayCheckbox.setStateOn(0);
|
|
MaterialFilterUnmappedArrayCheckbox.setStateOn(0);
|
|
case "MaterialFilterUnmappedArray":
|
|
MaterialFilterUnmappedArrayCheckbox.setStateOn(1);
|
|
|
|
MaterialFilterAllArrayCheckbox.setStateOn(0);
|
|
MaterialFilterMappedArrayCheckbox.setStateOn(0);
|
|
}
|
|
|
|
// kinda goofy were passing a class variable... we can't do an empty check right now
|
|
// on load filter because we actually pass "" as a filter...
|
|
MaterialSelector.loadFilter( MaterialSelector.currentFilter, %staticFilter );
|
|
}
|
|
|
|
// Tagging Functionality
|
|
|
|
function MaterialSelector::getTagField( %this, %material, %tag )
|
|
{
|
|
for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
|
|
{
|
|
%loopTag = %material.getFieldValue("materialTag" @ %i);
|
|
if( %tag $= %loopTag )
|
|
{
|
|
%tagField = "materialTag" @ %i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return %tagField;
|
|
}
|
|
|
|
function MaterialSelector::getLastTagField( %this, %material )
|
|
{
|
|
for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
|
|
{
|
|
%tagField = "materialTag" @ %i;
|
|
}
|
|
|
|
return %tagField;
|
|
}
|
|
|
|
function MaterialSelector::getLastValidTagField( %this, %material, %invalidTag )
|
|
{
|
|
for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
|
|
{
|
|
%tag = %material.getFieldValue("materialTag" @ %i);
|
|
// Can't equal our invalid tag
|
|
if( %tag $= %invalidTag )
|
|
continue;
|
|
|
|
// Set our last found tag
|
|
%tagField = "materialTag" @ %i;
|
|
}
|
|
|
|
return %tagField;
|
|
}
|
|
|
|
// Preview Page Navigation
|
|
|
|
function MaterialSelector::firstPage(%this)
|
|
{
|
|
MaterialSelector.currentPreviewPage = 0;
|
|
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
|
|
}
|
|
|
|
function MaterialSelector::previousPage(%this)
|
|
{
|
|
MaterialSelector.currentPreviewPage--;
|
|
if( MaterialSelector.currentPreviewPage < 0)
|
|
MaterialSelector.currentPreviewPage = 0;
|
|
|
|
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
|
|
}
|
|
|
|
function MaterialSelector::nextPage(%this)
|
|
{
|
|
MaterialSelector.currentPreviewPage++;
|
|
if( MaterialSelector.currentPreviewPage >= MaterialSelector.totalPages)
|
|
MaterialSelector.currentPreviewPage = MaterialSelector.totalPages - 1;
|
|
if( MaterialSelector.currentPreviewPage < 0)
|
|
MaterialSelector.currentPreviewPage = 0;
|
|
|
|
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
|
|
}
|
|
|
|
function MaterialSelector::lastPage(%this)
|
|
{
|
|
MaterialSelector.currentPreviewPage = MaterialSelector.totalPages - 1;
|
|
if( MaterialSelector.currentPreviewPage < 0)
|
|
MaterialSelector.currentPreviewPage = 0;
|
|
|
|
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
|
|
}
|
|
|
|
function MaterialSelector::selectPage(%this, %page)
|
|
{
|
|
MaterialSelector.currentPreviewPage = %page;
|
|
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
|
|
}
|
|
|
|
function MaterialSelector::thumbnailCountUpdate(%this)
|
|
{
|
|
$Pref::MaterialSelector::ThumbnailCountIndex = MaterialSelector-->materialPreviewCountPopup.getSelected();
|
|
MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
|
|
}
|
|
|
|
function MaterialSelector::buildPagesButtons(%this, %currentPage, %totalPages)
|
|
{
|
|
// We don't want any more than 8 pages at a time.
|
|
if( %totalPages > 8 )
|
|
{
|
|
// We attempt to display up to 2 pages before the current page
|
|
%start = %currentPage - 2;
|
|
if( %start <= 0 )
|
|
{
|
|
%start = 0;
|
|
%startbracket = false;
|
|
}
|
|
else
|
|
{
|
|
%startbracket = true;
|
|
}
|
|
|
|
if( (%totalPages - %start) < 8 )
|
|
{
|
|
// Move %start closer to the beginning to maintain 8 pages
|
|
%start = %totalPages - 8;
|
|
}
|
|
|
|
%end = %start + 8;
|
|
if( %end >= %totalPages )
|
|
{
|
|
%end = %totalPages;
|
|
%endbracket = false;
|
|
}
|
|
else
|
|
{
|
|
%endbracket = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
%start = 0;
|
|
%end = %totalPages;
|
|
%startbracket = false;
|
|
%endbracket = false;
|
|
}
|
|
|
|
if( %startbracket )
|
|
{
|
|
%control = new GuiTextCtrl(){
|
|
profile = "ToolsGuiTextCenterProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "0 2";
|
|
extent = "14 16";
|
|
MinExtent = "8 8";
|
|
text = "...";
|
|
};
|
|
MaterialSelector-->materialPreviewPagesStack.add( %control );
|
|
}
|
|
|
|
for( %i = %start; %i < %end; %i++ )
|
|
{
|
|
if( %i != %currentPage )
|
|
{
|
|
%control = new GuiButtonCtrl() {
|
|
canSaveDynamicFields = "0";
|
|
Enabled = "1";
|
|
isContainer = "0";
|
|
Profile = "ToolsGuiTextCenterProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
Position = "0 0";
|
|
Extent = "14 16";
|
|
MinExtent = "8 8";
|
|
canSave = "1";
|
|
isDecoy = "0";
|
|
Visible = "1";
|
|
Command = "MaterialSelector.schedule(0, selectPage, " @ %i @ ");";
|
|
tooltipprofile = "ToolsGuiToolTipProfile";
|
|
hovertime = "1000";
|
|
text = %i+1;
|
|
groupNum = "-1";
|
|
buttonType = "PushButton";
|
|
useMouseEvents = "1";
|
|
};
|
|
}
|
|
else
|
|
{
|
|
%control = new GuiTextCtrl(){
|
|
profile = "ToolsGuiTextBoldCenterProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "0 2";
|
|
extent = "14 16";
|
|
MinExtent = "8 8";
|
|
text = %i+1;
|
|
};
|
|
}
|
|
|
|
MaterialSelector-->materialPreviewPagesStack.add( %control );
|
|
}
|
|
|
|
if( %endbracket )
|
|
{
|
|
%control = new GuiTextCtrl(){
|
|
profile = "ToolsGuiTextCenterProfile";
|
|
HorizSizing = "right";
|
|
VertSizing = "bottom";
|
|
position = "0 2";
|
|
extent = "14 16";
|
|
MinExtent = "8 8";
|
|
text = "...";
|
|
};
|
|
MaterialSelector-->materialPreviewPagesStack.add( %control );
|
|
}
|
|
}
|