[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]
WindowsPCとSMB接続した場合は共有フォルダがマウントされるため、Fl_Light_Buttonを使ってマウント解除できるようにしました。
Fl_Toggle_Buttonでもよかったのですが、押しっぱなしになった時の色を設定できないので、ボタンの一部ながら色を自由に選べるFl_Light_Buttonを選択しました。
これでFinderを一切触らずにファイル転送できます。
Fl_Light_Button *umnt_btn;
int choice_num;
int mount = 0; // マウント状態
string cmd_unmount;
void conn_cb(Fl_Widget*, void*) {
string cmd_conn;
choice_num = choice -> value();
switch(choice_num){
case 0:{
cmd_conn = "sftp xxx.local"; // Mac mini Intel
break;
}
case 1:{
cmd_conn = "sftp xxx.local"; // MacBook Air M1
break;
}
case 2:{
cmd_conn = "sftp xxx.local"; // MacBook Intel
break;
}
case 3:{
mount = 1;
umnt_btn -> value(1);
cmd_conn = "mount_smbfs //[ユーザ名]@192.168.xx.x/share /Users/[ユーザ名]/share"; // WindowsPC
cmd_unmount = "umount /Users/[ユーザ名]/share";
break;
}
case 4:{
cmd_conn = "sftp xxx.local"; // LinuxPC
break;
}
}
cout << "cmd_conn " << cmd_conn << endl;
conn_input -> value("");
conn_input -> value(cmd_conn.c_str());
// クリップボードにコピー
string cmdConnCopy = "echo '" + cmd_conn + "' | LANG=ja_JP.UTF-8 pbcopy";
output_line -> insert(cmdConnCopy.c_str());
output_line -> insert("\n");
system(cmdConnCopy.c_str());
}
void umnt_cb(Fl_Widget*, void*) {
if (mount == 1){
system(cmd_unmount.c_str());
mount == 0;
}
}
// main関数内
umnt_btn = new Fl_Light_Button(295,110,50,25,"MNT");
umnt_btn->color(fl_rgb_color(112,128,144));
umnt_btn->labelcolor(fl_rgb_color(255,239,213));
umnt_btn->selection_color(fl_rgb_color(248,184,98)); // ON時のボタンの色
umnt_btn->labelsize(14);
umnt_btn->callback(umnt_cb);