Open m-tmatma opened 4 years ago
趣旨は理解しましたが、難しいだろうな、と思いました。
struct CommonSetting_CustomMenu
{
WCHAR m_szCustMenuNameArr [MAX_CUSTOM_MENU][MAX_CUSTOM_MENU_NAME_LEN + 1];
int m_nCustMenuItemNumArr [MAX_CUSTOM_MENU];
EFunctionCode m_nCustMenuItemFuncArr[MAX_CUSTOM_MENU][MAX_CUSTOM_MENU_ITEMS];
KEYCODE m_nCustMenuItemKeyArr [MAX_CUSTOM_MENU][MAX_CUSTOM_MENU_ITEMS];
bool m_bCustMenuPopupArr [MAX_CUSTOM_MENU];
};
struct CommonSetting_CustomMenu
{
//! 定義済みカスタムメニューの数
int m_nCustMenuNum;
//! カスタムメニュー定義の配列
struct CommonSetting_CustomMenuDef
{
WCHAR m_szCustMenuName[MAX_CUSTOM_MENU_NAME_LEN + 1];
bool m_bCustMenuPopup; //!< ポップアップメニューかどうか
int m_nCustMenuItemNum; //!< メニュー項目数
//! メニュー項目定義の配列
struct CommonSetting_CustomMenuItem
{
EFunctionCode m_nCustMenuItemFunc; //!< 機能ID
KEYCODE m_nCustMenuItemKey; //!< ニーモニック
} m_aCustMenuItemArr[MAX_CUSTOM_MENU_ITEMS];
} m_aCustomMenuArr[MAX_CUSTOM_MENU];
};
おそらく、現状の古臭いデータ構造のほうが、拡張性は高いと思います。
古臭いデータ構造の場合、影響があるのはその項目の配列のみで、 他の配列には影響を与えないことができます。
論理的なデータ構造単位に配列を組みなおしてしまうと、 一つメンバーデータの追加・削除を行っただけで配列領域全部の構造がズレてしまいます。
ちなみに、CommonSettings_CustomMenuは、 サクラエディタの全設定項目で ACHAR型 の設定項目を持つ唯一の構造体です。
独自定義の KEYCODE
型が ACHAR 型と同じ char
型を意味するからなんですが、
ここに入る値は「文字」ではなくてWindowsの仮想キーコード(0~255の数値)なので
厳密にいうと「入出力データの型を取り違えている」ような気がします。
CDataProfileのリファクタリング予定には、その辺の対策案が組み込まれていた理します。 https://github.com/sakura-editor/sakura/pull/1152/commits/669b4dc04de7b979df3cfa028f8838efd049171b
まー、「やらん」というわけじゃないですけど、 「難しいんだろうな・・・」という印象を持っています。
要望機能
カスタムメニューデータを管理する CommonSetting_CustomMenu をリファクタリングしたい
現状
https://github.com/sakura-editor/sakura/blob/a48fdb5ff3f7fffd7f282025f19f349356f44895/sakura_core/env/CommonSetting.h#L441-L451
変更案
現状の問題点
メニュー項目ごとにデータが分かれていないので、メニュー項目ごとに関数化したり 処理を分けにくい。
スクリーンショット