diff --git a/Makefile b/Makefile index 68eb141..44f9c1e 100644 --- a/Makefile +++ b/Makefile @@ -18,9 +18,9 @@ CFLAGS = -Wall -O2 -I$(INCLUDE_DIR) -I$(LOCAL_INCLUDE_DIR) -D_WIN32 -DUNICODE -D LDFLAGS = -L$(LIB_DIR) -liup -liupcd -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32 -ladvapi32 -mwindows # Source -SRC = src/main.c src/utils.c src/registry.c src/ui.c src/ui_utils.c src/cb_edit.c src/cb_file.c src/cb_main.c +SRC = src/main.c src/utils.c src/registry.c src/ui.c src/ui_utils.c src/cb_edit.c src/cb_file.c src/cb_main.c src/globals.c RES = ico/resources.rc -OBJ = $(OBJ_DIR)/main.o $(OBJ_DIR)/utils.o $(OBJ_DIR)/registry.o $(OBJ_DIR)/ui.o $(OBJ_DIR)/ui_utils.o $(OBJ_DIR)/cb_edit.o $(OBJ_DIR)/cb_file.o $(OBJ_DIR)/cb_main.o $(OBJ_DIR)/resources.o +OBJ = $(OBJ_DIR)/main.o $(OBJ_DIR)/utils.o $(OBJ_DIR)/registry.o $(OBJ_DIR)/ui.o $(OBJ_DIR)/ui_utils.o $(OBJ_DIR)/cb_edit.o $(OBJ_DIR)/cb_file.o $(OBJ_DIR)/cb_main.o $(OBJ_DIR)/globals.o $(OBJ_DIR)/resources.o EXE = $(BIN_DIR)/PathEditor.exe all: $(BIN_DIR) $(OBJ_DIR) $(EXE) @@ -58,6 +58,9 @@ $(OBJ_DIR)/cb_file.o: src/cb_file.c $(OBJ_DIR)/cb_main.o: src/cb_main.c $(CC) $(CFLAGS) -c -o $@ $< +$(OBJ_DIR)/globals.o: src/globals.c + $(CC) $(CFLAGS) -c -o $@ $< + $(OBJ_DIR)/resources.o: ico/resources.rc $(WINDRES) -i $< -o $@ diff --git a/bin/PathEditor.exe b/bin/PathEditor.exe index 0cc9984..5d0174c 100644 Binary files a/bin/PathEditor.exe and b/bin/PathEditor.exe differ diff --git a/include/config.h b/include/config.h new file mode 100644 index 0000000..cf39d92 --- /dev/null +++ b/include/config.h @@ -0,0 +1,23 @@ +#ifndef CONFIG_H +#define CONFIG_H + +// UI 常量定义 +#define UI_WINDOW_TITLE "Path Editor" // 窗口标题 +#define UI_WINDOW_SIZE "800x800" // 窗口默认大小 (像素) + +// 按钮尺寸 +#define UI_BUTTON_SIZE "100x32" // 按钮默认大小 (像素) +#define UI_BUTTON_SMALL_SIZE "80x32" // 小按钮大小 (像素) + +// 布局间距 +#define UI_MARGIN_MAIN "10x10" // 主布局外边距 (像素) +#define UI_GAP_MAIN "10" // 主布局间距 (像素) +#define UI_GAP_BUTTONS "5" // 按钮间距 (像素) +#define UI_GAP_BOTTOM "10" // 底部间距 (像素) + +// 列表属性 +#define UI_LIST_ITEM_PADDING "5x5" // 列表项内边距 (像素) +#define UI_LIST_BGCOLOR "255 255 255" // 列表背景颜色 (RGB) +#define UI_LIST_MERGED_BGCOLOR "240 240 240"// 合并列表背景颜色 (RGB) + +#endif // CONFIG_H diff --git a/src/globals.c b/src/globals.c new file mode 100644 index 0000000..2670b50 --- /dev/null +++ b/src/globals.c @@ -0,0 +1,24 @@ +#include +#include "globals.h" + +// 全局控件定义 +Ihandle *dlg = NULL; // 主对话框 +Ihandle *tabs_main = NULL; // 主选项卡 +Ihandle *list_sys = NULL, *list_user = NULL, *list_merged = NULL; // 列表控件 +Ihandle *lbl_status = NULL; // 状态栏 +Ihandle *btn_new = NULL, *btn_edit = NULL, *btn_browse = NULL, *btn_del = NULL, *btn_up = NULL, *btn_down = NULL; // 右侧按钮 +Ihandle *btn_undo = NULL, *btn_redo = NULL; // 撤销重做按钮 +Ihandle *btn_import = NULL, *btn_export = NULL; // 导入导出按钮 +Ihandle *btn_ok = NULL, *btn_cancel = NULL, *btn_help = NULL; // 确认取消帮助按钮 +Ihandle *btn_clean = NULL; // 一键清理按钮 +Ihandle *btn_theme = NULL; // 主题切换按钮 +Ihandle *txt_search = NULL; // 搜索框 + +// 历史记录栈 +HistoryStack undo_stack = {0}; +HistoryStack redo_stack = {0}; + +// 全局变量定义 +StringList raw_sys_paths = {0}; +StringList raw_user_paths = {0}; +int is_dark_mode = 0; // 默认浅色模式 diff --git a/src/main.c b/src/main.c index fb0414e..5b5d435 100644 --- a/src/main.c +++ b/src/main.c @@ -7,27 +7,7 @@ #include "ui.h" #include "cb_main.h" -// 全局控件定义 -Ihandle *dlg; // 主对话框 -Ihandle *tabs_main; // 主选项卡 -Ihandle *list_sys, *list_user, *list_merged; // 列表控件 -Ihandle *lbl_status; // 状态栏 -Ihandle *btn_new, *btn_edit, *btn_browse, *btn_del, *btn_up, *btn_down; // 右侧按钮 -Ihandle *btn_undo, *btn_redo; // 撤销重做按钮 -Ihandle *btn_import, *btn_export; // 导入导出按钮 -Ihandle *btn_ok, *btn_cancel, *btn_help; // 确认取消帮助按钮 -Ihandle *btn_clean; // 一键清理按钮 -Ihandle *btn_theme; // 主题切换按钮 -Ihandle *txt_search; // 搜索框 -// 历史记录栈 -HistoryStack undo_stack = {0}; -HistoryStack redo_stack = {0}; - -// 全局变量定义 -StringList raw_sys_paths = {0}; -StringList raw_user_paths = {0}; -int is_dark_mode = 0; // 默认浅色模式 // 主函数 int main(int argc, char **argv) diff --git a/src/ui.c b/src/ui.c index c1feb65..c00b885 100644 --- a/src/ui.c +++ b/src/ui.c @@ -1,4 +1,5 @@ #include "ui.h" +#include "config.h" #include "globals.h" #include "ui_utils.h" #include "cb_edit.h" @@ -12,8 +13,8 @@ Ihandle *create_path_list() Ihandle *list = IupFlatList(); IupSetAttribute(list, "EXPAND", "YES"); IupSetAttribute(list, "MULTIPLE", "YES"); - IupSetAttribute(list, "ITEMPADDING", "5x5"); - IupSetAttribute(list, "BACKCOLOR", "255 255 255"); + IupSetAttribute(list, "ITEMPADDING", UI_LIST_ITEM_PADDING); + IupSetAttribute(list, "BACKCOLOR", UI_LIST_BGCOLOR); IupSetAttribute(list, "BORDER", "YES"); IupSetAttribute(list, "CANFOCUS", "YES"); IupSetAttribute(list, "HLINE", "NO"); @@ -49,16 +50,16 @@ Ihandle *create_main_buttons() IupSetCallback(btn_down, "ACTION", (Icallback)btn_down_cb); IupSetCallback(btn_clean, "ACTION", (Icallback)btn_clean_cb); - // 设置按钮大小 (宽度和高度都增加约1/4) - IupSetAttribute(btn_new, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_edit, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_browse, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_del, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_undo, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_redo, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_up, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_down, "RASTERSIZE", "100x32"); - IupSetAttribute(btn_clean, "RASTERSIZE", "100x32"); + // 设置按钮大小 + IupSetAttribute(btn_new, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_edit, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_browse, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_del, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_undo, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_redo, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_up, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_down, "RASTERSIZE", UI_BUTTON_SIZE); + IupSetAttribute(btn_clean, "RASTERSIZE", UI_BUTTON_SIZE); Ihandle *vbox_btns = IupVbox( btn_new, btn_edit, btn_browse, btn_del, @@ -69,7 +70,7 @@ Ihandle *create_main_buttons() IupFill(), btn_up, btn_down, NULL); - IupSetAttribute(vbox_btns, "GAP", "5"); + IupSetAttribute(vbox_btns, "GAP", UI_GAP_BUTTONS); IupSetAttribute(vbox_btns, "MARGIN", "0x0"); return vbox_btns; @@ -81,30 +82,30 @@ Ihandle *create_bottom_buttons() // 创建底部按钮 btn_help = IupButton("帮助(H)", NULL); IupSetCallback(btn_help, "ACTION", (Icallback)btn_help_cb); - IupSetAttribute(btn_help, "RASTERSIZE", "80x32"); + IupSetAttribute(btn_help, "RASTERSIZE", UI_BUTTON_SMALL_SIZE); btn_theme = IupButton("深色模式", NULL); IupSetCallback(btn_theme, "ACTION", (Icallback)btn_theme_cb); - IupSetAttribute(btn_theme, "RASTERSIZE", "80x32"); + IupSetAttribute(btn_theme, "RASTERSIZE", UI_BUTTON_SMALL_SIZE); lbl_status = IupLabel("就绪"); IupSetAttribute(lbl_status, "EXPAND", "HORIZONTAL"); btn_import = IupButton("导入配置", NULL); IupSetCallback(btn_import, "ACTION", (Icallback)btn_import_cb); - IupSetAttribute(btn_import, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_import, "RASTERSIZE", UI_BUTTON_SIZE); btn_export = IupButton("导出配置", NULL); IupSetCallback(btn_export, "ACTION", (Icallback)btn_export_cb); - IupSetAttribute(btn_export, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_export, "RASTERSIZE", UI_BUTTON_SIZE); btn_ok = IupButton("确定(O)", NULL); IupSetCallback(btn_ok, "ACTION", (Icallback)btn_ok_cb); - IupSetAttribute(btn_ok, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_ok, "RASTERSIZE", UI_BUTTON_SIZE); btn_cancel = IupButton("取消(C)", NULL); IupSetCallback(btn_cancel, "ACTION", (Icallback)btn_cancel_cb); - IupSetAttribute(btn_cancel, "RASTERSIZE", "100x32"); + IupSetAttribute(btn_cancel, "RASTERSIZE", UI_BUTTON_SIZE); Ihandle *hbox_bottom = IupHbox( btn_help, @@ -116,7 +117,7 @@ Ihandle *create_bottom_buttons() btn_ok, btn_cancel, NULL); - IupSetAttribute(hbox_bottom, "GAP", "10"); + IupSetAttribute(hbox_bottom, "GAP", UI_GAP_BOTTOM); IupSetAttribute(hbox_bottom, "ALIGNMENT", "ACENTER"); IupSetAttribute(hbox_bottom, "MARGIN", "0x0"); @@ -133,7 +134,7 @@ Ihandle *create_main_dialog() IupSetAttribute(list_merged, "READONLY", "YES"); IupSetAttribute(list_merged, "MULTIPLE", "NO"); - IupSetAttribute(list_merged, "BGCOLOR", "240 240 240"); // 灰色背景 + IupSetAttribute(list_merged, "BGCOLOR", UI_LIST_MERGED_BGCOLOR); // 灰色背景 // 创建标签页 tabs_main = IupTabs(list_sys, list_user, list_merged, NULL); @@ -154,18 +155,19 @@ Ihandle *create_main_dialog() // 布局 Ihandle *btns = create_main_buttons(); Ihandle *hbox_mid = IupHbox(tabs_main, btns, NULL); - IupSetAttribute(hbox_mid, "GAP", "10"); + IupSetAttribute(hbox_mid, "GAP", UI_GAP_MAIN); IupSetAttribute(hbox_mid, "MARGIN", "0x0"); Ihandle *bottom = create_bottom_buttons(); Ihandle *vbox_main = IupVbox(txt_search, hbox_mid, bottom, NULL); - IupSetAttribute(vbox_main, "GAP", "10"); - IupSetAttribute(vbox_main, "MARGIN", "10x10"); + IupSetAttribute(vbox_main, "GAP", UI_GAP_MAIN); + IupSetAttribute(vbox_main, "MARGIN", UI_MARGIN_MAIN); Ihandle *dlg = IupDialog(vbox_main); - IupSetAttribute(dlg, "TITLE", "Path Editor"); - IupSetAttribute(dlg, "SIZE", "480x400"); + IupSetAttribute(dlg, "TITLE", UI_WINDOW_TITLE); + IupSetAttribute(dlg, "RASTERSIZE", UI_WINDOW_SIZE); + IupSetAttribute(dlg, "MINSIZE", UI_WINDOW_SIZE); return dlg; } \ No newline at end of file