diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 5658626..0504e64 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -55,6 +55,8 @@ kotlin { implementation(libs.koin.compose.viewmodel.navigation) implementation(libs.bundles.voyager) implementation(libs.cafe.voyager.koin) + implementation(libs.androidx.material.icons.extended) + } commonTest.dependencies { implementation(libs.kotlin.test) diff --git a/composeApp/src/commonMain/composeResources/files/.fuse_hidden0000206a0000000a b/composeApp/src/commonMain/composeResources/files/.fuse_hidden0000206a0000000a new file mode 100644 index 0000000..2882ddd Binary files /dev/null and b/composeApp/src/commonMain/composeResources/files/.fuse_hidden0000206a0000000a differ diff --git a/composeApp/src/commonMain/composeResources/files/config.json b/composeApp/src/commonMain/composeResources/files/config.json index b8efdc1..e582c35 100644 --- a/composeApp/src/commonMain/composeResources/files/config.json +++ b/composeApp/src/commonMain/composeResources/files/config.json @@ -2,6 +2,14 @@ "themeMode": "DARK", "fontSize": 18.5, "playlist": [ + "assets://ffpm-428.txt", + "assets://ffpm-449.txt", + "assets://ffpm-489.txt", + "assets://ffpm-21.txt", + "assets://ffpm-179.txt", + "assets://ff-33.txt", + "assets://ffpm-297.txt", + "assets://ffpm-33.txt", "assets://ffpm-444-2.txt", "assets://ffpm-760.txt", "assets://ews-456.txt", diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-179.txt b/composeApp/src/commonMain/composeResources/files/ffpm-179.txt new file mode 100644 index 0000000..bc34c63 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-179.txt @@ -0,0 +1,10 @@ +M0:|c:Bb|m:4/4|r:12.13.14.15|t:FFPM 179 Ny Fanahy Masina Efa Tonga Tokoa|a:G. Ramiarison 1919- (Faha 100 taonan'ny IEB)|h:G. Ramiarison 1919- +U0:z0:62444444 844(444)/4 6244(44)44 4444 (444)/4 62422 (444)4 62422 (444)/4 6244 (222)244 42244Cz4 +N1:#s,ssFsdmmrdrrm--/sddtll-sdmmrdr--/srDrfmr--smRmsfm--/#t,dssfff--fmmrfrdtd +N2:#r,mmrmmsssssss--/mmmsff-smssFFsFs/sfmfssstlssFstls--/ssssssltlssflfmrm +N3:#s,ddlssddtdttd--/ddsltdtddddldtdr/ttTtrdtrdtd6--/mmdrttdrtddlllsss +N4:#d,d7rmssdsm/d6rmdddrrslt/s7--s#r,d6sm/d,dmsss--sd,mfrfssd, +Y1:Ny Fanahy Masina\ efa tonga tokoa./Mba homba ny mpitory ny Teny mahasoa./Koa mitsangana izao ande\ha ry mahery fo/Hatramin’ny faran’ny tany torio ny Teny soa. +Y2:Vo_asaron’ny\ aizim-pito Ny Nosinao;/Ny ody sy ny sampy no notompoiny tao;/Ny fahazarana koa, nangeja mafy tokoa,/Kanefa tonga ny mazava: Resy ny aizina\ ao. +Y3:Ry fana\hy voatafy hery ny Tompo\ anie/Ka efa miandry\ ana_o, injay miteny hoe:/«Angony, eny antsoy, Hanatona avokoa/Ny firenena eran-tany ho mpianatro tokoa ». +Y4:Tompo ti_a ô, ekeko ny antsonao;/Hafoiko ny hareko, ny tenako izao,/Ho vavolombelona, hijoro, hanafika,/Hitory sy hamafy ko_a: Tafio ny herinao. diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-21.txt b/composeApp/src/commonMain/composeResources/files/ffpm-21.txt new file mode 100644 index 0000000..50118d2 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-21.txt @@ -0,0 +1,9 @@ +M0:|c:F|m:4/4|r:8|t:FFPM 21 Derao Andriamanitra|a:Johanesa, Ambato, 1880 eo ho eo 1914|h:P. Nilsen Lund, (?) 1842-1914 +U0:zC:(22) 44yyC/(22)44yyC/(22) 44yyC/4 yy44C/(22)44yyC/444yyC/(22)44yyC/4yy44C/ (22)4(22)(22)(22)yy4/4yy44C +N1:drmmmrmfs/drmmmsfmr/drmmmrmsl/lsmdrmrd/rmffmmrrd/rmlssFFs/drmmmrmsl/lsmdrmrd/rmf-4r-slsfm/sllsfmrd +N2:#s,d-dddtdrm/dtdrddrdt/d-ddssddd/d6td/t-ds'ssSSl/tdmrrddt/d-ddssddd/d6td/tdr-4t-ddttd/rdddrdtd +N3:mfs7/mfsSllsss/mfssdrdmf/fssmlsfm/s-frddmmm/ssd'ttlls/mfssdrdmf/fssmlsfm/s-s-4s-s5/rmfslsfm +N4:#f,d-dms'f'mrd/mrdtlltds/d-dddtlsf/fmslfssd/s-ltddttl/sdlrrr,r,s/d-dddtlsf/fm,slfssd/zzzsltrs'f'ms'rs'dtlfmfssd +Y1:Derao Andri_amanitra,/Ry vazan-tany efatra,/Fa Izy no mamindra fo/Ka mety manome ny zo,/Naniraka ny Zanany,/Hanavotra ny olony/Ny sandriny tsy toha re,/Fa manan-kery lehibe./Mala_3za ny Anarany,/Fa lehibe ny asany. +Y2:Ny zavatra rehetra e,/Ny ranomasin-dehibe,/Ire_o tendrombohitra,/Ny saha feno ahitra,/Ny hazo sy ny vorona/Ny vato sy ny zavona,/Ny voninkazo manitra,/Ny endriky ny lanitra/Dia sa_3my tsy mijanona/Midera ny Mpamorona. +Y3:Ry olona navotana,/Mba mitsangàna faingana,/Ka miderà ny Tomponao,/Izay nanavotra anao,/Fa he, ny voninahiny/Manerana ny taniny./Tendre_o ny valihanao/Ka miventesa hira vao:/Ry vo_3avonjy ô, derao/Ny Ray Mpamorona anao! diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-297.txt b/composeApp/src/commonMain/composeResources/files/ffpm-297.txt new file mode 100644 index 0000000..cd1a645 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-297.txt @@ -0,0 +1,13 @@ +M0:|c:Ab|m:6/4|r:7.6.7.6.8.7.8.8.|t:FFPM 297 Ry Havanay Malala|a:V. Rasamoelina|h:G.C. Stebbins 1846-1945 +U0:zK:48484C8/48484K/48484C8/48484(C444)/4444444448z44444444448z4/624444624444624624Kz4/4444444448z44444444448z4/4444448484C(84)K +N1:#s,ssmfmmr/ssrmrd/dldflsm/mmrlrr-3/m-3Rmd-3d-3tdl-3/s-3dms'-3mdr-6/m-3Rmd-3d-3tdl-3/s-3dmrltsd-3 +N2:#r,mmslsss/fffsfm/mfllfms/sF4s-3/s-3Fsm-3l-3Slf-3/m-3sdm'-3ddtttllFs/s-3Fsm-3l-3Slf-3/m-3msf4mfrm +N3:#s,d6t/t5d/d7/d5t-3/d4-zs4ldff-zd4/d4-zd4-zsssFfrt/d4-zs4ldff-zd4/d4-dtrrtdlSs +N4:#d,d5ss/s5d/df4dd/dr4sfmr/d4-zd4f4-zf4/d4-z#dd4-zr3#d,r3s/d4-zd4f4-zf4/s4-s5d-3 +Y1:Ry havanay malala!/Manolo-tena\ izao./Fotoana mahafaly/Iraisan-tsika\ anio;/Fa_4ly ‘zahay_4ma\n_4dray anao_4/Hia_4ra-mano\m_4po ny Ray,_7/Je_4so anie_4ha\n_4dray anao!_4/Mba_4ho sakai_zany_tokoa. +Y2:Hajao ny fanekena,/Adidinao efao./Ataovy tsy terena/Izay andraikitrao./Je_4reo Jeso_4ka_4matokia,_4/Fa_4Izy no_4hiahy\ anao._7/Ka_4mandrosoa_4sy_4mifalia,_4/Ha_4nefa\ izay anjaranao. +O1:3,4:50:Faly 'zahay_3mandray anao, faly 'zahay_3mandray anao/Faly 'zahay_3mandray anao_3Hiara-manompo ny Ray/Jeso anie_3Handray anao, Jeso anie_3handray anao/Mba ho sakai_zany tokoa. +O2:3,4:50:Jereo Jeso_3Ka matokia, Jereo Jeso_3Ka matokia/Jereo Jeso_3Ka matokia_3Fa Izy no hiahy\ anao./Ka mandrosoa_3sy mifalia, Ka mandrosoa_3sy mifalia/Hanefa\ izay _anjaranao anja +O1:3:137:tokoa +02:3:137:ranao + diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-33.txt b/composeApp/src/commonMain/composeResources/files/ffpm-33.txt new file mode 100644 index 0000000..b68e93e --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-33.txt @@ -0,0 +1,9 @@ +M0:|c:A|m:4/4|r:7.7.7.6.D|t:FFPM 33 - Tompo ô, Tsy Takatray|a:J. Rakotonirainy, 1926-|h:J.Rakotonirainy, 1926- +U0:z0:444444(44)/4444448/4444444/44444(4444)/444444(44)/4444448/4444444/44444G +N1:#l,mdfdmrd-/dtdrdls/dtdrmfs/mrdtls,---/mdfdmrd-/dtdrdls/dtdrmfs/fmdmrd +N2:#m,dsdsdtsT/lSlllfm/ssstddd/dtssFs---/dsdsdtsT/lSltlfm/ssstddd/ddsdts +N3:#t,smlmsfm-/d7/dtdrmlm/ssmrdr---/smlmsfm-/d7/dtdrmlm/lsmsfm +N4:#d,d4ssd-/f6d/mrmsd'lm/dt,drrsfmr/d4ssd-/f6d/mrmsd'lm/fssss,d +Y1:Tompo ô, tsy takatray/Ny hasoan’ny antranao;/Zava-mahagaga\ anay/Ny fiti_avanao./He, mpanota izahay/Nefa haso_avinao;/Avotr’aina azonay;/Misaotra no atao. +Y2:Tompo ô, Mpanjakanay/Fatratra ny herinao/Ts’isy zavatra izay/Ma\hasakana Anao!/Nefa mora fo Hianao/Fa mandefitra\ aminay,/Ko_a dia misaotra\ Anao/Fa afaka izahay. +Y3:Tompo Andriamanitray,/Avy izahay izao/Raiso ny fi_ainanay;/Anao, ka anjakao./Tompo ô, tsy takatray/Ny hasoan’ny antranao;/Zava-mahagaga\ anay/Ny fiti_avanao. diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-428.txt b/composeApp/src/commonMain/composeResources/files/ffpm-428.txt new file mode 100644 index 0000000..a92479c --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-428.txt @@ -0,0 +1,10 @@ +M0:|c:G|m:2/4|r:P.M|t:FFPM 428 Reko izao ry Tompo|a:Rasoamahenina 1905-1986|h:Ranoason D. 1940- +U0:z0:yy4yyy(42)z11tt4(22)yy6z11 22222222 (22)22626262yy6z116262 222262 22222222 (22)y8 +N1:s#s,mmdssSldfrmdd #l,sFl'smdlltdmrlr sm--dd--dfmrfm #t,sllllmmrdr smdddfmrfm s,l,tdrmsdfm-rrd +N2:#s,sdddssSldltdssdtrdtslltldtlt zzddz-ssTldlrdrdlll ddtlttds sTldtrdslsltdtlld-tt s +N3:mssmmmmfmrssmmmRfmsm mmsFFFFszzsmz-mmmdmrs ssmDDmFFFFsrsm mmdmrssmfrmfsrmrslsfm +N4:#r,dddddddfsltd-d d6 llmr4szzddzzd,d,sfslt dtllllr4stddd dsfsltdmfsltdtlfs-ssd +Y1:Reko i\zao ry Tompo izany antsonao,/Mi_antso izany mpanompo mba ho irakao!${R=}Inty, inty, inty aho Jeso/Inty, inty, iraho ho aho Jeso/Ekeko re ny\ ho miaramilanao/Ho vonona hanao ny sitrakao, ka iraho! +Y2:O di_ovy Tompo izany molotro/Ka ny fo madio hanompo no atolotro! +Y3:Tsy hande\ha irery fa hiaraka\ Aminao/Ka dia mba ome_o ny hery sy Fanahinao! +Y4:Reko i\zao ny toky hoe: «Momba a\hy Ianao »/Ry Jesosy Tompo sy Zoky, vonona aho izao! diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-449.txt b/composeApp/src/commonMain/composeResources/files/ffpm-449.txt new file mode 100644 index 0000000..c027b95 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-449.txt @@ -0,0 +1,12 @@ +M0:|c:Eb|m:3/4|r:6.6.8.6.5.5.7.6.|t:FFPM 449 'Njay reko Tompo ô|a:L. Hartsough 1828-1919 Nad. J. Andrianaivoravelona 1877-1961|h:L. Hartsough 1828-1919 +U0:z8:(22) 6222 8/4 6222 8/4 6222 22$Q4/4 6222 8z4/ 6222 C/ 6222 C/6222 22$Q4/4 6222 8 +N1:dmsmrdd/drflsm/sd'tlslsm/drdmrd/d'tlsl/smrdr/slmrdrm/drdmrd +N2:#t,d-mdtdd/dtrfmd/mmsfmfmd/dts,dtd/mmfmf/mdtdt/dddtdtd/dtsdtd +N3:#rmsdsssm/msldds/sssdddds/msmsfm/ssddd/dssms/mfssmss/msmsfm +N4:#s,d-d5/dssddd/d8/ds4d/d5/ddsss/d7/ds4d +Y1:‘Njay reko Tompo ô!/‘Njay re ny fe_onao/Mi_antso ahy Hi_anao/hankany Kalvary;${R=}Tompo lehibe!/Raiso aho e;/Mba sasao ny ranao soa/Izay tao Kalvary. +Y2:Malemy aho e,/Ka mitaraina hoe:/Vonjeo ny aiko Tompo ô!/Vonjeo ny olonao:/Tompo lehibe! +Y3:Ny fi_adanam-po/Mandresy ny manjo;/Esorinao ny tahotro,/Ry Tompo ô vonjeo: +Y4:Mpanota tsy mandà,/Ry Tompo! mamelà;/Ny fahotako lehibe/Ifonako tokoa: +Y5:Ny foko tsy madio/Mba diovinao, anio;/Maloto aho, Tompo ô!/Sasao ho voadio: +Y6:Ny foko no sasao,/Ka diovinao izao;/Ny fahotako marobe/Levony avokoa: diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-489.txt b/composeApp/src/commonMain/composeResources/files/ffpm-489.txt new file mode 100644 index 0000000..c35e1b5 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/files/ffpm-489.txt @@ -0,0 +1,10 @@ +M0:|c:Ab|m:4/4|r:P.M|t:FFPM 489 Tena sambatra sy maha-te-ho tia|a:J. Rakotonirainy 1926-|h:Charles H. Gabriel 1856-1932 +U0:z0:222244 222244/ 2222442222(44)/222244222244/22224422228/2222y22 222244/222222(22)2222224/2222y2222224$Q4/22224422228 +N1:#s,ssdrmmmfrmds/drmfs'mfmrdr-/ssdrmmmfrmds/ltdfmdtdrmd/s'----fmrdrmdls/sttrrff-/sddmm#t,ss/s----fmrdrmssf/dtdfmdtdrmd +N2:#r,mmmfssslfsmm/sfs7Fsf/mmmfssslfsmm/fslls7/d----ssfmfsmfm/rssttttsmssdddd/d----ssfmfsTTl/lSlls7 +N3:#t,d8ttdd.dtdrmdrdrrt-/d8ttdd/d5mrmfsm/mfsf(mr)(d-)d6/trrffrrtdmmssmm/mfsf(mr)d8/d5mrmfsm +N4:#d,d6s4d2/#m,msd6tls-/#d,d6s4dd/f4s6d/#ddrmrd-(d-)#d,d6/s7-#m,d7/drm'rd-dd#d,dddmff/f4s6d +Y1:Tena sambatra sy maha-te ho ti_a/I\zany masina, madio fisainana/Fa mi_ara-dalana, mifankati_a/Amin’Andriamanitra Fi_ainana.${R=}Ma_5sina toko_a re ny Tompo./Tianay mba ho masina/Saina tena sy fana\hy/Ka_5fi_ainan-danitra toko_a/No santarin’izay mino sy manoa. +Y2:Indro, mampahery, mahatoky ko_a/Ra\ha mahitsy ny fijery, soa ny fo;/Fa ny fo madio sy masina toko_a:/Paradisa\ an-tany, feno zava-tsoa. +Y3:Ko_a halaviro ny fitaoman-dratsy,/Ny fisaikazana tsy mba masina;/Fa ny tia ny Tompo, dia\ olon-tsoa mitafy/Fahadiovan’ny Fanahy Masina. +Y4:Mi_araha lalana\ amin’i Jesosy/Fa ny fahavalo ta-hamotraka;/Mijoroa, reseo ny toetra mampihosi\na/Ao anaty loto sy ny fotaka. diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/CommonTools.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/CommonTools.kt deleted file mode 100644 index d4326f7..0000000 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/CommonTools.kt +++ /dev/null @@ -1,33 +0,0 @@ -package mg.dot.feufaro - -object CommonTools { - //companion object { - fun tonalityToNumber(tonality: String) : Int { - val result: Map = mapOf( - "C" to 1, - "C#" to 2, "Db" to 2, - "D" to 3, - "D#" to 4, "Eb" to 4, - "E" to 5, - "F" to 6, - "F#" to 7, "Gb" to 7, - "G" to 8, - "G#" to 9, "Ab" to 9, - "A" to 10, - "A#" to 11, "Bb" to 11, - "B" to 12 - ) - if (result.containsKey(tonality)) { - return result[tonality]!! - } - return -1 - } - fun numberToTonality(number: Int): String { - val result: Array = arrayOf("", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B") - return if (number in 1..12) { - result[number] - } else { - "" - } - } - } diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt index 7c65916..f9e64b4 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt @@ -111,6 +111,7 @@ object ScreenSolfa : Screen { ) Text(text = measureString) Text(text = "Stanza: $stanza") + ScreenTranspose.Content() } LazyVerticalGridTUO( gridTUOData, @@ -123,8 +124,8 @@ object ScreenSolfa : Screen { solfaScreenModel.loadNextInPlaylist() }, modifier = Modifier.height(40.dp)) { - val debugData: String by sharedScreenModel.data.collectAsState() - Text(debugData) + val nextLabel: String by sharedScreenModel.nextLabel.collectAsState() + Text(nextLabel) } FlowRow( modifier = Modifier.fillMaxWidth() diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenTranspose.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenTranspose.kt new file mode 100644 index 0000000..05fc2d9 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenTranspose.kt @@ -0,0 +1,64 @@ +package mg.dot.feufaro + +import SharedScreenModel +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import cafe.adriel.voyager.core.screen.Screen +import java.io.ObjectStreamException +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.material3.Text +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import cafe.adriel.voyager.koin.koinScreenModel +import mg.dot.feufaro.solfa.Transpose +import androidx.compose.ui.Alignment +import mg.dot.feufaro.solfa.TimeUnitObject + + +object ScreenTranspose : Screen { + @Composable + override fun Content() { + FlowRow( + modifier = Modifier.fillMaxWidth() + .windowInsetsPadding(WindowInsets.safeDrawing) + .padding(start = 8.dp, end = 8.dp, top = 8.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + val sharedScreenModel = koinScreenModel() + val originalKey by sharedScreenModel.songKey.collectAsState() + val transposeTo by sharedScreenModel.transposeTo.collectAsState() + val transposeAsIf by sharedScreenModel.transposeAsIf.collectAsState() + Box(modifier = Modifier.fillMaxHeight().align(Alignment.CenterVertically)) { + Text("Original Key: $originalKey") + } + Box(modifier = Modifier.fillMaxHeight().align(Alignment.CenterVertically)) { + Text("Transpose to key: $transposeTo") + } + Transpose.chooseKey { it -> + sharedScreenModel.setTransposeTo(it) + TimeUnitObject.changeTransposeTo(it) + } + Box(modifier = Modifier.fillMaxHeight().align(Alignment.CenterVertically)) { + Text("Transpose as if key was : $transposeAsIf") + } + Transpose.chooseKey { it -> + sharedScreenModel.setTransposeAsIf(it) + TimeUnitObject.changeTransposeAsIf(it) + } + } + } + @Throws(ObjectStreamException::class) // C'est une méthode de sérialisation Java, donc l'exception est nécessaire + private fun readResolve(): Any { + return this // Toujours retourner l'instance unique de ce singleton + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/di/AppModule.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/di/AppModule.kt index e7b4e81..648689b 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/di/AppModule.kt @@ -6,6 +6,7 @@ import mg.dot.feufaro.FileRepository import mg.dot.feufaro.DisplayConfigManager // Importez DisplayConfigManager import mg.dot.feufaro.musicXML.MusicXML import mg.dot.feufaro.solfa.Solfa +import mg.dot.feufaro.solfa.TimeUnitObject import mg.dot.feufaro.viewmodel.SolfaScreenModel import org.koin.dsl.module import org.koin.core.module.dsl.singleOf diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt index 40f3300..5ce768f 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt @@ -6,7 +6,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mg.dot.feufaro.FileRepository -import mg.dot.feufaro.CommonTools class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository: FileRepository) { private val T: MutableList = mutableListOf() @@ -388,32 +387,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository val tonality = line.uppercaseFirstMeta() meta["C"] = tonality sharedScreenModel.setSongKey(tonality) - val keyOrigin = CommonTools.tonalityToNumber(tonality) - val transposeTo = getOpt("transposeto") - val transposeAsIf = getOpt("transposeasif") - val keyDest = if (transposeTo != "") { - CommonTools.tonalityToNumber(transposeTo) - } else { - keyOrigin - } - val keyAsIf = if (transposeAsIf != "") { - if (transposeAsIf.toIntOrNull() != null) { - keyOrigin + transposeAsIf.toInt() - } else { - CommonTools.tonalityToNumber(transposeAsIf) - } - } else { - keyOrigin - } - if (!meta.containsKey("transposeValue")) { - meta["transposeValue"] = (keyDest - keyAsIf).toString() - } - if (keyAsIf != keyOrigin) { - meta["C"] = CommonTools.numberToTonality(keyAsIf) - } - if (keyDest != keyOrigin) { - meta["C"] += " (" + CommonTools.numberToTonality(keyDest) + ")" - } + sharedScreenModel.setTransposeAsIf(tonality) } } diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt index d35c127..78a766e 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt @@ -42,6 +42,7 @@ import androidx.compose.ui.text.style.BaselineShift import androidx.compose.ui.text.withStyle val FEUFAROO_TRIOLET_COLOR = Color.DarkGray +val FEUFAROO_KEY_CHANGE_COLOR = Color.Blue class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) { var mutableNoteVersion: Int by mutableStateOf(0) private var lyrics: MutableList = mutableListOf() @@ -71,6 +72,14 @@ class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) { lastHairPinStart = -1 lastHairPinSymbol = null } + var transposeAsIf: String = "" + var transposeTo: String = "" + fun changeTransposeAsIf(asIf: String) { + transposeAsIf = asIf + } + fun changeTransposeTo(to: String) { + transposeTo = to + } } init { nbBlock++ @@ -164,7 +173,9 @@ class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) { } else { transposeOldKey = prevTUO?.transposeOldKey ?: "Bb" "" } - + if (pTemplate.template == "z") { + return "$separatorBefore\n$separatorBefore\n$separatorBefore\n$separatorBefore" + } val retour = tuNotes.drop(1).joinToString (separator = "\n"){ separatorBefore + markersBefore + it.toString(transposeFrom, transposeTo).replace(Regex("[\\(\\)\\[\\]]"), "") } @@ -365,7 +376,7 @@ fun TimeUnitComposable( fontSize = 10.sp, baselineShift = BaselineShift.Superscript, //fontStyle = FontStyle.Italic, - color = Color.Blue + color = FEUFAROO_KEY_CHANGE_COLOR )) { append(text+" ") } diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Transpose.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Transpose.kt index 4c6b9b2..97ae384 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Transpose.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Transpose.kt @@ -1,5 +1,23 @@ package mg.dot.feufaro.solfa +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.runtime.mutableStateOf +import androidx.compose.material3.ExperimentalMaterial3Api // Nécessaire pour ExposedDropdownMenuBox +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.material3.DropdownMenu +import androidx.compose.runtime.getValue +import androidx.compose.runtime.setValue +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.IconButton +import androidx.compose.ui.unit.dp + class Transpose { companion object { val noteToNumber = listOf("d", "di", "r", "ri", "m", "f", "fi", "s", "si", "l", "ta", "t") @@ -38,5 +56,37 @@ class Transpose { .replace(",", "₁") .replace("'", "¹") + regexFound.groupValues[3] } + @OptIn(ExperimentalMaterial3Api::class) // Ajoutez cette annotation pour utiliser ExposedDropdownMenuBox + @Composable + fun chooseKey( + modifier: Modifier = Modifier, + label: String = "Choose a key", + menuItemData: List = keyToNumber, + onOptionSelected: (String) -> Unit + ) { + var expanded by remember { mutableStateOf(false) } + Box( + modifier = modifier + .padding(0.dp) + ) { + IconButton(onClick = {expanded = !expanded}) { + Icon(Icons.Default.ArrowDropDown, contentDescription = label) + } + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false} + ) { + menuItemData.forEach { option -> + DropdownMenuItem( + text = { Text(option)}, + onClick = { + onOptionSelected(option) + expanded = false + } + ) + } + } + } + } } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt index 2b6daf2..ed19862 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/viewmodel/SharedScreenModel.kt @@ -6,8 +6,8 @@ import kotlinx.coroutines.flow.asStateFlow import mg.dot.feufaro.solfa.TimeUnitObject class SharedScreenModel() : ScreenModel { - private val _data = MutableStateFlow("Next ...") - val data: StateFlow = _data.asStateFlow() + private val _nextLabel = MutableStateFlow("Next ...") + val nextLabel: StateFlow = _nextLabel.asStateFlow() private val _measure = MutableStateFlow("") val measure: StateFlow = _measure.asStateFlow() private val _songTitle = MutableStateFlow("") @@ -16,6 +16,10 @@ class SharedScreenModel() : ScreenModel { val stanza: StateFlow = _stanza.asStateFlow() private val _songKey = MutableStateFlow("") val songKey: StateFlow = _songKey.asStateFlow() + private val _transposeTo = MutableStateFlow("") + val transposeTo: StateFlow = _transposeTo.asStateFlow() + private val _transposeAsIf = MutableStateFlow("") + val transposeAsIf: StateFlow = _transposeAsIf.asStateFlow() private val _songAuthor = MutableStateFlow("") val songAuthor: StateFlow = _songAuthor.asStateFlow() private val _songComposer = MutableStateFlow("") @@ -37,7 +41,7 @@ class SharedScreenModel() : ScreenModel { val hasMarker: StateFlow = _hasMarker.asStateFlow() fun appendData(otherData: String) { - _data.value += otherData + _nextLabel.value += otherData } fun reset() { tempTimeUnitObjectList.clear() @@ -67,6 +71,12 @@ class SharedScreenModel() : ScreenModel { fun setSongKey(theSongKey: String) { _songKey.value = theSongKey } + fun setTransposeTo(key: String) { + _transposeTo.value = key + } + fun setTransposeAsIf(key: String) { + _transposeAsIf.value = key + } fun setSongAuthor(theSongAuthor: String) { _songAuthor.value = theSongAuthor } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9cbd080..03175eb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,6 +24,7 @@ material3 = "1.3.2" voyager = "1.1.0-beta03" [libraries] +androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } cafe-voyager-koin = { module = "cafe.adriel.voyager:voyager-koin" } koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" } koin-compose-viewmodel-navigation = { module = "io.insert-koin:koin-compose-viewmodel-navigation", version.ref = "koin" }