[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]
Fl_Multiline_Outputがスクロールバーを内包しないことを知り少なからず落胆しましたが、気を取り直してFl_Text_DisplayでGUIを再構築しました。
字面からのイメージで適当に組んでみたら、たまたま上手くいきました。
表示文字列のstringを作成してFl_Text_Bufferに放り込み、Fl_Text_Displayで表示するという流れです。
初期状態はWindowと同じ色ですが、Fl_Text_Bufferを読み込むと設定した色に変わります。
Fl_Text_Display *textDisplay;
Fl_Text_Buffer *textBuffer;
string bufferstr;
void formatConvert(){
string path2;
textBuffer = new Fl_Text_Buffer(0, 12800);
// フォーマットリストのindex取得
int formatNum = choice->value();
// 変換元のファイルパス取得
const char* path = input_line->value();
cout << "path "<< path << endl;
// stringへ変換
string path_str = string(path);
// ファイルパスに半角スペースが含まれる場合はアンダースコアに置き換えたファイル名に変更
if (path_str.find(" ") != std::string::npos)
{
path2 = spt.splitJoin2(path_str, " ", "_", 0, -1);
// 元ファイルをリネーム
rename(path, path2.c_str());
} else {
path2 = path_str;
}
cout << "path2 "<< path2 << endl;
// 自製ライブラリSplitによりファイル名から拡張子を削除
string prefix = spt.splitJoin(path2, ".", 0, -2);
cout << "prefix "<< prefix << endl;
// 変換先のファイルパス作成
string path3 = prefix + fmt[formatNum];
cout << "path3 "<< path3 << endl;
// ファイル変換コマンド作成
string cmd = "/opt/homebrew/Cellar/ffmpeg/5.1/bin/ffmpeg -y -i " + path2 + " -f " + fmt[formatNum] + " " + path3 + " && echo ffmpeg完了";
cout << "cmd: "<< cmd << endl;
string appendstr = "cmd: " + cmd + "\n";
bufferstr += appendstr;
cout << "bufferstr: " << bufferstr << endl;
textBuffer->append(bufferstr.c_str());
textDisplay->buffer(textBuffer);
outputTextMake(cmd);
browser->load(outputText);
int line_num = browser->size();
browser->bottomline(line_num);
cout << "フォーマット変換完了!" << endl;
}
Fl_Text_Display* textDisplay = new Fl_Text_Display(10,165,340,130,"My Output");
textDisplay->color(fl_rgb_color(188,226,232)); // みずいろ
textDisplay->textsize(12);
textDisplay->wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 0); // 折り返し設定
textDisplay->labelsize(10);
textDisplay->labelcolor(fl_rgb_color(255,255,255));
textDisplay->align(Fl_Align(FL_ALIGN_TOP_RIGHT));