Some fixes in hotkeys and other improvements
* Save last logged character and world instead of character name * Make focused label always visible in character list and hotkeys * Other fixes in hotkeys
This commit is contained in:
		
							parent
							
								
									197a379933
								
							
						
					
					
						commit
						d6e8e92a45
					
				|  | @ -38,7 +38,8 @@ local function tryLogin(charInfo, tries) | ||||||
|                                 end }) |                                 end }) | ||||||
| 
 | 
 | ||||||
|   -- save last used character |   -- save last used character | ||||||
|   g_settings.set('lastUsedCharacter', charInfo.characterName) |   g_settings.set('last-used-character', charInfo.characterName) | ||||||
|  |   g_settings.set('last-used-world', charInfo.worldName) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| local function updateWait(timeStart, timeEnd) | local function updateWait(timeStart, timeEnd) | ||||||
|  | @ -224,12 +225,15 @@ function CharacterList.create(characters, account, otui) | ||||||
| 
 | 
 | ||||||
|     connect(widget, { onDoubleClick = function () CharacterList.doLogin() return true end } ) |     connect(widget, { onDoubleClick = function () CharacterList.doLogin() return true end } ) | ||||||
| 
 | 
 | ||||||
|     if i == 1 or g_settings.get('lastUsedCharacter') == widget.characterName then |     if i == 1 or (g_settings.get('last-used-character') == widget.characterName and g_settings.get('last-used-world') == widget.worldName) then | ||||||
|       focusLabel = widget |       focusLabel = widget | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   characterList:focusChild(focusLabel, ActiveFocusReason) |   if focusLabel then | ||||||
|  |     characterList:focusChild(focusLabel, KeyboardFocusReason) | ||||||
|  |     addEvent(function() characterList:ensureChildVisible(focusLabel) end) | ||||||
|  |   end | ||||||
| 
 | 
 | ||||||
|   -- account |   -- account | ||||||
|   if account.premDays > 0 and account.premDays < 65535 then |   if account.premDays > 0 and account.premDays < 65535 then | ||||||
|  |  | ||||||
|  | @ -62,10 +62,13 @@ local function onUpdateNeeded(protocol, signature) | ||||||
|   loadBox:destroy() |   loadBox:destroy() | ||||||
|   loadBox = nil |   loadBox = nil | ||||||
| 
 | 
 | ||||||
