Skip to content

Commit

Permalink
v2.3.3
Browse files Browse the repository at this point in the history
Backlog
  • Loading branch information
ccz-2 committed Mar 10, 2020
1 parent 92e387a commit a5cb33f
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 49 deletions.
7 changes: 4 additions & 3 deletions NDFullScreen.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//No Distractions Full Screen v2.3.2
//var op = .5; //Defined in python
//No Distractions Full Screen v2.3.3
//var op = 0.5; //Defined in python
//var color = 'rgba(110, 110, 200, 0.8)';
console.log("appended")
$('head').append(`
<div id="NDFullScreenInjected"></div>
Expand All @@ -21,7 +22,7 @@ button[onclick*="more"] {
table:not([id="innertable"]) {
padding: 0px;
border-radius: 5px;
background-color: rgba(110, 110, 110, 0.8);
background-color: ` + color + `;
}
body, #outer{
Expand Down
87 changes: 46 additions & 41 deletions __init__.py
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
Expand All @@ -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():
Expand Down Expand Up @@ -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():
Expand All @@ -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}")
Expand All @@ -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')
Expand All @@ -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)
Expand Down Expand Up @@ -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":
Expand All @@ -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()
Expand Down
7 changes: 2 additions & 5 deletions config.json
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)"
}
7 changes: 7 additions & 0 deletions config.md
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
1 change: 1 addition & 0 deletions meta.json
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)"}}

0 comments on commit a5cb33f

Please sign in to comment.