Skip to content
This repository has been archived by the owner on Oct 7, 2023. It is now read-only.

Commit

Permalink
Merge pull request #144 from nmby/dev
Browse files Browse the repository at this point in the history
v0.14.0
  • Loading branch information
nmby committed Nov 19, 2022
2 parents 0ed0e91 + 96fa0da commit 151c5b1
Show file tree
Hide file tree
Showing 77 changed files with 2,148 additions and 1,339 deletions.
4 changes: 2 additions & 2 deletions README.md
Expand Up @@ -32,8 +32,8 @@

次の環境で動作確認済みです。

- Windows 10 (x64)
- macOS Big Sur (x64)
- Windows 11 (x64)
- macOS Ventura (x64)

方眼Diffは比較結果をテキストファイル(\*.txt)とExcelブック(\*.xls/\*.xlsx/\*.xlsm)として出力します。
これらのファイルを表示するためのアプリケーションがお使いのPCに必要です。
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -13,7 +13,7 @@ import java.nio.file.Files
import java.nio.file.Path

// TODO: 要バージョン確認(jpackageの都合上、1.0.0以上にする必要あり)
final def version = '0.13.0'
final def version = '0.14.0'

final def timetag = LocalDateTime.now().format(DateTimeFormatter.ofPattern('yyyyMMdd-HHmmss-SSS'))

Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-milestone-2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-milestone-3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
3 changes: 3 additions & 0 deletions products/hogandiff-0.14.0-mac-x64.dmg
Git LFS file not shown
Binary file added products/hogandiff-0.14.0-mac-x64.zip
Binary file not shown.
Binary file added products/hogandiff-0.14.0-win-x64.zip
Binary file not shown.
4 changes: 2 additions & 2 deletions resources/方眼Diff.app/Contents/Info.plist
Expand Up @@ -15,10 +15,10 @@
<string>xyz.hotchpotch.hogandiff</string>

<key>CFBundleShortVersionString</key>
<string>0.13.0</string>
<string>0.14.0</string>

<key>CFBundleVersion</key>
<string>0.13.0</string>
<string>0.14.0</string>

<key>CFBundleExecutable</key>
<string>Launcher.sh</string>
Expand Down
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-milestone-2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-milestone-3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Binary file not shown.
Expand Up @@ -9,6 +9,7 @@
import javafx.scene.image.Image;
import javafx.stage.Stage;
import xyz.hotchpotch.hogandiff.gui.MainController;
import xyz.hotchpotch.hogandiff.util.Settings;

/**
* このアプリケーションのエントリポイントです。<br>
Expand All @@ -20,16 +21,30 @@ public class AppMain extends Application {
// [static members] ********************************************************

/** このアプリケーションのバージョン */
private static final String VERSION = "v0.13.0";
private static final String VERSION = "v0.14.0";

/** このアプリケーションのドメイン(xyz.hotchpotch.hogandiff) */
public static final String APP_DOMAIN = AppMain.class.getPackageName();

/** このアプリケーションのWebサイトのURL */
public static final String WEB_URL = "https://hogandiff.hotchpotch.xyz/";

/** このアプリケーションで利用するリソース */
public static AppResource appResource = AppResource.fromProperties();

/** メインステージ */
public static Stage stage;

// TODO: コンポーネントの実効サイズを動的に取得する方法を見つける
/** 設定エリアを開いたときのメインステージの最小高さ */
public static final double STAGE_HEIGHT_OPEN = 390d;

/** 設定エリアを閉じたときのメインステージの最小高さ */
public static final double STAGE_HEIGHT_CLOSE = 232d;

/** メインステージの最小幅 */
public static final double STAGE_WIDTH = 532d;

