YSTest: ShlReader.h 源文件

YSTest PreAlpha_b700_20160611 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 文件列表
- 文件成员

ShlReader.h
浏览该文件的文档.
1 /*
2 © 2011-2015 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
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::ShlReader::fBackgroundTask
std::function< void()> fBackgroundTask
背景任务：用于滚屏。
Definition: ShlReader.h:165
YReader::ShlTextReader::BaseSession
Definition: ShlReader.h:231
YReader::Bookmark::PositionType
size_t PositionType
文件位置类型。
Definition: ReadingList.h:49
YReader::BookmarkPanel
书签管理面板。
Definition: BookmarkUI.h:44
YReader::TextInfoBox::lblSize
Label lblSize
Definition: ShlReader.h:114
YReader::ReaderBox::btnSetting
Button btnSetting
设置按钮。
Definition: ShlReader.h:55
YReader::ShlHexBrowser::pnlFileInfo
FileInfoPanel pnlFileInfo
Definition: ShlReader.h:423
ynothrow
#define ynothrow
YSLib 无异常抛出保证：若支持 noexcept 关键字， 指定特定的 noexcept 异常规范。
Definition: ydef.h:740
YReader::FileInfoPanel
Definition: ShlReader.h:138
ImageBrowser::Exit
Definition: ImageControl.cpp:37
DefWidgetMemberIteration
#define DefWidgetMemberIteration(...)
定义部件成员下标及部件成员迭代器起始、终止和范围操作。
Definition: WidgetIteration.h:131
YSLib::UI::Control
控件。
Definition: YControl.h:275
YReader::ShlTextReader::BookmarkSession
Definition: ShlReader.h:247
YReader::ShlTextReader::BaseSession::reader_box_shown
bool reader_box_shown
Definition: ShlReader.h:235
YSLib::Execute
void Execute(GUIApplication &app, shared_ptr< Shell > p_shl)
Definition: GUIApplication.cpp:308
YReader::ReaderBox::ReaderBox
ReaderBox(const Rect &)
Definition: ShlReader.cpp:63
YReader::TextInfoBox::lblBottom
Label lblBottom
Definition: ShlReader.h:121
YReader::TextInfoBox::lblEncoding
Label lblEncoding
Definition: ShlReader.h:113
YReader::ShlTextReader::SettingSession
Definition: ShlReader.h:241
YSLib::UI::ProgressBar
进度条。
Definition: Progress.h:46
YReader
Definition: About.h:33
YReader::ShlTextReader
文本阅读器 Shell 。
Definition: ShlReader.h:226
YReader::ReaderBox::UpdateData
void UpdateData(DualScreenReader &)
更新进度数据。
Definition: ShlReader.cpp:98
YSLib::UI::Widget::DefGetter
DefGetter(ImplI(IWidget), WidgetRange, Children, WidgetRange()) static HBrush MakeBlankBrush()
取空白画刷。
YReader::ReaderSetting
阅读器设置。
Definition: ReaderSetting.h:41
YReader::FileInfoPanel::lblSize
Label lblSize
Definition: ShlReader.h:141
YReader::ShlTextReader::LastRead
ReadingList & LastRead
近期浏览记录。
Definition: ShlReader.h:264
YReader::ShlHexBrowser
十六进制浏览器 Shell 。
Definition: ShlReader.h:419
CHRLib::CharSet::Encoding
Encoding
字符流编码标识。
Definition: Encoding.h:58
YReader::ReaderBox::pbReader
ProgressBar pbReader
Definition: ShlReader.h:81
YReader::ShlTextReader::tmrScroll
Timers::Timer tmrScroll
滚屏计时器。
Definition: ShlReader.h:280
YReader::ShlTextReader::boxReader
ReaderBox boxReader
Definition: ShlReader.h:289
YSLib::GShellSession
Shell 连接会话。
Definition: ShellHelper.h:76
DSReader.h
适用于 DS 的双屏阅读器。
YSLib::UI::Widget::Refresh
virtual void Refresh(PaintEventArgs &&)
刷新：按指定参数绘制界面并更新状态。
Definition: YWidget.cpp:264
YSLib::UI::GValueEventArgs::ValueType
_type ValueType
值类型。
Definition: YWidgetEvent.h:302
ystdex::subscriptive_iterator
成员下标迭代器。
Definition: iterator.hpp:1243
YReader::ShlReader::bExit
bool bExit
退出标识。
Definition: ShlReader.h:172
YReader::ReaderBox::btnReturn
Button btnReturn
返回按钮。
Definition: ShlReader.h:70
YReader::ReaderBox::btnMenu
Button btnMenu
弹出菜单按钮。
Definition: ShlReader.h:50
YReader::ReaderBox::~ReaderBox
~ReaderBox() override
虚析构：类定义外默认实现。
YReader::ReaderBox::btnBookmark
Button btnBookmark
书签管理按钮。
Definition: ShlReader.h:65
YSLib::UI::HexViewArea
十六进制视图区域。
Definition: HexBrowser.h:144
YReader::ReadingList
阅读记录。
Definition: ReadingList.h:87
YReader::ShlReader
Definition: ShlReader.h:153
YSLib::Timers::Timer
计时器。
Definition: YTimer.h:77
YSLib::UI::Panel
面板。
Definition: ypanel.h:45
BookmarkUI.h
书签界面。
Shells.h
Shell 框架逻辑。
YReader::ShlTextReader::CurrentSetting
ReaderSetting CurrentSetting
当前阅读器设置。
Definition: ShlReader.h:269
YSLib::Drawing::Point
GBinaryGroup< SPos > Point
屏幕二维点（直角坐标表示）。
Definition: YGDIBase.h:278
YReader::ReaderBox
Definition: ShlReader.h:40
YReader::ReaderBox::lblProgress
Label lblProgress
Definition: ShlReader.h:82
YReader::ShlTextReader::pnlBookmark
BookmarkPanel pnlBookmark
书签管理面板。
Definition: ShlReader.h:301
YReader::ShlHexBrowser::HexArea
HexViewArea HexArea
Definition: ShlReader.h:422
HexBrowser.h
十六进制浏览器。
YReader::ReaderBox::btnNext
Button btnNext
前进按钮。
Definition: ShlReader.h:80
ReaderSettingUI.h
阅读器设置界面。
YSLib::IO::Path
路径。
Definition: YSLib/Service/FileSystem.h:109
YSLib::UI::Label
标签。
Definition: Label.h:143
YReader::SettingPanel
设置面板。
Definition: ReaderSettingUI.h:49
YReader::TextInfoBox
Definition: ShlReader.h:110
platform::KeyCategory::Menu
表示菜单键（如 Menu 和 Win ）。
Definition: Keys.h:131
YReader::ReaderBox::btnInfo
Button btnInfo
显示信息框按钮。
Definition: ShlReader.h:60
YReader::TextInfoBox::lblTop
Label lblTop
指示迭代器位置。
Definition: ShlReader.h:120
YReader::ReaderBox::btnPrev
Button btnPrev
后退按钮。
Definition: ShlReader.h:75
YReader::ShlReader::CurrentPath
IO::Path CurrentPath
当前路径。
Definition: ShlReader.h:160
YSLib::UI::DialogBox
对话框。
Definition: UIContainerEx.h:46