43 auto line(shl.GetSlice(pos, 48U));
47 const bool b(line[0] ==
'\n');
48 const auto i(line.find(
"\r\n", b));
53 line.erase(line.begin());
55 return to_string(pos) +
" " + std::move(line);
59 ConvertToUIString(
const BookmarkList& lst, ShlTextReader& shl)
63 vec.reserve(lst.size());
64 for(
const auto pos : lst)
65 vec.push_back(ConvertToUIString(pos, shl));
70 ConvertToBookmarkList(
const vector<String>& lst)
74 bookmarks.reserve(lst.size());
75 for(
const auto& str : lst)
76 bookmarks.push_back(stoul(str.GetMBCS()));
84 lbPosition({8, 32, 240, 128}),
85 btnAdd(
Rect(GetWidth() - 80, 4, 16, 16), 210),
86 btnRemove(
Rect(GetWidth() - 60, 4, 16, 16), 210), shell(shl), bookmarks(bm)
88 const auto stop_routing_after_direct([](
KeyEventArgs&& e){
93 AddWidgets(*
this, lbPosition, btnAdd, btnRemove),
96 btnRemove.Text = u
"-",
97 FetchEvent<KeyDown>(lbPosition) += stop_routing_after_direct,
98 FetchEvent<KeyHeld>(lbPosition) += stop_routing_after_direct,
99 FetchEvent<Click>(btnOK) += [
this]{
100 bookmarks = ConvertToBookmarkList(lbPosition.GetList());
102 FetchEvent<Click>(btnAdd) += [
this]{
103 auto& lst(lbPosition.GetListRef());
104 auto idx(GetSelected());
108 lst.insert(lst.begin() + idx,
109 String(ConvertToUIString(shell.get().GetReaderPosition(), shell)));
110 lbPosition.AdjustViewForContent();
111 lbPosition.UpdateView();
113 FetchEvent<Click>(btnRemove) += [
this]{
114 auto& lst(lbPosition.GetListRef());
115 const auto idx(GetSelected());
119 lst.erase(lst.begin() + idx);
120 lbPosition.AdjustViewForContent();
121 lbPosition.UpdateView();
127 BookmarkList::difference_type
size_t PositionType
文件位置类型。
void AddWidgets(_tCon &con, _tWidgets &...wgts)
向部件容器添加子部件。
#define yunseq
无序列依赖表达式组求值。
vector< Bookmark::PositionType > BookmarkList
书签列表类型。
BookmarkList::difference_type GetSelected() const
BookmarkPanel(const BookmarkList &, ShlTextReader &)
std::string to_string(unsigned char val)
转换为字符串。
std::reference_wrapper< ShlTextReader > shell