Page 1 of 1

Fresh perspective on this problem!

Posted: Thu Aug 07, 2003 3:45 am
by Karbon
Ok ok. Fresh perspective time. I've been looking at this for a while and just don't see the logic problem.

Events in #Window_main are captured and processed just fine, in #Window_quote (and all others done just like this), arent..

Can someone else see a logic error? It compiles fine. Note this is just a snip from the whole thing.

Any help is *greatly* appreciated.

Code: Select all

    MyEventID = WaitWindowEvent()
    
    MyEventWindow = EventWindowID()
    
    Select MyEventWindow 
      
      ;;;;;;;;;;;;;;;;;;;;;;;
      ;-Main
      ; Main Window Code
      ;
      ;;;;;;;;;;;;;;;;;;;;;;;
      
      Case #Window_main
        
        Select MyEventID
          
          Case #PB_Event_CloseWindow
            
              quitmain=1
              
          Case #PB_Event_Menu
            Select EventMenuID()
              Case #MenuBar_main_SubPref
            EndSelect
            
          Case #PB_Event_Gadget
            
            Select EventGadgetID()
              Case #Gadget_main_lst_c_search_results
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_lst_p_search_results
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_tree_p_category
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_lst_q_search_results
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_lst_q_line_items
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_lst_i_search_results
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
                
              Case #Gadget_main_lst_i_line_items
                
                Select EventType()
                  
                  Case #PB_EventType_LeftDoubleClick
                    
                  Case #PB_EventType_RightDoubleClick
                    
                  Case #PB_EventType_RightClick
                    
                  Default
                    
                EndSelect
                
              Case #Gadget_main_btn_p_search
                
              Case #Gadget_main_btn_p_clear
                
              Case #Gadget_main_btn_p_new_prod
                
                Window_product()
                
              Case #Gadget_main_btn_c_new_cust
                
                Window_customer()
                Window_quote()
                
              Case #Gadget_main_lst_v_search_results
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_lst_po_results
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                EndSelect
              Case #Gadget_main_lst_po_line_items
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                  Case #PB_EventType_RightDoubleClick
                  Case #PB_EventType_RightClick
                  Default
                    
                EndSelect
                
            EndSelect
            
            ;;;;;;;;;;;;;;;;;;;;;;;
            ;-Quote
            ; Quote Window Code
            ;
            ;;;;;;;;;;;;;;;;;;;;;;;
            
          Case #Window_quote
            
            Select MyEventID
              Case #PB_Event_CloseWindow
                
                Debug "quote"
                
                HideWindow(#Window_quote,1)
            
            EndSelect
          
        EndSelect

Posted: Thu Aug 07, 2003 6:07 am
by Paul
Is this all the code for your event loop?

If so, you are short 1 EndSelect.
(for every Select there must be an EndSelect)

Of course there is no way to test if this will correct your problem since the rest of the code is missing ;)

Posted: Thu Aug 07, 2003 11:08 am
by GedB
Karbon,

Pauls right.

If you tally up your select-endselect pairs you will see that Case #Window_quote is actually within the Case #PB_Event_Gadget block, and not the correct Select MyEventWindow.

Close the Case #PB_Event_Gadget block correctly and all should be well.

Posted: Thu Aug 07, 2003 4:25 pm
by Karbon
Yea, I didn't paste the whole thing because there is about a thousand or more gadgets..

The funny thing is I walked in this morning, sat down, changed one line of code and it worked perfectly. I did get my end selects all screwed up. Looking at that yesterday made me cross eyed! Gotta love it!

Thanks fellas! :-)

Posted: Thu Aug 07, 2003 5:21 pm
by fsw
Karbon wrote:Yea, I didn't paste the whole thing because there is about a thousand or more gadgets..
Thanks fellas! :-)
Hmm, I suppose if you have thousands of Gadgets your Event Loop is really messy...

Why not use an event driven approach for your programs?
It's much clearer.

Look at :
viewtopic.php?t=6969
than you get what I mean.

Right now I'm improving this library as a users request, and since yesterday I have it working for all events provided by PureBasic.

BTW my event loop (with the newest version) looks like:

Code: Select all

Repeat
  Event.l = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Menu
      CallEventFunction(EventMenuID())

    Case #PB_Event_Gadget
      If EventType() = #PB_EventType_LeftClick Or EventType() = #PB_EventType_RightClick
        
        If AdvancedEvent(EventGadgetID(),EventType())
        
          Repeat : WindowEvent() : Until CheckAdvancedEvent(EventType())
           
          If EventType() = #PB_EventType_LeftDoubleClick
            CallEventFunction(EventGadgetID(),#PB_EventType_LeftDoubleClick)
          ElseIf EventType() = #PB_EventType_RightDoubleClick
            CallEventFunction(EventGadgetID(),#PB_EventType_RightDoubleClick)
          Else
            CallEventFunction(EventGadgetID())
          EndIf

        Else
          CallEventFunction(EventGadgetID(),EventType())   
        EndIf

      Else
        CallEventFunction(EventGadgetID(),EventType())
      EndIf
      
    Case #PB_Event_CloseWindow
      If EventWindowID() > #MainWindow
        CloseWindow(EventWindowID())
      EndIf

  EndSelect

Until Event = #PB_Event_CloseWindow And EventWindowID() = #MainWindow


and it doesn't matter how many Gadgets you have (millions :wink: ).
The Event Loop will stay the same - that's the nice thing about it.

Posted: Thu Aug 07, 2003 5:34 pm
by Karbon
I've actually been thinking about that, fsw. This event loop is a great big mess for sure.. I'll keep it in mind! Thanks!