sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Close webdialogs on File-New/Open

    Scheduled Pinned Locked Moved Developers' Forum
    14 Posts 4 Posters 594 Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • TIGT Offline
      TIG Moderator
      last edited by

      You shouldn't need an observer if the tool-class calling the dialog [ @dlg] has a deactivate() method which includes @dlg.close if @dlg and @dlg_is_open or equivalent. Exiting the tool then closes the dialog if it has been set up initially and is still 'open'. The instance variable @dlg_is_open can be set true/ false as you open and then close the dialog @dlg.
      If you have closed the dialog in the Tool then later call self.deactivate() etc...
      You should also use it in the onCancel() method too...
      Alternatively the code
      begin @dlg.close rescue end
      does it trapping errors for you in the deactivate() ???
      Of course on a PC opening your dialog so it is 'modal' with '@dlg.show_modal{#what_to_do#}' prevents you even exiting the Tool or the SKP until the dialog is closed itself.

      TIG

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        @tig said:

        You shouldn't need an observer if the tool-class calling the dialog [ @dlg] has a deactivate()

        That's assuming the webdialog is opened by a tool. If it isn't, then it's the AppObserver one has to use: http://code.google.com/apis/sketchup/docs/ourdoc/appobserver.html

        Thomas Thomassen — SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • P Offline
          Pout
          last edited by

          It's like this:
          The webdialog is opened though a button and shows info on the Sketchup model.
          Straightforward, no class used.
          So i think it's the AppObserver i need.
          I have to initiate that at the start of the ruby and just handle the events?

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            @pout said:

            I have to initiate that at the start of the ruby and just handle the events?

            Yup!

            Thomas Thomassen — SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 Reply Last reply Reply Quote 0
            • TIGT Offline
              TIG Moderator
              last edited by

              class MyDialogAppObserver < Sketchup;;AppObserver
                def onNewModel(model)  ### from menu or app
                  begin
                    $myDialogID_12345.close
                  rescue
                  end
                end
                def onOpenModel(model) ### from menu
                  begin
                    $myDialogID_12345.close
                  rescue
                  end
                end
                def onQuit()
                  begin
                    $myDialogID_12345.close
                  rescue
                  end
                end
              end
              ### Attach the observer at kick-off...
              Sketchup.add_observer(MyDialogAppObserver.new)
              
              

              You then need to set a global variable referring to your dialog [ dlg] so the observer can find and close it...
              $myDialogID_12345=dlg

              TIG

              1 Reply Last reply Reply Quote 0
              • thomthomT Offline
                thomthom
                last edited by

                Beware that on OSX you can have multiple model documents open.

                Thomas Thomassen — SketchUp Monkey & Coding addict
                List of my plugins and link to the CookieWare fund

                1 Reply Last reply Reply Quote 0
                • P Offline
                  Pout
                  last edited by

                  Tig, thx for the piece of code!
                  ThomThom, in that case it think it will be necessary to keep the model path in a global variable and use that to check.

                  1 Reply Last reply Reply Quote 0
                  • thomthomT Offline
                    thomthom
                    last edited by

                    And if the user swaps between models while working?
                    Or the user saves the model under a new name?

                    I have a tool where I need to keep track of the various models. I tried using the model object as reference, but it changes when you save teh model etc. I also tried the model.guid - but that also changes at times. At the moment I use a combo of model object and guid to track it.

                    Thomas Thomassen — SketchUp Monkey & Coding addict
                    List of my plugins and link to the CookieWare fund

                    1 Reply Last reply Reply Quote 0
                    • P Offline
                      Pout
                      last edited by

                      sssshtttt ThomThom,

                      you're giving me a headache on a friday afternoon 😆

                      1 Reply Last reply Reply Quote 0
                      • TIGT Offline
                        TIG Moderator
                        last edited by

                        Why not make a simple tool that opens the dialog and then you can have a 'deactivate()' method to close the dialog whenever you move away from that SKP ? - you'd just need to wrap the original 'def' code into an initialize()/activate() instead, inside the new tool's class and call the 'tool' in a slightly different way from a raw 'def' ??
                        Adding convoluted observers and global variables seems to be a lot more complicated...

                        TIG

                        1 Reply Last reply Reply Quote 0
                        • thomthomT Offline
                          thomthom
                          last edited by

                          @tig said:

                          Why not make a simple tool that opens the dialog and then you can have a 'deactivate()' method to close the dialog whenever you move away from that SKP ? - you'd just need to wrap the original 'def' code into an initialize()/activate() instead, inside the new tool's class and call the 'tool' in a slightly different way from a raw 'def' ??
                          Adding convoluted observers and global variables seems to be a lot more complicated...

                          Then you can't use the other native tools.

                          (And I'd use module variables instead of global variables.)

                          Thomas Thomassen — SketchUp Monkey & Coding addict
                          List of my plugins and link to the CookieWare fund

                          1 Reply Last reply Reply Quote 0
                          • thomthomT Offline
                            thomthom
                            last edited by

                            @pout said:

                            sssshtttt ThomThom,

                            you're giving me a headache on a friday afternoon 😆

                            👿 you're welcome. 😄
                            The whole multiple window scenario under OSX is a bit of a pain - I don't feel it has proper support in the API for managing them.

                            Thomas Thomassen — SketchUp Monkey & Coding addict
                            List of my plugins and link to the CookieWare fund

                            1 Reply Last reply Reply Quote 0
                            • Dan RathbunD Offline
                              Dan Rathbun
                              last edited by

                              Agreed.

                              I logged several Feature Requests for MDI support (new methods) in the API, including a Models collection.

                              I'm not here much anymore.

                              1 Reply Last reply Reply Quote 0
                              • 1 / 1
                              • First post
                                Last post
                              Buy SketchPlus
                              Buy SUbD
                              Buy WrapR
                              Buy eBook
                              Buy Modelur
                              Buy Vertex Tools
                              Buy SketchCuisine
                              Buy FormFonts

                              Advertisement