Fix opening a room in a new window.
Fix opening a room in a new window. This is done by makeing the model top level parameters in RoomPage set from RoomManager but overwritten by RoomWindow
This commit is contained in:
@@ -21,6 +21,45 @@ Kirigami.Page {
|
|||||||
property NeoChatRoom currentRoom: RoomManager.currentRoom
|
property NeoChatRoom currentRoom: RoomManager.currentRoom
|
||||||
|
|
||||||
required property NeoChatConnection connection
|
required property NeoChatConnection connection
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The MessageEventModel to use.
|
||||||
|
*
|
||||||
|
* Required so that new events can be requested when the end of the current
|
||||||
|
* local timeline is reached.
|
||||||
|
*
|
||||||
|
* @note For loading a room in a different window, override this with a new
|
||||||
|
* MessageEventModel set with the room to be shown.
|
||||||
|
*
|
||||||
|
* @sa MessageEventModel
|
||||||
|
*/
|
||||||
|
property MessageEventModel messageEventModel: RoomManager.messageEventModel
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The MessageFilterModel to use.
|
||||||
|
*
|
||||||
|
* This model has the filtered list of events that should be shown in the timeline.
|
||||||
|
*
|
||||||
|
* @note For loading a room in a different window, override this with a new
|
||||||
|
* MessageFilterModel with the new MessageEventModel as the source model.
|
||||||
|
*
|
||||||
|
* @sa MessageEventModel, MessageFilterModel
|
||||||
|
*/
|
||||||
|
property MessageFilterModel messageFilterModel: RoomManager.messageFilterModel
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The MediaMessageFilterModel to use.
|
||||||
|
*
|
||||||
|
* This model has the filtered list of media events that should be shown in
|
||||||
|
* the timeline.
|
||||||
|
*
|
||||||
|
* @note For loading a room in a different window, override this with a new
|
||||||
|
* MediaMessageFilterModel with the new MessageFilterModel as the source model.
|
||||||
|
*
|
||||||
|
* @sa MessageEventModel, MessageFilterModel
|
||||||
|
*/
|
||||||
|
property MediaMessageFilterModel mediaMessageFilterModel: RoomManager.mediaMessageFilterModel
|
||||||
|
|
||||||
property bool loading: !root.currentRoom || (root.currentRoom.timelineSize === 0 && !root.currentRoom.allHistoryLoaded)
|
property bool loading: !root.currentRoom || (root.currentRoom.timelineSize === 0 && !root.currentRoom.allHistoryLoaded)
|
||||||
|
|
||||||
/// Disable cancel shortcut. Used by the separate window since it provides its own cancel implementation.
|
/// Disable cancel shortcut. Used by the separate window since it provides its own cancel implementation.
|
||||||
@@ -73,6 +112,8 @@ Kirigami.Page {
|
|||||||
sourceComponent: TimelineView {
|
sourceComponent: TimelineView {
|
||||||
id: timelineView
|
id: timelineView
|
||||||
currentRoom: root.currentRoom
|
currentRoom: root.currentRoom
|
||||||
|
messageEventModel: root.messageEventModel
|
||||||
|
messageFilterModel: root.messageFilterModel
|
||||||
onFocusChatBox: {
|
onFocusChatBox: {
|
||||||
if (chatBoxLoader.item) {
|
if (chatBoxLoader.item) {
|
||||||
chatBoxLoader.item.forceActiveFocus()
|
chatBoxLoader.item.forceActiveFocus()
|
||||||
@@ -234,6 +275,17 @@ Kirigami.Page {
|
|||||||
});
|
});
|
||||||
contextMenu.open();
|
contextMenu.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onShowMaximizedMedia(index) {
|
||||||
|
var popup = maximizeComponent.createObject(QQC2.ApplicationWindow.overlay, {
|
||||||
|
initialIndex: index
|
||||||
|
})
|
||||||
|
popup.closed.connect(() => {
|
||||||
|
messageListView.interactive = true
|
||||||
|
popup.destroy()
|
||||||
|
})
|
||||||
|
popup.open()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showUserDetail(user) {
|
function showUserDetail(user) {
|
||||||
@@ -261,4 +313,12 @@ Kirigami.Page {
|
|||||||
connection: root.connection
|
connection: root.connection
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: maximizeComponent
|
||||||
|
NeochatMaximizeComponent {
|
||||||
|
currentRoom: root.currentRoom
|
||||||
|
model: root.mediaMessageFilterModel
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,21 @@ Kirigami.ApplicationWindow {
|
|||||||
onActivated: root.close()
|
onActivated: root.close()
|
||||||
}
|
}
|
||||||
pageStack.initialPage: RoomPage {
|
pageStack.initialPage: RoomPage {
|
||||||
|
id: roomPage
|
||||||
visible: true
|
visible: true
|
||||||
currentRoom: root.currentRoom
|
currentRoom: root.currentRoom
|
||||||
disableCancelShortcut: true
|
disableCancelShortcut: true
|
||||||
connection: root.connection
|
connection: root.connection
|
||||||
|
|
||||||
|
messageEventModel: MessageEventModel {
|
||||||
|
room: currentRoom
|
||||||
|
}
|
||||||
|
messageFilterModel: MessageFilterModel {
|
||||||
|
sourceModel: roomPage.messageEventModel
|
||||||
|
}
|
||||||
|
mediaMessageFilterModel: MediaMessageFilterModel {
|
||||||
|
sourceModel: roomPage.messageFilterModel
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onCurrentRoomChanged: if (!currentRoom) {
|
onCurrentRoomChanged: if (!currentRoom) {
|
||||||
|
|||||||
@@ -25,6 +25,22 @@ QQC2.ScrollView {
|
|||||||
hasScrolledUpBefore = false;
|
hasScrolledUpBefore = false;
|
||||||
}
|
}
|
||||||
property bool roomChanging: false
|
property bool roomChanging: false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The MessageEventModel to use.
|
||||||
|
*
|
||||||
|
* Required so that new events can be requested when the end of the current
|
||||||
|
* local timeline is reached.
|
||||||
|
*/
|
||||||
|
required property MessageEventModel messageEventModel
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The MessageFilterModel to use.
|
||||||
|
*
|
||||||
|
* This model has the filtered list of events that should be shown in the timeline.
|
||||||
|
*/
|
||||||
|
required property MessageFilterModel messageFilterModel
|
||||||
|
|
||||||
readonly property bool atYEnd: messageListView.atYEnd
|
readonly property bool atYEnd: messageListView.atYEnd
|
||||||
|
|
||||||
/// Used to determine if scrolling to the bottom should mark the message as unread
|
/// Used to determine if scrolling to the bottom should mark the message as unread
|
||||||
@@ -49,23 +65,23 @@ QQC2.ScrollView {
|
|||||||
interactive: Kirigami.Settings.isMobile
|
interactive: Kirigami.Settings.isMobile
|
||||||
bottomMargin: Kirigami.Units.largeSpacing + Math.round(Kirigami.Theme.defaultFont.pointSize * 2)
|
bottomMargin: Kirigami.Units.largeSpacing + Math.round(Kirigami.Theme.defaultFont.pointSize * 2)
|
||||||
|
|
||||||
model: RoomManager.messageFilterModel
|
model: root.messageFilterModel
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
interval: 1000
|
interval: 1000
|
||||||
running: messageListView.atYBeginning
|
running: messageListView.atYBeginning
|
||||||
triggeredOnStart: true
|
triggeredOnStart: true
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
if (messageListView.atYBeginning && RoomManager.messageEventModel.canFetchMore(RoomManager.messageEventModel.index(0, 0))) {
|
if (messageListView.atYBeginning && root.messageEventModel.canFetchMore(root.messageEventModel.index(0, 0))) {
|
||||||
RoomManager.messageEventModel.fetchMore(RoomManager.messageEventModel.index(0, 0));
|
root.messageEventModel.fetchMore(root.messageEventModel.index(0, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
repeat: true
|
repeat: true
|
||||||
}
|
}
|
||||||
|
|
||||||
// HACK: The view should do this automatically but doesn't.
|
// HACK: The view should do this automatically but doesn't.
|
||||||
onAtYBeginningChanged: if (atYBeginning && RoomManager.messageEventModel.canFetchMore(RoomManager.messageEventModel.index(0, 0))) {
|
onAtYBeginningChanged: if (atYBeginning && root.messageEventModel.canFetchMore(root.messageEventModel.index(0, 0))) {
|
||||||
RoomManager.messageEventModel.fetchMore(RoomManager.messageEventModel.index(0, 0));
|
root.messageEventModel.fetchMore(root.messageEventModel.index(0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
@@ -242,7 +258,7 @@ QQC2.ScrollView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: RoomManager.messageEventModel
|
target: root.messageEventModel
|
||||||
|
|
||||||
function onRowsInserted() {
|
function onRowsInserted() {
|
||||||
markReadIfVisibleTimer.restart()
|
markReadIfVisibleTimer.restart()
|
||||||
@@ -283,7 +299,7 @@ QQC2.ScrollView {
|
|||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
//enabled: Config.showFancyEffects
|
//enabled: Config.showFancyEffects
|
||||||
target: RoomManager.messageEventModel
|
target: root.messageEventModel
|
||||||
|
|
||||||
function onFancyEffectsReasonFound(fancyEffect) {
|
function onFancyEffectsReasonFound(fancyEffect) {
|
||||||
fancyEffectsContainer.processFancyEffectsReason(fancyEffect)
|
fancyEffectsContainer.processFancyEffectsReason(fancyEffect)
|
||||||
@@ -301,32 +317,6 @@ QQC2.ScrollView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
|
||||||
id: maximizeComponent
|
|
||||||
NeochatMaximizeComponent {
|
|
||||||
currentRoom: root.currentRoom
|
|
||||||
model: RoomManager.mediaMessageFilterModel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: RoomManager
|
|
||||||
function onShowMaximizedMedia(index) {
|
|
||||||
messageListView.showMaximizedMedia(index)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showMaximizedMedia(index) {
|
|
||||||
var popup = maximizeComponent.createObject(QQC2.ApplicationWindow.overlay, {
|
|
||||||
initialIndex: index
|
|
||||||
})
|
|
||||||
popup.closed.connect(() => {
|
|
||||||
messageListView.interactive = true
|
|
||||||
popup.destroy()
|
|
||||||
})
|
|
||||||
popup.open()
|
|
||||||
}
|
|
||||||
|
|
||||||
function goToLastMessage() {
|
function goToLastMessage() {
|
||||||
root.currentRoom.markAllMessagesAsRead()
|
root.currentRoom.markAllMessagesAsRead()
|
||||||
// scroll to the very end, i.e to messageListView.YEnd
|
// scroll to the very end, i.e to messageListView.YEnd
|
||||||
@@ -334,10 +324,10 @@ QQC2.ScrollView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function eventToIndex(eventID) {
|
function eventToIndex(eventID) {
|
||||||
const index = RoomManager.messageEventModel.eventIdToRow(eventID)
|
const index = root.messageEventModel.eventIdToRow(eventID)
|
||||||
if (index === -1)
|
if (index === -1)
|
||||||
return -1
|
return -1
|
||||||
return RoomManager.messageFilterModel.mapFromSource(RoomManager.messageEventModel.index(index, 0)).row
|
return root.messageFilterModel.mapFromSource(root.messageEventModel.index(index, 0)).row
|
||||||
}
|
}
|
||||||
|
|
||||||
function firstVisibleIndex() {
|
function firstVisibleIndex() {
|
||||||
|
|||||||
Reference in New Issue
Block a user