Skip to content

Commit

Permalink
UTF-8编码;修复warning;调整高分辨率下文字大小
Browse files Browse the repository at this point in the history
  • Loading branch information
timepp committed Sep 14, 2023
1 parent 719d934 commit 2ba3fa6
Show file tree
Hide file tree
Showing 38 changed files with 362 additions and 289 deletions.
1 change: 1 addition & 0 deletions ide/common.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(HandyRun)\thirdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
Expand Down
43 changes: 22 additions & 21 deletions src/compilerconf.h
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
#pragma once

// 无警告区,用于包容稳定的第三方库头文件,如boost/ATL/WTL/STL/CxImage,不可自用
// 无警告区,用于包容稳定的第三方库头文件,如boost/ATL/WTL/STL/CxImage,不可自用
#define MSVC_NO_WARNING_AREA_BEGIN \
__pragma(warning(push, 1)) \
__pragma(warning(disable: 4018 4100 4127 4191 4201 4204 4242 4244 4245 4290 4365)) \
__pragma(warning(disable: 4505 4548 4555 4701 4702 4706 4819 4917 4920 4995 4996)) \
__pragma(warning(disable: 6011 6031 6053 6202 6211 6246 6248 6255 6269 6282 6308 6323 6328 6334 6385 6386 6387 6400 6401))
__pragma(warning(disable: 4505 4548 4555 4701 4702 4706 4819 4838 4917 4920 4995 4996)) \
__pragma(warning(disable: 6001 6011 6031 6053 6202 6211 6246 6248 6255 6269 6282 6308 6323 6328 6334 6385 6386 6387 6400 6401)) \
__pragma(warning(disable: 26454 28159))

#define MSVC_NO_WARNING_AREA_END \
__pragma(warning(pop))

// 跳出警告堆栈的宏,在stdafx.h中用。
// 某些头文件(如boost/regex_token_iterator.hpp)可能对警告堆栈的使用很不小心,
// push多pop少,把我们锁在一个警告较少的栈帧中,这个宏就是为了跳出来
// 跳出警告堆栈的宏,在stdafx.h中用。
// 某些头文件(如boost/regex_token_iterator.hpp)可能对警告堆栈的使用很不小心,
// push多pop少,把我们锁在一个警告较少的栈帧中,这个宏就是为了跳出来
#define MSVC_CLEAR_WARNING_STACK \
__pragma(warning(disable: 4193)) __pragma(warning(pop)) \
__pragma(warning(disable: 4193)) __pragma(warning(pop)) \
Expand All @@ -27,13 +28,13 @@
__pragma(warning(default: 4193))


// 在boost1.34中,包含boost/regex.hpp会造成pragma warning的栈不平,多了两次PUSH!
// 所以在cpp中如果包含boost/regex.hpp,请在包含之后写上这个宏,以免很多warning被boost给吃掉!
// 在boost1.34中,包含boost/regex.hpp会造成pragma warning的栈不平,多了两次PUSH!
// 所以在cpp中如果包含boost/regex.hpp,请在包含之后写上这个宏,以免很多warning被boost给吃掉!
#define MSVC_WARNING_WORKAROUND__BOOST_1_34_REGEX __pragma(warning(pop)) __pragma(warning(pop))

// 打开所有VC缺省关闭的警告
// 工程中最好在工程选项中指定编译参数/Wall,以免遗漏某些警告
// 关闭不关心的警告
// 打开所有VC缺省关闭的警告
// 工程中最好在工程选项中指定编译参数/Wall,以免遗漏某些警告
// 关闭不关心的警告
#define MSVC_TUNE_WARNINGS \
__pragma(warning(default: 4061 4062 4191 4242 4254 4263 4264 4265 4266 4287 4296)) \
__pragma(warning(default: 4302 4365 4514 4545 4546 4547 4548 4549 4555 4571)) \
Expand All @@ -43,22 +44,22 @@ __pragma(warning(default: 4905 4906 4917 4928 4946)) \
__pragma(warning(disable: 4061 4127 4503 4514 4571 4623 4625 4626 4710 4820)) \
__pragma(warning(disable: 4505 4512))

