# ╔══════════════════════════════════════════════════════════════╗ # ║ Odak — KabaLang ile yazılmış Pomodoro zamanlayıcısı ║ # ║ Odaklan, mola ver, günün oturumlarını kaydet. ║ # ╚══════════════════════════════════════════════════════════════╝ # # Çalıştır: kabalang calistir odak.kbl # Deneme kipi: ODAK_DENEME=1 kabalang calistir odak.kbl # (1 dakika 1 saniye sürer — sunum ve sınama için) kullan kaba.arayuz kullan kaba.sistem izinler: ag_erisim = yanlis # ── Oturum türleri ──────────────────────────────────────────────── sayilabilir Kip: ODAK MOLA fonksiyon dakika_coz(secim: metin) -> sayi: # "Odak · 25 dk" → 25 parca = secim.bol(" · ")[1] don sayi(parca.degistir(" dk", "")) fonksiyon kip_coz(secim: metin) -> Kip: eger secim.icerir("mola"): don Kip.MOLA don Kip.ODAK # 1500 → "25:00" fonksiyon saat_metni(saniye: sayi) -> metin: dk = saniye // 60 sn = saniye % 60 don f"{dk:02d}:{sn:02d}" fonksiyon durum_metni(k: Kip, calisiyor: mantik) -> metin: eger degil calisiyor: don "Hazır olduğunda başlat" eger k == Kip.MOLA: don "☕ Mola — biraz nefes al" don "● Odaklanılıyor" # ── Durum ───────────────────────────────────────────────────────── saniye_carpani = 1 eger cevre.al("ODAK_DENEME") == "1": saniye_carpani = 60 toplam = 25 * 60 kalan = toplam kip = Kip.ODAK calisiyor = yanlis oturum_sayisi = 0 odak_dakikasi = 0 pencere Odak: baslik = "Odak — Pomodoro" genislik = 900 yukseklik = 620 tema = "koyu" yatay_kutu Govde: dikey_kutu Zamanlayici: girdi GorevGirdisi: metin = "KabaLang örnekleri" ipucu = "Ne üzerinde çalışıyorsun?" stil = "font-size: 17px; padding: 10px 12px; border-radius: 10px; border: 1px solid #1c2336; background: #0d1220; color: #e6e9f2;" # Canlı bağlama: yukarıdaki girdiye yazdıkça bu satır kendiliğinden değişir. etiket Baslik: metin = "Şu an: " + GorevGirdisi.metin stil = "font-size: 20px; font-weight: 700; color: #22d3ee; padding: 2px 4px 6px 4px;" acilir_liste Secim: secenekler = ["Odak · 25 dk", "Derin çalışma · 50 dk", "Kısa mola · 5 dk", "Uzun mola · 15 dk"] stil = "font-size: 17px; padding: 8px 12px; border-radius: 10px; background: #121829; color: #e6e9f2;" degistiginde: eger degil calisiyor: kip = kip_coz(Secim.secili_metin) toplam = dakika_coz(Secim.secili_metin) * 60 kalan = toplam Sayac.metin = saat_metni(kalan) Ilerleme.deger = 0 etiket Sayac: metin = "25:00" stil = "font-size: 112px; font-weight: 800; color: #ffffff; padding: 10px 0px 0px 6px;" etiket Durum: metin = "Hazır olduğunda başlat" stil = "font-size: 18px; color: #9ece6a; padding: 0px 8px 10px 8px;" ilerleme_cubugu Ilerleme: deger = 0 stil = "font-size: 14px; min-height: 22px; border-radius: 11px; background: #121829; color: #e6e9f2;" yatay_kutu Dugmeler: dugme Baslat: metin = "Başlat" stil = "font-size: 19px; font-weight: 700; min-height: 54px; border-radius: 14px; border: none; background: #377ef4; color: #ffffff;" tiklandiginda: calisiyor = degil calisiyor eger calisiyor: Baslat.metin = "Duraklat" degilse: Baslat.metin = "Sürdür" Durum.metin = durum_metni(kip, calisiyor) dugme Sifirla: metin = "Sıfırla" stil = "font-size: 19px; font-weight: 600; min-height: 54px; border-radius: 14px; border: 1px solid #1c2336; background: #121829; color: #c9d1e6;" tiklandiginda: calisiyor = yanlis kalan = toplam Sayac.metin = saat_metni(kalan) Ilerleme.deger = 0 Baslat.metin = "Başlat" Durum.metin = durum_metni(kip, calisiyor) dikey_kutu Gunluk: etiket GunlukBasligi: metin = "Bugün" stil = "font-size: 20px; font-weight: 700; color: #22d3ee; padding: 6px 4px;" etiket Ozet: metin = "0 oturum · 0 dk odak" stil = "font-size: 26px; font-weight: 800; color: #ffffff; padding: 2px 4px 10px 4px;" liste Oturumlar: stil = "font-size: 17px; color: #c9d1e6; background: #0d1220; border: 1px solid #1c2336; border-radius: 12px; padding: 8px; min-width: 330px;" # Saniyede bir: geri say, çubuğu ilerlet, bitince kaydet ve haber ver. zamanlayici 1000ms: eger calisiyor: kalan = kalan - saniye_carpani eger kalan < 0: kalan = 0 Sayac.metin = saat_metni(kalan) Ilerleme.deger = (toplam - kalan) * 100 // toplam eger kalan == 0: calisiyor = yanlis dakika = toplam // 60 eger kip == Kip.ODAK: oturum_sayisi = oturum_sayisi + 1 odak_dakikasi = odak_dakikasi + dakika Oturumlar.ekle(f"✓ {zaman.saat().parca(0, 5)} {GorevGirdisi.metin} · {dakika} dk") sistem.bildirim("Odak", "Oturum bitti! Kısa bir mola hak ettin.") degilse: Oturumlar.ekle(f"☕ {zaman.saat().parca(0, 5)} Mola · {dakika} dk") sistem.bildirim("Odak", "Mola bitti, kaldığın yerden devam.") Ozet.metin = f"{oturum_sayisi} oturum · {odak_dakikasi} dk odak" kalan = toplam Sayac.metin = saat_metni(kalan) Baslat.metin = "Başlat" Durum.metin = "Tamamlandı — yenisine hazır"