Quantcast

Various GUI changes;

Peter Eliasson [01-24-15 - 15:52]
Various GUI changes;

* Some cleanup.
* Changed the filter container to only fill 50%.
* Added an actions container to the right of the filters, having buttons for Report and Purge.
Filename
src/gui.lua
diff --git a/src/gui.lua b/src/gui.lua
index d7adbb4..7372aab 100644
--- a/src/gui.lua
+++ b/src/gui.lua
@@ -15,19 +15,6 @@ local AceGUI = LibStub("AceGUI-3.0");
 -- Constants
 local RAID_TIME_FORMAT = "%m/%d/%y %H:%M";

--- Formats a long number as a more human-readable version.
-function gui:FormatNumber(number)
-	if Skada and Skada.FormatNumber then
-		return Skada:FormatNumber(number)
-	else
-		-- Default to Skada's implementation with numberformat enabled
-		if number > 1000000 then
-			return ("%02.2fM"):format(number / 1000000)
-		else
-			return ("%02.1fK"):format(number / 1000)
-		end
-	end
-end

 -- Creats a row of labels taking up 1/numLabels relative
 -- width per label and adds each label to the container.
@@ -119,37 +106,32 @@ function gui:CreateEncounterDropdown()
 	return dropdown;
 end

+function gui:CreateNoFilterSelectedLabel()
+	local label = AceGUI:Create("Label");
+	label:SetText("Nothing, click on a name or a time to filter.");
+	label:SetFullWidth(true);

-function gui:CreateFilterEntry(filterId, filterValue)
-	local container = AceGUI:Create("SimpleGroup");
-	container:SetRelativeWidth(0.5);
-	container:SetLayout("Flow");
+	return label;
+end

-	local label = AceGUI:Create("Label");
-	label:SetRelativeWidth(0.65);
-
+function gui:CreateFilterEntry(filterId, filterValue)
+	local filterText;
 	if filterId == "startTime" then
-		label:SetText("Time: " ..
-			date(RAID_TIME_FORMAT, filterValue));
+		filterText = "Time: " .. date(RAID_TIME_FORMAT, filterValue);
 	elseif filterId == "name" then
-		label:SetText("Name: " .. filterValue);
+		filterText = "Name: " .. filterValue;
 	else
-		return;
+		return nil;
 	end

-
-	local removeButton = AceGUI:Create("Button")
-	removeButton:SetText("Remove");
-	removeButton:SetHeight(18);
-	removeButton:SetRelativeWidth(0.30);
-	removeButton:SetCallback("OnClick", function()
+	local entryBtn = AceGUI:Create("Button")
+	entryBtn:SetText(filterText);
+	entryBtn:SetRelativeWidth(0.5);
+	entryBtn:SetCallback("OnClick", function()
 		self:UnsetParseFilter(filterId);
-	end)
+	end);

-	container:AddChild(label);
-	container:AddChild(removeButton);
-
-	return container;
+	return entryBtn;
 end

 -- Create the filter container, a row below the dropdowns
@@ -158,18 +140,49 @@ end
 function gui:CreateFilterContainer()
 	local filterContainer = AceGUI:Create("InlineGroup");
 	self.filterContainer = filterContainer;
-	filterContainer:SetFullWidth(true);
+	filterContainer:SetRelativeWidth(0.5);
+	filterContainer:SetAutoAdjustHeight(false);
+	filterContainer:SetHeight(60);
 	filterContainer:SetLayout("Flow");
 	filterContainer:SetTitle("Filtered by");

-	local nothingLabel = AceGUI:Create("Label");
-	nothingLabel:SetText("-- Nothing, click on a player name or a time to filter. --");
-	nothingLabel:SetFullWidth(true);
-	filterContainer:AddChild(nothingLabel);
+	filterContainer:AddChild(self:CreateNoFilterSelectedLabel());

 	return filterContainer;
 end

