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)
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)
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)
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()
def OnLabelRightDown(self, object, event): if not cad.ObjectMarked(object): cad.ClearSelection(False) cad.Select(object, True)
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()