še interaktivna kontrola za prelom #3
This commit is contained in:
18
projector.py
18
projector.py
@@ -276,8 +276,7 @@ class SongProjector:
|
|||||||
elif event.keysym == "BackSpace":
|
elif event.keysym == "BackSpace":
|
||||||
self.song_number = self.song_number[:-1]
|
self.song_number = self.song_number[:-1]
|
||||||
elif event.char == "*":
|
elif event.char == "*":
|
||||||
self.all_caps_mode = not self.all_caps_mode
|
self.toggle_split_mode()
|
||||||
self.show_page()
|
|
||||||
|
|
||||||
def enter_pressed(self, event=None):
|
def enter_pressed(self, event=None):
|
||||||
if self.song_number:
|
if self.song_number:
|
||||||
@@ -285,6 +284,21 @@ class SongProjector:
|
|||||||
elif not self.waiting_for_song:
|
elif not self.waiting_for_song:
|
||||||
self.next_page()
|
self.next_page()
|
||||||
|
|
||||||
|
def toggle_split_mode(self):
|
||||||
|
"""Preklopi med načinom preloma po kiticah in prostim prelomom."""
|
||||||
|
self.settings["split_by_stanza"] = not self.settings.get("split_by_stanza", False)
|
||||||
|
# Shranimo v settings.json, da se ohrani ob ponovnem zagonu
|
||||||
|
try:
|
||||||
|
with open(SETTINGS_PATH, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(self.settings, f, indent=4, ensure_ascii=False)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Napaka pri shranjevanju nastavitev: {e}")
|
||||||
|
|
||||||
|
# Ponovno naložimo trenutno pesem, da se osveži prelom
|
||||||
|
if self.song_number_last:
|
||||||
|
self.song_number = self.song_number_last
|
||||||
|
self.load_song()
|
||||||
|
|
||||||
# ------------------------------------------------------
|
# ------------------------------------------------------
|
||||||
# Nalaganje in obdelava besedila
|
# Nalaganje in obdelava besedila
|
||||||
# ------------------------------------------------------
|
# ------------------------------------------------------
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ def get_state():
|
|||||||
'current_text': 'Napaka: Aplikacija ni inicijalizirana',
|
'current_text': 'Napaka: Aplikacija ni inicijalizirana',
|
||||||
'page_info': '',
|
'page_info': '',
|
||||||
'caps_mode': False,
|
'caps_mode': False,
|
||||||
|
'split_by_stanza': False,
|
||||||
'can_prev': False,
|
'can_prev': False,
|
||||||
'can_next': False
|
'can_next': False
|
||||||
})
|
})
|
||||||
@@ -89,6 +90,7 @@ def get_state():
|
|||||||
'current_text': current_text,
|
'current_text': current_text,
|
||||||
'page_info': page_info,
|
'page_info': page_info,
|
||||||
'caps_mode': _projector_app.all_caps_mode,
|
'caps_mode': _projector_app.all_caps_mode,
|
||||||
|
'split_by_stanza': _projector_app.settings.get("split_by_stanza", False),
|
||||||
'can_prev': can_prev,
|
'can_prev': can_prev,
|
||||||
'can_next': can_next
|
'can_next': can_next
|
||||||
})
|
})
|
||||||
@@ -149,6 +151,15 @@ def toggle_caps():
|
|||||||
return jsonify({'status': 'ok'})
|
return jsonify({'status': 'ok'})
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/api/toggle_split', methods=['POST'])
|
||||||
|
def toggle_split():
|
||||||
|
"""Preklop med načinom preloma po kiticah in prostim prelomom"""
|
||||||
|
if _projector_app is not None:
|
||||||
|
_projector_app.toggle_split_mode()
|
||||||
|
|
||||||
|
return jsonify({'status': 'ok'})
|
||||||
|
|
||||||
|
|
||||||
@app.route('/api/search_songs', methods=['POST'])
|
@app.route('/api/search_songs', methods=['POST'])
|
||||||
def search_songs():
|
def search_songs():
|
||||||
"""Iskanje besedil po naslovu"""
|
"""Iskanje besedil po naslovu"""
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const displayArea = document.getElementById('display-area');
|
|||||||
const prevBtn = document.getElementById('prev-btn');
|
const prevBtn = document.getElementById('prev-btn');
|
||||||
const nextBtn = document.getElementById('next-btn');
|
const nextBtn = document.getElementById('next-btn');
|
||||||
const darkBtn = document.getElementById('dark-btn');
|
const darkBtn = document.getElementById('dark-btn');
|
||||||
|
const splitBtn = document.getElementById('split-btn');
|
||||||
const pageInfo = document.getElementById('page-info');
|
const pageInfo = document.getElementById('page-info');
|
||||||
const clearBtn = document.getElementById('clear-btn');
|
const clearBtn = document.getElementById('clear-btn');
|
||||||
const keypadButtons = document.querySelectorAll('.btn-key');
|
const keypadButtons = document.querySelectorAll('.btn-key');
|
||||||
@@ -37,6 +38,7 @@ const infoMessage = document.getElementById('info-message');
|
|||||||
const infoOkBtn = document.getElementById('info-ok-btn');
|
const infoOkBtn = document.getElementById('info-ok-btn');
|
||||||
|
|
||||||
let capsMode = false;
|
let capsMode = false;
|
||||||
|
let splitByStanza = false;
|
||||||
let wakeLock = null;
|
let wakeLock = null;
|
||||||
let lastStateSignature = "";
|
let lastStateSignature = "";
|
||||||
let lastPageInfo = "";
|
let lastPageInfo = "";
|
||||||
@@ -81,6 +83,7 @@ async function updateState(force = false) {
|
|||||||
current_text: data.current_text || '',
|
current_text: data.current_text || '',
|
||||||
page_info: data.page_info || '',
|
page_info: data.page_info || '',
|
||||||
caps_mode: data.caps_mode || false,
|
caps_mode: data.caps_mode || false,
|
||||||
|
split_by_stanza: data.split_by_stanza || false,
|
||||||
can_prev: !!data.can_prev
|
can_prev: !!data.can_prev
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -102,6 +105,13 @@ async function updateState(force = false) {
|
|||||||
darkBtn.classList.remove('active');
|
darkBtn.classList.remove('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
splitByStanza = data.split_by_stanza || false;
|
||||||
|
if (splitByStanza) {
|
||||||
|
splitBtn.classList.add('active');
|
||||||
|
} else {
|
||||||
|
splitBtn.classList.remove('active');
|
||||||
|
}
|
||||||
|
|
||||||
prevBtn.disabled = !data.can_prev;
|
prevBtn.disabled = !data.can_prev;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Napaka pri posodabljanju stanja:', error);
|
console.error('Napaka pri posodabljanju stanja:', error);
|
||||||
@@ -237,6 +247,16 @@ async function toggleCaps() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Preklop načina preloma po kiticah
|
||||||
|
async function toggleSplit() {
|
||||||
|
try {
|
||||||
|
await fetch('/api/toggle_split', { method: 'POST' });
|
||||||
|
await updateState(true);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Napaka pri preklopu načina preloma:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Odpri urejevalnik
|
// Odpri urejevalnik
|
||||||
async function openEditor(songId = null) {
|
async function openEditor(songId = null) {
|
||||||
try {
|
try {
|
||||||
@@ -383,6 +403,14 @@ darkBtn.addEventListener('click', () => {
|
|||||||
toggleCaps();
|
toggleCaps();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Prelom po kiticah
|
||||||
|
if (splitBtn) {
|
||||||
|
splitBtn.addEventListener('click', () => {
|
||||||
|
vibrate();
|
||||||
|
toggleSplit();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Skrij/Pokaži tipkovnico
|
// Skrij/Pokaži tipkovnico
|
||||||
if (toggleKeypadBtn) {
|
if (toggleKeypadBtn) {
|
||||||
toggleKeypadBtn.addEventListener('click', (e) => {
|
toggleKeypadBtn.addEventListener('click', (e) => {
|
||||||
@@ -551,10 +579,10 @@ document.addEventListener('keydown', (e) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// AAaa
|
// preklopi prelom
|
||||||
if (e.key === '*' || e.code === 'NumpadMultiply') {
|
if (e.key === '*' || e.code === 'NumpadMultiply') {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
toggleCaps();
|
toggleSplit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
<div id="menu-dropdown" class="menu-dropdown">
|
<div id="menu-dropdown" class="menu-dropdown">
|
||||||
<button id="toggle-keypad-btn" class="menu-item" type="button">Skrij tipkovnico</button>
|
<button id="toggle-keypad-btn" class="menu-item" type="button">Skrij tipkovnico</button>
|
||||||
<button id="dark-btn" class="menu-item" type="button">Velike/male črke (AAaa)</button>
|
<button id="dark-btn" class="menu-item" type="button">Velike/male črke (AAaa)</button>
|
||||||
|
<button id="split-btn" class="menu-item" type="button">Prelom po kiticah</button>
|
||||||
<button id="edit-song-btn" class="menu-item" type="button">Uredi besedilo</button>
|
<button id="edit-song-btn" class="menu-item" type="button">Uredi besedilo</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user