[C++] 277 FLTK : ChatGPTアプリの製作 その6 JSONをドラッグ&ドロップ

[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT Plus, NO IDE]

JSONファイルをGUIにドラッグ&ドロップできるようにしました。

ChatGPTの回答文からコードを取り出すことはできましたが、改行やインデント整形ができません(GUIの左下)。Fl_Text_Displayは文字列リテラルであればコードをきれいに並べて表示できます。文字列変数の場合はどうすればよいのか調査中です。

#pragma once
#include <FLstd.h>
#include "cppstd.h"

class Box : public Fl_Box {
    Fl_Input* input;

    public:
        Box(int, int, int, int, Fl_Input*);
    private:
        int handle(int);
};
#include "Box.h"

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 = input;
}

int Box::handle(int event){
    switch (event) {
        case FL_DND_DRAG:
        case FL_DND_ENTER:
        case FL_DND_RELEASE:
            return 1;
        case FL_PASTE:
            input -> value(Fl::event_text()); 
            input -> textsize(12);

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

[C++] 276 FLTK : ChatGPTアプリの製作 その5 JSONを読み込む

[M1 Mac, Monterey 12.6.3, clang 13.0.0, FLTK 1.3.8, ChatGPT Plus, NO IDE]

過去の質問回答が入っているJSONファイルを読み込み、追加の質問が出来るようにしました。

今のところJSONファイルのパスを直接入力する仕様ですが、ドラッグ&ドロップやFileChooserにも対応する予定です。

あとは回答からソースコード部分を取り出して、見やすくすることぐらいでしょうか。

void loadCB(Fl_Widget*, void*){
    load = true;
    sendNum = 0;
    input -> value("");
    sysInput -> value("");

    Fl_Text_Buffer* bufferDelete = new Fl_Text_Buffer();
    bufferDelete -> text("");
    output->buffer(bufferDelete);

    const char* jsonLoadFile = jsonInput -> value();
    // JSONファイルの内容をjsonに変換
    std::ifstream ifs(jsonLoadFile);
    json jsonLoadData = json::parse(ifs);
    jsonData = jsonLoadData;

    // jsonをstringに変換
    string jsonLoadString = jsonLoadData.dump(2);

    Fl_Text_Buffer*bufferLoad = new Fl_Text_Buffer();
    bufferLoad -> text(jsonLoadString.c_str());
    jsonDisplay -> buffer(bufferLoad);
    jsonDisplay -> wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 5);

    // 現在の行数を取得
    int lineCount2 = jsonDisplay->buffer()->count_lines(0, jsonDisplay->buffer()->length());

    // 最終行が見えるようにスクロールを設定
    jsonDisplay->scroll(lineCount2, 0);

}