From 0d12a329cf2e4fceea3754cbc854659df49e7c6c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Kov=C3=A1r?= <matko@192.168.1.105>
Date: Fri, 19 Nov 2021 11:31:47 +0100
Subject: [PATCH] created new class DefaultModelsTableModel

---
 .../fidentis/analyst/core/ProjectTopComp.form |  6 +-
 .../fidentis/analyst/core/ProjectTopComp.java | 88 ++-----------------
 .../analyst/gui/DefaultModelsTableModel.java  | 50 +++++++++++
 3 files changed, 58 insertions(+), 86 deletions(-)
 create mode 100644 GUI/src/main/java/cz/fidentis/analyst/gui/DefaultModelsTableModel.java

diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
index c2a4060a..c337bab2 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
@@ -240,10 +240,10 @@
               <SubComponents>
                 <Component class="javax.swing.JTable" name="jTable1">
                   <Properties>
-                    <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="jTable1.getTableHeader().setOpaque(false);&#xa;jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));&#xa;jTable1.getTableHeader().setFont(new java.awt.Font(&quot;Tahoma&quot;, 0, 18));&#xa;//jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);">
+                    <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="jTable1.getTableHeader().setOpaque(false);&#xa;jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));&#xa;jTable1.getTableHeader().setFont(new java.awt.Font(&quot;Tahoma&quot;, 0, 18));&#xa;jTable1.setModel(new cz.fidentis.analyst.gui.DefaultModelsTableModel(new Object[]{&quot;&quot;, &quot;Models&quot;, &quot;KD-tree&quot;}, 0));&#xa;/*">
                       <Font name="Tahoma" size="18" style="0"/>
                     </Property>
-                    <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="//javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();&#xa;jTable1.getColumnModel().getColumn(0).setMaxWidth(50);&#xa;//jTable1.getColumnModel().getColumn(1).setPreferredWidth(1000);&#xa;jTable1.getColumnModel().getColumn(2).setMaxWidth(75);&#xa;jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);&#xa;//jTable1.getTableHeader().getColumnModel().getColumn(1).setPreferredWidth(1000);&#xa;jTable1.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);&#xa;model = (javax.swing.table.DefaultTableModel) jTable1.getModel();&#xa;model.addTableModelListener(new TableModelListener() {&#xa;&#xa;    public void tableChanged(TableModelEvent e) {&#xa;        &#xa;        if (e.getType() == javax.swing.event.TableModelEvent.UPDATE &amp;&amp; byUser) {&#xa;            int row = e.getFirstRow();&#xa;            int col = e.getColumn();&#xa;&#xa;            if (jTable1.getValueAt(row, col) == (Object)true) {&#xa;                selectedRows.add(row);&#xa;            } else {&#xa;                selectedRows.remove((Object)row);&#xa;            }&#xa;        }&#xa;    }&#xa;});">
+                    <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="//javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();&#xa;*/&#xa;jTable1.getColumnModel().getColumn(0).setMaxWidth(50);&#xa;jTable1.getColumnModel().getColumn(2).setMaxWidth(75);&#xa;jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);&#xa;jTable1.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);&#xa;model = (javax.swing.table.DefaultTableModel) jTable1.getModel();&#xa;model.addTableModelListener(new TableModelListener() {&#xa;&#xa;    public void tableChanged(TableModelEvent e) {&#xa;        &#xa;        if (e.getType() == javax.swing.event.TableModelEvent.UPDATE &amp;&amp; byUser) {&#xa;            int row = e.getFirstRow();&#xa;            int col = e.getColumn();&#xa;&#xa;            if (jTable1.getValueAt(row, col) == (Object)true) {&#xa;                selectedRows.add(row);&#xa;            } else {&#xa;                selectedRows.remove((Object)row);&#xa;            }&#xa;        }&#xa;    }&#xa;});">
                       <Connection code="new javax.swing.table.DefaultTableModel(&#xa;    new Object [][] {},&#xa;    new String [] {&quot;&quot;, &quot;Models&quot;, &quot;KD-tree&quot;}) {&#xa;    private Class[] types = new Class [] {&#xa;        java.lang.Boolean.class, java.lang.Object.class, java.lang.Boolean.class&#xa;    };&#xa;    private boolean[] canEdit = new boolean [] {&#xa;        true, false, false};&#xa;&#xa;    public Class getColumnClass(int columnIndex) {&#xa;        return types [columnIndex];}&#xa;&#xa;    public boolean isCellEditable(int rowIndex, int columnIndex) {&#xa;        return canEdit [columnIndex];&#xa;    }&#xa;    public Class[] getTypes() {&#xa;        return types;}&#xa;&#xa;    public void setTypes(Class[] types) {&#xa;        this.types = types;}&#xa;&#xa;    public boolean[] getCanEdit() {&#xa;        return canEdit;}&#xa;&#xa;    public void setCanEdit(boolean[] canEdit) {&#xa;        this.canEdit = canEdit;&#xa;    }&#xa;}" type="code"/>
                     </Property>
                     <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
