[C++] 126 FLTK : FileChooserの作成 最低限の機能実装

[M1 Mac, Big Sur 11.6.8, FLTK 1.3.8, NO IDE]

自製FileChooserに以下の機能を実装しました。元ソースコードを移植しようした時とは打って変わってシンプルな内容になりました。一から自分の好きなように書くとあっさりでした。

1.アプリ用ディレクトリの全ファイルをFl_File_Browserに表示。
2.ファイルをクリックしてファイルパスをFl_File_Inputに表示。
3.FileChooserを閉じて、カラーリストファイルを読み込む。

後はFl_File_BrowserのFilter機能、Closeボタン、プレビュー機能を実装して一旦完了とする予定です。

#include <FileChooser.h>
#include <FileChooser2.h>
#include <btnAction.h>

int BrowserType;
char pathname[FL_PATH_MAX]; // アプリ用ディレクトリ格納
char pathname2[FL_PATH_MAX]; // 選択ファイルパス格納

void fileListShow(const char* dirname)
{	
	// 設定ディレクトリの読込&全ファイル表示
	FileBrowser->load(dirname);

	// 設定ディレクトリをpathnameへコピー
	fl_filename_absolute(pathname, sizeof(pathname), dirname);
	cout << "pathname " << pathname << endl;

	inputFileName->value(dirname);
}

void BrowserTypeSet(int t) {
	cout << "int t " << t << endl;

	BrowserType = t;
	if (t == FileChooser::MULTI){
		FileBrowser->type(FL_MULTI_BROWSER);
	}else{
		FileBrowser->type(FL_HOLD_BROWSER);
	}

	if (t == FileChooser::CREATE){
		btnNew->activate();
	}else{
		btnNew->deactivate();
	}

	if (t == FileChooser::DIRECTORY){
		FileBrowser->filetype(Fl_File_Browser::DIRECTORIES);
	}else{
		FileBrowser->filetype(Fl_File_Browser::FILES);
	}
}

void FileBrowserCB()
{
	char *filename;

	// クリックしたファイルのファイル名を取得
	filename = (char *)FileBrowser->Fl_Browser::text(FileBrowser->Fl_Browser::value());
	cout << "filename " << filename << endl; 
	
	if (!filename) return;

	// pathname2を空にする
	pathname2[0] = '\0';

	// ディレクトリ名にファイル名を結合
	strcat(pathname2 ,pathname);
	strcat(pathname2 ,"/");
	strcat(pathname2 ,filename);

	cout << "pathname2 " << pathname2 << endl; 

	//ファイルパスを表示
	inputFileName->value("");
	inputFileName->value(pathname2);

}

void btnOKCB(Fl_Return_Button*, void*)
{
	// FileChooserを閉じる
	chooser->Fl_Window::hide();
}