Skip to content

Commit 8b51515

Browse files
committed
Add focus mode widgets and activate auto mode (manual still not implemented/deactivated)
1 parent dc95451 commit 8b51515

File tree

7 files changed

+92
-29
lines changed

7 files changed

+92
-29
lines changed

core/src/main/java/com/datazuul/bookscanner/core/CameraPanel.form

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
<Component class="javax.swing.ButtonGroup" name="focusButtonGroup">
66
</Component>
77
</NonVisualComponents>
8+
<Properties>
9+
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
10+
<Dimension value="[32767, 103]"/>
11+
</Property>
12+
</Properties>
813
<AuxValues>
914
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
1015
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
@@ -160,6 +165,8 @@
160165
<ComponentRef name="focusButtonGroup"/>
161166
</Property>
162167
<Property name="text" type="java.lang.String" value="manual"/>
168+
<Property name="toolTipText" type="java.lang.String" value="manual setting of focus not implemented, yet"/>
169+
<Property name="enabled" type="boolean" value="false"/>
163170
</Properties>
164171
<Events>
165172
<EventHandler event="itemStateChanged" listener="java.awt.event.ItemListener" parameters="java.awt.event.ItemEvent" handler="focusItemChanged"/>

core/src/main/java/com/datazuul/bookscanner/core/CameraPanel.java

