Rincevvind Posted May 23, 2014 Share Posted May 23, 2014 backspace not work for textedit widget, even if DebugRender (in keyboard settings) is changed from backspace to something else self.signtext = self.root:AddChild( TextEdit( BODYTEXTFONT, fontsize, self.data.str or "") ) self.signtext:SetPosition( 0, signtext_offset, 0 ) self.signtext:SetRegionSize( edit_width, label_height ) self.signtext:SetHAlign(ANCHOR_LEFT) self.signtext:SetFocusedImage( self.signtext_bg, UI_ATLAS, "textbox_long_over.tex", "textbox_long.tex" ) self.signtext:SetTextLengthLimit( 60 )But in betterconsole mod its works well, while only thing that i found in this mod about backspace is deleting whole selected text if wasallselected and key == KEY_BACKSPACE then self:SetString("") return true endin original screens/consolescreen.lua i dont see anything backspace related too.how to make it work or how to get cursor position to emulate backspace function? Link to comment Share on other sites More sharing options...
squeek Posted May 23, 2014 Share Posted May 23, 2014 You shouldn't have to do anything to make backspace work.Try this code and see what it prints when you press backspace with your text edit widget focused:local require = GLOBAL.requirelocal TextEdit = require "widgets/textedit"local TextEdit_OnRawKey_base = TextEdit.OnRawKeyfunction TextEdit:OnRawKey(key, down) local retval = TextEdit_OnRawKey_base(self, key, down) if key == GLOBAL.KEY_BACKSPACE then print("backspace key "..(down and "pressed" or "released").."; input "..(retval and "handled" or "passed through")) end return retvalend Link to comment Share on other sites More sharing options...
Rincevvind Posted May 23, 2014 Author Share Posted May 23, 2014 You shouldn't have to do anything to make backspace work.Try this code and see what it prints when you press backspace with your text edit widget focused: local require = GLOBAL.requirelocal TextEdit = require "widgets/textedit"local TextEdit_OnRawKey_base = TextEdit.OnRawKeyfunction TextEdit:OnRawKey(key, down) local retval = TextEdit_OnRawKey_base(self, key, down) if key == GLOBAL.KEY_BACKSPACE then print("backspace key "..(down and "pressed" or "released").."; input "..(retval and "handled" or "passed through")) end return retvalendwell its works, but backspace do nothing with text, only del works Link to comment Share on other sites More sharing options...
Rincevvind Posted May 23, 2014 Author Share Posted May 23, 2014 whole screen code if it helpsrequire "util"require "rincewind/craputil"require "strings"local Screen = require "widgets/screen"local Button = require "widgets/button"local Menu = require "widgets/menu"local Grid = require "widgets/grid"local Text = require "widgets/text"local Spinner = require "widgets/spinner"local Widget = require "widgets/widget"local TextEdit = require "widgets/textedit"local textfont = UIFONTlocal spinnerFont = { font = BUTTONFONT, size = 28 }local enableDisableOptions = { { text = STRINGS.UI.OPTIONS.DISABLED, data = false }, { text = STRINGS.UI.OPTIONS.ENABLED, data = true } }---------------------------------------------------------------------------------------------local TextEdit_OnRawKey_base = TextEdit.OnRawKeyfunction TextEdit:OnRawKey(key, down) local retval = TextEdit_OnRawKey_base(self, key, down) if key == KEY_BACKSPACE then print("backspace key "..(down and "pressed" or "released").. "; input "..(retval and "handled" or "passed through")) end return retvalendlocal SignScreen = Class(Screen, function(self,p) Screen._ctor(self, "SignScreen") self.active = true SetPause(true,"pause") self.data = nil if p and p.components and p.components.signdata and p.components.signdata.data and (type(p.components.signdata.data)=="table") then self.data = p.components.signdata.data self.signdata = p.components.signdata end self.root = self:AddChild(Widget("ROOT")) self.root:SetVAnchor(ANCHOR_MIDDLE) self.root:SetHAnchor(ANCHOR_LEFT) self.root:SetPosition(400,0,0) self.root:SetScaleMode(SCALEMODE_PROPORTIONAL) local shield = self.root:AddChild( Image( "images/globalpanels.xml", "panel.tex" ) ) shield:SetPosition( 0,0,0 ) shield:SetSize( 500, 550 ) local label_width = 200 local label_height = 50 local label_offset = 100 local space_between = 30 local signtext_offset = 120 local fontsize = 30 local edit_width = 350 local edit_bg_padding = 60 self.signtext_bg = self.root:AddChild( Image() ) self.signtext_bg:SetTexture( "images/ui.xml", "textbox_long.tex" ) self.signtext_bg:SetPosition( 0, signtext_offset, 0 ) self.signtext_bg:ScaleToSize( edit_width + edit_bg_padding, label_height ) self.signtext = self.root:AddChild( TextEdit( BODYTEXTFONT, fontsize, self.data.str or "") ) self.signtext:SetPosition( 0, signtext_offset, 0 ) self.signtext:SetRegionSize( edit_width, label_height ) self.signtext:SetHAlign(ANCHOR_LEFT) self.signtext:SetFocusedImage( self.signtext_bg, UI_ATLAS, "textbox_long_over.tex", "textbox_long.tex" ) self.signtext:SetTextLengthLimit( 60 )-- self.signtext:SetEditing(true) self.grid = self.root:AddChild(Grid()) self.grid:InitSize(1, 10, 400, -70) self.grid:SetPosition(0, 50, 0) self.grid:SetScale(0.9, 0.6, 0.9) self.labelSpinner = Spinner(enableDisableOptions) self.labelSpinner.OnChanged = function( _, data ) self:ChangeLabel(data) end self.posSpinner = Spinner(self:GetPosList()) self.posSpinner.OnChanged = function( _, data ) self:ChangePos(data) end self.colorSpinner = Spinner(self:GetColorList()) self.colorSpinner.OnChanged = function( _, data ) self:ChangeColor(data) end self.fontSpinner = Spinner(self:GetFontList()) self.fontSpinner.OnChanged = function( _, data ) self:ChangeFont(data) end self.fontsizeSpinner = Spinner(self:GetFSList()) self.fontsizeSpinner.OnChanged = function( _, data ) self:ChangeFS(data) end self.mouseSpinner = Spinner(enableDisableOptions) self.mouseSpinner.OnChanged = function( _, data ) self:ChangeMouse(data) end local spinners = {} table.insert(spinners, {"Label", self.labelSpinner}) table.insert(spinners, {"Position", self.posSpinner}) table.insert(spinners, {"Color", self.colorSpinner}) table.insert(spinners, {"Font", self.fontSpinner}) table.insert(spinners, {"Font size", self.fontsizeSpinner}) table.insert(spinners, {"Left mouse button", self.mouseSpinner}) for k,v in ipairs(spinners) do self.grid:AddItem( self:CreateSpinnerGroup(v[1],v[2]), 1, k) end self:InitializeSpinners() self.menu = self.root:AddChild(Menu(nil, 200, true)) self.menu:SetPosition(0, -210 ,0) self.menu:SetScale(0.6) self.menu:AddItem(STRINGS.UI.OPTIONS.CLOSE, function() self:Close(true) end) self.default_focus = self.signtextend)function SignScreen:GetPosList() if not self.poslist then self.poslist = {} else return self.poslist end for i = 0,3.4,0.2 do table.insert(self.poslist, {text = tostring(i),data = i }) end return self.poslistendfunction SignScreen:GetColorList() if not self.colorlist then self.colorlist = {} else return self.colorlist end table.insert(self.colorlist, {text = "White", data = "FFFFFF"}) table.insert(self.colorlist, {text = "Green", data = "06B000"}) table.insert(self.colorlist, {text = "Red", data = "B00006"}) table.insert(self.colorlist, {text = "Yellow", data = "B0AA00"}) table.insert(self.colorlist, {text = "Pink", data = "AA00B0"}) table.insert(self.colorlist, {text = "Blue", data = "005EB0"}) return self.colorlistendfunction SignScreen:GetFontList() if not self.fontlist then self.fontlist = {} else return self.fontlist end table.insert(self.fontlist, {text = "Default", data = BODYTEXTFONT}) table.insert(self.fontlist, {text = "Dialog", data = DIALOGFONT}) table.insert(self.fontlist, {text = "UI", data = UIFONT}) table.insert(self.fontlist, {text = "Button", data = BUTTONFONT}) table.insert(self.fontlist, {text = "Talking", data = TALKINGFONT}) return self.fontlistendfunction SignScreen:GetFSList() if not self.fslist then self.fslist = {} else return self.fslist end for i = 8,26,2 do table.insert(self.fslist, {text = tostring(i), data = i}) end return self.fslistendfunction SignScreen:CreateSpinnerGroup( text, spinner ) local label_width = 200 spinner:SetTextColour(0,0,0,1) local group = Widget("SpinnerGroup") local label = group:AddChild( Text( textfont, 30, text ) ) label:SetPosition( -label_width/2, 0, 0 ) label:SetRegionSize( label_width, 50 ) label:SetHAlign( ANCHOR_RIGHT ) group:AddChild( spinner ) spinner:SetPosition( 125, 0, 0 ) group.focus_forward = spinner return groupendfunction SignScreen:ChangePos(data) if self.data then self.data.str = self.signtext:GetLineEditString() self.data.pos = data self.signdata:UpdateLabel() endendfunction SignScreen:ChangeColor(data) if self.data then self.data.str = self.signtext:GetLineEditString() self.signdata:SetColor(data) self.signdata:UpdateLabel() endendfunction SignScreen:ChangeFont(data) if self.data then self.data.str = self.signtext:GetLineEditString() self.data.font = data self.signdata:UpdateLabel() endendfunction SignScreen:ChangeLabel(data) if self.data then self.data.str = self.signtext:GetLineEditString() self.data.showme = data self.signdata:UpdateLabel() endendfunction SignScreen:ChangeMouse(data) if self.data then self.data.str = self.signtext:GetLineEditString() if data then self.signdata:EnableRead() else self.signdata:DisableRead() end endendfunction SignScreen:ChangeFS(data) if self.data then self.data.str = self.signtext:GetLineEditString() self.data.fontsize = data self.signdata:UpdateLabel() endendlocal function EnabledOptionsIndex( enabled ) if enabled then return 2 else return 1 endendfunction SignScreen:Close(f) if f and self.data then self.data.str = self.signtext:GetLineEditString() self.signdata:UpdateLabel() end self.active = false SetPause(false) if self.signdata then self.signdata.oncd = false end TheFrontEnd:PopScreen()end function SignScreen:OnControl(control, down) if SignScreen._base.OnControl(self,control, down) then return true end if (control == CONTROL_PAUSE or control == CONTROL_CANCEL) and not down then self:Close() return true endendfunction SignScreen:OnUpdate(dt) if self.active then SetPause(true) endendfunction SignScreen:InitializeSpinners() if not self.data then return end self.mouseSpinner:SetSelectedIndex(EnabledOptionsIndex(self.signdata:IsRead())) self.labelSpinner:SetSelectedIndex(EnabledOptionsIndex(self.data.showme)) if self.signdata.nolmb then self.mouseSpinner:Disable() end local pos = self:GetPosList() for i = 1,#pos do if math.abs(pos[i].data - self.data.pos) < 0.05 then self.posSpinner:SetSelectedIndex(i) break end end local col = self:GetColorList() local c = self.signdata:GetColor() for i = 1,#col do if col[i].data == c then self.colorSpinner:SetSelectedIndex(i) break end end local font = self:GetFontList() for i = 1,#font do if font[i].data == self.data.font then self.fontSpinner:SetSelectedIndex(i) break end end local fs = self:GetFSList() for i = 1,#fs do if math.abs(fs[i].data - self.data.fontsize) < 0.05 then self.fontsizeSpinner:SetSelectedIndex(i) break end endendreturn SignScreen Link to comment Share on other sites More sharing options...
squeek Posted May 23, 2014 Share Posted May 23, 2014 Try setting a valid character filter and see if that affects anything (both consolescreen and emailsignupscreen's text edit fields set a valid character filter). self.signtext:SetCharacterFilter([[ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;[]\@!#$%&()'*+-/=?^_{|}~"<>]])If that fixes it, then it's probably a bug on the C++ side that somehow requires a character filter to properly handle the backspace key (which you'd need Klei to fix). Link to comment Share on other sites More sharing options...
Rincevvind Posted May 24, 2014 Author Share Posted May 24, 2014 intersting, i try Link to comment Share on other sites More sharing options...
Rincevvind Posted May 24, 2014 Author Share Posted May 24, 2014 hell yes, its works now, thx Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.
Please be aware that the content of this thread may be outdated and no longer applicable.