summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/Trellis/QtGridSelectionDialog.cpp')
-rw-r--r--Swift/QtUI/Trellis/QtGridSelectionDialog.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp b/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp
index 1ca1953..fb9734d 100644
--- a/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp
+++ b/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp
@@ -41,60 +41,64 @@ QSize QtGridSelectionDialog::sizeHint() const {
return QSize(width, height);
}
void QtGridSelectionDialog::setCurrentGridSize(const QSize& size) {
currentGridSize = size;
emit currentGridSizeChanged(size);
}
QSize QtGridSelectionDialog::getCurrentGridSize() const {
return currentGridSize;
}
void QtGridSelectionDialog::setMinGridSize(const QSize& size) {
minGridSize = size;
emit minGridSizeChanged(size);
}
QSize QtGridSelectionDialog::getMinGridSize() const {
return minGridSize;
}
void QtGridSelectionDialog::setMaxGridSize(const QSize& size) {
maxGridSize = size;
emit maxGridSizeChanged(size);
}
QSize QtGridSelectionDialog::getMaxGridSize() const {
return maxGridSize;
}
+QSize QtGridSelectionDialog::getFrameSize() const {
+ return frameSize;
+}
+
void QtGridSelectionDialog::keyReleaseEvent(QKeyEvent* event) {
if (event) {
QSize newGridSize = currentGridSize;
if (event->key() == Qt::Key_Up) {
newGridSize += QSize(0, -1);
}
else if (event->key() == Qt::Key_Down) {
newGridSize += QSize(0, 1);
}
else if (event->key() == Qt::Key_Left) {
newGridSize += QSize(-1, 0);
}
else if (event->key() == Qt::Key_Right) {
newGridSize += QSize(1, 0);
}
else if (event->key() == Qt::Key_Return) {
hide();
setCurrentGridSize(currentGridSize);
}
else if (event->key() == Qt::Key_Escape) {
hide();
}
if (minGridSize.expandedTo(newGridSize).boundedTo(maxGridSize) != currentGridSize) {
currentGridSize = minGridSize.expandedTo(newGridSize).boundedTo(maxGridSize);
QSize newSizeHint = sizeHint();
resize(newSizeHint);
QCursor::setPos(mapToGlobal(QPoint(newSizeHint.width(), newSizeHint.height()) - QPoint(frameSize.width() / 2, frameSize.height() / 2)));
}
@@ -106,67 +110,60 @@ void QtGridSelectionDialog::mousePressEvent(QMouseEvent*) {
setCurrentGridSize(currentGridSize);
}
void QtGridSelectionDialog::paintEvent(QPaintEvent*) {
QPainter painter(this);
// draw grid
QRect gridCell = QRect(QPoint(0,0), frameSize);
painter.setBrush(palette().highlight());
painter.setPen(Qt::NoPen);
for (int x = 0; x < currentGridSize.width(); x++) {
for (int y = 0; y < currentGridSize.height(); y++) {
int xPos = horizontalMargin + (x * (frameSize.width() + padding));
int yPos = verticalMargin + (y * (frameSize.height() + padding));
gridCell.moveTo(QPoint(xPos, yPos));
painter.drawRect(gridCell);
}
}
// draw description text
auto fontMetrics = QFontMetrics(QApplication::font());
auto descriptionBB = fontMetrics.boundingRect(QRect(0,0, width() - 2 * horizontalMargin,0), Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, descriptionText, 0, 0);
QStyleOption opt;
opt.initFrom(this);
int textY = verticalMargin + (currentGridSize.height() * (frameSize.height() + padding));
int textX = (size().width() - descriptionBB.width()) / 2;
style()->drawItemText(&painter, QRect(textX, textY, descriptionBB.width(), descriptionBB.height()), Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, opt.palette, true, descriptionText, foregroundRole());
}
void QtGridSelectionDialog::showEvent(QShowEvent*) {
- int xPos = horizontalMargin + frameSize.width() + (padding + frameSize.width()) * (currentGridSize.width() - 1) - frameSize.width()/2;
- int yPos = verticalMargin + frameSize.height() + (padding + frameSize.height()) * (currentGridSize.height() - 1) - frameSize.height()/2;
- // Apply the above offset to the global cursor position (which was positioned at a known position before showing the widget):
- QPoint pos = QCursor::pos();
- pos.rx() += xPos;
- pos.ry() += yPos;
- QCursor::setPos(pos);
setMouseTracking(true);
}
void QtGridSelectionDialog::hideEvent(QHideEvent*) {
setMouseTracking(false);
}
void QtGridSelectionDialog::mouseMoveEvent(QMouseEvent*) {
QPoint diff = (frameGeometry().bottomRight() - QCursor::pos());
QSize newDimensions = currentGridSize;
if (diff.x() > frameSize.width() * 1.5) {
newDimensions -= QSize(diff.x() / (frameSize.width() * 1.5), 0);
}
if (diff.y() > frameSize.height() * 1.5) {
newDimensions -= QSize(0, diff.y() / (frameSize.height() * 1.5));
}
if (minGridSize.expandedTo(newDimensions).boundedTo(maxGridSize) != currentGridSize) {
currentGridSize = minGridSize.expandedTo(newDimensions).boundedTo(maxGridSize);
resize(sizeHint());
}
}
void QtGridSelectionDialog::leaveEvent(QEvent *) {
QPoint diff = (frameGeometry().bottomRight() - QCursor::pos());
QSize newGridSize = currentGridSize;
if (diff.x() < 0) {
newGridSize += QSize(1,0);
}
if (diff.y() < 0) {
newGridSize += QSize(0,1);