danpapa blog

趣味のプログラミング等について

CodeBlocksーDSTool-ScriptEditor-Format-02

先回の続きです。
danpapa-hry.hateblo.jp

小さいアプリを作ってみよう

まず画面はこんな感じ。(適当に)
赤色:wxListBox 青色:wxTextCtrl 緑色:wxFileDialog
f:id:danpapa_hry:20190312204212p:plain:w300

「Format読込み」ボタンのコード

void ScriptEditor_FormatDialog::OnButton1Click(wxCommandEvent& event)
{
    wxString str;
    wxTextFile FormatFile;

    if (FileDialog1->ShowModal() == wxID_CANCEL){
        return;
    }

    FormatFile.Open(FileDialog1->GetPath());
        str = FormatFile.GetFirstLine();
        ListBox1->Append(str);

        while(!FormatFile.Eof())
        {
            str = FormatFile.GetNextLine();
            ListBox1->Append(str);
        }
    FormatFile.Close();
}

これでLINEのFormatファイルを開くとこんな感じになります。
(Formatファイルといっても、ただのテキストファイルです)
f:id:danpapa_hry:20190312210955p:plain:w300

「Script実行」ボタンのコード
ここからが、本番ですね。
スクリプトは「rows: 6,mem[2999];」と仮定します。
これは mem[2999] = フォーマット6行目の文字
ということで、画層になります。(行数はゼロから始まる)

まずはmem[0]~mem[2999]をヘッダーに宣言しておきます。

class ScriptEditor_FormatDialog: public wxDialog
{
    public:

        ScriptEditor_FormatDialog(wxWindow* parent,wxWindowID id = -1);
        virtual ~ScriptEditor_FormatDialog();

    private:
        wxString mem[3000];
        //(*Handlers(ScriptEditor_FormatDialog)
        void OnButton1Click(wxCommandEvent& event);
        void OnInit(wxInitDialogEvent& event);
        //*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

privateのすぐ下に追加しました。

次に関数です。SplitScript(wxString script)というものを作ります。
まずはヘッダーにこれ

private:
        wxString mem[3000];
        void SplitScript(wxString script);

さっきの下に追加です。

次にソースです。

void ScriptEditor_FormatDialog::SplitScript(wxString script)
{
}

ここでは、「rows: 6,mem[2999]; rows: 8,mem[2998];」と1行にまとめて書いたスクリプトを「;」で分ける処理を書きます。

あ、、、面倒になってきたw まとめて書きます。
ヘッダー(.h)

private:
        wxString mem[3000];
        void SplitScript(wxString script);
        void RunScript(wxString script);
        int GetIvalue(wxString param);
        int GetMemIndex(wxString param);
        bool CheckMem(wxString param);

ソース(.cpp)

void ScriptEditor_FormatDialog::SplitScript(wxString script)
{
}
void ScriptEditor_FormatDialog::RunScript(wxString script)
{
}
int ScriptEditor_FormatDialog::GetIvalue(wxString param)
{
    return 0;
}
int ScriptEditor_FormatDialog::GetMemIndex(wxString param)
{
    return 0;
}
bool ScriptEditor_FormatDialog::CheckMem(wxString param)
{
    return true;
}

「RunScript」:コマンド別に処理
「GetIvalue」:mem[2999]等からintを取得
「GetMemIndex」:mem[2999]等からintで2999を取得
「CheckMem」:メモリかどうかをチェック

こんな感じでしょうか?もしかしたら追加があるかもしれませんが、とりあえずこれらにコードを書いていきましょう。次回からw