package org.geogebra.keyboard.base.impl;
import org.geogebra.keyboard.base.Keyboard;
import org.geogebra.keyboard.base.model.KeyboardModel;
import org.geogebra.keyboard.base.model.impl.AccentModifier;
import org.geogebra.keyboard.base.model.impl.CapsLockModifier;
import org.geogebra.keyboard.base.listener.KeyboardObserver;
import java.util.ArrayList;
import java.util.List;
public class KeyboardImpl implements Keyboard {
private KeyboardModel model;
private CapsLockModifier capsLockModifier;
private AccentModifier accentModifier;
private List<KeyboardObserver> observers = new ArrayList<>();
public KeyboardImpl(KeyboardModel model, CapsLockModifier capsLockModifier, AccentModifier accentModifier) {
this.model = model;
this.capsLockModifier = capsLockModifier;
this.accentModifier = accentModifier;
}
@Override
public KeyboardModel getModel() {
return model;
}
@Override
public void registerKeyboardObserver(KeyboardObserver observer) {
observers.add(observer);
}
private void fireKeyboardModelChanged() {
for (KeyboardObserver observer : observers) {
observer.keyboardModelChanged(this);
}
}
@Override
public void toggleAccent(String accent) {
if (accentModifier != null) {
boolean changed = accentModifier.toggleAccent(accent);
if (changed) {
fireKeyboardModelChanged();
}
}
}
@Override
public void toggleCapsLock() {
if (capsLockModifier != null) {
capsLockModifier.toggleCapsLock();
fireKeyboardModelChanged();
}
}
@Override
public void disableCapsLock() {
if (capsLockModifier != null) {
boolean changed = capsLockModifier.disableCapsLock();
if (changed) {
fireKeyboardModelChanged();
}
}
}
}