Changeset 1159:205b05b8ff8c
- Timestamp:
- 05/17/08 23:56:47 (7 months ago)
- Location:
- pida
- Files:
-
- 2 added
- 4 modified
-
core/actions.py (modified) (4 diffs)
-
services/filemanager/filehiddencheck.py (added)
-
services/filemanager/filemanager.py (modified) (13 diffs)
-
services/filemanager/uidef/filemanager-toolbar.xml (modified) (1 diff)
-
services/versioncontrol/versioncontrol.py (modified) (4 diffs)
-
ui/dropdownmenutoolbutton.py (added)
Legend:
- Unmodified
- Added
- Removed
-
pida/core/actions.py
r1146 r1159 2 2 3 3 # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: 4 #Copyright (c) 2005-2006 The PIDA Project4 #Copyright (c) 2005-2006,2008 The PIDA Project 5 5 6 6 #Permission is hereby granted, free of charge, to any person obtaining a copy … … 34 34 import warnings 35 35 36 # kiwi imports 37 from pida.ui.dropdownmenutoolbutton import DropDownMenuToolButton 38 36 39 37 40 … … 47 50 gtk.Action.__init__(self, *args, **kw) 48 51 self.set_tool_item_type(gtk.MenuToolButton) 52 53 class PidaDropDownMenuToolAction(gtk.Action): 54 """ 55 Custom gtk.Action subclass for handling toolitems with a dropdown menu 56 attached. 57 """ 58 59 __gtype_name__ = "PidaDropDownMenuToolAction" 60 61 def __init__(self, *args, **kw): 62 gtk.Action.__init__(self, *args, **kw) 63 self.set_tool_item_type(DropDownMenuToolButton) 64 self._set_arrow = ((kw['label'] == None) or (kw['label'] == '')) and \ 65 (kw['stock_id'] == None) 66 67 def create_tool_item(self): 68 toolitem = gtk.Action.create_tool_item(self) 69 if (self._set_arrow == True): 70 toolitem.set_arrow() 71 return toolitem 49 72 50 73 … … 53 76 TYPE_RADIO = gtk.RadioAction 54 77 TYPE_MENUTOOL = PidaMenuToolAction 78 TYPE_DROPDOWNMENUTOOL = PidaDropDownMenuToolAction 55 79 56 80 -
pida/services/filemanager/filemanager.py
r1150 r1159 1 1 # -*- coding: utf-8 -*- 2 2 3 # Copyright (c) 2007 The PIDA Project3 # Copyright (c) 2007-2008 The PIDA Project 4 4 5 5 #Permission is hereby granted, free of charge, to any person obtaining a copy … … 40 40 from pida.core.events import EventsConfig 41 41 from pida.core.actions import ActionsConfig 42 from pida.core.actions import TYPE_NORMAL, TYPE_MENUTOOL, TYPE_ RADIO, TYPE_TOGGLE43 from pida.core.options import OptionsConfig, OTypeBoolean, OTypeString 42 from pida.core.actions import TYPE_NORMAL, TYPE_MENUTOOL, TYPE_DROPDOWNMENUTOOL, TYPE_RADIO, TYPE_TOGGLE 43 from pida.core.options import OptionsConfig, OTypeBoolean, OTypeString, OTypeStringList 44 44 from pida.core.environment import get_uidef_path 45 45 … … 48 48 from pida.ui.views import PidaView 49 49 from pida.ui.objectlist import AttrSortCombo 50 from pida.ui.dropdownmenutoolbutton import DropDownMenuToolButton 50 51 from kiwi.ui.objectlist import Column, ColoredColumn, ObjectList 52 53 from filehiddencheck import * 54 51 55 52 56 # locale … … 150 154 self._vbox.show() 151 155 self.create_toolbar() 156 self._file_hidden_check_actions = {} 157 self._create_file_hidden_check_toolbar() 152 158 self.create_file_list() 153 159 self._clipboard_file = None … … 204 210 from operator import and_ 205 211 def check(checker): 206 return checker( 207 name=entry.name, 208 path=entry.parent_path, 209 state=entry.state, 210 ) 212 check = checker(self.svc.boss) 213 if (check.identifier in self._file_hidden_check_actions) and \ 214 (self._file_hidden_check_actions[check.identifier].get_active()): 215 return check(name=entry.name, path=entry.parent_path, 216 state=entry.state, ) 217 else: 218 return True 211 219 212 220 if self.svc.opt('show_hidden'): … … 334 342 return ancs 335 343 344 def _on_act_file_hidden_check(self, action, check): 345 if (check.scope == SCOPE_GLOBAL): 346 # global 347 active_checker = self.svc.opt('file_hidden_check') 348 if (action.get_active()): 349 active_checker.append(check.identifier) 350 else: 351 active_checker.remove(check.identifier) 352 self.svc.set_opt('file_hidden_check', active_checker) 353 else: 354 # project 355 if (self.svc.current_project is not None): 356 section = self.svc.current_project.get_section('file_hidden_check') 357 if (section is None): 358 section = {} 359 section[check.identifier] = action.get_active() 360 self.svc.current_project.save_section('file_hidden_check', 361 section) 362 self.update_to_path() 363 364 def __file_hidden_check_scope_project_set_active(self, action): 365 """sets active state of a file hidden check action with 366 scope = project 367 relies on action name = identifier of checker""" 368 if (self.svc.current_project is not None): 369 section = self.svc.current_project.get_section('file_hidden_check') 370 action.set_active( 371 (section is not None) and 372 (action.get_name() in section) and 373 (section[action.get_name()] == 'True')) 374 else: 375 action.set_active(False) 376 377 378 def refresh_file_hidden_check(self): 379 """refreshes active status of actions of project scope checker""" 380 for checker in self.svc.features('file_hidden_check'): 381 check = checker(self.svc.boss) 382 if (check.scope == SCOPE_PROJECT): 383 action = self._file_hidden_check_actions[check.identifier] 384 self.__file_hidden_check_scope_project_set_active(action) 385 386 def _create_file_hidden_check_toolbar(self): 387 self._file_hidden_check_actions = {} 388 menu = gtk.Menu() 389 separator = gtk.SeparatorMenuItem() 390 project_scope_count = 0 391 menu.append(separator) 392 for checker in self.svc.features('file_hidden_check'): 393 check = checker(self.svc.boss) 394 action = gtk.ToggleAction(check.identifier, check.label, 395 check.label, None) 396 # active? 397 if (check.scope == SCOPE_GLOBAL): 398 action.set_active( 399 check.identifier in self.svc.opt('file_hidden_check')) 400 else: 401 self.__file_hidden_check_scope_project_set_active(action) 402 403 action.connect('activate', self._on_act_file_hidden_check, check) 404 self._file_hidden_check_actions[check.identifier] = action 405 menuitem = action.create_menu_item() 406 if (check.scope == SCOPE_GLOBAL): 407 menu.prepend(menuitem) 408 else: 409 menu.append(menuitem) 410 project_scope_count += 1 411 menu.show_all() 412 if (project_scope_count == 0): 413 separator.hide() 414 toolitem = None 415 for proxy in self.svc.get_action('toolbar_hidden_menu').get_proxies(): 416 if (isinstance(proxy, DropDownMenuToolButton)): 417 toolitem = proxy 418 break 419 if (toolitem is not None): 420 toolitem.set_menu(menu) 421 336 422 def get_selected_filename(self): 337 423 fileentry = self.file_list.get_selected() … … 383 469 self._fix_paste_sensitivity() 384 470 471 class DotFilesFileHiddenCheck(FileHiddenCheck): 472 _identifier = "DotFiles" 473 _label = "Hide Dot-Files" 474 _scope = SCOPE_GLOBAL 475 476 def __call__(self, name, path, state): 477 return name[0] != '.' 478 479 class RegExFileHiddenCheck(FileHiddenCheck): 480 _identifier = "RegEx" 481 _label = "Hide by User defined Regular Expression" 482 _scope = SCOPE_GLOBAL 483 484 def __call__(self, name, path, state): 485 _re = self.boss.get_service('filemanager').opt('hide_regex') 486 if not re: 487 return True 488 else: 489 return re.match(_re, name) is None 385 490 386 491 class FilemanagerEvents(EventsConfig): … … 394 499 self.subscribe_foreign_event('project', 'project_switched', 395 500 self.svc.on_project_switched) 501 self.subscribe_foreign_event('plugins', 'plugin_started', 502 self.on_plugin_started) 503 self.subscribe_foreign_event('plugins', 'plugin_stopped', 504 self.on_plugin_stopped); 505 506 def on_plugin_started(self, plugin): 507 if (plugin.has_foreign_feature('filemanager', 'file_hidden_check')): 508 self.svc.refresh_file_hidden_check_menu() 509 510 def on_plugin_stopped(self, plugin): 511 self.svc.refresh_file_hidden_check_menu() 396 512 397 513 … … 429 545 430 546 def subscribe_foreign_features(self): 431 self.subscribe_feature('file_hidden_check', self.svc.check_hidden_regex) 547 self.subscribe_feature('file_hidden_check', DotFilesFileHiddenCheck) 548 self.subscribe_feature('file_hidden_check', RegExFileHiddenCheck) 432 549 433 550 self.subscribe_foreign_feature('contexts', 'file-menu', … … 446 563 True, 447 564 _('Shows hidden files')) 565 self.create_option( 566 'file_hidden_check', 567 _('Used file hidden checker'), 568 OTypeStringList, 569 [], 570 _('The used file hidden checker')) 448 571 449 572 self.create_option( … … 566 689 TYPE_TOGGLE, 567 690 _('Show Hidden Files'), 568 _(' Toggle the display ofhidden files'),691 _('Show hidden files'), 569 692 gtk.STOCK_SELECT_ALL, 570 693 self.on_toggle_hidden, 571 694 ) 695 self.create_action( 696 'toolbar_hidden_menu', 697 TYPE_DROPDOWNMENUTOOL, 698 '', 699 _('Setup which kind of files should be hidden'), 700 None, 701 None, 702 ) 703 572 704 573 705 def on_browse_for_file(self, action): … … 590 722 self.svc.boss.cmd('commander','execute_shell', cwd=self.svc.path) 591 723 724 def _on_menu_down(self, menu, action): 725 action.set_active(False) 726 print "down" 727 592 728 def on_toggle_hidden(self, action): 593 729 self.svc.set_opt('show_hidden', action.get_active()) … … 661 797 self.browse(dir) 662 798 663 def check_hidden_regex(self, name, path, state):664 _re = self.opt('hide_regex')665 if not re:666 return True667 else:668 return re.match(_re, name) is None669 670 799 def rename_file(self, old, new, basepath): 671 800 pass 672 801 802 def refresh_file_hidden_check_menu(self): 803 self.get_view()._create_file_hidden_check_toolbar() 804 673 805 def on_project_switched(self, project): 674 806 self.current_project = project 675 807 self.get_action('toolbar_projectroot').set_sensitive(project is not None) 808 self.get_view().refresh_file_hidden_check() 676 809 677 810 -
pida/services/filemanager/uidef/filemanager-toolbar.xml
r905 r1159 6 6 <toolitem action="toolbar_refresh" name="toolbar_refresh"/> 7 7 <toolitem action="toolbar_terminal" name="toolbar_terminal"/> 8 <toolitem action="toolbar_toggle_hidden" name="toggle_hidden"/> 8 <toolitem action="toolbar_toggle_hidden" name="toolbar_toggle_hidden"/> 9 <toolitem action="toolbar_hidden_menu" name="toolbar_hidden_menu"/> 9 10 <separator /> 10 11 <toolitem action="toolbar_delete" name="toolbar_delete"/> -
pida/services/versioncontrol/versioncontrol.py
r1150 r1159 1 1 # -*- coding: utf-8 -*- 2 2 3 # Copyright (c) 2007 The PIDA Project3 # Copyright (c) 2007-2008 The PIDA Project 4 4 5 5 #Permission is hereby granted, free of charge, to any person obtaining a copy … … 42 42 43 43 from pida.utils.gthreads import AsyncTask, gcall 44 45 from pida.services.filemanager.filehiddencheck import FileHiddenCheck, SCOPE_GLOBAL 44 46 45 47 # locale … … 216 218 self.svc.get_action('show_commit').set_active(False) 217 219 220 class VersionControlFileHiddenCheck(FileHiddenCheck): 221 _identifier = "VersionControl" 222 _label = "Hide Ignored Files by Version Control" 223 _scope = SCOPE_GLOBAL 224 225 def __call__(self, name, path, state): 226 return not (state == "hidden" or state == "ignored") 218 227 219 228 class VersioncontrolFeaturesConfig(FeaturesConfig): … … 228 237 self.subscribe_feature("workdir-manager", mgr) 229 238 230 self.subscribe_foreign_feature( 231 "filemanager", "file_hidden_check", 232 self.svc.ignored_file_checker 233 ) 239 #self.subscribe_foreign_feature( 240 # "filemanager", "file_hidden_check", 241 # self.svc.ignored_file_checker 242 # ) 243 self.subscribe_foreign_feature('filemanager', 'file_hidden_check', 244 VersionControlFileHiddenCheck) 234 245 self.subscribe_foreign_feature('contexts', 'file-menu', 235 246 (self.svc.get_action_group(), 'versioncontrol-file-menu.xml'))
