見出し画像

CubePDFのソースコード探訪 ダイアログを出しているところを見つけた編

CubePDFのソースコード探訪までに道のりが長かったが、ここからがソースコード探訪編。

ここまででプログラミング環境の準備とCubePDFのソースコードを入手できたので、あとはこれを料理するだけ。

だが、料理の前に素材のことを知らなければならない。

画像1

VisualStudioのデフォルト画面の左上だか右上だかにファイルのエクスプローラウインドウが表示されているので(なぜか起動するたびに場所が変わる)、ファイル名やらなんやらわからないソリューションとやらを探訪した。

ソリューションの直下にはApplication, Libraries, Testsの3つがあるが、Testsは確実に関係なさそうで、LibrariesよりもApplicationのほうが、っぽい。そして、Applicationの中にはCube.Pdf.Clipやら、CubePdf.Pickerやらがあるが、Cube.Pdf.Converter.MainがCubePDFっぽい。そのフォルダの中にはPropeties, Assets, Sourcesがあるので、絶対Sources。Model, Presenters, Viewsというフォルダがあるので、見た目はViewsだろうと当たりをつけていると、Viewsの中にMainWindow.csがあり、それをダブルクリックして開こうとするとエラー。

画像2

脅しには屈しないし、プログラムが崩壊したとしてもGitHubから再取得すればどうにでもなるので「無視して続行」。

画像3

再度脅してくるが続行。

画像4

見事にCubePDFの画面が表示された。

これはVisualStudioのデザイン画面のようだが、よくわからないので内容には触らないでおく。

とりあえずこれがCubePDFのダイアログウインドウになるため、これを呼び出しているコードを探し出し、それをなんとかスキップさせればダイアログを経由しない印刷ができそうと、取らぬ狸の皮算用とやら。

VisualStudioの編集メニューの中に検索があるが、「クイック検索」ではなく、「フォルダーを指定して検索」を実行。

画像5

こんな画面が表示されるので、とりあえず検索文字列は「MainWindow」。プログラム内では大文字小文字が区別されるはずなので、「大文字と小文字を区別する」をチェック。そして、検索場所はソリューション全体。「すべて検索」を押下。

画像6

なんかめちゃくちゃ出てくるが、ここでも感を働かせる。

先にCubePDFはCube.Pdf.Converter.Mainが怪しいと当たりをつけているので、以下のファイルを選択。

Applications->Converter\Main->Sources->Program.cs

ダウンロード時期によって行数どころかファイルも分割されて異なるかもしれないが、2021年2月10日20時現在には91行目のコードは以下になっている。

       private static void Show(SettingFolder settings)
       {
           var view = new MainWindow();
           view.Bind(new MainViewModel(settings));
           Application.Run(view);
       }

恐らくApplication.Run()でダイアログを表示させているのかと思う。

なので、その前と後でプリントデバッグを試みようと考えたが、このGUIの時代、プリントデバッグをしても表示されるコンソールがないと気づくのに時間がかかった。
C#でprintf()するにはどうすればよいのか調べてて、DebugPrint()やらなにやらいろいろなプリントがあって絶望しているさなか気がついた。

プリントデバッグが難しい場合、以下のコードでポップアップウインドウを出せるので、それで試すと画面もロックできて便利だった。

       private static void Show(SettingFolder settings)
       {
           var view = new MainWindow();
           view.Bind(new MainViewModel(settings));
           MessageBox.Show("open");
           Application.Run(view);
           MessageBox.Show("closed");
       }

MessageBox.Show()でウインドウが表示できるなんて、なんて便利なことか。Xlibなんてウインドウを表示するだけで数十行必要でGUIプログラミングは諦めたあの日。

プログラムを編集したら、あとは修正したプログラムをビルドする。

先程のソリューションエクスプローラーの「ショリューション'Cube.Pdf'(18/18プロジェクト)」を右クリックして「ソリューションのリビルド」をすると、以下に実行ファイルが出力される様子(これはフォルダ内をさまよってなんとか見つけた。なぜTestsに実行ファイルが出力されるんだろう)。

Cube.Pdf\Tests\Converter\bin\Any CPU\Debug\net45

リビルドされたCubePdf.exeを実行してみる。

画像7

すばらしい。

なんと素晴らしいことか。「open」ポップアップウインドウが表示された。

ポップアップウインドウの「OK」を押下するとCubePDFの画面が表示されるので、「キャンセル」を押下。

画像8

すばらしい。

CubePDFのダイアログを表示しているプログラムをたった数分で見つけることが出来た。VisualStudioを初めて操作したが、初めて操作してもなんとなく触れるという点、考えたとおりに操作できている点が素晴らしい。

JetBrainsのPyCharmでPythonを勉強していたが、わざわざ購入しなくても、VisualStudioのインストール時のオプションにPythonがあったので、これでいけそうだ。

次回は、ダイアログ画面を出さずに出力に挑戦。

いいなと思ったら応援しよう!