@@ -264,4 +264,4 @@
       </SubComponents>
     </Container>
   </SubComponents>
-</Form>
+</Form>
\ No newline at end of file
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
index e977b24b..a6b50274 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
@@ -13,6 +13,7 @@ import org.openide.util.NbBundle.Messages;
 import cz.fidentis.analyst.Project;
 import cz.fidentis.analyst.face.HumanFace;
 import cz.fidentis.analyst.face.HumanFaceFactory;
+import cz.fidentis.analyst.gui.DefaultModelsTableModel;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
@@ -24,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
-import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
 import javax.swing.event.TableModelEvent;
 import javax.swing.event.TableModelListener;
@@ -219,7 +219,8 @@ public final class ProjectTopComp extends TopComponent {
         jTable1.getTableHeader().setOpaque(false);
         jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));
         jTable1.getTableHeader().setFont(new java.awt.Font("Tahoma", 0, 18));
-        //jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
+        jTable1.setModel(new DefaultModelsTableModel(new Object[]{"", "Models", "KD-tree"}, 0));
+        /*
         jTable1.setModel(new javax.swing.table.DefaultTableModel(
             new Object [][] {},
             new String [] {"", "Models", "KD-tree"}) {
@@ -249,11 +250,10 @@ public final class ProjectTopComp extends TopComponent {
             }
         });
         //javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
+        */
         jTable1.getColumnModel().getColumn(0).setMaxWidth(50);
-        //jTable1.getColumnModel().getColumn(1).setPreferredWidth(1000);
         jTable1.getColumnModel().getColumn(2).setMaxWidth(75);
         jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);
