Esempio n. 1
0
 def __init__(self, html, embed, view, force, cache):
     BaseFrame.__init__(self,
                        None,
                        wx.ID_ANY,
                        lang.getstr("vrml_to_x3d_converter"),
                        style=wx.DEFAULT_FRAME_STYLE
                        & ~(wx.MAXIMIZE_BOX | wx.RESIZE_BORDER),
                        name="vrml2x3dframe")
     self.SetIcons(
         config.get_icon_bundle([256, 48, 32, 16],
                                appname + "-VRML-to-X3D-converter"))
     self.Bind(wx.EVT_CLOSE, self.OnClose)
     self.cache = cache
     self.embed = embed
     self.force = force
     self.html = html
     self.worker = Worker(self)
     sizer = wx.BoxSizer(wx.HORIZONTAL)
     self.SetSizer(sizer)
     panel = wx.Panel(self)
     sizer.Add(panel)
     panelsizer = wx.BoxSizer(wx.HORIZONTAL)
     panel.SetSizer(panelsizer)
     self.btn = BitmapButton(panel,
                             wx.ID_ANY,
                             config.geticon(256, "3d-primitives"),
                             style=wx.NO_BORDER)
     self.btn.SetToolTipString(lang.getstr("file.select"))
     self.btn.Bind(
         wx.EVT_BUTTON,
         lambda event: vrmlfile2x3dfile(None,
                                        html=html,
                                        embed=embed,
                                        view=view,
                                        force=force,
                                        cache=cache,
                                        worker=self.worker))
     self.droptarget = FileDrop(self)
     vrml_drop_handler = lambda vrmlpath: vrmlfile2x3dfile(vrmlpath,
                                                           html=html,
                                                           embed=embed,
                                                           view=view,
                                                           force=force,
                                                           cache=cache,
                                                           worker=self.
                                                           worker)
     self.droptarget.drophandlers = {
         ".vrml": vrml_drop_handler,
         ".vrml.gz": vrml_drop_handler,
         ".wrl": vrml_drop_handler,
         ".wrl.gz": vrml_drop_handler,
         ".wrz": vrml_drop_handler
     }
     self.btn.SetDropTarget(self.droptarget)
     panelsizer.Add(self.btn, flag=wx.ALL, border=12)
     self.Fit()
     self.SetMinSize(self.GetSize())
     self.SetMaxSize(self.GetSize())
 def enable_btns(self, enable=True, enable_measure_button=False):
     self.is_measuring = not enable and enable_measure_button
     self.back_btn.Enable(enable and self.index > 0)
     self.next_btn.Enable(enable and self.index < self.index_max)
     self.measure_btn._bitmap = geticon(10, {
         True: "play",
         False: "pause"
     }.get(enable))
     self.measure_btn.Enable(enable or enable_measure_button)
     self.measure_btn.SetDefault()
     if self.measure_btn.Enabled and not isinstance(
             self.FindFocus(), (wx.Control, CustomGrid)):
         self.measure_btn.SetFocus()
Esempio n. 3
0
 def measure_darken_background_ctrl_handler(self, event):
     if self.measure_darken_background_cb.GetValue() and \
        getcfg("measure.darken_background.show_warning"):
         dlg = ConfirmDialog(self,
                             msg=lang.getstr("measure.darken_background."
                                             "warning"),
                             ok=lang.getstr("ok"),
                             cancel=lang.getstr("cancel"),
                             bitmap=geticon(32, "dialog-warning"))
         chk = wx.CheckBox(dlg, -1, lang.getstr("dialog.do_not_show_again"))
         dlg.Bind(wx.EVT_CHECKBOX,
                  self.measure_darken_background_warning_handler,
                  id=chk.GetId())
         dlg.sizer3.Add(chk, flag=wx.TOP | wx.ALIGN_LEFT, border=12)
         dlg.sizer0.SetSizeHints(dlg)
         dlg.sizer0.Layout()
         rslt = dlg.ShowModal()
         if rslt == wx.ID_CANCEL:
             self.measure_darken_background_cb.SetValue(False)
     setcfg("measure.darken_background",
            int(self.measure_darken_background_cb.GetValue()))
 def get_sound_on_off_btn_bitmap(self):
     if getcfg("measurement.play_sound"):
         bitmap = geticon(16, "sound_volume_full")
     else:
         bitmap = geticon(16, "sound_off")
     return bitmap
    def __init__(self,
                 parent=None,
                 handler=None,
                 keyhandler=None,
                 start_timer=True):
        BaseFrame.__init__(self,
                           parent,
                           wx.ID_ANY,
                           lang.getstr("measurement.untethered"),
                           style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
                           name="untetheredframe")
        self.SetIcons(get_icon_bundle([256, 48, 32, 16], appname))
        self.sizer = wx.FlexGridSizer(2, 1, 0, 0)
        self.sizer.AddGrowableCol(0)
        self.sizer.AddGrowableRow(0)
        self.sizer.AddGrowableRow(1)
        self.panel = wx_Panel(self)
        self.SetSizer(self.sizer)
        self.sizer.Add(self.panel, 1, wx.EXPAND)
        self.panel.SetBackgroundColour(BGCOLOUR)
        panelsizer = wx.FlexGridSizer(3, 2, 8, 8)
        panelsizer.AddGrowableCol(0)
        panelsizer.AddGrowableCol(1)
        panelsizer.AddGrowableRow(1)
        self.panel.SetSizer(panelsizer)
        self.label_RGB = wx.StaticText(self.panel, wx.ID_ANY, " ")
        self.label_RGB.SetForegroundColour(FGCOLOUR)
        panelsizer.Add(self.label_RGB,
                       0,
                       wx.TOP | wx.LEFT | wx.EXPAND,
                       border=8)
        self.label_XYZ = wx.StaticText(self.panel, wx.ID_ANY, " ")
        self.label_XYZ.SetForegroundColour(FGCOLOUR)
        panelsizer.Add(self.label_XYZ,
                       0,
                       wx.TOP | wx.RIGHT | wx.EXPAND,
                       border=8)
        if sys.platform == "darwin":
            style = wx.BORDER_THEME
        else:
            style = wx.BORDER_SIMPLE
        self.panel_RGB = BitmapBackgroundPanel(self.panel,
                                               size=(256, 256),
                                               style=style)
        self.panel_RGB.scalebitmap = (True, True)
        self.panel_RGB.SetBitmap(
            getbitmap("theme/checkerboard-32x32x5-333-444"))
        panelsizer.Add(self.panel_RGB, 1, wx.LEFT | wx.EXPAND, border=8)
        self.panel_XYZ = BitmapBackgroundPanel(self.panel,
                                               size=(256, 256),
                                               style=style)
        self.panel_XYZ.scalebitmap = (True, True)
        self.panel_XYZ.SetBitmap(
            getbitmap("theme/checkerboard-32x32x5-333-444"))
        panelsizer.Add(self.panel_XYZ, 1, wx.RIGHT | wx.EXPAND, border=8)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        self.back_btn = FlatShadedButton(self.panel,
                                         bitmap=geticon(10, "back"),
                                         label="",
                                         fgcolour=FGCOLOUR)
        self.back_btn.Bind(wx.EVT_BUTTON, self.back_btn_handler)
        sizer.Add(self.back_btn, 0, wx.LEFT | wx.RIGHT, border=8)
        self.label_index = wx.StaticText(self.panel, wx.ID_ANY, " ")
        self.label_index.SetForegroundColour(FGCOLOUR)
        sizer.Add(self.label_index, 0, wx.ALIGN_CENTER_VERTICAL)
        self.next_btn = FlatShadedButton(self.panel,
                                         bitmap=geticon(10, "play"),
                                         label="",
                                         fgcolour=FGCOLOUR)
        self.next_btn.Bind(wx.EVT_BUTTON, self.next_btn_handler)
        sizer.Add(self.next_btn, 0, wx.LEFT, border=8)
        sizer.Add((12, 1), 1)
        self.measure_auto_cb = CustomCheckBox(self.panel, wx.ID_ANY,
                                              lang.getstr("auto"))
        self.measure_auto_cb.SetForegroundColour(FGCOLOUR)
        self.measure_auto_cb.Bind(wx.EVT_CHECKBOX,
                                  self.measure_auto_ctrl_handler)
        sizer.Add(self.measure_auto_cb, 0,
                  wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
        panelsizer.Add(sizer, 0, wx.BOTTOM | wx.EXPAND, border=8)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        self.measure_btn = FlatShadedButton(self.panel,
                                            bitmap=geticon(10, "play"),
                                            label=lang.getstr("measure"),
                                            fgcolour=FGCOLOUR)
        self.measure_btn.Bind(wx.EVT_BUTTON, self.measure_btn_handler)
        sizer.Add(self.measure_btn, 0, wx.RIGHT, border=6)
        # Sound when measuring
        # Needs to be stereo!
        self.measurement_sound = audio.Sound(get_data_path("beep.wav"))
        self.commit_sound = audio.Sound(get_data_path("camera_shutter.wav"))
        bitmap = self.get_sound_on_off_btn_bitmap()
        self.sound_on_off_btn = FlatShadedButton(self.panel,
                                                 bitmap=bitmap,
                                                 fgcolour=FGCOLOUR)
        self.sound_on_off_btn.SetToolTipString(
            lang.getstr("measurement.play_sound"))
        self.sound_on_off_btn.Bind(wx.EVT_BUTTON,
                                   self.measurement_play_sound_handler)
        sizer.Add(self.sound_on_off_btn, 0)
        sizer.Add((12, 1), 1)
        self.finish_btn = FlatShadedButton(self.panel,
                                           label=lang.getstr("finish"),
                                           fgcolour=FGCOLOUR)
        self.finish_btn.Bind(wx.EVT_BUTTON, self.finish_btn_handler)
        sizer.Add(self.finish_btn, 0, wx.RIGHT, border=8)
        panelsizer.Add(sizer, 0, wx.BOTTOM | wx.EXPAND, border=8)

        self.grid = CustomGrid(self, -1, size=(536, 256))
        self.grid.DisableDragColSize()
        self.grid.DisableDragRowSize()
        self.grid.SetScrollRate(0, 5)
        self.grid.SetCellHighlightROPenWidth(0)
        self.grid.SetColLabelSize(self.grid.GetDefaultRowSize())
        self.grid.SetDefaultCellAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)
        self.grid.SetRowLabelAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
        self.grid.draw_horizontal_grid_lines = False
        self.grid.draw_vertical_grid_lines = False
        self.grid.style = ""
        self.grid.CreateGrid(0, 9)
        self.grid.SetRowLabelSize(62)
        for i in range(9):
            if i in (3, 4):
                size = self.grid.GetDefaultRowSize()
                if i == 4:
                    attr = wx.grid.GridCellAttr()
                    attr.SetBackgroundColour(wx.Colour(0, 0, 0, 0))
                    self.grid.SetColAttr(i, attr)
            else:
                size = 62
            self.grid.SetColSize(i, size)
        for i, label in enumerate(
            ["R", "G", "B", "", "", "L*", "a*", "b*", ""]):
            self.grid.SetColLabelValue(i, label)
        self.grid.SetCellHighlightPenWidth(0)
        self.grid.SetDefaultCellBackgroundColour(
            self.grid.GetLabelBackgroundColour())
        font = self.grid.GetDefaultCellFont()
        if font.PointSize > 11:
            font.PointSize = 11
            self.grid.SetDefaultCellFont(font)
        self.grid.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid.EnableEditing(False)
        self.grid.EnableGridLines(False)
        self.grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK,
                       self.grid_left_click_handler)
        self.grid.Bind(wx.grid.EVT_GRID_SELECT_CELL,
                       self.grid_left_click_handler)
        self.sizer.Add(self.grid, 1, wx.EXPAND)

        self.Fit()
        self.SetMinSize(self.GetSize())

        self.keyhandler = keyhandler
        self.id_to_keycode = {}
        if sys.platform == "darwin":
            # Use an accelerator table for tab, space, 0-9, A-Z, numpad,
            # navigation keys and processing keys
            keycodes = [wx.WXK_TAB, wx.WXK_SPACE]
            keycodes.extend(list(range(ord("0"), ord("9"))))
            keycodes.extend(list(range(ord("A"), ord("Z"))))
            keycodes.extend(numpad_keycodes)
            keycodes.extend(nav_keycodes)
            keycodes.extend(processing_keycodes)
            for keycode in keycodes:
                self.id_to_keycode[wx.Window.NewControlId()] = keycode
            accels = []
            for id, keycode in self.id_to_keycode.items():
                self.Bind(wx.EVT_MENU, self.key_handler, id=id)
                accels.append((wx.ACCEL_NORMAL, keycode, id))
                if keycode == wx.WXK_TAB:
                    accels.append((wx.ACCEL_SHIFT, keycode, id))
            self.SetAcceleratorTable(wx.AcceleratorTable(accels))
        else:
            self.Bind(wx.EVT_CHAR_HOOK, self.key_handler)

        self.Bind(wx.EVT_KEY_DOWN, self.key_handler)

        # Event handlers
        self.Bind(wx.EVT_CLOSE, self.OnClose, self)
        self.Bind(wx.EVT_MOVE, self.OnMove, self)
        self.Bind(wx.EVT_SIZE, self.OnResize, self)
        self.timer = wx.Timer(self)
        if handler:
            self.Bind(wx.EVT_TIMER, handler, self.timer)
        self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy, self)

        # Final initialization steps
        for child in self.GetAllChildren():
            if (sys.platform == "win32" and sys.getwindowsversion() >= (6, )
                    and isinstance(child, wx.Panel)):
                # No need to enable double buffering under Linux and Mac OS X.
                # Under Windows, enabling double buffering on the panel seems
                # to work best to reduce flicker.
                child.SetDoubleBuffered(True)
        self.logger = get_file_logger("untethered")
        self._setup()

        self.Show()

        if start_timer:
            self.start_timer()
