Page 1 of 1

Click on TreeGadget image?

Posted: Wed May 27, 2015 1:06 am
by wombats
Hi,

It used to be possible to determine if the image of a TreeGadget had been clicked on by testing which column was clicked in. However, I believe that a change at some point combined an item's image and text into the same column, so that the test returned the same result for a click on the image and text.

Is there a way to see if ONLY the image has been clicked on? I do need to use checkboxes.

Code: Select all

Define SelectedRow, SelectedColumn, ClickedPoint.NSPoint

If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TreeGadget(0, 10, 10, 160, 160, #PB_Tree_CheckBoxes)
  
  CreateImage(0, 16, 16)
  If StartDrawing(ImageOutput(0))
    Box(0, 0, OutputWidth(), OutputHeight(), RGB(0, 0, 128))
    StopDrawing()
  EndIf
  
  AddGadgetItem(0, -1, "Item 1", ImageID(0))
  
  Repeat
    
    event = WaitWindowEvent()
    
    Select event
        
      Case #PB_Event_Gadget
        
        If EventType() = #PB_EventType_LeftClick
          
          ClickedPoint\x = WindowMouseX(0)
          ClickedPoint\y = WindowHeight(0) - WindowMouseY(0)
          CocoaMessage(@ClickedPoint, GadgetID(0), "convertPoint:@", @ClickedPoint, "fromView:", 0)
          SelectedRow = CocoaMessage(0, GadgetID(0), "rowAtPoint:@", @ClickedPoint)
          SelectedColumn = CocoaMessage(0, GadgetID(0), "columnAtPoint:@", @ClickedPoint)
          Debug "column: " + SelectedColumn
          SelectedColumn = -1
          SelectedRow = -1
          
        EndIf
        
    EndSelect
    
  Until event = #PB_Event_CloseWindow
EndIf
Thank you!

Re: Click on TreeGadget image?

Posted: Tue Jun 02, 2015 6:24 pm
by Shardik

Code: Select all

EnableExplicit

Define ClickedPoint.NSPoint
Define Indentation.I
Define IndentationLevel.I
Define IndentationPerLevel.CGFloat
Define SelectedColumn.I
Define SelectedRow.I
Define WindowEvent.I

If OpenWindow(0, 270, 100, 180, 80, "TreeGadget")
  TreeGadget(0, 10, 10, 160, 60, #PB_Tree_CheckBoxes)
 
  CreateImage(0, 16, 16)

  If StartDrawing(ImageOutput(0))
    Box(0, 0, OutputWidth(), OutputHeight(), $CC3299)
    StopDrawing()
  EndIf

  CreateImage(1, 16, 16)

  If StartDrawing(ImageOutput(1))
    Box(0, 0, OutputWidth(), OutputHeight(), $7A96E9)
    StopDrawing()
  EndIf
 
  AddGadgetItem(0, -1, "Item", ImageID(0))
  AddGadgetItem(0, -1, "Subitem", ImageID(1), 1)
  SetGadgetItemState(0, 0, #PB_Tree_Expanded)

  Repeat
    WindowEvent = WaitWindowEvent()

    Select WindowEvent
      Case #PB_Event_Gadget
        If EventType() = #PB_EventType_LeftClick
          ClickedPoint\x = WindowMouseX(0)
          ClickedPoint\y = WindowHeight(0) - WindowMouseY(0)
          CocoaMessage(@ClickedPoint, GadgetID(0),
            "convertPoint:@", @ClickedPoint, "fromView:", 0)
          SelectedRow = CocoaMessage(0, GadgetID(0),
            "rowAtPoint:@", @ClickedPoint)
          SelectedColumn = CocoaMessage(0, GadgetID(0),
            "columnAtPoint:@", @ClickedPoint)

          If SelectedColumn = 0
            Debug "Click onto CheckBox of row " + SelectedRow
          Else
            IndentationLevel = CocoaMessage(0, GadgetID(0),
              "levelForRow:", CocoaMessage(0, GadgetID(0), "selectedRow"))
            CocoaMessage(@IndentationPerLevel, GadgetID(0), "indentationPerLevel")
            Indentation = (Int(IndentationLevel) + 1) * IndentationPerLevel + 24

            If ClickedPoint\x >= Indentation And ClickedPoint\x < Indentation + 16
              Debug "Click onto image of row " + SelectedRow
            ElseIf ClickedPoint\x >= Indentation + 16
              Debug "Click onto text of row " + SelectedRow
            EndIf
          EndIf       
        EndIf
    EndSelect
  Until WindowEvent = #PB_Event_CloseWindow
EndIf

Re: Click on TreeGadget image?

Posted: Tue Jun 02, 2015 10:53 pm
by wombats
Thank you very much!