// 4061) 在switch一个enum时没有在case中显式指定所有的enum中定义的数值
// 4127) 条件表达式是一个常数(在ATL_ENSURE,ATL_ENSURE_RETUEN_VAL中用到)
// 4355) this指针用在初始化列表里,项目里用得非常多
// 4503) 模板展开后的标识符过长
// 4514) 没有用到的内联函数被优化掉
// 4623 4625 4626) 因为父类构造函数/拷贝构造函数/赋值操作符不可见,所以无法为子类生成默认的
// 4820) 在类(结构)的相邻成员间插入了padding
// 4505) 未被引用到的函数被优化掉
// 4512) 缺省的赋值操作符不能被生成
// 4061) 在switch一个enum时没有在case中显式指定所有的enum中定义的数值
// 4127) 条件表达式是一个常数(在ATL_ENSURE,ATL_ENSURE_RETUEN_VAL中用到)
// 4355) this指针用在初始化列表里,项目里用得非常多
// 4503) 模板展开后的标识符过长
// 4514) 没有用到的内联函数被优化掉
// 4623 4625 4626) 因为父类构造函数/拷贝构造函数/赋值操作符不可见,所以无法为子类生成默认的
// 4820) 在类(结构)的相邻成员间插入了padding
// 4505) 未被引用到的函数被优化掉
// 4512) 缺省的赋值操作符不能被生成


#define MSVC_CONFIGURE_WARNINGS \
MSVC_CLEAR_WARNING_STACK \
MSVC_TUNE_WARNINGS

// 基础设施
// 基础设施

#ifndef WIDESTRING
#define WIDESTRING2(str) L##str
Expand Down
72 changes: 36 additions & 36 deletions src/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@ struct si_pair
int int_val;
};

// 配置文件中键值的绑定信息
// 配置文件中键值的绑定信息
struct val_desc
{
const wchar_t * key; //
void * val_ptr; // 指向值的指针
value_type vt; // 值类型
// 缺省值, 当选项的值为缺省值时, 不向配置文件中写入
const wchar_t * key; //
void * val_ptr; // 指向值的指针
value_type vt; // 值类型
// 缺省值, 当选项的值为缺省值时, 不向配置文件中写入
const wchar_t * default_val;
// 字符串-整型映射表(仅vt == vt_int时有效)
// 配置文件中是字符串形式,程序内部是整数形式,使用si_map做转换
// 字符串-整型映射表(仅vt == vt_int时有效)
// 配置文件中是字符串形式,程序内部是整数形式,使用si_map做转换
const si_pair * si_map;
};
typedef std::list<val_desc> binding_t;
Expand Down Expand Up @@ -67,12 +67,12 @@ static const si_pair bkmode_map[] =
NULL, 0
};

// 在映射表中查找
// 在映射表中查找
static int lookup(const si_pair* si_map, const wchar_t * str)
{
for (int i = 0; si_map[i].str != NULL; i++)
{
if (wcsicmp(str, si_map[i].str) == 0) return si_map[i].int_val;
if (_wcsicmp(str, si_map[i].str) == 0) return si_map[i].int_val;
}
return si_map[0].int_val;
}
Expand All @@ -85,9 +85,9 @@ static const wchar_t * lookup(const si_pair* si_map, int v)
return si_map[0].str;
}

