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

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
id_ivan's picture

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

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.