Results 1 to 9 of 9

Thread: TBGL+ multiple Dialogs?

  1. #1
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,530
    Rep Power
    171

    TBGL+ multiple Dialogs?

    Currently I'm fighting with them Dialogs together with TBGL-Window - that results always in getting stuck.
    Now I'm that far to use TBGL-bound canvas but somehow it won't work as expected. I think it has to do with Dialog Show Modal hDlg, Call dlgCallback - which one has to be "parent-dialog" ?

    I want to create an editor-environment with

    -one (main) window that only shows TBGL-Stuff where the art is done (resizable, keep proportions)

    and a few separate windows(dialogs) to control the whole stuff:

    -one that has just menu (file, edit, view etc.) + toolbuttonbar + statusdisplay (fixed size)
    -another window where user can select drawing tools + tool options (fixed size, floats always on top)
    -a third one that shows a tab-control with a few tabs that contain listview(s), treeview(s), some color-picker etc. (resizable)
    -another window that just shows the currently used texture (resizable) and is not always visible

    but if I use TBGL-in-Dialog-Entity-Skeleton I don't get even one additional window to run
    Last edited by ReneMiner; 28-11-2012 at 19:33.
    I think there are missing some Forum-sections as beta-testing and support

  2. #2
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Rene,

    what you describe is definitely possible - please have a look at the difference between modal and modeless dialogs.


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  3. #3
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,530
    Rep Power
    171
    modeless the windows disappear instantly, modal the program gets stuck, after a couple of hours without any success I'm gonna give up trying. I don't get even the simplest skeleton together and resulting I say:

    "That weird callback-stuff IS NO BASIC LANGUAGE"
    I think there are missing some Forum-sections as beta-testing and support

  4. #4
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Don't give up!

    The code listing in help file for modeless states clearly that you need to pump the modeless windows to keep-em alive.

    "That weird callback stuff" keeps the CPU footprint low and yes, it is present for example in PowerBASIC as well


    Petr

    Quote Originally Posted by ReneMiner View Post
    modeless the windows disappear instantly, modal the program gets stuck, after a couple of hours without any success I'm gonna give up trying. I don't get even the simplest skeleton together and resulting I say:

    "That weird callback-stuff IS NO BASIC LANGUAGE"
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  5. #5
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,530
    Rep Power
    171
    Trying not for hours but for months now. It's the about 20th attempt - still did not give up yet.
    Not that easy without getting a major crisis- probably that hard to get it working or impossible that's why none of you even suggested a solution.
    Until my new PC gets delivered (has NVidia-Card!) I still have some days left, so I try again to find out if I can use thinBasic to create the program I that want.

    I reduced the amount of windows to just 4 at the moment - 2 of them shall be always visible,(Menu+Render-Window), but I can't get more to see than one. I searched help and the shipped examples - found no Pump-Method described anywhere. As said, I tried Modeless, Modal, setup of second window inside or before dlgCallbackMain, in lots of different orders, the only results I get are frustration, rage, system-hang-ups and compiler-crashes.

     
    Uses "UI", "TBGL"
    'Uses "Console"    
    
    ' -- Control-Flags, just for me
                                       
    Const %ME_IsNotDialog  = &H00000000
    Const %ME_ShowAlways   = &H00000001 ' closing this will end program
    Const %ME_ShowModeless = &H00000002
    Const %ME_ShowModal    = &H00000004
    
     ' not a ControlID  
    Const %no_Focus = -1
    
    ' -- ID numbers of controls
     
    Begin ControlID
      %Screen = 1       ' store desktop-info in here
      
      ' - Dialogs 
      %dlg_Main
      %dlg_TBGL
      %dlg_Tools
      %dlg_HelpAbout
      
      ' - Menu on Main-Dialog 
      %men_Main
       
      %men_FileMenu
      %men_FileNew
      %men_FileExit
      
      %men_EditMenu
      %men_EditCopy
      %men_EditCut
      %men_EditPaste
      
      %men_ViewMenu
      %men_ViewTools
      
      %men_HelpMenu
      %men_HelpAbout
     
      ' - other common UI-Controls 
      %status_Main
      %canvas_TBGL 
      
     ' %btn_HelpAboutOK   ' no Help-"About..." window yet
      
      
      %Control_LAST        
     
      ' - internal controls with special treatment
      %tmr_TBGL ' timer applied on TBGL-Dialog
      
      
    End ControlID
    
    ' -- Scene-Entity related ids            
    Begin Const
      ' -- Scene IDs
      %sScene  = 1
     
      ' -- Entity IDs 
      %eCamera = 1
      %eLight  
      %eBox        
    End Const 
    
    ' create a type for common control-properties
    Type tControl
      hndl    As DWord
      
      XPos    As DWord
      YPos    As DWord
      Width   As DWord
      Height  As DWord
      
      Caption   As String
      Visible   As Boolean
      Enabled   As Boolean
      Checked   As Boolean
      
      ME_Flags  As Long
      WS_Flags  As Long
    End Type
                                        
    Dim ctrl(%Control_LAST - 1) As tControl
    
    Dim FocusOnDlg  As DWord  ' store Hndl of the current focussed Dialog
    Dim FocusOnCtrl As DWord  ' and current focussed Control (not yet available)
    
    
    
               
    Function TBMain()  
      
      If Not meets_requirements() Then End 
      
      MENU New Bar To ctrl(%men_Main).hndl
        MENU New Popup To ctrl(%men_FileMenu).hndl
        MENU Add Popup, ctrl(%men_Main).hndl, _
                       ctrl(%men_FileMenu).Caption, _
                       ctrl(%men_FileMenu).hndl, _
                       %MF_ENABLED
          MENU Add String, ctrl(%men_FileMenu).hndl, _
                           ctrl(%men_FileNew).Caption, _
                           %men_FileNew, %MF_ENABLED
          'seperator
          MENU Add String, ctrl(%men_FileMenu).hndl, "-",      0, 0
          
          MENU Add String, ctrl(%men_FileMenu).hndl, _
                           ctrl(%men_FileExit).Caption, _
                           %men_FileExit, %MF_ENABLED
        MENU New Popup To ctrl(%men_EditMenu).hndl
        MENU Add Popup, ctrl(%men_Main).hndl, _
                        ctrl(%men_EditMenu).Caption, _
                        ctrl(%men_EditMenu).hndl, %MF_ENABLED
          MENU Add String, ctrl(%men_EditMenu).hndl, _
                           ctrl(%men_EditCopy).Caption, _
                           %men_EditCopy, %MF_GRAYED
          MENU Add String, ctrl(%men_EditMenu).hndl, _
                           ctrl(%men_EditCut).Caption, _
                           %men_EditCut, %MF_GRAYED
          MENU Add String, ctrl(%men_EditMenu).hndl, _
                           ctrl(%men_EditPaste).Caption, _
                           %men_EditPaste, %MF_GRAYED
        MENU New Popup To ctrl(%men_ViewMenu).hndl
        MENU Add Popup, ctrl(%men_Main).hndl, _
                       ctrl(%men_ViewMenu).Caption, _
                       ctrl(%men_ViewMenu).hndl, %MF_ENABLED
          MENU Add String, ctrl(%men_ViewMenu).hndl, _
                           ctrl(%men_ViewTools).Caption, _
                           %men_ViewTools, %MF_ENABLED
        MENU New Popup To ctrl(%men_HelpMenu).hndl
        MENU Add Popup, ctrl(%men_Main).hndl, _
                       ctrl(%men_HelpMenu).Caption, _
                       ctrl(%men_HelpMenu).hndl, %MF_ENABLED Or %MF_CHECKED
          MENU Add String, ctrl(%men_HelpMenu).hndl, _
                           ctrl(%men_HelpAbout).Caption, _
                           %men_HelpAbout, %MF_ENABLED
               
      Dialog New Pixels, 0, ctrl(%dlg_Main).Caption, _
              ctrl(%dlg_Main).Xpos, ctrl(%dlg_Main).Ypos, _
              ctrl(%dlg_Main).Width,ctrl(%dlg_Main).Height, _
              ctrl(%dlg_Main).WS_Flags, _
              0 To ctrl(%dlg_Main).hndl
        MENU Attach ctrl(%men_Main).hndl, ctrl(%dlg_Main).hndl
      
        ctrl(%status_Main).hndl = Control Add Statusbar, _
                                  ctrl(%dlg_Main).hndl, _
                                  %status_Main, "", _
                                  0,0,0, 24, %CCS_BOTTOM, _
                                  %WS_EX_STATICEDGE
                                    
        
        Dialog Show Modal ctrl(%dlg_Main).hndl, Call dlgCallbackMain
        
      
        
    End Function      
            
            
    CallBack Function dlgCallbackMain()
      
      Select Case CBMSG
        
        Case %WM_INITDIALOG   
          Dialog New Pixels, ctrl(%dlg_Main).hndl, ctrl(%dlg_TBGL).Caption, _
                             ctrl(%dlg_TBGL).Xpos, ctrl(%dlg_TBGL).Ypos, _
                             ctrl(%dlg_TBGL).Width,ctrl(%dlg_TBGL).Height, _
                             ctrl(%dlg_TBGL).WS_Flags, _
                             0 To ctrl(%dlg_TBGL).hndl
            ctrl(%canvas_TBGL).hndl = Control Add Label, _
                                      ctrl(%dlg_TBGL).hndl, _
                                      %canvas_TBGL, "", _
                                      0, 0, ctrl(%dlg_TBGL).Width, ctrl(%dlg_TBGL).Height
            Control Set Color  ctrl(%dlg_TBGL).hndl, %canvas_TBGL, %BLACK, %BLACK
            Control Set Resize ctrl(%dlg_TBGL).hndl, %canvas_TBGL, 1, 1, 1, 1    
            Dialog Show Modeless ctrl(%dlg_TBGL).hndl, Call dlgCallbackTBGL
    
        Case %WM_SIZE, %WM_SIZING
      
        Case %WM_TIMER
     
        Case %WM_CLOSE 
          End
        Case %WM_COMMAND
          Select Case CBCTL
            
            Case %men_FileExit
            
              End
            
          End Select
          
      End Select
    End Function
    
    CallBack Function dlgCallbackTBGL()
      Static hCtrl As DWord
      
      Select Case CBMSG
        
        Case %WM_INITDIALOG
          Dialog Set Timer CBHNDL, %tmr_TBGL, 16, %NULL
          Control Handle CBHNDL, %canvas_TBGL To hCtrl
          
          ' -- Init OpenGL
          TBGL_BindCanvas(hCtrl)     
          
          ' -- Create scene
          TBGL_SceneCreate(%sScene)
    
          ' -- Create basic entities
          ' -- Create camera to look from 5, 5, 5 to 0, 0, 0 
          TBGL_EntityCreateCamera(%sScene, %eCamera)
            TBGL_EntitySetPos(%sScene, %eCamera, 5, 5, 5)
            TBGL_EntitySetTargetPos(%sScene, %eCamera, 0, 0, 0)  
            
          ' -- Create point light  
          TBGL_EntityCreateLight(%sScene, %eLight)
            TBGL_EntitySetPos(%sScene, %eLight, 15, 10, 5)
    
          ' -- Create something to look at
          TBGL_EntityCreateBox(%sScene, %eBox, 0, 1, 1, 1, 0, 255, 255, 255)
            TBGL_EntitySetPos(%sScene, %eBox, 0, 0, 0)
    
        Case %WM_SIZE, %WM_SIZING
          TBGL_UpdateCanvasProportions(hCtrl)
          RenderMyImage(hCtrl)
    
        Case %WM_TIMER
          RenderMyImage(hCtrl)
    
        Case %WM_CLOSE 
          
      End Select
    End Function
    
    Function RenderMyImage( hCtrl As DWord )
      Static FrameRate As Double
    
      If TBGL_CanvasBound(hCtrl) Then
    
        FrameRate = TBGL_GetFrameRate
    
        TBGL_ClearFrame 
    
          TBGL_SceneRender(%sScene)
          
        TBGL_DrawFrame 
        
      End If  
    End Function
     
    Function meets_requirements() As Boolean
      
      ' check for available desktop-size 
      ' also apply sizes and captions in advance
      ' might be done by an extra sub which loads localized strings later 
     
      TBGL_GetDesktopInfo _
     ( ctrl(%Screen).Width, ctrl(%Screen).Height, ctrl(%Screen).WS_Flags )
      
      Select Case ctrl(%Screen).Width
        Case > 1024
          ctrl(%dlg_TBGL).Width = 1024
        Case > 800
          ctrl(%dlg_TBGL).Width = 800
        Case > 640
          ctrl(%dlg_TBGL).Width = 640  
        Case Else
         ' PrintL "can not run because screen is not wide enough"
         ' Console_WaitKey
          Return FALSE
      End Select
      
      Select Case ctrl(%Screen).Height
        Case > 768
          ctrl(%dlg_TBGL).Height = 768
        Case > 600
          ctrl(%dlg_TBGL).Height = 600
        Case > 480
          ctrl(%dlg_TBGL).Height = 480
        Case Else
          'PrintL "can not run because screen is not high enough"
          'Console_WaitKey
          Return FALSE
      End Select
     
      If ctrl(%Screen).WS_Flags < 16 Then
        'PrintL "can not run because color-depth is too low"
        'Console_WaitKey
        Return FALSE
      EndIf
      
      ctrl(%dlg_Main).XPos = 24
      ctrl(%dlg_Main).YPos = 24
      ctrl(%dlg_Main).Width = 512
      ctrl(%dlg_Main).Height = 56
      ctrl(%dlg_Main).Caption = "Main-Menu"
      ctrl(%dlg_Main).Visible = TRUE
      ctrl(%dlg_Main).ME_Flags = %ME_ShowAlways
      ctrl(%dlg_Main).WS_Flags = %WS_POPUP Or %WS_VISIBLE Or _
                                 %WS_CLIPCHILDREN Or %WS_CAPTION Or _
                                 %WS_SYSMENU Or %WS_MINIMIZEBOX
      
      ctrl(%dlg_TBGL).XPos = -1
      ctrl(%dlg_TBGL).YPos = -1  
      ' width and height are determined above already
      ctrl(%dlg_TBGL).Caption = "Render-Window"
      ctrl(%dlg_TBGL).Visible = TRUE
      ctrl(%dlg_TBGL).ME_Flags = %ME_ShowAlways
      ctrl(%dlg_TBGL).WS_Flags = %WS_VISIBLE Or %WS_CHILD Or _
                                 %DS_CENTER Or %DS_CONTROL
                                         
     
      ctrl(%dlg_Tools).Xpos = 16
      ctrl(%dlg_Tools).Ypos = 128
      ctrl(%dlg_Tools).Width = 64
      ctrl(%dlg_Tools).Height = 192
      ctrl(%dlg_Tools).Caption = "Tools"
      ctrl(%dlg_Tools).Visible = TRUE
      ctrl(%dlg_Tools).ME_Flags = %ME_ShowModeless
      ctrl(%dlg_Tools).WS_Flags = %WS_VISIBLE Or %WS_CHILD Or _
                                  %DS_CONTROL  
                                  
      ctrl(%dlg_HelpAbout).XPos = -1
      ctrl(%dlg_HelpAbout).YPos = -1
      ctrl(%dlg_HelpAbout).Width  = 200
      ctrl(%dlg_HelpAbout).Height = 200
      ctrl(%dlg_HelpAbout).Caption = "About"
      ctrl(%dlg_HelpAbout).Visible = FALSE
      ctrl(%dlg_HelpAbout).ME_Flags = %ME_ShowModal
      ctrl(%dlg_HelpAbout).WS_Flags = %WS_VISIBLE Or %WS_CHILD Or _
                                      %DS_CONTROL  
     
                             
      ctrl(%men_FileMenu).Caption = "&File"
      ctrl(%men_FileMenu).Visible = TRUE
      ctrl(%men_FileMenu).Enabled = TRUE
      ctrl(%men_FileMenu).Checked = FALSE
        ctrl(%men_FileNew).Caption = "&New"
        ctrl(%men_FileNew).Visible = TRUE
        ctrl(%men_FileNew).Enabled = TRUE
        ctrl(%men_FileNew).Checked = FALSE
        ctrl(%men_FileExit).Caption = "&Exit"
        ctrl(%men_FileExit).Visible = TRUE
        ctrl(%men_FileExit).Enabled = TRUE
        ctrl(%men_FileExit).Checked = FALSE
      ctrl(%men_EditMenu).Caption = "&Edit"
      ctrl(%men_EditMenu).Visible = TRUE
      ctrl(%men_EditMenu).Enabled = TRUE
      ctrl(%men_EditMenu).Checked = FALSE
        ctrl(%men_EditCopy).Caption = "&Copy"
        ctrl(%men_EditCopy).Visible = TRUE
        ctrl(%men_EditCopy).Enabled = FALSE
        ctrl(%men_EditCopy).Checked = FALSE
        ctrl(%men_EditCut).Caption = "Cu&t"
        ctrl(%men_EditCut).Visible = TRUE
        ctrl(%men_EditCut).Enabled = FALSE
        ctrl(%men_EditCut).Checked = FALSE
        ctrl(%men_EditPaste).Caption = "&Paste"
        ctrl(%men_EditPaste).Visible = TRUE
        ctrl(%men_EditPaste).Enabled = FALSE
        ctrl(%men_EditPaste).Checked = FALSE
      ctrl(%men_ViewMenu).Caption = "&View"
      ctrl(%men_ViewMenu).Visible = TRUE
      ctrl(%men_ViewMenu).Enabled = TRUE
      ctrl(%men_ViewMenu).Checked = FALSE
        ctrl(%men_ViewTools).Caption = "&Tools"
        ctrl(%men_ViewTools).Visible = TRUE
        ctrl(%men_ViewTools).Enabled = TRUE
        ctrl(%men_ViewTools).Checked = TRUE
      ctrl(%men_HelpMenu).Caption = "&Help"
      ctrl(%men_HelpMenu).Visible = TRUE
      ctrl(%men_HelpMenu).Enabled = TRUE
      ctrl(%men_HelpMenu).Checked = FALSE
        ctrl(%men_HelpAbout).Caption = "&About..."
        ctrl(%men_HelpAbout).Visible = TRUE
        ctrl(%men_HelpAbout).Enabled = TRUE
        ctrl(%men_HelpAbout).Checked = TRUE
              
      Return TRUE
    End Function
    
    I think there are missing some Forum-sections as beta-testing and support

  6. #6
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Hi Rene,

    you are a fighter, I like it
    I will have a look at your code now - in the meantime, which NVIDIA card did you pick?


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  7. #7
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,530
    Rep Power
    171
    [OffTopic]
    its a GForce sixhundredsomething (don't know exactly, guess 680 GT - but forgotten) with 2048 MB DDR3. Should be here by tomorrow or saturday
    [/OffTopic]

    small typo: the %MF_Checked-Switch in line 137 is supposed to be at line 133.
    Last edited by ReneMiner; 07-02-2013 at 20:44.
    I think there are missing some Forum-sections as beta-testing and support

  8. #8
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,128
    Rep Power
    732
    Now I know why the manufacturer name is NVIDIA - now I envy you the 6xx series card

    But good news, I attach code here for you, which shows 2 ThinBASIC classic dialogs and one dialog with TBGL canvas.

    I can recommend to split your code to units - main code (tBasic) + one dialog in each unit (tBasicU) is usually fine. This avoids the code to becoming one long noodle.

    With this approach, the main code might look as simple as this:
    ' 
    ' Script showing multiple dialogs
    '                                
    
    ' -- Include all dialogs
    #INCLUDE "dialog_*.tBasicU"
    
    Function TBMain()
    
      Long  NumberOfDialogsAlive
      
      ' -- Show the dialogs
      DWord hMainWindow   = MainWindow_Show(%HWND_DESKTOP) ' -- Display on top of desktop
      DWord hToolWindow   = ToolWindow_Show(hMainWindow)   ' -- This makes the tool window to be child of MainWindow
      DWord hRenderWindow = RenderWindow_Show(hMainWindow) ' -- This makes the render window to be child of MainWindow
      
      ' -- Rearrange them as you want
      Dialog Set Loc hMainWindow  , 100, 100
      Dialog Set Loc hToolWindow  , 440, 100
      Dialog Set Loc hRenderWindow, 100, 170
      
      ' -- Main pump keeping our dialogs alive
      Do
        
        Dialog DoEvents To NumberOfDialogsAlive
        
      Loop While NumberOfDialogsAlive > 0 ' -- You can change the ending condition to something else, for example main window closed and so on
    
    End Function
    
    In the attachement you will find working example...


    Petr

    P.S. The pumping mechanism actually is mentioned by example in the help for MODELESS
    Attached Files Attached Files
    Last edited by Petr Schreiber; 07-02-2013 at 22:05.
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  9. #9
    thinBasic MVPs
    Join Date
    Oct 2012
    Location
    Germany
    Age
    54
    Posts
    1,530
    Rep Power
    171
    thanx, that helps a lot.
    just little complain about "ToolWindow.tBasicu": lines 51 to 58 should be commented out.
    Splitting it to modules is a great improvement and offers lots of overview
    I think there are missing some Forum-sections as beta-testing and support

Similar Threads

  1. MDI Dialogs
    By steinie in forum UI (User Interface)
    Replies: 3
    Last Post: 27-08-2011, 18:19
  2. 2 openGL dialogs with thinbasic?
    By largo_winch in forum TBGL General
    Replies: 3
    Last Post: 10-05-2011, 23:54
  3. text input ui + dialogs
    By christianssen in forum UI (User Interface)
    Replies: 2
    Last Post: 20-04-2010, 08:30
  4. New in UI module: Dialogs CALLBACKs
    By ErosOlmi in forum thinBasic vaporware
    Replies: 22
    Last Post: 31-07-2008, 04:11
  5. Dialogs, Windows, TBGL and other ugly stuff :)
    By Michael Hartlef in forum thinBasic General
    Replies: 19
    Last Post: 22-03-2007, 05:32

Members who have read this thread: 0

There are no members to list at the moment.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •