1212import org .slf4j .LoggerFactory ;
1313
1414import de .doubleslash .keeptime .common .DateFormatter ;
15+ import de .doubleslash .keeptime .common .FontProvider ;
1516import de .doubleslash .keeptime .common .Resources ;
1617import de .doubleslash .keeptime .common .Resources .RESOURCE ;
1718import de .doubleslash .keeptime .controller .Controller ;
2122import javafx .collections .ObservableList ;
2223import javafx .collections .transformation .FilteredList ;
2324import javafx .fxml .FXMLLoader ;
25+ import javafx .geometry .Insets ;
2426import javafx .scene .Node ;
2527import javafx .scene .control .Alert ;
2628import javafx .scene .control .Alert .AlertType ;
3638import javafx .scene .control .MultipleSelectionModel ;
3739import javafx .scene .control .SelectionMode ;
3840import javafx .scene .control .Spinner ;
39- import javafx .scene .control .TextArea ;
41+ import javafx .scene .control .SpinnerValueFactory . IntegerSpinnerValueFactory ;
4042import javafx .scene .control .TextField ;
4143import javafx .scene .control .Tooltip ;
4244import javafx .scene .effect .Bloom ;
@@ -54,18 +56,19 @@ public class ProjectsListViewController {
5456 private final Controller controller ;
5557 private final Stage mainStage ;
5658 private final Map <Project , Label > elapsedProjectTimeLabelMap = new HashMap <>();
59+ private final ListView <Project > availableProjectsListView ;
5760 private final Map <Project , Node > projectSelectionNodeMap ;
5861 private final FilteredList <Project > filteredData ;
5962
6063 private boolean hideable ;
61- private ManageProjectController manageProjectController ;
6264
6365 public ProjectsListViewController (final Model model , final Controller controller , final Stage mainStage ,
6466 final ListView <Project > availableProjectsListView , final TextField searchTextField , final boolean hideable ) {
6567 this .model = model ;
6668 this .controller = controller ;
6769 this .hideable = hideable ;
6870 this .mainStage = mainStage ;
71+ this .availableProjectsListView = availableProjectsListView ;
6972 availableProjectsListView .setCellFactory (listView -> returnListCellOfProject ());
7073
7174 filteredData = new FilteredList <>(model .getSortedAvailableProjects (), p -> true );
@@ -84,8 +87,7 @@ public ProjectsListViewController(final Model model, final Controller controller
8487
8588 final String lowerCaseFilter = newValue .toLowerCase ();
8689
87- if (project .getName ().toLowerCase ().contains (lowerCaseFilter )
88- || project .getDescription ().toLowerCase ().contains (lowerCaseFilter )) {
90+ if (project .getName ().toLowerCase ().contains (lowerCaseFilter )) {
8991 return true ;
9092 }
9193
@@ -159,7 +161,6 @@ private void changeProject(final Project newProject, final long minusSeconds) {
159161 private void addProjectToProjectSelectionNodeMap (final Project project ) {
160162 final Node projectElement = createListEntryForProject (project );
161163 projectSelectionNodeMap .put (project , projectElement );
162- updateTooltip (project );
163164 }
164165
165166 private void realignProjectList () {
@@ -221,6 +222,8 @@ private Node createListEntryForProject(final Project p) {
221222 projectNameLabel .setEffect (null );
222223 });
223224
225+ projectNameLabel .setTooltip (new Tooltip (projectNameLabel .getText ()));
226+
224227 final MenuItem changeWithTimeMenuItem = new MenuItem ("Change with time" );
225228 changeWithTimeMenuItem .setOnAction (e -> {
226229 final ChangeWithTimeDialog changeWithTimeDialog = new ChangeWithTimeDialog (model ,
@@ -274,7 +277,7 @@ private Node createListEntryForProject(final Project p) {
274277 return ;
275278 }
276279 final ObservableList <Node > nodes = grid .getChildren ();
277- editProject (p , manageProjectController );
280+ editProject (nodes , p );
278281
279282 projectNameLabel .setText (p .getName ());
280283 projectNameLabel .setTextFill (new Color (p .getColor ().getRed () * dimFactor ,
@@ -284,7 +287,6 @@ private Node createListEntryForProject(final Project p) {
284287
285288 // TODO how to update currentProjectLabel when active project was edited?
286289 realignProjectList ();
287- updateTooltip (p );
288290 });
289291 });
290292
@@ -294,17 +296,6 @@ private Node createListEntryForProject(final Project p) {
294296 return projectElement ;
295297 }
296298
297- private void updateTooltip (final Project p ) {
298- final Pane pane = (Pane ) projectSelectionNodeMap .get (p );
299- final Label projectNameLabel = (Label ) pane .getChildren ().get (0 );
300- final String tooltipText = String .format ("%s%n%s" , p .getName (), p .getDescription ());
301- final Tooltip projectTooltip = projectNameLabel .getTooltip ();
302- if (projectTooltip == null ) {
303- projectNameLabel .setTooltip (new Tooltip ());
304- }
305- projectNameLabel .getTooltip ().setText (tooltipText );
306- }
307-
308299 private Dialog <ButtonType > setUpDialogButtonType (final String title , final String headerText ) {
309300 final Dialog <ButtonType > dialog = new Dialog <>();
310301 dialog .setTitle (title );
@@ -314,29 +305,60 @@ private Dialog<ButtonType> setUpDialogButtonType(final String title, final Strin
314305 }
315306
316307 private GridPane setUpEditProjectGridPane (final Project p ) {
317- GridPane grid ;
318- final FXMLLoader loader = new FXMLLoader (Resources .getResource (RESOURCE .FXML_MANAGE_PROJECT ));
319- try {
320- grid = loader .load ();
321- } catch (final IOException e ) {
322- throw new FXMLLoaderException ("Error while loading '" + Resources .RESOURCE .FXML_MANAGE_PROJECT + "'." , e );
323- }
324- manageProjectController = loader .getController ();
325- manageProjectController .setModel (model );
326- manageProjectController .secondInitialize ();
327- manageProjectController .setValues (p .getName (), p .getDescription (), p .getColor (), p .isWork (), p .getIndex ());
308+ final GridPane grid = setUpGridPane (p .getName (), p .getColor (), p .isWork ());
309+
310+ final Spinner <Integer > indexSpinner = new Spinner <>();
311+ final int availableProjectAmount = model .getAvailableProjects ().size ();
312+ indexSpinner .setValueFactory (new IntegerSpinnerValueFactory (0 , availableProjectAmount - 1 , p .getIndex ()));
313+ grid .add (indexSpinner , 1 , 3 );
314+
315+ return grid ;
316+ }
317+
318+ private GridPane setUpGridPane (final String projectName , final Color projectColor , final boolean isWork ) {
319+ final GridPane grid = new GridPane ();
320+ grid .setHgap (10 );
321+ grid .setVgap (10 );
322+ grid .setPadding (new Insets (20 , 150 , 10 , 10 ));
323+
324+ final Label nameLabel = new Label ("Name:" );
325+ nameLabel .setFont (FontProvider .getDefaultFont ());
326+ grid .add (nameLabel , 0 , 0 );
327+
328+ final TextField projectNameTextField = new TextField (projectName );
329+ projectNameTextField .setFont (FontProvider .getDefaultFont ());
330+ grid .add (projectNameTextField , 1 , 0 );
331+
332+ final Label colorLabel = new Label ("Color:" );
333+ colorLabel .setFont (FontProvider .getDefaultFont ());
334+ grid .add (colorLabel , 0 , 1 );
335+
336+ final ColorPicker colorPicker = new ColorPicker (projectColor );
337+ grid .add (colorPicker , 1 , 1 );
338+
339+ final Label isWorkLabel = new Label ("IsWork:" );
340+ isWorkLabel .setFont (FontProvider .getDefaultFont ());
341+ grid .add (isWorkLabel , 0 , 2 );
342+
343+ final CheckBox isWorkCheckBox = new CheckBox ();
344+ isWorkCheckBox .setSelected (isWork );
345+ isWorkCheckBox .setFont (FontProvider .getDefaultFont ());
346+ grid .add (isWorkCheckBox , 1 , 2 );
347+
348+ final Label sortIndex = new Label ("SortIndex:" );
349+ sortIndex .setFont (FontProvider .getDefaultFont ());
350+ grid .add (new Label ("SortIndex:" ), 0 , 3 );
328351
329352 return grid ;
330353 }
331354
332- private void editProject (final Project p , final ManageProjectController manageProjectController ) {
333- final TextField nameTextField = manageProjectController .getNameTextField ();
334- final TextArea descriptionTextArea = manageProjectController .getDescriptionTextArea ();
335- final ColorPicker textFillColorPicker = manageProjectController .getTextFillColorPicker ();
336- final CheckBox isWorkCheckBox = manageProjectController .getIsWorkCheckBox ();
337- final Spinner <Integer > sortIndexSpinner = manageProjectController .getSortIndexSpinner ();
338- controller .editProject (p , nameTextField .getText (), descriptionTextArea .getText (), textFillColorPicker .getValue (),
339- isWorkCheckBox .isSelected (), sortIndexSpinner .getValue ());
355+ private void editProject (final ObservableList <Node > nodes , final Project p ) {
356+ final TextField projectNameTextField = (TextField ) nodes .get (1 );
357+ final ColorPicker colorPicker = (ColorPicker ) nodes .get (3 );
358+ final CheckBox isWorkCheckBox = (CheckBox ) nodes .get (5 );
359+ final Spinner <Integer > indexSpinner = (Spinner <Integer >) nodes .get (7 );
360+ controller .editProject (p , projectNameTextField .getText (), colorPicker .getValue (), isWorkCheckBox .isSelected (),
361+ indexSpinner .getValue ());
340362 }
341363
342364 private ListCell <Project > returnListCellOfProject () {
0 commit comments