Gtk3アプリ TreeViewプログラム自動生成ツール

### Gtk3アプリ TreeViewプログラム自動生成ツール

https://github.com/iotagtk1/TreeViewGenerator

[Release](https://github.com/iotagtk1/TreeViewGenerator/releases)


[treeview-tutorial](
https://www.mono-project.com/docs/gui/gtksharp/widgets/treeview-tutorial/)で書かれているサンプルを自動生成するツールを作りました。
RiderのエクスプローラーからDbを右クリックしてツールを起動させます。
Sqliteのテーブルからカラムを解析し、TreeView生成プログラムを生成します。ComboViewも生成できます。


<img width="400" alt="Screenshot from 2021-09-24 12-05-10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/c4a95e27-837d-2db9-a598-5b033e8a04b0.png">

#### Riderの設定画面で外部ツールを登録する

<img width="500" alt="Screenshot from 2021-09-24 20-03-24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/1830975b-4bf4-68d5-f0d8-0927ffc0c25b.png">

##### 引数を登録する

```
引数はReadMeを参照してください
```

#### エクスプローラーからDbを右クリックしてツールを起動

<img width="300" alt="Screenshot from 2021-09-24 12-09-52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/c1dbd354-e23d-d170-ec1d-68992a626088.png">
Table名をクリックするとプログラムが自動生成されます。
書き出したいColum名を制御できます。
<img width="500" alt="Screenshot from 2021-09-24 23-46-06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/efd7d17e-6629-1959-c6a4-88be98b5afed.png">

TreeViewかComboBoxを選択できます。
書き出されるModelの変数名、ListStoreの変数名、サブ名前空間をなどをTableごとに変更できます。
<img width="350" alt="Screenshot from 2021-09-24 23-48-49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/8535df35-2aca-ff84-8498-0ea220ed21e7.png">

#### テーブルから生成されるプログラム

TreeViewの他にComobViewも書き出せます。

```cs
namespace TreeViewGenerator.SubNameSpace1 {
[UI] private readonly Gtk.TreeView TreeView1 = null;
private void _mkTreeView()
{
    Gtk.ListStore ListStore1 = new Gtk.ListStore (typeof (Model1));

       
    Gtk.TreeViewColumn typeColumn = new Gtk.TreeViewColumn ();
    typeColumn.Title = "type";
    Gtk.CellRendererToggle typeCell = new Gtk.CellRendererToggle();
    typeColumn.PackStart(typeCell, true);
    typeCell.Toggled += delegate(object o, ToggledArgs args)
    {
        TreeIter iter;
        if ( ListStore1.GetIterFromString(out iter, args.Path))
        {
            Model1 Model11 = (Model1) ListStore1.GetValue(iter, 0);
            Model11.type = Model11.type == true ? false : true;
        }
    };
       
       
    List<Model1> Model1Array = new List<Model1>();

    foreach (Model1 Model11 in Model1Array) {
        ListStore1.AppendValues (Model11);
    }

    TreeView1.Model = ListStore1;

    TreeView1.AppendColumn(typeColumn);

    typeColumn.SetCellDataFunc (typeCell, new Gtk.TreeCellDataFunc (Rendertype));
        
}


    private void Rendertype(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.ITreeModel model, Gtk.TreeIter iter)
    {
        Model1 Model11 = (Model1) model.GetValue (iter, 0);
    }
}
```


#### 書き出すプログラムのテンプレートの編集が可能

ツールのTemplateボタンからテンプレートフォルダが開きます。
T4ファイル形式でテンプレートを編集できます。
追記
ビルドしなおす必要があります

<img width="300" alt="Screenshot from 2021-09-24 20-08-01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/eeb83b3f-fded-9786-799b-be50e2fd2b6e.png">


#### T4テンプレートについて

https://qiita.com/iota_11/items/b877aa430801968eba31

カスタムテンプレートに設定されているUIライブラリについてはここを使っています

https://qiita.com/iota_11/items/cf5ac9c11969ad8b8307


[Gtk3アプリ ファイルダイアログを利用する](https://qiita.com/iota_11/items/359b21e3c3a2bf155130)へ続く