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
|
||||
var _buffersList = [];
|
||||
|
||||
// ListModel for BufferList
|
||||
// ListModel for BufferList.qml, will be kept in sync with _buffersList
|
||||
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
|
||||
var _parentPage = null;
|
||||
|
||||
|
||||
|
||||
// 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.number = number;
|
||||
this.full_name = full_name;
|
||||
this.name = name;
|
||||
this.title = title;
|
||||
this.visible = false;
|
||||
|
@ -84,7 +77,7 @@ function Buffer(pointer, number, name, title) {
|
|||
if (!this.active) {
|
||||
++this.unreadCount;
|
||||
|
||||
_callChangeCallback(this);
|
||||
_updateBufferInList(this);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -100,7 +93,7 @@ function Buffer(pointer, number, name, title) {
|
|||
if (!this.inited && this.pointer !== '0') {
|
||||
var self = this;
|
||||
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;
|
||||
lines.reverse();
|
||||
handleLines(lines);
|
||||
|
@ -110,6 +103,7 @@ function Buffer(pointer, number, name, title) {
|
|||
this.active = true;
|
||||
this.inited = true;
|
||||
this.unreadCount = 0;
|
||||
_updateBufferInList(this);
|
||||
}
|
||||
|
||||
// This buffer will be hidden from the user
|
||||
|
@ -119,7 +113,7 @@ function Buffer(pointer, number, name, title) {
|
|||
|
||||
// Send input into this buffer
|
||||
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;
|
||||
|
||||
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;
|
||||
_buffersList.push(buffer);
|
||||
|
||||
_buffersListModel.append({
|
||||
pointer: pointer,
|
||||
number: 1,
|
||||
name: 'weechat',
|
||||
unreadCount: 0
|
||||
});
|
||||
_buffersListModel.append(_bufferToModel(buffer));
|
||||
|
||||
_callRefreshCallback();
|
||||
D.setDebugBuffer(buffer);
|
||||
page.changeBuffer(buffer);
|
||||
}
|
||||
|
@ -198,6 +186,7 @@ function bufferListData(data) {
|
|||
var pointer = buffers[i]['__path'][0];
|
||||
var number = buffers[i].number;
|
||||
var name = buffers[i].short_name;
|
||||
var full_name = buffers[i].full_name;
|
||||
var title = buffers[i].title;
|
||||
var buffer = null;
|
||||
|
||||
|
@ -211,25 +200,20 @@ function bufferListData(data) {
|
|||
_buffers[pointer] = _buffers['0'];
|
||||
buffer = _buffers['0'];
|
||||
buffer.pointer = pointer;
|
||||
buffer.full_name = full_name;
|
||||
buffer.name = name;
|
||||
buffer.title = title;
|
||||
buffer.number = number;
|
||||
}
|
||||
else {
|
||||
buffer = new Buffer(pointer, number, name, title);
|
||||
buffer = new Buffer(pointer, number, full_name, name, title);
|
||||
_buffers[pointer] = buffer;
|
||||
_buffersList.push(buffer);
|
||||
_buffersListModel.append({
|
||||
pointer: pointer,
|
||||
number: number,
|
||||
name: name,
|
||||
unreadCount: 0
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_sortBuffersList();
|
||||
_callRefreshCallback();
|
||||
_regenerateBufferList();
|
||||
}
|
||||
|
||||
// Handle a single line
|
||||
|
@ -252,20 +236,48 @@ function lineAdded(data) {
|
|||
handleLines(data[0].objectSets);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Keep the buffer list sorted
|
||||
function _sortBuffersList() {
|
||||
_buffersList.sort(function (a, b) {
|
||||
return a.number - b.number;
|
||||
});
|
||||
}
|
||||
|
||||
function _callChangeCallback(o) {
|
||||
if (!!_bufferChangedCallback) {
|
||||
_bufferChangedCallback(o);
|
||||
// Convert a buffer object into an object insertable into a ListModel
|
||||
function _bufferToModel(buffer) {
|
||||
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() {
|
||||
if (!!_bufferListRefreshCallback) {
|
||||
_bufferListRefreshCallback();
|
||||
// Regenerate _buffersListModel based on _buffersList
|
||||
function _regenerateBufferList() {
|
||||
_buffersListModel.clear();
|
||||
|
||||
for (var i = 0; i < _buffersList.length; ++i) {
|
||||
var modelObject = _bufferToModel(_buffersList[i]);
|
||||
_buffersListModel.append(modelObject);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,34 +44,45 @@ Page {
|
|||
});
|
||||
}
|
||||
|
||||
Row {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: Theme.paddingLarge
|
||||
GlassItem {
|
||||
id: readIndicator
|
||||
opacity: unreadCount > 0 ? 1.0 : 0.0;
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: -Theme.paddingLarge
|
||||
//anchors.top: parent.top
|
||||
//anchors.topMargin: -Theme.paddingLarge
|
||||
//anchors.bottom: parent.bottom
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Label {
|
||||
id: bufferNumber
|
||||
text: number
|
||||
color: listItem.highlighted ? Theme.secondaryHighlightColor
|
||||
: Theme.secondaryColor;
|
||||
|
||||
width: parent.width / 7
|
||||
anchors {
|
||||
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;
|
||||
}
|
||||
|
||||
Label {
|
||||
text: unreadCount
|
||||
color: listItem.highlighted ? Theme.highlightColor
|
||||
: Theme.primaryColor;
|
||||
anchors {
|
||||
left: bufferNumber.right
|
||||
leftMargin: Theme.paddingLarge
|
||||
right: parent.right
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue