Пример #1
0
 def OnLabelLeftDown(self, object, event):
     if event.ShiftDown():
         self.waiting_until_left_up = cad.ShiftSelect(
             object, event.ControlDown())
     else:
         # shift not down
         if event.ControlDown():
             if cad.ObjectMarked(object):
                 cad.Unselect(object, True)
             else:
                 cad.Select(object, True)
         else:
             if cad.ObjectMarked(object):
                 self.waiting_until_left_up = True
                 cad.Select(object, True)
             else:
                 cad.ClearSelection(False)
                 cad.Select(object, True)
Пример #2
0
 def OnLeftClick(self, event):
     # select one object
     objects = cad.ObjectsUnderWindow(cad.IRect(self.select_mode.button_down_point.x, self.select_mode.button_down_point.y), False, True, self.select_mode.filter, True)
     if len(objects) > 0:
         object = objects[0]
         
         if event.controlDown:
             if cad.ObjectMarked(object):
                 cad.Unselect(object, True)
             else:
                 cad.Select(object)
         else:
             cad.ClearSelection(True)
             cad.Select(object)
     else:
         cad.ClearSelection(True)
Пример #3
0
 def OnGlCommands(self, select, marked, no_color):
     if not no_color: cad.DrawColor(cad.Color(0, 0, 0))
     cad.DrawSymbol(3 if marked or cad.ObjectMarked(self) else 0,
                    self.pos.x, self.pos.y, 0.0)
     if not no_color: cad.DrawColor(cad.Color(0, 255, 0))
     cad.DrawSymbol(1, self.pos.x, self.pos.y, 0.0)
Пример #4
0
    def RenderObject(self, expanded, prev_object, prev_object_expanded, object,
                     next_object, level):
        save_x = self.xpos

        self.RenderBranchIcons(object, next_object, expanded, level)

        label_start_x = self.xpos

        # find icon info
        if not self.render_just_for_calculation:
            self.dc.DrawBitmap(
                wx.Bitmap(object.GetIconFilePath(), wx.BITMAP_TYPE_ANY),
                self.xpos, self.ypos)
            self.rendered_objects.append(object)

        self.xpos += 16

        str = object.GetTitle()

        if not self.render_just_for_calculation:
            if self.render_labels and cad.ObjectMarked(object):
                self.dc.SetBackgroundMode(wx.SOLID)
                self.dc.SetTextBackground(wx.BLUE)
                self.dc.SetTextForeground(wx.WHITE)
            else:
                self.dc.SetBackgroundMode(wx.TRANSPARENT)
                self.dc.SetTextForeground(wx.BLACK)
            self.dc.DrawText(str, self.xpos, self.ypos)

        text_width = 0
        if self.render_just_for_calculation or not self.render_labels:
            # just make a guess, we don't have a valid m_dc
            text_width = 10 * len(str)
        else:
            text_size = self.GetTextExtent(str)
            text_width = text_size.GetWidth()

        label_end_x = self.xpos + 8 + text_width
        if not self.render_just_for_calculation and self.render_labels:
            self.AddLabelButton(expanded, prev_object, prev_object_expanded,
                                object, next_object, label_start_x,
                                label_end_x)

        if label_end_x > self.max_xpos: self.max_xpos = label_end_x

        self.ypos += 18

        end_object = (next_object == None)
        self.end_child_list.append(end_object)

        self.xpos = save_x

        if expanded:
            prev_child = None
            prev_child_expanded = False
            child = object.GetFirstChild()

            while child != None:
                next_child = object.GetNextChild()
                expanded = self.IsExpanded(child)
                self.RenderObject(expanded, prev_child, prev_child_expanded,
                                  child, next_child, level + 1)
                prev_child = child
                prev_child_expanded = expanded
                child = next_child

        self.end_child_list.pop()
Пример #5
0
 def OnLabelRightDown(self, object, event):
     if not cad.ObjectMarked(object):
         cad.ClearSelection(False)
         cad.Select(object, True)
