label new:

    python hide:

        import os
        import os.path


        # Выбор шаблона.
        
        choices = [ (p.name, p.info["description"], p, None, False) for p in projects if p.info.get("template", None)]

        template = paged_menu(u"Выбор шаблона", choices, u"Выберите проект, который будет использован как шаблон для Вашего нового проекта.")

        # Ввод имени проекта.
        
        name = prompt(u"Имя проекта", u"Введите название проекта и нажмите Ввод.\n", "main")
        name = name.strip()

        error = None

        if not name:
            error = u"Пожалуйста, введите непустое имя проекта!"
        elif os.path.exists(name):
            error = u"Файл или папка с именем '%s' Уже существует!" % name
        else:
            try:
                name = name.encode("ascii")
            except:
                error = u"Имя проекта должно содержать только ASCII-символы, поскольку архиватор файлов не поддерживает не-ASCII символы!"
                
        if error:
            store.error(u"Error", error, "main")

        # Указываем, что идёт создание проекта.
        title(u"Создание проекта")
        store.message = u"Идёт создание проекта. Пожалуйста, подождите."
        ui.pausebehavior(0)
        interact()
                    
        # А здесь собственно создаём проект.

        import shutil

        shutil.copytree(template.path, name)

        unlink = template.info.get("unlink", [ ])
        unlink += [ 'launcherinfo.py' ]

        for i in unlink:
            if os.path.exists(name + "/" + i):
                os.unlink(name + "/" + i)

        persistent.project = name

    call find_project from _call_find_project_2

label choose_theme:

    python hide:
        
        # Выбор цветовой схемы.
        
        themes = theme_data.keys()
        themes.sort()
        
        choices = [ ]
        for i in themes:

            def hovered(i=i):
                td = theme_data[i].copy()
                engine = td["theme"]
                del td["theme"]

                if engine == "roundrect":
                    renpy.style.restore(style_backup)
                    theme.roundrect(launcher=True, **td)
                    renpy.style.rebuild()
                    return ("repeat", 0)

            choices.append((i, None, i, hovered, False))

        color_theme = paged_menu(u"Выбор Темы", choices, u"Выберите цветовую схему оформления (Тему) для Вашего проекта. Вы всегда можете изменить цвета позже.", cancel='color_theme_cancel')

        # Восстановление темы по умолчанию.
        renpy.style.restore(style_backup)
        theme.roundrect(launcher=True)
        renpy.style.rebuild()

        ofn = project.path + "/game/options.rpy"

        import os
        import re

        if not os.path.exists(ofn):
            error(u"Смена схемы оформления", u"Файл options, похоже, не существует...", "main")
        
        inf = file(ofn, "rU")
        outf = file(ofn + ".new", "w")

        td = theme_data[color_theme]

        # TODO: Make this less specific to roundrect. Need to figure out
        # how to switch themes, rather than just recolor them.

        changing = False
        changed = False
        
        for l in inf:

            if re.match(r'\s*theme.roundrect\(', l):
                changing = True
                changed = True
            elif re.match(r'\s*\)', l):
                changing = False
            elif changing:

                def repl(m, td=td):
                    return m.group(1) + m.group(2) + " = \"" + td.get(m.group(2), m.group(3)) + "\","

                l = re.sub(r'^(\s*)(\w+) = "([\da-fA-F#]+)",', repl, l)
                
            outf.write(l)

        outf.close()
        inf.close()

        try:
            os.rename(ofn + ".new", ofn)            
        except:
            
            # I hate windows.
            os.rename(ofn, ofn + ".old")
            os.rename(ofn + ".new", ofn)
            os.unlink(ofn + ".old")
            
        if not changed:
            error(u"Смена схемы оформления", u"Не могу внести изменения в options.rpy, возможно он и так слишком сильно модифицирован.", "main")
        
    jump main
        


label color_theme_cancel:

    python hide:

        # Восстановление темы по умолчанию.
        renpy.style.restore(style_backup)
        theme.roundrect(launcher=True)
        renpy.style.rebuild()

    jump main
