取得してきたソースコードがちゃんとビルドできて動作すると確認できたので、簡単な機能を1つ追加してみましょう。以降の解説は、2019年8月28日に取得したソースコードを基にしています。
面積コンバーターに「坪」を追加してみる
「電卓」アプリには、単位を変換する機能が備わっています。例えば、面積では次の画像に見えるような単位を相互に変換できます。
この面積コンバーターの選択肢に「坪」を追加してみましょう。
アプリが変更しやすい作りになっていれば、選択肢と変換する定数を追加するだけで終わるかもしれません。あまり上手ではない作りだと、あっちこっちのロジックまで修正するはめになるかもしれません。この「電卓」アプリはどうでしょうか? やってみましょう。
画面の選択肢を用意しているコードを探す
まず、画面に表示される選択肢の定義場所を探します。上の画像で「平方ミリメートル」という単位が見えていますね。その「平方ミリメートル」という文字列をソリューション全体から検索してみると、日本語リソースのResources.reswに見つかります(次の画像)。
今度は、「平方ミリメートル」の定義名「UnitName_SquareMillimeter」(上の画像に見えています)を使っているところを検索します。この定義名は多数のリソースファイルに定義されているので、ひとつひとつ検索結果を見ていくのは大変です。次の画像のように検索中に[すべて検索]に切り替えるか、あるいは、メニュー[編集]-[検索と置換]-[フォルダーを指定して検索]を使って、すべての検索結果を出すようにすると楽です。
すると、定義名「UnitName_SquareMillimeter」を使っている箇所はリソースファイル以外に1つだけあって、/CalcViewModel/DataLoaders/UnitConverterDataLoader.cppに見つかります(次の画像)。
ここでは、文字列リソースとして定義名「UnitName_SquareMillimeter」の他に、その次の行で「UnitAbbreviation_SquareMillimeter」を使っています。また、その前の行では、定数「UnitConverterUnits::Area_SquareMillimeter」を使っています。これら3つの「平方ミリメートル」の定義、すなわち、文字列リソース「UnitName_SquareMillimeter」・「UnitAbbreviation_SquareMillimeter」と定数「UnitConverterUnits::Area_SquareMillimeter」が定義されているところに、「坪」の定義を追加すればよさそうです。
また、上のコードでやっていることは、vectorコレクションの変数areaUnitsを用意して、そのpush_backメソッドを順に呼び出すことです。push_backメソッドに与える引数は、上述の3つの定義から作ったOrderedUnitオブジェクトになっています。どうやら、ここで画面に表示する選択肢のデータを作っているようです。ということは、これを真似して「坪」のデータを追加するpush_backメソッドを書き加えればよさそうです。