|   if updateFunc then |   if EnterGame.updateFunc then | ||||||
|     local continueFunc = EnterGame.show |     local continueFunc = EnterGame.show | ||||||
|     local cancelFunc = EnterGame.show |     local cancelFunc = EnterGame.show | ||||||
|     updateFunc(signature, continueFunc, cancelFunc) |     EnterGame.updateFunc(signature, continueFunc, cancelFunc) | ||||||
|  |   else | ||||||
|  |     local errorBox = displayErrorBox(tr('Update needed'), tr('Your client needs update, try redownloading it.')) | ||||||
|  |     connect(errorBox, { onOk = EnterGame.show }) | ||||||
|   end |   end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -116,26 +116,26 @@ function UIScrollArea:onMouseWheel(mousePos, mouseWheel) | ||||||
|   return true |   return true | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function UIScrollArea:onChildFocusChange(focusedChild, oldFocused, reason) | function UIScrollArea:ensureChildVisible(child) | ||||||
|   if focusedChild and (reason == MouseFocusReason or reason == KeyboardFocusReason) then |   if child then | ||||||
|     local paddingRect = self:getPaddingRect() |     local paddingRect = self:getPaddingRect() | ||||||
|     if self.verticalScrollBar then |     if self.verticalScrollBar then | ||||||
|       local deltaY = paddingRect.y - focusedChild:getY() |       local deltaY = paddingRect.y - child:getY() | ||||||
|       if deltaY > 0 then |       if deltaY > 0 then | ||||||
|         self.verticalScrollBar:decrement(deltaY) |         self.verticalScrollBar:decrement(deltaY) | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       deltaY = (focusedChild:getY() + focusedChild:getHeight()) - (paddingRect.y + paddingRect.height) |       deltaY = (child:getY() + child:getHeight()) - (paddingRect.y + paddingRect.height) | ||||||
|       if deltaY > 0 then |       if deltaY > 0 then | ||||||
|         self.verticalScrollBar:increment(deltaY) |         self.verticalScrollBar:increment(deltaY) | ||||||
|       end |       end | ||||||
|     else |     else | ||||||
|       local deltaX = paddingRect.x - focusedChild:getX() |       local deltaX = paddingRect.x - child:getX() | ||||||
|       if deltaX > 0 then |       if deltaX > 0 then | ||||||
|         self.horizontalScrollBar:decrement(deltaX) |         self.horizontalScrollBar:decrement(deltaX) | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       deltaX = (focusedChild:getX() + focusedChild:getWidth()) - (paddingRect.x + paddingRect.width) |       deltaX = (child:getX() + child:getWidth()) - (paddingRect.x + paddingRect.width) | ||||||
|       if deltaX > 0 then |       if deltaX > 0 then | ||||||
|         self.horizontalScrollBar:increment(deltaX) |         self.horizontalScrollBar:increment(deltaX) | ||||||
|       end |       end | ||||||
|  | @ -143,6 +143,12 @@ function UIScrollArea:onChildFocusChange(focusedChild, oldFocused, reason) | ||||||
|   end |   end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  | function UIScrollArea:onChildFocusChange(focusedChild, oldFocused, reason) | ||||||
|  |   if focusedChild and (reason == MouseFocusReason or reason == KeyboardFocusReason) then | ||||||
|  |     self:ensureChildVisible(focusedChild) | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
| function UIScrollArea:onScrollWidthChange() | function UIScrollArea:onScrollWidthChange() | ||||||
|   if self.alwaysScrollMaximum and self.horizontalScrollBar then |   if self.alwaysScrollMaximum and self.horizontalScrollBar then | ||||||
|     self.horizontalScrollBar:setValue(self.horizontalScrollBar:getMaximum()) |     self.horizontalScrollBar:setValue(self.horizontalScrollBar:getMaximum()) | ||||||
|  |  | ||||||
|  | @ -213,7 +213,7 @@ function onChooseItemMouseRelease(self, mousePosition, mouseButton) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   if item then |   if item and hotkeyLabelSelectedOnList then | ||||||
|     currentItemPreview:setItemId(item:getId()) |     currentItemPreview:setItemId(item:getId()) | ||||||
|     hotkeyLabelSelectedOnList.itemId = item:getId() |     hotkeyLabelSelectedOnList.itemId = item:getId() | ||||||
|     changeUseType(HOTKEY_MANAGER_USEONSELF) |     changeUseType(HOTKEY_MANAGER_USEONSELF) | ||||||
|  | @ -235,7 +235,7 @@ function startChooseItem() | ||||||
|   connect(mouseGrabberWidget, { onMouseRelease = onChooseItemMouseRelease }) |   connect(mouseGrabberWidget, { onMouseRelease = onChooseItemMouseRelease }) | ||||||
| 
 | 
 | ||||||
|   mouseGrabberWidget:grabMouse() |   mouseGrabberWidget:grabMouse() | ||||||
|   g_mouse.pushCursor('target-cursor') |   g_mouse.pushCursor('target') | ||||||
| 
 | 
 | ||||||
|   hide() |   hide() | ||||||
| end | end | ||||||
|  | @ -260,10 +260,11 @@ function addHotkey() | ||||||
|   connect(assignWindow, { onKeyDown = hotkeyCapture }, true) |   connect(assignWindow, { onKeyDown = hotkeyCapture }, true) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function addKeyCombo(messageBox, keyCombo, keySettings) | function addKeyCombo(messageBox, keyCombo, keySettings, focus) | ||||||
|   local label = nil |   if not keyCombo then return end | ||||||
|   if currentHotkeysList:getChildById(keyCombo) == nil then |   local label = currentHotkeysList:getChildById(keyCombo) | ||||||
|     local label = g_ui.createWidget('HotkeyListLabel') |   if not label then | ||||||
|  |     label = g_ui.createWidget('HotkeyListLabel') | ||||||
|     label:setId(keyCombo) |     label:setId(keyCombo) | ||||||
|     label:setColor(HotkeyColors.text) |     label:setColor(HotkeyColors.text) | ||||||
|     label:setText(keyCombo .. ': ') |     label:setText(keyCombo .. ': ') | ||||||
|  | @ -289,10 +290,9 @@ function addKeyCombo(messageBox, keyCombo, keySettings) | ||||||
|     if keySettings then |     if keySettings then | ||||||
|       hotkeyLabelSelectedOnList = label |       hotkeyLabelSelectedOnList = label | ||||||
|       label.keyCombo = keyCombo |       label.keyCombo = keyCombo | ||||||
|       setSendAutomatically(keySettings.autoSend) |       label.autoSend = keySettings.autoSend | ||||||
|       label.itemId = keySettings.itemId |       label.itemId = keySettings.itemId | ||||||
|       currentItemPreview:setItemId(keySettings.itemId) |       label.useType = tonumber(keySettings.useType) | ||||||
|       changeUseType(tonumber(keySettings.useType)) |  | ||||||
|       label.value = keySettings.value |       label.value = keySettings.value | ||||||
|     else |     else | ||||||
|       label.keyCombo = keyCombo |       label.keyCombo = keyCombo | ||||||
|  | @ -308,6 +308,11 @@ function addKeyCombo(messageBox, keyCombo, keySettings) | ||||||
|     g_keyboard.bindKeyPress(keyCombo, function () call(keyCombo) end, nil, 350) |     g_keyboard.bindKeyPress(keyCombo, function () call(keyCombo) end, nil, 350) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   if focus then | ||||||
|  |     currentHotkeysList:focusChild(label) | ||||||
|  |     currentHotkeysList:ensureChildVisible(label) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   if messageBox then |   if messageBox then | ||||||
|     messageBox:destroy() |     messageBox:destroy() | ||||||
|     messageBox = nil |     messageBox = nil | ||||||
|  | @ -340,7 +345,6 @@ function call(keyCombo) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function checkSelectedHotkey(focused) | function checkSelectedHotkey(focused) | ||||||
|   if not focused then return end |  | ||||||
|   if hotkeysManagerLoaded then |   if hotkeysManagerLoaded then | ||||||
|     hotkeyLabelSelectedOnList = focused |     hotkeyLabelSelectedOnList = focused | ||||||
| 
 | 
 | ||||||