// 往绑定表里添加一条记录
// bind : 不检查重复
// bind_uniq : 检查重复
// 往绑定表里添加一条记录
// bind : 不检查重复
// bind_uniq : 检查重复
static void bind(binding_t * b, const wchar_t *k, void *v, value_type t, const wchar_t * dv = NULL, const si_pair * sip = NULL)
{
val_desc vd = {k, v, t, dv, sip};
Expand All @@ -107,7 +107,7 @@ static void bind_uniq(binding_t * b, const wchar_t *k, void *v, value_type t, co
b->push_back(vd);
}

// 设置各种绑定信息
// 设置各种绑定信息

static void bind_general_option(binding_t * b, general_opt& go)
{
Expand Down Expand Up @@ -256,7 +256,7 @@ static bool str_to_val(const wchar_t *str, void *val, value_type vt)
{
bool * b = static_cast<bool *>(val);
*b = false;
if (wcsicmp(str, L"true") == 0 || _wtoi(str) == 1)
if (_wcsicmp(str, L"true") == 0 || _wtoi(str) == 1)
{
*b = true;
}
Expand Down Expand Up @@ -368,7 +368,7 @@ static void load_key(const wchar_t *key, const wchar_t *val, const binding_t &b)
{
for (binding_t::const_iterator ci = b.begin(); ci != b.end(); ++ci)
{
if (wcsicmp(ci->key, key) == 0)
if (_wcsicmp(ci->key, key) == 0)
{
if (ci->si_map && ci->vt == vt_int)
{
Expand All @@ -382,17 +382,17 @@ static void load_key(const wchar_t *key, const wchar_t *val, const binding_t &b)
}
}

// 打开配置文件
// forload: true : 读取
// false: 写入
// 打开配置文件
// forload: true : 读取
// false: 写入
static FILE * open_profile(const std::wstring& fn, bool for_load)
{
FILE *fp;
const wchar_t * mode = for_load? L"r,ccs=UNICODE" : L"w, ccs=UTF-8";
const wchar_t * op = for_load? L"读取配置文件" : L"保存配置文件";
const wchar_t * op = for_load? L"读取配置文件" : L"保存配置文件";
if (_wfopen_s(&fp, fn.c_str(), mode) != 0)
{
throw os_err(dos, op, L" 文件名:%s", fn.c_str());
throw os_err(dos, op, L" 文件名:%s", fn.c_str());
}
return fp;
}
Expand Down Expand Up @@ -494,12 +494,12 @@ bool config::load()
{
if (he.m_err_code == ENOENT)
{
// 可能是第一次运行HandyRun
// TODO: 一些友好的提示
// 可能是第一次运行HandyRun
// TODO: 一些友好的提示
}
else
{
hlp::show_err(he.what(), L"将使用缺省参数运行程序");
hlp::show_err(he.what(), L"将使用缺省参数运行程序");
}
return false;
}
Expand All @@ -518,21 +518,21 @@ bool config::load()
if (!p) continue;

wcsncpy_s(sec, elem_of(sec), line + 1, p - line - 1);
// 遇到新的段
// 遇到新的段
b.clear();
if (wcsicmp(sec, L"general") == 0)
if (_wcsicmp(sec, L"general") == 0)
{
bind_general_option(&b, go);
}
else if (wcsicmp(sec, L"ui") == 0)
else if (_wcsicmp(sec, L"ui") == 0)
{
bind_ui_metrics(&b, gm);
}
else if (wcsicmp(sec, L"background") == 0)
else if (_wcsicmp(sec, L"background") == 0)
{
bind_background_option(&b, bk);
}
else if (wcsnicmp(sec, L"group:", 6) == 0)
else if (_wcsnicmp(sec, L"group:", 6) == 0)
{
group_info * gi = new group_info(sec + 6);
group_mgr.insert_cs(gi);
Expand All @@ -543,35 +543,35 @@ bool config::load()
{
p = wcschr(line, L'=');
if (!p) continue;
// 获取key和val的起始地址
// 获取key和val的起始地址
for (key = line; hlp::is_space(*key); key++);
for (val = p + 1; hlp::is_space(*val); val++);
// 移除多余的空白
// 移除多余的空白
for (p--; p > line && hlp::is_space(*p); p--);
*(p+1) = L'\0';
for (p = val; *p && *p != L'\n'; p++);
*p = L'\0';
// 遇到新的键值([sec] key = val)
if (wcsicmp(sec, L"var") == 0)
// 遇到新的键值([sec] key = val)
if (_wcsicmp(sec, L"var") == 0)
{
env_var ev = {key, val};
m_evs.push_back(ev);
}
else
{
if (wcsnicmp(sec, L"group:", 6) == 0 && wcsicmp(key, L"p") == 0)
if (_wcsnicmp(sec, L"group:", 6) == 0 && _wcsicmp(key, L"p") == 0)
{
prog * pg = new prog;
group_mgr.insert_cmd(pg, -1);
bind_prog(&b, pg);
}
if (wcsicmp(sec, L"index_path") == 0 && wcsicmp(key, L"path") == 0)
if (_wcsicmp(sec, L"index_path") == 0 && _wcsicmp(key, L"path") == 0)
{
index_info *ii = new index_info();
index_mgr.insert_cs(ii);
bind_index(&b, ii);
}
// 按当前的key和val,还有绑定表存储键值
// 按当前的key和val,还有绑定表存储键值
load_key(key, val, b);
}
}
Expand Down Expand Up @@ -697,6 +697,6 @@ void config::fill_index_prog()
}
catch (handyrun_err& he)
{
hlp::show_err(he.what(), L"对该目录的命令提示可能不完整。");
hlp::show_err(he.what(), L"对该目录的命令提示可能不完整。");
}
}
66 changes: 33 additions & 33 deletions src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,37 +14,37 @@ namespace cfg

struct gui_metrics
{
ui_layout layout; // 样式: 分组/平坦/简洁
window_style style; // 风格: 居中/边缘

bool use_tip; // 是否显示程序提示
bool use_simple_tip; // 是否使用单行提示
bool hide_on_lose_focus; // 失去焦点时是否隐藏
bool cache_icon; // 是否缓存图标

int border; // 边界大小(上下左右)
int pad_h; // 图标水平间距
int pad_v; // 图标垂直间距
int icon_size; // 图标大小(宽=高)
int icon_per_line; // 平坦模式时每行的图标数量
int edit_height; // 命令输入框的高度
int min_window_width; // 最小的窗口宽度
edge_class edge; // [边缘模式]位置: 左/上/右/下
int edge_pos; // [边缘模式]位置: 距离
int edge_window_len; // [边缘模式]窗口长度
int edge_window_thickness; // [边缘模式]窗口厚度

gui_metrics(); // 设置缺省值
ui_layout layout; // 样式: 分组/平坦/简洁
window_style style; // 风格: 居中/边缘

bool use_tip; // 是否显示程序提示
bool use_simple_tip; // 是否使用单行提示
bool hide_on_lose_focus; // 失去焦点时是否隐藏
bool cache_icon; // 是否缓存图标

int border; // 边界大小(上下左右)
int pad_h; // 图标水平间距
int pad_v; // 图标垂直间距
int icon_size; // 图标大小(宽=高)
int icon_per_line; // 平坦模式时每行的图标数量
int edit_height; // 命令输入框的高度
int min_window_width; // 最小的窗口宽度
edge_class edge; // [边缘模式]位置: 左/上/右/下
int edge_pos; // [边缘模式]位置: 距离
int edge_window_len; // [边缘模式]窗口长度
int edge_window_thickness; // [边缘模式]窗口厚度

gui_metrics(); // 设置缺省值
};

struct general_opt
{
std::wstring active_key; // 激活热键
std::wstring executable_ext; // "程序"的扩展名
bool single_instance; // 是否单实例运行
bool keep_dos_cmd_window; // 是否运行DOS命令后保留窗口
std::wstring active_key; // 激活热键
std::wstring executable_ext; // "程序"的扩展名
bool single_instance; // 是否单实例运行
bool keep_dos_cmd_window; // 是否运行DOS命令后保留窗口

general_opt(); // 设置缺省值
general_opt(); // 设置缺省值
};

// singleton
Expand All @@ -54,18 +54,18 @@ class config
~config();
static config * instance();

cs_mgr group_mgr; // 程序分组管理器
cs_mgr index_mgr; // 索引管理器
gui_metrics gm; // 界面元素配置
general_opt go; // 一般选项
background bk; // 背景
cs_mgr group_mgr; // 程序分组管理器
cs_mgr index_mgr; // 索引管理器
gui_metrics gm; // 界面元素配置
general_opt go; // 一般选项
background bk; // 背景

void set_profile(const wchar_t * fn);
std::wstring get_profile() const;
bool save();
bool load();

// 快捷方式
// 快捷方式
prog * get_prog(int g, int p);
group_info * get_group_info(int g);
command * get_index_cmd(int i, int c);
Expand All @@ -82,7 +82,7 @@ class config
void fill_index_prog();

std::wstring m_profile;
std::vector<env_var> m_evs; // 额外的环境变量
std::vector<env_var> m_evs; // 额外的环境变量
};

}
Loading

0 comments on commit 2ba3fa6

Please sign in to comment.