More robust bufferlist, including read indicator and live refresh
This commit is contained in:
parent
c227efa2e6
commit
c0428c6181
2 changed files with 82 additions and 59 deletions
|
@ -43,26 +43,19 @@ var _buffers = {};
|
||||||
// according to buffer number whenever requested
|
// according to buffer number whenever requested
|
||||||
var _buffersList = [];
|
var _buffersList = [];
|
||||||
|
|
||||||
// ListModel for BufferList
|
// ListModel for BufferList.qml, will be kept in sync with _buffersList
|
||||||
var _buffersListModel = null;
|
var _buffersListModel = null;
|
||||||
|
|
||||||
// Call this function whenever the buffer list needs to be refreshed
|
|
||||||
// completely
|
|
||||||
var _bufferListRefreshCallback = null;
|
|
||||||
|
|
||||||
// Call this function whenever a single buffer has been changed
|
|
||||||
// (no need to refresh)
|
|
||||||
var _bufferChangedCallback = null;
|
|
||||||
|
|
||||||
// Page that will own all of our textlistmodels
|
// Page that will own all of our textlistmodels
|
||||||
var _parentPage = null;
|
var _parentPage = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// A class for storing the information of a single buffer
|
// A class for storing the information of a single buffer
|
||||||
function Buffer(pointer, number, name, title) {
|
function Buffer(pointer, number, full_name, name, title) {
|
||||||
this.pointer = pointer;
|
this.pointer = pointer;
|
||||||
this.number = number;
|
this.number = number;
|
||||||
|
this.full_name = full_name;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
|
@ -84,7 +77,7 @@ function Buffer(pointer, number, name, title) {
|
||||||
if (!this.active) {
|
if (!this.active) {
|
||||||
++this.unreadCount;
|
++this.unreadCount;
|
||||||
|
|
||||||
_callChangeCallback(this);
|
_updateBufferInList(this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,7 +93,7 @@ function Buffer(pointer, number, name, title) {
|
||||||
if (!this.inited && this.pointer !== '0') {
|
if (!this.inited && this.pointer !== '0') {
|
||||||
var self = this;
|
var self = this;
|
||||||
var lines = this.textList.count;
|
var lines = this.textList.count;
|
||||||
EQ.command('hdata buffer:0x' + this.pointer + '/own_lines/last_line(-' + (lines + 100) + ')/data', function(result) {
|
EQ.command('hdata buffer:' + this.full_name + '/own_lines/last_line(-' + (lines + 100) + ')/data', function(result) {
|
||||||
var lines = result[0].objectSets;
|
var lines = result[0].objectSets;
|
||||||
lines.reverse();
|
lines.reverse();
|
||||||
handleLines(lines);
|
handleLines(lines);
|
||||||
|
@ -110,6 +103,7 @@ function Buffer(pointer, number, name, title) {
|
||||||
this.active = true;
|
this.active = true;
|
||||||
this.inited = true;
|
this.inited = true;
|
||||||
this.unreadCount = 0;
|
this.unreadCount = 0;
|
||||||
|
_updateBufferInList(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This buffer will be hidden from the user
|
// This buffer will be hidden from the user
|
||||||
|
@ -119,7 +113,7 @@ function Buffer(pointer, number, name, title) {
|
||||||
|
|
||||||
// Send input into this buffer
|
// Send input into this buffer
|
||||||
this.input = function(str) {
|
this.input = function(str) {
|
||||||
EQ.command('input 0x' + this.pointer + ' ' + str);
|
EQ.command('input ' + this.full_name + ' ' + str);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,18 +132,12 @@ function setDebugPage(page) {
|
||||||
_parentPage = page;
|
_parentPage = page;
|
||||||
|
|
||||||
var pointer = '0';
|
var pointer = '0';
|
||||||
var buffer = new Buffer(pointer, 1, 'weechat', 'Debug/core');
|
var buffer = new Buffer(pointer, 1, 'core.weechat', 'weechat', 'Debug/core');
|
||||||
_buffers[pointer] = buffer;
|
_buffers[pointer] = buffer;
|
||||||
_buffersList.push(buffer);
|
_buffersList.push(buffer);
|
||||||
|
|
||||||
_buffersListModel.append({
|
_buffersListModel.append(_bufferToModel(buffer));
|
||||||
pointer: pointer,
|
|
||||||
number: 1,
|
|
||||||
name: 'weechat',
|
|
||||||
unreadCount: 0
|
|
||||||
});
|
|
||||||
|
|
||||||
_callRefreshCallback();
|
|
||||||
D.setDebugBuffer(buffer);
|
D.setDebugBuffer(buffer);
|
||||||
page.changeBuffer(buffer);
|
page.changeBuffer(buffer);
|
||||||
}
|
}
|
||||||
|
@ -198,6 +186,7 @@ function bufferListData(data) {
|
||||||
var pointer = buffers[i]['__path'][0];
|
var pointer = buffers[i]['__path'][0];
|
||||||
var number = buffers[i].number;
|
var number = buffers[i].number;
|
||||||
var name = buffers[i].short_name;
|
var name = buffers[i].short_name;
|
||||||
|
var full_name = buffers[i].full_name;
|
||||||
var title = buffers[i].title;
|
var title = buffers[i].title;
|
||||||
var buffer = null;
|
var buffer = null;
|
||||||
|
|
||||||
|
@ -211,25 +200,20 @@ function bufferListData(data) {
|
||||||
_buffers[pointer] = _buffers['0'];
|
_buffers[pointer] = _buffers['0'];
|
||||||
buffer = _buffers['0'];
|
buffer = _buffers['0'];
|
||||||
buffer.pointer = pointer;
|
buffer.pointer = pointer;
|
||||||
|
buffer.full_name = full_name;
|
||||||
buffer.name = name;
|
buffer.name = name;
|
||||||
buffer.title = title;
|
buffer.title = title;
|
||||||
buffer.number = number;
|
buffer.number = number;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
buffer = new Buffer(pointer, number, name, title);
|
buffer = new Buffer(pointer, number, full_name, name, title);
|
||||||
_buffers[pointer] = buffer;
|
_buffers[pointer] = buffer;
|
||||||
_buffersList.push(buffer);
|
_buffersList.push(buffer);
|
||||||
_buffersListModel.append({
|
|
||||||
pointer: pointer,
|
|
||||||
number: number,
|
|
||||||
name: name,
|
|
||||||
unreadCount: 0
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_sortBuffersList();
|
_sortBuffersList();
|
||||||
_callRefreshCallback();
|
_regenerateBufferList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle a single line
|
// Handle a single line
|
||||||
|
@ -252,20 +236,48 @@ function lineAdded(data) {
|
||||||
handleLines(data[0].objectSets);
|
handleLines(data[0].objectSets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Keep the buffer list sorted
|
||||||
function _sortBuffersList() {
|
function _sortBuffersList() {
|
||||||
_buffersList.sort(function (a, b) {
|
_buffersList.sort(function (a, b) {
|
||||||
return a.number - b.number;
|
return a.number - b.number;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function _callChangeCallback(o) {
|
// Convert a buffer object into an object insertable into a ListModel
|
||||||
if (!!_bufferChangedCallback) {
|
function _bufferToModel(buffer) {
|
||||||
_bufferChangedCallback(o);
|
return {
|
||||||
|
pointer: buffer.pointer,
|
||||||
|
number: buffer.number,
|
||||||
|
name: buffer.name,
|
||||||
|
unreadCount: buffer.unreadCount
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the given buffer in the list
|
||||||
|
// If the given buffer is not in the list, nothing is done
|
||||||
|
function _updateBufferInList(buffer) {
|
||||||
|
var modelObject = _bufferToModel(buffer);
|
||||||
|
var bufferCount = _buffersListModel.count;
|
||||||
|
|
||||||
|
for (var i = 0; i < bufferCount; ++i) {
|
||||||
|
var bufferAt = _buffersListModel.get(i);
|
||||||
|
|
||||||
|
if (bufferAt.number === modelObject.number) {
|
||||||
|
_buffersListModel.set(i, modelObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _callRefreshCallback() {
|
// Regenerate _buffersListModel based on _buffersList
|
||||||
if (!!_bufferListRefreshCallback) {
|
function _regenerateBufferList() {
|
||||||
_bufferListRefreshCallback();
|
_buffersListModel.clear();
|
||||||
|
|
||||||
|
for (var i = 0; i < _buffersList.length; ++i) {
|
||||||
|
var modelObject = _bufferToModel(_buffersList[i]);
|
||||||
|
_buffersListModel.append(modelObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,34 +44,45 @@ Page {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Row {
|
GlassItem {
|
||||||
|
id: readIndicator
|
||||||
|
opacity: unreadCount > 0 ? 1.0 : 0.0;
|
||||||
|
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: -Theme.paddingLarge
|
||||||
|
//anchors.top: parent.top
|
||||||
|
//anchors.topMargin: -Theme.paddingLarge
|
||||||
|
//anchors.bottom: parent.bottom
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
spacing: Theme.paddingLarge
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: bufferNumber
|
||||||
|
text: number
|
||||||
|
color: listItem.highlighted ? Theme.secondaryHighlightColor
|
||||||
|
: Theme.secondaryColor;
|
||||||
|
|
||||||
anchors {
|
anchors {
|
||||||
left: parent.left
|
left: readIndicator.right
|
||||||
|
leftMargin: -2 * Theme.paddingLarge
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
width: Theme.itemSizeSmall
|
||||||
|
horizontalAlignment: Qt.AlignRight
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: bufferName
|
||||||
|
text: name
|
||||||
|
color: listItem.highlighted ? Theme.highlightColor
|
||||||
|
: Theme.primaryColor;
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
left: bufferNumber.right
|
||||||
|
leftMargin: Theme.paddingLarge
|
||||||
right: parent.right
|
right: parent.right
|
||||||
}
|
verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
Label {
|
|
||||||
text: number
|
|
||||||
color: listItem.highlighted ? Theme.secondaryHighlightColor
|
|
||||||
: Theme.secondaryColor;
|
|
||||||
|
|
||||||
width: parent.width / 7
|
|
||||||
horizontalAlignment: Qt.AlignRight
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: name
|
|
||||||
color: listItem.highlighted ? Theme.highlightColor
|
|
||||||
: Theme.primaryColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: unreadCount
|
|
||||||
color: listItem.highlighted ? Theme.highlightColor
|
|
||||||
: Theme.primaryColor;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue