using System; using System.IO; using System.Collections.Generic; using System.Diagnostics; using Gtk; namespace AmicEditor { public static class PlaConverter { // Comunicació amb subfinestres public static bool OkPressed {get;set;} public static Gdk.Color background_color {get;set;} // Color de fons per defecte, en format #RRGGBB //public static string font_color {get;set;}// Color de la font per defecte, en format #RRGGBB public static Gdk.Color font_color {get;set;}// Color de la font per defecte, en format #RRGGBB public static string font_name {get;set;} public static int font_size {get;set;} public static string font_negreta {get;set;} public static string font_italica {get;set;} public static string CatName{get;set;} public static string CatToSave{get;set;} public static string cadena_font{get;set;} public static Cathegory Pla2Amic(string [] files){ try{ // Default theme string theme="Default"; cadena_font=""; Cathegory cat=new Cathegory(); // Creació del directori temporal if (Directory.Exists("/tmp/lliurex-amic")) Directory.Delete("/tmp/lliurex-amic", true); Directory.CreateDirectory("/tmp/lliurex-amic"); // Obtenim les dades genèriques del primer arxiu if (File.Exists(files[0])) { GetProperties(files[0]); string [] parts=files[0].Split(new Char [] {'/'}); Console.WriteLine(parts[parts.Length-1]); cat.cathegoryname=(parts[parts.Length-1]).Substring(0,parts[parts.Length-1].Length-4); cat.cathegoryname=GeneralUtils.GoodEncode(cat.cathegoryname); CatName=cat.cathegoryname; // Creem la cadena per a la font... if(cadena_font=="") cadena_font=font_name.Trim()+" "+font_negreta+" "+font_italica+" "+font_size.ToString(); Console.WriteLine("111111111:"+cat.cathegoryname); NewCathegoryDialog ncd=new NewCathegoryDialog (cat.cathegoryname, background_color, cadena_font, font_color); Console.WriteLine("222222222:"+CatName); ncd.Modal=true; ncd.Show(); // Canviem el nom de la categoria internament, que pot haver variat en el diàleg, si ja existeix cat.cathegoryname=CatName; if (OkPressed){ // Ha polsat en OK. Anem a guardar la categoria nova! Console.WriteLine(Preferences.dir_gallery+"/"+CatName+".xml"); cat.file=Preferences.dir_gallery+"/"+CatName+".xml"; // Creem el directori per emmagatzemar les imatges CatToSave=CatName; if(Directory.Exists(Preferences.dir_img+"/Custom/"+CatToSave)){ int cont=0; while(Directory.Exists(Preferences.dir_img+"/Custom/"+CatToSave+"-"+cont.ToString())) cont++; CatToSave=CatToSave+"-"+cont.ToString(); } Directory.CreateDirectory(Preferences.dir_img+"/Custom/"+CatToSave); Console.WriteLine("Click on OK"); for(int i=0;i GetPictograms(string filename, string theme){ StreamReader sr=new StreamReader(filename, System.Text.Encoding.GetEncoding("ISO-8859-1")); string linea; int cont_no_name=0; // Comptador per als pictogrames que no tinguen nom -> "noname+cont_no_name" linea=sr.ReadLine(); List Pictogrames=new List(); while(linea!=null) { string [] linecontent = linea.Split(new Char [] {'='}); if (linecontent.Length>2){ // Mirem si ja tenim el tipus de lletra per defecte... if(cadena_font=="") cadena_font=font_name.Trim()+" "+font_negreta+" "+font_italica+" "+font_size.ToString(); // I anem carregant els diferents pictogrames del grid Pictogram pic=new Pictogram(); pic.background=background_color; // Fons per defecte // Parsegem la imatge PictImage MyPict=new PictImage(); MyPict.theme=theme; string ImageFile=GetElementFromString(linea, "PICTURE"); /*if (ImageFile==""){ // Si no té imatge, no incloem el pictograma! linea=sr.ReadLine(); // Llegim la nova línia continue; // I seguim amb la pròxima iteració. } */ if (ImageFile!=""){ string [] PartsArxiu=ImageFile.Split(new Char [] {'.'}); /*string rutaImatge_=filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile; if (File.Exists(rutaImatge_)) Console.WriteLine(rutaImatge_+" Existeix"); else Console.WriteLine(rutaImatge_+" NOOOO Existeix"); */ Console.ForegroundColor=System.ConsoleColor.Blue; Console.WriteLine("Image:"+ImageFile); Console.ForegroundColor=System.ConsoleColor.Green; if (PartsArxiu[PartsArxiu.Length-1]=="wmf") { string rutaImatge=filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile; if (File.Exists(rutaImatge)) { // Si existeix l'arxiu realment i si no està a tmp... if(!File.Exists("/tmp/lliurex-amic/"+ImageFile)) File.Copy(rutaImatge, "/tmp/lliurex-amic/"+ImageFile); System.Diagnostics.Process p=new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "wmf2fig"; startInfo.Arguments = "--image=png /tmp/lliurex-amic/"+ImageFile; p.StartInfo=startInfo; p.Start(); p.WaitForExit(); //Preferences.dir_img+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile) //if (File.Exists("/var/lib/lliurex-amic/resources/images/"+ if (File.Exists(Preferences.dir_img+"/Custom/"+CatToSave+"/"+ GeneralUtils.GoodEncode(ImageFile.Substring(0,ImageFile.Length-4)+".png"))){ int cont=0; while(File.Exists(Preferences.dir_img+"/Custom/"+CatToSave+"/"+ GeneralUtils.GoodEncode(ImageFile.Substring(0,ImageFile.Length-4)+cont.ToString()+".png"))) cont++; // Copiem la imatge amb el nom que no es repetisca File.Copy("/tmp/lliurex-amic/"+ImageFile.Substring(0,ImageFile.Length-4)+"-1.png", Preferences.dir_img+"/Custom/"+CatToSave+"/"+ GeneralUtils.GoodEncode(ImageFile.Substring(0,ImageFile.Length-4)+cont.ToString()+".png")); ImageFile=GeneralUtils.GoodEncode(ImageFile.Substring(0,ImageFile.Length-4)+cont.ToString()+".png"); } else { File.Copy("/tmp/lliurex-amic/"+ImageFile.Substring(0,ImageFile.Length-4)+"-1.png", //"/var/lib/lliurex-amic/resources/images/"+ Preferences.dir_img+"/Custom/"+CatToSave+"/"+ GeneralUtils.GoodEncode(ImageFile.Substring(0,ImageFile.Length-4)+".png")); ImageFile=GeneralUtils.GoodEncode(ImageFile.Substring(0,ImageFile.Length-4)+".png"); } //Console.WriteLine("******************"); //Console.WriteLine("/var/lib/lliurex-amic/resources/images/"+ // ImageFile.Substring(0,ImageFile.Length-4)+".png"); } } else { // Si no és un .wmf, no cal fer la conversió, però el copiem a // La galeria Default! Console.WriteLine(filename); Console.WriteLine(GeneralUtils.GoodEncode(ImageFile)); Console.WriteLine(CatName); Console.WriteLine(filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile); Console.WriteLine("Copying: "+filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile); Console.WriteLine("To: "+Preferences.dir_img+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile)); if (File.Exists(filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile)) { Console.WriteLine("EXISTS: "+filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile); // El copiem si no existeix l'arxiu destí if(!File.Exists(Preferences.dir_img+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile))) File.Copy(filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile, Preferences.dir_img+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile)); } else Console.WriteLine("NOOOOOOOOOT EXISTS: "+filename.Substring(0,filename.LastIndexOf("/")+1)+ImageFile); } if (File.Exists(Preferences.dir_img+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile))) { Console.WriteLine("EXISTSSSSSSSSSS: "+"Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile)); MyPict.source="Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(ImageFile); } else MyPict.source=""; Console.WriteLine("**"+ImageFile+"**"); Console.WriteLine("Adding: "+MyPict.source); pic.images.Add(MyPict); string caption=GetElementFromString(linea, "CAPTION"); pic.caption=caption; if (caption!="") pic.pictname=caption; // Com a identificador, posem el caption else pic.pictname="unnamed"+cont_no_name++; pic.actionSpeech=caption; // I també com a text a lletrejar /*** ARXIUS D'AUDIO ***/ pic.actionSound=""; string AudioFile=GetElementFromString(linea, "READ"); if (AudioFile!=""){ Console.WriteLine("Copying: "+filename.Substring(0,filename.LastIndexOf("/")+1)+AudioFile); Console.WriteLine("To: "+Preferences.dir_audio+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(AudioFile)); if (File.Exists(filename.Substring(0,filename.LastIndexOf("/")+1)+AudioFile)) { Console.WriteLine("EXISTS: "+filename.Substring(0,filename.LastIndexOf("/")+1)+AudioFile); if(!Directory.Exists(Preferences.dir_audio+"/Custom/"+CatToSave)) Directory.CreateDirectory(Preferences.dir_audio+"/Custom/"+CatToSave); // El copiem si no existeix l'arxiu destí if(!File.Exists(Preferences.dir_audio+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(AudioFile))) File.Copy(filename.Substring(0,filename.LastIndexOf("/")+1)+AudioFile, Preferences.dir_audio+"/Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(AudioFile)); pic.actionSound="Custom/"+CatToSave+"/"+GeneralUtils.GoodEncode(AudioFile); } } /*** FI ARXIUS D'AUDIO ***/ pic.actionChild=GetElementFromString(linea, "LINK"); pic.fontcolor=ConvertToRGB(GetElementFromString(linea, "FCOLOR")); pic.fontface=GetElementFromString(linea, "FNAME"); pic.fontsize=GetElementFromString(linea, "FSIZE"); string font_bold; if(GetElementFromString(linea, "FNEGRETA")!="NO") font_bold="Bold"; else font_bold=""; string font_italic; if(GetElementFromString(linea, "FITALICA")!="NO") font_italic="Italic"; else font_italic=""; pic.typeface=(font_bold+" "+font_italic).Trim(); // L'afegim si té imatge if (MyPict.source!="") Pictogrames.Add(pic); } // DEL IF IMAGEFILE.... } linea=sr.ReadLine(); } return Pictogrames; } public static void GetProperties(string filename){ // Retorna les propietats d'un grid en format plaphoons StreamReader sr=new StreamReader(filename, System.Text.Encoding.GetEncoding("ISO-8859-1")); string linia=""; linia=sr.ReadLine(); while(linia!=null) { string [] linecontent = linia.Split(new Char [] {'='}); if (linecontent.Length==2){ // Atributs generals switch(linecontent[0].Trim()){ case "COLOR": // el posarem com a valor per defecte... PlaConverter.background_color=ConvertToRGB(linecontent[1]); break; case "Font Color": PlaConverter.font_color=ConvertToRGB(linecontent[1]); break; case "Font Name": PlaConverter.font_name=linecontent[1]; break; case "Font Size": PlaConverter.font_size=int.Parse(linecontent[1]); break; case "Font Negreta": if(linecontent[1]=="NO") PlaConverter.font_negreta=""; else PlaConverter.font_negreta="Bold"; break; case "Font Itàlica": if(linecontent[1]=="NO") PlaConverter.font_italica=""; else PlaConverter.font_italica="Italic"; break; } } linia=sr.ReadLine(); } } public static string GetElementFromString(string linea, string item){ // Primera passada: Busquem l'ítem que ens passen int i,j; i=0; j=0; bool trobat=false; while(i=item.Length) trobat=true; i++; } if (trobat){ //Console.WriteLine(linea.Substring(i+1).IndexOf("\"")); return linea.Substring(i+1,linea.Substring(i+1).IndexOf("\"")); } return ""; } public static Gdk.Color ConvertToRGB(string color){ int colorHex=int.Parse(color); byte R=byte.Parse((colorHex&0x0000FF).ToString()); byte G=byte.Parse(((colorHex&0x00FF00)>>8).ToString()); byte B=byte.Parse(((colorHex&0xFF0000)>>16).ToString()); //Console.WriteLine("("+R+","+G+","+B+")"); Gdk.Color RetColor=new Gdk.Color(R,G,B); return RetColor; } } }