Skip to content
Snippets Groups Projects
bsstructureview.cpp 3.98 KiB
Newer Older
even's avatar
even committed
#include <QtGui>
#include <iostream>
#include "bsstructureview.h"
#include "math.h"

using namespace std;


even's avatar
even committed
const int BSStructureView::BACK_BLACK = 0;
const int BSStructureView::BACK_WHITE = 1;
const int BSStructureView::BACK_IMAGE = 2;
const int BSStructureView::BACK_GRAD = 3;


even's avatar
even committed
BSStructureView::BSStructureView (QImage *im, BSDetector *sd)
{
  int w = im->width ();
  int h = im->height ();
even's avatar
even committed
  background = BACK_IMAGE;
  graylevelImage = im;
  currentImage = im;
even's avatar
even committed
  gradImage = NULL;
even's avatar
even committed
  det = sd;
even's avatar
even committed
  setBackgroundBrush (QBrush (*currentImage));
  setScene (new QGraphicsScene (0, 0, w, h));
  grid = new BSStructureItem (w, h, im, sd);
  scene()->addItem (grid);
even's avatar
even committed
  setWindowTitle (grid->itemTitle ());
even's avatar
even committed
}


BSStructureView::~BSStructureView ()
{
  scene()->removeItem (grid);
  delete grid;
}


even's avatar
even committed
void BSStructureView::setGradientImage (QImage *gim)
even's avatar
even committed
{
even's avatar
even committed
  gradImage = gim;
even's avatar
even committed
}


even's avatar
even committed
void BSStructureView::updateBackground ()
even's avatar
even committed
{
even's avatar
even committed
  if (background == BACK_BLACK)
    setBackgroundBrush (QBrush (Qt::black));
  else if (background == BACK_WHITE)
    setBackgroundBrush (QBrush (Qt::white));
  else
even's avatar
even committed
  {
    int w = currentImage->width ();
    int h = currentImage->height ();
    int zf = grid->zoomFactor ();
even's avatar
even committed
    image = currentImage->scaled (w * zf, h * zf);
even's avatar
even committed
    QBrush qb (image);
    qb.setTransform (QTransform::fromTranslate (
          w / 2 - zf * (w / 2 + grid->focusX ()),
          h / 2 - zf * (h / 2 + grid->focusY ())));
    setBackgroundBrush (qb);
  }
}


void BSStructureView::toggleBackground ()
{
even's avatar
even committed
  if (background++ == BACK_GRAD) background = BACK_BLACK;
  if (background == BACK_GRAD) currentImage = gradImage;
  else currentImage = graylevelImage;
even's avatar
even committed
}


void BSStructureView::paint (QPainter *painter,
                             const QStyleOptionGraphicsItem *option,
                             QWidget *widget)
{
  Q_UNUSED (painter);
  Q_UNUSED (option);
  Q_UNUSED (widget);
}


bool BSStructureView::processKeyEvent (QKeyEvent *event)
{
  bool processed = false;
  switch (event->key ())
  {
    case Qt::Key_I : // Info
even's avatar
even committed
      if (event->modifiers () & Qt::ControlModifier)
        grid->switchScanDisplay ();
      else
        grid->toggleDisplay ((event->modifiers () & Qt::ShiftModifier) == 0);
even's avatar
even committed
      setWindowTitle (grid->itemTitle ());
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_V : // Info display
      grid->switchInfoDisplay ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_B : // Background
even's avatar
even committed
      if (event->modifiers () & Qt::ControlModifier)
      {
        toggleBackground ();
        updateBackground ();
        scene()->update ();
        update ();
        processed = false;
      }
even's avatar
even committed
      break;

even's avatar
even committed
    case Qt::Key_P : // Capture
Kerautret's avatar
Kerautret committed
      // viewport()->grab (
      //   QRect (QPoint (0, 0),
      //          QSize (grid->getWidth(), grid->getHeight()))
      //   ).toImage().save ("structure.png");
even's avatar
even committed
      cout << "Structure shot in capture.png" << endl;
      break;

even's avatar
even committed
    case Qt::Key_Plus : // Zoom in
      grid->zoomIn ();
even's avatar
even committed
      updateBackground ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_Minus : // Zoom out
      grid->zoomOut ();
even's avatar
even committed
      updateBackground ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_Left : // Go leftwards
      grid->shift (-1, 0);
even's avatar
even committed
      updateBackground ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_Right : // Go rightwards
      grid->shift (1, 0);
even's avatar
even committed
      updateBackground ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_Up : // Go upwards
      grid->shift (0, -1);
even's avatar
even committed
      updateBackground ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;

    case Qt::Key_Down : // Go downwards
      grid->shift (0, 1);
even's avatar
even committed
      updateBackground ();
even's avatar
even committed
      scene()->update ();
even's avatar
even committed
      update ();
even's avatar
even committed
      processed = false;
even's avatar
even committed
      break;
  }
  return processed;
}