mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 15:30:04 +00:00 
			
		
		
		
	Initial collapsible group layout
This commit is contained in:
		
							parent
							
								
									b198dc53ca
								
							
						
					
					
						commit
						300091dbe1
					
				
					 6 changed files with 253 additions and 0 deletions
				
			
		
							
								
								
									
										88
									
								
								scwx-qt/source/scwx/qt/ui/collapsible_group.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								scwx-qt/source/scwx/qt/ui/collapsible_group.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,88 @@ | |||
| #include "collapsible_group.hpp" | ||||
| #include "ui_collapsible_group.h" | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace qt | ||||
| { | ||||
| namespace ui | ||||
| { | ||||
| 
 | ||||
| class CollapsibleGroupImpl | ||||
| { | ||||
| public: | ||||
|    explicit CollapsibleGroupImpl(CollapsibleGroup* self) : self_ {self} {} | ||||
|    ~CollapsibleGroupImpl() = default; | ||||
| 
 | ||||
|    void Initialize(); | ||||
| 
 | ||||
|    const QIcon kCollapsedIcon_ { | ||||
|       ":/res/icons/font-awesome-6/angle-right-solid.svg"}; | ||||
|    const QIcon kExpandedIcon_ { | ||||
|       ":/res/icons/font-awesome-6/angle-down-solid.svg"}; | ||||
| 
 | ||||
|    CollapsibleGroup* self_; | ||||
| }; | ||||
| 
 | ||||
| CollapsibleGroup::CollapsibleGroup(QWidget* parent) : | ||||
|     QFrame(parent), | ||||
|     p {std::make_unique<CollapsibleGroupImpl>(this)}, | ||||
|     ui(new Ui::CollapsibleGroup) | ||||
| { | ||||
|    ui->setupUi(this); | ||||
|    p->Initialize(); | ||||
| } | ||||
| 
 | ||||
| CollapsibleGroup::CollapsibleGroup(const QString& title, QWidget* parent) : | ||||
|     QFrame(parent), | ||||
|     p {std::make_unique<CollapsibleGroupImpl>(this)}, | ||||
|     ui(new Ui::CollapsibleGroup) | ||||
| { | ||||
|    ui->setupUi(this); | ||||
|    ui->titleLabel->setText(title); | ||||
|    p->Initialize(); | ||||
| } | ||||
| 
 | ||||
| CollapsibleGroup::~CollapsibleGroup() | ||||
| { | ||||
|    delete ui; | ||||
| } | ||||
| 
 | ||||
| void CollapsibleGroupImpl::Initialize() | ||||
| { | ||||
|    self_->Expand(); | ||||
| } | ||||
| 
 | ||||
| void CollapsibleGroup::SetContentsLayout(QLayout* layout) | ||||
| { | ||||
|    ui->contentsFrame->setLayout(layout); | ||||
| } | ||||
| 
 | ||||
| void CollapsibleGroup::SetTitle(const QString& title) | ||||
| { | ||||
|    ui->titleLabel->setText(title); | ||||
| } | ||||
| 
 | ||||
| void CollapsibleGroup::Collapse() | ||||
| { | ||||
|    // Update the title frame
 | ||||
|    ui->arrowLabel->setMaximumSize(8, 16); | ||||
|    ui->arrowLabel->setPixmap(p->kCollapsedIcon_.pixmap(8, 16)); | ||||
| 
 | ||||
|    // Hide the group contents
 | ||||
|    ui->contentsFrame->setVisible(false); | ||||
| } | ||||
| 
 | ||||
| void CollapsibleGroup::Expand() | ||||
| { | ||||
|    // Update the title frame
 | ||||
|    ui->arrowLabel->setMaximumSize(16, 16); | ||||
|    ui->arrowLabel->setPixmap(p->kExpandedIcon_.pixmap(16, 16)); | ||||
| 
 | ||||
|    // Show the group contents
 | ||||
|    ui->contentsFrame->setVisible(true); | ||||
| } | ||||
| 
 | ||||
| } // namespace ui
 | ||||
| } // namespace qt
 | ||||
| } // namespace scwx
 | ||||
							
								
								
									
										43
									
								
								scwx-qt/source/scwx/qt/ui/collapsible_group.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								scwx-qt/source/scwx/qt/ui/collapsible_group.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <QFrame> | ||||
| 
 | ||||
