diff src/name/blackcap/exifwasher/Misc.kt @ 8:88d02fa97d78

Got WasherDialog table laying out somewhat sanely.
author David Barts <n5jrn@me.com>
date Fri, 10 Apr 2020 15:09:36 -0700
parents dc1f4359659d
children 0a106e9b91b4
line wrap: on
line diff
--- a/src/name/blackcap/exifwasher/Misc.kt	Fri Apr 10 13:44:04 2020 -0700
+++ b/src/name/blackcap/exifwasher/Misc.kt	Fri Apr 10 15:09:36 2020 -0700
@@ -5,8 +5,13 @@
 
 import java.awt.Component
 import java.awt.Cursor
+import java.awt.Dimension
+import java.awt.Font
+import java.awt.FontMetrics
+import java.awt.Graphics
 import java.awt.Toolkit
 import javax.swing.*
+import javax.swing.table.TableColumnModel
 import kotlin.annotation.*
 import kotlin.properties.ReadWriteProperty
 import kotlin.reflect.*
@@ -163,3 +168,27 @@
     setVisible(false)
     dispose()
 }
+
+/**
+ * Set column width of a table.
+ */
+fun JTable.setColWidth(col: Int, width: Int, string: String?) {
+    val FUZZ = 4
+    columnModel.getColumn(col).preferredWidth = if (string.isNullOrEmpty()) {
+        width + FUZZ
+    } else {
+        maxOf(width, graphics.fontMetrics.stringWidth(string)) + FUZZ
+    }
+}
+
+/**
+ * Set overall width of a table.
+ */
+fun JTable.setOverallWidth() {
+    val tcm = columnModel
+    var total = 0
+    for (i in 0 .. tcm.columnCount - 1) {
+        total += tcm.getColumn(i).preferredWidth
+    }
+    preferredSize = Dimension(total, preferredSize.height)
+}