Esempio n. 6
0
 def info_handler(self, event):
     InfoDialog(self,
                msg=lang.getstr("measureframe.info"),
                ok=lang.getstr("ok"),
                bitmap=geticon(32, "dialog-information"),
                log=False)
Esempio n. 7
0
    def __init__(self, parent=None, id=-1):
        style = wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
        if (os.getenv("XDG_SESSION_TYPE") != "wayland"
                and getcfg("patterngenerator.use_pattern_window")):
            style |= wx.STAY_ON_TOP
        InvincibleFrame.__init__(self,
                                 parent,
                                 id,
                                 lang.getstr("measureframe.title"),
                                 style=style,
                                 name="measureframe")
        self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname))
        self.Bind(wx.EVT_CLOSE, self.close_handler, self)
        if os.getenv("XDG_SESSION_TYPE") != "wayland":
            self.Bind(wx.EVT_MOVE, self.move_handler, self)
        self.Bind(wx.EVT_SHOW, self.show_handler)
        self.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
        self.Bind(wx.EVT_SET_FOCUS, self.focus_handler)
        self.panel = BitmapBackgroundPanel(self)
        self.panel.scalebitmap = (False, False)

        if os.getenv("XDG_SESSION_TYPE") == "wayland":
            self.sizer = wx.FlexGridSizer(3, 1, 0, 0)
            self.sizer.AddGrowableCol(0)
            self.sizer.AddGrowableRow(1)
        else:
            self.sizer = wx.GridSizer(3, 1, 0, 0)
        self.panel.SetSizer(self.sizer)

        self.hsizer = wx.BoxSizer(wx.HORIZONTAL)
        self.sizer.Add(self.hsizer,
                       flag=wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_TOP)

        self.zoommaxbutton = BitmapButton(self.panel,
                                          -1,
                                          geticon(16, "zoom-best-fit"),
                                          style=wx.NO_BORDER,
                                          name="zoommaxbutton")
        self.zoommaxbutton.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
        self.Bind(wx.EVT_BUTTON, self.zoommax_handler, self.zoommaxbutton)
        self.hsizer.Add(self.zoommaxbutton,
                        flag=wx.ALIGN_CENTER | wx.LEFT | wx.TOP | wx.BOTTOM,
                        border=10)
        self.zoommaxbutton.SetToolTipString(
            lang.getstr("measureframe.zoommax"))

        self.hsizer.Add((8, 0))

        self.zoominbutton = BitmapButton(self.panel,
                                         -1,
                                         geticon(16, "zoom-in"),
                                         style=wx.NO_BORDER,
                                         name="zoominbutton")
        self.zoominbutton.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
        self.Bind(wx.EVT_BUTTON, self.zoomin_handler, self.zoominbutton)
        self.hsizer.Add(self.zoominbutton,
                        flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM,
                        border=10)
        self.zoominbutton.SetToolTipString(lang.getstr("measureframe.zoomin"))

        self.hsizer.Add((8, 0))

        self.zoomnormalbutton = BitmapButton(self.panel,
                                             -1,
                                             geticon(16, "zoom-original"),
                                             style=wx.NO_BORDER,
                                             name="zoomnormalbutton")
        self.zoomnormalbutton.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
        self.Bind(wx.EVT_BUTTON, self.zoomnormal_handler,
                  self.zoomnormalbutton)
        self.hsizer.Add(self.zoomnormalbutton,
                        flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM,
                        border=10)
        self.zoomnormalbutton.SetToolTipString(
            lang.getstr("measureframe."
                        "zoomnormal"))

        self.hsizer.Add((8, 0))

        self.zoomoutbutton = BitmapButton(self.panel,
                                          -1,
                                          geticon(16, "zoom-out"),
                                          style=wx.NO_BORDER,
                                          name="zoomoutbutton")
        self.zoomoutbutton.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
        self.Bind(wx.EVT_BUTTON, self.zoomout_handler, self.zoomoutbutton)
        self.hsizer.Add(self.zoomoutbutton,
                        flag=wx.ALIGN_CENTER | wx.RIGHT | wx.TOP | wx.BOTTOM,
                        border=10)
        self.zoomoutbutton.SetToolTipString(
            lang.getstr("measureframe.zoomout"))

        if os.getenv("XDG_SESSION_TYPE") != "wayland":
            # No manual centering under Wayland...
            self.centerbutton = BitmapButton(self.panel,
                                             -1,
                                             geticon(16, "window-center"),
                                             style=wx.NO_BORDER,
                                             name="centerbutton")
            self.centerbutton.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
            self.Bind(wx.EVT_BUTTON, self.center_handler, self.centerbutton)
            self.sizer.Add(self.centerbutton,
                           flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT,
                           border=10)
            self.centerbutton.SetToolTipString(
                lang.getstr("measureframe.center"))
        else:
            self.centermsg = wx.StaticText(
                self.panel,
                -1,
                lang.getstr("measureframe.center.manual"),
                style=wx.ALIGN_CENTER_HORIZONTAL)
            self.centermsg.Wrap(self.hsizer.MinSize[0] - 20)
            self.sizer.Add(self.centermsg,
                           flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT,
                           border=10)

        self.vsizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.vsizer,
                       flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL)

        if (os.getenv("XDG_SESSION_TYPE") != "wayland"
                or config.is_virtual_display()):
            self.measure_darken_background_cb = wx.CheckBox(
                self.panel, -1, lang.getstr("measure.darken_background"))
            self.measure_darken_background_cb.SetValue(
                bool(int(getcfg("measure.darken_background"))))
            self.measure_darken_background_cb.Bind(wx.EVT_KILL_FOCUS,
                                                   self.focus_lost_handler)
            self.Bind(wx.EVT_CHECKBOX,
                      self.measure_darken_background_ctrl_handler,
                      id=self.measure_darken_background_cb.GetId())
            self.vsizer.Add(self.measure_darken_background_cb,
                            flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL
                            | wx.LEFT | wx.RIGHT | wx.TOP,
                            border=10)
        else:
            self.vsizer.Add((10, 10))

        self.measurebutton = wx.Button(
            self.panel,
            -1,
            lang.getstr("measureframe.measurebutton"),
            name="measurebutton")
        self.measurebutton.Bind(wx.EVT_KILL_FOCUS, self.focus_lost_handler)
        self.Bind(wx.EVT_BUTTON, self.measure_handler, self.measurebutton)
        self.vsizer.Add(self.measurebutton,
                        flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL
                        | wx.ALL,
                        border=10)
        self.measurebutton.SetMaxFontSize(11)
        self.measurebutton.SetDefault()
        self.last_focused = self.measurebutton

        self.display_no = wx.Display.GetFromWindow(self)
        self.display_rects = get_display_rects()

        self.sizer.SetSizeHints(self)