词典交互和代码逻辑优化
框架跟进
This commit is contained in:
Submodule Zframework updated: b2118b4936...3595390738
@@ -385,50 +385,34 @@ return {
|
|||||||
[[
|
[[
|
||||||
INSTRUCTIONS FOR NAVIGATION IN TETRODICTIONARY
|
INSTRUCTIONS FOR NAVIGATION IN TETRODICTIONARY
|
||||||
|
|
||||||
A. Mouse and Touchscreen
|
A. Mouse / Touchscreen
|
||||||
- Press/touch [$13] to open Help.
|
- Press/touch a term in the list on the left to select the entry
|
||||||
- Hold and drag up/down or scroll the mouse to navigate through the text.
|
|
||||||
|
|
||||||
- Press/touch a term in the list on the left to select the entry you want to look up.
|
|
||||||
- Press/touch [$16] or [$17] to quickly scroll through the list. You can also click the middle mouse button or right mouse button and then scroll the mouse to switch between entries.
|
|
||||||
|
|
||||||
- Press/touch [aA] to display the font control buttons.
|
|
||||||
- Press/touch [a] to decrease the font size and [A] to increase the font size.
|
|
||||||
- To reset the font size to the default size, wait for a few seconds until the [100%] button appears, then press [100%].
|
|
||||||
|
|
||||||
- Press/touch [$14] to copy the content of the current entry.
|
|
||||||
- Press/touch [$15] to open the link of the current entry (if available).
|
|
||||||
|
|
||||||
- Click the back button in the top right corner to exit TetroDictionary.
|
|
||||||
|
|
||||||
|
- Press/touch [$14] to copy the content of the current entry
|
||||||
|
- Press/touch [$15] to open the link of the current entry (if available)
|
||||||
|
|
||||||
B. Keyboard
|
B. Keyboard
|
||||||
Press...
|
Press...
|
||||||
- [F1] to display Help.
|
- [F1] to display Help
|
||||||
- [$1] or [$2] to scroll through the text.
|
- [$1] or [$2] to scroll through the text
|
||||||
- [$3] to open the previous entry and [$4] to open the next entry.
|
- [$3] to open the previous entry and [$4] to open the next entry, speed up with [Ctrl]
|
||||||
|
|
||||||
- [Ctrl] + [-] to decrease the font size, [Ctrl] + [+] to increase the font size.
|
- [-] to decrease the font size, [+] to increase the font size
|
||||||
- [Ctrl] + [0] to restore the default font size.
|
- [0] to restore the default font size
|
||||||
|
|
||||||
- [Ctrl] + [C] to copy text.
|
- [Ctrl + C] to copy text
|
||||||
- [$18] (Context Menu key/Application key)
|
- [$16] (Context Menu key/Application key) to open the link of the current entry (if available)
|
||||||
- to open the link of the current entry (if available).
|
|
||||||
|
|
||||||
- [Esc] to exit TetroDictionary.
|
|
||||||
|
|
||||||
C. Gamepad
|
C. Gamepad
|
||||||
- Press $10 to display Help.
|
- Press $10 to display Help
|
||||||
- Press $5 or $6 to scroll through the text.
|
- Press $5 or $6 to scroll through the text, speed up with $11
|
||||||
- Press $7 to open the previous entry and $8 to open the next entry.
|
- Press $7 to open the previous entry and $8 to open the next entry. Speed up with $11
|
||||||
- Hold $11 and press $7 or $8 to scroll quickly through the list.
|
- Hold $11 and press $6 to decrease the font size or $5 to increase
|
||||||
- Hold $11 and press $6 to decrease the font size or $5 to increase the font size.
|
|
||||||
- Press [BACK] to exit TetroDictionary.
|
|
||||||
]]
|
]]
|
||||||
-- 1-4: Up, Down, Left, Right
|
-- 1-4: Up, Down, Left, Right
|
||||||
-- 5-8: Up, Down, Left, Right but D-Pad
|
-- 5-8: Up, Down, Left, Right but D-Pad
|
||||||
-- 9-12: X, Y, A, B
|
-- 9-12: X, Y, A, B
|
||||||
-- 13-18: Help, Copy, Open, Forward, Backward, MENU
|
-- 13-16: Help, Copy, Open, MENU
|
||||||
},
|
},
|
||||||
WidgetText={
|
WidgetText={
|
||||||
main={
|
main={
|
||||||
|
|||||||
@@ -394,45 +394,28 @@ return {
|
|||||||
HƯỚNG DẪN ĐIỀU HƯỚNG TRONG TETRODICTIONARY
|
HƯỚNG DẪN ĐIỀU HƯỚNG TRONG TETRODICTIONARY
|
||||||
|
|
||||||
A. Chuột và màn hình cảm ứng
|
A. Chuột và màn hình cảm ứng
|
||||||
- Nhấn/chạm [$13] để mở Trợ giúp.
|
- Giữ và kéo lên/xuống hoặc lăn chuột để cuộn văn bản
|
||||||
- Giữ và kéo lên/xuống hoặc lăn chuột để cuộn văn bản.
|
|
||||||
|
|
||||||
- Nhấn/chạm vào một mục trong danh sách ở bên trái để chọn mục cần tra.
|
|
||||||
- Nhấn/chạm [$16] hoặc [$17] để nhanh chóng cuộn qua danh sách. Bạn cũng có thể nhấn giữ chuột giữa hoặc chuột phải sau đó lăn chuột để chuyển qua các mục.
|
|
||||||
|
|
||||||
- Nhấn/chạm [aA] để hiện 2 nút điều khiển cỡ chữ.
|
|
||||||
- Nhấn/chạm [a] để giảm cỡ chữ và [A] để tăng cỡ chữ.
|
|
||||||
- Để đặt cỡ chữ về cỡ mặc định, chờ một vài giây để nút [100%] xuất hiện, sau đó nhấn [100%].
|
|
||||||
|
|
||||||
- Nhấn/chạm [$14] để sao chép nội dung của mục đang xem.
|
|
||||||
- Nhấn/chạm [$15] để mở link của mục đang xem (nếu có).
|
|
||||||
|
|
||||||
- Nhấp vào nút quay lại ở góc trên bên phải để thoát TetroDictionary
|
|
||||||
|
|
||||||
|
- Nhấn/chạm [$14] để sao chép nội dung của mục đang xem
|
||||||
|
- Nhấn/chạm [$15] để mở link của mục đang xem (nếu có)
|
||||||
|
|
||||||
B. Bàn phím
|
B. Bàn phím
|
||||||
Nhấn…
|
Nhấn…
|
||||||
- [F1] để hiển thị Trợ giúp.
|
- [F1] để hiển thị Trợ giúp
|
||||||
- [$1] hoặc [$2] để cuộn qua văn bản.
|
- [$1] hoặc [$2] để cuộn qua văn bản
|
||||||
- [$3] để mở mục trước đó và [$4] để mở mục tiếp theo.
|
- [$3] để mở mục trước đó và [$4] để mở mục tiếp theo
|
||||||
|
|
||||||
- [Ctrl] + [-] để giảm cỡ chữ, [Ctrl] + [+] để tăng cỡ chữ.
|
- [-] để giảm cỡ chữ, [+] để tăng cỡ chữ
|
||||||
- [Ctrl] + [0] để khôi phục về cỡ chữ mặc định
|
- [0] để khôi phục về cỡ chữ mặc định
|
||||||
|
|
||||||
- [Ctrl] + [C] để sao chép văn bản
|
|
||||||
- [$18] (phím Menu ngữ cảnh/phím Ứng dụng)
|
|
||||||
để mở liên kết của mục đang xem (nếu có)
|
|
||||||
|
|
||||||
- [Esc] để thoát TetroDictionary
|
|
||||||
|
|
||||||
|
- [Ctrl + C] để sao chép văn bản
|
||||||
|
- [$16] (phím Menu ngữ cảnh/phím Ứng dụng)
|
||||||
|
|
||||||
C. Tay cầm chơi game (Gamepad)
|
C. Tay cầm chơi game (Gamepad)
|
||||||
Nhấn $10 để hiển thị trợ giúp.
|
Nhấn $10 để hiển thị trợ giúp
|
||||||
Nhấn $5 hoặc $6 để cuộn văn bản.
|
Nhấn $5 hoặc $6 để cuộn văn bản, speed up with $11
|
||||||
Nhấn $7 để mở mục trước và $8 để mở mục tiếp theo.
|
Nhấn $7 để mở mục trước và $8 để mở mục tiếp theo
|
||||||
Giữ $11 và nhấn $7 hoặc $8 để cuộn nhanh qua danh sách.
|
Giữ $11 và nhấn $7 hoặc $8 để cuộn nhanh qua danh sách
|
||||||
Giữ $11 và nhấn $6 để giảm cỡ chữ hoặc $5 để tăng cỡ chữ.
|
|
||||||
Nhấn [BACK] để thoát TetroDictionary.
|
|
||||||
]]
|
]]
|
||||||
-- 1-4: Up, Down, Left, Right
|
-- 1-4: Up, Down, Left, Right
|
||||||
-- 5-8: Up, Down, Left, Right but D-Pad
|
-- 5-8: Up, Down, Left, Right but D-Pad
|
||||||
|
|||||||
@@ -386,35 +386,29 @@ return {
|
|||||||
[[
|
[[
|
||||||
小Z词典操作说明
|
小Z词典操作说明
|
||||||
|
|
||||||
鼠标与触摸屏:
|
鼠标/触摸屏:
|
||||||
点击 [$13] 显示帮助。
|
点击左侧列表中的项目以选择词条
|
||||||
拖动或使用鼠标滚轮以滚动文本。
|
点击 [$14] 复制词条文本
|
||||||
点击左侧列表中的项目以选择词条,点击 [$16] 或 [$17] 快速滚动列表。
|
点击 [$15] 打开词条中的链接(如有)
|
||||||
点击 [aA] 显示字号控制,然后点击 [a] 缩小字号,[A] 增大字号。要重置字号为默认大小,稍等片刻直到 [100%] 按钮显示,然后点击 [100%]。
|
|
||||||
点击 [$14] 复制词条文本。
|
|
||||||
点击 [$15] 打开词条中的链接(如有)。
|
|
||||||
点击右上角的返回按钮退出小Z词典。
|
|
||||||
|
|
||||||
键盘:
|
键盘:
|
||||||
按 [F1] 显示帮助。
|
按 [F1] 显示帮助
|
||||||
按 [$1] 或 [$2] 滚动文本。
|
按 [$1] 或 [$2] 滚动文本
|
||||||
按 [$3] 打开上一词条,按 [$4] 打开下一词条。使用 [Ctrl + $3] 或 [Ctrl + $4] 快速滚动列表。
|
按 [$3] 打开上一词条,按 [$4] 打开下一词条。按住 [Ctrl] 加速
|
||||||
按 [Ctrl + 减号键] 缩小字号,[Ctrl + 等号键] 增大字号,[Ctrl + 0] 恢复默认字号。
|
按 [-] 缩小字号,[+] 增大字号,[0] 恢复默认字号
|
||||||
按 [Ctrl + C] 复制词条文本。
|
按 [Ctrl + C] 复制词条文本
|
||||||
按 [$18] (上下文菜单键,应用程序键)打开词条中的链接(如有)。
|
按 [$16] (上下文菜单键/应用程序键)打开词条中的链接(如有)
|
||||||
按 [Esc] 退出小Z词典。
|
|
||||||
|
|
||||||
游戏手柄:
|
手柄:
|
||||||
按 $10 显示帮助。
|
按 $10 to 显示帮助
|
||||||
按 $5 或 $6 滚动文本。
|
按 $5 或 $6 滚动文本, 按 $11 加速
|
||||||
按 $7 打开上一词条,按 $8 打开下一词条。按住 $11 并按 $7 或 $8 快速滚动列表。
|
按 $7 打开上一词条,按 $8 打开下一词条。按住 $11 加速
|
||||||
按住 $11 并按 $6 缩小字号,或 $5 增大字号。
|
按住 $11 并按 $6 缩小字号,或 $5 增大字号
|
||||||
按 [BACK] 退出小Z词典。
|
|
||||||
]]
|
]]
|
||||||
-- 1-4: Up, Down, Left, Right
|
-- 1-4: Up, Down, Left, Right
|
||||||
-- 5-8: Up, Down, Left, Right but D-Pad
|
-- 5-8: Up, Down, Left, Right but D-Pad
|
||||||
-- 9-12: X, Y, A, B
|
-- 9-12: X, Y, A, B
|
||||||
-- 13-18: Help, Copy, Open, Forward, Backward, MENU
|
-- 13-16: Help, Copy, Open, MENU
|
||||||
},
|
},
|
||||||
WidgetText={
|
WidgetText={
|
||||||
main={
|
main={
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
|
|
||||||
local int,abs=math.floor,math.abs
|
local int,abs=math.floor,math.abs
|
||||||
local min,sin=math.min,math.sin
|
|
||||||
local ins=table.insert
|
local ins=table.insert
|
||||||
local find=string.find
|
local find=string.find
|
||||||
|
|
||||||
@@ -15,14 +14,8 @@ local searchWait-- Searching animation timer
|
|||||||
|
|
||||||
local lastSearch-- Last searched string
|
local lastSearch-- Last searched string
|
||||||
local lastSelected -- Last selected item
|
local lastSelected -- Last selected item
|
||||||
local justSearched -- Just searched or not?
|
|
||||||
|
|
||||||
local currentFontSize=25 -- Current font size, default: 25
|
local currentFontSize=25 -- Current font size, default: 25
|
||||||
local showingHelp=false -- Help is triggered or not
|
|
||||||
local zoomWait=0 -- The last time zoom is triggered
|
|
||||||
|
|
||||||
local lastScrollPos
|
|
||||||
local lastMouseX,lastMouseY,lastTouchX,lastTouchY
|
|
||||||
|
|
||||||
local typeColor={
|
local typeColor={
|
||||||
help=COLOR.Y,
|
help=COLOR.Y,
|
||||||
@@ -58,32 +51,23 @@ local function _scanDict(D)
|
|||||||
end
|
end
|
||||||
local function _getList() return result[1] and result or dict end
|
local function _getList() return result[1] and result or dict end
|
||||||
|
|
||||||
-- Drawing objects
|
|
||||||
local infoBox =WIDGET.newTextBox {name='infoBox',x=320,y=180,w=862,h=526,font=25,fix=true}
|
local infoBox =WIDGET.newTextBox {name='infoBox',x=320,y=180,w=862,h=526,font=25,fix=true}
|
||||||
local inputBox=WIDGET.newInputBox{name='input', x=20, y=110,w=762,h=60, font=40,limit=32}
|
local inputBox=WIDGET.newInputBox{name='input', x=20, y=110,w=762,h=60, font=40,limit=32}
|
||||||
local listBox =WIDGET.newListBox {name='listBox',x=20, y=180,w=280,h=526,font=30,lineH=35,drawF=function(item,id,ifSel)
|
local listBox =WIDGET.newListBox {name='listBox',x=20, y=180,w=280,h=526,font=30,lineH=35,drawF=function(item,id,ifSel)
|
||||||
-- Draw list box
|
-- Background
|
||||||
-- Background
|
|
||||||
if ifSel then
|
if ifSel then
|
||||||
gc.setColor(1,1,1,.4)
|
gc.setColor(1,1,1,.4)
|
||||||
gc.rectangle('fill',0,0,280,35)
|
gc.rectangle('fill',0,0,280,35)
|
||||||
end
|
end
|
||||||
|
-- Name & color
|
||||||
-- Name & color
|
|
||||||
local item=_getList()[id]
|
|
||||||
GC.shadedPrint(item.title,10,-3,'left',1,COLOR.D,typeColor[item.type])
|
GC.shadedPrint(item.title,10,-3,'left',1,COLOR.D,typeColor[item.type])
|
||||||
-- Draw list box /
|
|
||||||
end}
|
end}
|
||||||
-- Drawing object /
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Necessary local functions
|
-- Necessary local functions
|
||||||
-- Clear the result
|
-- Clear the result
|
||||||
local function _clearResult()
|
local function _clearResult()
|
||||||
TABLE.cut(result)
|
TABLE.cut(result)
|
||||||
listBox.selected=1
|
listBox.selected=1
|
||||||
justSearched=true
|
|
||||||
searchWait,lastSearch=0,false
|
searchWait,lastSearch=0,false
|
||||||
scene.widgetList.copy.hide=false
|
scene.widgetList.copy.hide=false
|
||||||
end
|
end
|
||||||
@@ -102,17 +86,16 @@ local function _search()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
listBox:setList(_getList())
|
||||||
|
|
||||||
if #result>0 then SFX.play('reach') end
|
if #result>0 then SFX.play('reach') end
|
||||||
justSearched=true
|
|
||||||
lastSearch=input
|
lastSearch=input
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Jump over n items
|
-- Jump over n items
|
||||||
local function _jumpover(key,n)
|
local function _jumpover(key,n)
|
||||||
n=n or 1
|
local dir=(key=='left' or key=='pageup') and 'up' or 'down'
|
||||||
if key=='left' or key=='pageup' then
|
for _=1,n or 1 do scene.widgetList.listBox:arrowKey(dir) end
|
||||||
for _=1,n do scene.widgetList.listBox:arrowKey('up') end
|
|
||||||
else for _=1,n do scene.widgetList.listBox:arrowKey('down') end end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Copy the content
|
-- Copy the content
|
||||||
@@ -128,17 +111,16 @@ end
|
|||||||
local function _updateInfoBox(c)
|
local function _updateInfoBox(c)
|
||||||
local _t,t
|
local _t,t
|
||||||
if c==nil then
|
if c==nil then
|
||||||
if showingHelp then
|
if listBox.selected==0 then
|
||||||
if text.dict.helpText then
|
if text.dict.helpText then
|
||||||
t,_t=text.dict.helpText:repD(
|
_t,t=true,text.dict.helpText:repD(
|
||||||
CHAR.key.up, CHAR.key.down, CHAR.key.left, CHAR.key.right,
|
CHAR.key.up,CHAR.key.down,CHAR.key.left,CHAR.key.right,
|
||||||
CHAR.controller.dpadU,CHAR.controller.dpadD,CHAR.controller.dpadL,CHAR.controller.dpadR,
|
CHAR.controller.dpadU,CHAR.controller.dpadD,CHAR.controller.dpadL,CHAR.controller.dpadR,
|
||||||
CHAR.controller.xboxX,CHAR.controller.xboxY,CHAR.controller.xboxA,CHAR.controller.xboxB,
|
CHAR.controller.xboxX,CHAR.controller.xboxY,CHAR.controller.xboxA,CHAR.controller.xboxB,
|
||||||
|
CHAR.icon.help,CHAR.icon.copy,CHAR.icon.globe,CHAR.key.winMenu
|
||||||
CHAR.icon.help,CHAR.icon.copy, CHAR.icon.globe,
|
)
|
||||||
CHAR.icon.toUp,CHAR.icon.toDown,CHAR.key.winMenu
|
else
|
||||||
),true
|
_t,t=true,{
|
||||||
else _t,t=true,{
|
|
||||||
"OUCH! I can't seem to find any translated Help text anywhere.",
|
"OUCH! I can't seem to find any translated Help text anywhere.",
|
||||||
"\nI guess you'll have to switch to English and try again to read it instead!",
|
"\nI guess you'll have to switch to English and try again to read it instead!",
|
||||||
"\n\nOn another note, you could make an issue on GitHub or send this to Techmino's Discord server.",
|
"\n\nOn another note, you could make an issue on GitHub or send this to Techmino's Discord server.",
|
||||||
@@ -146,7 +128,9 @@ local function _updateInfoBox(c)
|
|||||||
"\n\nOh, and it would be nice if you could let us know about it or you can fix it by yourself!",
|
"\n\nOh, and it would be nice if you could let us know about it or you can fix it by yourself!",
|
||||||
"\n\n-- Sea, the one who rewrote the Zictionary scene and left this message just in case."
|
"\n\n-- Sea, the one who rewrote the Zictionary scene and left this message just in case."
|
||||||
} end
|
} end
|
||||||
else _t,t=pcall(function() return _getList()[listBox.selected].content end) end
|
else
|
||||||
|
_t,t=pcall(function() return _getList()[listBox.selected].content end)
|
||||||
|
end
|
||||||
if _t then c=t else c={""} end
|
if _t then c=t else c={""} end
|
||||||
_t,t=nil,nil
|
_t,t=nil,nil
|
||||||
end
|
end
|
||||||
@@ -154,19 +138,7 @@ local function _updateInfoBox(c)
|
|||||||
infoBox:setTexts(c)
|
infoBox:setTexts(c)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Show Help or not
|
|
||||||
local function _toggleHelp()
|
|
||||||
local listBox = scene.widgetList.listBox
|
|
||||||
showingHelp = not showingHelp
|
|
||||||
if not showingHelp then
|
|
||||||
listBox.selected=lastSelected
|
|
||||||
scene.widgetList.copy.hide=false
|
|
||||||
end
|
|
||||||
_updateInfoBox()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Zoom and reset zoom
|
-- Zoom and reset zoom
|
||||||
local function _openZoom() zoomWait=2 end
|
|
||||||
local function _resetZoom()
|
local function _resetZoom()
|
||||||
currentFontSize,infoBox.font=25,25
|
currentFontSize,infoBox.font=25,25
|
||||||
infoBox.lineH,infoBox.capacity=35,math.ceil((infoBox.h-10)/35)
|
infoBox.lineH,infoBox.capacity=35,math.ceil((infoBox.h-10)/35)
|
||||||
@@ -180,43 +152,10 @@ local function _setZoom(z)
|
|||||||
infoBox.lineH=currentFontSize*7/5 -- Recalculate the line's height
|
infoBox.lineH=currentFontSize*7/5 -- Recalculate the line's height
|
||||||
infoBox.capacity=math.ceil((infoBox.h-10)/infoBox.lineH)
|
infoBox.capacity=math.ceil((infoBox.h-10)/infoBox.lineH)
|
||||||
_updateInfoBox()
|
_updateInfoBox()
|
||||||
_openZoom()
|
|
||||||
MES.new("check",text.dict.sizeChanged:repD(currentFontSize),1.26)
|
MES.new("check",text.dict.sizeChanged:repD(currentFontSize),1.26)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Checking if waiting countdown reach 0 to run the function.
|
|
||||||
--
|
|
||||||
-- currentCountdown: the variable that tracking waiting time
|
|
||||||
-- timeEndF: run this function if the time reach 0
|
|
||||||
-- nTimeEndF: run this function if the time has not reached 0
|
|
||||||
--
|
|
||||||
-- NOTE: This function will return the modified value of currentcountdown
|
|
||||||
local function _waitingfor(currentcountdown, timeEndF, nTimeEndF)
|
|
||||||
currentcountdown = currentcountdown or 0
|
|
||||||
timeEndF = timeEndF or function() end
|
|
||||||
nTimeEndF= nTimeEndF or function() end
|
|
||||||
|
|
||||||
if currentcountdown>0 then
|
|
||||||
currentcountdown=currentcountdown-love.timer.getDelta()
|
|
||||||
if currentcountdown<=0 then timeEndF() else nTimeEndF() end
|
|
||||||
end
|
|
||||||
return currentcountdown
|
|
||||||
end
|
|
||||||
|
|
||||||
local function fixScrollingByTouch(x,y,lastX,lastY)
|
|
||||||
if WIDGET.isFocus(listBox) then
|
|
||||||
if abs(lastScrollPos-listBox.scrollPos)>26 then
|
|
||||||
lastScrollPos=listBox.scrollPos
|
|
||||||
listBox.selected=lastSelected
|
|
||||||
else
|
|
||||||
lastSelected=listBox.selected
|
|
||||||
scene.widgetList.copy.hide=false
|
|
||||||
_updateInfoBox()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Reset everything when opening Zictionary
|
-- Reset everything when opening Zictionary
|
||||||
function scene.enter()
|
function scene.enter()
|
||||||
dict=require("parts.language.dict_"..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or SETTING.locale:find'vi' and 'vi' or 'en'))
|
dict=require("parts.language.dict_"..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or SETTING.locale:find'vi' and 'vi' or 'en'))
|
||||||
@@ -225,13 +164,10 @@ function scene.enter()
|
|||||||
inputBox:clear()
|
inputBox:clear()
|
||||||
result={}
|
result={}
|
||||||
|
|
||||||
if showingHelp then _toggleHelp() end
|
|
||||||
|
|
||||||
searchWait=0
|
searchWait=0
|
||||||
lastSelected=0
|
lastSelected=0
|
||||||
listBox.selected=1
|
listBox.selected=1
|
||||||
listBox.scrollPos=0
|
listBox.scrollPos=0
|
||||||
lastScrollPos=0
|
|
||||||
lastSearch=false
|
lastSearch=false
|
||||||
|
|
||||||
if not MOBILE then WIDGET.focus(inputBox) end
|
if not MOBILE then WIDGET.focus(inputBox) end
|
||||||
@@ -244,52 +180,42 @@ end
|
|||||||
function scene.keyDown(key)
|
function scene.keyDown(key)
|
||||||
-- Switching selected items
|
-- Switching selected items
|
||||||
if key=='up' or key=='down' then
|
if key=='up' or key=='down' then
|
||||||
if not showingHelp then
|
listBox:scroll(key=='up' and -1 or 1)
|
||||||
if love.mouse.isDown(2,3) then
|
|
||||||
listBox:arrowKey(key)
|
elseif (key=='left' or key=='pageup' or key=='right' or key=='pagedown') then
|
||||||
return
|
_jumpover(key,love.keyboard.isDown('lctrl','rctrl','lalt','ralt','lshift','rshift') and 12)
|
||||||
elseif WIDGET.isFocus(listBox) then
|
|
||||||
listBox:scroll(key=='up' and -1 or 1)
|
elseif key=='cC' or key=='c' and love.keyboard.isDown('lctrl','rctrl') then
|
||||||
lastScrollPos=listBox.scrollPos
|
if listBox.selected>0 then
|
||||||
return
|
_copy()
|
||||||
end
|
|
||||||
end
|
end
|
||||||
infoBox:scroll(key=='up' and -3 or 3)
|
|
||||||
|
|
||||||
elseif (key=='left' or key=='pageup' or key=='right' or key=='pagedown')
|
elseif key=='-' or key=='=' then
|
||||||
then
|
_setZoom((key=='-' or key=='kp-') and -5 or 5)
|
||||||
if love.keyboard.isDown('lctrl','rctrl','lalt','ralt','lshift','rshift')
|
elseif key=='0' then
|
||||||
then _jumpover(key,12)
|
_resetZoom()
|
||||||
else _jumpover(key,1)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Copy & Zoom
|
elseif key=='application' and listBox.selected>=0 then
|
||||||
elseif key=='cC' then _copy()
|
|
||||||
elseif love.keyboard.isDown('lctrl','rctrl') then
|
|
||||||
if key == 'c' and not showingHelp then _copy() return
|
|
||||||
elseif love.keyboard.isDown('-','=','kp-','kp+') then _setZoom((key=='-' or key=='kp-') and -5 or 5)
|
|
||||||
elseif love.keyboard.isDown('0','kp0') then _resetZoom() end
|
|
||||||
|
|
||||||
-- Clear search input, open URL
|
|
||||||
elseif key=='application' and not showingHelp then
|
|
||||||
local url=_getList()[listBox.selected].url
|
local url=_getList()[listBox.selected].url
|
||||||
if url then love.system.openURL(url) end
|
if url then love.system.openURL(url) end
|
||||||
elseif key=='delete' and not showingHelp then
|
elseif key=='delete' then
|
||||||
if inputBox:hasText() then
|
if inputBox:hasText() then
|
||||||
_clearResult()
|
_clearResult()
|
||||||
inputBox:clear()
|
inputBox:clear()
|
||||||
SFX.play('hold')
|
SFX.play('hold')
|
||||||
|
_updateInfoBox()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Get out of Zictionary
|
|
||||||
elseif key=='escape' then
|
elseif key=='escape' then
|
||||||
if inputBox:hasText() then scene.keyDown('delete')
|
if inputBox:hasText() then
|
||||||
elseif showingHelp then _toggleHelp()
|
scene.keyDown('delete')
|
||||||
else SCN.back()
|
else
|
||||||
|
SCN.back()
|
||||||
end
|
end
|
||||||
-- Calling Help
|
elseif key=='f1' then
|
||||||
elseif key=='f1' then _toggleHelp()
|
listBox.selected=0
|
||||||
-- Focus on the search box
|
inputBox:clear()
|
||||||
|
searchWait=0
|
||||||
|
_updateInfoBox()
|
||||||
else
|
else
|
||||||
if not WIDGET.isFocus(inputBox) then WIDGET.focus(inputBox) end
|
if not WIDGET.isFocus(inputBox) then WIDGET.focus(inputBox) end
|
||||||
return true
|
return true
|
||||||
@@ -299,105 +225,61 @@ end
|
|||||||
function scene.gamepadDown(key)
|
function scene.gamepadDown(key)
|
||||||
local Joystick=love.joystick.getJoysticks()[love.joystick.getJoystickCount()]
|
local Joystick=love.joystick.getJoysticks()[love.joystick.getJoystickCount()]
|
||||||
|
|
||||||
-- Scrolling text & zooming
|
if key=='dpup' or key=='dpdown' then
|
||||||
if (key=='dpup' or key=='dpdown') then
|
if Joystick:isGamepadDown('a') then
|
||||||
if Joystick:isGamepadDown('a')
|
_setZoom(key=='dpup' and 5 or -5)
|
||||||
then _setZoom(key=='dpup' and 5 or -5)
|
else
|
||||||
else infoBox:scroll(key=='dpup' and -3 or 3)
|
infoBox:scroll(key=='dpup' and -3 or 3)
|
||||||
end
|
end
|
||||||
-- Switching selected items
|
|
||||||
elseif key=='dpleft' or key=='dpright' then
|
elseif key=='dpleft' or key=='dpright' then
|
||||||
_jumpover(key:gsub('dp',''),Joystick:isGamepadDown('a') and 12 or 1)
|
_jumpover(key:gsub('dp',''),Joystick:isGamepadDown('a') and 12)
|
||||||
-- Activate help
|
elseif key=='y' then
|
||||||
elseif key=='y' then _toggleHelp()
|
listBox.selected=0
|
||||||
-- Exit
|
inputBox:clear()
|
||||||
elseif key=='back' then SCN.back()
|
searchWait=0
|
||||||
|
_updateInfoBox()
|
||||||
|
elseif key=='back' then
|
||||||
|
SCN.back()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function scene.mouseDown(mx,my)
|
|
||||||
lastMouseX,lastMouseY=mx,my
|
|
||||||
end
|
|
||||||
function scene.touchDown(mx,my)
|
|
||||||
lastTouchX,lastTouchY=mx,my
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Check if left mouse key is released
|
|
||||||
function scene.mouseUp(mx,my)
|
|
||||||
fixScrollingByTouch(mx,my,lastMouseX,lastMouseY)
|
|
||||||
end
|
|
||||||
function scene.touchUp(mx,my)
|
|
||||||
fixScrollingByTouch(mx,my,lastTouchX,lastTouchY)
|
|
||||||
end
|
|
||||||
|
|
||||||
function scene.update(dt)
|
function scene.update(dt)
|
||||||
-- It's time to search?
|
|
||||||
local input=inputBox:getText()
|
local input=inputBox:getText()
|
||||||
if input~=lastTickInput then
|
if input~=lastTickInput then
|
||||||
if #input==0 then
|
if #input==0 then
|
||||||
_clearResult()
|
_clearResult()
|
||||||
|
listBox:setList(_getList())
|
||||||
else
|
else
|
||||||
searchWait=.8
|
searchWait=.8
|
||||||
end
|
end
|
||||||
lastTickInput=input
|
lastTickInput=input
|
||||||
end
|
end
|
||||||
searchWait=_waitingfor(
|
if searchWait>0 then
|
||||||
searchWait,
|
searchWait=searchWait-dt
|
||||||
function() if #input>0 and input~=lastSearch then _search() end end
|
if searchWait<=0 and #input>0 and input~=lastSearch then
|
||||||
)
|
_search()
|
||||||
-- It's time to swap zoom buttons?
|
|
||||||
zoomWait=_waitingfor(
|
|
||||||
zoomWait,
|
|
||||||
function()
|
|
||||||
scene.widgetList.openzoom .hide=false
|
|
||||||
scene.widgetList.resetzoom.hide=false
|
|
||||||
scene.widgetList.zoomin .hide=true
|
|
||||||
scene.widgetList.zoomout .hide=true
|
|
||||||
end,
|
|
||||||
function()
|
|
||||||
scene.widgetList.openzoom .hide=true
|
|
||||||
scene.widgetList.resetzoom.hide=true
|
|
||||||
scene.widgetList.zoomin .hide=false
|
|
||||||
scene.widgetList.zoomout .hide=false
|
|
||||||
end
|
end
|
||||||
)
|
end
|
||||||
end
|
|
||||||
|
|
||||||
local function listStencil()
|
if lastSelected~=listBox.selected then
|
||||||
GC.rectangle('fill',20,180,280,526)
|
|
||||||
end
|
|
||||||
function scene.draw()
|
|
||||||
-- Order: list, info, keys
|
|
||||||
-- Draw background
|
|
||||||
gc.setColor(COLOR.dX)
|
|
||||||
gc.rectangle('fill',1194,180,80,526,5) -- keys
|
|
||||||
-- Draw outline
|
|
||||||
gc.setLineWidth(2)
|
|
||||||
gc.setColor(COLOR.Z)
|
|
||||||
gc.rectangle('line',1194,180,80,526,5) -- keys
|
|
||||||
-- Draw key seperating outline
|
|
||||||
gc.rectangle('line',1194,260,80,1,0) -- A | B
|
|
||||||
gc.rectangle('line',1194,410,80,1,0) -- B | C
|
|
||||||
gc.rectangle('line',1194,560,80,1,0) -- C | D
|
|
||||||
|
|
||||||
local list=_getList()
|
|
||||||
setFont(30)
|
|
||||||
|
|
||||||
-- Showing Help?
|
|
||||||
if showingHelp then
|
|
||||||
listBox.selected=0
|
|
||||||
scene.widgetList.copy.hide,scene.widgetList.link.hide=true,true
|
|
||||||
-- If not then, check the selected item if it is changed or not?
|
|
||||||
-- If yes, update lastSelected then update the textbox!
|
|
||||||
elseif justSearched then
|
|
||||||
listBox:setList(_getList())
|
|
||||||
_updateInfoBox()
|
|
||||||
justSearched=false
|
|
||||||
elseif lastSelected~=listBox.selected and not love.mouse.isDown(1) then
|
|
||||||
_updateInfoBox()
|
_updateInfoBox()
|
||||||
lastSelected=listBox.selected
|
lastSelected=listBox.selected
|
||||||
scene.widgetList.copy.hide=false
|
scene.widgetList.copy.hide=false
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function scene.draw()
|
||||||
|
-- Order: list, info, keys
|
||||||
|
-- Draw background
|
||||||
|
gc.setColor(COLOR.dX)
|
||||||
|
gc.rectangle('fill',1194,340,80,366,5)
|
||||||
|
-- Draw outline
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
gc.setColor(COLOR.Z)
|
||||||
|
gc.rectangle('line',1194,340,80,366,5)
|
||||||
|
gc.line(1194,560,1274,560)
|
||||||
|
|
||||||
|
setFont(30)
|
||||||
|
|
||||||
if searchWait>0 then
|
if searchWait>0 then
|
||||||
local r=TIME()*2
|
local r=TIME()*2
|
||||||
@@ -413,22 +295,14 @@ scene.widgetList={
|
|||||||
listBox,
|
listBox,
|
||||||
inputBox,
|
inputBox,
|
||||||
infoBox,
|
infoBox,
|
||||||
WIDGET.newKey {name='link', x=1234,y=600,w=60,font=45,fText=CHAR.icon.globe, code=pressKey'application',hideF=function() return not ((not (showingHelp or listBox.selected==0)) and _getList()[listBox.selected].url) end},
|
WIDGET.newKey {name='link', x=1234,y=600,w=60,font=45,fText=CHAR.icon.globe, code=pressKey'application',hideF=function() return not (listBox.selected>0 and _getList()[listBox.selected].url) end},
|
||||||
WIDGET.newKey {name='copy', x=1234,y=670,w=60,font=40,fText=CHAR.icon.copy, code=pressKey'cC'},
|
WIDGET.newKey {name='copy', x=1234,y=670,w=60,font=40,fText=CHAR.icon.copy, code=pressKey'cC',hideF=function() return not (listBox.selected>0) end},
|
||||||
|
|
||||||
WIDGET.newKey {name='openzoom', x=1234,y=300,w=60,font=30,fText="aA", code=function() _openZoom() end,hide=false},
|
WIDGET.newKey {name='zoomin', x=1234,y=380,w=60,font=40,fText="A", code=function() _setZoom(5) end},
|
||||||
WIDGET.newKey {name='resetzoom',x=1234,y=370,w=60,font=25,fText="100%", code=function() _resetZoom() end,hide=false},
|
WIDGET.newKey {name='zoomout', x=1234,y=450,w=60,font=40,fText="a", code=function() _setZoom(-5) end},
|
||||||
WIDGET.newKey {name='zoomin', x=1234,y=300,w=60,font=40,fText="A", code=function() _setZoom(5) end,hide=true},
|
WIDGET.newKey {name='resetzoom',x=1234,y=520,w=60,font=25,fText="100%", code=function() _resetZoom() end},
|
||||||
WIDGET.newKey {name='zoomout', x=1234,y=370,w=60,font=40,fText="a", code=function() _setZoom(-5) end,hide=true},
|
|
||||||
|
|
||||||
WIDGET.newKey {name='pageup', x=1234,y=450,w=60,font=40,fText=CHAR.icon.toUp, hideF=function() return love.mouse.isDown(2,3) or showingHelp end,code=function() _jumpover('left') end},
|
WIDGET.newKey {name='help', x=1234,y=220,w=60,font=40,fText=CHAR.icon.help, code=pressKey'f1'},
|
||||||
WIDGET.newKey {name='pagedown', x=1234,y=520,w=60,font=40,fText=CHAR.icon.toDown,hideF=function() return love.mouse.isDown(2,3) or showingHelp end,code=function() _jumpover('right') end},
|
|
||||||
|
|
||||||
WIDGET.newKey {name='pageup1', x=1234,y=450,w=60,font=40,fText=CHAR.key.up, hideF=function() return not love.mouse.isDown(2,3) or showingHelp end,color="A"},
|
|
||||||
WIDGET.newKey {name='pagedown1',x=1234,y=520,w=60,font=40,fText=CHAR.key.down, hideF=function() return not love.mouse.isDown(2,3) or showingHelp end,color="A"},
|
|
||||||
|
|
||||||
WIDGET.newKey {name='help0', x=1234,y=220,w=60,font=40,fText=CHAR.icon.help, code=pressKey'f1',hideF=function() return showingHelp end},
|
|
||||||
WIDGET.newKey {name='help1', x=1234,y=220,w=60,font=40,fText=CHAR.icon.help, code=pressKey'f1',hideF=function() return not showingHelp end,color='lF'},
|
|
||||||
|
|
||||||
WIDGET.newButton{name='back', x=1165,y=60, w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
WIDGET.newButton{name='back', x=1165,y=60, w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||||
WIDGET.newText {name='buttontip',x=1274,y=110,w=762,h=60,font=40,align='R',fText=CHAR.controller.xboxY.."/[F1]: "..CHAR.icon.help}
|
WIDGET.newText {name='buttontip',x=1274,y=110,w=762,h=60,font=40,align='R',fText=CHAR.controller.xboxY.."/[F1]: "..CHAR.icon.help}
|
||||||
|
|||||||
Reference in New Issue
Block a user