Skip to content

Commit

Permalink
Replace std::string with a custom string class (#56)
Browse files Browse the repository at this point in the history
* replace std::string with a custom string class

* remove unnecessary include guard

* fix a bug where sometimes tuw can't redirect stdout on linux
  • Loading branch information
matyalatte authored Nov 4, 2024
1 parent 4dce86c commit cb6c81b
Show file tree
Hide file tree
Showing 20 changed files with 948 additions and 286 deletions.
44 changes: 22 additions & 22 deletions include/component.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#pragma once
#include <string>
#include <vector>
#include "rapidjson/document.h"
#include "ui.h"
#include "string_utils.h"
#include "validator.h"

#define UNUSED(x) (void)(x)
Expand All @@ -11,25 +11,25 @@
class Component {
protected:
void* m_widget;
std::string m_label;
std::string m_id;
tuwString m_label;
tuwString m_id;
bool m_has_string;
bool m_is_wide;
Validator m_validator;
uiLabel* m_error_widget;
bool m_optional;
std::string m_prefix;
std::string m_suffix;
tuwString m_prefix;
tuwString m_suffix;

private:
bool m_add_quotes;

public:
explicit Component(const rapidjson::Value& j);
virtual ~Component();
virtual std::string GetRawString() { return "";}
std::string GetString();
const std::string& GetID() const { return m_id; }
virtual tuwString GetRawString() { return "";}
tuwString GetString();
const tuwString& GetID() const { return m_id; }

virtual void SetConfig(const rapidjson::Value& config) { UNUSED(config); }
virtual void GetConfig(rapidjson::Document& config) { UNUSED(config); }
Expand All @@ -38,7 +38,7 @@ class Component {
bool IsWide() const { return m_is_wide; }

bool Validate(bool* redraw_flag);
const std::string& GetValidationError() const;
const tuwString& GetValidationError() const;
void PutErrorWidget(uiBox* box);

static Component* PutComponent(uiBox* box, const rapidjson::Value& j);
Expand All @@ -47,10 +47,10 @@ class Component {
// containers for Combo and CheckArray
class MultipleValuesContainer {
protected:
std::vector<std::string> m_values;
std::vector<tuwString> m_values;

public:
void SetValues(std::vector<std::string> values){
void SetValues(std::vector<tuwString> values){
m_values = values;
}
};
Expand All @@ -74,67 +74,67 @@ class StringComponentBase : public Component {

class FilePicker : public StringComponentBase {
private:
std::string m_ext;
tuwString m_ext;
public:
std::string GetRawString() override;
tuwString GetRawString() override;
FilePicker(uiBox* box, const rapidjson::Value& j);
void SetConfig(const rapidjson::Value& config) override;
void OpenFile();
};

class DirPicker : public StringComponentBase {
public:
std::string GetRawString() override;
tuwString GetRawString() override;
DirPicker(uiBox* box, const rapidjson::Value& j);
void SetConfig(const rapidjson::Value& config) override;
void OpenFolder();
};

class ComboBox : public StringComponentBase, MultipleValuesContainer {
public:
std::string GetRawString() override;
tuwString GetRawString() override;
ComboBox(uiBox* box, const rapidjson::Value& j);
void GetConfig(rapidjson::Document& config) override;
void SetConfig(const rapidjson::Value& config) override;
};

class RadioButtons : public StringComponentBase, MultipleValuesContainer {
public:
std::string GetRawString() override;
tuwString GetRawString() override;
RadioButtons(uiBox* box, const rapidjson::Value& j);
void GetConfig(rapidjson::Document& config) override;
void SetConfig(const rapidjson::Value& config) override;
};

class CheckBox : public Component {
private:
std::string m_value;
tuwString m_value;
public:
std::string GetRawString() override;
tuwString GetRawString() override;
CheckBox(uiBox* box, const rapidjson::Value& j);
void GetConfig(rapidjson::Document& config) override;
void SetConfig(const rapidjson::Value& config) override;
};

class CheckArray : public StringComponentBase, MultipleValuesContainer {
public:
std::string GetRawString() override;
tuwString GetRawString() override;
CheckArray(uiBox* box, const rapidjson::Value& j);
void GetConfig(rapidjson::Document& config) override;
void SetConfig(const rapidjson::Value& config) override;
};

class TextBox : public StringComponentBase {
public:
std::string GetRawString() override;
tuwString GetRawString() override;
TextBox(uiBox* box, const rapidjson::Value& j);
void SetConfig(const rapidjson::Value& config) override;
};

class IntPicker : public StringComponentBase {
public:
IntPicker(uiBox* box, const rapidjson::Value& j);
std::string GetRawString() override;
tuwString GetRawString() override;
void GetConfig(rapidjson::Document& config) override;
void SetConfig(const rapidjson::Value& config) override;
};
Expand All @@ -143,7 +143,7 @@ class IntPicker : public StringComponentBase {
class FloatPicker : public StringComponentBase {
public:
FloatPicker(uiBox* box, const rapidjson::Value& j);
std::string GetRawString() override;
tuwString GetRawString() override;
void GetConfig(rapidjson::Document& config) override;
void SetConfig(const rapidjson::Value& config) override;
};
Expand Down
8 changes: 4 additions & 4 deletions include/exe_container.h
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#pragma once
#include <string>
#include "rapidjson/document.h"
#include "json_utils.h"
#include "string_utils.h"

class ExeContainer {
private:
std::string m_exe_path;
tuwString m_exe_path;
uint32_t m_exe_size;
rapidjson::Document m_json;

Expand All @@ -15,8 +15,8 @@ class ExeContainer {
m_json() {
m_json.SetObject();
}
json_utils::JsonResult Read(const std::string& exe_path);
json_utils::JsonResult Write(const std::string& exe_path);
json_utils::JsonResult Read(const tuwString& exe_path);
json_utils::JsonResult Write(const tuwString& exe_path);
bool HasJson() { return m_json.IsObject() && !m_json.ObjectEmpty(); }
void GetJson(rapidjson::Document& json) { json.CopyFrom(m_json, json.GetAllocator()); }
void SetJson(rapidjson::Document& json) { m_json.CopyFrom(json, m_json.GetAllocator()); }
Expand Down
10 changes: 5 additions & 5 deletions include/exec.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#pragma once
#include <string>
#include "string_utils.h"

struct ExecuteResult {
int exit_code;
std::string err_msg;
std::string last_line;
tuwString err_msg;
tuwString last_line;
};

// When use_utf8_on_windows is true,
// Tuw converts output strings from UTF-8 to UTF-16 on Windows.
ExecuteResult Execute(const std::string& cmd, bool use_utf8_on_windows = false);
ExecuteResult LaunchDefaultApp(const std::string& url);
ExecuteResult Execute(const tuwString& cmd, bool use_utf8_on_windows = false);
ExecuteResult LaunchDefaultApp(const tuwString& url);
10 changes: 5 additions & 5 deletions include/json_utils.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// Functions related to json.

#pragma once
#include <string>
#include "rapidjson/document.h"
#include "string_utils.h"

enum CmdPredefinedIds: int {
CMD_ID_PERCENT = -1,
Expand All @@ -18,17 +18,17 @@ namespace json_utils {

struct JsonResult {
bool ok;
std::string msg;
tuwString msg;
};

#define JSON_RESULT_OK { true, "" }

// Max binary size for JSON files.
#define JSON_SIZE_MAX 128 * 1024

JsonResult LoadJson(const std::string& file, rapidjson::Document& json);
JsonResult SaveJson(rapidjson::Document& json, const std::string& file);
std::string JsonToString(rapidjson::Document& json);
JsonResult LoadJson(const tuwString& file, rapidjson::Document& json);
JsonResult SaveJson(rapidjson::Document& json, const tuwString& file);
tuwString JsonToString(rapidjson::Document& json);

const char* GetString(const rapidjson::Value& json, const char* key, const char* def);
bool GetBool(const rapidjson::Value& json, const char* key, bool def);
Expand Down
16 changes: 11 additions & 5 deletions include/main_frame.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#pragma once
#include <vector>
#include <string>
#include "rapidjson/document.h"
#include "component.h"
#include "json_utils.h"
#include "string_utils.h"
#include "ui.h"

// Main window
Expand All @@ -26,9 +26,15 @@ class MainFrame {
void CreateMenu();
json_utils::JsonResult CheckDefinition(rapidjson::Document& definition);
void UpdateConfig();
void ShowSuccessDialog(const std::string& msg, const std::string& title = "Success");
void ShowErrorDialog(const std::string& msg, const std::string& title = "Error");
void JsonLoadFailed(const std::string& msg);
void ShowSuccessDialog(const char* msg, const char* title = "Success");
void ShowErrorDialog(const char* msg, const char* title = "Error");
inline void ShowSuccessDialog(const tuwString& msg, const tuwString& title = "Success") {
ShowSuccessDialog(msg.c_str(), title.c_str());
}
inline void ShowErrorDialog(const tuwString& msg, const tuwString& title = "Error") {
ShowErrorDialog(msg.c_str(), title.c_str());
}
void JsonLoadFailed(const tuwString& msg);

public:
explicit MainFrame(const rapidjson::Document& definition =
Expand All @@ -38,7 +44,7 @@ class MainFrame {
void UpdatePanel(unsigned definition_id);
void OpenURL(int id);
bool Validate();
std::string GetCommand();
tuwString GetCommand();
void RunCommand();
void GetDefinition(rapidjson::Document& json);
void SaveConfig();
Expand Down
Loading

0 comments on commit cb6c81b

Please sign in to comment.