še interaktivna kontrola za prelom #3

This commit is contained in:
2026-03-25 22:29:37 +01:00
parent 1dcb80739c
commit 2b0e02e94c
4 changed files with 58 additions and 4 deletions

View File

@@ -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
# ------------------------------------------------------ # ------------------------------------------------------

View File

@@ -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"""

View File

@@ -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;
} }

View File

@@ -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>