Skip to content

Commit ca9648a

Browse files
authored
Merge pull request #56 from DrRename/54-kodi-tools-as-a-tab-inside-main-view
54 kodi tools as a tab inside main view
2 parents 6ec8326 + f4d9681 commit ca9648a

File tree

10 files changed

+190
-99
lines changed

10 files changed

+190
-99
lines changed

src/main/java/drrename/filecreator/DummyFileCreatorController.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@
2323
import drrename.event.DummyFileCreatorButtonGoEvent;
2424
import drrename.ui.mainview.GoCancelButtonsComponentController;
2525
import drrename.ui.mainview.StartDirectoryComponentController;
26+
import drrename.ui.mainview.controller.TabController;
2627
import javafx.event.ActionEvent;
2728
import javafx.fxml.Initializable;
29+
import javafx.scene.Node;
30+
import javafx.scene.Parent;
2831
import javafx.scene.Scene;
2932
import javafx.scene.control.ProgressBar;
3033
import javafx.scene.control.TextField;
@@ -48,7 +51,7 @@
4851
@FxmlView("/fxml/DummyFileCreator.fxml")
4952
public class DummyFileCreatorController implements Initializable {
5053

51-
public StartDirectoryComponentController startDirectoryComponentController;
54+
private final TabController tabController;
5255

5356
public GoCancelButtonsComponentController goCancelButtonsComponentController;
5457

@@ -58,7 +61,7 @@ public class DummyFileCreatorController implements Initializable {
5861

5962
public ProgressBar progressBar;
6063

61-
public BorderPane root;
64+
public Parent root;
6265

6366
private final FileCreatorService fileCreatorService;
6467

@@ -73,14 +76,12 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
7376
TextFormatter<Number> textFormatter = new TextFormatter<>(new NumberStringConverter());
7477
wordSeparator.setText("_");
7578
filesCnt.setTextFormatter(textFormatter);
76-
goCancelButtonsComponentController.buttonGo.disableProperty().bind(fileCreatorService.runningProperty().or(startDirectoryComponentController.readyProperty().not().or(filesCnt.textProperty().isEmpty())));
79+
goCancelButtonsComponentController.buttonGo.disableProperty().bind(fileCreatorService.runningProperty().or(tabController.startDirectoryComponentController.readyProperty().not().or(filesCnt.textProperty().isEmpty())));
7780
goCancelButtonsComponentController.buttonCancel.disableProperty().bind(fileCreatorService.runningProperty().not());
7881
goCancelButtonsComponentController.setButtonCancelActionEventFactory( DummyFileCreatorButtonCancelEvent::new);
7982
goCancelButtonsComponentController.setButtonGoActionEventFactory(DummyFileCreatorButtonGoEvent::new);
8083
progressBar.visibleProperty().bind(fileCreatorService.runningProperty());
8184

82-
log.debug("Input component: {}", startDirectoryComponentController);
83-
log.debug("Buttons component: {}", goCancelButtonsComponentController);
8485
}
8586

8687
public void show() {
@@ -110,7 +111,7 @@ private void startService() {
110111
fileCreatorService.cancel();
111112
fileCreatorService.reset();
112113
fileCreatorService.setFileCnt((long) filesCnt.getTextFormatter().getValue());
113-
fileCreatorService.setDirectory(startDirectoryComponentController.getInputPath());
114+
fileCreatorService.setDirectory(tabController.startDirectoryComponentController.getInputPath());
114115
fileCreatorService.setWordSeparator(wordSeparator.getText());
115116
progressBar.progressProperty().bind(fileCreatorService.progressProperty());
116117
fileCreatorService.start();

src/main/java/drrename/kodi/KodiToolsController.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import drrename.kodi.treeitem.FilterableKodiRootTreeItem;
44
import drrename.kodi.treeitem.KodiTreeItemValue;
5+
import drrename.ui.mainview.controller.TabController;
56
import drrename.util.FXUtil;
67
import drrename.ui.mainview.GoCancelButtonsComponentController;
78
import drrename.ui.mainview.StartDirectoryComponentController;
@@ -42,6 +43,8 @@ public class KodiToolsController implements Initializable {
4243

4344
public static final int imageStageXOffset = 600;
4445

46+
private final TabController tabController;
47+
4548
public BorderPane root;
4649

4750
public ProgressBar progressBar;
@@ -62,8 +65,6 @@ public class KodiToolsController implements Initializable {
6265

6366
Stage imageStage;
6467

65-
public StartDirectoryComponentController startDirectoryComponentController;
66-
6768
public GoCancelButtonsComponentController goCancelButtonsComponentController;
6869

6970
private final MovieDirectoryCollectorService service;
@@ -82,7 +83,7 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
8283
imageStage = new Stage();
8384
mainStage.setScene(new Scene(root));
8485
mainStage.setTitle("Kodi Tools");
85-
goCancelButtonsComponentController.buttonGo.disableProperty().bind(service.runningProperty().or(startDirectoryComponentController.readyProperty().not()));
86+
goCancelButtonsComponentController.buttonGo.disableProperty().bind(service.runningProperty().or(tabController.startDirectoryComponentController.readyProperty().not()));
8687
goCancelButtonsComponentController.buttonCancel.disableProperty().bind(service.runningProperty().not());
8788
goCancelButtonsComponentController.setButtonCancelActionEventFactory(KodiToolsButtonCancelEvent::new);
8889
goCancelButtonsComponentController.setButtonGoActionEventFactory(KodiToolsButtonGoEvent::new);
@@ -97,7 +98,7 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
9798
buttonCollapseAll.setDisable(e.getList().isEmpty());
9899
});
99100
treeRoot.setPredicate(buildHideEmptyPredicate());
100-
startDirectoryComponentController.inputPathProperty().addListener((observable, oldValue, newValue) -> {
101+
tabController.startDirectoryComponentController.inputPathProperty().addListener((observable, oldValue, newValue) -> {
101102
if (newValue != null) {
102103
onButtonGoEvent(null);
103104
}
@@ -183,14 +184,14 @@ public void onButtonCancelEvent(KodiToolsButtonCancelEvent event){
183184
}
184185

185186
private void startService() {
186-
if (startDirectoryComponentController.getInputPath() == null) {
187+
if (tabController.startDirectoryComponentController.getInputPath() == null) {
187188
log.warn("Cannot start, input path is null");
188189
return;
189190
}
190191
log.debug("Starting service {}", service);
191192
service.reset();
192193
treeRoot.getSourceChildren().clear();
193-
service.setDirectory(startDirectoryComponentController.getInputPath());
194+
service.setDirectory(tabController.startDirectoryComponentController.getInputPath());
194195
service.setExecutor(executor);
195196
service.setRootTreeItem(treeRoot);
196197
service.setMovieDbClientFactory(movieDbClientFactory);

src/main/java/drrename/ui/PrimaryStageInitializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import drrename.event.StageReadyEvent;
44
import drrename.ui.config.UiConfig;
5-
import drrename.ui.mainview.MainController;
5+
import drrename.ui.mainview.controller.TabController;
66
import javafx.application.Platform;
77
import javafx.scene.Scene;
88
import javafx.stage.Stage;
@@ -31,7 +31,7 @@ public class PrimaryStageInitializer {
3131
public void onApplicationEvent(StageReadyEvent event) {
3232
Platform.runLater(() -> {
3333
Stage stage = event.stage();
34-
mainScene = new Scene(fxWeaver.loadView(MainController.class, resourceBundle), uiConfig.getInitialWidth(), uiConfig.getInitialHeight());
34+
mainScene = new Scene(fxWeaver.loadView(TabController.class, resourceBundle), uiConfig.getInitialWidth(), uiConfig.getInitialHeight());
3535
stage.setTitle(uiConfig.getAppTitle());
3636
stage.setScene(mainScene);
3737
stage.show();

src/main/java/drrename/ui/mainview/MainController.java renamed to src/main/java/drrename/ui/mainview/RenameController.java

Lines changed: 13 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import drrename.strategy.RenamingConfig;
3434
import drrename.strategy.RenamingStrategy;
3535
import drrename.strategy.SimpleRenamingConfig;
36+
import drrename.ui.mainview.controller.TabController;
3637
import drrename.util.FXUtil;
3738
import drrename.ui.settingsview.SettingsController;
3839
import drrename.ui.mainview.controller.FileListComponentController;
@@ -46,6 +47,7 @@
4647
import javafx.beans.property.SimpleBooleanProperty;
4748
import javafx.beans.property.SimpleListProperty;
4849
import javafx.beans.value.ChangeListener;
50+
import javafx.beans.value.ObservableValue;
4951
import javafx.collections.FXCollections;
5052
import javafx.collections.ListChangeListener;
5153
import javafx.concurrent.Service;
@@ -77,8 +79,8 @@
7779
@RequiredArgsConstructor
7880
@Slf4j
7981
@Component
80-
@FxmlView("/fxml/MainView.fxml")
81-
public class MainController implements Initializable {
82+
@FxmlView("/fxml/RenameView.fxml")
83+
public class RenameController implements Initializable {
8284

8385
private static final String RENAMING_FILES = "mainview.status.renaming_files";
8486

@@ -88,6 +90,8 @@ public class MainController implements Initializable {
8890

8991
private static final String LOADING_FILE_TYPES = "mainview.status.loading_filetypes";
9092

93+
private final TabController tabController;
94+
9195
private final AppConfig config;
9296

9397
private final LoadPathsService loadPathsService;
@@ -108,8 +112,6 @@ public class MainController implements Initializable {
108112

109113
public VBox fileListComponent;
110114

111-
public BorderPane startDirectoryComponent;
112-
113115
public HBox replacementStringComponent;
114116

115117
private final RenamingService renamingService;
@@ -168,8 +170,6 @@ public class MainController implements Initializable {
168170

169171
@FXML
170172
private ProgressBar progressBar;
171-
@FXML
172-
MenuBar menuBar;
173173

174174
@FXML
175175
Node layer01;
@@ -194,8 +194,6 @@ public class MainController implements Initializable {
194194

195195
public GoCancelButtonsComponentController goCancelButtonsComponentController;
196196

197-
public StartDirectoryComponentController startDirectoryComponentController;
198-
199197
public FileListComponentController fileListComponentController;
200198

201199
public ReplacementStringComponentController replacementStringComponentController;
@@ -217,7 +215,7 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
217215
textFieldReplacementStringTo = replacementStringComponentController.textFieldReplacementStringTo;
218216
textFieldReplacementStringFrom = replacementStringComponentController.textFieldReplacementStringFrom;
219217

220-
FXUtil.initAppMenu(menuBar);
218+
221219

222220
initRenamingStrategies();
223221

@@ -229,8 +227,6 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
229227

230228
configureStatusLabels();
231229

232-
initDragAndDrop();
233-
234230
progressBar.visibleProperty().bind(loadPathsService.runningProperty().or(previewService.runningProperty().or(renamingService.runningProperty())));
235231

236232
if (config.isDebug())
@@ -261,43 +257,6 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
261257

262258
}
263259

264-
private void initDragAndDrop() {
265-
startDirectoryComponentController.textFieldDirectory.setOnDragEntered(this::handleDragEvent);
266-
startDirectoryComponentController.textFieldDirectory.setOnDragEntered(this::handleDragEvent);
267-
startDirectoryComponentController.textFieldDirectory.setOnDragOver(this::handleDragEvent);
268-
startDirectoryComponentController.textFieldDirectory.setOnDragDropped(this::handleDragEvent);
269-
startDirectoryComponentController.textFieldDirectory.setOnDragExited(this::handleDragEvent);
270-
271-
leftContent.setOnDragEntered(this::handleDragEvent);
272-
leftContent.setOnDragEntered(this::handleDragEvent);
273-
leftContent.setOnDragOver(this::handleDragEvent);
274-
leftContent.setOnDragDropped(this::handleDragEvent);
275-
leftContent.setOnDragExited(this::handleDragEvent);
276-
}
277-
278-
private void handleDragEvent(DragEvent event) {
279-
if (DragEvent.DRAG_ENTERED.equals(event.getEventType()) && event.getGestureSource() == null) {
280-
draggingOver.set(true);
281-
} else if (DragEvent.DRAG_OVER.equals(event.getEventType()) && event.getGestureSource() == null && event.getDragboard().hasFiles()) {
282-
event.acceptTransferModes(TransferMode.ANY);
283-
} else if (DragEvent.DRAG_DROPPED.equals(event.getEventType()) && event.getGestureSource() == null && event.getDragboard().hasFiles()) {
284-
285-
if (event.getDragboard().getFiles().size() == 1 && event.getDragboard().getFiles().iterator().next().isDirectory()) {
286-
// Only update the input field, this will trigger a loading
287-
startDirectoryComponentController.textFieldDirectory.setText(event.getDragboard().getFiles().iterator().next().toString());
288-
} else {
289-
Set<Path> vaultPaths = event.getDragboard().getFiles().stream().map(File::toPath).collect(Collectors.toSet());
290-
loadedPaths.setAll(vaultPaths);
291-
startDirectoryComponentController.textFieldDirectory.setText(null);
292-
Platform.runLater(this::updateInputView);
293-
}
294-
event.setDropCompleted(true);
295-
event.consume();
296-
} else if (DragEvent.DRAG_EXITED.equals(event.getEventType())) {
297-
draggingOver.set(false);
298-
}
299-
}
300-
301260
private void configureStatusLabels() {
302261
statusLabelLoaded.textProperty().bind(entriesService.statusLoadedProperty());
303262
statusLabelLoadedFileTypes.textProperty().bind(entriesService.statusLoadedFileTypesProperty());
@@ -328,16 +287,18 @@ private void initRenamingStrategies() {
328287
private void registerInputChangeListener() {
329288
replaceStringFromChangeListener = (e, o, n) -> Platform.runLater(this::updatePreview);
330289
replaceStringToChangeListener = (e, o, n) -> Platform.runLater(this::updatePreview);
331-
textFieldChangeListener = (e, o, n) -> Platform.runLater(() -> {
332-
if (n != null) loadedPaths.setAll(Path.of(n));
333-
updateInputView();
290+
tabController.startDirectoryComponentController.inputPathProperty().addListener(new ChangeListener<Path>() {
291+
@Override
292+
public void changed(ObservableValue<? extends Path> observable, Path oldValue, Path n) {
293+
if (n != null) loadedPaths.setAll(n);
294+
updateInputView();
295+
}
334296
});
335297
ignoreDirectoriesChangeListener = (e, o, n) -> entriesService.setFilterDirectories(n);
336298
ignoreHiddenFilesChangeListener = (e, o, n) -> entriesService.setFilterHiddenFiles(n);
337299
showOnlyChangingChangeListener = (e, o, n) -> entriesService.setShowOnlyChainging(n);
338300
textFieldReplacementStringFrom.textProperty().addListener(replaceStringFromChangeListener);
339301
textFieldReplacementStringTo.textProperty().addListener(replaceStringToChangeListener);
340-
startDirectoryComponentController.textFieldDirectory.textProperty().addListener(textFieldChangeListener);
341302
ignoreDirectories.selectedProperty().addListener(ignoreDirectoriesChangeListener);
342303
ignoreHiddenFiles.selectedProperty().addListener(ignoreHiddenFilesChangeListener);
343304
showOnlyChanging.selectedProperty().addListener(showOnlyChangingChangeListener);

src/main/java/drrename/ui/mainview/StartDirectoryComponentController.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package drrename.ui.mainview;
22

3-
import javafx.application.Platform;
43
import javafx.beans.property.BooleanProperty;
54
import javafx.beans.property.ObjectProperty;
65
import javafx.beans.property.SimpleBooleanProperty;
76
import javafx.beans.property.SimpleObjectProperty;
87
import javafx.beans.value.ChangeListener;
98
import javafx.fxml.Initializable;
109
import javafx.scene.control.TextField;
10+
import javafx.scene.input.DragEvent;
1111
import javafx.scene.input.Dragboard;
1212
import javafx.scene.input.TransferMode;
1313
import lombok.extern.slf4j.Slf4j;
@@ -17,10 +17,13 @@
1717
import org.springframework.context.annotation.Scope;
1818
import org.springframework.stereotype.Component;
1919

20+
import java.io.File;
2021
import java.net.URL;
2122
import java.nio.file.Files;
2223
import java.nio.file.Path;
2324
import java.util.ResourceBundle;
25+
import java.util.Set;
26+
import java.util.stream.Collectors;
2427

2528
@Slf4j
2629
@Component
@@ -34,27 +37,26 @@ public class StartDirectoryComponentController implements Initializable, Applica
3437

3538
private BooleanProperty ready;
3639

37-
@SuppressWarnings("")
3840
private ChangeListener<? super String> textFieldChangeListener;
3941

4042
@Override
4143
public void initialize(URL url, ResourceBundle resourceBundle) {
4244
ready = new SimpleBooleanProperty(false);
4345
inputPath = new SimpleObjectProperty<>();
44-
textFieldChangeListener = (e, o, n) -> Platform.runLater(() -> updateInput(n));
46+
textFieldChangeListener = (e, o, n) -> updateInput(n);
4547
textFieldDirectory.textProperty().addListener(textFieldChangeListener);
4648
textFieldDirectory.setOnDragOver(event -> {
4749
if ((event.getGestureSource() != textFieldDirectory) && event.getDragboard().hasFiles()) {
4850
/* allow for both copying and moving, whatever user chooses */
49-
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
51+
event.acceptTransferModes(TransferMode.ANY);
5052
}
5153
event.consume();
5254
});
5355
textFieldDirectory.setOnDragDropped(event -> {
5456
final Dragboard db = event.getDragboard();
5557
boolean success = false;
5658
if (db.hasFiles()) {
57-
if (!db.getFiles().isEmpty() && db.getFiles().iterator().next().isDirectory())
59+
if (db.getFiles().iterator().next().isDirectory())
5860
textFieldDirectory.setText(db.getFiles().iterator().next().getPath());
5961
else textFieldDirectory.setText(null);
6062
success = true;
@@ -68,7 +70,7 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
6870
}
6971

7072
private void updateInput(String inputPath) {
71-
if(inputPath != null){
73+
if (inputPath != null) {
7274
updateInput(Path.of(inputPath));
7375
}
7476
}

0 commit comments

Comments
 (0)