Ignore:
Timestamp:
09/11/09 03:22:41 (10 years ago)
Author:
bretzel_parpg
Message:

Patch by Bretzel.

  • Wrote a parser for the new syntax I developed (I will post about this at the forums in the Dialog System Implementation thread)
  • Started to add a dialogue map, which will show you the flow of the dialogue
  • Overrode the resize event in the application so that it will also resize the editor and dialog map
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/writing_editor/scripts/dialogMap.py

    r251 r280  
    1717 
    1818from PyQt4 import QtGui, QtCore 
    19 from scripts.parser import Parser 
     19from scripts.parser import parse 
    2020 
     21class DialogScene(object): 
     22    """ 
     23    The scene that contains the dialog map 
     24    """ 
     25    def __init__(self, widget): 
     26        """ 
     27        Initialize the scene 
     28        @type widget: QtGui.QTextEdit 
     29        @param widget: the widget that contians the text to add objects from 
     30        @return: None 
     31        """ 
     32        self.widget = widget 
     33        self.refreshMap() 
    2134 
    22 class DialogMap(QtGui.QTreeWidget): 
     35    def refreshMap(self): 
     36        """ 
     37        Refresh the map to reflect all the new data 
     38        @return: None 
     39        """ 
     40        self.scene = QtGui.QGraphicsScene() 
     41        objects = self.findObjects(self.widget.toPlainText()) 
     42        self.addObjectsFromList(objects) 
     43 
     44    def findObjects(self, text): 
     45        """ 
     46        Parse text and then return the objects 
     47        @return: a list of all the objects 
     48        """ 
     49        objects = [] 
     50 
     51        ptext = parse(text) 
     52        objects.append(ptext) 
     53        for obj in ptext.options: 
     54            objects.append(obj) 
     55 
     56        return objects 
     57 
     58    def addObjectsFromList(self, obj_list): 
     59        """ 
     60        Add all of the objects in a list to the dialog map 
     61        @type obj_list: list 
     62        @param obj_list: the list of objects 
     63        @return: None 
     64        """ 
     65        pos = 50 
     66        for obj in obj_list: 
     67 #           print obj 
     68            item = QtGui.QGraphicsEllipseItem(pos,pos,50,50) 
     69            self.scene.addItem(item) 
     70            pos += 10 
     71#        print "Scene list: " + str(self.scene.items()) 
     72     
     73 
     74class DialogMap(QtGui.QGraphicsView): 
    2375    """ 
    24     The dialog map which will show the flow of the dialog 
     76    The dialog map final widget 
    2577    """ 
    2678    def __init__(self, settings, main_edit, parent): 
    2779        """ 
    28         Initialize the dialog map 
    2980        @type settings: settings.Settings 
    3081        @param settings: the settings for the editor 
     
    3687        """ 
    3788        QtGui.QWidget.__init__(self, parent) 
    38          
    39         self.settings = settings 
    40         self.parent = parent 
    41         self.resize(int(self.settings.res_width), int(self.settings.res_height)) 
    42         self.parser = Parser(main_edit, self.handleResult) 
    43  
    44         self.parentItem = None 
    45         self.inOption = False 
    46  
    47         self.setColumnCount(1) 
    48         self.setEditTriggers(self.NoEditTriggers) 
    49         self.setHeaderLabel("") 
    50          
    51     def handleResult(self, result, type_): 
    52         """ 
    53         Take the result, determine where to put it in the dialog map, then put it there 
    54         @type result: string 
    55         @param result: the result to be handled 
    56         @type type_: string 
    57         @param type_: the type of result 
    58         @return: None 
    59         """ 
    60         text = result.split(' ') 
    61  
    62         if (type_ == "SCRIPTNAME"): 
    63             self.setHeaderLabel(text[1]) 
    64  
    65         elif (type_ == "SAY"): 
    66             sayText = text[0] + " says " + text[2] 
    67             self.sayItem = QtGui.QTreeWidgetItem() 
    68             self.sayItem.setText(0, sayText) 
    69             self.insertItem(self.sayItem) 
    70  
    71         elif (type_ == "ATTACK"): 
    72             attackText = text[0] + " attacks " + text[2] 
    73             self.attackItem = QtGui.QTreeWidgetItem() 
    74             self.attackItem.setText(0, attackText) 
    75             self.insertItem(self.attackItem) 
    76  
    77         elif (type_ == "OPTION"): 
    78             optionText = "Option " + text[1] 
    79             self.optionItem = QtGui.QTreeWidgetItem() 
    80             self.optionItem.setText(0, optionText) 
    81             self.insertItem(self.optionItem) 
    82             self.parentItem = self.optionItem 
    83             self.inOption = True 
    84  
    85         elif (self.inOption and type_ == "."): 
    86             option_text = result.split('.') 
    87             itemText = option_text[0] + ': ' + option_text[1] 
    88             self.optionItem = QtGui.QTreeWidgetItem() 
    89             self.optionItem.setText(0, itemText) 
    90             self.parentItem.addChild(self.optionItem) 
    91  
    92         elif (type_ == "ENDOPTION"): 
    93             self.inOption = False 
    94  
    95     def insertItem(self, item): 
    96         """ 
    97         Insert an item at the correct place in the dialog tree 
    98         @type item: QtGui.QTreeWidgetItem 
    99         @param item: the item to insert 
    100         @return: None 
    101         """ 
    102         if (self.parentItem == None): 
    103             self.insertTopLevelItem(self.topLevelItemCount(), item) 
    104         else: 
    105             self.parentItem.addChild(item) 
    106  
    107     def clear(self): 
    108         """ 
    109         Clear the dialog map 
    110         """ 
    111         self.setHeaderLabel("") 
    112         self.invisibleRootItem().takeChildren() 
     89        self.map = DialogScene(main_edit) 
     90        self.setScene(self.map.scene) 
     91        self.setSceneRect(0,0,int(settings.res_width),int(settings.res_height)) 
     92        self.setGeometry(QtCore.QRect(0,0,int(settings.res_width),int(settings.res_height))) 
Note: See TracChangeset for help on using the changeset viewer.