33
33
import android .webkit .JavascriptInterface ;
34
34
import android .webkit .WebSettings ;
35
35
import android .webkit .WebView ;
36
+ import android .widget .FrameLayout ;
36
37
import android .widget .HorizontalScrollView ;
37
38
import android .widget .SearchView ;
38
39
import android .widget .Toast ;
51
52
import net .gsantner .markor .frontend .MarkorDialogFactory ;
52
53
import net .gsantner .markor .frontend .filebrowser .MarkorFileBrowserFactory ;
53
54
import net .gsantner .markor .frontend .textview .HighlightingEditor ;
55
+ import net .gsantner .markor .frontend .textview .LineNumbersTextView ;
54
56
import net .gsantner .markor .frontend .textview .TextViewUtils ;
55
57
import net .gsantner .markor .model .AppSettings ;
56
58
import net .gsantner .markor .model .Document ;
@@ -91,10 +93,12 @@ public static DocumentEditAndViewFragment newInstance(final @NonNull Document do
91
93
private HighlightingEditor _hlEditor ;
92
94
private WebView _webView ;
93
95
private MarkorWebViewClient _webViewClient ;
96
+ private FrameLayout _editorHolder ;
94
97
private ViewGroup _textActionsBar ;
95
98
96
99
private DraggableScrollbarScrollView _primaryScrollView ;
97
100
private HorizontalScrollView _hsView ;
101
+ private LineNumbersTextView _lineNumbersView ;
98
102
private SearchView _menuSearchViewForViewMode ;
99
103
private Document _document ;
100
104
private FormatRegistry _format ;
@@ -132,9 +136,12 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
132
136
final Activity activity = getActivity ();
133
137
134
138
_hlEditor = view .findViewById (R .id .document__fragment__edit__highlighting_editor );
139
+ _editorHolder = view .findViewById (R .id .document__fragment__edit__editor_holder );
135
140
_textActionsBar = view .findViewById (R .id .document__fragment__edit__text_actions_bar );
136
141
_webView = view .findViewById (R .id .document__fragment_view_webview );
137
142
_primaryScrollView = view .findViewById (R .id .document__fragment__edit__content_editor__scrolling_parent );
143
+ _lineNumbersView = view .findViewById (R .id .document__fragment__edit__line_numbers_view );
144
+
138
145
_cu = new MarkorContextUtils (activity );
139
146
140
147
// Using `if (_document != null)` everywhere is dangerous
@@ -148,6 +155,9 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
148
155
return ;
149
156
}
150
157
158
+ _lineNumbersView .setup (_hlEditor );
159
+ _lineNumbersView .setLineNumbersEnabled (_appSettings .getDocumentLineNumbersEnabled (_document .path ));
160
+
151
161
if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP && _appSettings .getSetWebViewFulldrawing ()) {
152
162
WebView .enableSlowWholeDocumentDraw ();
153
163
}
@@ -202,7 +212,6 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
202
212
_hlEditor .setTextColor (_appSettings .getEditorForegroundColor ());
203
213
_hlEditor .setGravity (_appSettings .isEditorStartEditingInCenter () ? Gravity .CENTER : Gravity .NO_GRAVITY );
204
214
_hlEditor .setHighlightingEnabled (_appSettings .getDocumentHighlightState (_document .path , _hlEditor .getText ()));
205
- _hlEditor .setLineNumbersEnabled (_appSettings .getDocumentLineNumbersEnabled (_document .path ));
206
215
_hlEditor .setAutoFormatEnabled (_appSettings .getDocumentAutoFormatEnabled (_document .path ));
207
216
if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
208
217
// Do not need to send contents to accessibility
@@ -526,7 +535,7 @@ public boolean onOptionsItemSelected(@NonNull final MenuItem item) {
526
535
if (saveDocument (false )) {
527
536
TextConverterBase converter = FormatRegistry .getFormat (_document .getFormat (), activity , _document ).getConverter ();
528
537
_cu .shareText (getActivity (),
529
- converter .convertMarkup (getTextString (), getActivity (), false , _hlEditor .isLineNumbersEnabled (), _document .file ),
538
+ converter .convertMarkup (getTextString (), getActivity (), false , _lineNumbersView .isLineNumbersEnabled (), _document .file ),
530
539
"text/" + (item .getItemId () == R .id .action_share_html ? "html" : "plain" )
531
540
);
532
541
}
@@ -615,9 +624,9 @@ public void onFsViewerConfig(GsFileBrowserOptions.Options dopt) {
615
624
return true ;
616
625
}
617
626
case R .id .action_line_numbers : {
618
- final boolean newState = !_hlEditor .isLineNumbersEnabled ();
627
+ final boolean newState = !_lineNumbersView .isLineNumbersEnabled ();
619
628
_appSettings .setDocumentLineNumbersEnabled (_document .path , newState );
620
- _hlEditor .setLineNumbersEnabled (newState );
629
+ _lineNumbersView .setLineNumbersEnabled (newState );
621
630
updateMenuToggleStates (0 );
622
631
return true ;
623
632
}
@@ -738,7 +747,7 @@ private void updateMenuToggleStates(final int selectedFormatActionId) {
738
747
mi .setChecked (_hlEditor .getHighlightingEnabled ());
739
748
}
740
749
if ((mi = _fragmentMenu .findItem (R .id .action_line_numbers )) != null ) {
741
- mi .setChecked (_hlEditor .isLineNumbersEnabled ());
750
+ mi .setChecked (_lineNumbersView .isLineNumbersEnabled ());
742
751
}
743
752
if ((mi = _fragmentMenu .findItem (R .id .action_enable_auto_format )) != null ) {
744
753
mi .setChecked (_hlEditor .getAutoFormatEnabled ());
@@ -756,19 +765,17 @@ private void updateMenuToggleStates(final int selectedFormatActionId) {
756
765
}
757
766
758
767
private boolean isWrapped () {
759
- return _hsView == null || (_hlEditor .getParent () == _primaryScrollView );
768
+ return _hsView == null || (_hlEditor .getParent () == _editorHolder );
760
769
}
761
770
762
771
private void setHorizontalScrollMode (final boolean wrap ) {
763
772
final Context context = getContext ();
764
773
if (context != null && _hlEditor != null && isWrapped () != wrap ) {
765
-
766
774
final int [] sel = TextViewUtils .getSelection (_hlEditor );
767
-
768
775
final boolean hlEnabled = _hlEditor .getHighlightingEnabled ();
769
776
_hlEditor .setHighlightingEnabled (false );
770
777
771
- _primaryScrollView .removeAllViews ();
778
+ _editorHolder .removeAllViews ();
772
779
if (_hsView != null ) {
773
780
_hsView .removeAllViews ();
774
781
}
@@ -778,15 +785,14 @@ private void setHorizontalScrollMode(final boolean wrap) {
778
785
_hsView .setFillViewport (true );
779
786
}
780
787
_hsView .addView (_hlEditor );
781
- _primaryScrollView .addView (_hsView );
788
+ _editorHolder .addView (_hsView );
782
789
} else {
783
- _primaryScrollView .addView (_hlEditor );
790
+ _editorHolder .addView (_hlEditor );
784
791
}
785
792
786
793
_hlEditor .setHighlightingEnabled (hlEnabled );
787
-
788
794
// Run after layout() of immediate parent completes
789
- (wrap ? _primaryScrollView : _hsView ).post (() -> TextViewUtils .setSelectionAndShow (_hlEditor , sel ));
795
+ (wrap ? _editorHolder : _hsView ).post (() -> TextViewUtils .setSelectionAndShow (_hlEditor , sel ));
790
796
}
791
797
}
792
798
@@ -860,9 +866,9 @@ private boolean isDisplayedAtMainActivity() {
860
866
public void updateViewModeText () {
861
867
// Don't let text to view mode crash app
862
868
try {
863
- _format .getConverter ().convertMarkupShowInWebView (_document , getTextString (), getActivity (), _webView , _nextConvertToPrintMode , _hlEditor .isLineNumbersEnabled ());
869
+ _format .getConverter ().convertMarkupShowInWebView (_document , getTextString (), getActivity (), _webView , _nextConvertToPrintMode , _lineNumbersView .isLineNumbersEnabled ());
864
870
} catch (OutOfMemoryError e ) {
865
- _format .getConverter ().convertMarkupShowInWebView (_document , "updateViewModeText getTextString(): OutOfMemory " + e , getActivity (), _webView , _nextConvertToPrintMode , _hlEditor .isLineNumbersEnabled ());
871
+ _format .getConverter ().convertMarkupShowInWebView (_document , "updateViewModeText getTextString(): OutOfMemory " + e , getActivity (), _webView , _nextConvertToPrintMode , _lineNumbersView .isLineNumbersEnabled ());
866
872
}
867
873
}
868
874
0 commit comments