protected void ConvertPics()
    {
        string out_dir = "DATA3" + System.IO.Path.DirectorySeparatorChar;
        string pic_dir = "Pictures";

        string[] fonts = Directory.GetFiles(out_dir, "font*.ttx", SearchOption.AllDirectories);
        foreach (string font in fonts)
        {
            string[] slice   = font.Split(new string[] { "DATA3" }, StringSplitOptions.None);
            string   outpath = pic_dir + slice[slice.Length - 1] + ".png";
            Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outpath));
            ImageConv.TTXToPNG(font, outpath);
        }

        string[] pics = new string[] { System.IO.Path.Combine("DATA3", "13", "icon07.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "misswp.ar", "kabe122.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "misswp.ar", "kabe123.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "misswp.ar", "kabe124.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "misswp2.ar", "kabe130.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "qitemwp.ar", "kabe131.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "qlistwp.ar", "kabe125.ttx"),
                                       System.IO.Path.Combine("DATA3", "13", "qlistwp.ar", "kabe126.ttx"),
                                       System.IO.Path.Combine("DATA3", "2919", "title.ttx"),
                                       System.IO.Path.Combine("DATA3", "2930", "kabe120.ttx"),
                                       System.IO.Path.Combine("DATA3", "2931", "kabe125.ttx"),
                                       System.IO.Path.Combine("DATA3", "2931", "kabe126.ttx"),
                                       System.IO.Path.Combine("DATA3", "2932", "kabe131.ttx"),
                                       System.IO.Path.Combine("DATA3", "2939", "kabe130.ttx"),
                                       System.IO.Path.Combine("DATA3", "2940", "kabe122.ttx"),
                                       System.IO.Path.Combine("DATA3", "2940", "kabe123.ttx"),
                                       System.IO.Path.Combine("DATA3", "2940", "kabe124.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "icon02.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "icon03.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "icon04.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "icon05.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "icon07.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "iconwp10.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "iconwp11.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "iconwp13.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "iconwp15.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2962", "iconwp17.ar", "tex.ttx"),
                                       System.IO.Path.Combine("DATA3", "2916") };
        foreach (string pic in pics)
        {
            string[] slice   = pic.Split(new string[] { "DATA3" }, StringSplitOptions.None);
            string   outpath = pic_dir + slice[slice.Length - 1] + ".png";
            Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outpath));
            ImageConv.TTXToPNG(pic, outpath);
        }

        string[] screens = new string[] { "3057", "3058", "3059", "3101", "3107", "3117", "3123", "3124", "3133", "3146",
                                          "3165", "3188", "3251", "3258", "3297" };
        foreach (string screen in screens)
        {
            ImageConv.TbToPNG(System.IO.Path.Combine(out_dir, screen, "000.tb"), System.IO.Path.Combine(out_dir, screen, "000.tp"), System.IO.Path.Combine(pic_dir, screen + ".png"));
        }
    }
    protected void OnSaveButtonClicked(object sender, EventArgs e)
    {
        string child_dir  = "cDATA3" + System.IO.Path.DirectorySeparatorChar;
        string data_dir   = "DATA3" + System.IO.Path.DirectorySeparatorChar;
        string parent_dir = "pDATA3" + System.IO.Path.DirectorySeparatorChar;
        string pic_dir    = "Pictures" + System.IO.Path.DirectorySeparatorChar;
        string script_dir = "Script" + System.IO.Path.DirectorySeparatorChar;

        progressbar.Text = "Status: Work";
        Main.IterationDo(false);

        int i = 0;

        foreach (string file in ttx_list)
        {
            progressbar.Text = "Status: Converting image: " + file;
            i++;
            progressbar.Fraction = ((double)i / ttx_list.Count * 0.50);
            Main.IterationDo(false);
            Main.IterationDo(false);
            string ttx = data_dir + file.Substring(0, file.Length - 4);
            ImageConv.PNGToTTX(pic_dir + file, ttx);
            import_list.Add(ttx);
        }
        SortImportFiles();
        ttx_list.Clear();

        i = 0;
        foreach (string file in tb_list)
        {
            progressbar.Text = "Status: Converting image: " + file;
            i++;
            progressbar.Fraction = 0.5 + ((double)i / tb_list.Count * 0.05);
            Main.IterationDo(false);
            Main.IterationDo(false);
            string screen = data_dir + file.Substring(0, file.Length - 4) + System.IO.Path.DirectorySeparatorChar;
            ImageConv.PNGToTb(pic_dir + file, screen + "000.tp", screen + "000.tb");
            import_list.Add(screen + "000.tb");
        }
        SortImportFiles();
        tb_list.Clear();

        progressbar.Text     = "Status: Packing files";
        progressbar.Fraction = 0.58;
        Main.IterationDo(false);
        Main.IterationDo(false);
        foreach (string file in script_list)
        {
            import_list = ScriptReader(file);
            SortImportFiles();
        }
        script_list.Clear();

        foreach (string file in sdat_list)
        {
            string original = data_dir + file.Split('.') [0] + System.IO.Path.DirectorySeparatorChar + file.Split('.') [1] + "." + file.Split('.') [2];
            DatScript.Import(script_dir + file, original);
            child_list.Add(original);
        }
        sdat_list.Clear();

        //here place for lastgen implementation

        foreach (string file in grandchild_list.Distinct())
        {
            string[] sliced_grandchild = file.Split(System.IO.Path.DirectorySeparatorChar);
            string   father            = child_dir + sliced_grandchild [1] + System.IO.Path.DirectorySeparatorChar + sliced_grandchild [2];
            progressbar.Text = "Status: Packing " + file + " in " + father;
            Main.IterationDo(false);
            Pack(file, father);
            child_list.Add(father);
        }
        grandchild_list.Clear();

        foreach (string file in child_list.Distinct())
        {
            string[] sliced_child = file.Split(System.IO.Path.DirectorySeparatorChar);
            string   father       = parent_dir + sliced_child [1];
            progressbar.Text = "Status: Packing " + file + " in " + father;
            Main.IterationDo(false);
            Pack(file, father);
            parent_list.Add(father);
        }
        child_list.Clear();

        PackDATA(parent_list.Distinct().ToArray());
        parent_list.Clear();

        textview.Buffer.Text = "";
        progressbar.Text     = "Status: SLPS import";
        Main.IterationDo(false);
        SlpsImport();
        progressbar.Text     = "Status: Done";
        progressbar.Fraction = 1;
    }