source: trunk/game/scripts/gui/containergui_base.py @ 596

Revision 596, 6.1 KB checked in by beliar, 10 years ago (diff)

Patch by Beliar.

  • Items can now be dropped and picked up again
  • Added generic image for items (Made by Q_x, he did the other items too).
Line 
1#!/usr/bin/env python
2
3#   This program is free software: you can redistribute it and/or modify
4#   it under the terms of the GNU General Public License as published by
5#   the Free Software Foundation, either version 3 of the License, or
6#   (at your option) any later version.
7
8#   This program is distributed in the hope that it will be useful,
9#   but WITHOUT ANY WARRANTY; without even the implied warranty of
10#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11#   GNU General Public License for more details.
12
13#   You should have received a copy of the GNU General Public License
14#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16from fife import fife
17from fife.extensions import pychan
18
19from scripts.gui import drag_drop_data as data_drag
20from scripts.objects.action import ACTIONS
21from copy import deepcopy
22
23class ContainerGUIBase(object):
24    """
25    Base class for windows that show the content of a container
26    """
27
28
29    def __init__(self, controller, gui_file):
30        self.controller = controller
31        self.gui = pychan.loadXML(gui_file)
32        data_drag.dragging = False
33        self.original_cursor_id = self.controller.engine.getCursor().getId()     
34
35    def setMouseCursor(self, image, dummy_image, mc_type="native"): 
36        """Set the mouse cursor to an image.
37           @type image: string
38           @param image: The image you want to set the cursor to
39           @type dummy_image: string
40           @param dummy_image: ???
41           @type type: string
42           @param type: ???
43           @return: None"""
44        cursor = self.controller.engine.getCursor()
45        cursor_type = fife.CURSOR_IMAGE
46        img_pool = self.controller.engine.getImagePool()
47        if(mc_type == "target"):
48            target_cursor_id = img_pool.addResourceFromFile(image) 
49            dummy_cursor_id = img_pool.addResourceFromFile(dummy_image)
50            cursor.set(cursor_type, dummy_cursor_id)
51            cursor.setDrag(cursor_type, target_cursor_id, -16, -16)
52        else:
53            cursor_type = fife.CURSOR_IMAGE
54            zero_cursor_id = img_pool.addResourceFromFile(image)
55            cursor.set(cursor_type, zero_cursor_id)
56            cursor.setDrag(cursor_type, zero_cursor_id)
57
58    def resetMouseCursor(self):
59        """Reset cursor to default image.
60           @return: None"""
61        c = self.controller.engine.getCursor()
62        cursor_type = fife.CURSOR_NATIVE
63        # this is the path to the default image
64        cursor_id = self.original_cursor_id
65        c.setDrag(cursor_type, cursor_id)
66        c.set(cursor_type, cursor_id)
67
68    def dragDrop(self, obj):
69        """Decide whether to drag or drop the image.
70           @type obj: string
71           @param obj: The name of the object within
72                       the dictionary 'self.buttons'
73           @return: None"""
74        if(data_drag.dragging == True):
75            self.dropObject(obj)
76        elif(data_drag.dragging == False):
77            self.dragObject(obj)
78               
79    def dragObject(self, obj):
80        """Drag the selected object.
81           @type obj: string
82           @param obj: The name of the object within
83                       the dictionary 'self.buttons'
84           @return: None"""           
85        pass
86       
87    def dropObject(self, obj):
88        """Drops the object being dropped
89           @type obj: string
90           @param obj: The name of the object within
91                       the dictionary 'self.buttons'
92           @return: None"""
93        pass   
94   
95    def showContextMenu(self, event, widget):
96        """Decide whether to drag or drop the image.
97           @type obj: string
98           @param obj: The name of the object within
99                       the dictionary 'self.buttons'
100           @return: None"""
101        if event.getButton() == event.RIGHT:
102            item = widget.item
103            if item and item.trueAttr("usable"):
104                actions = deepcopy(item.actions)
105                if not actions:
106                    return
107                menu_actions = []
108                x_pos, y_pos = widget.getAbsolutePos()
109                x_pos += event.getX()
110                y_pos += event.getY()
111                for action_name in actions:
112                    display_name = action_name
113                    if action_name in ACTIONS:
114                        param_dict = {} 
115                        param_dict["controller"] = self.controller
116                        param_dict["commands"] = {}
117                        if action_name == "Look":
118                            param_dict["examine_name"] = item.name
119                            param_dict["examine_desc"] = actions[action_name].pop("text")
120                        if action_name == "Read":
121                            param_dict["text_name"] = item.name
122                            param_dict["text"] = ""
123                        if action_name == "Use":
124                            param_dict["item"] = item
125                            display_name = actions[action_name].pop("text")
126                        param_dict.update(actions[action_name])
127                        menu_actions.append([action_name, display_name, 
128                                            self.executeMenuItem,
129                                            ACTIONS[action_name](**param_dict)])
130                param_dict = {} 
131                param_dict["controller"] = self.controller
132                param_dict["commands"] = {}
133                param_dict["item"] = item
134                param_dict["container_gui"] = self
135                menu_actions.append(["Drop", "Drop",
136                                            self.executeMenuItem,
137                                            ACTIONS["Drop"](**param_dict)])
138                self.controller.view.hud.showContextMenu(menu_actions,
139                                                 (x_pos, 
140                                                  y_pos)
141                                                  )
142
143    def executeMenuItem(self, action):
144        """Executes the items action
145        @param action: The action to run
146        @type action: Class derived from scripts.objects.action.Action
147        """
148        action.execute()
149   
150    def updateImages(self):
151        pass
Note: See TracBrowser for help on using the repository browser.