mirror of
https://github.com/LHY0125/PathEditor.git
synced 2026-05-10 10:19:47 +08:00
c92d20b4b3
简化代码结构并移除对iupcontrols库的依赖。主要变更包括: - 用IupFlatList替换IupMatrix,简化列表操作API - 移除iupcontrols.dll和iupimglib.dll依赖,减少部署文件大小 - 更新CMake配置和安装脚本以匹配新的依赖关系 - 重写列表操作函数以使用IupFlatList的API(VALUE、COUNT等属性) - 调整回调函数签名以匹配新控件的事件参数 - 简化UI创建代码,移除不再需要的图标和属性设置
173 lines
6.3 KiB
C
173 lines
6.3 KiB
C
#include "ui.h"
|
|
#include "config.h"
|
|
#include "globals.h"
|
|
#include "ui_utils.h"
|
|
#include "cb_edit.h"
|
|
#include "cb_file.h"
|
|
#include "cb_main.h"
|
|
#include <stdlib.h>
|
|
|
|
// 创建列表控件
|
|
Ihandle *create_path_list()
|
|
{
|
|
Ihandle *list = IupFlatList();
|
|
IupSetAttribute(list, "EXPAND", "YES");
|
|
IupSetAttribute(list, "MULTIPLE", "YES");
|
|
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");
|
|
IupSetCallback(list, "DBLCLICK_CB", (Icallback)list_dblclick_cb);
|
|
IupSetCallback(list, "DROPFILES_CB", (Icallback)list_dropfiles_cb);
|
|
IupSetCallback(list, "K_ANY", (Icallback)list_k_any_cb);
|
|
IupSetCallback(list, "MOTION_CB", (Icallback)list_motion_cb);
|
|
return list;
|
|
}
|
|
|
|
// 创建右侧功能按钮区域
|
|
Ihandle *create_main_buttons()
|
|
{
|
|
// 创建右侧按钮
|
|
btn_new = IupButton("新建(N)", NULL);
|
|
btn_edit = IupButton("编辑(E)", NULL);
|
|
btn_browse = IupButton("浏览(B)...", NULL);
|
|
btn_del = IupButton("删除(D)", NULL);
|
|
btn_undo = IupButton("撤销(Z)", NULL);
|
|
btn_redo = IupButton("重做(Y)", NULL);
|
|
btn_up = IupButton("上移(U)", NULL);
|
|
btn_down = IupButton("下移(O)", NULL);
|
|
btn_clean = IupButton("一键清理", NULL);
|
|
|
|
// 设置按钮回调
|
|
IupSetCallback(btn_new, "ACTION", (Icallback)btn_new_cb);
|
|
IupSetCallback(btn_edit, "ACTION", (Icallback)btn_edit_cb);
|
|
IupSetCallback(btn_browse, "ACTION", (Icallback)btn_browse_cb);
|
|
IupSetCallback(btn_del, "ACTION", (Icallback)btn_del_cb);
|
|
IupSetCallback(btn_undo, "ACTION", (Icallback)btn_undo_cb);
|
|
IupSetCallback(btn_redo, "ACTION", (Icallback)btn_redo_cb);
|
|
IupSetCallback(btn_up, "ACTION", (Icallback)btn_up_cb);
|
|
IupSetCallback(btn_down, "ACTION", (Icallback)btn_down_cb);
|
|
IupSetCallback(btn_clean, "ACTION", (Icallback)btn_clean_cb);
|
|
|
|
// 设置按钮大小
|
|
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,
|
|
IupFill(), // 间隔
|
|
btn_undo, btn_redo,
|
|
IupFill(),
|
|
btn_clean, // 放在上移下移之前,或者最下面,这里放在中间偏下
|
|
IupFill(),
|
|
btn_up, btn_down,
|
|
NULL);
|
|
IupSetAttribute(vbox_btns, "GAP", UI_GAP_BUTTONS);
|
|
IupSetAttribute(vbox_btns, "MARGIN", "0x0");
|
|
|
|
return vbox_btns;
|
|
}
|
|
|
|
// 创建底部按钮区域
|
|
Ihandle *create_bottom_buttons()
|
|
{
|
|
// 创建底部按钮
|
|
btn_help = IupButton("帮助(H)", NULL);
|
|
IupSetCallback(btn_help, "ACTION", (Icallback)btn_help_cb);
|
|
IupSetAttribute(btn_help, "RASTERSIZE", UI_BUTTON_SMALL_SIZE);
|
|
|
|
btn_theme = IupButton("深色模式", NULL);
|
|
IupSetCallback(btn_theme, "ACTION", (Icallback)btn_theme_cb);
|
|
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", UI_BUTTON_SIZE);
|
|
|
|
btn_export = IupButton("导出配置", NULL);
|
|
IupSetCallback(btn_export, "ACTION", (Icallback)btn_export_cb);
|
|
IupSetAttribute(btn_export, "RASTERSIZE", UI_BUTTON_SIZE);
|
|
|
|
btn_ok = IupButton("确定(O)", NULL);
|
|
IupSetCallback(btn_ok, "ACTION", (Icallback)btn_ok_cb);
|
|
IupSetAttribute(btn_ok, "RASTERSIZE", UI_BUTTON_SIZE);
|
|
|
|
btn_cancel = IupButton("取消(C)", NULL);
|
|
IupSetCallback(btn_cancel, "ACTION", (Icallback)btn_cancel_cb);
|
|
IupSetAttribute(btn_cancel, "RASTERSIZE", UI_BUTTON_SIZE);
|
|
|
|
Ihandle *hbox_bottom = IupHbox(
|
|
btn_help,
|
|
btn_theme,
|
|
lbl_status,
|
|
IupFill(),
|
|
btn_import,
|
|
btn_export,
|
|
btn_ok,
|
|
btn_cancel,
|
|
NULL);
|
|
IupSetAttribute(hbox_bottom, "GAP", UI_GAP_BOTTOM);
|
|
IupSetAttribute(hbox_bottom, "ALIGNMENT", "ACENTER");
|
|
IupSetAttribute(hbox_bottom, "MARGIN", "0x0");
|
|
|
|
return hbox_bottom;
|
|
}
|
|
|
|
// 创建主对话框
|
|
Ihandle *create_main_dialog()
|
|
{
|
|
// 创建两个列表
|
|
list_sys = create_path_list();
|
|
list_user = create_path_list();
|
|
list_merged = create_path_list();
|
|
|
|
IupSetAttribute(list_merged, "READONLY", "YES");
|
|
IupSetAttribute(list_merged, "MULTIPLE", "NO");
|
|
IupSetAttribute(list_merged, "BGCOLOR", UI_LIST_MERGED_BGCOLOR); // 灰色背景
|
|
|
|
// 创建标签页
|
|
tabs_main = IupTabs(list_sys, list_user, list_merged, NULL);
|
|
IupSetAttribute(tabs_main, "TABTITLE0", "系统变量 (System PATH)");
|
|
IupSetAttribute(tabs_main, "TABTITLE1", "用户变量 (User PATH)");
|
|
IupSetAttribute(tabs_main, "TABTITLE2", "合并预览 (Merged PATH)");
|
|
|
|
// 设置标签页切换回调
|
|
IupSetCallback(tabs_main, "TABCHANGEPOS_CB", (Icallback)tabs_tabchange_cb);
|
|
|
|
// 搜索框
|
|
txt_search = IupText(NULL);
|
|
IupSetAttribute(txt_search, "NAME", "TXT_SEARCH");
|
|
IupSetAttribute(txt_search, "CUEBANNER", "搜索...");
|
|
IupSetCallback(txt_search, "VALUECHANGED_CB", (Icallback)txt_search_cb);
|
|
IupSetAttribute(txt_search, "EXPAND", "HORIZONTAL");
|
|
|
|
// 布局
|
|
Ihandle *btns = create_main_buttons();
|
|
Ihandle *hbox_mid = IupHbox(tabs_main, btns, NULL);
|
|
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", UI_GAP_MAIN);
|
|
IupSetAttribute(vbox_main, "MARGIN", UI_MARGIN_MAIN);
|
|
|
|
Ihandle *dlg = IupDialog(vbox_main);
|
|
IupSetAttribute(dlg, "TITLE", UI_WINDOW_TITLE);
|
|
IupSetAttribute(dlg, "RASTERSIZE", UI_WINDOW_SIZE);
|
|
IupSetAttribute(dlg, "MINSIZE", UI_WINDOW_SIZE);
|
|
|
|
return dlg;
|
|
} |