• Selectable DLabel
    3 replies, posted
How can I make the text of a DLabel selectable and copyable? I found this build in feature but it seems it doesn't work [code] --[[--------------------------------------------------------- OnMousePressed -----------------------------------------------------------]] function PANEL:OnMousePressed( mousecode ) if ( self:GetDisabled() ) then return end if ( mousecode == MOUSE_LEFT && !dragndrop.IsDragging() && self.m_bDoubleClicking ) then if ( self.LastClickTime && SysTime() - self.LastClickTime < 0.2 ) then self:DoDoubleClickInternal() self:DoDoubleClick() return end self.LastClickTime = SysTime() end -- If we're selectable and have shift held down then go up -- the parent until we find a selection canvas and start box selection if ( self:IsSelectable() && mousecode == MOUSE_LEFT ) then if ( input.IsShiftDown() ) then return self:StartBoxSelection() end end self:MouseCapture( true ) self.Depressed = true self:OnDepressed() self:InvalidateLayout() -- -- Tell DragNDrop that we're down, and might start getting dragged! -- self:DragMousePress( mousecode ) end function PANEL:OnDepressed() end --[[--------------------------------------------------------- OnMouseReleased -----------------------------------------------------------]] function PANEL:OnMouseReleased( mousecode ) self:MouseCapture( false ) if ( self:GetDisabled() ) then return end if ( !self.Depressed ) then return end self.Depressed = nil self:OnReleased() self:InvalidateLayout() -- -- If we were being dragged then don't do the default behaviour! -- if ( self:DragMouseRelease( mousecode ) ) then return end if ( self:IsSelectable() && mousecode == MOUSE_LEFT ) then local canvas = self:GetSelectionCanvas() if ( canvas ) then canvas:UnselectAll() end end if ( !self.Hovered ) then return end -- -- For the purposes of these callbacks we want to -- keep depressed true. This helps us out in controls -- like the checkbox in the properties dialog. Because -- the properties dialog will only manualloy change the value -- if IsEditing() is true - and the only way to work out if -- a label/button based control is editing is when it's depressed. -- self.Depressed = true if ( mousecode == MOUSE_RIGHT ) then self:DoRightClick() end if ( mousecode == MOUSE_LEFT ) then self:DoClickInternal() self:DoClick() end if ( mousecode == MOUSE_MIDDLE ) then self:DoMiddleClick() end self.Depressed = nil end [/code]
If all else fails you could always make it into a text entry box. I would go about this by first overriding the OnMousePressed function. If it's MOUSE_RIGHT then I would open up a DermaMenu() with the options to copy the text to the clipboard. Upon clicking this action I would set the text to the clipboard. It's all very easy once you get started.
I'm pretty sure the code you've referenced is for drag-and-drop selection of panels, not for selection of text. I'd definitely just go with a DTextEntry since it has the functionality you need. Hide it's background/border with SetDrawBorder()/SetDrawBackground() and disable entering extra text with yourTextEntry.OnKeyCodeTyped = function() end
That worked, thanks!
Sorry, you need to Log In to post a reply to this thread.