@@ -114,9 +114,10 @@ void TileDelegate::paint(QPainter *painter,
114114 const QModelIndex &index) const
115115{
116116 const TilesetModel *model = static_cast <const TilesetModel*>(index.model ());
117- const Tileset *tileset = model->tileset ();
117+ if (!model)
118+ return ;
118119
119- if (tileset-> isAtlas () && ! mTilesetView -> dynamicWrapping ())
120+ if (model-> isFixedAtlas ())
120121 return ;
121122
122123 Tile *tile = model->tileAt (index);
@@ -211,10 +212,9 @@ QSize TileDelegate::sizeHint(const QStyleOptionViewItem & /* option */,
211212 const qreal scale = mTilesetView ->scale ();
212213 Tileset *tileset = m->tileset ();
213214
214- if (tileset-> isAtlas () && ! mTilesetView -> dynamicWrapping ()) {
215+ if (m-> isFixedAtlas ())
215216 return QSize (tileset->imageWidth () * scale + extra,
216217 tileset->imageHeight () * scale + extra);
217- }
218218
219219 if (const Tile *tile = m->tileAt (index)) {
220220 if (mTilesetView ->dynamicWrapping () && !tileset->isAtlas ())
@@ -538,9 +538,10 @@ void TilesetView::setRelocateTiles(bool enabled)
538538
539539 mRelocateTiles = enabled;
540540
541- if (TilesetModel *m = tilesetModel ())
542- if (m->tileset ()->isAtlas ())
543- enabled = false ;
541+ if (TilesetModel *m = tilesetModel (); m && m->tileset ()->isAtlas ()) {
542+ selectionModel ()->clear ();
543+ enabled = false ;
544+ }
544545
545546 if (enabled)
546547 setDragDropMode (QTableView::InternalMove);
@@ -581,13 +582,10 @@ void TilesetView::setWangId(WangId wangId)
581582 mWangId = wangId;
582583 mWangBehavior = AssignWholeId;
583584
584- if (mEditWangSet ) {
585- const TilesetModel *model = tilesetModel ();
586- if (!model)
587- return ;
588- if (model->tileset ()->isAtlas ()) {
585+ if (mEditWangSet && mHoveredIndex .isValid ()) {
586+ if (TilesetModel *m = tilesetModel (); m && m->isFixedAtlas ()) {
589587 viewport ()->update ();
590- } else if ( mHoveredIndex . isValid ()) {
588+ } else {
591589 update (mHoveredIndex );
592590 }
593591 }
@@ -666,9 +664,14 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
666664 return ;
667665 }
668666
667+ const TilesetModel *model = tilesetModel ();
668+ if (!model)
669+ return ;
670+
669671 if (mDraggedIndex .isValid ()) {
670672 mSnapToGrid = !(event->modifiers () & Qt::ShiftModifier);
671- if (Tile *tile = tilesetModel ()->tileAt (mDraggedIndex )) {
673+
674+ if (Tile *tile = model->tileAt (mDraggedIndex )) {
672675 QRect newRect = tile->imageRect ();
673676 QPoint pos = viewToTile (event->pos ());
674677
@@ -692,10 +695,10 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
692695 }
693696
694697 if (mSnapToGrid ) {
695- const int margin = tilesetModel () ->tileset ()->margin ();
696- const int spacing = tilesetModel () ->tileset ()->tileSpacing ();
697- const int tileWidth = tilesetModel () ->tileset ()->tileWidth ();
698- const int tileHeight = tilesetModel () ->tileset ()->tileHeight ();
698+ const int margin = model ->tileset ()->margin ();
699+ const int spacing = model ->tileset ()->tileSpacing ();
700+ const int tileWidth = model ->tileset ()->tileWidth ();
701+ const int tileHeight = model ->tileset ()->tileHeight ();
699702
700703 if (mResizingEdge == 0 ) {
701704 pos.setX ((qMax (pos.x () - margin, 0 ) / (tileWidth + spacing)) * (tileWidth + spacing) + margin);
@@ -726,6 +729,7 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
726729
727730 mRubberBand .setGeometry (tileToView (newRect));
728731 }
732+
729733 event->accept ();
730734 return ;
731735 }
@@ -734,10 +738,6 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
734738 if (!mWangSet )
735739 return ;
736740
737- const TilesetModel *model = tilesetModel ();
738- if (!model)
739- return ;
740-
741741 const QPoint pos = event->pos ();
742742 const QModelIndex hoveredIndex = indexAt (pos);
743743 const QModelIndex previousHoveredIndex = mHoveredIndex ;
@@ -824,23 +824,22 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
824824
825825void TilesetView::mouseReleaseEvent (QMouseEvent *event)
826826{
827+ const TilesetModel *model = tilesetModel ();
828+ if (!model)
829+ return ;
830+
827831 if (mDraggedIndex .isValid () && event->button () == Qt::LeftButton) {
828- if (Tile* tile = tilesetModel () ->tileAt (mDraggedIndex )) {
832+ if (Tile* tile = model ->tileAt (mDraggedIndex ))
829833 mTilesetDocument ->undoStack ()->push (new ChangeTileImageRect (mTilesetDocument , { tile }, { viewToTile (mRubberBand .geometry ()) }));
830- }
834+
831835 mDraggedIndex = QModelIndex ();
832836 mRubberBand .hide ();
833837 event->accept ();
834838 return ;
835839 }
836840
837841 if (mAtlasSelecting && (event->button () == Qt::LeftButton || event->button () == Qt::RightButton)) {
838- QRect tileRect;
839- if (mRubberBand .geometry ().isEmpty ()) {
840- tileRect = QRect (mSelectionOffset , QSize (1 , 1 ));
841- } else {
842- tileRect = viewToTile (mRubberBand .geometry ());
843- }
842+ QRect tileRect = mRubberBand .geometry ().isEmpty () ? QRect (mSelectionOffset , QSize (1 , 1 )) : viewToTile (mRubberBand .geometry ());
844843
845844 if (event->button () == Qt::RightButton) {
846845 QList<Tile*> tiles;
@@ -875,14 +874,14 @@ void TilesetView::paintEvent(QPaintEvent *event)
875874 QTableView::paintEvent (event);
876875
877876 TilesetModel *model = tilesetModel ();
878- if (!model || !model->tileset ()-> isAtlas () || dynamicWrapping ())
877+ if (!model || !model->isFixedAtlas ())
879878 return ;
880879
881880 QPainter painter (viewport ());
881+ const Tileset *tileset = model->tileset ();
882882
883883 // Draw tileset background image when in relocate mode
884884 if (mRelocateTiles ) {
885- const Tileset *tileset = model->tileset ();
886885 if (!tileset->imageSource ().isEmpty ()) {
887886 const QRect sourceRect (0 , 0 , tileset->imageWidth (), tileset->imageHeight ());
888887 const QRect viewRect = tileToView (sourceRect);
@@ -896,7 +895,7 @@ void TilesetView::paintEvent(QPaintEvent *event)
896895 TileDelegate *delegate = static_cast <TileDelegate*>(itemDelegate ());
897896 QItemSelectionModel *s = selectionModel ();
898897
899- for (Tile *tile : model-> tileset () ->tiles ()) {
898+ for (Tile *tile : tileset->tiles ()) {
900899 const QRect rect = tileToView (tile->imageRect ());
901900 const QModelIndex index = model->tileIndex (tile);
902901 const bool selected = s->isSelected (index) || index == s->currentIndex ();
@@ -915,62 +914,52 @@ void TilesetView::paintEvent(QPaintEvent *event)
915914
916915QModelIndex TilesetView::indexAt (const QPoint &pos) const
917916{
918- if (!model ())
919- return QModelIndex ();
920-
921- if (tilesetModel () && tilesetModel ()->tileset ()->isAtlas () && !dynamicWrapping ()) {
917+ if (TilesetModel *m = tilesetModel (); m && m->isFixedAtlas ()) {
922918 const QPoint tilesetPos = viewToTile (pos);
923-
924- // Find tile that contains this position
925- for (Tile *tile : tilesetModel ()->tileset ()->tiles ()) {
919+ for (Tile *tile : m->tileset ()->tiles ())
926920 if (tile->imageRect ().contains (tilesetPos))
927921 return tilesetModel ()->tileIndex (tile);
928- }
929-
930- // Return invalid index if no tile found
931922 return QModelIndex ();
932923 }
933924
934- // Use default behavior for non-atlas mode
935925 return QTableView::indexAt (pos);
936926}
937927
938928void TilesetView::scrollTo (const QModelIndex &index, ScrollHint hint)
939929{
940- if (!tilesetModel () || !tilesetModel ()->tileset ()->isAtlas () || dynamicWrapping ()) {
941- QTableView::scrollTo (index, hint);
930+ if (TilesetModel *m = tilesetModel (); m && m->isFixedAtlas ()) {
942931 return ;
943932 }
933+
934+ QTableView::scrollTo (index, hint);
944935}
945936
946937void TilesetView::setSelection (const QRect &rect, QItemSelectionModel::SelectionFlags flags)
947938{
948- if (!tilesetModel () || !tilesetModel ()->tileset ()->isAtlas () || dynamicWrapping ()) {
939+ const TilesetModel *model = tilesetModel ();
940+
941+ if (!model || !model->isFixedAtlas ()) {
949942 QTableView::setSelection (rect, flags);
950943 return ;
951944 }
952945
953- // Convert view coordinates to tileset coordinates
946+ // Select tiles based on position in the rect
954947 const QRect tilesetRect = viewToTile (rect);
955-
956- // Select all tiles that intersect with the rect
957948 QItemSelection selection;
958- const TilesetModel *model = tilesetModel ();
959-
960949 for (Tile *tile : model->tileset ()->tiles ()) {
961950 if (tile->imageRect ().intersects (tilesetRect)) {
962951 const QModelIndex index = model->tileIndex (tile);
963952 selection.select (index, index);
964953 }
965954 }
966-
967955 selectionModel ()->select (selection, flags);
968956}
969957
970958void TilesetView::selectionChanged (const QItemSelection &selected, const QItemSelection &deselected)
971959{
972960 QTableView::selectionChanged (selected, deselected);
973- if (tilesetModel () && tilesetModel ()->tileset ()->isAtlas ())
961+
962+ if (TilesetModel *m = tilesetModel (); m && m->isFixedAtlas ())
974963 viewport ()->update ();
975964}
976965
@@ -979,11 +968,9 @@ QRect TilesetView::visualRect(const QModelIndex &index) const
979968 if (!index.isValid ())
980969 return QRect ();
981970
982- const TilesetModel *m = tilesetModel ();
983- if (m && m->tileset ()->isAtlas () && !dynamicWrapping ()) {
984- if (Tile *tile = m->tileAt (index)) {
971+ if (TilesetModel *m = tilesetModel (); m && m->isFixedAtlas ()) {
972+ if (Tile *tile = m->tileAt (index))
985973 return tileToView (tile->imageRect ());
986- }
987974 return QRect ();
988975 }
989976
@@ -995,8 +982,7 @@ void TilesetView::leaveEvent(QEvent *event)
995982 if (mHoveredIndex .isValid ()) {
996983 const QModelIndex previousHoveredIndex = mHoveredIndex ;
997984 mHoveredIndex = QModelIndex ();
998- const TilesetModel *model = tilesetModel ();
999- if (model && model->tileset ()->isAtlas ()) {
985+ if (TilesetModel *m = tilesetModel (); m && m->isFixedAtlas ()) {
1000986 viewport ()->update ();
1001987 } else {
1002988 update (previousHoveredIndex);
@@ -1225,10 +1211,11 @@ void TilesetView::adjustScale()
12251211
12261212void TilesetView::refreshColumnCount ()
12271213{
1228- if (!tilesetModel ())
1214+ const TilesetModel *model = tilesetModel ();
1215+ if (!model)
12291216 return ;
12301217
1231- if (tilesetModel () ->tileset ()->isAtlas ())
1218+ if (model ->tileset ()->isAtlas ())
12321219 viewport ()->update ();
12331220
12341221 if (!dynamicWrapping ()) {
@@ -1239,12 +1226,12 @@ void TilesetView::refreshColumnCount()
12391226 const QSize maxSize = maximumViewportSize ();
12401227 const int gridSpace = mDrawGrid ? 1 : 0 ;
12411228 int tileWidth;
1242- if (tilesetModel () ->tileset ()->isAtlas ()) {
1229+ if (model ->tileset ()->isAtlas ()) {
12431230 tileWidth = 0 ;
1244- for (Tile *tile : tilesetModel () ->tileset ()->tiles ())
1231+ for (Tile *tile : model ->tileset ()->tiles ())
12451232 tileWidth = std::max (tileWidth, tile->imageRect ().width ());
12461233 } else {
1247- tileWidth = tilesetModel () ->tileset ()->tileWidth ();
1234+ tileWidth = model ->tileset ()->tileWidth ();
12481235 }
12491236 const int scaledTileSize = std::max<int >(tileWidth * scale (), 1 ) + gridSpace;
12501237 const int columnCount = std::max (maxSize.width () / scaledTileSize, 1 );
0 commit comments