[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();
}

[C++] 125 FLTK : FileChooserの作成 Fl_File_Browser

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

元ソースコードを活用してFileChooserを作成しようとしましたが、どうやらC++03以前のレガシーC++で書かれているようで、加えて変数や関数の命名が抽象的かつ主体・客体が混在していてとても読みにくいため、Fl_File_Chooserのコンストラクタ以外はほぼ一から作成することにしました。

とりあえずFl_File_Browserに指定ディレクトリ内のファイルを全て表示させました。

ソースコードを読んでみて、FLTKの開発が遅々として進まない理由が少し分かったような気がします。