sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    πŸ›£οΈ Road Profile Builder | Generate roads, curbs and pavements easily Download

    Close webdialogs on File-New/Open

    Scheduled Pinned Locked Moved Developers' Forum
    14 Posts 4 Posters 640 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.
    • P Offline
      Pout
      last edited by

      Is there a way to observe if the user opens a new or existing file so the open webdialogs can be closed?

      1 Reply Last reply Reply Quote 0
      • 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