/**
* このアプリケーションのエントリポイントです。<br>
*
Expand All @@ -45,6 +60,8 @@ public static void main(String[] args) {

@Override
public void start(Stage primaryStage) throws Exception {
stage = primaryStage;

// Zip bomb対策の制限の緩和。規定値の0.01から0.001に変更する。
// いささか乱暴ではあるものの、ファイルを開く都度ではなくここで一括で設定してしまう。
ZipSecureFile.setMinInflateRatio(0.001);
Expand All @@ -53,25 +70,50 @@ public void start(Stage primaryStage) throws Exception {
getClass().getResource("gui/MainView.fxml"),
appResource.get());
Parent root = loader.load();
Scene scene = new Scene(root);
String cssPath = getClass().getResource("gui/application.css").toExternalForm();
root.getStylesheets().add(cssPath.replace(" ", "%20"));
Image icon = new Image(getClass().getResourceAsStream("gui/favicon.png"));
Settings settings = appResource.settings();

primaryStage.setScene(scene);
primaryStage.getIcons().add(icon);
primaryStage.setTitle(
appResource.get().getString("AppMain.010")
+ " - "
+ VERSION);
primaryStage.setScene(new Scene(root, 500, 464));
primaryStage.setMinWidth(500);
primaryStage.setMinHeight(464);

MainController controller = loader.getController();
controller.applySettings(appResource.settings());
primaryStage.setMinHeight(
settings.getOrDefault(SettingKeys.SHOW_SETTINGS)
? STAGE_HEIGHT_OPEN
: STAGE_HEIGHT_CLOSE);
primaryStage.setMinWidth(STAGE_WIDTH);

if (settings.containsKey(SettingKeys.STAGE_HEIGHT)) {
primaryStage.setHeight(settings.get(SettingKeys.STAGE_HEIGHT));
}
if (settings.containsKey(SettingKeys.STAGE_WIDTH)) {
primaryStage.setWidth(settings.get(SettingKeys.STAGE_WIDTH));
}
primaryStage.show();

if (controller.isReady()) {
MainController controller = loader.getController();
if (controller.isReady().getValue()) {
controller.execute();
}
}

@Override
public void stop() {
Settings settings = appResource.settings();

if (!settings.containsKey(SettingKeys.STAGE_HEIGHT)
|| settings.get(SettingKeys.STAGE_HEIGHT) != stage.getHeight()) {
appResource.changeSetting(SettingKeys.STAGE_HEIGHT, stage.getHeight());
}
if (!settings.containsKey(SettingKeys.STAGE_WIDTH)
|| settings.get(SettingKeys.STAGE_WIDTH) != stage.getWidth()) {
appResource.changeSetting(SettingKeys.STAGE_WIDTH, stage.getWidth());
}
}
}
Expand Up @@ -14,6 +14,7 @@
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import xyz.hotchpotch.hogandiff.util.Settings;
import xyz.hotchpotch.hogandiff.util.Settings.Key;

/**
* アプリケーションのリソースを保持するクラスです。<br>
Expand Down Expand Up @@ -52,6 +53,11 @@ private static Properties loadProperties() {
return new Properties();
}

/**
* このアプリケーションで利用するリソースをプロパティファイルから構成します。<br>
*
* @return このアプリケーションで利用するリソース
*/
public static AppResource fromProperties() {
Properties properties = loadProperties();
Settings settings;
Expand Down Expand Up @@ -85,18 +91,61 @@ private AppResource(
this.properties = properties;
this.settings = settings;

Locale appLocale = settings.get(SettingKeys.APP_LOCALE);
Locale appLocale = settings.getOrDefault(SettingKeys.APP_LOCALE);
this.rb = ResourceBundle.getBundle("messages", appLocale);
}

/**
* 設定セットを返します。<br>
*
* @return 設定セット
*/
public Settings settings() {
return settings;
}

/**
* リソースバンドルを返します。<br>
*
* @return リソースバンドル
*/
public ResourceBundle get() {
return rb;
}

/**
* このリソースにアプリケーション実行時引数の内容を反映させます。<br>
*
* @param args アプリケーション実行時引数
* @throws NullPointerException {@code args} が {@code null} の場合
*/
public void reflectArgs(String[] args) {
Objects.requireNonNull(args, "args");

// アプリケーション実行時引数から設定を抽出する。
Optional<Settings> fromArgs = AppArgsParser.parseArgs(args);

// アプリケーション実行時引数から設定を抽出できた場合は、
// その内容で既存の内容を上書きする。
// つまり、アプリケーション実行時引数で指定された内容を優先させる。
if (fromArgs.isPresent()) {
Settings.Builder builder = Settings.builder(settings);
builder.setAll(fromArgs.get());
this.settings = builder.build();

} else if (0 < args.length) {
System.err.println(AppArgsParser.USAGE);
}
}

/**
* 設定セットの内容をプロパティファイルに保存します。<br>
*
* @param settings 保存すべき設定セット
* @return 保存に成功した場合は {@code true}
* @throws NullPointerException {@code settings} が {@code null} の場合
*/
@Deprecated
public boolean storeSettings(Settings settings) {
Objects.requireNonNull(settings, "settings");

Expand Down Expand Up @@ -124,32 +173,25 @@ private boolean storeProperties() {
}
}

public boolean storeLocale(Locale locale) {
Objects.requireNonNull(locale, "locale");

Settings.Key<Locale> key = SettingKeys.APP_LOCALE;

properties.setProperty(key.name(), key.encoder().apply(locale));

return storeProperties();
}

public void reflectArgs(String[] args) {
Objects.requireNonNull(args, "args");
/**
* 設定値を変更しプロパティファイルに記録します。<br>
*
* @param <T> 設定値の型
* @param key 設定キー
* @param value 設定値
* @return 保存に成功した場合は {@code true}
* @throws NullPointerException {@code key} が {@code null} の場合
*/
public <T> boolean changeSetting(Key<T> key, T value) {
Objects.requireNonNull(key, "key");

// アプリケーション実行時引数から設定を抽出する。
Optional<Settings> fromArgs = AppArgsParser.parseArgs(args);
settings = settings.getAltered(key, value);

// アプリケーション実行時引数から設定を抽出できた場合は、
// その内容で既存の内容を上書きする。
// つまり、アプリケーション実行時引数で指定された内容を優先させる。
if (fromArgs.isPresent()) {
Settings.Builder builder = Settings.builder(settings);
builder.setAll(fromArgs.get());
this.settings = builder.build();

} else if (0 < args.length) {
System.err.println(AppArgsParser.USAGE);
if (key.storable()) {
properties.setProperty(key.name(), key.encoder().apply(value));
return storeProperties();
} else {
return true;
}
}
}
Expand Up @@ -59,7 +59,7 @@

this.settings = settings;
this.factory = factory;
this.menu = settings.get(SettingKeys.CURR_MENU);
this.menu = settings.getOrDefault(SettingKeys.CURR_MENU);
}

@Override
Expand Down Expand Up @@ -123,8 +123,8 @@ private Path createWorkDir(int progressBefore, int progressAfter)
Path workDir = null;
try {
updateProgress(progressBefore, PROGRESS_MAX);
workDir = settings.get(SettingKeys.WORK_DIR_BASE)
.resolve(settings.get(SettingKeys.CURR_TIMESTAMP));
workDir = settings.getOrDefault(SettingKeys.WORK_DIR_BASE)
.resolve(settings.getOrDefault(SettingKeys.CURR_TIMESTAMP));
str.append("%s%n - %s%n%n".formatted(rb.getString("AppTask.030"), workDir));
updateMessage(str.toString());

Expand Down Expand Up @@ -262,7 +262,7 @@ private void showResultText(
try (BufferedWriter writer = Files.newBufferedWriter(textPath)) {
writer.write(results.toString());
}
if (settings.get(SettingKeys.SHOW_RESULT_TEXT)) {
if (settings.getOrDefault(SettingKeys.SHOW_RESULT_TEXT)) {
str.append(rb.getString("AppTask.100")).append(BR).append(BR);
updateMessage(str.toString());
Desktop.getDesktop().open(textPath.toFile());
Expand Down Expand Up @@ -333,7 +333,7 @@ private void showPaintedSheets1(
}

try {
if (settings.get(SettingKeys.SHOW_PAINTED_SHEETS)) {
if (settings.getOrDefault(SettingKeys.SHOW_PAINTED_SHEETS)) {
str.append(rb.getString("AppTask.140")).append(BR).append(BR);
updateMessage(str.toString());
Desktop.getDesktop().open(dst.bookPath().toFile());
Expand Down Expand Up @@ -400,7 +400,7 @@ private void showPaintedSheets2(
}

try {
if (settings.get(SettingKeys.SHOW_PAINTED_SHEETS)) {
if (settings.getOrDefault(SettingKeys.SHOW_PAINTED_SHEETS)) {
str.append(rb.getString("AppTask.140")).append(BR).append(BR);
updateMessage(str.toString());
Desktop.getDesktop().open(dst1.bookPath().toFile());
Expand Down

0 comments on commit 151c5b1

Please sign in to comment.