package com.hilotec.elexis.kgview;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import ch.elexis.core.ui.Hub;
import ch.elexis.core.ui.util.SWTHelper;
public class KonsTimerView extends KonsTimeView implements Runnable {
public static final String ID = "com.hilotec.elexis.kgview.KonsTimerView";
private static final int DELAY = 1000;
Button startBtn;
Button setBtn;
Button resetBtn;
boolean timerRunning;
@Override
protected void createButtonControl(Composite parent){
Composite btns = new Composite(parent, 0);
btns.setLayout(new GridLayout(2, false));
startBtn = new Button(btns, 0);
startBtn.setText("Start/Stop");
startBtn.addMouseListener(new MouseListener() {
public void mouseDown(MouseEvent e){
toggleTimer();
}
public void mouseUp(MouseEvent e){}
public void mouseDoubleClick(MouseEvent e){}
});
setBtn = new Button(btns, 0);
setBtn.setText("Ändern");
setBtn.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e){
IInputValidator iv = new IInputValidator() {
@Override
public String isValid(String newText){
if (!newText.matches("(\\d{1,2}:)?\\d{1,2}:\\d{1,2}"))
return "Format hh:mm:ss erwartet!";
return null;
}
};
InputDialog id =
new InputDialog(getSite().getShell(), "Zeit ändern", "Zeit des Timers ändern",
timerLbl.getText(), iv);
if (id.open() == InputDialog.OK) {
String[] parts = id.getValue().split(":");
long f = 1000;
time = 0;
for (int i = parts.length - 1; i >= 0; i--) {
time += Integer.parseInt(parts[i]) * f;
f *= 60;
}
konsData.setKonsZeit(time);
updateLabel();
}
}
public void mouseDown(MouseEvent e){}
public void mouseDoubleClick(MouseEvent e){}
});
resetBtn = new Button(btns, 0);
resetBtn.setText("Reset");
resetBtn.addMouseListener(new MouseListener() {
public void mouseDown(MouseEvent e){
if (konsData != null
&& konsData.getKonsZeit() > 0
&& SWTHelper.askYesNo("Timer zurücksetzen",
"Soll der Konsultationstimer wirklich auf 00:00:00 "
+ "zurückgesetzt werden?")) {
resetTimer();
}
}
public void mouseDoubleClick(MouseEvent e){}
public void mouseUp(MouseEvent e){}
});
}
protected void setEnabled(boolean en){
if (!en) {
timerLbl.setText("");
}
startBtn.setEnabled(en);
resetBtn.setEnabled(en);
setBtn.setEnabled(en);
}
private void update(){
time += DELAY;
konsData.setKonsZeit(time);
updateLabel();
}
protected void stopTimer(){
Hub.getActiveShell().getDisplay().timerExec(-1, this);
timerRunning = false;
setBtn.setEnabled(true);
}
protected void toggleTimer(){
if (timerRunning) {
stopTimer();
} else if (konsData != null) {
Hub.getActiveShell().getDisplay().timerExec(DELAY, this);
timerRunning = true;
setBtn.setEnabled(false);
}
}
protected void resetTimer(){
stopTimer();
if (konsData != null) {
time = 0;
konsData.setKonsZeit(time);
updateLabel();
}
}
// Called by timer
public void run(){
if (timerLbl.isDisposed())
return;
update();
Hub.getActiveShell().getDisplay().timerExec(DELAY, this);
}
}