Initial commit
This commit is contained in:
200
third-party/mexui/Core/Entity/ControlAxis.js
vendored
Normal file
200
third-party/mexui/Core/Entity/ControlAxis.js
vendored
Normal file
@@ -0,0 +1,200 @@
|
||||
mexui.Entity.ControlAxis = function(control, isVertical, manualScrollBar, entriesPositionOffset)
|
||||
{
|
||||
this.control = control;
|
||||
this.isVertical = isVertical;
|
||||
this.manualScrollBar = manualScrollBar;
|
||||
|
||||
this.axisIndex = isVertical ? 1 : 0;
|
||||
this.entriesShown = true;
|
||||
this.entryCountShown = 15;
|
||||
this.hoveredEntryIndex = -1;
|
||||
this.entries = [];
|
||||
this.scrollBar = [];
|
||||
};
|
||||
|
||||
// model
|
||||
|
||||
// scroll bar initialization
|
||||
mexui.Entity.ControlAxis.prototype.initScrollBar = function()
|
||||
{
|
||||
if(this.isVertical)
|
||||
{
|
||||
var pos = mexui.util.addVec2(this.control.position, new Vec2(this.control.entrySize.x, this.control.entriesPositionOffset.y));
|
||||
this.scrollBar = new mexui.Control.ScrollBar(this.control.window, pos.x, pos.y, 25, this.getDisplayedEntriesLength(), true, this.control.styles.scrollBar);
|
||||
}
|
||||
else
|
||||
{
|
||||
var pos = mexui.util.addVec2(this.control.position, new Vec2(this.control.entriesPositionOffset.x, this.control.size.y));
|
||||
this.scrollBar = new mexui.Control.ScrollBar(this.control.window, pos.x, pos.y, this.getDisplayedEntriesLength(), 25, false, this.control.styles.scrollBar);
|
||||
}
|
||||
|
||||
if(this.manualScrollBar)
|
||||
this.scrollBar.shown = false;
|
||||
};
|
||||
|
||||
// add/remove entries
|
||||
mexui.Entity.ControlAxis.prototype.addEntry = function(entry)
|
||||
{
|
||||
this.entries.push(entry);
|
||||
this.checkToShowScrollBar();
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.removeAllEntries = function()
|
||||
{
|
||||
this.entries = [];
|
||||
this.checkToShowScrollBar();
|
||||
};
|
||||
|
||||
// fetch entry by position
|
||||
mexui.Entity.ControlAxis.prototype.getEntryByCursor = function()
|
||||
{
|
||||
return this.getEntryByPoint(gui.cursorPosition);
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getEntryIndexByCursor = function()
|
||||
{
|
||||
return this.getEntryIndexByPoint(gui.cursorPosition);
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getEntryByPoint = function(point)
|
||||
{
|
||||
var index = this.getEntryIndexByPoint(point);
|
||||
if(index == null)
|
||||
return null;
|
||||
return this.entries[index];
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getEntryIndexByPoint = function(point)
|
||||
{
|
||||
var screenPos = this.control.getScreenPosition();
|
||||
if(this.axisIndex == 1)
|
||||
{
|
||||
if(point.x < screenPos.x || point.x > (screenPos.x + this.control.entrySize.x))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var pos = new Vec2(screenPos.x + this.control.entriesPositionOffset.x, screenPos.y + this.control.entriesPositionOffset.y);
|
||||
var index = Math.floor((point.y - pos.y) / this.control.entrySize[this.axisIndex]);
|
||||
index += this.getEntryStartIndex();
|
||||
|
||||
if(index < 0 || index >= this.entries.length)
|
||||
return null;
|
||||
|
||||
return index;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// entries sizing
|
||||
mexui.Entity.ControlAxis.prototype.getOutsideEntriesLength = function()
|
||||
{
|
||||
return this.control.entrySize[this.axisIndex] * this.entryCountShown;
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getAllEntriesLength = function()
|
||||
{
|
||||
if(this.control.getAllEntriesLength)
|
||||
return this.control.getAllEntriesLength(this.axisIndex);
|
||||
else
|
||||
return this.getAllEntriesLength2();
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getAllEntriesLength2 = function()
|
||||
{
|
||||
return this.entries.length * this.control.entrySize[this.axisIndex];
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getDisplayedEntriesLength = function()
|
||||
{
|
||||
var sizeOffset = this.control.entriesSizeOffset[this.axisIndex];
|
||||
if(this.control.entriesOutsideControl)
|
||||
return this.getOutsideEntriesLength() + sizeOffset;
|
||||
else
|
||||
return this.control.size[this.axisIndex] + sizeOffset;
|
||||
};
|
||||
|
||||
// entry scrolling
|
||||
mexui.Entity.ControlAxis.prototype.setScrollBarManual = function(manual)
|
||||
{
|
||||
this.manualScrollBar = manual;
|
||||
|
||||
if(manual)
|
||||
{
|
||||
this.setScrollBarShown(false);
|
||||
}
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.setScrollBarShown = function(shown)
|
||||
{
|
||||
//if(axisIndex != this.axisIndex)
|
||||
// shown = false;
|
||||
|
||||
this.scrollBar.shown = shown;
|
||||
if(!shown)
|
||||
this.scrollBar.scrolledRatio = 0.0;
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.shouldDisplayScrollBar = function()
|
||||
{
|
||||
//if(axisIndex != this.axisIndex)
|
||||
// return false;
|
||||
|
||||
return this.getAllEntriesLength() > this.scrollBar.size[this.axisIndex];
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.checkToShowScrollBar = function()
|
||||
{
|
||||
if(this.manualScrollBar)
|
||||
return;
|
||||
|
||||
this.setScrollBarShown(this.shouldDisplayScrollBar(), true);
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getScrolledOffset = function()
|
||||
{
|
||||
if(this.axisIndex == 1)
|
||||
{
|
||||
if(!this.scrollBar.shown)
|
||||
return 0;
|
||||
|
||||
return this.scrollBar.scrolledRatio * this.getScrollableLength();
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getScrolledOffsetFixedStart = function()
|
||||
{
|
||||
var entryLength = this.control.entrySize[this.axisIndex];
|
||||
return Math.floor(this.getScrolledOffset() / entryLength) * entryLength;
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getScrollableLength = function()
|
||||
{
|
||||
return this.getAllEntriesLength() - this.getOutsideEntriesLength();
|
||||
};
|
||||
|
||||
// entry iteration
|
||||
mexui.Entity.ControlAxis.prototype.getEntryStartIndex = function() // inclusive
|
||||
{
|
||||
return Math.floor(this.getScrolledOffset() / this.control.entrySize[this.axisIndex]);
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getEntryEndIndex = function() // exclusive
|
||||
{
|
||||
return this.getEntryStartIndex() + this.getDisplayedEntryCount();
|
||||
};
|
||||
|
||||
mexui.Entity.ControlAxis.prototype.getDisplayedEntryCount = function()
|
||||
{
|
||||
var displayedEntriesLength = this.getDisplayedEntriesLength();
|
||||
var displayedEntryCount = Math.floor(displayedEntriesLength / this.control.entrySize[this.axisIndex]);
|
||||
return this.entries.length < displayedEntryCount ? this.entries.length : displayedEntryCount;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user