--*********************************************************** --** ROBERT JOHNSON ** --*********************************************************** ModOrderUI = ISPanel:derive("ModOrderUI"); ModOrderUI.messages = {}; local FONT_HGT_SMALL = getTextManager():getFontHeight(UIFont.Small) local function getTooltipText(name) local tooltip = getTextOrNull(name) if tooltip then tooltip = tooltip:gsub("\\n", "\n") tooltip = tooltip:gsub("\\\"", "\"") end return tooltip end --************************************************************************-- --** ModOrderUI:initialise --** --************************************************************************-- function ModOrderUI:initialise() ISPanel.initialise(self); local btnWid = 100 local btnWid2 = 160 local btnHgt = math.max(25, FONT_HGT_SMALL + 3 * 2) local btnHgt2 = btnHgt local padBottom = 10 self.no = ISButton:new(10, self:getHeight() - padBottom - btnHgt, btnWid, btnHgt, getText("UI_Cancel"), self, ModOrderUI.onClick); self.no.internal = "CANCEL"; self.no.anchorTop = false self.no.anchorBottom = true self.no:initialise(); self.no:instantiate(); self.no.borderColor = {r=1, g=1, b=1, a=0.1}; self:addChild(self.no); self.save = ISButton:new(self.width - btnWid - 10, self:getHeight() - padBottom - btnHgt, btnWid, btnHgt, getText("UI_Ok"), self, ModOrderUI.onClick); self.save.internal = "SAVE"; self.save.anchorTop = false self.save.anchorBottom = true self.save:initialise(); self.save:instantiate(); self.save.borderColor = {r=1, g=1, b=1, a=0.1}; self:addChild(self.save); self.richText = ISRichTextLayout:new(self.width - 10 - btnWid2 - 10 - 10) self.richText:setText(getText("UI_ModsConflictsInfo")) self.richText:paginate() local top = 50 + self.richText:getHeight() + 16 self.datas = ISScrollingListBox:new(10, top, self.width - 10 - btnWid2 - 10 - 10, self.height - 130 - top); self.datas:initialise(); self.datas:instantiate(); self.datas.itemheight = FONT_HGT_SMALL + 3 * 2; self.datas.selected = 0; self.datas.joypadParent = self; self.datas.font = UIFont.NewSmall; self.datas.doDrawItem = self.drawDatas; self.datas.drawBorder = true; self:addChild(self.datas); self.up = ISButton:new(self.width - 10 - btnWid2, self.datas.y, btnWid2, btnHgt, getText("UI_ServerSettings_ButtonMoveUp"), self, ModOrderUI.onClick); self.up.internal = "UP"; self.up.anchorTop = false self.up.anchorBottom = true self.up:initialise(); self.up:instantiate(); self.up.borderColor = {r=1, g=1, b=1, a=0.1}; self.up.tooltip = getTooltipText("UI_ModsConflicts_ButtonMoveUp_tooltip") self:addChild(self.up); self.down = ISButton:new(self.width - 10 - btnWid2, self.up.y + self.up.height + 4, btnWid2, btnHgt, getText("UI_ServerSettings_ButtonMoveDown"), self, ModOrderUI.onClick); self.down.internal = "DOWN"; self.down.anchorTop = false self.down.anchorBottom = true self.down:initialise(); self.down:instantiate(); self.down.borderColor = {r=1, g=1, b=1, a=0.1}; self.down.tooltip = getTooltipText("UI_ModsConflicts_ButtonMoveDown_tooltip") self:addChild(self.down); --[[ self.infoBtn = ISButton:new(self.width - 10 - btnWid2, 15, btnWid2, btnHgt, getText("UI_InfoBtn"), self, ModOrderUI.onClick); self.infoBtn.internal = "INFO"; self.infoBtn:initialise(); self.infoBtn:instantiate(); self.infoBtn:setAnchorLeft(true); self.infoBtn:setAnchorTop(false); self.infoBtn:setAnchorBottom(true); self.infoBtn.borderColor = { r = 1, g = 1, b = 1, a = 0.1 }; self:addChild(self.infoBtn); --]] self:populateList(); self:setCapture(true) end function ModOrderUI:getActiveMods() return ActiveMods.getById(self.isNewGame and "currentGame" or "default") end function ModOrderUI:populateList() self.datas:clear(); self.mapGroups:createGroups(self:getActiveMods(), false) self.mapGroups:checkMapConflicts() local list = self.mapGroups:getAllMapsInOrder() for i=1,list:size() do local mapName = list:get(i-1) local conflicts = self.mapGroups:getMapConflicts(mapName) if conflicts and not conflicts:isEmpty() then local item = {} item.name = mapName item.conflicts = conflicts self.datas:addItem(item.name, item) end end end function ModOrderUI:drawDatas(y, item, alt) local a = 0.9; -- self.parent.selectedFaction = nil; self:drawRectBorder(0, (y), self:getWidth(), self.itemheight - 1, a, self.borderColor.r, self.borderColor.g, self.borderColor.b); if self.selected == item.index then self:drawRect(0, (y), self:getWidth(), self.itemheight - 1, 0.3, 0.7, 0.35, 0.15); self.parent.selectedItem = item.index; end self:drawText(item.text, 10, y + 2, 1, 1, 1, a, self.font); return y + self.itemheight; end function ModOrderUI:prerender() self:bringToTop(); self:updateButtons(); local z = 20; local splitPoint = 100; local x = 10; self:drawRect(0, 0, self.width, self.height, self.backgroundColor.a, self.backgroundColor.r, self.backgroundColor.g, self.backgroundColor.b); self:drawRectBorder(0, 0, self.width, self.height, self.borderColor.a, self.borderColor.r, self.borderColor.g, self.borderColor.b); self:drawText(getText("UI_mods_ModsOrder"), self.width/2 - (getTextManager():MeasureStringX(UIFont.Medium, getText("UI_mods_ModsOrder")) / 2), z, 1,1,1,1, UIFont.Medium); z = z + 30; local item = self.datas.items[self.datas.selected] if item then local conflicts = item.item.conflicts for i=0, conflicts:size()-1 do self:drawText(conflicts:get(i), self.datas.x, (self.datas.y + self.datas.height + 10 + (i * 15)), 1, 1, 1, 1, self.font); end end end function ModOrderUI:render() ISPanel.render(self) self.richText:render(self.datas.x, 50, self) end function ModOrderUI:onMouseMoveOutside(dx, dy) return true end function ModOrderUI:onMouseDownOutside(x, y) return true end function ModOrderUI:onMouseUpOutside(x, y) return true end function ModOrderUI:updateButtons() self.up.enable = true; self.down.enable = true; if self.selectedItem == 1 then self.up.enable = false; end if self.selectedItem == #self.datas.items then self.down.enable = false; end end function ModOrderUI:onClick(button) if button.internal == "CANCEL" then self:setVisible(false); self:removeFromUIManager(); ModSelector.instance:setVisible(true) end if button.internal == "SAVE" then local activeMods = self:getActiveMods() activeMods:getMapOrder():clear() for i=1,#self.datas.items do activeMods:getMapOrder():add(self.datas.items[i].text); end self:setVisible(false); self:removeFromUIManager(); ModSelector.instance:setVisible(true) end if button.internal == "UP" then local item = self.datas.items[self.selectedItem]; self.datas:removeItem(item.text); self.datas:insertItem(self.selectedItem - 1, item.text, item.item); self.datas.selected = self.selectedItem - 1 end if button.internal == "DOWN" then local item = self.datas.items[self.selectedItem]; self.datas:removeItem(item.text); self.datas:insertItem(self.selectedItem + 1, item.text, item.item); self.datas.selected = self.selectedItem + 1 end if button.internal == "INFO" then if not self.infoRichText then self.infoRichText = ISModalRichText:new(getCore():getScreenWidth()/2-400,getCore():getScreenHeight()/2-300,600,600,getText("UI_ModsConflictsInfo"), false); self.infoRichText.destroyOnClick = false; self.infoRichText:initialise(); self.infoRichText:addToUIManager(); self.infoRichText.chatText:paginate(); self.infoRichText.backgroundColor = {r=0, g=0, b=0, a=1}; self.infoRichText:setHeight(self.infoRichText.chatText:getHeight() + 40); self.infoRichText:setY(getCore():getScreenHeight()/2-(self.infoRichText:getHeight()/2)); self.infoRichText:setVisible(true); self.infoRichText:setAlwaysOnTop(true); else self.infoRichText:setVisible(not self.infoRichText:getIsVisible()); self.infoRichText:bringToTop(); end end end --************************************************************************-- --** ModOrderUI:new --** --************************************************************************-- function ModOrderUI:new(x, y, width, height) local o = {} x = ModSelector.instance.x; y = ModSelector.instance.y; width = ModSelector.instance.width height = ModSelector.instance.height o = ISPanel:new(x, y, width, height); setmetatable(o, self) self.__index = self o.borderColor = {r=0.4, g=0.4, b=0.4, a=1}; o.backgroundColor = {r=0, g=0, b=0, a=0.8}; o.width = width; o.height = height; o.selectedFaction = nil; o.moveWithMouse = true; o.mapGroups = MapGroups.new() o.isNewGame = ModSelector.instance.isNewGame ModOrderUI.instance = o; return o; end