[C++] 88 FLTK : Fl_Tabsのインデックス値取得

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

Fl_Tabsのインデックス値を取得し、押下したカラーボタンの内容を3次元配列データから取り出すようにしました。

Tabのインデックス値取得はfor文内で変数に代入する方法ではうまくいかず、関数の戻り値にするとあっさり出来ました。

ようやく次の段階に移ることができます。選択した色の表示、カラーコードの変換などです。

extern Fl_Tabs *tabs;
extern string colorList[3][140];
extern string colorList2[4][3][120];
extern vector<string> tab_names;

int getIndex(vector<string> &input, string searched) {
    for (int i = 0; i < input.size(); i++) {
        if (input[i] == searched) {
            return i;
        }
    }
    return -1;
}

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;

    int tab_num = getIndex(tab_names,lbl_str);
    cout << "tab_num " << tab_num << endl;

    if (tab_num == 0){
        string* name = &(colorList[0][num]);
        const char* name_c = name->c_str();
        name_input->value("");
        name_input->insert(name_c);

        const char* romaji_c = "-";
        romaji_input->value("");
        romaji_input->insert(romaji_c);

        string* color = &(colorList[2][num]);
        const char* color_c = color->c_str();
        code_input->value("");
        code_input->insert(color_c);

    } else {
        string* name = &(colorList2[tab_num-1][0][num]);
        const char* name_c = name->c_str();
        name_input->value("");
        name_input->insert(name_c);

        string* romaji = &(colorList2[tab_num-1][1][num]);
        const char* romaji_c = romaji->c_str();
        romaji_input->value("");
        romaji_input->insert(romaji_c);

        string* color = &(colorList2[tab_num-1][2][num]);
        const char* color_c = color->c_str();
        code_input->value("");
        code_input->insert(color_c);
    }
}