-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Backlog
- Loading branch information
Showing
5 changed files
with
60 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
# No Distractions Full Screen | ||
# v2.3.2 2/10/2020 | ||
# v2.3.3 2/10/2020 | ||
# Copyright (c) 2020 Quip13 ([email protected]) | ||
# | ||
# MIT License | ||
|
@@ -22,18 +22,17 @@ | |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
# SOFTWARE. | ||
|
||
#aqt.utils.showText(str("test")) | ||
|
||
from aqt.qt import * | ||
from aqt import * | ||
from aqt.reviewer import Reviewer | ||
from anki.hooks import * | ||
|
||
|
||
#read files | ||
reformat = open(os.path.join(os.path.dirname(__file__), 'NDFullScreen.js')).read() | ||
hide_cursor = open(os.path.join(os.path.dirname(__file__), 'hide_cursor.js')).read() | ||
pad_cards = open(os.path.join(os.path.dirname(__file__), 'card_padding.js')).read() | ||
#aqt.utils.showText(str(hide_cursor)) | ||
config = mw.addonManager.getConfig(__name__) | ||
|
||
#sets up menu to display previous settings | ||
def recheckBoxes(): | ||
|
@@ -65,6 +64,7 @@ def recheckBoxes(): | |
|
||
#updates settings on menu action | ||
def user_settings(): | ||
config = mw.addonManager.getConfig(__name__) | ||
if mouseover_default.isChecked(): | ||
op = 1 | ||
elif mouseover_hidden.isChecked(): | ||
|
@@ -90,9 +90,11 @@ def user_settings(): | |
#CSS/JS injection | ||
def reviewer_wrapper(*args): | ||
height = mw.reviewer.bottom.web.height() #passed to js to calc card padding | ||
config = mw.addonManager.getConfig(__name__) | ||
op = config['answer_button_opacity'] | ||
cursorIdleTimer = config['cursor_idle_timer'] | ||
mw.reviewer.bottom.web.eval(f"var op = {op}; {reformat}") | ||
color = config['answer_button_border_color'] | ||
mw.reviewer.bottom.web.eval(f"var op = {op}; var color = '{color}'; {reformat}") | ||
mw.reviewer.bottom.web.eval(f"var cursorIdleTimer = {cursorIdleTimer}; {hide_cursor}") | ||
mw.reviewer.web.eval(f"var cursorIdleTimer = {cursorIdleTimer}; {hide_cursor}") | ||
mw.reviewer.web.eval(f"var height = {height}; {pad_cards}") | ||
|
@@ -104,83 +106,88 @@ def toggle(): | |
global og_reviewer | ||
global config | ||
global fs_window | ||
global window_flags | ||
global og_window_flags | ||
global window_flags_set | ||
config = mw.addonManager.getConfig(__name__) | ||
window_flags_set = False | ||
|
||
if not ndfs_enabled: | ||
if not ndfs_enabled: | ||
ndfs_enabled = True | ||
mw.showNormal() | ||
og_reviewer = Reviewer._initWeb #stores initial reviewer before wrap | ||
window_flags = mw.windowFlags() #stores initial flags | ||
og_window_flags = mw.windowFlags() #stores initial flags | ||
|
||
Reviewer._initWeb = wrap(og_reviewer, reviewer_wrapper) #tried to use triggers instead but is called prematurely upon suspend/bury | ||
|
||
if config['last_toggle'] == 'full_screen': | ||
mw.showFullScreen() | ||
if config['stay_on_top'] and not mw.isFullScreen(): | ||
mw.setWindowFlags(Qt.WindowStaysOnTopHint) | ||
mw.setWindowFlags(og_window_flags | Qt.WindowStaysOnTopHint) | ||
window_flags_set = True | ||
mw.show() | ||
|
||
mw.menuBar().setMaximumHeight(0) #Removes File Edit etc. | ||
|
||
#Builds new widget for window | ||
fs_window = QWidget() | ||
fs_layout = QGridLayout(fs_window) | ||
fs_layout.setContentsMargins(QMargins(0,0,0,0)) | ||
fs_layout.setSpacing(0) | ||
fs_layout.addWidget(mw.reviewer.web,1,1) | ||
fs_layout.addWidget(mw.toolbar.web,1,1)#,Qt.AlignTop) #need to add or breaks (garbagecollected) | ||
|
||
fs_layout.addWidget(mw.reviewer.web,2,1) | ||
|
||
mw.reviewer.bottom.web.page().setBackgroundColor(QColor(0, 0, 0, 0)) #qtwidget background removal | ||
fs_layout.addWidget(mw.reviewer.bottom.web,1,1,Qt.AlignBottom) | ||
fs_layout.addWidget(mw.reviewer.bottom.web,2,1,Qt.AlignBottom) | ||
|
||
mw.toolbar.web.setFixedHeight(0) | ||
fs_layout.addWidget(mw.toolbar.web,1,1,Qt.AlignTop) #need to add or breaks (garbagecollected) | ||
mw.menuBar().setMaximumHeight(0) #Removes File Edit etc. | ||
mw.toolbar.web.hide() | ||
mw.reviewer.bottom.web.hide() | ||
|
||
mw.mainLayout.addWidget(fs_window) | ||
mw.reset() | ||
else: | ||
ndfs_enabled = False #must be set before reset or endless recursion with statechange hook | ||
ndfs_enabled = False | ||
Reviewer._initWeb = og_reviewer #reassigns initial constructor | ||
mw.showNormal() | ||
mw.mainLayout.removeWidget(fs_window) | ||
mw.mainLayout.addWidget(mw.toolbar.web) | ||
mw.mainLayout.addWidget(mw.reviewer.web) | ||
mw.mainLayout.addWidget(mw.reviewer.bottom.web) | ||
mw.toolbar.web.adjustHeightToFit() | ||
mw.toolbar.web.show() | ||
mw.menuBar().setMaximumHeight(9999) | ||
|
||
QGuiApplication.restoreOverrideCursor() | ||
QGuiApplication.restoreOverrideCursor() #need to call twice | ||
mw.setWindowFlags(window_flags) #reassigns initial flags | ||
mw.show() | ||
|
||
if window_flags_set: #helps prevent annoying flickering when toggling | ||
mw.setWindowFlags(og_window_flags) #reassigns initial flags | ||
mw.show() | ||
mw.reset() | ||
|
||
# Limits full screen to just review | ||
def stateChange(new_state, old_state, *args): | ||
#aqt.utils.showText(str(new_state) + " " + str(old_state)) | ||
if 'review' in new_state.lower(): | ||
fullscreen.setDisabled(False) | ||
windowed.setDisabled(False) | ||
fullscreen.setText('Toggle Full Screen Mode') | ||
windowed.setText('Toggle Windowed Mode ') | ||
else: | ||
if ndfs_enabled: | ||
toggle() | ||
fullscreen.setDisabled(True) | ||
windowed.setDisabled(True) | ||
fullscreen.setText('Toggle Full Screen Mode (Only in review)') | ||
windowed.setText('Toggle Windowed Mode (Only in review)') | ||
|
||
#end full screen when review ends | ||
#aqt.utils.showText(str(old_state) + " -> " + str(new_state)) | ||
global ndfs_inReview | ||
if 'review' in new_state.lower() and ndfs_enabled: | ||
ndfs_inReview = True | ||
mw.reviewer.bottom.web.show() | ||
elif ndfs_enabled: | ||
ndfs_inReview = False | ||
QGuiApplication.restoreOverrideCursor() | ||
QGuiApplication.restoreOverrideCursor() #need to call twice | ||
mw.reviewer.bottom.web.hide() | ||
|
||
#Format changes when not in review | ||
addHook("afterStateChange", stateChange) | ||
|
||
def toggle_full_screen(): | ||
config = mw.addonManager.getConfig(__name__) | ||
config['last_toggle'] = 'full_screen' | ||
mw.addonManager.writeConfig(__name__, config) | ||
fullscreen.setShortcut('F11') | ||
windowed.setShortcut('') | ||
toggle() | ||
|
||
def toggle_window(): | ||
config = mw.addonManager.getConfig(__name__) | ||
config['last_toggle'] = 'windowed' | ||
mw.addonManager.writeConfig(__name__, config) | ||
windowed.setShortcut('F11') | ||
|
@@ -202,14 +209,12 @@ def toggle_window(): | |
|
||
display = QActionGroup(mw) | ||
|
||
fullscreen = QAction('Toggle Full Screen Mode (Only in review)', display) | ||
fullscreen = QAction('Toggle Full Screen Mode', display) | ||
fullscreen.triggered.connect(toggle_full_screen) | ||
fullscreen.setDisabled(True) #re-enabled in stateChange | ||
menu.addAction(fullscreen) | ||
|
||
windowed = QAction('Toggle Windowed Mode (Only in review)', display) | ||
windowed = QAction('Toggle Windowed Mode', display) | ||
windowed.triggered.connect(toggle_window) | ||
windowed.setDisabled(True) #re-enabled in stateChange | ||
menu.addAction(windowed) | ||
|
||
keep_on_top = QAction(' Windowed Mode Always On Top', mw) | ||
|
@@ -245,7 +250,7 @@ def toggle_window(): | |
try: | ||
#For Anki v2.1.20 (uses new hook) | ||
def hide_cursor_hook(handled, msg, context): | ||
if msg == "cursor_hide": | ||
if msg == "cursor_hide" and ndfs_inReview: | ||
QGuiApplication.setOverrideCursor(Qt.BlankCursor) | ||
return True, None | ||
elif msg == "cursor_show": | ||
|
@@ -257,7 +262,7 @@ def hide_cursor_hook(handled, msg, context): | |
gui_hooks.webview_did_receive_js_message.append(hide_cursor_hook) | ||
except: | ||
def linkHandler_wrapper(self, url): | ||
if url == "cursor_hide": | ||
if url == "cursor_hide" and ndfs_inReview: | ||
QGuiApplication.setOverrideCursor(Qt.BlankCursor) | ||
elif url == "cursor_show": | ||
QGuiApplication.restoreOverrideCursor() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,7 @@ | ||
{ | ||
"_1":"These can be set as desired.", | ||
"_2":"answer_button_opacity is from 0 (hidden) to 1 (solid). Regardless, mouseover will make answers opaque", | ||
"_3":"cursor_idle_timer sets how many miliseconds to wait before hiding cursor (negative values mean cursor will not be hidden)", | ||
"_4":"If settings are subsequently changed through menu buttons, these values will be overwritten and will need to be re-entered", | ||
"answer_button_opacity": 1, | ||
"cursor_idle_timer": 10000, | ||
"last_toggle": "full_screen", | ||
"stay_on_top": false | ||
"stay_on_top": false, | ||
"answer_button_border_color": "rgba(110, 110, 110, 0.8)" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
**Note: Changing settings through menu buttons will override respective values** | ||
|
||
- `answer_button_border_color`: Color of border around answer buttons | ||
- Accepts HTML color codes. For help, see: [Color Picker](https://www.hexcolortool.com/#6e6e6e,0.8) | ||
- `answer_button_opacity`: Pre-mouse hover opacity | ||
- 0 = hidden, 1 = solid. Must add leading 0 for decimals (e.g. 0.5) | ||
- `cursor_idle_timer`: Milliseconds to wait before hiding mouse |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"name": "No Distractions Full Screen Clean review interface", "mod": 1581384364, "config": {"answer_button_opacity": 1, "cursor_idle_timer": 10000, "last_toggle": "full_screen", "stay_on_top": false, "answer_button_border_color": "rgba(110, 110, 110, 0.8)"}} |