def refresh_button_state( self ):
    
    bake_layers = pmc.ls( typ = 'BakeLayer' )
    
    one_selected = False
    if pmc.treeView( self.__layer_tree, q = True, si = True ) == None:
      pass 
    elif len( pmc.treeView( self.__layer_tree, q = True, si = True ) ) == 1:
      one_selected = True
      sel_layer = pmc.treeView( self.__layer_tree, q = True, si = True )[ 0 ]
    
    connected_layers = [ ]
    
    if one_selected:
      selected_is_high = utils.is_high( sel_layer )
      if selected_is_high:
        connected_layers = utils.get_connected_low_layers( sel_layer )
      else:
        connected_layers = utils.get_connected_high_layers( sel_layer )
    

    for layer in bake_layers:
      
      if one_selected == True:
        if selected_is_high == utils.is_high( layer ):
          pmc.treeView( self.__layer_tree,
                        e = True,
                        eb = ( layer, 2, False ),
                        i = ( layer, 2, '' ) )
          
          
        
        else:
          if utils.get_bake_layer( layer ) in connected_layers:
            image = bake_layer_tool.get_image( 'link_icon.png' )
          else:
            image = bake_layer_tool.get_image( 'unlink_icon.png' )
  
            
          pmc.treeView( self.__layer_tree,
                        e = True,
                        eb = ( layer, 2, True ),
                        i = ( layer, 2, image ) )
      
      else:
        pmc.treeView( self.__layer_tree,
                      e = True,
                      eb = ( layer, 2, False ),
                      i = ( layer, 2, '' ) )
  def button_type_change( self, layer, arg ):


    node = utils.get_bake_layer(layer)
    
    if utils.is_high( layer ):
      utils.set_low( layer )
    else:
      utils.set_high( layer )
      
    self.refresh( )
 def button_connection_edit( self, layer, arg ):
   
   selected_layer = pmc.treeView( self.__layer_tree,
                                  q = True,
                                  si = True )[ 0 ]
                                                             
   if utils.are_connected( layer, selected_layer ):
     utils.disconnect_layers( [ layer, selected_layer ] )
   else:
     if utils.is_high( selected_layer ):
       utils.connect_layers( layer, selected_layer )
     else:
       utils.connect_layers( selected_layer, layer )
   
   self.refresh_button_state()
  def connect_layers( self, evt ):
    """
    Connect two layers event handler.
    """
    high_layers = [ ]
    low_layers = [ ]
    
    for layer in self.get_selected_layers( ):
      if utils.is_high( layer ):
        high_layers.append( layer )
        
      else:
        low_layers.append( layer )

    if not len( low_layers ) == 1:
      pmc.error( 'Connecting Bake Layers requires one and only one low layer.' )
      return False

    utils.connect_layers( low_layers[ 0 ], high_layers )
  def refresh( self ):

    bake_layers = pmc.ls( typ = 'BakeLayer' )
    
    for layer in bake_layers:
      pass

    # Build the new layout
    
    pmc.treeView( self.__layer_tree, e = True, removeAll = True )
    
    for layer in bake_layers:
      
      # Create Button
      if utils.is_high( layer ):
        h_l_button = 'H'
        low = False
        rd_button = False
      else:
        h_l_button = 'L'
        low = True
        rd_button = bake_layer_tool.get_image( 'ray_dist.png' )

      pmc.treeView( self.__layer_tree,
                    e = True,
                    addItem = ( layer.name( ), '' ) )
      
      pmc.treeView( self.__layer_tree,
                    e = True,
                    bti = ( layer.name( ), 1, h_l_button ) )
      
      
      pmc.treeView( self.__layer_tree,
                    e = True,
                    eb = ( layer, 3, low ),
                    i = ( layer, 3, rd_button ) )
      
      
      
    self.refresh_button_state()
  def show_left_click_menu( self, menu, layer ):
    if layer == '':
      return False
    pmc.setParent( menu, menu = True )
    
    if len( pmc.ls( sl = True ) ) < 1:
      selection = False
      
    else:
      selection = True
    
    is_high = utils.is_high( layer )
    
    if len( self.get_selected_layers( ) ) < 2:
      mult_select = False
    else:
      mult_select = True
   
    menu.deleteAllItems( )

    
    pmc.menuItem( label = layer + '...' )
   
    if not is_high:
      enable = True
    else:
      enable = False
      
    pmc.menuItem( label = 'Bake this layer',
                  enable = enable,
                  command = pmc.Callback( self.do_bake_layer,
                                          layer ) )
    pmc.menuItem( divider = True )
    
    if is_high:
      enable = False
    else:
      enable = True
      
    pmc.menuItem( label = 'Set layer to High-poly',
                  enable = enable,
                  command = pmc.Callback( utils.set_high,
                                          layer ) )
    
    if is_high:
      enable = True
    else:
      enable = False

    pmc.menuItem( label = 'Set layer to Low-poly',
                  enable = enable,
                  command = pmc.Callback( utils.set_low,
                                          layer ) )
    pmc.menuItem( divider = True )
    
    enable = mult_select
    
    pmc.menuItem( label = 'Connect Selected Layers',
                  enable = enable,
                  command = self.connect_layers )
    
    pmc.menuItem( divider = True )
    
    if not selection:
      enable = False
    else:
      enable = True
    
    pmc.menuItem( label = 'Add selected objects',
                  enable = enable,
                  command = pmc.Callback( utils.add_to_bake_layer,
                                          layer ) )
    
    pmc.menuItem( label = 'Remove selected objects',
                  enable = enable,
                  command = pmc.Callback( utils.remove_from_bake_layer,
                                          layer ) )
    
    pmc.menuItem( label = 'Select Objects',
                  command = pmc.Callback( self.select_objects,
                                          layer ) )
    
    pmc.menuItem( divider = True )
    
    pmc.menuItem( label = 'Delete',
                  command = pmc.Callback( self.delete_selected,
                                          layer ) )
    return True
  def build( self ):
    
    form = pmc.formLayout( )
    pmc.setParent( form )
    is_high = utils.is_high( self.layer )
    
    body = pmc.columnLayout( rowSpacing = 4 )
    
    self.name_field = pmc.textFieldGrp( columnWidth = [ 1, 70 ],
                                   label = 'Name',
                                   text = self.layer.name( ),
                                   editable = True )
    
    self.high_low = pmc.radioButtonGrp( columnWidth = [ 1, 70 ],
                                   nrb = 2,
                                   l = 'Layer Type:',
                                   l1 = 'High-poly',
                                   l2 = 'Low-poly' )
    
    self.ray_laybe = pmc.text ( l = 'Max ray Distance:',
                                al = 'center',
                                width = 350 )
    
    float_row = pmc.rowColumnLayout( numberOfRows = 1 )
    
    self.ray_dist_f = pmc.floatFieldGrp( columnWidth = [ 1, 70 ],
                                       nf = 1,
                                       l = 'Front',
                                       pre = 3 )
    
    self.ray_dist_b = pmc.floatFieldGrp( columnWidth = [ 1, 70 ],
                                         nf = 1,
                                         l = 'Back',
                                         pre = 3 )
    
    if is_high:
      self.high_low.setSelect( 1 )
    else:
      self.high_low.setSelect( 2 )
      self.ray_dist_b.setValue1( utils.get_back_ray_dist( self.layer ) )
      self.ray_dist_f.setValue1( utils.get_front_ray_dist( self.layer ) )
    
    button_form = pmc.formLayout( parent = form )

    
    btn_save = pmc.button( label = 'Save',
                           command = self.save_changes )
    
    btn_cancel = pmc.button( label = 'Cancel',
                             command = self.cancel_changes )
    
    
    button_form.attachForm( btn_save, 'top', 0 )
    button_form.attachForm( btn_save, 'left', 0 )
    button_form.attachForm( btn_save, 'bottom', 0 )
    button_form.attachPosition( btn_save, 'right',  2, 50 )
    
    button_form.attachForm( btn_cancel, 'top', 0 )
    button_form.attachPosition( btn_cancel, 'left', 2, 50 )
    button_form.attachForm( btn_cancel, 'bottom', 0 )
    button_form.attachForm( btn_cancel, 'right', 0 )
    
    form.attachForm( body, 'top', 4 )
    form.attachForm( body, 'left', 4 )
    form.attachControl( body, 'bottom', 4, button_form )
    form.attachForm( body, 'right', 4 )
    
    form.attachNone( button_form, 'top' )
    form.attachForm( button_form, 'left', 4 )
    form.attachForm( button_form, 'bottom', 4)
    form.attachForm( button_form, 'right', 4 )
    
    self.refresh( )