Changeset 3859

Show
Ignore:
Timestamp:
01/12/08 05:26:07 (11 months ago)
Author:
ed
Message:

Some improvements to the old design. I'm committing these now, and re-writing some of the code to avoid a lot of the redrawing problems that caused problems in the current approach.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ide/MenuBarPanel.py

    r3515 r3859  
    3030     
    3131    def appendMenu(self, caption, useMRU=False): 
    32         mn = MenuPanel(self, Caption=caption, MRU=useMRU, Visible=self.Visible) 
     32        mn = MenuPanel(self, Caption=caption, MRU=useMRU, Visible=True) 
    3333        self.Sizer.append(mn) 
    34       dabo.ui.callAfterInterval(500, self._setNewMenu, mn) 
     34#     dabo.ui.callAfterInterval(500, self._setNewMenu, mn) 
    3535        self.fit() 
    3636        self.Controller.updateLayout() 
    3737        return mn 
    3838     
    39      
    40     def _setNewMenu(self, mn): 
    41         mn.PanelVisible = True 
    42         dabo.ui.setAfterInterval(500, mn, "PanelVisible", False) 
    43          
    4439     
    4540    def insertMenu(self, pos, caption, useMRU=False): 
     
    5247         
    5348    def menuClick(self, menu): 
     49        self.select(menu) 
     50 
     51 
     52    def select(self, menu): 
    5453        self.Controller.Selection = menu 
    5554        menu.PanelVisible = True 
    56      
    57      
     55 
     56        
    5857    def fit(self): 
    5958        self.layout(resetMin=True) 
     
    214213        self.appendMenu(_("View"), False) 
    215214        self.appendMenu(_("Help"), False) 
     215         
     216        for kid in self.Children: 
     217            kid.Visible = True 
    216218        self.layout() 
    217219        self.fitToSizer() 
     220 
     221        self.select(fm) 
    218222        self.Form.unlockDisplay() 
    219         dabo.ui.callAfterInterval(100, self._cleanupQuickMenu, fm) 
    220     def _cleanupQuickMenu(self, itm): 
    221         self.Form.select(itm) 
    222         dabo.ui.callAfterInterval(100, self.Form.refresh) 
     223        self.Form.refresh() 
     224 
     225 
     226#       dabo.ui.callAfterInterval(100, self._cleanupQuickMenu, fm) 
     227#   def _cleanupQuickMenu(self, itm): 
     228#       self.Form.select(itm) 
     229#       dabo.ui.callAfterInterval(100, self.Form.refresh) 
    223230 
    224231 
     
    267274    Menus = property(_getMenus, None, None, 
    268275            _("List of all menus in this menubar  (list of MenuPanels)")) 
    269      
    270      
  • trunk/ide/MenuDesignerComponents.py

    r3515 r3859  
    55from dabo.dLocalize import _ 
    66import dabo.dEvents as dEvents 
     7from dabo.ui import makeDynamicProperty 
     8from dabo.ui import makeProxyProperty 
    79 
    810 
     
    5759    # Displayed name 
    5860    _commonName = "Generic Item" 
     61    _kids = [] 
    5962     
    6063    def __init__(self, parent, *args, **kwargs): 
    6164        self._caption = "" 
    6265        self._MRU = False 
     66        self._selected = False 
    6367        self._inUpdate = False 
    6468        # The draw object representing the Caption 
     
    8387        self.BorderColor = (222, 222, 222) 
    8488        self.Height = 24 
    85         self.BackColor = self._unselectedBackColor = "white" 
     89        self._unselectedBackColor = "white" 
    8690        self._selectedBackColor = (255, 255, 192) 
    8791        self._unselectedForeColor = "black" 
     
    8993        # This is the background draw object 
    9094        self._background = self.drawRectangle(0, 0, -1, -1, 
    91                 penWidth=0, fillColor=self._unselectedBackColor) 
    92         self._selected = False 
    93         self._capText = self.drawText(self.Caption, 5, 5) 
    94         self._hotKeyText = self.drawText(self.AbbreviatedHotKey, 5, 5) 
     95                penWidth=0, fillColor=self._unselectedBackColor, visible=False) 
     96        self._capText = self.drawText(self.Caption, 5, 5, visible=False) 
     97        self._hotKeyText = self.drawText(self.AbbreviatedHotKey, 5, 5, visible=False) 
     98        self.DynamicBackColor = self.getBack        #lambda: {True: self._selectedBackColor, False: self._unselectedBackColor}[self._selected] 
     99        self._background.DynamicFillColor = self._capText.DynamicFillColor = \ 
     100                self._hotKeyText.DynamicFillColor = self.getBack        #lambda: {True: self._selectedBackColor, False: self._unselectedBackColor}[self._selected] 
     101        self._capText.DynamicForeColor = lambda: {True: self._selectedForeColor, False: self._unselectedForeColor}[self._selected] 
    95102        # This will allow the hot key text position to stay right-aligned. 
    96103        self._hotKeyText.DynamicXpos = self.positionHotKeyText 
     
    107114        self.Buffered = True 
    108115         
    109      
     116        self._kids = [self._background, self._hotKeyText, self._capText] 
     117     
     118    def getBack(self): 
     119        print "BACK", 
     120        try: 
     121            print self.Caption 
     122        except AttributeError: 
     123            print self.Shape, self 
     124        print "SELECTED:", self._selected 
     125        if self._selected: 
     126            ret = self._selectedBackColor 
     127        else: 
     128            ret = self._unselectedBackColor 
     129        print "RETURNING", ret 
     130        print 
     131        return ret 
     132 
     133 
    110134    # These two methods will display the item's HelpText 
    111135    # in the form's Status Bar when the mouse is over them. 
     
    150174            addlwd += self._captionHotKeySpacing 
    151175        calc = capwd + hkwd + addlwd 
     176         
     177        print "WID", self.Caption, calc 
    152178        if curr < calc: 
    153179            self.Width = calc 
     
    179205        super(CaptionPanel, self).refresh() 
    180206        self.setWidth() 
     207        print "PAR UP REF", self, self.Parent 
    181208        self.Parent.update() 
    182209        self.Parent.layout() 
     
    362389    def _setSelected(self, val): 
    363390        if self._constructed(): 
     391            print "SETSEL", self.Caption, val 
    364392            self._selected = val 
    365           self.clear() 
    366           self.lockDisplay() 
    367           backcolor = {True: self._selectedBackColor,  
    368                   False: self._unselectedBackColor}[val] 
    369           forecolor = {True: self._selectedForeColor, 
    370                   False: self._unselectedForeColor}[val] 
    371           self._capText.ForeColor = self._capText.PenColor = forecolor 
    372           self._capText.FontBold = val 
    373           self.BackColor = self._background.FillColor = backcolor 
     393#             self.clear() 
     394#             self.lockDisplay() 
     395#             backcolor = {True: self._selectedBackColor,  
     396#                     False: self._unselectedBackColor}[val] 
     397#             forecolor = {True: self._selectedForeColor, 
     398#                     False: self._unselectedForeColor}[val] 
     399#             self._capText.ForeColor = self._capText.PenColor = forecolor 
     400#             self._capText.FontBold = val 
     401#             self.BackColor = self._background.FillColor = backcolor 
    374402            self.Parent.refresh() 
    375           self.unlockDisplay() 
     403#             self.unlockDisplay() 
    376404        else: 
    377405            self._properties["Selected"] = val 
     
    429457         
    430458 
     459    _proxyDict = {} 
     460    Visible = makeProxyProperty(_proxyDict, "Visible", ("self", "_kids")) 
    431461 
    432462 
     
    466496            # Remove it. 
    467497            self.removeDrawnObject(self._bmp) 
     498            self._kids.remove(self._bmp) 
    468499            self._bmp = None 
    469         self._bmp = self.drawBitmap(bmp, 5, 5) 
     500        self._bmp = self.drawBitmap(bmp, 5, 5, visible=self.Parent.Visible) 
     501         
     502        self._kids.append(self._bmp) 
     503 
    470504        wd = self._bmp.Width 
    471505        # Move the text over to fit 
     
    520554        self._line.DynamicPoints = self.setLineWidth 
    521555        self._line.DynamicPenWidth = self.setLineThick 
     556        self._kids.append(self._line) 
     557         
    522558         
    523559    def onResize(self, evt): 
  • trunk/ide/MenuDesignerForm.py

    r3662 r3859  
    8686    def initialLayout(self): 
    8787#       print "INITLAY" 
    88 #         self.menubar.clear() 
    89 #         self.mainPanel.clear() 
     88      self.menubar.clear() 
     89      self.mainPanel.clear() 
    9090        self.menubar.quickMenu() 
    9191        self.layout() 
     
    195195         
    196196    def select(self, obj): 
    197 #         try: print "SELE", obj.Caption 
    198 #         except: print "SELE NONE" 
     197      try: print "SELE", obj.Caption 
     198      except: print "SELE NONE" 
    199199        if obj is self._selection: 
    200 #             print "SAME" 
     200          print "SAME" 
    201201            return 
    202202        self.lockDisplay() 
    203203        if self._selection is not None: 
    204 #             print "UNSEL", self._selection.Caption 
     204          print "UNSEL", self._selection.Caption 
    205205            self._selection.Selected = False 
    206206        self._selection = obj 
    207207        self.PropForm.select(obj) 
    208 #         print "OBJ.SELECTED" 
     208      print "OBJ.SELECTED" 
    209209        obj.Selected = True 
    210 #         try: print "ENSURE", obj.Caption 
    211 #         except: print "eENSEURE NONE" 
     210      try: print "ENSURE", obj.Caption 
     211      except: print "eENSEURE NONE" 
    212212 
    213213        self.ensureVisible(obj) 
    214214        dabo.ui.callAfterInterval(100, self._selectAfter) 
    215215    def _selectAfter(self): 
    216 #       try: print "SELE AFT", self._selection.Caption 
    217 #       except: print "SELE AFT NONE" 
     216        try: print "SELE AFT", self._selection.Caption 
     217        except: print "SELE AFT NONE" 
     218        self.update() 
    218219        self.refresh() 
    219220        self.unlockDisplay() 
  • trunk/ide/MenuPanel.py

    r3662 r3859  
    99from MenuDesignerComponents import CaptionBitmapPanel 
    1010from MenuDesignerComponents import SeparatorPanel 
     11from dabo.ui import makeDynamicProperty 
     12from dabo.ui import makeProxyProperty 
    1113 
    1214 
     
    2628                self._controller = None 
    2729                super(_ItemPanel, self).__init__(*args, **kwargs) 
    28              
     30                self.DynamicWidth = self._calcWidth 
     31             
     32            def _calcWidth(self): 
     33                kids = self.Children 
     34                if not kids: 
     35                    return 0 
     36                else: 
     37                    wd = max([kid.Width for kid in kids]) 
     38                    dabo.ui.callAfter(self._resizeItems, wd) 
     39                    return wd 
     40             
     41            def _resizeItems(self, wd): 
     42                if not self: 
     43                    return 
     44                for kid in self.Children: 
     45                    kid.Width = wd 
     46                self.layout() 
     47                self.refresh() 
     48 
    2949            def processContextMenu(self, obj, evt): 
    3050                self.Controller.processContextMenu(obj, evt)                     
     
    3858            Controller = property(_getController, _setController, None, 
    3959                    _("Object to which this panel is associated  (MenuPanel)")) 
     60             
    4061 
    4162        # Add the panel that will hold the menu items. It needs to 
     
    6485         
    6586         
    66   def layout(self): 
    67       dabo.ui.callAfterInterval(100, self.itemList.layout, resetMin=True) 
    68       dabo.ui.callAfterInterval(100, self.itemList.fitToSizer) 
     87#     def layout(self): 
     88#         dabo.ui.callAfterInterval(100, self.itemList.layout, resetMin=True) 
     89#         dabo.ui.callAfterInterval(100, self.itemList.fitToSizer) 
    6990 
    7091 
     
    81102            pos = len(self.itemList.Children) 
    82103        if separator: 
    83             itm = SeparatorPanel(self.itemList, Controller=self
     104            itm = SeparatorPanel(self.itemList, Controller=self, Visible=False
    84105        else: 
    85106            itm = CaptionBitmapPanel(self.itemList, Caption=caption, 
    86                     Controller=self, Visible=self.Visible) 
     107                    Controller=self, Visible=False) 
    87108            itm._className = "MenuItemPanel" 
    88109            itm._commonName = "Menu Item" 
     
    94115                itm.Picture = picture 
    95116         
     117        itm.Visible = True 
    96118        self.itemList.Height += itm.Height 
    97119        self.itemList.Sizer.insert(pos, itm, "x") 
     
    223245     
    224246    def _getChildren(self): 
    225         return self.itemList.Children 
     247        try: 
     248            return self.itemList.Children 
     249        except AttributeError: 
     250            return [] 
    226251 
    227252 
     
    230255 
    231256    def _setPanelVisible(self, val): 
    232 #       print "SETVIS", self.Caption, val 
    233257        if val: 
    234258            localPos = (self.Left, self.Bottom) 
     
    236260            self.itemList.Position = formPos 
    237261            self.Controller.onShowPanel(self) 
     262#       self.Visible = val 
    238263        self.itemList.Visible = val 
     264 
     265#       itms = self._proxyDict.get("Visible", ()) 
     266#       for xx in itms: 
     267#           if xx == "Children": 
     268#               for xkid in self.Children: 
     269#           elif xx == "self": 
     270#               print "SELF ITEMLIST", self.itemList.Visible 
     271#           else: 
     272#               obj = getattr(self, xx) 
     273#               print xx, obj.Visible 
     274         
     275        self.itemList.update() 
    239276        self.itemList.Parent.clear() 
    240277        self.layout() 
    241       self.itemList.Parent.refresh() 
     278#     self.itemList.Parent.refresh() 
    242279 
    243280 
     
    247284    PanelVisible = property(_getPanelVisible, _setPanelVisible, None, 
    248285            _("Determines if the menu is currently 'open'  (bool)")) 
    249      
    250          
    251  
     286 
     287 
     288    _proxyDict = {} 
     289    Visible = makeProxyProperty(_proxyDict, "Visible", ("self", "Children", "_capText"))