mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-04 00:04:25 -05:00 
			
		
		
		
	all open child panel widgets Avoids the stack state becoming inconsistent because child panel widgets from a different main panel are still present And add unit tests for QgsPanelWidgetStack
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/**
 | 
						|
 * A stack widget to manage panels in the interface. Handles the open and close events
 | 
						|
 * for added panels.
 | 
						|
 * Any widgets that want to have a non blocking panel based interface should use this
 | 
						|
 * class to manage the panels.
 | 
						|
 */
 | 
						|
class QgsPanelWidgetStack: public QWidget
 | 
						|
{
 | 
						|
%TypeHeaderCode
 | 
						|
#include "qgspanelwidgetstack.h"
 | 
						|
%End
 | 
						|
  public:
 | 
						|
 | 
						|
    /**
 | 
						|
      * A stack widget to manage panels in the interface. Handles the open and close events
 | 
						|
      * for added panels.
 | 
						|
      * @param parent
 | 
						|
      */
 | 
						|
    QgsPanelWidgetStack( QWidget* parent = nullptr );
 | 
						|
 | 
						|
    /**
 | 
						|
     * Adds the main panel widget to the stack and selects it for the user
 | 
						|
     * The main widget can not be closed and only the showPanel signal is attached
 | 
						|
     * to handle children widget opening panels.
 | 
						|
     * @param panel The panel to set as the first widget in the stack.
 | 
						|
     * @note a stack can have only one main panel. Any existing main panel
 | 
						|
     * should be removed by first calling takeMainPanel().
 | 
						|
     * @see mainPanel()
 | 
						|
     * @see takeMainPanel()
 | 
						|
     */
 | 
						|
    void setMainPanel( QgsPanelWidget* panel );
 | 
						|
 | 
						|
    /**
 | 
						|
     * The main panel widget that is set in the stack. The main widget can not be closed
 | 
						|
     * and doesn't display a back button.
 | 
						|
     * @return The main QgsPanelWidget that is active in the stack.
 | 
						|
     * @see setMainPanel()
 | 
						|
     */
 | 
						|
    QgsPanelWidget* mainPanel();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Removes the main panel widget from the stack and transfers ownsership to the
 | 
						|
     * caller.
 | 
						|
     * @return The main widget that is set in the stack.
 | 
						|
     * @see mainPanel()
 | 
						|
     * @see setMainPanel()
 | 
						|
     */
 | 
						|
    QgsPanelWidget* takeMainPanel();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Clear the stack of all widgets. Unless the panels autoDelete is set to false
 | 
						|
     * the widget will be deleted.
 | 
						|
     */
 | 
						|
    void clear();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the panel currently shown in the stack.
 | 
						|
     * @note added in QGIS 3.0
 | 
						|
     */
 | 
						|
    QgsPanelWidget* currentPanel();
 | 
						|
 | 
						|
  public slots:
 | 
						|
    /**
 | 
						|
     * Accept the current active widget in the stack.
 | 
						|
     *
 | 
						|
     * Calls the panelAccepeted signal on the active widget.
 | 
						|
     * @see acceptAllPanels()
 | 
						|
     */
 | 
						|
    void acceptCurrentPanel();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Accepts all panel widgets open in the stack in turn until until only the mainPanel()
 | 
						|
     * remains.
 | 
						|
     * @see acceptCurrentPanel();
 | 
						|
     * @note added in QGIS 3.0
 | 
						|
     */
 | 
						|
    void acceptAllPanels();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show a panel in the stack widget. Will connect to the panels showPanel event to handle
 | 
						|
     * nested panels. Auto switches the the given panel for the user.
 | 
						|
     * @param panel The panel to show.
 | 
						|
     */
 | 
						|
    void showPanel( QgsPanelWidget* panel );
 | 
						|
 | 
						|
    /**
 | 
						|
     * Closes the panel in the widget. Will also delete the widget.
 | 
						|
     * This slot is normally auto connected to panelAccepted when a panel is shown.
 | 
						|
     * @param panel The panel to close.
 | 
						|
     */
 | 
						|
    void closePanel( QgsPanelWidget* panel );
 | 
						|
};
 |