mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 02:40:05 +00:00 
			
		
		
		
	Enable/disable layer move buttons according to selection
This commit is contained in:
		
							parent
							
								
									ec2663aee6
								
							
						
					
					
						commit
						b45ec9dfa5
					
				
					 3 changed files with 77 additions and 1 deletions
				
			
		|  | @ -164,6 +164,18 @@ Qt::DropActions LayerModel::supportedDropActions() const | ||||||
|    return Qt::DropAction::MoveAction; |    return Qt::DropAction::MoveAction; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool LayerModel::IsMovable(int row) const | ||||||
|  | { | ||||||
|  |    bool movable = false; | ||||||
|  | 
 | ||||||
|  |    if (0 <= row && static_cast<std::size_t>(row) < p->layers_.size()) | ||||||
|  |    { | ||||||
|  |       movable = p->layers_.at(row).movable_; | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    return movable; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| QVariant LayerModel::data(const QModelIndex& index, int role) const | QVariant LayerModel::data(const QModelIndex& index, int role) const | ||||||
| { | { | ||||||
|    static const QString enabledString  = QObject::tr("Enabled"); |    static const QString enabledString  = QObject::tr("Enabled"); | ||||||
|  |  | ||||||
|  | @ -43,6 +43,8 @@ public: | ||||||
|    Qt::ItemFlags   flags(const QModelIndex& index) const override; |    Qt::ItemFlags   flags(const QModelIndex& index) const override; | ||||||
|    Qt::DropActions supportedDropActions() const override; |    Qt::DropActions supportedDropActions() const override; | ||||||
| 
 | 
 | ||||||
|  |    bool IsMovable(int row) const; | ||||||
|  | 
 | ||||||
|    QVariant data(const QModelIndex& index, |    QVariant data(const QModelIndex& index, | ||||||
|                  int                role = Qt::DisplayRole) const override; |                  int                role = Qt::DisplayRole) const override; | ||||||
|    QVariant headerData(int             section, |    QVariant headerData(int             section, | ||||||
|  |  | ||||||
|  | @ -18,11 +18,14 @@ class LayerDialogImpl | ||||||
| { | { | ||||||
| public: | public: | ||||||
|    explicit LayerDialogImpl(LayerDialog* self) : |    explicit LayerDialogImpl(LayerDialog* self) : | ||||||
|        layerModel_ {new model::LayerModel(self)} |        self_ {self}, layerModel_ {new model::LayerModel(self)} | ||||||
|    { |    { | ||||||
|    } |    } | ||||||
|    ~LayerDialogImpl() = default; |    ~LayerDialogImpl() = default; | ||||||
| 
 | 
 | ||||||
|  |    void ConnectSignals(); | ||||||
|  | 
 | ||||||
|  |    LayerDialog*       self_; | ||||||
|    model::LayerModel* layerModel_; |    model::LayerModel* layerModel_; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -49,6 +52,14 @@ LayerDialog::LayerDialog(QWidget* parent) : | ||||||
|             QHeaderView::ResizeMode::ResizeToContents); |             QHeaderView::ResizeMode::ResizeToContents); | ||||||
|       } |       } | ||||||
|    } |    } | ||||||
|  | 
 | ||||||
|  |    // Disable move buttons
 | ||||||
|  |    ui->moveTopButton->setEnabled(false); | ||||||
|  |    ui->moveUpButton->setEnabled(false); | ||||||
|  |    ui->moveDownButton->setEnabled(false); | ||||||
|  |    ui->moveBottomButton->setEnabled(false); | ||||||
|  | 
 | ||||||
|  |    p->ConnectSignals(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| LayerDialog::~LayerDialog() | LayerDialog::~LayerDialog() | ||||||
|  | @ -56,6 +67,57 @@ LayerDialog::~LayerDialog() | ||||||
|    delete ui; |    delete ui; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void LayerDialogImpl::ConnectSignals() | ||||||
|  | { | ||||||
|  |    QObject::connect( | ||||||
|  |       self_->ui->layerTreeView->selectionModel(), | ||||||
|  |       &QItemSelectionModel::selectionChanged, | ||||||
|  |       self_, | ||||||
|  |       [this](const QItemSelection& /* selected */, | ||||||
|  |              const QItemSelection& /* deselected */) | ||||||
|  |       { | ||||||
|  |          QModelIndexList selectedRows = | ||||||
|  |             self_->ui->layerTreeView->selectionModel()->selectedRows(); | ||||||
|  | 
 | ||||||
|  |          bool itemsSelected    = selectedRows.size() > 0; | ||||||
|  |          bool itemsMovableUp   = itemsSelected; | ||||||
|  |          bool itemsMovableDown = itemsSelected; | ||||||
|  |          int  rowCount         = layerModel_->rowCount(); | ||||||
|  | 
 | ||||||
|  |          for (auto& rowIndex : selectedRows) | ||||||
|  |          { | ||||||
|  |             int row = rowIndex.row(); | ||||||
|  |             if (!layerModel_->IsMovable(row)) | ||||||
|  |             { | ||||||
|  |                // If an item in the selection is not movable, disable all moves
 | ||||||
|  |                itemsMovableUp   = false; | ||||||
|  |                itemsMovableDown = false; | ||||||
|  |                break; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                // If the first row is selected, items cannot be moved up
 | ||||||
|  |                if (row == 0) | ||||||
|  |                { | ||||||
|  |                   itemsMovableUp = false; | ||||||
|  |                } | ||||||
|  | 
 | ||||||
|  |                // If the last row is selected, items cannot be moved down
 | ||||||
|  |                if (row == rowCount - 1) | ||||||
|  |                { | ||||||
|  |                   itemsMovableDown = false; | ||||||
|  |                } | ||||||
|  |             } | ||||||
|  |          } | ||||||
|  | 
 | ||||||
|  |          // Enable move buttons according to selection
 | ||||||
|  |          self_->ui->moveTopButton->setEnabled(itemsMovableUp); | ||||||
|  |          self_->ui->moveUpButton->setEnabled(itemsMovableUp); | ||||||
|  |          self_->ui->moveDownButton->setEnabled(itemsMovableDown); | ||||||
|  |          self_->ui->moveBottomButton->setEnabled(itemsMovableDown); | ||||||
|  |       }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } // namespace ui
 | } // namespace ui
 | ||||||
| } // namespace qt
 | } // namespace qt
 | ||||||
| } // namespace scwx
 | } // namespace scwx
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat