1 /************************************************************************** 2 * Otter Browser: Web browser controlled by the user, not vice-versa. 3 * Copyright (C) 2015 - 2018 Michal Dutkiewicz aka Emdek <michal@emdek.pl> 4 * Copyright (C) 2016 Piotr Wójcik <chocimier@tlen.pl> 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * 19 **************************************************************************/ 20 21 #ifndef OTTER_TOOLBARWIDGET_H 22 #define OTTER_TOOLBARWIDGET_H 23 24 #include "../core/BookmarksModel.h" 25 #include "../core/SessionsManager.h" 26 #include "../core/ToolBarsManager.h" 27 28 #include <QtCore/QMimeData> 29 #include <QtWidgets/QMenu> 30 #include <QtWidgets/QPushButton> 31 #include <QtWidgets/QToolBar> 32 33 namespace Otter 34 { 35 36 class MainWindow; 37 class SidebarWidget; 38 class TabBarWidget; 39 class Window; 40 41 class ToolBarWidget : public QToolBar 42 { 43 Q_OBJECT 44 45 public: 46 explicit ToolBarWidget(int identifier, Window *window, QWidget *parent); 47 48 static QMenu* createCustomizationMenu(int identifier, QVector<QAction*> actions = {}, QWidget *parent = nullptr); 49 void setDefinition(const ToolBarsManager::ToolBarDefinition &definition); 50 void setState(const ToolBarState &state); 51 MainWindow* getMainWindow() const; 52 Window* getWindow() const; 53 QString getTitle() const; 54 ToolBarsManager::ToolBarDefinition getDefinition() const; 55 ToolBarState getState() const; 56 QVector<QPointer<QWidget> > getAddressFields() const; 57 QVector<QPointer<QWidget> > getSearchFields() const; 58 Qt::ToolBarArea getArea() const; 59 Qt::ToolButtonStyle getButtonStyle() const; 60 int getIdentifier() const; 61 int getIconSize() const; 62 int getMaximumButtonSize() const; 63 static bool calculateShouldBeVisible(const ToolBarsManager::ToolBarDefinition &definition, const ToolBarState &state, ToolBarsManager::ToolBarsMode mode); 64 bool canDrop(QDropEvent *event) const; 65 bool isCollapsed() const; 66 virtual bool shouldBeVisible(ToolBarsManager::ToolBarsMode mode) const; 67 bool event(QEvent *event) override; 68 69 public slots: 70 void reload(); 71 void resetGeometry(); 72 void setArea(Qt::ToolBarArea area); 73 74 protected: 75 void timerEvent(QTimerEvent *event) override; 76 void changeEvent(QEvent *event) override; 77 void paintEvent(QPaintEvent *event) override; 78 void showEvent(QShowEvent *event) override; 79 void resizeEvent(QResizeEvent *event) override; 80 void enterEvent(QEvent *event) override; 81 void leaveEvent(QEvent *event) override; 82 void contextMenuEvent(QContextMenuEvent *event) override; 83 void mousePressEvent(QMouseEvent *event) override; 84 void mouseMoveEvent(QMouseEvent *event) override; 85 void mouseReleaseEvent(QMouseEvent *event) override; 86 void dragEnterEvent(QDragEnterEvent *event) override; 87 void dragMoveEvent(QDragMoveEvent *event) override; 88 void dragLeaveEvent(QDragLeaveEvent *event) override; 89 void dropEvent(QDropEvent *event) override; 90 virtual void clearEntries(); 91 virtual void populateEntries(); 92 void updateDropIndex(const QPoint &position); 93 void updateToggleGeometry(); 94 void setAddressFields(QVector<QPointer<QWidget> > addressFields); 95 void setSearchFields(QVector<QPointer<QWidget> > searchFields); 96 bool isDragHandle(const QPoint &position) const; 97 98 protected slots: 99 void scheduleBookmarksReload(); 100 void loadBookmarks(); 101 void toggleVisibility(); 102 void notifyWindowChanged(quint64 identifier); 103 void handleToolBarModified(int identifier); 104 void handleToolBarRemoved(int identifier); 105 void handleBookmarkModified(BookmarksModel::Bookmark *bookmark); 106 void handleBookmarkMoved(BookmarksModel::Bookmark *bookmark, BookmarksModel::Bookmark *previousParent); 107 void handleBookmarkRemoved(BookmarksModel::Bookmark *bookmark, BookmarksModel::Bookmark *previousParent); 108 void handleFullScreenStateChanged(bool isFullScreen); 109 void setToolBarLocked(bool locked); 110 111 private: 112 MainWindow *m_mainWindow; 113 Window *m_window; 114 SidebarWidget *m_sidebarWidget; 115 BookmarksModel::Bookmark *m_bookmark; 116 BookmarksModel::Bookmark *m_dropBookmark; 117 QPushButton *m_toggleButton; 118 QPoint m_dragStartPosition; 119 QVector<QPointer<QWidget> > m_addressFields; 120 QVector<QPointer<QWidget> > m_searchFields; 121 ToolBarState m_state; 122 Qt::ToolBarArea m_area; 123 int m_reloadTimer; 124 int m_identifier; 125 int m_dropIndex; 126 bool m_isCollapsed; 127 bool m_isInitialized; 128 129 signals: 130 void windowChanged(Window *window); 131 void areaChanged(Qt::ToolBarArea area); 132 void buttonStyleChanged(Qt::ToolButtonStyle buttonStyle); 133 void iconSizeChanged(int size); 134 void maximumButtonSizeChanged(int size); 135 void toolBarModified(); 136 }; 137 138 class TabBarToolBarWidget final : public ToolBarWidget 139 { 140 Q_OBJECT 141 142 public: 143 explicit TabBarToolBarWidget(int identifier, Window *window, QWidget *parent); 144 145 bool shouldBeVisible(ToolBarsManager::ToolBarsMode mode) const override; 146 bool event(QEvent *event) override; 147 148 protected: 149 void paintEvent(QPaintEvent *event) override; 150 void resizeEvent(QResizeEvent *event) override; 151 void contextMenuEvent(QContextMenuEvent *event) override; 152 void findTabBar(); 153 void clearEntries() override; 154 void populateEntries() override; 155 156 protected slots: 157 void updateVisibility(); 158 159 private: 160 TabBarWidget *m_tabBar; 161 }; 162 163 } 164 165 #endif 166