Engauge Digitizer  2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Slots | Signals | Public Member Functions | Protected Member Functions | List of all members
DlgSettingsColorFilter Class Reference

Dialog for editing filtering settings. More...

#include <DlgSettingsColorFilter.h>

Inheritance diagram for DlgSettingsColorFilter:
Inheritance graph
Collaboration diagram for DlgSettingsColorFilter:
Collaboration graph

Public Slots

void slotTransferPiece (int xLeft, QImage image)
 Receive processed piece of preview image, to be inserted at xLeft to xLeft+pixmap.width(). More...
 

Signals

void signalApplyFilter (ColorFilterMode colorFilterMode, double low, double high)
 Send filter parameters to DlgFilterThread and DlgFilterWorker for processing. More...
 

Public Member Functions

 DlgSettingsColorFilter (MainWindow &mainWindow)
 Single constructor. More...
 
virtual ~DlgSettingsColorFilter ()
 
virtual void createOptionalSaveDefault (QHBoxLayout *layout)
 Let subclass define an optional Save As Default button. More...
 
virtual QWidget * createSubPanel ()
 Create dialog-specific panel to which base class will add Ok and Cancel buttons. More...
 
virtual void load (CmdMediator &cmdMediator)
 Load settings from Document. More...
 
virtual void setSmallDialogs (bool smallDialogs)
 If false then dialogs have a minimum size so all controls are visible. More...
 
- Public Member Functions inherited from DlgSettingsAbstractBase
 DlgSettingsAbstractBase (const QString &title, const QString &dialogName, MainWindow &mainWindow)
 Single constructor. More...
 
virtual ~DlgSettingsAbstractBase ()
 

Protected Member Functions

virtual void handleOk ()
 Process slotOk. More...
 
- Protected Member Functions inherited from DlgSettingsAbstractBase
CmdMediatorcmdMediator ()
 Provide access to Document information wrapped inside CmdMediator. More...
 
void enableOk (bool enable)
 Let leaf subclass control the Ok button. More...
 
void finishPanel (QWidget *subPanel, int minimumWidth=MINIMUM_DIALOG_WIDTH, int minimumHeightOrZero=0)
 Add Ok and Cancel buttons to subpanel to get the whole dialog. More...
 
MainWindowmainWindow ()
 Get method for MainWindow. More...
 
const MainWindowmainWindow () const
 Const get method for MainWindow. More...
 
void populateColorComboWithoutTransparent (QComboBox &combo)
 Add colors in color palette to combobox, without transparent entry at end. More...
 
void populateColorComboWithTransparent (QComboBox &combo)
 Add colors in color palette to combobox, with transparent entry at end. More...
 
void setCmdMediator (CmdMediator &cmdMediator)
 Store CmdMediator for easy access by the leaf class. More...
 
void setDisableOkAtStartup (bool disableOkAtStartup)
 Override the default Ok button behavior applied in showEvent. More...
 

Additional Inherited Members

- Static Protected Attributes inherited from DlgSettingsAbstractBase
static int MINIMUM_DIALOG_WIDTH = 380
 Dialog layout constant that guarantees every widget has sufficient room. Can be increased by finishPanel. More...
 
static int MINIMUM_PREVIEW_HEIGHT = 100
 Dialog layout constant that guarantees preview has sufficent room. More...
 

Detailed Description

Dialog for editing filtering settings.

Definition at line 29 of file DlgSettingsColorFilter.h.

Constructor & Destructor Documentation

DlgSettingsColorFilter::DlgSettingsColorFilter ( MainWindow mainWindow)

Single constructor.

Definition at line 36 of file DlgSettingsColorFilter.cpp.