|  | @ -352,6 +356,7 @@ function checkSelectedHotkey(focused) | ||||||
|         hotkeyText:focus() |         hotkeyText:focus() | ||||||
|         hotKeyTextLabel:enable() |         hotKeyTextLabel:enable() | ||||||
|         hotkeyText:setText(hotkeyLabelSelectedOnList.value) |         hotkeyText:setText(hotkeyLabelSelectedOnList.value) | ||||||
|  |         hotkeyText:setCursorPos(-1) | ||||||
| 
 | 
 | ||||||
|         if hotkeyLabelSelectedOnList.value ~= '' then |         if hotkeyLabelSelectedOnList.value ~= '' then | ||||||
|           sendAutomatically:setChecked(hotkeyLabelSelectedOnList.autoSend) |           sendAutomatically:setChecked(hotkeyLabelSelectedOnList.autoSend) | ||||||
|  | @ -452,6 +457,7 @@ function removeHotkey() | ||||||
|     hotkeyList[hotkeyLabelSelectedOnList.keyCombo] = nil |     hotkeyList[hotkeyLabelSelectedOnList.keyCombo] = nil | ||||||
|     g_keyboard.unbindKeyPress(hotkeyLabelSelectedOnList.keyCombo) |     g_keyboard.unbindKeyPress(hotkeyLabelSelectedOnList.keyCombo) | ||||||
|     hotkeyLabelSelectedOnList:destroy() |     hotkeyLabelSelectedOnList:destroy() | ||||||
|  |     hotkeyLabelSelectedOnList = nil | ||||||
|   end |   end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  | @ -470,12 +476,14 @@ function onHotkeyTextChange(id, value) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function setSendAutomatically(value) | function setSendAutomatically(value) | ||||||
|  |   if hotkeyLabelSelectedOnList ~= nil then | ||||||
|     hotkeyLabelSelectedOnList.autoSend = value |     hotkeyLabelSelectedOnList.autoSend = value | ||||||
|     if value then |     if value then | ||||||
|       hotkeyLabelSelectedOnList:setColor(HotkeyColors.autoSend) |       hotkeyLabelSelectedOnList:setColor(HotkeyColors.autoSend) | ||||||
|     else |     else | ||||||
|       hotkeyLabelSelectedOnList:setColor(HotkeyColors.text) |       hotkeyLabelSelectedOnList:setColor(HotkeyColors.text) | ||||||
|     end |     end | ||||||
|  |   end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function hotkeyCapture(widget, keyCode, keyboardModifiers) | function hotkeyCapture(widget, keyCode, keyboardModifiers) | ||||||
|  |  | ||||||
|  | @ -215,7 +215,7 @@ HotkeyAssignWindow < MainWindow | ||||||
|     width: 64 |     width: 64 | ||||||
|     anchors.right: next.left |     anchors.right: next.left | ||||||
|     anchors.bottom: parent.bottom |     anchors.bottom: parent.bottom | ||||||
|     @onClick: modules.game_hotkeys.addKeyCombo(self:getParent(), self:getParent():getChildById('comboPreview').keyCombo) |     @onClick: modules.game_hotkeys.addKeyCombo(self:getParent(), self:getParent():getChildById('comboPreview').keyCombo, nil, true) | ||||||
|     margin-right: 10 |     margin-right: 10 | ||||||
| 
 | 
 | ||||||
