RustのGUIで、テーブルが無い問題。
なかなか解決しないので、ついにwin32apiに手を出してしまった。
NativeWindowsGUIというクレートがあって、win32apiを薄くラップしてるもの。
職場で使うアプリなので、Winだけで動けばいいので問題ない。
ちょっと試してみたら、最大化、最小化は問題なく動く(当たり前)。
テーブル(ListView)もある。
空き時間で少しづつ作り始めた。
そもそも、これがwin32api初なので、引数が良く分からん。
コードで書けば補完が効くが、deriveマクロで書くと補完が効かないので、ドキュメント見ながら、ちまちま実装。
一度pythonで作ってるアプリので、全く同じレイアウトで作る(Rustで作り直す)。
最初Gridレイアウトでいいやと思ってたら、ウィンドウサイズ変えても同期しない。
仕方なく良く分からんダイナミックレイアウトで、ウィンドウサイズ変えると、コントロールサイズが変わるようにする。
取り敢えず動いたけど、ドキュメントに記載がないので、何でこの数値で動いてるのか分からん。
コンボボックスx2、テキストインプット、リストビュー、テキストボックスを設置して、それぞれのイベントを実装していく。
イベントの書き方も良く分からんが適当に書いたら動いたからいいか。
最初、全ての処理を書いてたんだけど、これじゃテスト出来ないじゃんって気づいた。
(GUIは、テストコードでテスト出来ない)
気づいてしまったので、構造体として外出しして、テスト出来るようにする。
単体テスト通してから、実処理で使用する。
最終的には、GUIいじって動き確認になるけど、なるべくテスト動かせるように実装していく。
処理自体はRustなので、今まで頑張って書いてきたRustの流儀で書ける。
まぁ、いつものように所有権問題で、はまるんだけど。
毎日ちょっとずつ書くので、あっちで実装した関数を、こっちで使ってるけど、ここでしか使わないので、この引数いらなくね?みたいな箇所がわんさか出てくる。
最後に、全体をチェックして、いらん処理を削っていく。
そんで、なるべくRustっぽいコードにしていく。
GUIのコントロールにデータ設定する際に、cloneするしかなくて、各所でcloneしてしまった。
Rc使えばゼロコピー実現出来たかなぁ、と今更ながら思ったり。
すでに、出来上がったので、内部チームに動作確認依頼してる。
これで問題なければ全体周知予定。
どうせWinでしか使わないんだから、GUIは、win32apiでいいよね、軽いし。
他のGUIクレートは、どのOSでも動きます!みたいなのばっかりで、動けば問題ないけど、最小化したら落ちるとかクソでしょ。
今後も、GUI必要になったら、win32apiでいいか。
今更のようにwin32apiを使ってみたが、Rustでラップしてるので、本来のapi関数を叩いてないため、
未だにwin32apiには無知のまま。
MS嫌いなので、勉強する気もない。