Disabled-Style für alle Felder und Comboboxen angepasst; Logs laden zeigt Animation untentestBranch
| @@ -5,6 +5,7 @@ import de.uniluebeck.mi.projmi6.model.HL7LogEntry; | |||
| import javafx.collections.FXCollections; | |||
| import javafx.concurrent.Task; | |||
| import javafx.fxml.FXML; | |||
| import javafx.scene.control.Button; | |||
| import javafx.scene.control.TableColumn; | |||
| import javafx.scene.control.TableView; | |||
| import javafx.scene.control.cell.PropertyValueFactory; | |||
| @@ -29,6 +30,9 @@ public class LogController { | |||
| @FXML | |||
| TableColumn<HL7LogEntry, LocalDateTime> colLogTime; | |||
| @FXML | |||
| Button btnRefresh; | |||
| public LogController(MainController mainController) { | |||
| @@ -52,13 +56,13 @@ public class LogController { | |||
| public void refreshLogFromDb(){ | |||
| if (this.loadLogEntryTask != null && this.loadLogEntryTask.isRunning()) { | |||
| System.out.println("Logs werden bereits geladen."); | |||
| return; | |||
| } | |||
| // btnPatRefresh.setDisable(true); | |||
| btnRefresh.setDisable(true); | |||
| tblLog.setItems(null); | |||
| mainController.increaseParallelTaskCount(); | |||
| tblLog.setPlaceholder(new Text("Liste wird geladen...")); | |||
| @@ -75,6 +79,7 @@ public class LogController { | |||
| tblLog.setPlaceholder(new Text("Liste ist leer.")); | |||
| tblLog.setItems(FXCollections.observableArrayList(this.getValue())); | |||
| mainController.decreaseParallelTaskCount(); | |||
| btnRefresh.setDisable(false); | |||
| } | |||
| @Override | |||
| @@ -406,7 +406,7 @@ public enum TabName { | |||
| } | |||
| public Mitarbeiter getCurrentMitarbeiter() { | |||
| return cmbUserChoose.getValue(); | |||
| return cmbUserChoose==null?null:cmbUserChoose.getValue(); | |||
| } | |||
| public ReadOnlyObjectProperty<Mitarbeiter> currentMitarbeiterProperty() { | |||
| @@ -10,11 +10,13 @@ import de.uniluebeck.mi.projmi6.model.OpsCode; | |||
| import de.uniluebeck.mi.projmi6.model.Untersuchung; | |||
| import de.uniluebeck.mi.projmi6.view.DateTimePicker; | |||
| import de.uniluebeck.mi.projmi6.view.SelectKeyComboBoxListener; | |||
| import javafx.beans.property.ReadOnlyObjectProperty; | |||
| import javafx.beans.property.SimpleObjectProperty; | |||
| import javafx.collections.ObservableList; | |||
| import javafx.event.ActionEvent; | |||
| import javafx.fxml.FXML; | |||
| import javafx.scene.control.*; | |||
| import javafx.scene.layout.GridPane; | |||
| import javafx.scene.paint.Color; | |||
| import javafx.scene.text.Text; | |||
| @@ -22,15 +24,28 @@ import java.sql.SQLException; | |||
| public class UntersuchungenController { | |||
| /** | |||
| * The examination that is shown in the edit window, or null if a new examination should be created. | |||
| */ | |||
| private Untersuchung untersuchung = null; | |||
| public enum State { | |||
| CREATE, EDIT, VIEW | |||
| } | |||
| private final SimpleObjectProperty<State> state = new SimpleObjectProperty<>(State.VIEW); | |||
| private MainController mainController; | |||
| public State getState() { | |||
| return state.get(); | |||
| } | |||
| public ReadOnlyObjectProperty<State> stateProperty() { | |||
| return state; | |||
| } | |||
| private SimpleObjectProperty<ObservableList<Untersuchung>> untersuchungen = new SimpleObjectProperty<>(); | |||
| private MainController mainController; | |||
| @FXML | |||
| private Button btnUntsCancel; | |||
| @@ -61,9 +76,11 @@ public class UntersuchungenController { | |||
| @FXML | |||
| private ComboBox<OpsCode> untsOpsCode; | |||
| @FXML | |||
| private ComboBox<Mitarbeiter> untsArzt; | |||
| private SimpleObjectProperty<ObservableList<Untersuchung>> untersuchungen = new SimpleObjectProperty<>(); | |||
| public UntersuchungenController(MainController mainController) { | |||
| this.mainController = mainController; | |||
| @@ -77,21 +94,62 @@ public class UntersuchungenController { | |||
| this.untersuchungen.set(untersuchungen); | |||
| } | |||
| public SimpleObjectProperty<ObservableList<Untersuchung>> untersuchungenProperty() { | |||
| return untersuchungen; | |||
| } | |||
| @FXML | |||
| public void initialize(){ | |||
| private void initComboBoxes(){ | |||
| untsOpsCode.itemsProperty().bind(mainController.getStammdaten().opsCodesProperty()); | |||
| new SelectKeyComboBoxListener(untsOpsCode); | |||
| untsList.itemsProperty().bind(untersuchungen); | |||
| untsArzt.setItems(mainController.getStammdaten().getMitarbeiter()); | |||
| untsArzt.itemsProperty().bind(mainController.getStammdaten().mitarbeiterProperty()); | |||
| } | |||
| private void initButtons(){ | |||
| btnUntsCreate.disableProperty().bind(mainController.fallProperty().isNull()); | |||
| btnUntsCancel.managedProperty().bind(state.isEqualTo(State.VIEW) | |||
| .and(untsList.getSelectionModel().selectedItemProperty().isNotNull())); | |||
| btnUntsCancel.visibleProperty().bind(btnUntsCreate.managedProperty()); | |||
| btnUntsSave.managedProperty().bind(state.isNotEqualTo(State.VIEW)); | |||
| btnUntsSave.visibleProperty().bind(btnUntsSave.managedProperty()); | |||
| btnUntsAbort.managedProperty().bind(btnUntsSave.managedProperty()); | |||
| btnUntsAbort.visibleProperty().bind(btnUntsSave.managedProperty()); | |||
| } | |||
| @FXML | |||
| private Button btnUntsAbort; | |||
| @FXML | |||
| public void initialize(){ | |||
| //Clear fields on startup | |||
| copyUntersuchungDataIntoFields(); | |||
| initComboBoxes(); | |||
| initButtons(); | |||
| untsList.getSelectionModel().selectedItemProperty().addListener( | |||
| (observable, oldVal, newVal) -> copyUntersuchungDataIntoFields()); | |||
| fields.disableProperty().bind(state.isEqualTo(State.VIEW)); | |||
| state.addListener((observable, oldValue, newValue) -> { | |||
| if(newValue==State.VIEW){ | |||
| mainController.unlockFromEdit(); | |||
| }else{ | |||
| mainController.lockForEdit(MainController.TabName.UNTERSUCHUNG); | |||
| } | |||
| }); | |||
| untsList.disableProperty().bind(state.isNotEqualTo(State.VIEW)); | |||
| untsList.setCellFactory(lv -> { | |||
| return new ListCell<Untersuchung>(){ | |||
| @Override | |||
| @@ -119,29 +177,39 @@ public class UntersuchungenController { | |||
| @FXML | |||
| void clickedUntsCreate() { | |||
| this.state.set(State.CREATE); | |||
| clearFields(); | |||
| untsArzt.getSelectionModel().select(mainController.getCurrentMitarbeiter()); | |||
| untersuchung = null; | |||
| } | |||
| @FXML | |||
| void clickedUntsAbort() { | |||
| void clickedUntsCancel() { | |||
| Untersuchung untersuchung = untsList.getSelectionModel().getSelectedItem(); | |||
| if(untersuchung!=null){ | |||
| untersuchung.setStorniert(true); | |||
| try { | |||
| DBHandler.setUntersuchung(untersuchung, mainController.getCurrentMitarbeiter().getMitarbID(), true); | |||
| }catch (Exception e){ | |||
| e.printStackTrace(); | |||
| } | |||
| if(untersuchung==null) { | |||
| return; | |||
| } | |||
| untersuchung.setStorniert(true); | |||
| try { | |||
| DBHandler.setUntersuchung(untersuchung, mainController.getCurrentMitarbeiter().getMitarbID(), true); | |||
| }catch (Exception e){ | |||
| e.printStackTrace(); | |||
| } | |||
| mainController.refreshCaseData(); | |||
| mainController.refreshCaseData(); | |||
| } | |||
| @FXML | |||
| GridPane fields; | |||
| @FXML | |||
| private void clickedUntsAbort(){ | |||
| state.set(State.VIEW); | |||
| copyUntersuchungDataIntoFields(); | |||
| } | |||
| @FXML | |||
| void clickedUntsSave(ActionEvent event) { | |||
| if (untersuchung == null) { | |||
| untersuchung = new Untersuchung(); | |||
| if (state.get() == State.CREATE) { | |||
| Untersuchung untersuchung = new Untersuchung(); | |||
| untersuchung.setFall(mainController.getFallController().getFall()); | |||
| copyFieldDataIntoUntersuchung(untersuchung); | |||
| try { | |||
| @@ -149,21 +217,21 @@ public class UntersuchungenController { | |||
| } catch (SQLException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| } else if(state.get()==State.EDIT){ | |||
| Untersuchung untersuchung = untsList.getSelectionModel().getSelectedItem(); | |||
| copyFieldDataIntoUntersuchung(untersuchung); | |||
| //... | |||
| } | |||
| } | |||
| public void setUntersuchung(Untersuchung untersuchung){ | |||
| this.untersuchung = untersuchung; | |||
| private void copyUntersuchungDataIntoFields(){ | |||
| Untersuchung untersuchung = untsList.getSelectionModel().getSelectedItem(); | |||
| if(untersuchung==null){ | |||
| clearFields(); | |||
| }else { | |||
| copyUntersuchungDataIntoFields(); | |||
| return; | |||
| } | |||
| } | |||
| private void copyUntersuchungDataIntoFields(){ | |||
| // untsList.setText(Integer.toString(untersuchung.getUntersID())); | |||
| untsOpsCode.setValue(untersuchung.getOpscode()); | |||
| untsArzt.setValue(untersuchung.getDurchfuehrenderArzt()); | |||
| dtTmUntersuchungszeitpunkt.setDateTime(untersuchung.getUntersuchungsdatum()); | |||
| @@ -175,27 +243,19 @@ public class UntersuchungenController { | |||
| } | |||
| private void copyFieldDataIntoUntersuchung(Untersuchung untersuchung){ | |||
| untersuchung.setOpscode(untsOpsCode.getValue()); | |||
| untersuchung.setDurchfuehrenderArzt(untsArzt.getValue()); | |||
| // untersuchung.set?(untsList.getValue()); | |||
| untersuchung.setUntersuchungsdatum(dtTmUntersuchungszeitpunkt.getDateTime()); | |||
| // untersCreateTime.setText(untersuchung.getErstellDatumZeit().toString()); | |||
| // untersCreator.setText(Integer.toString(untersuchung.getErsteller())); | |||
| // untersEditTime.setText(untersuchung.getBearbeitetDatumZeit().toString()); | |||
| // untersEditor.setText(Integer.toString(untersuchung.getBearbeiter())); | |||
| untersuchung.setUntersuchungsdatum(dtTmUntersuchungszeitpunkt.getDateTime()); | |||
| } | |||
| private void clearFields(){ | |||
| untsCreateTime.setText(""); | |||
| untsCreator.setText(""); | |||
| untsChangeTime.setText(""); | |||
| // untersEditor.setText("<auto>"); | |||
| untsChanger.setText(""); | |||
| untsOpsCode.setValue(null); | |||
| untsArzt.setValue(null); | |||
| untsArzt.setValue(mainController.getCurrentMitarbeiter()); | |||
| dtTmUntersuchungszeitpunkt.setDateTime(null); | |||
| } | |||
| @@ -86,6 +86,7 @@ public class DateTimePicker extends HBox { | |||
| HBox timePicker = new HBox(hourText, colon,minuteText); | |||
| timePicker.maxHeightProperty().bind(datePicker.heightProperty()); | |||
| timePicker.getStyleClass().add("time-picker"); | |||
| timePicker.setMinWidth(55); | |||
| timePicker.setMaxWidth(70); | |||
| timePicker.getStyleClass().add("button"); | |||
| @@ -116,9 +117,11 @@ public class DateTimePicker extends HBox { | |||
| minuteText.setText(""); | |||
| datePicker.setValue(null); | |||
| }else{ | |||
| hourText.setText(Integer.toString(localDateTime.getHour())); | |||
| minuteText.setText(Integer.toString(localDateTime.getMinute())); | |||
| datePicker.setValue(LocalDate.from(localDateTime)); | |||
| hourText.setText(Integer.toString(localDateTime.getHour())); | |||
| int minute = localDateTime.getMinute(); | |||
| minuteText.setText((minute<9?"0":"")+Integer.toString(minute)); | |||
| } | |||
| } | |||
| @@ -22,7 +22,7 @@ | |||
| </VBox> | |||
| <VBox> | |||
| <children> | |||
| <GridPane vgap="5.0" fx:id="fields"> | |||
| <GridPane vgap="5.0" fx:id="fields" styleClass="fields"> | |||
| <columnConstraints> | |||
| <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> | |||
| <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> | |||
| @@ -10,7 +10,7 @@ | |||
| <?import de.uniluebeck.mi.projmi6.view.DateTimePicker?> | |||
| <VBox fx:controller="de.uniluebeck.mi.projmi6.controller.FallController" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> | |||
| <children> | |||
| <GridPane vgap="5.0" fx:id="fallFields" id="fallFields"> | |||
| <GridPane vgap="5.0" fx:id="fallFields" styleClass="fields"> | |||
| <children> | |||
| <Label text="Patient:"/> | |||
| <Label fx:id="fallPatID" text="John Doe (PatID = XXX)" GridPane.columnIndex="1"/> | |||
| @@ -33,7 +33,7 @@ | |||
| </VBox> | |||
| <VBox> | |||
| <children> | |||
| <GridPane VBox.vgrow="ALWAYS" fx:id="fields"> | |||
| <GridPane VBox.vgrow="ALWAYS" fx:id="fields" styleClass="fields"> | |||
| <columnConstraints> | |||
| <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> | |||
| <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> | |||
| @@ -11,37 +11,48 @@ DateTimePicker .text-field{ | |||
| } | |||
| #fallFields:disabled{ | |||
| .fields:disabled{ | |||
| -fx-opacity: 1; | |||
| } | |||
| #fallFields:disabled HBox { | |||
| .fields:disabled HBox { | |||
| -fx-opacity: 1; | |||
| } | |||
| #fallFields:disabled .text-field{ | |||
| .fields:disabled .text-field{ | |||
| -fx-text-fill: black; | |||
| -fx-background-color: transparent; | |||
| -fx-opacity: 1; | |||
| } | |||
| #fallFields:disabled Label{ | |||
| .fields:disabled .label{ | |||
| -fx-opacity: 1; | |||
| } | |||
| #fallFields:disabled ComboBox{ | |||
| .fields:disabled ComboBox{ | |||
| -fx-opacity: 1; | |||
| -fx-background-color: transparent; | |||
| -fx-text-fill: black; | |||
| } | |||
| #fallFields:disabled .arrow-button{ | |||
| .fields:disabled .list-cell{ | |||
| -fx-opacity: 1; | |||
| -fx-background-color: transparent; | |||
| -fx-text-fill: black; | |||
| } | |||
| .fields:disabled .time-picker { | |||
| -fx-background-color: transparent; | |||
| } | |||
| .fields:disabled .arrow-button{ | |||
| -fx-opacity: 0; | |||
| } | |||
| #fallFields:disabled .arrow{ | |||
| .fields:disabled .arrow{ | |||
| -fx-opacity: 0; | |||
| } | |||
| #fallFields:disabled .date-picker { | |||
| .fields:disabled .date-picker { | |||
| -fx-opacity: 1; | |||
| -fx-background-color: transparent; | |||
| } | |||
| #fallFields:disabled .now-button { | |||
| .fields:disabled .now-button { | |||
| visibility: hidden; | |||
| } | |||
| @@ -20,7 +20,7 @@ | |||
| </VBox> | |||
| <VBox prefHeight="200.0" prefWidth="100.0"> | |||
| <children> | |||
| <GridPane vgap="5.0"> | |||
| <GridPane vgap="5.0" styleClass="fields" fx:id="fields"> | |||
| <columnConstraints> | |||
| <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="40.0" prefWidth="100.0" /> | |||
| <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> | |||
| @@ -31,24 +31,20 @@ | |||
| <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> | |||
| </rowConstraints> | |||
| <children> | |||
| <Label text="OPS-Code" /> | |||
| <Label text="OPS-Code:" /> | |||
| <ComboBox fx:id="untsOpsCode" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" /> | |||
| <Label text="Durchführender Arzt" GridPane.rowIndex="1" /> | |||
| <Label text="Untersuchungszeitpunkt" GridPane.rowIndex="2" /> | |||
| <ComboBox fx:id="untsArzt" maxWidth="1.7976931348623157E308" promptText="aktueller Arzt is default" GridPane.columnIndex="1" GridPane.rowIndex="1" /> | |||
| <!--<HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2"> | |||
| <children> | |||
| <DatePicker fx:id="untsDatum" prefWidth="150.0" /> | |||
| <TextField fx:id="untsZeit" prefColumnCount="5" promptText="HH:MM" /> | |||
| <Button fx:id="btnUntsNow" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#clickedUntsNow" text="Jetzt" HBox.hgrow="ALWAYS" /> | |||
| </children> | |||
| </HBox>--> | |||
| <Label text="Durchführender Arzt:" GridPane.rowIndex="1" /> | |||
| <ComboBox fx:id="untsArzt" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.rowIndex="1" /> | |||
| <Label text="Untersuchungszeitpunkt:" GridPane.rowIndex="2" /> | |||
| <DateTimePicker fx:id="dtTmUntersuchungszeitpunkt" GridPane.columnIndex="1" GridPane.rowIndex="2" /> | |||
| </children> | |||
| </GridPane> | |||
| <HBox alignment="TOP_RIGHT" prefHeight="100.0" prefWidth="200.0" spacing="5.0" VBox.vgrow="ALWAYS"> | |||
| <children> | |||
| <Button fx:id="btnUntsCancel" mnemonicParsing="false" onAction="#clickedUntsAbort" text="Storno" /> | |||
| <Button fx:id="btnUntsCancel" mnemonicParsing="false" onAction="#clickedUntsCancel" text="Storno" /> | |||
| <Button fx:id="btnUntsAbort" mnemonicParsing="false" onAction="#clickedUntsAbort" text="Abbrechen" /> | |||
| <Button fx:id="btnUntsSave" mnemonicParsing="false" onAction="#clickedUntsSave" text="Speichern" /> | |||
| </children> | |||
| <padding> | |||
| @@ -71,10 +67,10 @@ | |||
| <Label styleClass="ersteller-label" text="Erstelldatum:" GridPane.columnIndex="0" GridPane.rowIndex="1" /> | |||
| <Label styleClass="ersteller-label" text="Letzter Bearbeiter:" GridPane.columnIndex="0" GridPane.rowIndex="2" /> | |||
| <Label styleClass="ersteller-label" text="Letzte Änderung:" GridPane.columnIndex="0" GridPane.rowIndex="3" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsCreator" text="Dr. Haha" GridPane.columnIndex="1" GridPane.rowIndex="0" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsCreateTime" text="10.10.2013 09:00" GridPane.columnIndex="1" GridPane.rowIndex="1" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsChanger" text="Dr. Haha" GridPane.columnIndex="1" GridPane.rowIndex="2" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsChangeTime" text="10.10.2013 09:00" GridPane.columnIndex="1" GridPane.rowIndex="3" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsCreator" text="" GridPane.columnIndex="1" GridPane.rowIndex="0" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsCreateTime" text="" GridPane.columnIndex="1" GridPane.rowIndex="1" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsChanger" text="" GridPane.columnIndex="1" GridPane.rowIndex="2" /> | |||
| <Label styleClass="ersteller-value" fx:id="untsChangeTime" text="" GridPane.columnIndex="1" GridPane.rowIndex="3" /> | |||
| </children> | |||
| </GridPane> | |||
| </children> | |||