[C++] 65 FLTK : xlsx変換アプリ / MakefileからCMakeLists.txtへの移植

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

自製Makefileの生成するコマンドを見ながらCMakeLists.txtへ移植しました。

CMakeが作成したMakefileが生成するコマンドについては以下の行を追記して内容を確認できます。

set(CMAKE_VERBOSE_MAKEFILE ON)

Objective-Cのappファイルと同様、こちらもボタンを押下してもクラッシュしませんでした。自製Makefileではできない補完をしているのでしょう。

C++でappファイルに問題がないとなるとObjective-Cに戻って開発を進める必要がありません。

Cocoaアプリの統一感のある洗練された外観も捨てがたいので何か別のアプリで再チャレンジしたいところです。

cmake_minimum_required(VERSION 3.1)

# Project
Project(XlsxConvertor VERSION 1.0.0)
FIND_PACKAGE(FLTK REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
find_library(COCOA Cocoa)

set(CMAKE_CXX_STANDARD 11)

# make時の生成コマンドをターミナルに表示する(デフォルトでは非表示)
set(CMAKE_VERBOSE_MAKEFILE ON)

# Info.plist
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
set(MACOSX_BUNDLE_COPYRIGHT "Copyright (C) 2022")
set(MACOSX_BUNDLE_INFO_STRING "Convert tool for XLSX")

# XlsxConvertor
add_executable(${PROJECT_NAME}
    MACOSX_BUNDLE
    ./src/XlsxConvertor.cpp
    ./src/process.cpp
    ./src/modalDialog.cpp
    ./include/process.h
    ./include/modalDialog.h
    )

set(INCDIR /include)
set(INCDIR ${INCDIR} /opt/homebrew/Cellar/libpng/1.6.37/include)
set(INCDIR ${INCDIR} /opt/homebrew/Cellar/fltk/1.3.8/include)
set(INCDIR ${INCDIR} /opt/homebrew/Cellar/jpeg/9e/include)
set(INCDIR ${INCDIR} /Library/Frameworks/Python.framework/Versions/3.10/include/python3.10)
include_directories(${INCDIR})

set(LIBS dl)
set(LIBS ${LIBS} z pthread c++)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk_forms.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk_gl.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk_images.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/jpeg/9e/lib/libjpeg.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/libpng/1.6.37/lib/libpng.dylib)
set(LIBS ${LIBS} /opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk.dylib)
set(LIBS ${LIBS} /Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib)

set(LIBDIR /opt/homebrew/Cellar/jpeg/9e/lib)
set(LIBDIR ${LIBDIR} /opt/homebrew/Cellar/libpng/1.6.37/lib)
set(LIBDIR ${LIBDIR} /opt/homebrew/Cellar/fltk/1.3.8/lib)
set(LIBDIR ${LIBDIR} /usr/local/lib /Library/Frameworks/Python.framework/Versions/3.10/lib)
link_directories(${LIBDIR})

target_link_libraries(${PROJECT_NAME}
    ${FLTK}
    ${OpenGL}
    ${LIBS}
    ${COCOA})

[C++] 64 FLTK : ドラッグ&ドロップ

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

Objective-Cのドラッグ&ドロップが今の私にはあまりにも難解なので、FLTKではどうやって実装していたか振り返ります。かなり簡単に実装できます。

FL_Boxでファイルをドロップする領域を指定し、ドロップされたファイルの情報をFL_Boxの引数で指定したFL_Inputに渡します。単純明快です。

Objective-Cのドラッグ&ドロップについては必須ではなく努力目標にして、FLTKアプリのCMakeLists.txt作成に優先して取り組むことにします。

同じ内容の実装でもC++(FLTK)とObjective-Cでこれだけ難易度が違うと難しい方を学ぼうとする気力がなかなかわきません。

Xcodeで書けばいいのですが、xibファイルやStoryboardを扱いたくないのでモチベが上がらないです。

<該当箇所のみ>

class Box : Fl_Box {
    Fl_Input* input_line2;

    public:
        Box(int, int, int, int, Fl_Input*);
    private:
        auto handle(int) -> int override;
};

Box::Box(int x, int y, int width_input, int height_input, Fl_Input* input) : 
    Fl_Box(FL_NO_BOX, x, y, width_input, height_input, "") {
    this->input_line2 = input;
    }

auto Box::handle(int event) -> int {
    switch (event) {
        case FL_DND_DRAG:
        case FL_DND_ENTER:
        case FL_DND_RELEASE:
            return 1;

        case FL_PASTE:
            input_line2->value(Fl::event_text());
            input_line2->textsize(12);
            input_line2->textfont(FL_HELVETICA);

            return 1;

        default:
            return Fl_Box::handle(event);
    }
}

int main(int argc, char **argv) {
    Box *box = new Box(0, 0, 360,220, input_line);
}