[C++] 87 FLTK : 長整数型を引数とするcallback関数

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

for文で一気に作成するButtonのcallback関数の書き方で難航しました。左側Tab内のButtonを押して、色名やカラーコードなどその内容を右上のFl_inputに表示します。

Fl_Callback1(Fl_Widget *, long)という長整数型データを第2引数とするcallback関数を使うことで解決しました。第2引数としてButtonのインデックス(通し番号)を設定しています。

今回は有りもので何とかなりましたが、Fl_Callbackを継承すれば好きなデータ型で独自のクラスを作れるでしょう。

Java(Swing)の場合はfor文の中でActionListenerを使えたものの、さすがにFLTKではcallback関数の定義をfor文内に埋め込みできず、加えてButtonのラベルをうまく取得できなくてさすがに詰んだのではないかと一時は諦めかけました。

最大の難関をクリアできたので、後は何とかなると思います。

void getColor(Fl_Widget*, long num){
    cout << "num " << num << endl;

    Fl_Widget* tab = tabs->value(); // 有効なタブのポインタ
    const char* lbl = tab->label(); // タブのラベル
    cout << "lbl " << lbl << endl;
    string lbl_str = (string)lbl;

    if (lbl_str == tab_names[0]){
        string* color_name = &(colorList[0][num]);
        const char* color_name_p = color_name->c_str();
        name_input->insert(color_name_p);
    } 
}

<中略>

button->callback(getColor,(long)num);