1212import org .slf4j .LoggerFactory ;
1313
1414import de .doubleslash .keeptime .common .DateFormatter ;
15- import de .doubleslash .keeptime .common .FontProvider ;
1615import de .doubleslash .keeptime .common .Resources ;
1716import de .doubleslash .keeptime .common .Resources .RESOURCE ;
1817import de .doubleslash .keeptime .controller .Controller ;
2221import javafx .collections .ObservableList ;
2322import javafx .collections .transformation .FilteredList ;
2423import javafx .fxml .FXMLLoader ;
25- import javafx .geometry .Insets ;
2624import javafx .scene .Node ;
2725import javafx .scene .control .Alert ;
2826import javafx .scene .control .Alert .AlertType ;
3836import javafx .scene .control .MultipleSelectionModel ;
3937import javafx .scene .control .SelectionMode ;
4038import javafx .scene .control .Spinner ;
41- import javafx .scene .control .SpinnerValueFactory . IntegerSpinnerValueFactory ;
39+ import javafx .scene .control .TextArea ;
4240import javafx .scene .control .TextField ;
4341import javafx .scene .control .Tooltip ;
4442import javafx .scene .effect .Bloom ;
@@ -56,19 +54,18 @@ public class ProjectsListViewController {
5654 private final Controller controller ;
5755 private final Stage mainStage ;
5856 private final Map <Project , Label > elapsedProjectTimeLabelMap = new HashMap <>();
59- private final ListView <Project > availableProjectsListView ;
6057 private final Map <Project , Node > projectSelectionNodeMap ;
6158 private final FilteredList <Project > filteredData ;
6259
6360 private boolean hideable ;
61+ private ManageProjectController manageProjectController ;
6462
6563 public ProjectsListViewController (final Model model , final Controller controller , final Stage mainStage ,
6664 final ListView <Project > availableProjectsListView , final TextField searchTextField , final boolean hideable ) {
6765 this .model = model ;
6866 this .controller = controller ;
6967 this .hideable = hideable ;
7068 this .mainStage = mainStage ;
71- this .availableProjectsListView = availableProjectsListView ;
7269 availableProjectsListView .setCellFactory (listView -> returnListCellOfProject ());
7370
7471 filteredData = new FilteredList <>(model .getSortedAvailableProjects (), p -> true );
@@ -87,7 +84,8 @@ public ProjectsListViewController(final Model model, final Controller controller
8784
8885 final String lowerCaseFilter = newValue .toLowerCase ();
8986
90- if (project .getName ().toLowerCase ().contains (lowerCaseFilter )) {
87+ if (project .getName ().toLowerCase ().contains (lowerCaseFilter )
88+ || project .getDescription ().toLowerCase ().contains (lowerCaseFilter )) {
9189 return true ;
9290 }
9391
@@ -161,6 +159,7 @@ private void changeProject(final Project newProject, final long minusSeconds) {
161159 private void addProjectToProjectSelectionNodeMap (final Project project ) {
162160 final Node projectElement = createListEntryForProject (project );
163161 projectSelectionNodeMap .put (project , projectElement );
162+ updateTooltip (project );
164163 }
165164
166165 private void realignProjectList () {
@@ -222,8 +221,6 @@ private Node createListEntryForProject(final Project p) {
222221 projectNameLabel .setEffect (null );
223222 });
224223
225- projectNameLabel .setTooltip (new Tooltip (projectNameLabel .getText ()));
226-
227224 final MenuItem changeWithTimeMenuItem = new MenuItem ("Change with time" );
228225 changeWithTimeMenuItem .setOnAction (e -> {
229226 final ChangeWithTimeDialog changeWithTimeDialog = new ChangeWithTimeDialog (model ,
@@ -277,7 +274,7 @@ private Node createListEntryForProject(final Project p) {
277274 return ;
278275 }
279276 final ObservableList <Node > nodes = grid .getChildren ();
280- editProject (nodes , p );
277+ editProject (p , manageProjectController );
281278
282279 projectNameLabel .setText (p .getName ());
283280 projectNameLabel .setTextFill (new Color (p .getColor ().getRed () * dimFactor ,
@@ -287,6 +284,7 @@ private Node createListEntryForProject(final Project p) {
287284
288285 // TODO how to update currentProjectLabel when active project was edited?
289286 realignProjectList ();
287+ updateTooltip (p );
290288 });
291289 });
292290
@@ -296,6 +294,17 @@ private Node createListEntryForProject(final Project p) {
296294 return projectElement ;
297295 }
298296
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+
299308 private Dialog <ButtonType > setUpDialogButtonType (final String title , final String headerText ) {
300309 final Dialog <ButtonType > dialog = new Dialog <>();
301310 dialog .setTitle (title );
@@ -305,60 +314,29 @@ private Dialog<ButtonType> setUpDialogButtonType(final String title, final Strin
305314 }
306315
307316 private GridPane setUpEditProjectGridPane (final Project p ) {
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 );
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 ());
351328
352329 return grid ;
353330 }
354331
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 ());
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 ());
362340 }
363341
364342 private ListCell <Project > returnListCellOfProject () {
0 commit comments