/* * Copyright (C) 2007, 2008, 2009, 2010 Ivan Cukic * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, * or (at your option) any later version, as published by the Free * Software Foundation * * 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, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef LANCELOTWINDOW_H #define LANCELOTWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include #include "LancelotConfig.h" #include "ui_LancelotWindowBase.h" namespace Lancelot { class ActionListModel; class ResizeBordersPanel; } namespace Plasma { class LineEdit; } class LancelotWindow: public QGraphicsView, public Ui::LancelotWindowBase { Q_OBJECT public: LancelotWindow(); virtual ~LancelotWindow(); bool eventFilter(QObject * object, QEvent * event); public Q_SLOTS: /** * Shows full window centered on the screen. */ void lancelotShowCentered(); /** * Shows full window centered on the screen. */ void lancelotToggleCentered(); /** * Shows full window. * @param x x coordinate of the mouse * @param y y coordinate of the mouse */ void lancelotShow(int x, int y); /** * Shows window with only specified section * @param x x coordinate of the mouse * @param y y coordinate of the mouse * @param name the name of the section to be shown */ void lancelotShowItem(int x, int y, const QString & name); /** * Hides window * @param immediate if not set, the window will start \ * the auto-timer for hiding. If true, window will be \ * hidden immediately */ void lancelotHide(bool immediate = false); /** * Opens the search section and searches for * the specified string, * @param string search string */ void search(const QString & string); protected Q_SLOTS: /** * Shows specified section * @param item section to be shown */ void sectionActivated(const QString & item); private: void nextSection(int increment); private Q_SLOTS: void systemButtonClicked(); void lancelotContext(); void saveConfig(); void showAboutDialog(); void hideImmediate(); void focusChanged(QWidget * old, QWidget * now); void toggleCollapsedSections(); void updateCollapsedSections(bool toggle = false); public: /** * Returns a list of available sections - their IDs */ QStringList sectionIDs(); /** * Returns a list of available sections - their names */ QStringList sectionNames(); /** * Returns a list of available sections - their icons */ QStringList sectionIcons(); /** * @returns currently open section */ QString currentSection(); public Q_SLOTS: /** * Opens the configure shortcuts dialog */ void configureShortcuts(); /** * Opens the configure menu dialog */ void configureMenu(); /** * Call this when an external application changes * the configuration */ void configurationChanged(); /** * Starts the menu editor */ void showMenuEditor(); protected: /** * Resizes window and relayouts everything. * @returns if it was actually resized (false if * the old size is the new size) */ bool updateWindowSize(); /** * Shows window * @param x x coordinate of position to show at * @param y y coordinate of position to show at * @param centered override x and y and show window centered */ void showWindow(int x, int y, bool centered = false); /** * Creates and sets up data models */ void setupModels(); /** * Loads configuration options */ void loadConfig(); /** * Sets up the actions */ void setupActions(); // void paintEvent(QPaintEvent * event); void drawBackground(QPainter * painter, const QRectF & rect); private: Lancelot::ResizeBordersPanel * m_root; Plasma::Corona * m_corona; Plasma::LineEdit * editSearch; KCompletion * m_completion; QHash < Lancelot::ExtenderButton *, QString > systemButtonActions; QTimer m_hideTimer; QString m_searchString; bool m_hovered; bool m_showingFull; QSignalMapper * m_sectionsSignalMapper; KActionCollection * m_actionCollection; QMap < QString, Lancelot::ActionListModel * > m_models; QMap < QString, Lancelot::ActionListModel * > m_modelGroups; KConfig m_config; KConfigGroup m_mainConfig; QString m_activeSection; LancelotConfig m_configUi; QWidget * m_configWidget; // Resize related code protected: void mousePressEvent (QMouseEvent * event); void mouseReleaseEvent (QMouseEvent * event); void mouseMoveEvent (QMouseEvent * event); void resizeEvent (QResizeEvent * event); void sendKeyEvent (QKeyEvent * event); private: enum BaseDirection { None = 0, Up = 1, Down = 2, Left = 4, Right = 8 }; Q_DECLARE_FLAGS(ResizeDirection, BaseDirection) ResizeDirection m_resizeDirection; QPoint m_originalMousePosition; QPoint m_originalWindowPosition; QSize m_originalMainSize; QSize m_mainSize; QList < QGraphicsWidget * > m_focusList; int m_focusIndex; bool m_skipEvent; // Additional widgets Lancelot::PopupList * menuSystemButton; Lancelot::PopupMenu * menuLancelotContext; // Caches QPoint m_cachedOpenPosition; QSize m_cachedWindowSize; Plasma::Flip m_cachedFlip; bool m_cachedOpenPositionCentered : 1; bool m_cachedShowingFull : 1; bool m_firstOpen : 1; }; #endif /*LANCELOTWINDOW_H*/