Loading GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form +1 −1 Original line number Diff line number Diff line Loading @@ -243,7 +243,7 @@ <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="jTable1.getTableHeader().setOpaque(false);
jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));
jTable1.getTableHeader().setFont(new java.awt.Font("Tahoma", 0, 18));"> <Font name="Tahoma" size="18" style="0"/> </Property> <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor" postCode="javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
model.addTableModelListener(new TableModelListener() {

 public void tableChanged(TableModelEvent e) {
 
 if (e.getType() == javax.swing.event.TableModelEvent.UPDATE && byUser) {
 int row = e.getFirstRow();
 int col = e.getColumn();

 if (jTable1.getValueAt(row, col) == (Object)true) {
 selectedRows.add(row);
 } else {
 selectedRows.remove((Object)row);
 }
 }
 }
});"> <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor" postCode="//javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
model = (javax.swing.table.DefaultTableModel) jTable1.getModel();
model.addTableModelListener(new TableModelListener() {

 public void tableChanged(TableModelEvent e) {
 
 if (e.getType() == javax.swing.event.TableModelEvent.UPDATE && byUser) {
 int row = e.getFirstRow();
 int col = e.getColumn();

 if (jTable1.getValueAt(row, col) == (Object)true) {
 selectedRows.add(row);
 } else {
 selectedRows.remove((Object)row);
 }
 }
 }
});"> <Table columnCount="2" rowCount="0"> <Column editable="true" title="" type="java.lang.Boolean"/> <Column editable="false" title="Models" type="java.lang.Object"/> Loading GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java +96 −50 Original line number Diff line number Diff line Loading @@ -20,11 +20,8 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; import java.util.stream.IntStream; import javax.swing.JOptionPane; Loading @@ -35,8 +32,8 @@ import org.openide.filesystems.FileChooserBuilder; /** * The main panel enabling analysts to select the primary and secondary faces, * and to perform basic batch processing. This panel also serves as an entry point * for detailed face analysis and face-to-face comparison. * and to perform basic batch processing. This panel also serves as an entry * point for detailed face analysis and face-to-face comparison. * * @author Matej Kovar */ Loading Loading @@ -66,7 +63,13 @@ public final class ProjectTopComp extends TopComponent { private final Project project; private Map<HumanFace, SingleFaceTab> singleFaceTabs = new HashMap<>(); private Map<HumanFace, FaceToFaceTab> faceToFaceTabs = new HashMap<>(); private javax.swing.table.DefaultTableModel model; /* List of indexes of selected Rows */ private List<Integer> selectedRows = new ArrayList<>(); /* Variable which helps to see whether user has clicked to checkbox or clicked on selection buttons */ private Boolean byUser = true; /** Loading Loading @@ -238,7 +241,8 @@ public final class ProjectTopComp extends TopComponent { return canEdit [columnIndex]; } }); javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); //javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); model = (javax.swing.table.DefaultTableModel) jTable1.getModel(); model.addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent e) { Loading Loading @@ -303,7 +307,7 @@ public final class ProjectTopComp extends TopComponent { }// </editor-fold>//GEN-END:initComponents /** * * Adds new model * @param evt starts function for loading model */ private void addButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addButton1MouseClicked Loading @@ -316,43 +320,72 @@ public final class ProjectTopComp extends TopComponent { */ private void removeButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeButton1MouseClicked javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); Collections.sort(selectedRows, Collections.reverseOrder()); for (int row : selectedRows) { selectedRows.forEach(row -> { HumanFace face = this.project.getFaceByName(model.getValueAt(row, 1).toString()); this.project.removeFace(face); model.removeRow(row); } }); selectedRows.clear(); }//GEN-LAST:event_removeButton1MouseClicked /** * Opens 1:1 tab with two selected faces, otherwise pops message that you * should select two faces * @param evt */ private void oneOnOneButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_oneOnOneButton1MouseClicked loadTwoModels(); //loadTwoModels(); 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"); } }//GEN-LAST:event_oneOnOneButton1MouseClicked /** * Selects all models from list of models * @param evt */ private void selectAllButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_selectAllButton1MouseClicked byUser = false; javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); for (int i = 0; i < model.getRowCount(); i++) {model.setValueAt(true, i, 0);} for (int i = 0; i < model.getRowCount(); i++) { model.setValueAt(true, i, 0); } selectedRows = IntStream.range(0, model.getRowCount()).boxed().collect(Collectors.toList()); byUser = true; }//GEN-LAST:event_selectAllButton1MouseClicked /** * Deselects all models from list of models * @param evt */ private void deselectAllButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deselectAllButton1MouseClicked byUser = false; javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); for (int i : selectedRows) {model.setValueAt(false, i, 0);} selectedRows.forEach(i -> {model.setValueAt(false, i, 0);}); selectedRows.clear(); byUser = true; }//GEN-LAST:event_deselectAllButton1MouseClicked /** * Inflates models (selected will be deselected and vice versa) * @param evt */ private void inflateButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_inflateButton1MouseClicked byUser = false; javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); for (int i = 0; i < model.getRowCount(); i++) { if (model.getValueAt(i, 0) == (Object)true) {model.setValueAt(false, i, 0);} else {model.setValueAt(true, i, 0);} if (model.getValueAt(i, 0) == (Object) true) { model.setValueAt(false, i, 0); } else { model.setValueAt(true, i, 0); } } List<Integer> allRows = IntStream.range(0, model.getRowCount()).boxed().collect(Collectors.toList()); Loading @@ -361,10 +394,13 @@ public final class ProjectTopComp extends TopComponent { byUser = true; }//GEN-LAST:event_inflateButton1MouseClicked /** * Opens analysis of one selected face, otherwise pops message dialog that * you should select just one face * @param evt */ private void analyseButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_analyseButton1MouseClicked javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); if (selectedRows.size() == 1) { String name = model.getValueAt(selectedRows.get(0), 1).toString(); Loading Loading @@ -443,7 +479,6 @@ public final class ProjectTopComp extends TopComponent { ex.printStackTrace(); } javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); String name = face.getShortName(); if (this.project.getFaceByName(name) == null) { this.project.addFace(face); Loading @@ -457,9 +492,9 @@ 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"))) Loading Loading @@ -513,7 +548,7 @@ public final class ProjectTopComp extends TopComponent { //this.project.setPrimaryFace(face1); //this.project.addFace(face1); this.project.setFaces(List.of(face1, face2)); createFaceToFaceTab(face1, face2, "1:1");*/ createFaceToFaceTab(face1, face2, "1:1"); javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel) jTable1.getModel(); Loading @@ -527,8 +562,13 @@ public final class ProjectTopComp extends TopComponent { } else { JOptionPane.showMessageDialog(this, "Select two models"); } } }*/ /** * Creates and opens tab with one face * @param face which will be analyzed * @param name name of the tab (name of the model) */ private void createSingleFaceTab(HumanFace face, String name) { SingleFaceTab newTab = new SingleFaceTab(face, name); this.singleFaceTabs.put(face, newTab); Loading @@ -536,6 +576,12 @@ public final class ProjectTopComp extends TopComponent { newTab.requestActive(); } /** * Creates and opens tab with two faces (1:1 analysis) * @param face1 which will be analyzed * @param face2 which will be analyzed * @param name name of the tab */ private void createFaceToFaceTab(HumanFace face1, HumanFace face2, String name) { FaceToFaceTab newTab = new FaceToFaceTab(face1, face2, name); this.faceToFaceTabs.put(face1, newTab); Loading Loading
GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form +1 −1 Original line number Diff line number Diff line Loading @@ -243,7 +243,7 @@ <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="jTable1.getTableHeader().setOpaque(false);
jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));
jTable1.getTableHeader().setFont(new java.awt.Font("Tahoma", 0, 18));"> <Font name="Tahoma" size="18" style="0"/> </Property> <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor" postCode="javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
model.addTableModelListener(new TableModelListener() {

 public void tableChanged(TableModelEvent e) {
 
 if (e.getType() == javax.swing.event.TableModelEvent.UPDATE && byUser) {
 int row = e.getFirstRow();
 int col = e.getColumn();

 if (jTable1.getValueAt(row, col) == (Object)true) {
 selectedRows.add(row);
 } else {
 selectedRows.remove((Object)row);
 }
 }
 }
});"> <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor" postCode="//javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
model = (javax.swing.table.DefaultTableModel) jTable1.getModel();
model.addTableModelListener(new TableModelListener() {

 public void tableChanged(TableModelEvent e) {
 
 if (e.getType() == javax.swing.event.TableModelEvent.UPDATE && byUser) {
 int row = e.getFirstRow();
 int col = e.getColumn();

 if (jTable1.getValueAt(row, col) == (Object)true) {
 selectedRows.add(row);
 } else {
 selectedRows.remove((Object)row);
 }
 }
 }
});"> <Table columnCount="2" rowCount="0"> <Column editable="true" title="" type="java.lang.Boolean"/> <Column editable="false" title="Models" type="java.lang.Object"/> Loading
GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java +96 −50 Original line number Diff line number Diff line Loading @@ -20,11 +20,8 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; import java.util.stream.IntStream; import javax.swing.JOptionPane; Loading @@ -35,8 +32,8 @@ import org.openide.filesystems.FileChooserBuilder; /** * The main panel enabling analysts to select the primary and secondary faces, * and to perform basic batch processing. This panel also serves as an entry point * for detailed face analysis and face-to-face comparison. * and to perform basic batch processing. This panel also serves as an entry * point for detailed face analysis and face-to-face comparison. * * @author Matej Kovar */ Loading Loading @@ -66,7 +63,13 @@ public final class ProjectTopComp extends TopComponent { private final Project project; private Map<HumanFace, SingleFaceTab> singleFaceTabs = new HashMap<>(); private Map<HumanFace, FaceToFaceTab> faceToFaceTabs = new HashMap<>(); private javax.swing.table.DefaultTableModel model; /* List of indexes of selected Rows */ private List<Integer> selectedRows = new ArrayList<>(); /* Variable which helps to see whether user has clicked to checkbox or clicked on selection buttons */ private Boolean byUser = true; /** Loading Loading @@ -238,7 +241,8 @@ public final class ProjectTopComp extends TopComponent { return canEdit [columnIndex]; } }); javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); //javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); model = (javax.swing.table.DefaultTableModel) jTable1.getModel(); model.addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent e) { Loading Loading @@ -303,7 +307,7 @@ public final class ProjectTopComp extends TopComponent { }// </editor-fold>//GEN-END:initComponents /** * * Adds new model * @param evt starts function for loading model */ private void addButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addButton1MouseClicked Loading @@ -316,43 +320,72 @@ public final class ProjectTopComp extends TopComponent { */ private void removeButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeButton1MouseClicked javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); Collections.sort(selectedRows, Collections.reverseOrder()); for (int row : selectedRows) { selectedRows.forEach(row -> { HumanFace face = this.project.getFaceByName(model.getValueAt(row, 1).toString()); this.project.removeFace(face); model.removeRow(row); } }); selectedRows.clear(); }//GEN-LAST:event_removeButton1MouseClicked /** * Opens 1:1 tab with two selected faces, otherwise pops message that you * should select two faces * @param evt */ private void oneOnOneButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_oneOnOneButton1MouseClicked loadTwoModels(); //loadTwoModels(); 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"); } }//GEN-LAST:event_oneOnOneButton1MouseClicked /** * Selects all models from list of models * @param evt */ private void selectAllButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_selectAllButton1MouseClicked byUser = false; javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); for (int i = 0; i < model.getRowCount(); i++) {model.setValueAt(true, i, 0);} for (int i = 0; i < model.getRowCount(); i++) { model.setValueAt(true, i, 0); } selectedRows = IntStream.range(0, model.getRowCount()).boxed().collect(Collectors.toList()); byUser = true; }//GEN-LAST:event_selectAllButton1MouseClicked /** * Deselects all models from list of models * @param evt */ private void deselectAllButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deselectAllButton1MouseClicked byUser = false; javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); for (int i : selectedRows) {model.setValueAt(false, i, 0);} selectedRows.forEach(i -> {model.setValueAt(false, i, 0);}); selectedRows.clear(); byUser = true; }//GEN-LAST:event_deselectAllButton1MouseClicked /** * Inflates models (selected will be deselected and vice versa) * @param evt */ private void inflateButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_inflateButton1MouseClicked byUser = false; javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); for (int i = 0; i < model.getRowCount(); i++) { if (model.getValueAt(i, 0) == (Object)true) {model.setValueAt(false, i, 0);} else {model.setValueAt(true, i, 0);} if (model.getValueAt(i, 0) == (Object) true) { model.setValueAt(false, i, 0); } else { model.setValueAt(true, i, 0); } } List<Integer> allRows = IntStream.range(0, model.getRowCount()).boxed().collect(Collectors.toList()); Loading @@ -361,10 +394,13 @@ public final class ProjectTopComp extends TopComponent { byUser = true; }//GEN-LAST:event_inflateButton1MouseClicked /** * Opens analysis of one selected face, otherwise pops message dialog that * you should select just one face * @param evt */ private void analyseButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_analyseButton1MouseClicked javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); if (selectedRows.size() == 1) { String name = model.getValueAt(selectedRows.get(0), 1).toString(); Loading Loading @@ -443,7 +479,6 @@ public final class ProjectTopComp extends TopComponent { ex.printStackTrace(); } javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel(); String name = face.getShortName(); if (this.project.getFaceByName(name) == null) { this.project.addFace(face); Loading @@ -457,9 +492,9 @@ 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"))) Loading Loading @@ -513,7 +548,7 @@ public final class ProjectTopComp extends TopComponent { //this.project.setPrimaryFace(face1); //this.project.addFace(face1); this.project.setFaces(List.of(face1, face2)); createFaceToFaceTab(face1, face2, "1:1");*/ createFaceToFaceTab(face1, face2, "1:1"); javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel) jTable1.getModel(); Loading @@ -527,8 +562,13 @@ public final class ProjectTopComp extends TopComponent { } else { JOptionPane.showMessageDialog(this, "Select two models"); } } }*/ /** * Creates and opens tab with one face * @param face which will be analyzed * @param name name of the tab (name of the model) */ private void createSingleFaceTab(HumanFace face, String name) { SingleFaceTab newTab = new SingleFaceTab(face, name); this.singleFaceTabs.put(face, newTab); Loading @@ -536,6 +576,12 @@ public final class ProjectTopComp extends TopComponent { newTab.requestActive(); } /** * Creates and opens tab with two faces (1:1 analysis) * @param face1 which will be analyzed * @param face2 which will be analyzed * @param name name of the tab */ private void createFaceToFaceTab(HumanFace face1, HumanFace face2, String name) { FaceToFaceTab newTab = new FaceToFaceTab(face1, face2, name); this.faceToFaceTabs.put(face1, newTab); Loading