|   Button |   Button | ||||||
|  |  | ||||||
|  | @ -217,7 +217,7 @@ function refresh() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function offline() | function offline() | ||||||
|   expSpeedEvent:cancel() |   if expSpeedEvent then expSpeedEvent:cancel() expSpeedEvent = nil end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function toggle() | function toggle() | ||||||
|  |  | ||||||
|  | @ -33,7 +33,7 @@ public: | ||||||
|     bool spawnProcess(const std::string& process, const std::vector<std::string>& args); |     bool spawnProcess(const std::string& process, const std::vector<std::string>& args); | ||||||
|     int getProcessId(); |     int getProcessId(); | ||||||
|     std::string getTempPath(); |     std::string getTempPath(); | ||||||
|     void copyFile(std::string from, std::string to); |     bool copyFile(std::string from, std::string to); | ||||||
|     void openUrl(std::string url); |     void openUrl(std::string url); | ||||||
|     std::string getCPUName(); |     std::string getCPUName(); | ||||||
|     double getTotalSystemMemory(); |     double getTotalSystemMemory(); | ||||||
|  |  | ||||||
|  | @ -28,6 +28,8 @@ | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <framework/stdext/stdext.h> | #include <framework/stdext/stdext.h> | ||||||
| 
 | 
 | ||||||
|  | #include <sys/stat.h> | ||||||
|  | 
 | ||||||
| void Platform::processArgs(std::vector<std::string>& args) | void Platform::processArgs(std::vector<std::string>& args) | ||||||
| { | { | ||||||
|     //nothing todo, linux args are already utf8 encoded
 |     //nothing todo, linux args are already utf8 encoded
 | ||||||
|  | @ -35,6 +37,10 @@ void Platform::processArgs(std::vector<std::string>& args) | ||||||
| 
 | 
 | ||||||
| bool Platform::spawnProcess(const std::string& process, const std::vector<std::string>& args) | bool Platform::spawnProcess(const std::string& process, const std::vector<std::string>& args) | ||||||
| { | { | ||||||
|  |     struct stat sts; | ||||||
|  |     if(stat(process.c_str(), &sts) == -1 && errno == ENOENT) | ||||||
|  |         return false; | ||||||
|  | 
 | ||||||
|     pid_t pid = fork(); |     pid_t pid = fork(); | ||||||
|     if(pid == -1) |     if(pid == -1) | ||||||
|         return false; |         return false; | ||||||
|  | @ -46,7 +52,8 @@ bool Platform::spawnProcess(const std::string& process, const std::vector<std::s | ||||||
|             cargs[i] = (char*)args[i-1].c_str(); |             cargs[i] = (char*)args[i-1].c_str(); | ||||||
|         cargs[args.size()+1] = 0; |         cargs[args.size()+1] = 0; | ||||||
| 
 | 
 | ||||||
|         execv(process.c_str(), cargs); |         if(execv(process.c_str(), cargs) == -1) | ||||||
|  |             _exit(EXIT_FAILURE); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return true; |     return true; | ||||||
|  | @ -62,9 +69,9 @@ std::string Platform::getTempPath() | ||||||
|     return "/tmp/"; |     return "/tmp/"; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Platform::copyFile(std::string from, std::string to) | bool Platform::copyFile(std::string from, std::string to) | ||||||
| { | { | ||||||
|     system(stdext::format("/bin/cp '%s' '%s'", from, to).c_str()); |     return system(stdext::format("/bin/cp '%s' '%s'", from, to).c_str()) == 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Platform::openUrl(std::string url) | void Platform::openUrl(std::string url) | ||||||
|  |  | ||||||
|  | @ -68,11 +68,13 @@ std::string Platform::getTempPath() | ||||||
|     return stdext::utf16_to_utf8(path); |     return stdext::utf16_to_utf8(path); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Platform::copyFile(std::string from, std::string to) | bool Platform::copyFile(std::string from, std::string to) | ||||||
| { | { | ||||||
|     boost::replace_all(from, "/", "\\"); |     boost::replace_all(from, "/", "\\"); | ||||||
|     boost::replace_all(to, "/", "\\"); |     boost::replace_all(to, "/", "\\"); | ||||||
|     CopyFileW(stdext::utf8_to_utf16(from).c_str(), stdext::utf8_to_utf16(to).c_str(), false); |     if(CopyFileW(stdext::utf8_to_utf16(from).c_str(), stdext::utf8_to_utf16(to).c_str(), FALSE) == 0) | ||||||
|  |         return false; | ||||||
|  |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Platform::openUrl(std::string url) | void Platform::openUrl(std::string url) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Eduardo Bart
						Eduardo Bart