Пример #6
0
    def OnMouse(self, event):
        # to do? if(wxGetApp().m_property_grid_validation)return;
        if event.Entering():
            self.SetFocus()  # so middle wheel works

        if event.LeftDown():
            button = self.HitTest(event.GetPosition())

            if button:
                if button.type == ButtonTypePlus or button.type == ButtonTypeMinus:
                    self.SetExpanded(button.obj, button.type == ButtonTypePlus)
                    self.SetVirtualSize(self.GetRenderSize())
                    self.Refresh()
                else:
                    self.OnLabelLeftDown(button.obj, event)
                    self.clicked_object = button.obj
            else:
                cad.ClearSelection(True)

            self.button_down_point = event.GetPosition()

        if event.LeftUp():
            if self.dragging:
                self.dragging = False

                # find the object to drop on to
                button = self.HitTest(event.GetPosition())

                if (button == None) or not cad.ObjectMarked(
                        button.obj
                ):  # can only drop on to an item other than one of the items being dragged
                    # test drop possible
                    drag_possible = True

                    add_to = cad.GetApp()
                    if button and button.paste_into: add_to = button.paste_into
                    for object in self.dragged_list:
                        if not add_to.CanAdd(object) or not object.CanAddTo(
                                add_to):
                            drag_possible = False
                            break

                    if drag_possible:
                        cad.StartHistory()

                        # cut the objects
                        cad.DeleteObjectsUndoably(self.dragged_list)

                        # paste the objects
                        for object in self.dragged_list:
                            if object.OneOfAKind():
                                one_found = False
                                child = add_to.GetFirstChild()
                                while child:
                                    if child.GetType() == object.GetType():
                                        child.CopyFrom(object)
                                        one_found = True
                                        break

                                    child = add_to.GetNextChild()

                                if not one_found:
                                    cad.AddUndoably(
                                        object, add_to, button.paste_before if
                                        (button != None) else None)
                            else:
                                cad.AddUndoably(
                                    object, add_to, button.paste_before if
                                    (button != None) else None)

                        cad.EndHistory()
                    else:
                        self.Refresh()
                else:
                    self.Refresh()
            else:
                if self.waiting_until_left_up:
                    cad.ClearSelection(False)
                    cad.Select(self.clicked_object, True)
            self.waiting_until_left_up = False

        if event.RightDown():
            button = self.HitTest(event.GetPosition())
            self.clicked_object = None
            if (button != None) and (button.type == ButtonTypeLabelBefore
                                     or button.type == ButtonTypeLabel):
                self.clicked_object = button.obj
                self.OnLabelRightDown(button.obj, event)

        if event.RightUp():
            if self.dragging:
                self.dragging = False
            else:
                tools = self.GetDropDownTools(event.ControlDown())
                menu = wx.Menu()
                for tool in tools:
                    wx.GetApp().AddToolToListAndMenu(tool, menu)
                self.PopupMenu(menu, event.GetPosition())

        if event.Dragging():
            if event.LeftIsDown() or event.RightIsDown():
                if (not self.dragging) and (
                        math.fabs(self.button_down_point.x - event.GetX()) > 2
                        or math.fabs(self.button_down_point.y - event.GetY()) >
                        2):
                    self.dragging = True
                    self.dragged_list = cad.GetSelectedObjects()

            if self.dragging:
                self.drag_position = self.CalcUnscrolledPosition(
                    event.GetPosition())
                button = self.HitTest(event.GetPosition())
                self.drag_paste_rect = wx.Rect(0, 0, 0, 0)
                if (button != None) and (button.type == ButtonTypeLabelBefore):
                    self.drag_paste_rect = button.rect
                self.Refresh()

        if event.LeftDClick():
            if self.clicked_object:
                wx.GetApp().EditUndoably(self.clicked_object)

        event.Skip()