+34-13
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ private void initComponents() {
5050
manualFocusRadioButton = new javax.swing.JRadioButton();
5151
manualFocusSpinner = new javax.swing.JSpinner();
5252

53+
setMaximumSize(new java.awt.Dimension(32767, 103));
54+
5355
cameraName.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
5456
cameraName.setText("- no camera selected -");
5557

@@ -93,6 +95,8 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) {
9395

9496
focusButtonGroup.add(manualFocusRadioButton);
9597
manualFocusRadioButton.setText("manual");
98+
manualFocusRadioButton.setToolTipText("manual setting of focus not implemented, yet");
99+
manualFocusRadioButton.setEnabled(false);
96100
manualFocusRadioButton.addItemListener(new java.awt.event.ItemListener() {
97101
public void itemStateChanged(java.awt.event.ItemEvent evt) {
98102
focusItemChanged(evt);
@@ -192,13 +196,15 @@ private void focusItemChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_f
192196
try {
193197
if (autoFocusRadioButton.isSelected()) {
194198
manualFocusSpinner.setEnabled(false);
195-
if (camera != null) {
196-
this.camera.setFocusMode(FocusMode.AUTO);
197-
}
199+
// do nothing on change, read settings during shoot()...
200+
// if (camera != null) {
201+
// this.camera.setFocusMode(FocusMode.AUTO);
202+
// }
198203
} else {
199204
manualFocusSpinner.setEnabled(true);
200205
if (camera != null) {
201-
this.camera.setFocusMode(FocusMode.MF);
206+
// do nothing on change, read settings during shoot()...
207+
// this.camera.setFocusMode(FocusMode.MF);
202208
manualFocusSpinner.setValue(this.camera.getFocus());
203209
}
204210
}
@@ -208,14 +214,17 @@ private void focusItemChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_f
208214
}//GEN-LAST:event_focusItemChanged
209215

210216
private void manualFocusSpinnerStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_manualFocusSpinnerStateChanged
211-
if (camera != null) {
212-
int focusValue = (int) manualFocusSpinner.getValue();
213-
try {
214-
this.camera.setFocus(focusValue);
215-
} catch (PTPTimeoutException | GenericCameraException ex) {
216-
Exceptions.printStackTrace(ex);
217-
}
218-
}
217+
// do nothing on change, read settings during shoot()...
218+
// if (camera != null) {
219+
// if (manualFocusSpinner.isEnabled()) {
220+
// int focusValue = (int) manualFocusSpinner.getValue();
221+
// try {
222+
// this.camera.setFocus(focusValue);
223+
// } catch (PTPTimeoutException | GenericCameraException ex) {
224+
// Exceptions.printStackTrace(ex);
225+
// }
226+
// }
227+
// }
219228
}//GEN-LAST:event_manualFocusSpinnerStateChanged
220229

221230

@@ -301,8 +310,20 @@ private String getCameraDescription(ICamera camera) throws UnsupportedEncodingEx
301310
StringBuilder sbCameraName = new StringBuilder();
302311
sbCameraName.append(camera.getUsbDevice().getProductString());
303312
sbCameraName.append(" ").append(camera.getCameraInfo().name());
304-
sbCameraName.append(" - Serial-Nr.: ").append(camera.getUsbDevice().getSerialNumberString());
313+
// sbCameraName.append(" - Serial-Nr.: ").append(camera.getUsbDevice().getSerialNumberString()); // too long, breaks UI
305314
sbCameraName.append(" - Port: ").append(portNumber);
306315
return sbCameraName.toString();
307316
}
317+
318+
public FocusMode getFocusMode() {
319+
if (autoFocusRadioButton.isSelected()) {
320+
return FocusMode.AUTO;
321+
} else {
322+
return FocusMode.MF;
323+
}
324+
}
325+
326+
public int getManualFocusValue() {
327+
return (int) manualFocusSpinner.getValue();
328+
}
308329
}

core/src/main/java/com/datazuul/bookscanner/core/ScanPanel.form

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
1212
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
1313
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
14-
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
14+
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,46,0,0,1,-19"/>
1515
</AuxValues>
1616

1717
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout">
@@ -31,12 +31,12 @@
3131
<Layout>
3232
<DimensionLayout dim="0">
3333
<Group type="103" groupAlignment="0" attributes="0">
34-
<EmptySpace min="0" pref="400" max="32767" attributes="0"/>
34+
<EmptySpace min="0" pref="493" max="32767" attributes="0"/>
3535
</Group>
3636
</DimensionLayout>
3737
<DimensionLayout dim="1">
3838
<Group type="103" groupAlignment="0" attributes="0">
39-
<EmptySpace min="0" pref="285" max="32767" attributes="0"/>
39+
<EmptySpace min="0" pref="442" max="32767" attributes="0"/>
4040
</Group>
4141
</DimensionLayout>
4242
</Layout>

core/src/main/java/com/datazuul/bookscanner/core/ScanPanel.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ private void initComponents() {
3030
imagePanel.setLayout(imagePanelLayout);
3131
imagePanelLayout.setHorizontalGroup(
3232
imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
33-
.addGap(0, 400, Short.MAX_VALUE)
33+
.addGap(0, 493, Short.MAX_VALUE)
3434
);
3535
imagePanelLayout.setVerticalGroup(
3636
imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
37-
.addGap(0, 285, Short.MAX_VALUE)
37+
.addGap(0, 442, Short.MAX_VALUE)
3838
);
3939

4040
add(imagePanel);

core/src/main/java/com/datazuul/bookscanner/core/ThumbnailsAndScanPanel.form

+6
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@
144144
</Layout>
145145
<SubComponents>
146146
<Component class="com.datazuul.bookscanner.core.ScanPanel" name="leftScanPanel">
147+
<Properties>
148+
<Property name="alignmentX" type="float" value="0.5"/>
149+
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
150+
<Dimension value="[511, 800]"/>
151+
</Property>
152+
</Properties>
147153
</Component>
148154
<Container class="javax.swing.JPanel" name="middlePanel">
149155

core/src/main/java/com/datazuul/bookscanner/core/ThumbnailsAndScanPanel.java

+26-8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import chdk.ptp.java.exception.GenericCameraException;
88
import chdk.ptp.java.exception.PTPTimeoutException;
99
import chdk.ptp.java.model.CameraMode;
10+
import chdk.ptp.java.model.FocusMode;
1011
import com.datazuul.bookscanner.core.devices.CameraFactory;
1112
import com.datazuul.bookscanner.core.workers.CaptureAndSaveWorker;
1213
import java.awt.Adjustable;
@@ -236,6 +237,9 @@ public void stateChanged(javax.swing.event.ChangeEvent evt) {
236237
add(thumbnailsScrollPane, java.awt.BorderLayout.WEST);
237238

238239
scanPanels.setLayout(new javax.swing.BoxLayout(scanPanels, javax.swing.BoxLayout.X_AXIS));
240+
241+
leftScanPanel.setAlignmentX(0.5F);
242+
leftScanPanel.setPreferredSize(new java.awt.Dimension(511, 800));
239243
scanPanels.add(leftScanPanel);
240244

241245
exchangeScanPanelsBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/exchange-alt.gif"))); // NOI18N
@@ -380,18 +384,32 @@ private void setupModeCheckboxStateChanged(javax.swing.event.ChangeEvent evt) {/
380384
private void shoot() {
381385
try {
382386
if (leftCamera != null && rightCamera != null) {
383-
leftScanPanel.stopLiveView();
384-
rightScanPanel.stopLiveView();
385-
386-
int leftScanRotationDegrees = leftScanPanel.cameraPanel.getRotationDegrees();
387-
int rightScanRotationDegrees = rightScanPanel.cameraPanel.getRotationDegrees();
388-
// FIXME: workaround to make sure live view is not blocking cams/connection
387+
// FIXME: workaround to make sure live view is not blocking cams/connection
389388
// if (cam1.isConnected()) {
390389
// cam1.disconnect();
391390
// }
392391
// if (cam2.isConnected()) {
393392
// cam2.disconnect();
394393
// }
394+
395+
leftScanPanel.stopLiveView();
396+
rightScanPanel.stopLiveView();
397+
398+
399+
int leftManualFocusValue = -1;
400+
FocusMode leftFocusMode = leftScanPanel.cameraPanel.getFocusMode();
401+
if (leftFocusMode == FocusMode.MF) {
402+
leftManualFocusValue = leftScanPanel.cameraPanel.getManualFocusValue();
403+
}
404+
int leftScanRotationDegrees = leftScanPanel.cameraPanel.getRotationDegrees();
405+
406+
int rightManualFocusValue = -1;
407+
FocusMode rightFocusMode = rightScanPanel.cameraPanel.getFocusMode();
408+
if (rightFocusMode == FocusMode.MF) {
409+
rightManualFocusValue = rightScanPanel.cameraPanel.getManualFocusValue();
410+
}
411+
int rightScanRotationDegrees = rightScanPanel.cameraPanel.getRotationDegrees();
412+
395413
// create new thumbnailPanel to be filled
396414
ThumbnailsPanel thumbnailsPanel = new ThumbnailsPanel();
397415

@@ -401,8 +419,8 @@ private void shoot() {
401419
String leftFilename = "image-" + StringUtils.leftPad(String.valueOf(leftNumber), 5, '0') + filenameExtension;
402420
String rightFilename = "image-" + StringUtils.leftPad(String.valueOf(rightNumber), 5, '0') + filenameExtension;
403421

404-
CaptureAndSaveWorker captureAndSaveService1 = new CaptureAndSaveWorker(leftCamera, setupMode, targetDirectory, imageFormat, leftNumber, leftFilename, leftScanRotationDegrees, leftScanPanel.imagePanel, thumbnailsPanel.getLeftThumbnailPanel());
405-
CaptureAndSaveWorker captureAndSaveService2 = new CaptureAndSaveWorker(rightCamera, setupMode, targetDirectory, imageFormat, rightNumber, rightFilename, rightScanRotationDegrees, rightScanPanel.imagePanel, thumbnailsPanel.getRightThumbnailPanel());
422+
CaptureAndSaveWorker captureAndSaveService1 = new CaptureAndSaveWorker(leftCamera, leftFocusMode, leftManualFocusValue, setupMode, targetDirectory, imageFormat, leftNumber, leftFilename, leftScanRotationDegrees, leftScanPanel.imagePanel, thumbnailsPanel.getLeftThumbnailPanel());
423+
CaptureAndSaveWorker captureAndSaveService2 = new CaptureAndSaveWorker(rightCamera, rightFocusMode, rightManualFocusValue, setupMode, targetDirectory, imageFormat, rightNumber, rightFilename, rightScanRotationDegrees, rightScanPanel.imagePanel, thumbnailsPanel.getRightThumbnailPanel());
406424
captureAndSaveService1.execute();
407425
captureAndSaveService2.execute();
408426

core/src/main/java/com/datazuul/bookscanner/core/workers/CaptureAndSaveWorker.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,28 @@ public class CaptureAndSaveWorker extends SwingWorker<CaptureAndSaveWorker.Image
2020

2121
private final ICamera camera;
2222
private final String filename;
23+
private final FocusMode focusMode;
2324
private final String format;
2425
private final ImagePanel imagePanelFull;
26+
private final int manualFocusValue;
2527
private final int number;
2628
private final int rotationDegrees;
2729
private final boolean setupMode;
2830
private final String targetDirectory;
2931
private final ThumbnailPanel thumbnailPanel;
3032

31-
public CaptureAndSaveWorker(ICamera camera, boolean setupMode, String targetDirectory, String format, int number, String filename, int rotationDegrees, ImagePanel imagePanelFull, ThumbnailPanel thumbnailPanel) {
33+
public CaptureAndSaveWorker(ICamera camera, FocusMode focusMode, int manualFocusValue, boolean setupMode, String targetDirectory, String format, int number, String filename, int rotationDegrees, ImagePanel imagePanelFull, ThumbnailPanel thumbnailPanel) {
3234
this.camera = camera;
3335
this.filename = filename;
36+
this.focusMode = focusMode;
3437
this.format = format;
3538
this.imagePanelFull = imagePanelFull;
36-
this.thumbnailPanel = thumbnailPanel;
39+
this.manualFocusValue = manualFocusValue;
3740
this.number = number;
3841
this.rotationDegrees = rotationDegrees;
3942
this.setupMode = setupMode;
4043
this.targetDirectory = targetDirectory;
44+
this.thumbnailPanel = thumbnailPanel;
4145
}
4246

4347
@Override
@@ -51,7 +55,14 @@ protected ImageAndThumbnail doInBackground() throws Exception {
5155
camera.connect();
5256
}
5357
camera.setOperationMode(CameraMode.RECORD);
54-
camera.setFocusMode(FocusMode.AUTO);
58+
59+
if (focusMode == FocusMode.AUTO) {
60+
camera.setFocusMode(FocusMode.AUTO);
61+
}
62+
if (focusMode == FocusMode.MF) {
63+
camera.setFocusMode(FocusMode.MF);
64+
camera.setFocus(manualFocusValue);
65+
}
5566
capturedImage = camera.getPicture();
5667
System.out.println("before rotate: " + capturedImage.getWidth() + " x " + capturedImage.getHeight() + " pixels");
5768
if (rotationDegrees != 0) {

0 commit comments

Comments
 (0)