GadgetIDType

Share your advanced PureBasic knowledge/code with the community.
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

GadgetIDType

Post by mestnyi »

Returns the type of gadget through Handley

Code: Select all


CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  Import ""
  CompilerElse
    ImportC ""
    CompilerEndIf
    PB_Object_EnumerateStart(Object)
    PB_Object_EnumerateNext(Object,*ID.Integer)
    PB_Object_EnumerateAbort(Object)
    PB_Object_EnumerateAll(Object,*CallBack,*Data)
    PB_Object_Count(Object)
    PB_Window_Objects.l
    PB_Gadget_Objects.l
    PB_Image_Objects.l
  EndImport
  
  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    Procedure GtkButton( GadgetID )
      If GadgetID >0
        Static Widget
        ;While GadgetID 
        Widget = GadgetID
        ;GadgetID = gtk_widget_get_parent_( GadgetID )
        If PeekS( gtk_widget_get_name_( GadgetID ), -1, #PB_UTF8 ) = "GtkButton"
          Widget = g_list_nth_data_(gtk_container_get_children_((GadgetID)), 0) 
          If Widget And PeekS( gtk_widget_get_name_( Widget), -1, #PB_UTF8 ) <> "GtkImage"
            Protected *style.GtkStyle = gtk_widget_get_style_(Widget)
            ;145586704
            ;Debug "GtkButton" + *style\property_cache\data
            ;144367632
            ;Debug "GtkButton" + Str(*style\parent_instance) 
            If *style\styles\data
              Debug "GtkButton" + PeekS( gtk_widget_get_name_( *style\styles\data), -1, #PB_UTF8 )
            EndIf  
            ProcedureReturn Widget
          EndIf
        EndIf
        
        ;Wend  
      EndIf
    EndProcedure
  CompilerEndIf    
  
  ProcedureDLL.s GadgetName( Type )
    Protected GadgetName.s 
    Select Type
      Case #PB_GadgetType_Unknown        :GadgetName = "OpenWindow"
      Case #PB_GadgetType_Button         :GadgetName = "ButtonGadget"
      Case #PB_GadgetType_String         :GadgetName = "StringGadget"
      Case #PB_GadgetType_Text           :GadgetName = "TextGadget"
      Case #PB_GadgetType_CheckBox       :GadgetName = "CheckBoxGadget"
      Case #PB_GadgetType_Option         :GadgetName = "OptionGadget"
      Case #PB_GadgetType_ListView       :GadgetName = "ListViewGadget"
      Case #PB_GadgetType_Frame          :GadgetName = "FrameGadget"
      Case #PB_GadgetType_ComboBox       :GadgetName = "ComboBoxGadget"
      Case #PB_GadgetType_Image          :GadgetName = "ImageGadget"
      Case #PB_GadgetType_HyperLink      :GadgetName = "HyperLinkGadget"
      Case #PB_GadgetType_Container      :GadgetName = "ContainerGadget"
      Case #PB_GadgetType_ListIcon       :GadgetName = "ListIconGadget"
      Case #PB_GadgetType_IPAddress      :GadgetName = "IPAddressGadget"
      Case #PB_GadgetType_ProgressBar    :GadgetName = "ProgressBarGadget"
      Case #PB_GadgetType_ScrollBar      :GadgetName = "ScrollBarGadget"
      Case #PB_GadgetType_ScrollArea     :GadgetName = "ScrollAreaGadget"
      Case #PB_GadgetType_TrackBar       :GadgetName = "TrackBarGadget"
      Case #PB_GadgetType_Web            :GadgetName = "WebGadget"
      Case #PB_GadgetType_ButtonImage    :GadgetName = "ButtonImageGadget"
      Case #PB_GadgetType_Calendar       :GadgetName = "CalendarGadget"
      Case #PB_GadgetType_Date           :GadgetName = "DateGadget"
      Case #PB_GadgetType_Editor         :GadgetName = "EditorGadget"
      Case #PB_GadgetType_ExplorerList   :GadgetName = "ExplorerListGadget"
      Case #PB_GadgetType_ExplorerTree   :GadgetName = "ExplorerTreeGadget"
      Case #PB_GadgetType_ExplorerCombo  :GadgetName = "ExplorerComboGadget"
      Case #PB_GadgetType_Spin           :GadgetName = "SpinGadget"
      Case #PB_GadgetType_Tree           :GadgetName = "TreeGadget"
      Case #PB_GadgetType_Panel          :GadgetName = "PanelGadget"
      Case #PB_GadgetType_Splitter       :GadgetName = "SplitterGadget"
      Case #PB_GadgetType_MDI           
        CompilerIf #PB_Compiler_OS = #PB_OS_Windows
          GadgetName = "MDIGadget"
        CompilerEndIf
      Case #PB_GadgetType_Scintilla      :GadgetName = "ScintillaGadget"
      Case #PB_GadgetType_Shortcut       :GadgetName = "ShortcutGadget"
      Case #PB_GadgetType_Canvas         :GadgetName = "CanvasGadget"
    EndSelect
    
    ProcedureReturn GadgetName
  EndProcedure
  
  ProcedureDLL GadgetIDType( GadgetID ) ;Returns gadget type from gadgetID
    If GadgetID
      CompilerIf #PB_Compiler_OS = #PB_OS_Linux
        Select PeekS( gtk_widget_get_name_( GadgetID ), -1, #PB_UTF8 )
          Case "GtkButton"                  
            Debug GtkButton( GadgetID )
            
            Protected children = g_list_nth_data_( gtk_container_get_children_( GadgetID ), 0) 
            If PeekS( gtk_widget_get_name_( children ), -1, #PB_UTF8 ) = "GtkImage" 
              ProcedureReturn #PB_GadgetType_ButtonImage 
            Else
              ProcedureReturn #PB_GadgetType_Button    
              ProcedureReturn #PB_GadgetType_HyperLink      
              ProcedureReturn #PB_GadgetType_HyperLink   
            EndIf  
            
          Case "GtkEntry"                   :ProcedureReturn #PB_GadgetType_Shortcut            
            ;           Case "GtkEntry"     :ProcedureReturn #PB_GadgetType_Date            
            ;           Case "GtkEntry"     :ProcedureReturn #PB_GadgetType_String             
            ;           Case "GtkEntry"     :ProcedureReturn #PB_GadgetType_IPAddress           
            ;             
          Case "GtkTreeView"                :ProcedureReturn #PB_GadgetType_Tree      
            ;           Case "GtkTreeView"  :ProcedureReturn #PB_GadgetType_ListView      
            ;           Case "GtkTreeView"  :ProcedureReturn #PB_GadgetType_ListIcon 
            ;           Case "GtkTreeView"  :ProcedureReturn #PB_GadgetType_ExplorerList          
            ;           Case "GtkTreeView"  :ProcedureReturn #PB_GadgetType_ExplorerTree          
          Case "GtkLabel"                   :ProcedureReturn #PB_GadgetType_Text
          Case "GtkCheckButton"             :ProcedureReturn #PB_GadgetType_CheckBox
          Case "GtkRadioButton"             :ProcedureReturn #PB_GadgetType_Option
          Case "GtkFrame"                   :ProcedureReturn #PB_GadgetType_Frame  
          Case "GtkComboBox"                :ProcedureReturn #PB_GadgetType_ComboBox
          Case "GtkImage"                   :ProcedureReturn #PB_GadgetType_Image
          Case "GtkFixed"                   :ProcedureReturn #PB_GadgetType_Container
          Case "GtkProgressBar"             :ProcedureReturn #PB_GadgetType_ProgressBar
          Case "OsScrollbar"                :ProcedureReturn #PB_GadgetType_ScrollBar
          Case "GtkScrolledWindow"          :ProcedureReturn #PB_GadgetType_ScrollArea
          Case "GtkHScale"                  :ProcedureReturn #PB_GadgetType_TrackBar
          Case "WebKitWebView"              :ProcedureReturn #PB_GadgetType_Web
          Case "GtkCalendar"                :ProcedureReturn #PB_GadgetType_Calendar
          Case "GtkTextView"                :ProcedureReturn #PB_GadgetType_Editor
          Case "GtkComboBoxEntry"           :ProcedureReturn #PB_GadgetType_ExplorerCombo
          Case "GtkHBox"                    :ProcedureReturn #PB_GadgetType_Spin
          Case "GtkNotebook"                :ProcedureReturn #PB_GadgetType_Panel
          Case "GtkVPaned"                  :ProcedureReturn #PB_GadgetType_Splitter
          Case "Scintilla"                  :ProcedureReturn #PB_GadgetType_Scintilla
          Case "GtkDrawingArea"             :ProcedureReturn #PB_GadgetType_Canvas
        EndSelect
      CompilerElseIf  #PB_Compiler_OS = #PB_OS_Windows
        Protected *Memory = ReAllocateMemory (0, 255) 
        GetClassName_ (GadgetID, *Memory, 255) 
        Select PeekS (*Memory) 
          Case "Button"               
            If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) & #BS_CHECKBOX 
              If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1342373891 ;1342308359
                ProcedureReturn #PB_GadgetType_CheckBox
              Else
                ProcedureReturn #PB_GadgetType_Frame
              EndIf
            ElseIf GetWindowLongPtr_( GadgetID, #GWL_STYLE ) & #BS_GROUPBOX
              ProcedureReturn #PB_GadgetType_Option
            Else
              If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1342373888 ;1342242816
                ProcedureReturn #PB_GadgetType_Button
              Else
                ProcedureReturn #PB_GadgetType_ButtonImage
              EndIf
            EndIf
            
          Case "Edit"          
            If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1342374016 ;1342242818
              ProcedureReturn #PB_GadgetType_String
            Else
              ProcedureReturn #PB_GadgetType_Spin
            EndIf
            
          Case "Static"      
            If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1342308480
              ProcedureReturn #PB_GadgetType_Text
            Else
              If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1342177536
                ProcedureReturn #PB_GadgetType_Image
              Else
                ProcedureReturn #PB_GadgetType_HyperLink
              EndIf
            EndIf
            
          Case "SysListView32"                  
            If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1345323333 ;1342242885
              ProcedureReturn #PB_GadgetType_ExplorerList
            Else
              ProcedureReturn #PB_GadgetType_ListIcon
            EndIf
            
          Case "SysTreeView32"   
            If GetWindowLongPtr_( GadgetID, #GWL_STYLE ) = 1345388547 ;1342242823
              ProcedureReturn #PB_GadgetType_ExplorerTree
            Else
              ProcedureReturn #PB_GadgetType_Tree
            EndIf
            
          Case "ListBox"                        :ProcedureReturn #PB_GadgetType_ListView      
          Case "ComboBox"                       :ProcedureReturn #PB_GadgetType_ComboBox
          Case "PureContainer"                  :ProcedureReturn #PB_GadgetType_Container
          Case "SysIPAddress32"                 :ProcedureReturn #PB_GadgetType_IPAddress           
          Case "msctls_progress32"              :ProcedureReturn #PB_GadgetType_ProgressBar
          Case "ScrollBar"                      :ProcedureReturn #PB_GadgetType_ScrollBar
          Case "PureScrollArea"                 :ProcedureReturn #PB_GadgetType_ScrollArea
          Case "msctls_trackbar32"              :ProcedureReturn #PB_GadgetType_TrackBar
          Case "PureWeb"                        :ProcedureReturn #PB_GadgetType_Web
          Case "SysMonthCal32"                  :ProcedureReturn #PB_GadgetType_Calendar
          Case "SysDateTimePick32"              :ProcedureReturn #PB_GadgetType_Date            
          Case "RichEdit20W"                    :ProcedureReturn #PB_GadgetType_Editor
          Case "ComboBoxEx32"                   :ProcedureReturn #PB_GadgetType_ExplorerCombo
          Case "SysTabControl32"                :ProcedureReturn #PB_GadgetType_Panel
          Case "PureSplitter"                   :ProcedureReturn #PB_GadgetType_Splitter
          Case "MDIClient"                      :ProcedureReturn #PB_GadgetType_MDI
          Case "Scintilla"                      :ProcedureReturn #PB_GadgetType_Scintilla
          Case "msctls_hotkey32"                :ProcedureReturn #PB_GadgetType_Shortcut            
          Case "PureCanvas"                     :ProcedureReturn #PB_GadgetType_Canvas
        EndSelect
      EndIf
      ProcedureReturn #False
    CompilerEndIf
  EndProcedure
  
  CompilerIf #PB_Compiler_IsMainFile
    #Version =1
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86 : #Core="x86" : CompilerEndIf
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : #Core="x64" : CompilerEndIf
    
    OpenWindow(1, 0, 0, 995, 455, #Core+" "+1, #PB_Window_Invisible | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
    ButtonGadget(1, 5, 5, 160,70, "ButtonGadget1" )
    StringGadget(2, 5, 80, 160,70, "StringGadget2")
    TextGadget(3, 5, 155, 160,70, "TextGadget3" )
    CheckBoxGadget(4, 5, 230, 160,70, "CheckBoxGadget4" )
    OptionGadget(5, 5, 305, 160,70, "OptionGadget5" )
    ListViewGadget(6, 5, 380, 160,70 )
    
    FrameGadget(7, 170, 5, 160,70, "FrameGadget7" )
    ComboBoxGadget(8, 170, 80, 160,70 )
    ImageGadget(9, 170, 155, 160,70,0,#PB_Image_Border )
    HyperLinkGadget(10, 170, 230, 160,70,"HyperLinkGadget10",0 )
    ContainerGadget(11, 170, 305, 160,70,#PB_Container_Single ) :CloseGadgetList()
    ListIconGadget(12, 170, 380, 160,70,"ListIconGadget12",60 )
    
    IPAddressGadget(13, 335, 5, 160,70 )
    ProgressBarGadget(14, 335, 80, 160,70,0,0 )
    ScrollBarGadget(15, 335, 155, 160,70,0,0,0 )
    ScrollAreaGadget(16, 335, 230, 160,70,0,0,0,#PB_ScrollArea_Single ) :CloseGadgetList()
    TrackBarGadget(17, 335, 305, 160,70,0,0 )
    WebGadget(18, 335, 380, 160,70,"http://www.purebasic.fr/english/" )
    
    ButtonImageGadget(19, 500, 5, 160,70,0 )
    CalendarGadget(20, 500, 80, 160,70 )
    DateGadget(21, 500, 155, 160,70 )
    EditorGadget(22, 500, 230, 160,70 )
    ExplorerListGadget(23, 500, 305, 160,70,"" )
    ExplorerTreeGadget(24, 500, 380, 160,70,"" )
    
    ExplorerComboGadget(25, 665, 5, 160,70,"" )
    SpinGadget(26, 665, 80, 160,70,0,0 )
    TreeGadget(27, 665, 155, 160,70 )
    PanelGadget(28, 665, 230, 160,70 ) :CloseGadgetList()
    
    ButtonGadget(291, 0, 0, 0,20, "ButtonGadget" )
    StringGadget(292, 0, 0, 0,20, "StringGadget")
    SplitterGadget(29, 665, 305, 160,70,292,291 ) 
    ;ResizeGadget(292, #PB_Ignore, #PB_Ignore, #PB_Ignore, 20)
    ;MDIGadget(30, 665, 380, 160,70,1,1 )
    
    InitScintilla()
    ScintillaGadget(31, 830, 5, 160,70,0 )
    ShortcutGadget(32, 830, 80, 160,70 ,-1)
    CanvasGadget(33, 830, 155, 160,70 )
    
    HideWindow(1,0)
    
    Define Gadget
    
    PB_Object_EnumerateStart(PB_Gadget_Objects)
    While PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget) 
      Debug ""+GadgetIDType(GadgetID(Gadget)) +" "+ GadgetName(GadgetType((Gadget)))
    Wend
    PB_Object_EnumerateAbort(PB_Gadget_Objects)
    
    Repeat
      Event = WaitWindowEvent()
    Until Event= #PB_Event_CloseWindow
  CompilerEndIf 
  
gerd
User
User
Posts: 94
Joined: Tue Feb 23, 2010 7:50 pm
Location: Germany

Re: GadgetIDType

Post by gerd »

Hi mestnyi,
tried your code and encountered 2 problems.

1. EndIf in line 208 I had to move to line 210, after "CompilerEndIf"
2. line 32: ' Debug "GtkButton" + PeekS( gtk_widget_get_name_( *style\styles\data), -1, #PB_UTF8 )' I had to comment out, because it caused an error (specified address is null).

After that I could run it.

openSuse 13.1, x86, PB 5.31

greetings
gerd

oh and merry christmas
Post Reply