-        //jTable1.getTableHeader().getColumnModel().getColumn(1).setPreferredWidth(1000);
         jTable1.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);
         model = (javax.swing.table.DefaultTableModel) jTable1.getModel();
         model.addTableModelListener(new TableModelListener() {
@@ -494,11 +494,7 @@ public final class ProjectTopComp extends TopComponent {
                 String name = face.getShortName();
                 if (this.project.getFaceByName(name) == null) {
                     this.project.addFace(face);
-                    boolean hasKD;
-                    if (face.getKdTree() == null) {hasKD = false;}
-                    else                          {hasKD = true;}
-                    model.addRow(new Object[]{false, name, hasKD});
-                    //createSingleFaceTab(face, name);
+                    model.addRow(new Object[]{false, name, false});
                 } else {
                     JOptionPane.showMessageDialog(this, "Model with this name is already loaded");
                 }
@@ -506,80 +502,6 @@ public final class ProjectTopComp extends TopComponent {
         }
     }
 
-    /**
-     * Load two models for 1:1 comparison
-     
-    public void loadTwoModels() {
-        
-        File file1 = new FileChooserBuilder(ProjectTopComp.class)
-                .setTitle("Open human face(s)")
-                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
-                //.setApproveText("Add")
-                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
-                .setAcceptAllFileFilterUsed(true)
-                .showOpenDialog();
-        
-        File file2 = new FileChooserBuilder(ProjectTopComp.class)
-                .setTitle("Open human face(s)")
-                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
-                //.setApproveText("Add")
-                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
-                .setAcceptAllFileFilterUsed(true)
-                .showOpenDialog();
-        
-        if (file1 == null || file2 == null) {
-            System.out.print("Missing file.");
-        } else {
-            String faceId1 = HumanFaceFactory.instance().loadFace(file1);
-            String faceId2 = HumanFaceFactory.instance().loadFace(file2);
-            HumanFace face1 = HumanFaceFactory.instance().getFace(faceId1);
-            HumanFace face2 = HumanFaceFactory.instance().getFace(faceId2);
-            
-            try {
-                // simple hack:
-                Path path = Paths.get(file1.getAbsolutePath());
-                Path folder = path.getParent();
-                Path filename = path.getFileName();
-                String filestr = filename.toString();
-                filestr = filestr.split("_ECA.obj")[0];
-                filestr = filestr + "_landmarks.csv";
-                face1.loadFeaturePoints(folder.toString(), filestr);
-            } catch(IOException ex) {
-                ex.printStackTrace();
-            }
-            
-            try {
-                // simple hack:
-                Path path = Paths.get(file2.getAbsolutePath());
-                Path folder = path.getParent();
-                Path filename = path.getFileName();
-                String filestr = filename.toString();
-                filestr = filestr.split("_ECA.obj")[0];
-                filestr = filestr + "_landmarks.csv";
-                face2.loadFeaturePoints(folder.toString(), filestr);
-            } catch(IOException ex) {
-                ex.printStackTrace();
-            }
-            
-            //this.project.setPrimaryFace(face1);
-            //this.project.addFace(face1);
-            this.project.setFaces(List.of(face1, face2));
-            createFaceToFaceTab(face1, face2, "1:1");
-
-        javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel) jTable1.getModel();
-
-        if (selectedRows.size() == 2) {
-
-            String name1 = model.getValueAt(selectedRows.get(0), 1).toString();
-            String name2 = model.getValueAt(selectedRows.get(1), 1).toString();
-            HumanFace face1 = project.getFaceByName(name1);
-            HumanFace face2 = project.getFaceByName(name2);
-            createFaceToFaceTab(face1, face2, name1 + ":" + name2);
-        } else {
-            JOptionPane.showMessageDialog(this, "Select two models");
-        }
-    }*/
-
    /**
     * Creates and opens tab with one face
     * @param face which will be analyzed
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/DefaultModelsTableModel.java b/GUI/src/main/java/cz/fidentis/analyst/gui/DefaultModelsTableModel.java
new file mode 100644
index 00000000..70aec69d
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/gui/DefaultModelsTableModel.java
@@ -0,0 +1,50 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package cz.fidentis.analyst.gui;
+
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ *
+ * @author Matej Kovar
+ */
+public class DefaultModelsTableModel extends DefaultTableModel {
+
+    public DefaultModelsTableModel(Object[] columnNames, int rowCount) {
+        super(columnNames, rowCount);
+    }
+
+
+    private Class[] types = new Class [] {
+        java.lang.Boolean.class, java.lang.Object.class, java.lang.Boolean.class
+    };
+
+    private boolean[] canEdit = new boolean [] {
+        true, false, false
+    };
+
+    @Override
+    public Class getColumnClass(int columnIndex) {
+        return types [columnIndex];}
+
+    @Override
+    public boolean isCellEditable(int rowIndex, int columnIndex) {
+        return canEdit [columnIndex];
+    }
+    public Class[] getTypes() {
+        return types;}
+
+    public void setTypes(Class[] types) {
+        this.types = types;}
+
+    public boolean[] getCanEdit() {
+        return canEdit;}
+
+    public void setCanEdit(boolean[] canEdit) {
+        this.canEdit = canEdit;
+    }
+}
-- 
GitLab