dotnet listview autoresize
I have a script that is using a dotnet listview and I'm trying to find a way to make the list resize automatically when resizing the window.
I’ve searched online and couldn’t really find any solution, i would be grateful if anyone could help me with this.
( --Destroy dialog if it already exists. try(destroyDialog quickStat)catch() --Create a rollout rollout quickStat "Texture Checker" width:820 ( --Create the dotNet listview control dotNetControl lv "system.windows.forms.listView" pos: [12,40] height:400 width:800 fn compileListItemSorter = ( source = "using System;\n" source += "using System.Windows.Forms;\n" source += "using System.Collections;\n" source += "class ListViewItemComparer : IComparer\n" source += "{\n" source += " private int c;\n" source += " private bool num = false;\n" source += " private int dir = 1;\n" source += " public ListViewItemComparer() { c = 0; }\n" source += " public ListViewItemComparer(int column, bool numeric, bool reverse)\n" source += " { c = column; num = numeric; dir = reverse ? -1 : 1; }\n" source += " public int Compare(object x, object y)\n" source += " {\n" source += " if (num) return Convert.ToInt32(((ListViewItem)x).SubItems[c].Text).CompareTo(\n" source += " Convert.ToInt32(((ListViewItem)y).SubItems[c].Text)) * dir;\n" source += " else return String.Compare(((ListViewItem)x).SubItems[c].Text,\n" source += " ((ListViewItem)y).SubItems[c].Text) * dir;\n" source += " }\n" source += "}" local csharpProvider = dotNetObject "Microsoft.CSharp.CSharpCodeProvider" local compilerParams = dotNetObject "System.CodeDom.Compiler.CompilerParameters" compilerParams.GenerateInMemory = true compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.dll") compilerResults = csharpProvider.CompileAssemblyFromSource compilerParams #(source) compilerResults.CompiledAssembly ) --Innitialize the listview control fn initLv theLv= ( --Setup the forms view theLv.view=(dotNetClass "system.windows.forms.view").details theLv.FullRowSelect=true --Set so full width of listView is selected and not just first column. theLv.GridLines=true --Show lines between the items. theLv.MultiSelect=true --Allow for multiple selections. theLv.AllowColumnReorder = true theLv.AllowColumnReorder = true theLv.autoResizeColumn theLv.backColor=lv.backColor.FromArgb 250 250 210 -- Soften the background intensity a bit ) --Add columns. fn addColumns theLv columnsAr= ( theLv.columns.add columnsAr[1] 120 -- object name theLv.columns.add columnsAr[2] 120 -- materialname theLv.columns.add columnsAr[3] 120 -- Diffuse-map theLv.columns.add columnsAr[4] 120 -- Opacity-map theLv.columns.add columnsAr[5] 120 -- specular-map theLv.columns.add columnsAr[6] 120 -- glossiness-map theLv.columns.add columnsAr[7] 120 -- Bump-map theLv.columns.add columnsAr[8] 120 -- Ambient-map theLv.columns.add columnsAr[9] 120 -- speclevel-map theLv.columns.add columnsAr[10] 120 -- selfillumination-map theLv.columns.add columnsAr[11] 120 -- filtercolor-map theLv.columns.add columnsAr[12] 120 -- reflection-map theLv.columns.add columnsAr[13] 120 -- refraction-map theLv.columns.add columnsAr[14] 120 -- displacement-map ) --Adds rows of data to the listView fn populateList theLv= ( rows=#() --Empty array to collect rows of data for x in objects do --Loop through all the objects in the scene. ( li=dotNetObject "System.Windows.Forms.ListViewItem" x.name -- column 1 :: --Create a listViewItem object and name it. li.subitems.add((x.material.name) as string) -- column 2 :: Add or remove ".name" to show or hide material type e.g. vray/standard li.subitems.add (try((filenamefrompath (x.material.diffusemap.filename )) as string)catch("--")) -- column 3 :: Adds difuse map texture name li.subitems.add (try((filenamefrompath (x.material.opacitymap.filename)) as string)catch("--")) -- column 4 :: Adds opacity map texture name li.subitems.add (try((filenamefrompath (x.material.specularMap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.glossinessMap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.bumpmap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.ambientmap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.specularLevelmap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.selfIllummap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.filtermap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.reflectionmap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.refractionmap.filename)) as string)catch("--")) li.subitems.add (try((filenamefrompath (x.material.displacementmap.filename)) as string)catch("--")) li.Tag = dotnetMXSValue x append rows li --Added the listViewItem to the rows array ) theLv.items.addRange rows --Add the array of rows to the listView control. ) on lv columnClick columnHeader do ( lv.ListViewItemSorter = dotnetobject "MXS_dotNet.ListViewItemComparer" columnHeader.column lv.ListViewItemSorter = undefined ) on refresh pressed do ( lv.items.clear() initLv lv populateList lv ) on colstack pressed do ( for o in selection do ( converttopoly o ) ) on lv ItemSelectionChanged s a do ( format "item:% selected:% node:%\n" a.item.text a.isSelected a.item.tag.value ) on lv SelectedIndexChanged s a do ( with undo off ( nodes = for k=0 to s.selectedItems.count-1 where isvalidnode (node = s.selectedItems.item[k].tag.value) collect node if nodes.count == 0 then clearselection() else select nodes ) ) on lv MouseDoubleClick arg do ( hit=(lv.HitTest (dotNetObject "System.Drawing.Point" arg.x arg.y)) row=hit.item.Index colAdd=(if (mod row 2)==0 then 20 else -20) lv.items.item[row].BackColor=lv.items.item[row].BackColor.fromARGB (220+colAdd) (100+colAdd) (100+colAdd) ) on quickStat open do ( initLv lv addColumns lv #("Objectname","Materialname","Diffuse-map","Opacity-map","Specular-map","Glossiness-map","Bump-map","Ambient-map","SpecLevel-map","Self-Illum-map","Filter-map","Refl-map","Refra-map","Displace-map") populateList lv ) ) --Create a dialog and assign the rollout to it. createDialog quickStat style:#(#style_titlebar, #style_sysmenu, #style_resizing) )
Comments
try
Download andra's path editor https://www.scriptspot.com/3ds-max/scripts/zoa-path-editor and see re_size() function on how to resize your columns. Basically you need to compare it to your dialog size to calculate each column.
Rivanoor Bren
https://rivanoor.info