USA.
*/
-
#ifndef TABBEDPANEL_H
#define TABBEDPANEL_H
#include "panelcommon.h"
-class QButtonGroup;
-class QMouseEvent;
-class QPaintEvent;
-class QPixmap;
-class QRect;
+class QPropertyAnimation;
class QSignalTransition;
-class QStackedWidget;
class QState;
class QStateMachine;
+class ListItemContextButtonBar;
class PanelBar;
-class PanelBase;
-class PanelContent;
+class PanelContentStack;
+class PanelContextButtonBar;
+class PanelTabBar;
/**
* @brief Class for tabbed panels
*
* @author Kaj Wallin - kaj.wallin (at) ixonos.com
- * @author Pekka Nissinen - pekka.nissinen@ixonos.com
- *
- * @class TabbedPanel tabbedpanel.h "ui/tabbedpanel.h"
+ * @author Pekka Nissinen - pekka.nissinen (at) ixonos.com
*/
class TabbedPanel : public QWidget
{
*
* @param parent Parent
*/
- TabbedPanel(QWidget *parent);
+ TabbedPanel(QWidget *parent = 0);
/*******************************************************************************
* MEMBER FUNCTIONS AND SLOTS
* Removes a tab and its widget from the panel at index position. The widget itself is not
* deleted.
*
- * TODO: Fix tab drawing order
- *
* @param index Index of the tab
*/
void removeTab(int index);
-public slots:
/**
- * @brief Public slot that will close the panel unless already closed
- */
- void closePanel();
+ * @brief Sets tabs enabled.
+ *
+ * If disabled tab is currently selected, panel will be closed also
+ * @param tabIndexes tab indexes to set
+ * @param enabled true if should be enabled, false otherwise
+ */
+ void setTabsEnabled(const QList<int> &tabIndexes, bool enabled);
+public slots:
/**
- * @brief Public slot that will open the panel unless already open
+ * @brief Slot that closes the panel
*/
- void openPanel();
+ void closePanel();
/**
- * @brief Sets the tab at given index active
+ * @brief Slot that opens the panel
*
- * @param index Index of the tab
+ * If widget pointer is provided the corresponding tab is also set active
+ *
+ * @param widget Widget
*/
- void setActiveTab(int index);
+ void openPanel(QWidget *widget = 0);
/**
* @brief Slot to redraw the panel after window resize event
private slots:
/**
- * @brief Internal slot used to track statemachine state
+ * @brief Calculates mask for tabbed panel
+ *
+ * Mask is constructed from PanelTabBar, PanelContextButtonBar and panel content sizes
+ */
+ void calculateMask();
+
+ /**
+ * @brief Repositions context button bar
*/
- void stateChangedToClosed();
+ void repositionContextButtonBar();
/**
- * @brief Internal slot used to track statemachine state
+ * @brief Sets the panel at current index active
+ *
+ * @param index Index of the panel
*/
- void stateChangedToOpen();
+ void setCurrentIndex(int index);
+
+ /**
+ * @brief Internal slot used to set the panel state
+ */
+ void stateChanged();
/*******************************************************************************
* SIGNALS
******************************************************************************/
signals:
/**
+ * @brief This signal is emitted whenever the current tab page changes
+ *
+ * @param index Index of the new tab page
+ */
+ void currentChanged(int index);
+
+ /**
+ * @brief Emitted when there is a change in list item selection
+ *
+ * @param itemIsSelected True if any item is selected.
+ */
+ void listItemSelectionChanged(bool itemIsSelected);
+
+ /**
* @brief Signal that is sent when panel is closed
*
* @sa openPanel
void panelOpened();
/**
- * @brief Signal that is sent to state machine when state must be changed
+ * @brief Signal that is sent when the panel state must be changed
*
* @sa openPanel
* @sa closePanel
* DATA MEMBERS
******************************************************************************/
private:
- bool m_isOpen; ///< Boolean used to track the current state of the statemachine
-
- int m_activeTab; ///< Index of a active tab
-
- QButtonGroup *m_tabButtonGroup;
-
- QSignalTransition *m_panelTransitionClose; ///< Transition signal for closing the panel
- QSignalTransition *m_panelTransitionOpen; ///< Transition signal for opening the panel
-
- QStackedWidget *m_panelWidgetStack; ///< Stack for panel widgets
-
- QState *m_panelStateClosed; ///< State of the closed panel
- QState *m_panelStateOpened; ///< State of the opened panel
+ bool m_open; ///< Current state of the panel
+ bool m_closeRequestPending; ///< Indicates wheater the panel is waiting to be closed
- QStateMachine *m_panelStateMachine; ///< State machine for sliding the panel
+ QState *m_stateClosed; ///< State of the closed panel
+ QState *m_stateOpened; ///< State of the opened panel
- PanelBar *m_panelBar; ///< Widget for panel bar
- PanelBase *m_panelBase; ///< Widget for panel base
- PanelContent *m_panelContent; ///< Widget for panel content
+ ListItemContextButtonBar *m_itemContextButtonBar; ///< Widget for list item context button bar
+ PanelBar *m_panelBar; ///< Widget for panel bar
+ PanelContentStack *m_panelContentStack; ///< Stack for panel widgets
+ PanelContextButtonBar * m_panelContextButtonBar; ///< Widget for panel context button bar
+ PanelTabBar *m_panelTabBar; ///< Widget for panel tab bar
};
#endif // TABBEDPANEL_H