From 0b0ab1e5a451cdd6ae5fd2166314037c1997d292 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 21 May 2021 01:36:00 +0200 Subject: Jump to room when submitting notification --- src/QuickMedia.cpp | 53 +++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 815ab45..9f21c34 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -1690,29 +1690,33 @@ namespace QuickMedia { int selected_index = tabs[selected_tab].body->get_selected_item(); video_content_page(tabs[selected_tab].page.get(), static_cast(new_tabs[0].page.get()), selected_item->get_title(), false, tabs[selected_tab].body->items, selected_index, &tab_associated_data[selected_tab].fetched_page, tab_associated_data[selected_tab].update_search_text); } else if(new_tabs.size() == 1 && new_tabs[0].page->get_type() == PageTypez::CHAT) { - body_set_selected_item(tabs[selected_tab].body.get(), selected_item.get()); + MatrixChatPage *tmp_matrix_chat_page = static_cast(new_tabs[0].page.get()); + MatrixRoomsPage *rooms_page = tmp_matrix_chat_page->rooms_page; + Body *room_list_body = rooms_page->body; + rooms_page->clear_search(); + + body_set_selected_item_by_url(room_list_body, tmp_matrix_chat_page->room_id); current_page = PageType::CHAT; - current_chat_room = matrix->get_room_by_id(selected_item->url); - MatrixRoomsPage *rooms_page = static_cast(tabs[selected_tab].page.get()); + current_chat_room = matrix->get_room_by_id(tmp_matrix_chat_page->room_id); while(window.isOpen()) { auto matrix_chat_page = std::make_unique(this, current_chat_room->id, rooms_page); - bool move_room = chat_page(matrix_chat_page.get(), current_chat_room, tabs, selected_tab); + bool move_room = chat_page(matrix_chat_page.get(), current_chat_room); matrix_chat_page->messages_tab_visible = false; if(!move_room) break; - BodyItem *selected_item = tabs[selected_tab].body->get_selected(); + BodyItem *selected_item = room_list_body->get_selected(); if(!selected_item) break; current_chat_room = matrix->get_room_by_id(selected_item->url); } - tabs[selected_tab].body->body_item_select_callback = [&submit_handler](BodyItem *body_item) { + room_list_body->body_item_select_callback = [&submit_handler](BodyItem *body_item) { submit_handler(body_item->get_title()); }; - //select_body_item_by_room(tabs[selected_tab].body.get(), current_chat_room); + current_chat_room = nullptr; } else { page_loop(new_tabs, 0, after_submit_handler); @@ -3981,7 +3985,7 @@ namespace QuickMedia { return default_value; } - bool Program::chat_page(MatrixChatPage *matrix_chat_page, RoomData *current_room, std::vector &room_tabs, int room_selected_tab) { + bool Program::chat_page(MatrixChatPage *matrix_chat_page, RoomData *current_room) { assert(current_room); assert(strcmp(plugin_name, "matrix") == 0); if(!current_room) { @@ -4101,7 +4105,7 @@ namespace QuickMedia { sf::Text room_topic_text("", *FontLoader::get_font(FontLoader::FontType::LATIN), room_topic_text_height); room_topic_text.setFillColor(sf::Color(179, 179, 179)); - sf::Text room_label(room_tabs[room_selected_tab].page->get_title(), *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD), std::floor(18 * get_ui_scale())); + sf::Text room_label(matrix_chat_page->rooms_page->get_title(), *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD), std::floor(18 * get_ui_scale())); room_label.setPosition(15.0f, room_name_text_padding_y + 4.0f); sf::Sprite room_avatar_sprite; @@ -5080,7 +5084,7 @@ namespace QuickMedia { float tab_shade_height = 0.0f; SyncData sync_data; - room_tabs[room_selected_tab].body->body_item_select_callback = [&move_room](BodyItem *body_item) { + matrix_chat_page->rooms_page->body->body_item_select_callback = [&move_room](BodyItem *body_item) { move_room = true; }; @@ -5130,33 +5134,33 @@ namespace QuickMedia { } if(draw_room_list) { - if(room_tabs[room_selected_tab].body->on_event(window, event, false)) + if(matrix_chat_page->rooms_page->body->on_event(window, event, false)) idle_active_handler(); } if(event.type == sf::Event::KeyPressed && event.key.control && event.key.alt && (chat_state == ChatState::NAVIGATING || chat_state == ChatState::URL_SELECTION)) { if(event.key.code == sf::Keyboard::Up || (event.key.control && event.key.code == sf::Keyboard::K)) { - room_tabs[room_selected_tab].body->select_previous_item(); + matrix_chat_page->rooms_page->body->select_previous_item(); move_room = true; goto chat_page_end; } else if(event.key.code == sf::Keyboard::Down || (event.key.control && event.key.code == sf::Keyboard::J)) { - room_tabs[room_selected_tab].body->select_next_item(); + matrix_chat_page->rooms_page->body->select_next_item(); move_room = true; goto chat_page_end; } else if(event.key.code == sf::Keyboard::PageUp) { - room_tabs[room_selected_tab].body->select_previous_page(); + matrix_chat_page->rooms_page->body->select_previous_page(); move_room = true; goto chat_page_end; } else if(event.key.code == sf::Keyboard::PageDown) { - room_tabs[room_selected_tab].body->select_next_page(); + matrix_chat_page->rooms_page->body->select_next_page(); move_room = true; goto chat_page_end; } else if(event.key.code == sf::Keyboard::Home) { - room_tabs[room_selected_tab].body->select_first_item(); + matrix_chat_page->rooms_page->body->select_first_item(); move_room = true; goto chat_page_end; } else if(event.key.code == sf::Keyboard::End) { - room_tabs[room_selected_tab].body->select_last_item(); + matrix_chat_page->rooms_page->body->select_last_item(); move_room = true; goto chat_page_end; } else if(event.key.code == sf::Keyboard::Escape) { @@ -5667,7 +5671,7 @@ namespace QuickMedia { window.draw(room_label); const float padding_x = std::floor(10.0f * get_ui_scale()); const float tab_y = std::floor(tab_vertical_offset) + room_name_padding_y; - room_tabs[room_selected_tab].body->draw(window, sf::Vector2f(padding_x, tab_y), sf::Vector2f(this->body_size.x - padding_x * 2.0f, window_size.y - tab_y), Json::Value::nullSingleton()); + matrix_chat_page->rooms_page->body->draw(window, sf::Vector2f(padding_x, tab_y), sf::Vector2f(this->body_size.x - padding_x * 2.0f, window_size.y - tab_y), Json::Value::nullSingleton()); glDisable(GL_SCISSOR_TEST); } @@ -5893,15 +5897,16 @@ namespace QuickMedia { if(!window.isOpen()) exit(exit_code); - auto notifications_body = create_body(); - //notifications_body->attach_side = AttachSide::BOTTOM; - auto matrix_notifications_page = std::make_unique(this, matrix, notifications_body.get()); - auto rooms_tags_body = create_body(); auto matrix_rooms_tag_page = std::make_unique(this, rooms_tags_body.get()); auto rooms_body = create_body(); - auto matrix_rooms_page = std::make_unique(this, rooms_body.get(), "All rooms", nullptr); + auto rooms_page_search_bar = create_search_bar("Search...", SEARCH_DELAY_FILTER); + auto matrix_rooms_page = std::make_unique(this, rooms_body.get(), "All rooms", nullptr, rooms_page_search_bar.get()); + + auto notifications_body = create_body(); + //notifications_body->attach_side = AttachSide::BOTTOM; + auto matrix_notifications_page = std::make_unique(this, matrix, notifications_body.get(), matrix_rooms_page.get()); auto invites_body = create_body(); auto matrix_invites_page = std::make_unique(this, matrix, invites_body.get()); @@ -5936,7 +5941,7 @@ namespace QuickMedia { std::vector tabs; tabs.push_back(Tab{std::move(notifications_body), std::move(matrix_notifications_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); tabs.push_back(Tab{std::move(rooms_tags_body), std::move(matrix_rooms_tag_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); - tabs.push_back(Tab{std::move(rooms_body), std::move(matrix_rooms_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); + tabs.push_back(Tab{std::move(rooms_body), std::move(matrix_rooms_page), std::move(rooms_page_search_bar)}); tabs.push_back(Tab{std::move(invites_body), std::move(matrix_invites_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); tabs.push_back(Tab{std::move(room_directory_body), std::move(matrix_room_directory_page), create_search_bar("Server to search on...", SEARCH_DELAY_FILTER)}); -- cgit v1.2.3