Home | Trees | Indices | Help |
|
---|
|
1 #! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 # Copyright (C) 2011 ~ 2012 Deepin, Inc. 5 # 2011 ~ 2012 Wang Yong 6 # 7 # Author: Wang Yong <lazycat.manatee@gmail.com> 8 # Maintainer: Wang Yong <lazycat.manatee@gmail.com> 9 # 10 # This program is free software: you can redistribute it and/or modify 11 # it under the terms of the GNU General Public License as published by 12 # the Free Software Foundation, either version 3 of the License, or 13 # any later version. 14 # 15 # This program is distributed in the hope that it will be useful, 16 # but WITHOUT ANY WARRANTY; without even the implied warranty of 17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 # GNU General Public License for more details. 19 # 20 # You should have received a copy of the GNU General Public License 21 # along with this program. If not, see <http://www.gnu.org/licenses/>. 22 23 from constant import BUTTON_NORMAL, BUTTON_PRESS, BUTTON_HOVER 24 from draw import draw_pixbuf 25 from utils import widget_fix_cycle_destroy_bug, propagate_expose 26 import gobject 27 import gtk 2830 ''' 31 Group container for ImageButton. 32 33 @undocumented: set_index 34 @undocumented: get_index 35 ''' 3661 63 ''' 64 Internal function to get index. 65 ''' 66 return self.item_index 67 68 gobject.type_register(ImageButtonGroup) 6938 ''' 39 Initialize for ImageButtonGroup class. 40 41 @param items: A list of ImageButton item, item format: (normal_dpixbuf, hover_dpixbuf, press_dpixbuf, clicked_callback) 42 @param spacing: Spacing value between items, default is 5 pixel. 43 ''' 44 gtk.HBox.__init__(self) 45 self.item_index = 0 46 47 self.set_spacing(spacing) 48 # Init item 49 if items: 50 for index, item in enumerate(items): 51 image_button_item = ImageButtonItem(item, index, self.set_index, self.get_index) 52 self.pack_start(image_button_item) 53 self.show_all()54 56 ''' 57 Internal function to set index. 58 ''' 59 self.queue_draw() 60 self.item_index = index71 ''' 72 Group container for ToggleButton. 73 74 @undocumented: set_index 75 @undocumented: get_index 76 ''' 77103 105 ''' 106 Internal function to get index. 107 ''' 108 return self.item_index 10979 ''' 80 Initialize for ToggleButtonGroup class. 81 82 @param items: A list of ImageButton item, item format: (inactive_dpixbuf, active_dpixbuf, inactive_hover_dpixbuf, active_hover_dpixbuf, toggled_callback) 83 @param spacing: Spacing value between items, default is 5 pixel. 84 ''' 85 gtk.HBox.__init__(self) 86 self.item_index = -1 87 self.set_spacing(spacing) 88 89 # Init item 90 if items: 91 for index, item in enumerate(items): 92 toggle_button_item = ToggleButtonItem(item, index, self.set_index, self.get_index) 93 self.pack_start(toggle_button_item) 94 95 self.show_all()96 98 ''' 99 Internal function to set index. 100 ''' 101 self.queue_draw() 102 self.item_index = index111 ''' 112 Whether at toggle button group is active. 113 114 @return: Return True if active, else return False. 115 ''' 116 return self.item_index != -1117 118 gobject.type_register(ToggleButtonGroup) 119121 ''' 122 Image button item for L{ I{ImageButtonGroup} <ImageButtonGroup>}. 123 124 @undocumented: wrap_image_button_item_clicked_action 125 @undocumented: expose_image_button_item 126 ''' 127163 165 ''' 166 Internal callback for `expose-event` signal. 167 ''' 168 # Init. 169 cr = widget.window.cairo_create() 170 rect = widget.allocation 171 select_index = self.get_index() 172 173 # Draw background 174 if widget.state == gtk.STATE_NORMAL: 175 if select_index == self.index: 176 select_status = BUTTON_PRESS 177 else: 178 select_status = BUTTON_NORMAL 179 180 elif widget.state == gtk.STATE_PRELIGHT: 181 if select_index == self.index: 182 select_status = BUTTON_PRESS 183 else: 184 select_status = BUTTON_HOVER 185 186 elif widget.state == gtk.STATE_ACTIVE: 187 select_status = BUTTON_PRESS 188 189 if select_status == BUTTON_PRESS: 190 pixbuf = self.press_dpixbuf.get_pixbuf() 191 elif select_status == BUTTON_NORMAL: 192 pixbuf = self.normal_dpixbuf.get_pixbuf() 193 elif select_status == BUTTON_HOVER: 194 pixbuf = self.hover_dpixbuf.get_pixbuf() 195 196 draw_pixbuf(cr, pixbuf, rect.x, rect.y) 197 propagate_expose(widget, event) 198 199 return True 200 201 gobject.type_register(ImageButtonItem) 202 203133 ''' 134 Initialize ImageButtonItem class. 135 136 @param item: Image button item, item foramt: (normal_dpixbuf, hover_dpixbuf, press_dpixbuf, clicked_callback) 137 @param index: Item index. 138 @param set_index: Set index callback. 139 @param get_index: Get index callback. 140 ''' 141 gtk.Button.__init__(self) 142 143 self.index = index 144 self.set_index = set_index 145 self.get_index = get_index 146 147 (self.normal_dpixbuf, self.hover_dpixbuf, self.press_dpixbuf, self.clicked_callback) = item 148 149 # Init item button. 150 pixbuf = self.normal_dpixbuf.get_pixbuf() 151 self.set_size_request(pixbuf.get_width(), pixbuf.get_height()) 152 widget_fix_cycle_destroy_bug(self) 153 self.connect("expose-event", self.expose_image_button_item) 154 self.connect("clicked", lambda w: self.wrap_image_button_item_clicked_action())155 157 ''' 158 Internal function to wrap clicked action. 159 ''' 160 if self.clicked_callback: 161 self.clicked_callback() 162 self.set_index(self.index)205 ''' 206 Toggle button item for L{ I{ToggleButtonGroup} <ToggleButtonGroup>}. 207 208 @undocumented: wrap_image_button_item_clicked_action 209 @undocumented: expose_toggle_button_item 210 ''' 211243 245 ''' 246 Internal callback for `expose-event` signal. 247 ''' 248 # Init. 249 cr = widget.window.cairo_create() 250 rect = widget.allocation 251 select_index = self.get_index() 252 253 if widget.state == gtk.STATE_NORMAL: 254 if select_index == self.index: 255 self.set_index(-1) 256 pixbuf = self.inactive_dpixbuf.get_pixbuf() 257 elif widget.state == gtk.STATE_PRELIGHT: 258 if not self.inactive_hover_dpixbuf and not self.active_hover_dpixbuf: 259 if widget.get_active(): 260 pixbuf = self.active_dpixbuf.get_pixbuf() 261 else: 262 pixbuf = self.inactive_dpixbuf.get_pixbuf() 263 else: 264 if self.inactive_hover_dpixbuf and self.active_hover_dpixbuf: 265 if widget.get_active(): 266 pixbuf = self.active_hover_dpixbuf.get_pixbuf() 267 else: 268 pixbuf = self.inactive_hover_dpixbuf.get_pixbuf() 269 elif self.inactive_hover_dpixbuf: 270 pixbuf = self.inactive_hover_dpixbuf.get_pixbuf() 271 elif self.active_hover_dpixbuf: 272 pixbuf = self.active_hover_dpixbuf.get_pixbuf() 273 274 elif widget.state == gtk.STATE_ACTIVE: 275 if select_index == self.index: 276 pixbuf = self.active_dpixbuf.get_pixbuf() 277 else: 278 widget.set_active(False) 279 pixbuf = self.inactive_dpixbuf.get_pixbuf() 280 281 draw_pixbuf(cr, pixbuf, rect.x, rect.y) 282 propagate_expose(widget, event) 283 return True 284 285 gobject.type_register(ToggleButtonItem) 286213 ''' 214 Initialize ToggleButtonItem class. 215 216 @param item: Toggle button item, item foramt: (inactive_dpixbuf, active_dpixbuf, inactive_hover_dpixbuf, active_hover_dpixbuf, toggled_callback) 217 @param index: Item index. 218 @param set_index: Set index callback. 219 @param get_index: Get index callback. 220 ''' 221 gtk.ToggleButton.__init__(self) 222 223 self.index = index 224 self.set_index = set_index 225 self.get_index = get_index 226 227 (self.inactive_dpixbuf, self.active_dpixbuf, 228 self.inactive_hover_dpixbuf, self.active_hover_dpixbuf, self.toggled_callback) = item 229 230 pixbuf = self.inactive_dpixbuf.get_pixbuf() 231 self.set_size_request(pixbuf.get_width(), pixbuf.get_height()) 232 widget_fix_cycle_destroy_bug(self) 233 self.connect("expose-event", self.expose_toggle_button_item) 234 self.connect("toggled", lambda w: self.wrap_toggle_button_clicked_action()) 235 self.connect("button-press-event", lambda w,e: self.set_index(self.index))236 238 ''' 239 Internal function to wrap clicked action. 240 ''' 241 if self.toggled_callback: 242 self.toggled_callback()
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Wed Aug 8 13:17:39 2012 | http://epydoc.sourceforge.net |