Ticket #3743: 0001-Remove-wrapper-around-sugar-toolkit-SL-3743.patch
File 0001-Remove-wrapper-around-sugar-toolkit-SL-3743.patch, 40.4 KB (added by humitos, 12 years ago) |
---|
-
activity.py
From c8179ae47c620a872257713f51ea27b07d2a01cf Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann <humitos@gmail.com> Date: Tue, 3 Jul 2012 11:18:44 -0300 Subject: [PATCH InfoSlicer] Remove wrapper around sugar-toolkit SL #3743 This wrapper was used to allow compatibility with old versions of Sugar. I'm removing it to start the port to Gtk3 of InfoSlicer Signed-off-by: Manuel Kaufmann <humitos@gmail.com> --- activity.py | 13 ++- bookview.py | 39 ++++--- library.py | 1 - port/COPYING | 340 ------------------------------------------------------ port/README | 18 --- port/activity.py | 305 ------------------------------------------------ port/widgets.py | 177 ---------------------------- 7 files changed, 33 insertions(+), 860 deletions(-) delete mode 100644 port/COPYING delete mode 100644 port/README delete mode 100644 port/__init__.py delete mode 100644 port/activity.py delete mode 100644 port/widgets.py diff --git a/activity.py b/activity.py index 126d4c7..46cf2ad 100644
a b from gettext import gettext as _ 18 18 from sugar.graphics.toolbutton import ToolButton 19 19 from sugar.graphics.toggletoolbutton import ToggleToolButton 20 20 from sugar.activity.activity import ActivityToolbox 21 from sugar.activity import activity 22 21 23 OLD_TOOLBAR = False 22 24 try: 23 25 from sugar.graphics.toolbarbox import ToolbarBox, ToolbarButton … … try: 26 28 from sugar.activity.widgets import ActivityToolbarButton 27 29 except ImportError: 28 30 OLD_TOOLBAR = True 29 from port.activity import SharedActivity30 31 31 32 import library 32 33 import edit … … import book 35 36 gtk.gdk.threads_init() 36 37 gtk.gdk.threads_enter() 37 38 38 class InfoslicerActivity(SharedActivity): 39 40 class InfoslicerActivity(activity.Activity): 39 41 def __init__(self, handle): 40 42 self.notebook = gtk.Notebook() 41 43 self.notebook.show() 42 44 self.notebook.props.show_border = False 43 45 self.notebook.props.show_tabs = False 44 46 45 SharedActivity.__init__(self, self.notebook, 'SERVICE', handle) 47 activity.Activity.__init__(self, handle) 48 49 self.max_participants = 1 50 51 self.set_canvas(self.notebook) 52 self.instance() 46 53 47 54 def instance(self): 48 55 book.wiki = book.WikiBook() -
bookview.py
diff --git a/bookview.py b/bookview.py index 8b049d6..e38662b 100644
a b from gettext import gettext as _ 21 21 from sugar.graphics.toolbutton import ToolButton 22 22 from sugar.activity.activity import get_bundle_path, get_activity_root 23 23 from sugar.graphics.style import * 24 from port.widgets import ToolWidget, ToolButton25 24 26 25 logger = logging.getLogger('infoslicer') 27 26 … … class BookView(gtk.VBox): 55 54 check_box = gtk.HBox() 56 55 check_box.set_size_request(50, -1) 57 56 check_box.pack_start(self._check, True, False) 58 title.insert(ToolWidget(check_box), -1) 57 tool_item = gtk.ToolItem() 58 tool_item.add(check_box) 59 tool_item.show() 60 title.insert(tool_item, -1) 59 61 else: 60 title.insert(ToolWidget(gtk.Label(' ')), -1) 62 tool_item = gtk.ToolItem() 63 tool_item.add(gtk.Label(' ')) 64 tool_item.show() 65 title.insert(tool_item, -1) 61 66 62 67 # title caption 63 68 … … class BookView(gtk.VBox): 69 74 caption = gtk.EventBox() 70 75 caption.add(caption_box) 71 76 caption.modify_bg(gtk.STATE_NORMAL, COLOR_TOOLBAR_GREY.get_gdk_color()) 72 title.insert(ToolWidget(caption), -1) 77 78 tool_item = gtk.ToolItem() 79 tool_item.add(caption) 80 tool_item.show() 81 82 title.insert(tool_item, -1) 73 83 74 84 separator = gtk.SeparatorToolItem() 75 85 separator.props.draw = False … … class BookView(gtk.VBox): 79 89 # create article button 80 90 81 91 if custom: 82 create = ToolButton('add', 83 padding=0, 84 tooltip=_('Create new article')) 92 create = ToolButton('add') 93 create.set_tooltip(_('Create new article')) 85 94 create.connect('clicked', self._create_cb) 86 95 title.insert(create, -1) 87 96 else: … … class BookView(gtk.VBox): 90 99 91 100 # delete article button 92 101 93 delete = ToolButton('edit-delete', 94 padding=0, 95 tooltip=_('Delete current article')) 102 delete = ToolButton('edit-delete') 103 delete.set_tooltip(_('Delete current article')) 96 104 delete.connect('clicked', self._delete_cb) 97 105 title.insert(delete, -1) 98 106 99 107 # move buttons 100 108 101 downward = ToolButton('down', 102 padding=0, 103 tooltip=_('Move article downward')) 109 downward = ToolButton('down') 110 downward.set_tooltip(_('Move article downward')) 104 111 downward.connect('clicked', self._swap_cb, +1) 105 112 title.insert(downward, -1) 106 upward = ToolButton('up', 107 padding=0,108 tooltip=_('Move article upward'))113 114 upward = ToolButton('up') 115 upward.set_tooltip(_('Move article upward')) 109 116 upward.connect('clicked', self._swap_cb, -1) 110 117 title.insert(upward, -1) 111 118 -
library.py
diff --git a/library.py b/library.py index a317f99..325ed49 100644
a b from sugar.graphics.toolcombobox import ToolComboBox 26 26 from sugar.graphics.icon import Icon 27 27 from sugar.datastore import datastore 28 28 import sugar.graphics.style as style 29 from port.widgets import ToolWidget30 29 31 30 import xol 32 31 import net -
deleted file port/COPYING
diff --git a/port/COPYING b/port/COPYING deleted file mode 100644 index 623b625..0000000
+ - 1 GNU GENERAL PUBLIC LICENSE2 Version 2, June 19913 4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.5 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA6 Everyone is permitted to copy and distribute verbatim copies7 of this license document, but changing it is not allowed.8 9 Preamble10 11 The licenses for most software are designed to take away your12 freedom to share and change it. By contrast, the GNU General Public13 License is intended to guarantee your freedom to share and change free14 software--to make sure the software is free for all its users. This15 General Public License applies to most of the Free Software16 Foundation's software and to any other program whose authors commit to17 using it. (Some other Free Software Foundation software is covered by18 the GNU Library General Public License instead.) You can apply it to19 your programs, too.20 21 When we speak of free software, we are referring to freedom, not22 price. Our General Public Licenses are designed to make sure that you23 have the freedom to distribute copies of free software (and charge for24 this service if you wish), that you receive source code or can get it25 if you want it, that you can change the software or use pieces of it26 in new free programs; and that you know you can do these things.27 28 To protect your rights, we need to make restrictions that forbid29 anyone to deny you these rights or to ask you to surrender the rights.30 These restrictions translate to certain responsibilities for you if you31 distribute copies of the software, or if you modify it.32 33 For example, if you distribute copies of such a program, whether34 gratis or for a fee, you must give the recipients all the rights that35 you have. You must make sure that they, too, receive or can get the36 source code. And you must show them these terms so they know their37 rights.38 39 We protect your rights with two steps: (1) copyright the software, and40 (2) offer you this license which gives you legal permission to copy,41 distribute and/or modify the software.42 43 Also, for each author's protection and ours, we want to make certain44 that everyone understands that there is no warranty for this free45 software. If the software is modified by someone else and passed on, we46 want its recipients to know that what they have is not the original, so47 that any problems introduced by others will not reflect on the original48 authors' reputations.49 50 Finally, any free program is threatened constantly by software51 patents. We wish to avoid the danger that redistributors of a free52 program will individually obtain patent licenses, in effect making the53 program proprietary. To prevent this, we have made it clear that any54 patent must be licensed for everyone's free use or not licensed at all.55 56 The precise terms and conditions for copying, distribution and57 modification follow.58 59 0 60 GNU GENERAL PUBLIC LICENSE61 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION62 63 0. This License applies to any program or other work which contains64 a notice placed by the copyright holder saying it may be distributed65 under the terms of this General Public License. The "Program", below,66 refers to any such program or work, and a "work based on the Program"67 means either the Program or any derivative work under copyright law:68 that is to say, a work containing the Program or a portion of it,69 either verbatim or with modifications and/or translated into another70 language. (Hereinafter, translation is included without limitation in71 the term "modification".) Each licensee is addressed as "you".72 73 Activities other than copying, distribution and modification are not74 covered by this License; they are outside its scope. The act of75 running the Program is not restricted, and the output from the Program76 is covered only if its contents constitute a work based on the77 Program (independent of having been made by running the Program).78 Whether that is true depends on what the Program does.79 80 1. You may copy and distribute verbatim copies of the Program's81 source code as you receive it, in any medium, provided that you82 conspicuously and appropriately publish on each copy an appropriate83 copyright notice and disclaimer of warranty; keep intact all the84 notices that refer to this License and to the absence of any warranty;85 and give any other recipients of the Program a copy of this License86 along with the Program.87 88 You may charge a fee for the physical act of transferring a copy, and89 you may at your option offer warranty protection in exchange for a fee.90 91 2. You may modify your copy or copies of the Program or any portion92 of it, thus forming a work based on the Program, and copy and93 distribute such modifications or work under the terms of Section 194 above, provided that you also meet all of these conditions:95 96 a) You must cause the modified files to carry prominent notices97 stating that you changed the files and the date of any change.98 99 b) You must cause any work that you distribute or publish, that in100 whole or in part contains or is derived from the Program or any101 part thereof, to be licensed as a whole at no charge to all third102 parties under the terms of this License.103 104 c) If the modified program normally reads commands interactively105 when run, you must cause it, when started running for such106 interactive use in the most ordinary way, to print or display an107 announcement including an appropriate copyright notice and a108 notice that there is no warranty (or else, saying that you provide109 a warranty) and that users may redistribute the program under110 these conditions, and telling the user how to view a copy of this111 License. (Exception: if the Program itself is interactive but112 does not normally print such an announcement, your work based on113 the Program is not required to print an announcement.)114 115 1 116 These requirements apply to the modified work as a whole. If117 identifiable sections of that work are not derived from the Program,118 and can be reasonably considered independent and separate works in119 themselves, then this License, and its terms, do not apply to those120 sections when you distribute them as separate works. But when you121 distribute the same sections as part of a whole which is a work based122 on the Program, the distribution of the whole must be on the terms of123 this License, whose permissions for other licensees extend to the124 entire whole, and thus to each and every part regardless of who wrote it.125 126 Thus, it is not the intent of this section to claim rights or contest127 your rights to work written entirely by you; rather, the intent is to128 exercise the right to control the distribution of derivative or129 collective works based on the Program.130 131 In addition, mere aggregation of another work not based on the Program132 with the Program (or with a work based on the Program) on a volume of133 a storage or distribution medium does not bring the other work under134 the scope of this License.135 136 3. You may copy and distribute the Program (or a work based on it,137 under Section 2) in object code or executable form under the terms of138 Sections 1 and 2 above provided that you also do one of the following:139 140 a) Accompany it with the complete corresponding machine-readable141 source code, which must be distributed under the terms of Sections142 1 and 2 above on a medium customarily used for software interchange; or,143 144 b) Accompany it with a written offer, valid for at least three145 years, to give any third party, for a charge no more than your146 cost of physically performing source distribution, a complete147 machine-readable copy of the corresponding source code, to be148 distributed under the terms of Sections 1 and 2 above on a medium149 customarily used for software interchange; or,150 151 c) Accompany it with the information you received as to the offer152 to distribute corresponding source code. (This alternative is153 allowed only for noncommercial distribution and only if you154 received the program in object code or executable form with such155 an offer, in accord with Subsection b above.)156 157 The source code for a work means the preferred form of the work for158 making modifications to it. For an executable work, complete source159 code means all the source code for all modules it contains, plus any160 associated interface definition files, plus the scripts used to161 control compilation and installation of the executable. However, as a162 special exception, the source code distributed need not include163 anything that is normally distributed (in either source or binary164 form) with the major components (compiler, kernel, and so on) of the165 operating system on which the executable runs, unless that component166 itself accompanies the executable.167 168 If distribution of executable or object code is made by offering169 access to copy from a designated place, then offering equivalent170 access to copy the source code from the same place counts as171 distribution of the source code, even though third parties are not172 compelled to copy the source along with the object code.173 174 2 175 4. You may not copy, modify, sublicense, or distribute the Program176 except as expressly provided under this License. Any attempt177 otherwise to copy, modify, sublicense or distribute the Program is178 void, and will automatically terminate your rights under this License.179 However, parties who have received copies, or rights, from you under180 this License will not have their licenses terminated so long as such181 parties remain in full compliance.182 183 5. You are not required to accept this License, since you have not184 signed it. However, nothing else grants you permission to modify or185 distribute the Program or its derivative works. These actions are186 prohibited by law if you do not accept this License. Therefore, by187 modifying or distributing the Program (or any work based on the188 Program), you indicate your acceptance of this License to do so, and189 all its terms and conditions for copying, distributing or modifying190 the Program or works based on it.191 192 6. Each time you redistribute the Program (or any work based on the193 Program), the recipient automatically receives a license from the194 original licensor to copy, distribute or modify the Program subject to195 these terms and conditions. You may not impose any further196 restrictions on the recipients' exercise of the rights granted herein.197 You are not responsible for enforcing compliance by third parties to198 this License.199 200 7. If, as a consequence of a court judgment or allegation of patent201 infringement or for any other reason (not limited to patent issues),202 conditions are imposed on you (whether by court order, agreement or203 otherwise) that contradict the conditions of this License, they do not204 excuse you from the conditions of this License. If you cannot205 distribute so as to satisfy simultaneously your obligations under this206 License and any other pertinent obligations, then as a consequence you207 may not distribute the Program at all. For example, if a patent208 license would not permit royalty-free redistribution of the Program by209 all those who receive copies directly or indirectly through you, then210 the only way you could satisfy both it and this License would be to211 refrain entirely from distribution of the Program.212 213 If any portion of this section is held invalid or unenforceable under214 any particular circumstance, the balance of the section is intended to215 apply and the section as a whole is intended to apply in other216 circumstances.217 218 It is not the purpose of this section to induce you to infringe any219 patents or other property right claims or to contest validity of any220 such claims; this section has the sole purpose of protecting the221 integrity of the free software distribution system, which is222 implemented by public license practices. Many people have made223 generous contributions to the wide range of software distributed224 through that system in reliance on consistent application of that225 system; it is up to the author/donor to decide if he or she is willing226 to distribute software through any other system and a licensee cannot227 impose that choice.228 229 This section is intended to make thoroughly clear what is believed to230 be a consequence of the rest of this License.231 232 3 233 8. If the distribution and/or use of the Program is restricted in234 certain countries either by patents or by copyrighted interfaces, the235 original copyright holder who places the Program under this License236 may add an explicit geographical distribution limitation excluding237 those countries, so that distribution is permitted only in or among238 countries not thus excluded. In such case, this License incorporates239 the limitation as if written in the body of this License.240 241 9. The Free Software Foundation may publish revised and/or new versions242 of the General Public License from time to time. Such new versions will243 be similar in spirit to the present version, but may differ in detail to244 address new problems or concerns.245 246 Each version is given a distinguishing version number. If the Program247 specifies a version number of this License which applies to it and "any248 later version", you have the option of following the terms and conditions249 either of that version or of any later version published by the Free250 Software Foundation. If the Program does not specify a version number of251 this License, you may choose any version ever published by the Free Software252 Foundation.253 254 10. If you wish to incorporate parts of the Program into other free255 programs whose distribution conditions are different, write to the author256 to ask for permission. For software which is copyrighted by the Free257 Software Foundation, write to the Free Software Foundation; we sometimes258 make exceptions for this. Our decision will be guided by the two goals259 of preserving the free status of all derivatives of our free software and260 of promoting the sharing and reuse of software generally.261 262 NO WARRANTY263 264 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY265 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN266 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES267 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED268 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF269 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS270 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE271 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,272 REPAIR OR CORRECTION.273 274 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING275 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR276 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,277 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING278 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED279 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY280 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER281 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE282 POSSIBILITY OF SUCH DAMAGES.283 284 END OF TERMS AND CONDITIONS285 286 4 287 How to Apply These Terms to Your New Programs288 289 If you develop a new program, and you want it to be of the greatest290 possible use to the public, the best way to achieve this is to make it291 free software which everyone can redistribute and change under these terms.292 293 To do so, attach the following notices to the program. It is safest294 to attach them to the start of each source file to most effectively295 convey the exclusion of warranty; and each file should have at least296 the "copyright" line and a pointer to where the full notice is found.297 298 <one line to give the program's name and a brief idea of what it does.>299 Copyright (C) <year> <name of author>300 301 This program is free software; you can redistribute it and/or modify302 it under the terms of the GNU General Public License as published by303 the Free Software Foundation; either version 2 of the License, or304 (at your option) any later version.305 306 This program is distributed in the hope that it will be useful,307 but WITHOUT ANY WARRANTY; without even the implied warranty of308 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the309 GNU General Public License for more details.310 311 You should have received a copy of the GNU General Public License312 along with this program; if not, write to the Free Software313 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA314 315 316 Also add information on how to contact you by electronic and paper mail.317 318 If the program is interactive, make it output a short notice like this319 when it starts in an interactive mode:320 321 Gnomovision version 69, Copyright (C) year name of author322 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.323 This is free software, and you are welcome to redistribute it324 under certain conditions; type `show c' for details.325 326 The hypothetical commands `show w' and `show c' should show the appropriate327 parts of the General Public License. Of course, the commands you use may328 be called something other than `show w' and `show c'; they could even be329 mouse-clicks or menu items--whatever suits your program.330 331 You should also get your employer (if you work as a programmer) or your332 school, if any, to sign a "copyright disclaimer" for the program, if333 necessary. Here is a sample; alter the names:334 335 Yoyodyne, Inc., hereby disclaims all copyright interest in the program336 `Gnomovision' (which makes passes at compilers) written by James Hacker.337 338 <signature of Ty Coon>, 1 April 1989339 Ty Coon, President of Vice340 -
deleted file port/README
-This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/port/README b/port/README deleted file mode 100644 index 256200d..0000000
+ - 1 About2 -----3 4 A set of sugar components/libraries/etc to simplify writing activities.5 6 Cornerstone purposes for this project:7 * Total backwards compatibility for sugar-port API8 * Run on all sugar platforms beginning from 0.829 10 In most cases sugar-port could be embedded to activity's directory tree.11 There is no need to include the whole sugar-port project only top level12 files/directories you are using directly - sugar-port's top level entities13 don't import each other.14 15 Get it16 ------17 18 http://wiki.sugarlabs.org/go/Development_Team/sugar-port -
deleted file port/activity.py
diff --git a/port/__init__.py b/port/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/port/activity.py b/port/activity.py deleted file mode 100644 index e3b6fdd..0000000
+ - 1 # This program is free software; you can redistribute it and/or modify2 # it under the terms of the GNU General Public License as published by3 # the Free Software Foundation; either version 2 of the License, or4 # (at your option) any later version.5 #6 # This program is distributed in the hope that it will be useful,7 # but WITHOUT ANY WARRANTY; without even the implied warranty of8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 # GNU General Public License for more details.10 #11 # You should have received a copy of the GNU General Public License12 # along with this program; if not, write to the Free Software13 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA14 15 """Extend sugar-toolkit activity class"""16 17 import gtk18 import logging19 import telepathy20 import gobject21 22 import sugar.activity.activity as toolkit23 from sugar.presence.sugartubeconn import SugarTubeConnection24 from sugar.graphics.alert import ConfirmationAlert, NotifyAlert25 26 _NEW_INSTANCE = 027 _NEW_INSTANCE = 128 _PRE_INSTANCE = 229 _POST_INSTANCE = 330 31 class CursorFactory:32 __shared_state = {"cursors": {}}33 34 def __init__(self):35 self.__dict__ = self.__shared_state36 37 def get_cursor(self, cur_type):38 if not self.cursors.has_key(cur_type):39 cur = gtk.gdk.Cursor(cur_type)40 self.cursors[cur_type] = cur41 return self.cursors[cur_type]42 43 class Activity(toolkit.Activity):44 """Basic activity class"""45 46 def new_instance(self):47 """48 New instance was created.49 50 Will be invoked after __init__() instead of resume_instance().51 Subclass should implement this method to catch creation stage.52 """53 pass54 55 def resume_instance(self, filepath):56 """57 Instance was resumed.58 59 Will be invoked after __init__() instead of new_instance().60 Subclass should implement this method to catch resuming stage.61 62 """63 pass64 65 def save_instance(self, filepath):66 """67 Save activity instance.68 69 Subclass should implement this method to save activity data.70 """71 raise NotImplementedError72 73 def on_save_instance(self, cb, *args):74 """ Register callback which will be invoked before save_instance """75 self.__on_save_instance.append((cb, args))76 77 def share_instance(self, connection, is_initiator):78 """79 Activity was shared/joined.80 81 connection -- SugarTubeConnection object82 wich represents telepathy connection83 84 is_initiator -- boolean85 if True activity was shared and86 (current activity is an initiator of sharing)87 otherwise activity was joined(to existed sharing session)88 89 Will be invoked after __init__() and {new,resume}_instance().90 Subclass should implement this method to catch sharing stage.91 """92 pass93 94 def notify_alert(self, title, msg):95 """Raise standard notify alert"""96 alert = NotifyAlert(title=title, msg=msg)97 98 def response(alert, response_id, self):99 self.remove_alert(alert)100 101 alert.connect('response', response, self)102 alert.show_all()103 self.add_alert(alert)104 105 def confirmation_alert(self, title, msg, cb, *cb_args):106 """Raise standard confirmation alert"""107 alert = ConfirmationAlert(title=title, msg=msg)108 109 def response(alert, response_id, self, cb, *cb_args):110 self.remove_alert(alert)111 if response_id is gtk.RESPONSE_OK:112 cb(*cb_args)113 114 alert.connect('response', response, self, cb, *cb_args)115 alert.show_all()116 self.add_alert(alert)117 118 def get_cursor(self):119 return self._cursor120 121 def set_cursor(self, cursor):122 if not isinstance(cursor, gtk.gdk.Cursor):123 cursor = CursorFactory().get_cursor(cursor)124 125 if self._cursor != cursor:126 self._cursor = cursor127 self.window.set_cursor(self._cursor)128 129 def __init__(self, canvas, handle):130 """131 Initialise the Activity.132 133 canvas -- gtk.Widget134 root widget for activity content135 136 handle -- sugar.activity.activityhandle.ActivityHandle137 instance providing the activity id and access to the138 presence service which *may* provide sharing for this139 application140 141 """142 toolkit.Activity.__init__(self, handle)143 144 if handle.object_id:145 self.__state = _NEW_INSTANCE146 else:147 self.__state = _NEW_INSTANCE148 149 self.__resume_filename = None150 self.__postponed_share = []151 self.__on_save_instance = []152 153 self._cursor = None154 self.set_cursor(gtk.gdk.LEFT_PTR)155 156 # XXX do it after(possible) read_file() invoking157 # have to rely on calling read_file() from map_cb in sugar-toolkit158 canvas.connect_after('map', self.__map_canvasactivity_cb)159 self.set_canvas(canvas)160 161 def __instance(self):162 logging.debug('Activity.__instance')163 164 if self.__resume_filename:165 self.resume_instance(self.__resume_filename)166 else:167 self.new_instance()168 169 for i in self.__postponed_share:170 self.share_instance(*i)171 self.__postponed_share = []172 173 self.__state = _POST_INSTANCE174 175 def read_file(self, filepath):176 """Subclass should not override this method"""177 logging.debug('Activity.read_file state=%s' % self.__state)178 179 self.__resume_filename = filepath180 181 if self.__state == _NEW_INSTANCE:182 self.__state = _PRE_INSTANCE183 elif self.__state == _PRE_INSTANCE:184 self.__instance();185 186 def write_file(self, filepath):187 """Subclass should not override this method"""188 for cb, args in self.__on_save_instance:189 cb(*args)190 self.save_instance(filepath)191 192 def __map_canvasactivity_cb(self, widget):193 logging.debug('Activity.__map_canvasactivity_cb state=%s' % \194 self.__state)195 196 if self.__state == _NEW_INSTANCE:197 self.__instance()198 elif self.__state == _NEW_INSTANCE:199 self.__state = _PRE_INSTANCE200 elif self.__state == _PRE_INSTANCE:201 self.__instance();202 203 return False204 205 def _share(self, tube_conn, initiator):206 logging.debug('Activity._share state=%s' % self.__state)207 208 if self.__state == _NEW_INSTANCE:209 self.__postponed_share.append((tube_conn, initiator))210 self.__state = _PRE_INSTANCE211 elif self.__state == _PRE_INSTANCE:212 self.__postponed_share.append((tube_conn, initiator))213 self.__instance();214 elif self.__state == _POST_INSTANCE:215 self.share_instance(tube_conn, initiator)216 217 class SharedActivity(Activity):218 """Basic activity class with sharing features"""219 220 def __init__(self, canvas, service, handle):221 """222 Initialise the Activity.223 224 canvas -- gtk.Widget225 root widget for activity content226 227 service -- string228 dbus service for activity229 230 handle -- sugar.activity.activityhandle.ActivityHandle231 instance providing the activity id and access to the232 presence service which *may* provide sharing for this233 application234 235 """236 Activity.__init__(self, canvas, handle)237 self.service = service238 239 self.connect('shared', self._shared_cb)240 241 # Owner.props.key242 if self._shared_activity:243 # We are joining the activity244 self.connect('joined', self._joined_cb)245 if self.get_shared():246 # We've already joined247 self._joined_cb()248 249 def _shared_cb(self, activity):250 logging.debug('My activity was shared')251 self.__initiator = True252 self._sharing_setup()253 254 logging.debug('This is my activity: making a tube...')255 id = self._tubes_chan[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube(256 self.service, {})257 258 def _joined_cb(self, activity):259 if not self._shared_activity:260 return261 262 logging.debug('Joined an existing shared activity')263 264 self.__initiator = False265 self._sharing_setup()266 267 logging.debug('This is not my activity: waiting for a tube...')268 self._tubes_chan[telepathy.CHANNEL_TYPE_TUBES].ListTubes(269 reply_handler=self._list_tubes_reply_cb,270 error_handler=self._list_tubes_error_cb)271 272 def _sharing_setup(self):273 if self._shared_activity is None:274 logging.error('Failed to share or join activity')275 return276 self._conn = self._shared_activity.telepathy_conn277 self._tubes_chan = self._shared_activity.telepathy_tubes_chan278 self._text_chan = self._shared_activity.telepathy_text_chan279 280 self._tubes_chan[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal(281 'NewTube', self._new_tube_cb)282 283 def _list_tubes_reply_cb(self, tubes):284 for tube_info in tubes:285 self._new_tube_cb(*tube_info)286 287 def _list_tubes_error_cb(self, e):288 logging.error('ListTubes() failed: %s', e)289 290 def _new_tube_cb(self, id, initiator, type, service, params, state):291 logging.debug('New tube: ID=%d initator=%d type=%d service=%s '292 'params=%r state=%d', id, initiator, type, service,293 params, state)294 295 if (type == telepathy.TUBE_TYPE_DBUS and296 service == self.service):297 if state == telepathy.TUBE_STATE_LOCAL_PENDING:298 self._tubes_chan[telepathy.CHANNEL_TYPE_TUBES] \299 .AcceptDBusTube(id)300 301 tube_conn = SugarTubeConnection(self._conn,302 self._tubes_chan[telepathy.CHANNEL_TYPE_TUBES], id,303 group_iface=self._text_chan[telepathy.CHANNEL_INTERFACE_GROUP])304 305 self._share(tube_conn, self.__initiator) -
deleted file port/widgets.py
diff --git a/port/widgets.py b/port/widgets.py deleted file mode 100644 index aab59f8..0000000
+ - 1 # This program is free software; you can redistribute it and/or modify2 # it under the terms of the GNU General Public License as published by3 # the Free Software Foundation; either version 2 of the License, or4 # (at your option) any later version.5 #6 # This program is distributed in the hope that it will be useful,7 # but WITHOUT ANY WARRANTY; without even the implied warranty of8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 # GNU General Public License for more details.10 #11 # You should have received a copy of the GNU General Public License12 # along with this program; if not, write to the Free Software13 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA14 15 import gtk16 import hippo17 import gobject18 import logging19 20 from sugar.graphics import style21 from sugar.graphics.palette import CanvasInvoker, Palette22 from sugar.graphics import toolbutton23 from sugar.graphics import icon24 25 def labelize(text, widget):26 box = hippo.CanvasBox()27 box.props.spacing = style.DEFAULT_SPACING28 29 text = hippo.CanvasText(text=text)30 text.props.color = style.COLOR_SELECTION_GREY.get_int()31 if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL:32 text.props.xalign = hippo.ALIGNMENT_END33 else:34 text.props.xalign = hippo.ALIGNMENT_START35 box.append(text)36 37 box.append(widget, hippo.PACK_EXPAND)38 39 return box40 41 class Entry(hippo.CanvasWidget):42 def __init__(self, text=None, frame_color=style.COLOR_WHITE.get_gdk_color(),43 **kwargs):44 hippo.CanvasWidget.__init__(self, **kwargs)45 46 self.entry = gtk.Entry()47 self.entry.modify_bg(gtk.STATE_INSENSITIVE, frame_color)48 49 self.props.widget = self.entry50 51 if text:52 self.text = text53 54 def get_text(self):55 return self.entry.props.text56 57 def set_text(self, value):58 self.entry.props.text = value59 60 text = gobject.property(type=str, setter=set_text, getter=get_text)61 text = property(get_text, set_text)62 63 class TextView(hippo.CanvasWidget):64 def __init__(self, text=None, **kwargs):65 hippo.CanvasWidget.__init__(self, **kwargs)66 67 self.view = gtk.TextView()68 self.view.props.left_margin = style.DEFAULT_SPACING69 self.view.props.right_margin = style.DEFAULT_SPACING70 self.view.props.wrap_mode = gtk.WRAP_WORD71 self.view.props.accepts_tab = False72 self.view.show()73 74 scrolled_window = gtk.ScrolledWindow()75 scrolled_window.set_shadow_type(gtk.SHADOW_OUT)76 scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)77 scrolled_window.add(self.view)78 79 self.props.widget = scrolled_window80 81 if text:82 self.text = text83 84 def get_text(self):85 return self.view.props.buffer.props.text86 87 def set_text(self, value):88 self.view.props.buffer.props.text = text89 90 text = gobject.property(type=str, setter=set_text, getter=get_text)91 text = property(get_text, set_text)92 93 class Image(hippo.CanvasWidget):94 def __init__(self, palette=None, tooltip=None, pixbuf=None, **kwargs):95 self.image = gtk.Image()96 self._invoker = CanvasInvoker()97 98 hippo.CanvasBox.__init__(self, widget=self.image, **kwargs)99 100 self._invoker._position_hint = self._invoker.AT_CURSOR101 self._invoker.attach(self)102 103 self.connect('destroy', self._destroy_cb)104 105 if palette:106 self.palette = palette107 if tooltip:108 self.tooltip = tooltip109 if pixbuf:110 self.pixbuf = pixbuf111 112 def _destroy_cb(self, widget):113 if self._invoker is not None:114 self._invoker.detach()115 116 def create_palette(self):117 return None118 119 def get_palette(self):120 return self._invoker.palette121 122 def set_palette(self, palette):123 self._invoker.palette = palette124 125 palette = gobject.property(type=object,126 setter=set_palette, getter=get_palette)127 palette = property(get_palette, set_palette)128 129 def get_tooltip(self):130 return self._invoker.palette and self._invoker.palette.primary_text131 132 def set_tooltip(self, text):133 self.set_palette(Palette(text))134 135 tooltip = gobject.property(type=str, setter=set_tooltip, getter=get_tooltip)136 tooltip = property(get_tooltip, set_tooltip)137 138 def set_pixbuf(self, value):139 self.image.set_from_pixbuf(value)140 self.props.box_width = value.get_width()141 self.props.box_height = value.get_height()142 143 pixbuf = gobject.property(type=object, setter=set_pixbuf, getter=None)144 pixbuf = property(None, set_pixbuf)145 146 class ToolButton(toolbutton.ToolButton):147 def __init__(self,148 icon_name,149 size=gtk.ICON_SIZE_SMALL_TOOLBAR,150 padding=None,151 **kwargs):152 153 toolbutton.ToolButton.__init__(self, **kwargs)154 155 image = icon.Icon(icon_name=icon_name, icon_size=size)156 image.show()157 158 # The alignment is a hack to work around gtk.ToolButton code159 # that sets the icon_size when the icon_widget is a gtk.Image160 alignment = gtk.Alignment(0.5, 0.5)161 alignment.show()162 alignment.add(image)163 164 self.set_icon_widget(alignment)165 166 sizes = { gtk.ICON_SIZE_SMALL_TOOLBAR: style.SMALL_ICON_SIZE,167 gtk.ICON_SIZE_LARGE_TOOLBAR: style.STANDARD_ICON_SIZE }168 169 if padding is not None and sizes.has_key(size):170 button_size = sizes[size] + style.DEFAULT_SPACING + padding171 self.set_size_request(button_size, button_size)172 173 class ToolWidget(gtk.ToolItem):174 def __init__(self, widget):175 gtk.ToolItem.__init__(self)176 self.add(widget)177 widget.show()