Example #1
0
    def setup_menus(self):
        # completions
        def _complete_chartype(frag):
            return self.editor.list_all_chartypes()
        def _complete_mood(frag):
            return self.editor.list_all_moods()
        def _complete_topic(frag):
            return list(set(self.editor.get_available_topics() + self.editor.list_new_topics()))

        new_com = Command('new topic', 'Create a new topic')
        def _run(*args, **kwargs):
            topic = " ".join(args[0:])
            if topic in self.editor.get_available_topics():
                self.put("Topic %s already exists." % topic)
                self.editor.load_file(topic)
                self.sticker("Topic: '%s'" % self.editor.cwt)
            else:
                self.editor.cwt = topic
                self.put("New topic %s" % self.editor.cwt)
                self.sticker("Topic: '%s'" % self.editor.cwt)
            return 'edit'
        new_com.run = _run

        load_com = Command('load topic', 'Load a previous topic')
        def _run(*args, **kwargs):
            topic = " ".join(args[0:])
            success = self.editor.load_file(topic)
            if success:
                self.sticker("Topic: '%s'" % self.editor.cwt)
                return 'edit'
            return constants.FAILURE
        load_com.run = _run
        def _complete_topic(frag):
            return self.editor.get_available_topics()
        load_com.tabcomplete_hooks['topic'] = _complete_topic

        list_com = Command('list', 'Show available topics')
        def _run(*args, **kwargs):
            self.editor.list_topic_files()
            return constants.CHOICE_VALID
        list_com.run = _run

        sen_com = Command('sentence tags text', 'Create a new player sentence')
        def _run(*args, **kwargs):
            sentence = " ".join(args[1:])
            tag = args[0]
            self.editor.create_sentence(tag, sentence)
            return constants.CHOICE_VALID
        sen_com.run = _run
        def _complete(frag):
            tags = []
            for _id,tag,sentence in self.editor.sentences:
                for t in tag.split(','):
                    tags.append(t)
            return list(set(tags))
        sen_com.tabcomplete_hooks['tags'] = _complete

        res_com = Command('response sID chartype mood next_topic text', 'Create a new NPC response')
        def _run(*args, **kwargs):
            text = " ".join(args[4:])
            sen_id = int(args[0])
            _type = args[1]
            mood = args[2]
            _next = args[3]
            self.editor.create_response(sen_id, _type, mood, _next, text)
            return constants.CHOICE_VALID
        res_com.run = _run
        res_com.alias('res')
        res_com.tabcomplete_hooks['chartype'] = _complete_chartype
        res_com.tabcomplete_hooks['mood'] = _complete_mood
        res_com.tabcomplete_hooks['next_topic'] = _complete_topic

        list_topic_com = Command('list', 'Show current player sentences')
        def _run(*args, **kwargs):
            self.editor.list_topic()
            return constants.CHOICE_VALID
        list_topic_com.run = _run
        list_topic_com.alias('ls')

        del_res_com = Command('delete_r sen_id type res_id', 'Delete an NPC response')
        def _run(*args, **kwargs):
            sen_id = int(args[0])
            _type = args[1]
            res_id = int(args[2])
            self.editor.delete_response(sen_id, _type, res_id)
            return constants.CHOICE_VALID
        del_res_com.run = _run
        del_res_com.alias('delr')
        del_res_com.tabcomplete_hooks['type'] = _complete_chartype
        del_res_com.tabcomplete_hooks['mood'] = _complete_mood

        del_sen_com = Command('delete_s sen_id', 'Delete sentence by ID')
        def _run(*args, **kwargs):
            sen_id = int(args[0])
            self.editor.delete_sentence(sen_id)
            return constants.CHOICE_VALID
        del_sen_com.run = _run
        del_sen_com.alias('dels')

        edit_sen_com = Command('edit_s sen_id tags text', 'Edit an existing sentence')
        def _run(*args, **kwargs):
            sen_id = int(args[0])
            sentence = " ".join(args[2:])
            tag = args[1]
            self.editor.edit_sentence(sen_id, tag, sentence)
            return constants.CHOICE_VALID
        edit_sen_com.run = _run
        def _complete(frag):
            tags = []
            for _id,tag,sentence in self.editor.sentences:
                for t in tag.split(','):
                    tags.append(t)
            return list(set(tags))
        edit_sen_com.tabcomplete_hooks['tags'] = _complete

        write_com = Command('save', 'Save to a file')
        def _run(*args, **kwargs):
            self.editor.write_out(from_command=True)
            return constants.CHOICE_VALID
        write_com.run = _run

        cd_com = Command('cd path', 'Change current directory')
        def _run(*args, **kwargs):
            path = ""
            for part in args:
                path += part
            path = path.replace('\\', ' ')
            self.editor.path = path
            return constants.CHOICE_VALID
        cd_com.run = _run

        pwd_com = Command('pwd', 'Print current directory')
        def _run(*args, **kwargs):
            self.put(self.editor.path)
            return constants.CHOICE_VALID
        pwd_com.run = _run

        convoplay_com = Command('play chartype mood [-e entry_point]', 'Run a conversation')
        def _run(*args, **kwargs):
            entry = kwargs.get('e', 'greetings')
            char = args[0]
            mood = args[1]
            self.convoplayer.run(char, mood, entry=entry)
            return entry.lower()
        convoplay_com.run = _run

        # builtins
        back_com = BackCommand('main')
        def _run(*args, **kwargs):
            self.remove_sticker("Topic: '%s'" % self.editor.cwt)
            self.editor.unload_file(self.editor.cwt)
            return back_com.default_run(*args, **kwargs)
        back_com.run = _run
        quit_com = QuitCommand(self.name)
        quit_com.alias('q')
        run_com = RunScriptCommand(self)
        clear_com = ClearCommand(self)

        defaults = [quit_com, run_com, clear_com]

        main_menu = Menu('main')
        main_menu.title = "Main menu"
        main_menu.commands = [new_com, load_com, list_com, cd_com, pwd_com,
                              convoplay_com] + defaults

        edit_menu = Menu('edit')
        edit_menu.title = "Editing menu"
        edit_menu.commands = [sen_com, edit_sen_com, del_sen_com, res_com, del_res_com,
                              list_topic_com, back_com, convoplay_com, write_com] + defaults

        self.menus = [main_menu, edit_menu]
        self.menu = 'main'  # TODO - hide this somehow?