Skip to content
This repository was archived by the owner on Dec 23, 2023. It is now read-only.

Commit 78210fc

Browse files
committed
Add logic to navigate between chapter indexes
1 parent 55a8aa7 commit 78210fc

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

Yomu/Controllers/ChapterPageCollectionViewController.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class ChapterPageCollectionViewController: NSViewController {
1818
@IBOutlet weak var collectionView: NSCollectionView!
1919
@IBOutlet weak var close: NSButton!
2020
@IBOutlet weak var readingProgress: NSTextField!
21+
@IBOutlet weak var pageCount: NSTextField!
2122
@IBOutlet weak var zoomIn: NSButton!
2223
@IBOutlet weak var zoomOut: NSButton!
2324
@IBOutlet weak var zoomScale: NSTextField!
@@ -73,6 +74,15 @@ class ChapterPageCollectionViewController: NSViewController {
7374
self?.delegate?.closeChapterPage()
7475
}) ==> disposeBag
7576

77+
readingProgress
78+
.rx.controlEvent
79+
.map { [weak self] in
80+
Int(self!.readingProgress.stringValue) ?? -1
81+
}
82+
.map { $0 - 1 }
83+
.filter(vm.chapterIndexIsValid)
84+
.subscribe(onNext: scrollToChapter) ==> disposeBag
85+
7686
nextChapterButton
7787
.rx.tap
7888
.subscribe(onNext: { [weak self] in
@@ -111,6 +121,10 @@ class ChapterPageCollectionViewController: NSViewController {
111121
~~> readingProgress.rx.text.orEmpty
112122
==> disposeBag
113123

124+
vm.pageCount
125+
~~> pageCount.rx.text.orEmpty
126+
==> disposeBag
127+
114128
vm.zoomScale
115129
.asDriver(onErrorJustReturn: "")
116130
~~> zoomScale.rx.text.orEmpty
@@ -139,6 +153,13 @@ class ChapterPageCollectionViewController: NSViewController {
139153

140154
collectionView.scrollToVisible(targetRect)
141155
}
156+
157+
func scrollToChapter(atIndex index: Int) {
158+
vm.setCurrentPageIndex(index)
159+
160+
let set: Set<IndexPath> = [IndexPath(item: index, section: 0)]
161+
collectionView.scrollToItems(at: set, scrollPosition: NSCollectionViewScrollPosition.top)
162+
}
142163
}
143164

144165
extension ChapterPageCollectionViewController: NSCollectionViewDataSource {

Yomu/ViewModels/ChapterPageCollectionViewModel.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ struct ChapterPageCollectionViewModel {
8989
let zoomScale: Driver<String>
9090
let headerTitle: Driver<String>
9191
let readingProgress: Driver<String>
92+
let pageCount: Driver<String>
9293
let zoomScroll: Driver<ScrollOffset>
9394
let disposeBag = DisposeBag()
9495

@@ -109,7 +110,6 @@ struct ChapterPageCollectionViewModel {
109110
let _currentPageIndex = self._currentPageIndex
110111

111112
chapterVM = chapterViewModel
112-
113113
chapterPages = _chapterPages.asDriver()
114114

115115
reload = chapterPages
@@ -120,6 +120,10 @@ struct ChapterPageCollectionViewModel {
120120
.asDriver()
121121
.map { String($0 + 1) }
122122

123+
pageCount = _chapterPages
124+
.asDriver()
125+
.map { "\($0.count) pages" }
126+
123127
zoomIn
124128
.map {
125129
ZoomScale(scale: _zoomScale.value.scale + Config.chapterPageSize.zoomScaleStep)
@@ -198,4 +202,8 @@ struct ChapterPageCollectionViewModel {
198202
func setZoomScale(_ scale: String) {
199203
_zoomScale.value = ZoomScale(scale: scale)
200204
}
205+
206+
func chapterIndexIsValid(index: Int) -> Bool {
207+
return 0 ... (count - 1) ~= index
208+
}
201209
}

Yomu/Views/xibs/ChapterPageCollection.xib

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<outlet property="collectionView" destination="IEp-r8-DMM" id="eZ6-Qc-gUP"/>
1414
<outlet property="headerTitle" destination="5l1-IJ-UVG" id="IWO-FR-7AU"/>
1515
<outlet property="nextChapterButton" destination="FZR-ij-u6b" id="kdk-PO-lRL"/>
16+
<outlet property="pageCount" destination="E5O-V0-gGw" id="A6o-nX-Ew8"/>
1617
<outlet property="previousChapterButton" destination="iOD-h6-QOG" id="BAe-II-b1t"/>
1718
<outlet property="readingProgress" destination="OsJ-kq-iDe" id="TVE-lV-BER"/>
1819
<outlet property="view" destination="c22-O7-iKe" id="TTh-Zp-q8q"/>

0 commit comments

Comments
 (0)