+-- Creates the container for the action buttons, i.e.
+-- Report/Purge.
+function gui:CreateActionContainer()
+	local actionContainer = AceGUI:Create("InlineGroup");
+	actionContainer:SetRelativeWidth(0.5);
+	actionContainer:SetAutoAdjustHeight(false);
+	actionContainer:SetHeight(60);
+	actionContainer:SetLayout("Flow");
+	actionContainer:SetTitle("Actions");
+
+	local purgeBtn = AceGUI:Create("Button");
+	purgeBtn:SetText("Purge (NYI)...");
+	purgeBtn:SetDisabled(true);
+	purgeBtn:SetRelativeWidth(0.5);
+	purgeBtn:SetCallback("OnClick", function()
+	end);
+
+	local reportBtn = AceGUI:Create("Button");
+	self.reportButton = reportBtn;
+	reportBtn:SetText("Report...");
+	reportBtn:SetDisabled(true);
+	reportBtn:SetRelativeWidth(0.5);
+	reportBtn:SetCallback("OnClick", function()
+		self:Debug("Report you...");
+	end);
+
+	actionContainer:AddChild(purgeBtn);
+	actionContainer:AddChild(reportBtn);
+
+	return actionContainer;
+end
+
 -- Creates the headers for the parses:
 -- Rank | DPS/HPS | Name | Spec | Item Level | Time
 function gui:CreateHighScoreParseHeader()
@@ -296,12 +309,28 @@ function gui:CreateMainFrame()
 	dropdownContainer:AddChild(self:CreateEncounterDropdown());

 	frame:AddChild(dropdownContainer);
+
 	frame:AddChild(self:CreateFilterContainer());
+	frame:AddChild(self:CreateActionContainer());
 	frame:AddChild(self:CreateHighScoreTabGroup());

 	return frame;
 end

+-- Formats a long number as a more human-readable version.
+function gui:FormatNumber(number)
+	if Skada and Skada.FormatNumber then
+		return Skada:FormatNumber(number)
+	else
+		-- Default to Skada's implementation with numberformat enabled
+		if number > 1000000 then
+			return ("%02.2fM"):format(number / 1000000)
+		else
+			return ("%02.1fK"):format(number / 1000)
+		end
+	end
+end
+
 -- Takes a list of parse objects and applies filters them
 -- by the attribute filters defined in parseFilters,
 -- returning those passing all filters.
@@ -350,7 +379,9 @@ function gui:DisplayParseFilters()
 	local filterEntries = {}
 	for filterId, filterValue in pairs(self.parseFilters) do
 		local filterEntry = self:CreateFilterEntry(filterId, filterValue);
-		tinsert(filterEntries, filterEntry);
+		if filterEntry then
+			tinsert(filterEntries, filterEntry);
+		end
 	end

 	if #filterEntries > 0 then
@@ -358,10 +389,7 @@ function gui:DisplayParseFilters()
 			self.filterContainer:AddChild(filterEntry)
 		end
 	else
-		local nothingLabel = AceGUI:Create("Label");
-		nothingLabel:SetText("-- Nothing, click on a name or a time to filter. --");
-		nothingLabel:SetFullWidth(true);
-		self.filterContainer:AddChild(nothingLabel);
+		self.filterContainer:AddChild(self:CreateNoFilterSelectedLabel());
 	end
 end

@@ -375,19 +403,22 @@ function gui:DisplayParses()
 	local encounter = self.selectedEncounter;
 	local roleId = self.selectedRole;

+	self.reportButton:SetDisabled(true);
+
 	local parsesContainer = self.highScoreParsesContainer;
 	local scrollFrame = self.highScoreParsesScrollFrame;
 	parsesContainer:ReleaseChildren();

 	if guildName and zoneId and difficultyId and encounter and roleId then
 		local parses, _ = addon.highscore:GetParses(guildName, zoneId, difficultyId, encounter, roleId);
-		parses = self:FilterParses(parses);
+		self.displayedParses = self:FilterParses(parses);

-		if #parses > 0 then
+		if #self.displayedParses > 0 then
+			self.reportButton:SetDisabled(false);
 			parsesContainer:PauseLayout();
 			scrollFrame:PauseLayout();

-			for rank, parse in ipairs(parses) do
+			for rank, parse in ipairs(self.displayedParses) do
 				local entryWidget = self:CreateHighScoreParseEntry(parse, roleId, rank);
 				parsesContainer:AddChild(entryWidget);
 			end
@@ -534,6 +565,7 @@ function gui:HideMainFrame()
 		self.highScoreTabGroup = nil;
 		self.highScoreParsesContainer = nil;
 		self.highScoreParsesScrollFrame = nil;
+		self.reportButton = nil;
 	end
 end