Add facade classes for 3rd party programs
This commit is contained in:
@@ -29,6 +29,7 @@ public class StatusBar extends JPanel {
|
||||
|
||||
private Telnet3270Client client;
|
||||
private TerminalPanel terminalPanel;
|
||||
private haus.nightmare.lib3270j.ecl.ECLOIANotify oiaNotifyListener;
|
||||
|
||||
public StatusBar() {
|
||||
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
|
||||
@@ -131,8 +132,15 @@ public class StatusBar extends JPanel {
|
||||
}
|
||||
|
||||
public void setClient(Telnet3270Client client, TerminalPanel terminalPanel) {
|
||||
if (this.client != null && this.client.getOIA() != null && this.oiaNotifyListener != null) {
|
||||
this.client.getOIA().unregisterOIAEvent(this.oiaNotifyListener);
|
||||
}
|
||||
this.client = client;
|
||||
this.terminalPanel = terminalPanel;
|
||||
if (this.client != null && this.client.getOIA() != null) {
|
||||
this.oiaNotifyListener = event -> updateStatus();
|
||||
this.client.getOIA().registerOIAEvent(this.oiaNotifyListener);
|
||||
}
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
@@ -388,4 +396,8 @@ public class StatusBar extends JPanel {
|
||||
cursorPosition.setText(String.format("%03d/%03d [%04d]", row, col, curAddr));
|
||||
cursorPosition.setForeground(ThemeManager.getOiaFgNormal(theme));
|
||||
}
|
||||
|
||||
public String getLockStatusText() {
|
||||
return lockStatus != null ? lockStatus.getText() : "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,4 +59,49 @@ public class StatusBarTest {
|
||||
// Ignored in headless environments
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStatusBarXSystemAndXProt() {
|
||||
try {
|
||||
ConnectionConfig config = new ConnectionConfig("mvs.example.com", 23, TerminalModel.IBM_3279_2, false);
|
||||
Telnet3270Client client = new Telnet3270Client(config);
|
||||
client.getTelnetFSM().setConnectionState(haus.nightmare.lib3270j.ConnectionState.CONNECTED_3270);
|
||||
|
||||
StatusBar statusBar = new StatusBar();
|
||||
statusBar.setClient(client, null);
|
||||
statusBar.updateStatus();
|
||||
|
||||
// Initially not locked
|
||||
assertEquals("", statusBar.getLockStatusText());
|
||||
|
||||
// 1. Setup protected field and type into it -> triggers X PROT
|
||||
client.getScreenBuffer().setFieldAttribute(0, (byte) haus.nightmare.lib3270j.protocol.DS3270Constants.FA_PROTECT);
|
||||
client.getScreenBuffer().setCursorAddress(1);
|
||||
client.typeCharacter('A');
|
||||
statusBar.updateStatus();
|
||||
assertEquals("X PROT", statusBar.getLockStatusText());
|
||||
|
||||
// 2. Reset -> clears X PROT
|
||||
client.reset();
|
||||
statusBar.updateStatus();
|
||||
assertEquals("", statusBar.getLockStatusText());
|
||||
|
||||
// 3. Send Enter -> triggers X SYSTEM
|
||||
client.sendEnter();
|
||||
statusBar.updateStatus();
|
||||
assertEquals("X SYSTEM", statusBar.getLockStatusText());
|
||||
|
||||
// 4. Host unlocks keyboard
|
||||
client.getInputProcessor().setKeyboardLocked(false);
|
||||
statusBar.updateStatus();
|
||||
assertEquals("", statusBar.getLockStatusText());
|
||||
|
||||
// 5. Subsequent Enter -> triggers X SYSTEM again
|
||||
client.sendEnter();
|
||||
statusBar.updateStatus();
|
||||
assertEquals("X SYSTEM", statusBar.getLockStatusText());
|
||||
} catch (HeadlessException e) {
|
||||
// Ignored in headless environments
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user