Skip to content
Snippets Groups Projects
ChatPage.h 3.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    /*
     * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     */
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    #include <QPixmap>
    #include <QTimer>
    #include <QWidget>
    
    
    #include "Cache.h"
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include "MatrixClient.h"
    
    #include "QuickSwitcher.h"
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include "RoomList.h"
    
    #include "RoomSettings.h"
    
    #include "RoomState.h"
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include "Splitter.h"
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include "TextInputWidget.h"
    
    #include "TimelineViewManager.h"
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include "TopRoomBar.h"
    #include "UserInfoWidget.h"
    
    class ChatPage : public QWidget
    {
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    public:
    
            ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent = 0);
            ~ChatPage();
    
            // Initialize all the components of the UI.
            void bootstrap(QString userid, QString homeserver, QString token);
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    signals:
    
            void contentLoaded();
            void close();
            void changeWindowTitle(const QString &msg);
            void unreadMessages(int count);
    
            void showUnreadMessageNotification(int count);
            void updateTopBarAvatar(const QString &roomid, const QPixmap &img);
            void updateOwnProfileInfo(const QUrl &avatar_url, const QString &display_name);
            void setOwnAvatar(const QPixmap &img);
            void initialSyncCompleted(const SyncResponse &response);
            void syncCompleted(const SyncResponse &response);
            void syncFailed(const QString &msg);
            void changeTopRoomInfo(const QString &room_id);
            void startSync();
            void logout();
    
    protected:
    
            void keyPressEvent(QKeyEvent *event) override;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    private:
    
            void updateDisplayNames(const RoomState &state);
            void loadStateFromCache();
            void showQuickSwitcher();
    
            QHBoxLayout *topLayout_;
            Splitter *splitter;
    
            QWidget *sideBar_;
            QVBoxLayout *sideBarLayout_;
            QVBoxLayout *sideBarTopLayout_;
            QVBoxLayout *sideBarMainLayout_;
            QWidget *sideBarTopWidget_;
            QVBoxLayout *sideBarTopWidgetLayout_;
    
            QWidget *content_;
            QVBoxLayout *contentLayout_;
            QHBoxLayout *topBarLayout_;
            QVBoxLayout *mainContentLayout_;
    
            RoomList *room_list_;
            TimelineViewManager *view_manager_;
    
            TopRoomBar *top_bar_;
            TextInputWidget *text_input_;
    
            QTimer *sync_timer_;
            int sync_interval_;
    
            QString current_room_;
            QMap<QString, QPixmap> room_avatars_;
    
            QMap<QString, RoomState> state_manager_;
            QMap<QString, QSharedPointer<RoomSettings>> settingsManager_;
    
            QuickSwitcher *quickSwitcher_     = nullptr;
            OverlayModal *quickSwitcherModal_ = nullptr;
    
            // Matrix Client API provider.
            QSharedPointer<MatrixClient> client_;
    
            // LMDB wrapper.
            QSharedPointer<Cache> cache_;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    };