// --------------------------------------------------------------------------- // Name: acCustomGraphicsView::mouseReleaseEvent // Description: captures mouse release events on a view // checks if mouse image has changed if it has it will restore // original cursor (Arrow) // Arguments: QMouseEvent *event // Return Val: // Date: 4/9/2015 // --------------------------------------------------------------------------- void acCustomGraphicsView::mouseReleaseEvent(QMouseEvent *event) { QGraphicsView::mouseReleaseEvent(event); // User released the left mouse change restore the cursor widget if (mousechanged) { setCursor(Qt::ArrowCursor); mousechanged = false; emit OnMouseHandD(); } }
// --------------------------------------------------------------------------- // Name: acImageView::acImageView // Description: Constructor // builds a QGraphics based image viewer widget that contains // a navigation view default (lower right corner) // Date: 13/8/2015 // --------------------------------------------------------------------------- acImageView::acImageView(const QString filePathName, QWidget *parent, QImage** image, CMipImages *MipImages) { Q_UNUSED(parent); Q_UNUSED(image); m_MipImages = MipImages; m_layout = new QGridLayout(this); m_layout->setSpacing(0); m_layout->setMargin(0); m_layout->setContentsMargins(0, 0, 0, 0); m_imageGraphicsView = NULL; m_graphicsScene = NULL; m_imageItem = NULL; m_imageItemNav = NULL; //Reserved: GPUDecode m_navVisible = false; m_imageOrientation = 0; m_ImageScale = 100; m_MouseHandDown = false; // Display if we have images if (m_MipImages) { if (m_MipImages->Image_list.count() > 0) { // The scene is at 0,0 and set to the size of this display widget m_graphicsScene = new acCustomGraphicsScene(this); QSize size = this->size(); m_graphicsScene->setSceneRect(0, 0, size.width(), size.height()); m_graphicsScene->setBackgroundBrush(QBrush(Qt::black, Qt::SolidPattern)); //========================== // Add a QImage to the scene // // An image item this is been used for the main view // Note if a compressed image is loaded ie BCn DDS file // We will still have a default image file that is used as a temp // The temp file is loaded via resource file ie: ":/CompressonatorGUI/Images/CompressedImageError.png" //========================== m_ImageIndex = 0; QImage *image = m_MipImages->Image_list[m_ImageIndex]; QPixmap pixmap = QPixmap::fromImage(*image); m_imageItem = new acCustomGraphicsImageItem(pixmap); m_imageItem->ID = m_graphicsScene->ID; m_imageItem->setFlags(QGraphicsItem::ItemIsSelectable); m_graphicsScene->addItem(m_imageItem); m_imageItem->setVisible(true); #ifdef ENABLE_NAVIGATION // Copy of the image view item (ToDo->Scale down to fit a smalled size) // it will be positioned to bottom left corner of the graphics view // and hidden by default, the view toggles on or off based on when // a navigateButton is clicked m_imageItemNav = new acCustomGraphicsNavImageItem(QPixmap::fromImage((*image))); m_imageItemNav->ID = m_graphicsScene->ID; m_imageItemNav->setVisible(false); m_imageItemNav->setFlags(QGraphicsItem::ItemIsSelectable); m_graphicsScene->addItem(m_imageItemNav); m_navigateButton = new QPushButton(); if (m_MipImages->MIPS2QtFailed) { QString PushButtonStyle("QPushButton {background: red; border:none; margin: 0px; padding: 0px } QPushButton:hover {border:1px solid black}"); m_navigateButton->setStyleSheet(PushButtonStyle); } QPixmap pixmap(qt_navigate_png); m_graphicsScene->addWidget(m_navigateButton); // a scalled transparent window that is a child of the navigation view // ToDo(s) // 1. when its moved the view of the main image will pan to match the box area // 2. scale the size of the box to that of acImageView widget size // 3. Keep the bounds of the move within the navigation window acCustomGraphicsNavWindow *m_navWindow = new acCustomGraphicsNavWindow(QRectF(0, 0, 50, 50), m_imageItemNav); m_navWindow->ID = m_graphicsScene->ID; m_navWindow->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); m_navWindow->setOpacity(0.5); m_navWindow->setPen(QPen(Qt::black)); m_navWindow->setBrush(Qt::white); m_navigateButton->hide(); #endif // The widget viewer for all of the items m_imageGraphicsView = new acCustomGraphicsView(); m_imageGraphicsView->ID = m_graphicsScene->ID; m_imageGraphicsView->setVisible(false); m_imageGraphicsView->setScene(m_graphicsScene); m_imageGraphicsView->setFrameShadow(QFrame::Raised); m_imageGraphicsView->centerOn(0, 0); m_layout->addWidget(m_imageGraphicsView, 0, 0); m_imageGraphicsView->ensureVisible(m_imageItem); m_imageGraphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); m_imageGraphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); m_xPos = m_imageGraphicsView->horizontalScrollBar(); if (m_xPos) { // These values should be refreshed each time the acImageView is resized // for now we are obtaining the constructors defaults m_defaultXPos_minimum = m_xPos->minimum(); m_defaultXPos_maximum = m_xPos->maximum(); } m_yPos = m_imageGraphicsView->verticalScrollBar(); if (m_yPos) { // These values should be refreshed each time the acImageView is resized // for now we are obtaining the constructors defaults m_defaultYPos_minimum = m_yPos->minimum(); m_defaultYPos_maximum = m_yPos->maximum(); } // Public : Events from acCustomGraphics connect(m_graphicsScene, SIGNAL(sceneMousePosition(QPointF *, int)), this, SLOT(onacImageViewMousePosition(QPointF *, int))); connect(m_imageGraphicsView, SIGNAL(resetImageView()), this, SLOT(onResetImageView())); connect(m_imageGraphicsView, SIGNAL(OnMouseHandDown()), this, SLOT(onMouseHandDown())); connect(m_imageGraphicsView, SIGNAL(OnMouseHandD()), this, SLOT(onMouseHandD())); connect(m_imageGraphicsView, SIGNAL(OnWheelScaleUp(QPointF &)) , this, SLOT(onWheelScaleUp(QPointF &))); connect(m_imageGraphicsView, SIGNAL(OnWheelScaleDown(QPointF &)), this, SLOT(onWheelScaleDown(QPointF &))); #ifdef ENABLE_NAVIGATION connect(m_navigateButton, SIGNAL(released()), this, SLOT(onNavigateClicked())); #endif //=============================== // Add a OpenGL Widget if needed // to the GraphicsView //=============================== if ( m_MipImages && (m_MipImages->m_MipImageFormat == MIPIMAGE_FORMAT::Format_OpenGL) ) { if (m_MipImages->mipset) { if (m_MipImages->mipset->m_compressed) { //Reserved: GPUDecode } } } //========================== // Add a image data Table // to the GraphicsView //========================== if (m_MipImages->m_Error == MIPIMAGE_FORMAT_ERRORS::Format_NoErrors) { QRect ImageSize = image->rect(); m_myModel = new acTableImageDataModel(ImageSize.height(), ImageSize.width(), this); m_tableView = new QTableView(this); m_tableView->setAutoScroll(true); m_tableView->setModel(m_myModel); QWidget *newWidget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget(m_tableView); newWidget->setLayout(layout); m_graphicsScene->addWidget(newWidget); m_tableViewitem = m_imageGraphicsView->itemAt(0, 0); if (m_tableViewitem) { m_tableViewitem->setOpacity(0.75); m_tableViewitem->hide(); } } else { m_tableViewitem = NULL; m_tableView = NULL; } //=============================== // TopMost Layer: Mouse //=============================== m_linex = new QGraphicsLineItem(); m_graphicsScene->addItem(m_linex); m_linex->setLine(0, 0, CURSOR_SIZE * 2, 0); m_liney = new QGraphicsLineItem(); m_graphicsScene->addItem(m_liney); m_liney->setLine(0, 0, 0, CURSOR_SIZE * 2); QPen pen(Qt::white); m_linex->setPen(pen); m_liney->setPen(pen); m_linex->hide(); m_liney->hide(); //============================= // Set Visable items //============================= m_imageGraphicsView->setVisible(true); ManageScrollBars(); } }