36  :
37  DlgSettingsAbstractBase (tr ("Color Filter"),
38  "DlgSettingsColorFilter",
39  mainWindow),
40  m_scenePreview (nullptr),
41  m_viewPreview (nullptr),
42  m_filterThread (nullptr),
43  m_modelColorFilterBefore (nullptr),
44  m_modelColorFilterAfter (nullptr)
45 {
46  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsColorFilter::DlgSettingsColorFilter";
47 
48  QWidget *subPanel = createSubPanel ();
49  finishPanel (subPanel,
51 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
void finishPanel(QWidget *subPanel, int minimumWidth=MINIMUM_DIALOG_WIDTH, int minimumHeightOrZero=0)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
const int MINIMUM_DIALOG_WIDTH_COLOR_FILTER
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
log4cpp::Category * mainCat
Definition: Logger.cpp:14
Abstract base class for all Settings dialogs.
DlgSettingsColorFilter::~DlgSettingsColorFilter ( )
virtual

Definition at line 53 of file DlgSettingsColorFilter.cpp.

54 {
55  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsColorFilter::~DlgSettingsColorFilter";
56 
57  delete m_filterThread;
58 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
log4cpp::Category * mainCat
Definition: Logger.cpp:14

Member Function Documentation

void DlgSettingsColorFilter::createOptionalSaveDefault ( QHBoxLayout *  layout)
virtual

Let subclass define an optional Save As Default button.

Implements DlgSettingsAbstractBase.

Definition at line 116 of file DlgSettingsColorFilter.cpp.

117 {
118 }
QWidget * DlgSettingsColorFilter::createSubPanel ( )
virtual

Create dialog-specific panel to which base class will add Ok and Cancel buttons.

Implements DlgSettingsAbstractBase.

Definition at line 166 of file DlgSettingsColorFilter.cpp.

167 {
168  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsColorFilter::createSubPanel";
169 
170  const int EMPTY_COLUMN_WIDTH = 40;
171 
172  QWidget *subPanel = new QWidget ();
173  QGridLayout *layout = new QGridLayout (subPanel);
174  subPanel->setLayout (layout);
175 
176  layout->setColumnStretch(0, 0); // Empty column
177  layout->setColumnMinimumWidth(0, EMPTY_COLUMN_WIDTH);
178  layout->setColumnStretch(1, 0); // Radio buttons
179  layout->setColumnMinimumWidth(1, 210);
180  layout->setColumnStretch(2, 0); // Empty column to put some space between previous and next columns, so they are not too close
181  layout->setColumnMinimumWidth(2, 15);
182  layout->setColumnStretch(3, 1); // Profile
183  layout->setColumnMinimumWidth(4, EMPTY_COLUMN_WIDTH); // Empty column
184  layout->setColumnStretch(4, 0);
185 
186  int rowLeft = 0, rowRight = 0;
187  createControls (layout, rowLeft);
188  createProfileAndScale (layout, rowRight);
189 
190  int row = qMax (rowLeft, rowRight);
191  createPreview (layout, row);
192 
193  return subPanel;
194 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
log4cpp::Category * mainCat
Definition: Logger.cpp:14
void DlgSettingsColorFilter::handleOk ( )
protectedvirtual

Process slotOk.

Implements DlgSettingsAbstractBase.

Definition at line 217 of file DlgSettingsColorFilter.cpp.

218 {
219  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsColorFilter::handleOk";
220 
222  cmdMediator ().document(),
223  *m_modelColorFilterBefore,
224  *m_modelColorFilterAfter);
225  cmdMediator ().push (cmd);
226 
227  hide ();
228 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
Command for DlgSettingsColorFilter.
log4cpp::Category * mainCat
Definition: Logger.cpp:14
MainWindow & mainWindow()
Get method for MainWindow.
CmdMediator & cmdMediator()
Provide access to Document information wrapped inside CmdMediator.
void DlgSettingsColorFilter::load ( CmdMediator cmdMediator)
virtual

Load settings from Document.

Implements DlgSettingsAbstractBase.

Definition at line 230 of file DlgSettingsColorFilter.cpp.

231 {
232  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsColorFilter::load";
233 
234  setCmdMediator (cmdMediator);
235 
236  // Flush old data
237  delete m_modelColorFilterBefore;
238  delete m_modelColorFilterAfter;
239 
240  // Save new data
241  m_modelColorFilterBefore = new DocumentModelColorFilter (cmdMediator.document().modelColorFilter());
242  m_modelColorFilterAfter = new DocumentModelColorFilter (cmdMediator.document().modelColorFilter());
243 
244  // Populate controls. First load curve name combobox. The curve-specific controls get loaded in slotCurveName
245  m_cmbCurveName->clear ();
246  m_cmbCurveName->addItem (AXIS_CURVE_NAME);
247  QStringList curveNames = cmdMediator.curvesGraphsNames();
248  QStringList::const_iterator itr;
249  for (itr = curveNames.begin (); itr != curveNames.end (); itr++) {
250 
251  QString curveName = *itr;
252  m_cmbCurveName->addItem (curveName);
253  }
254 
255  // This sets the curve name
256  m_cmbCurveName->setCurrentText (mainWindow().selectedGraphCurve());
257  loadForCurveName();
258 
259  enableOk (false); // Disable Ok button since there not yet any changes
260 }
DocumentModelColorFilter modelColorFilter() const
Get method for DocumentModelColorFilter.
Definition: Document.cpp:688
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
Document & document()
Provide the Document to commands, primarily for undo/redo processing.
Definition: CmdMediator.cpp:72
Model for DlgSettingsColorFilter and CmdSettingsColorFilter.
log4cpp::Category * mainCat
Definition: Logger.cpp:14
void enableOk(bool enable)
Let leaf subclass control the Ok button.
MainWindow & mainWindow()
Get method for MainWindow.
QStringList curvesGraphsNames() const
See CurvesGraphs::curvesGraphsNames.
Definition: CmdMediator.cpp:62
const QString AXIS_CURVE_NAME
void DlgSettingsColorFilter::setSmallDialogs ( bool  smallDialogs)
virtual

If false then dialogs have a minimum size so all controls are visible.

Implements DlgSettingsAbstractBase.

Definition at line 292 of file DlgSettingsColorFilter.cpp.

293 {
294  if (!smallDialogs) {
295  setMinimumHeight (MINIMUM_HEIGHT);
296  }
297 }
const int MINIMUM_HEIGHT
void DlgSettingsColorFilter::signalApplyFilter ( ColorFilterMode  colorFilterMode,
double  low,
double  high 
)
signal

Send filter parameters to DlgFilterThread and DlgFilterWorker for processing.

void DlgSettingsColorFilter::slotTransferPiece ( int  xLeft,
QImage  image 
)
slot

Receive processed piece of preview image, to be inserted at xLeft to xLeft+pixmap.width().

Definition at line 360 of file DlgSettingsColorFilter.cpp.

362 {
363  // Overwrite one piece of the processed image. This approach is a bit slow because the entire QPixmap
364  // in the QGraphicsScene gets exchanged as part of each update, but that seems to be the only possible
365  // approach when using QGraphicsScene. If not fast enough or there is ugly flicker, we may replace
366  // QGraphicsScene by a simple QWidget and override the paint function - but that approach may get
367  // complicated when resizing the QGraphicsView
368  for (int xFrom = 0, xTo = xLeft; xFrom < image.width(); xFrom++, xTo++) {
369  for (int y = 0; y < image.height (); y++) {
370 
371  QColor pixel = image.pixel (xFrom, y);
372  m_imagePreview.setPixel (xTo, y, pixel.rgb());
373  }
374  }
375 
376  // Remove old pixmap
377  QGraphicsItem *itemPixmap = m_scenePreview->items().at(0);
378  m_scenePreview->removeItem (itemPixmap);
379  delete itemPixmap;
380 
381  // Save new pixmap. Only visible change should be the area covered by the pixels in image
382  m_scenePreview->addPixmap (QPixmap::fromImage (m_imagePreview));
383 }

The documentation for this class was generated from the following files: