[C++] 138 FLTK : ダブルクリック時の動作 Fl::event_clicks()

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

ダブルクリック時の条件分岐にはFl::event_clicks()を使います。Fl_File_Chooser2.cppのソースコードを読んでその存在を知りました。公式サイトのEvents handling functionsに説明があります。

FLTKは結構使い込んでいますが、まだまだ知らないことだらけです。

void FileBrowserCB()
{
	char *fileName;

	if (Fl::event_clicks()) {
		cout << "ダブルクリックしました" << endl;
		// 以下、ダブルクリックした時の動作を書く
	}

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

	selectPath[0] = '\0';

	// ディレクトリ名にファイル名を結合
	strcat(selectPath ,appDir);
	strcat(selectPath ,"/");
	strcat(selectPath ,fileName);

	cout << "selectPath " << selectPath << endl; 

	if (browserType == 1) { // FL_MULTI_BROWSERになっている場合
		char* name = new char[strlen(selectPath) + 1];
    	strcpy(name, selectPath);
		selectPaths.push_back(name);
	}

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

}

[C++] 137 FLTK : ファイル検索アプリのグレードアップ着手 FileChooser

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

先月7月上旬で開発を中断していたファイル検索アプリをさらにグレードアップさせることにしました。

とりあえずカラーアプリ製作時に作成したFileChooserを導入しましたが、これは固定したディレクトリからファイルを選択する機能しかないため、ファイルブラウザとしての機能を追加する必要があります。

[C++] 136 FLTK : Final Cut Proのライブラリ掃除 改良版

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE, C++17]

前回の続きです。

サイズ的にはあまり重要ではありませんが、Thumnail Mediaディレクトリも空にするようにしました。

これでFinal Cut Library ManagerというアプリのClean機能と同等になりました。

void FCPClean(){
    string dirPath = "/movie"; // ライブラリ保存ディレクトリ
    vector<string> paths = getFilePath(dirPath, "fcpbundle");

    int num = 1;
    for (string path:paths){
        cout << num << " " << path << endl;

        vector<string> dirs = getDirPath(path);

        int num2 = 1; 
        for (string dir:dirs){

            if (dir.find("High Quality Media") != std::string::npos){
                cout << "High Quality Mediaディレクトリ " << num2 << " " << dir << endl;

                struct stat statBuf;
                int detect = stat(dir.c_str(), &statBuf);
                if (detect == 0){
                    vector<string> dirs2 = getDirPath(dir);
                    for (string dir:dirs2){
                        cout << "削除対象dir " << dir << endl;
                        std::filesystem::remove_all(dir);
                    }
                } else {
                    cout << "ディレクトリは削除済みです" << endl;
                }
                num2 += 1;
            }
        }

        int num3 = 1; 
        for (string dir:dirs){

            if (dir.find("Thumbnail Media") != std::string::npos){
                cout << "Thumbnail Mediaディレクトリ " << num3 << " " << dir << endl;

                struct stat statBuf;
                int detect = stat(dir.c_str(), &statBuf);
                if (detect == 0){
                    vector<string> dirs2 = getDirPath(dir);
                    for (string dir:dirs2){
                        cout << "削除対象dir " << dir << endl;
                        std::filesystem::remove_all(dir);
                    }
                } else {
                    cout << "ディレクトリは削除済みです" << endl;
                }
                num3 += 1;
            }
        }
        num += 1;
    }

    output_line->insert("FCP Clean完了!\n");
}