| namespace Ui | ||||
| { | ||||
| class CollapsibleGroup; | ||||
| } | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace qt | ||||
| { | ||||
| namespace ui | ||||
| { | ||||
| 
 | ||||
| class CollapsibleGroupImpl; | ||||
| 
 | ||||
| class CollapsibleGroup : public QFrame | ||||
| { | ||||
|    Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|    explicit CollapsibleGroup(QWidget* parent = nullptr); | ||||
|    explicit CollapsibleGroup(const QString& title, QWidget* parent = nullptr); | ||||
|    ~CollapsibleGroup(); | ||||
| 
 | ||||
|    void SetContentsLayout(QLayout* contents); | ||||
|    void SetTitle(const QString& title); | ||||
| 
 | ||||
| public slots: | ||||
|    void Collapse(); | ||||
|    void Expand(); | ||||
| 
 | ||||
| private: | ||||
|    friend class CollapsibleGroupImpl; | ||||
|    std::unique_ptr<CollapsibleGroupImpl> p; | ||||
|    Ui::CollapsibleGroup*                 ui; | ||||
| }; | ||||
| 
 | ||||
| } // namespace ui
 | ||||
| } // namespace qt
 | ||||
| } // namespace scwx
 | ||||
							
								
								
									
										117
									
								
								scwx-qt/source/scwx/qt/ui/collapsible_group.ui
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								scwx-qt/source/scwx/qt/ui/collapsible_group.ui
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,117 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>CollapsibleGroup</class> | ||||
|  <widget class="QFrame" name="CollapsibleGroup"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>400</width> | ||||
|     <height>300</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Frame</string> | ||||
|   </property> | ||||
|   <layout class="QVBoxLayout" name="verticalLayout"> | ||||
|    <property name="spacing"> | ||||
|     <number>0</number> | ||||
|    </property> | ||||
|    <property name="leftMargin"> | ||||
|     <number>0</number> | ||||
|    </property> | ||||
|    <property name="topMargin"> | ||||
|     <number>0</number> | ||||
|    </property> | ||||
|    <property name="rightMargin"> | ||||
|     <number>0</number> | ||||
|    </property> | ||||
|    <property name="bottomMargin"> | ||||
|     <number>0</number> | ||||
|    </property> | ||||
|    <item> | ||||
|     <widget class="QFrame" name="titleFrame"> | ||||
|      <property name="frameShape"> | ||||
|       <enum>QFrame::Box</enum> | ||||
|      </property> | ||||
|      <property name="frameShadow"> | ||||
|       <enum>QFrame::Sunken</enum> | ||||
|      </property> | ||||
|      <layout class="QHBoxLayout" name="horizontalLayout"> | ||||
|       <property name="leftMargin"> | ||||
|        <number>1</number> | ||||
|       </property> | ||||
|       <property name="topMargin"> | ||||
|        <number>1</number> | ||||
|       </property> | ||||
|       <property name="rightMargin"> | ||||
|        <number>1</number> | ||||
|       </property> | ||||
|       <property name="bottomMargin"> | ||||
|        <number>1</number> | ||||
|       </property> | ||||
|       <item> | ||||
|        <widget class="QLabel" name="arrowLabel"> | ||||
|         <property name="minimumSize"> | ||||
|          <size> | ||||
|           <width>16</width> | ||||
|           <height>0</height> | ||||
|          </size> | ||||
|         </property> | ||||
|         <property name="maximumSize"> | ||||
|          <size> | ||||
|           <width>8</width> | ||||
|           <height>16</height> | ||||
|          </size> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string/> | ||||
|         </property> | ||||
|         <property name="pixmap"> | ||||
|          <pixmap resource="../../../../scwx-qt.qrc">:/res/icons/font-awesome-6/angle-down-solid.svg</pixmap> | ||||
|         </property> | ||||
|         <property name="scaledContents"> | ||||
|          <bool>true</bool> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </item> | ||||
|       <item> | ||||
|        <widget class="QLabel" name="titleLabel"> | ||||
|         <property name="text"> | ||||
|          <string>Title</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </item> | ||||
|       <item> | ||||
|        <spacer name="horizontalSpacer"> | ||||
|         <property name="orientation"> | ||||
|          <enum>Qt::Horizontal</enum> | ||||
|         </property> | ||||
|         <property name="sizeHint" stdset="0"> | ||||
|          <size> | ||||
|           <width>40</width> | ||||
|           <height>20</height> | ||||
|          </size> | ||||
|         </property> | ||||
|        </spacer> | ||||
|       </item> | ||||
|      </layout> | ||||
|     </widget> | ||||
|    </item> | ||||
|    <item> | ||||
|     <widget class="QFrame" name="contentsFrame"> | ||||
|      <property name="frameShape"> | ||||
|       <enum>QFrame::Box</enum> | ||||
|      </property> | ||||
|      <property name="frameShadow"> | ||||
|       <enum>QFrame::Sunken</enum> | ||||
|      </property> | ||||
|     </widget> | ||||
|    </item> | ||||
|   </layout> | ||||
|  </widget> | ||||
|  <resources> | ||||
|   <include location="../../../../scwx-qt.qrc"/> | ||||
|  </resources> | ||||
|  <connections/> | ||||
| </ui> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat