1+ package chiloven .xamlsorter .ui .dialogs ;
2+
3+ import chiloven .xamlsorter .entities .ProjectMeta ;
4+ import chiloven .xamlsorter .modules .I18n ;
5+ import chiloven .xamlsorter .utils .ShowAlert ;
6+ import javafx .geometry .Insets ;
7+ import javafx .scene .Scene ;
8+ import javafx .scene .control .*;
9+ import javafx .scene .layout .VBox ;
10+ import javafx .stage .Modality ;
11+ import javafx .stage .Window ;
12+ import org .apache .logging .log4j .LogManager ;
13+ import org .apache .logging .log4j .Logger ;
14+
15+ import static chiloven .xamlsorter .modules .I18n .getLang ;
16+
17+ public class ProjectMetaEditDialog extends Dialog <ProjectMeta > {
18+ private static final Logger logger = LogManager .getLogger (ProjectMetaEditDialog .class );
19+
20+ private final TextField projectNameField ;
21+ private final TextField projectAuthorField ;
22+ private final TextArea projectDescField ;
23+
24+ public ProjectMetaEditDialog (Window owner , ProjectMeta currentMeta ) {
25+ this .projectNameField = new TextField (currentMeta .getName ());
26+ this .projectAuthorField = new TextField (currentMeta .getAuthor ());
27+ this .projectDescField = new TextArea (currentMeta .getDescription ());
28+
29+ try {
30+ setupDialog (owner );
31+ } catch (Exception e ) {
32+ logger .error ("Failed to create Project Meta Edit dialog" , e );
33+ ShowAlert .error (
34+ getLang ("general.alert.error" ),
35+ getLang ("dialog.edit_proj.exception.alert.header" ),
36+ getLang ("dialog.edit_proj.exception.alert.content" ),
37+ e
38+ );
39+ }
40+ }
41+
42+ public static ProjectMeta show (Window owner , ProjectMeta currentMeta ) {
43+ logger .debug ("Opening Project Meta Edit dialog" );
44+ try {
45+ ProjectMetaEditDialog dialog = new ProjectMetaEditDialog (owner , currentMeta );
46+ return dialog .showAndWait ().orElse (null );
47+ } catch (Exception e ) {
48+ logger .error ("Failed to show Project Meta Edit dialog" , e );
49+ ShowAlert .error (
50+ getLang ("general.alert.error" ),
51+ getLang ("dialog.edit_proj.exception.alert.header" ),
52+ getLang ("dialog.edit_proj.exception.alert.content" ),
53+ e
54+ );
55+ return null ;
56+ }
57+ }
58+
59+ private void setupDialog (Window owner ) {
60+ setTitle (getLang ("dialog.edit_proj.title" ));
61+ initModality (Modality .WINDOW_MODAL );
62+ initOwner (owner );
63+
64+ VBox content = new VBox (10 );
65+ content .setPrefHeight (160.0 );
66+ content .setPrefWidth (320.0 );
67+
68+ Label titleLabel = new Label (getLang ("dialog.edit_proj.title.label" ));
69+ titleLabel .setStyle ("-fx-font-size: 16px; -fx-font-weight: bold;" );
70+
71+ projectNameField .setPromptText (getLang ("dialog.new_proj.name.label" ));
72+ projectAuthorField .setPromptText (getLang ("dialog.new_proj.author.label" ));
73+ projectDescField .setPromptText (getLang ("dialog.new_proj.description.label" ));
74+ projectDescField .setPrefRowCount (2 );
75+
76+ content .getChildren ().addAll (
77+ titleLabel ,
78+ projectNameField ,
79+ projectAuthorField ,
80+ projectDescField
81+ );
82+
83+ ButtonType saveButton = new ButtonType (getLang ("general.button.save" ),
84+ ButtonBar .ButtonData .OK_DONE );
85+ ButtonType cancelButton = new ButtonType (getLang ("general.button.cancel" ),
86+ ButtonBar .ButtonData .CANCEL_CLOSE );
87+ getDialogPane ().getButtonTypes ().addAll (saveButton , cancelButton );
88+
89+ getDialogPane ().setContent (content );
90+ getDialogPane ().setPadding (new Insets (10 ));
91+
92+ setResultConverter (buttonType -> {
93+ if (buttonType == saveButton ) {
94+ return getProjectMeta ();
95+ }
96+ return null ;
97+ });
98+
99+ Scene scene = getDialogPane ().getScene ();
100+ I18n .applyDefaultFont (scene );
101+
102+ logger .debug ("Project Meta Edit dialog initialized" );
103+ }
104+
105+ private ProjectMeta getProjectMeta () {
106+ return new ProjectMeta (
107+ projectNameField .getText ().trim (),
108+ projectDescField .getText ().trim (),
109+ projectAuthorField .getText ().trim ()
110+ );
111+ }
112+ }
0 commit comments