YSTest: ShlReader.h 源文件

YSTest PreAlpha_b900_20201012 The YSLib Test Project

ShlReader.h
浏览该文件的文档.
1 /*
2 © 2011-2015, 2018-2019 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
28 #ifndef INC_YReader_ShlReader_h_
29 #define INC_YReader_ShlReader_h_ 1
30
31 #include "Shells.h"
32 #include "DSReader.h"
33 #include "HexBrowser.h"
34 #include "ReaderSettingUI.h"
35 #include "BookmarkUI.h"
36
37 namespace YReader
38 {
39
40 class ReaderBox : public Control
41 {
42 public:
44 using iterator = ystdex::subscriptive_iterator<ReaderBox, IWidget>;
45
50 Button btnMenu;
55 Button btnSetting;
60 Button btnInfo;
65 Button btnBookmark;
70 Button btnReturn;
75 Button btnPrev;
80 Button btnNext;
81 ProgressBar pbReader;
82 Label lblProgress;
83
84 ReaderBox(const Rect&);
89 ~ReaderBox() override;
90
92 DefWidgetMemberIteration(btnMenu, btnSetting, btnInfo, btnBookmark,
93 btnReturn, btnPrev, btnNext, pbReader, lblProgress)
94
95 private:
97 void
98 InitializeProgress();
99
100 public:
105 void
106 UpdateData(DualScreenReader&);
107 };
108
109
110 class TextInfoBox : public DialogBox
111 {
112 public:
113 Label lblEncoding;
114 Label lblSize;
120 Label lblTop;
121 Label lblBottom;
123
124 TextInfoBox();
125
130 virtual void
131 Refresh(PaintEventArgs&&);
132
133 void
134 UpdateData(DualScreenReader&);
135 };
136
137
138 class FileInfoPanel : public Panel
139 {
140 public:
141 Label lblPath, lblSize, lblAccessTime, lblModifiedTime, lblOperations;
142
143 FileInfoPanel();
148 ~FileInfoPanel() override;
149 };
150
151
153 class ShlReader : public ShlDS
154 {
155 protected:
160 IO::Path CurrentPath;
165 std::function<void()> fBackgroundTask;
172 bool bExit;
173
174 public:
180 ShlReader(const IO::Path&,
181 const shared_ptr<Desktop>& = {}, const shared_ptr<Desktop>& = {});
182
187 void
188 Exit();
189
191 static BookmarkList
192 LoadBookmarks(const string&);
193
199 static ReaderSetting
200 LoadGlobalConfiguration();
201
206 void
207 OnInput() override;
208
210 static void
211 SaveBookmarks(const string&, const BookmarkList&);
212
217 static void
218 SaveGlobalConfiguration(const ReaderSetting&);
219 };
220
221
226 class ShlTextReader : public ShlReader
227 {
228 private:
230
231 class BaseSession : public GShellSession<ShlTextReader>
232 {
233 private:
235 bool reader_box_shown;
236
237 public:
238 BaseSession(ShlTextReader&);
239 ~BaseSession() override;
240 };
241 class SettingSession : public BaseSession
242 {
243 public:
244 SettingSession(ShlTextReader&);
245 ~SettingSession() override;
246 };
247 class BookmarkSession : public BaseSession
248 {
249 public:
250 BookmarkSession(ShlTextReader&);
255 ~BookmarkSession() override;
256 };
258
259 public:
264 ReadingList& LastRead;
269 ReaderSetting CurrentSetting;
270
271 private:
273 unique_ptr<Menu> p_mnu_reader{};
274
275 protected:
280 Timers::Timer tmrScroll;
285 bool tmrScrollActive = {};
287
288 DualScreenReader reader{};
289 ReaderBox boxReader;
290 TextInfoBox boxTextInfo{};
292 SettingPanel pnlSetting{};
294 unique_ptr<ifstream> pTextFile{};
295 MenuHost mhMain{};
297
301 BookmarkPanel pnlBookmark;
302
303 private:
305 unique_ptr<BaseSession> session_ptr{};
306
307 public:
313 ShlTextReader(const IO::Path&,
314 const shared_ptr<Desktop>& = {}, const shared_ptr<Desktop>& = {});
319 ~ShlTextReader() override;
320
322 DefGetter(const ynothrow, Bookmark::PositionType, ReaderPosition,
323 reader.GetTopPosition())
324
325
326 String
327 GetSlice(Bookmark::PositionType, string::size_type);
328
329 private:
334 void
335 Execute(IndexEventArgs::ValueType);
336
337 public:
343 void
344 LoadFile(const IO::Path&);
345
351 bool
352 Locate(Bookmark::PositionType);
353
358 void
359 Scroll();
360
361 private:
363 void
364 ShowMenu(Menu&, const Point&);
365
370 void
371 StartAutoScroll();
372
377 void
378 StopAutoScroll();
379
385 void
386 Switch(Text::Encoding);
387
393 void
394 UpdateReadingList(bool);
395
396 public:
402 void
403 UpdateButtons();
404
405 private:
407 void
408 OnClick(CursorEventArgs&&);
409
410 void
411 OnKeyDown(KeyEventArgs&&);
412 };
413
414
419 class ShlHexBrowser : public ShlReader
420 {
421 public:
422 HexViewArea HexArea;
423 FileInfoPanel pnlFileInfo;
424
430 ShlHexBrowser(const IO::Path&,
431 const shared_ptr<Desktop>& = {}, const shared_ptr<Desktop>& = {});
436 ~ShlHexBrowser() override;
437 };
438
439 } // namespace YReader;
440
441 #endif
442
YReader::ShlTextReader::~ShlTextReader
~ShlTextReader() override
析构：释放资源。
Definition: ShlReader.cpp:496
YSLib::IO::Path
路径。
Definition: YSLib/Service/FileSystem.h:217
HexBrowser.h
十六进制浏览器。
Path
IO::Path Path
Definition: Initialization.cpp:116
YReader::ShlTextReader
文本阅读器 Shell 。
Definition: ShlReader.h:227
YReader::ShlHexBrowser::~ShlHexBrowser
~ShlHexBrowser() override
虚析构：类定义外默认实现。
YReader::ShlTextReader::BookmarkSession::~BookmarkSession
~BookmarkSession() override
虚析构：类定义外默认实现。
YReader::ShlTextReader::BaseSession::BaseSession
BaseSession(ShlTextReader &)
Definition: ShlReader.cpp:286
YReader::ReaderSetting
阅读器设置。
Definition: ReaderSetting.h:42
YReader::ReaderBox::btnPrev
Button btnPrev
后退按钮。
Definition: ShlReader.h:75
YReader::ShlTextReader::SettingSession::SettingSession
SettingSession(ShlTextReader &)
Definition: ShlReader.cpp:305
YReader::ShlReader::Exit
void Exit()
退出阅读器：停止后台任务并发送消息准备切换至 ShlExplorer 。
Definition: ShlReader.cpp:186
YReader::ShlTextReader::Locate
bool Locate(Bookmark::PositionType)
定位到文本中的指定位置：更新阅读器状态、阅读列表和按钮状态。
Definition: ShlReader.cpp:563
YSLib::UI::Panel
面板。
Definition: YPanel.h:46
YSLib::GShellSession
Shell 连接会话。
Definition: ShellHelper.h:77
YReader::ShlTextReader::Scroll
void Scroll()
当自动滚屏有效状态为 true 时超时自动滚屏。
Definition: ShlReader.cpp:584
YReader
Definition: About.h:34
YReader::TextInfoBox
Definition: ShlReader.h:111
YSLib::UI::Button
按钮。
Definition: Button.h:127
YReader::ShlTextReader::SettingSession
Definition: ShlReader.h:242
YReader::TextInfoBox::lblSize
Label lblSize
Definition: ShlReader.h:114
YSLib::UI::DialogBox
对话框。
Definition: UIContainerEx.h:47
YReader::ShlReader::CurrentPath
IO::Path CurrentPath
当前路径。
Definition: ShlReader.h:160
YReader::ShlTextReader::tmrScrollActive
bool tmrScrollActive
滚屏计时器激活状态。
Definition: ShlReader.h:285
YSLib::UI::Control
控件。
Definition: YControl.h:271
YReader::FileInfoPanel::lblOperations
Label lblOperations
Definition: ShlReader.h:141
YReader::ShlReader::SaveBookmarks
static void SaveBookmarks(const string &, const BookmarkList &)
Definition: ShlReader.cpp:254
YReader::FileInfoPanel::FileInfoPanel
FileInfoPanel()
Definition: ShlReader.cpp:159
YReader::ReaderBox::btnInfo
Button btnInfo
显示信息框按钮。
Definition: ShlReader.h:60
YReader::BookmarkPanel
书签管理面板。
Definition: BookmarkUI.h:45
YReader::ShlTextReader::boxReader
ReaderBox boxReader
Definition: ShlReader.h:289
CHRLib::CharSet::Encoding
Encoding
字符流编码标识。
Definition: Encoding.h:59
YReader::ShlReader
Definition: ShlReader.h:154
YReader::ShlHexBrowser
十六进制浏览器 Shell 。
Definition: ShlReader.h:420
YReader::ShlTextReader::Execute
void Execute(IndexEventArgs::ValueType)
执行阅读器命令。
Definition: ShlReader.cpp:514
YSLib::UI::Label
标签。
Definition: Label.h:143
YReader::ShlTextReader::tmrScroll
Timers::Timer tmrScroll
滚屏计时器。
Definition: ShlReader.h:280
YReader::ShlTextReader::BaseSession::~BaseSession
~BaseSession() override
Definition: ShlReader.cpp:293
YReader::ShlTextReader::pnlBookmark
BookmarkPanel pnlBookmark
书签管理面板。
Definition: ShlReader.h:301
YReader::TextInfoBox::Refresh
virtual void Refresh(PaintEventArgs &&)
刷新：按指定参数绘制界面并更新状态。
Definition: ShlReader.cpp:137
platform::KeyCategory::Menu
@ Menu
表示菜单键（如 Menu 和 Win ）。
Definition: Keys.h:131
YReader::ShlTextReader::UpdateReadingList
void UpdateReadingList(bool)
更新近期浏览记录并更新按钮状态。
Definition: ShlReader.cpp:640
YReader::ShlTextReader::LastRead
ReadingList & LastRead
近期浏览记录。
Definition: ShlReader.h:264
YReader::TextInfoBox::lblEncoding
Label lblEncoding
Definition: ShlReader.h:113
YReader::ReaderBox::btnReturn
Button btnReturn
返回按钮。
Definition: ShlReader.h:70
YReader::ShlReader::fBackgroundTask
std::function< void()> fBackgroundTask
背景任务：用于滚屏。
Definition: ShlReader.h:165
YReader::ShlReader::LoadGlobalConfiguration
static ReaderSetting LoadGlobalConfiguration()
载入阅读器配置。
Definition: ShlReader.cpp:235
YReader::TextInfoBox::lblTop
Label lblTop
指示迭代器位置。
Definition: ShlReader.h:120
YReader::ShlTextReader::p_mnu_reader
unique_ptr< Menu > p_mnu_reader
Definition: ShlReader.h:273
YReader::ShlReader::ShlReader
ShlReader(const IO::Path &, const shared_ptr< Desktop > &={}, const shared_ptr< Desktop > &={})
构造：使用指定路径和上下桌面。
YReader::ShlTextReader::boxTextInfo
TextInfoBox boxTextInfo
Definition: ShlReader.h:290
YReader::ShlTextReader::reader
DualScreenReader reader
Definition: ShlReader.h:288
YReader::ShlHexBrowser::pnlFileInfo
FileInfoPanel pnlFileInfo
Definition: ShlReader.h:423
YSLib::Drawing::Point
GBinaryGroup< SPos > Point
屏幕二维点（直角坐标表示）。
Definition: YGDIBase.h:520
BookmarkUI.h
书签界面。
ReaderSettingUI.h
阅读器设置界面。
YSLib::UI::IndexEventArgs
GValueEventArgs< size_t > IndexEventArgs
索引事件。
Definition: ListControl.h:47
YReader::ShlTextReader::OnClick
void OnClick(CursorEventArgs &&)
Definition: ShlReader.cpp:661
YReader::ShlTextReader::session_ptr
unique_ptr< BaseSession > session_ptr
Definition: ShlReader.h:305
YReader::ShlTextReader::ShowMenu
void ShowMenu(Menu &, const Point &)
Definition: ShlReader.cpp:597
YReader::FileInfoPanel::lblModifiedTime
Label lblModifiedTime
Definition: ShlReader.h:141
YReader::FileInfoPanel::lblAccessTime
Label lblAccessTime
Definition: ShlReader.h:141
YReader::ShlTextReader::mhMain
MenuHost mhMain
Definition: ShlReader.h:295
YReader::ShlTextReader::BookmarkSession::BookmarkSession
BookmarkSession(ShlTextReader &)
Definition: ShlReader.cpp:345
YReader::ReaderBox
Definition: ShlReader.h:41
YReader::ShlTextReader::ShlTextReader
ShlTextReader(const IO::Path &, const shared_ptr< Desktop > &={}, const shared_ptr< Desktop > &={})
构造：使用指定路径和上下桌面。
YReader::SettingPanel
设置面板。
Definition: ReaderSettingUI.h:50
YReader::ShlTextReader::BaseSession
Definition: ShlReader.h:232
YReader::TextInfoBox::lblBottom
Label lblBottom
Definition: ShlReader.h:121
YReader::ShlTextReader::OnKeyDown
void OnKeyDown(KeyEventArgs &&)
Definition: ShlReader.cpp:687
YReader::ShlTextReader::StopAutoScroll
void StopAutoScroll()
停止自动滚屏。
Definition: ShlReader.cpp:623
YReader::ReaderBox::btnMenu
Button btnMenu
弹出菜单按钮。
Definition: ShlReader.h:50
DefWidgetMemberIteration
#define DefWidgetMemberIteration(...)
定义部件成员下标及部件成员迭代器起始、终止和范围操作。
Definition: WidgetIteration.h:131
YReader::ReaderBox::lblProgress
Label lblProgress
Definition: ShlReader.h:82
YReader::TextInfoBox::UpdateData
void UpdateData(DualScreenReader &)
Definition: ShlReader.cpp:147
YReader::ShlTextReader::pnlSetting
SettingPanel pnlSetting
设置面板。
Definition: ShlReader.h:292
YReader::FileInfoPanel
Definition: ShlReader.h:139
YReader::ReadingList
阅读记录。
Definition: ReadingList.h:89
YReader::ShlTextReader::BookmarkSession
Definition: ShlReader.h:248
YReader::ShlReader::LoadBookmarks
static BookmarkList LoadBookmarks(const string &)
Definition: ShlReader.cpp:205
YReader::ReaderBox::UpdateData
void UpdateData(DualScreenReader &)
更新进度数据。
Definition: ShlReader.cpp:97
YReader::Bookmark::PositionType
size_t PositionType
文件位置类型。
Definition: ReadingList.h:49
YReader::ShlReader::bExit
bool bExit
退出标识。
Definition: ShlReader.h:172
YReader::FileInfoPanel::lblPath
Label lblPath
Definition: ShlReader.h:141
Shells.h
Shell 框架逻辑。
YReader::ReaderBox::btnNext
Button btnNext
前进按钮。
Definition: ShlReader.h:80
YReader::FileInfoPanel::~FileInfoPanel
~FileInfoPanel() override
虚析构：类定义外默认实现。
YReader::TextInfoBox::TextInfoBox
TextInfoBox()
Definition: ShlReader.cpp:124
YSLib::Timers::Timer
计时器。
Definition: YTimer.h:78
YReader::ShlTextReader::SettingSession::~SettingSession
~SettingSession() override
Definition: ShlReader.cpp:336
YReader::ShlTextReader::BaseSession::reader_box_shown
bool reader_box_shown
Definition: ShlReader.h:235
YReader::ShlReader::SaveGlobalConfiguration
static void SaveGlobalConfiguration(const ReaderSetting &)
保存阅读器配置。
Definition: ShlReader.cpp:271
YReader::ReaderBox::pbReader
ProgressBar pbReader
Definition: ShlReader.h:81
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:241
YReader::ShlTextReader::CurrentSetting
ReaderSetting CurrentSetting
当前阅读器设置。
Definition: ShlReader.h:269
YReader::ShlTextReader::StartAutoScroll
void StartAutoScroll()
开始自动滚屏。
Definition: ShlReader.cpp:615
YReader::FileInfoPanel::lblSize
Label lblSize
Definition: ShlReader.h:141
YReader::ShlHexBrowser::HexArea
HexViewArea HexArea
Definition: ShlReader.h:422
YReader::ShlTextReader::LoadFile
void LoadFile(const IO::Path &)
读取文件。
Definition: ShlReader.cpp:547
ystdex::function
function_base< function_traits< _fSig, empty_function_policy::throwing >, _fSig > function
函数包装类模板。
Definition: function.hpp:900
const
const Decapsulate const Decapsulate &y ynothrow ContextNode &ctx const
Definition: NPLA1Forms.cpp:1629
YReader::ShlTextReader::pTextFile
unique_ptr< ifstream > pTextFile
Definition: ShlReader.h:294
ynothrow
#define ynothrow
YSLib 无异常抛出保证：若支持 noexcept 关键字， 指定特定的 noexcept 异常规范。
Definition: ydef.h:1199
YReader::ReaderBox::ReaderBox
ReaderBox(const Rect &)
Definition: ShlReader.cpp:62
YReader::ReaderBox::btnBookmark
Button btnBookmark
书签管理按钮。
Definition: ShlReader.h:65
YReader::ReaderBox::~ReaderBox
~ReaderBox() override
虚析构：类定义外默认实现。
YReader::ShlTextReader::UpdateButtons
void UpdateButtons()
更新按钮状态。
Definition: ShlReader.cpp:654
YReader::ReaderBox::btnSetting
Button btnSetting
设置按钮。
Definition: ShlReader.h:55
ystdex::subscriptive_iterator
成员下标迭代器。
Definition: iterator.hpp:1193
YReader::ShlReader::OnInput
void OnInput() override
处理输入消息：发送绘制消息，当处于滚屏状态时自动执行滚屏。
Definition: ShlReader.cpp:246
YReader::ShlTextReader::Switch
void Switch(Text::Encoding)
切换编码。
Definition: ShlReader.cpp:631
DSReader.h
适用于 DS 的双屏阅读器。