mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	This change incorporates a reorganization of the GUI code with widgets, validators, models, and item delegates being moved to sub-directories. Relax the requirements of the ForeignKeyDelegate and related CandidateKeyFilter classes to allow them to work with constant model pointers for both referenced and referencing models.
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "DecodeHighlightingListView.hpp"
 | 
						|
 | 
						|
#include <QAction>
 | 
						|
#include <QColorDialog>
 | 
						|
 | 
						|
#include "models/DecodeHighlightingModel.hpp"
 | 
						|
#include "MessageBox.hpp"
 | 
						|
 | 
						|
#include "pimpl_impl.hpp"
 | 
						|
 | 
						|
class DecodeHighlightingListView::impl final
 | 
						|
{
 | 
						|
public:
 | 
						|
  impl ()
 | 
						|
    : fg_colour_action_ {tr ("&Foreground color ..."), nullptr}
 | 
						|
    , bg_colour_action_ {tr ("&Background color ..."), nullptr}
 | 
						|
    , defaults_action_ {tr ("&Reset this item to defaults"), nullptr}
 | 
						|
  {
 | 
						|
  }
 | 
						|
 | 
						|
  DecodeHighlightingListView * self_;
 | 
						|
  QAction fg_colour_action_;
 | 
						|
  QAction bg_colour_action_;
 | 
						|
  QAction defaults_action_;
 | 
						|
};
 | 
						|
 | 
						|
DecodeHighlightingListView::DecodeHighlightingListView (QWidget * parent)
 | 
						|
  : QListView {parent}
 | 
						|
{
 | 
						|
  addAction (&m_->fg_colour_action_);
 | 
						|
  addAction (&m_->bg_colour_action_);
 | 
						|
  addAction (&m_->defaults_action_);
 | 
						|
  connect (&m_->fg_colour_action_, &QAction::triggered, [this] (bool /*checked*/) {
 | 
						|
      auto const& index = currentIndex ();
 | 
						|
      auto colour = QColorDialog::getColor (model ()->data (index, Qt::ForegroundRole).value<QBrush> ().color ()
 | 
						|
                                            , this
 | 
						|
                                            , tr ("Choose %1 Foreground Color")
 | 
						|
                                                .arg (model ()->data (index).toString ()));
 | 
						|
      if (colour.isValid ())
 | 
						|
        {
 | 
						|
          model ()->setData (index, colour, Qt::ForegroundRole);
 | 
						|
        }
 | 
						|
    });
 | 
						|
  connect (&m_->bg_colour_action_, &QAction::triggered, [this] (bool /*checked*/) {
 | 
						|
      auto const& index = currentIndex ();
 | 
						|
      auto colour = QColorDialog::getColor (model ()->data (index, Qt::BackgroundRole).value<QBrush> ().color ()
 | 
						|
                                            , this
 | 
						|
                                            , tr ("Choose %1 Background Color")
 | 
						|
                                                .arg (model ()->data (index).toString ()));
 | 
						|
      if (colour.isValid ())
 | 
						|
        {
 | 
						|
          model ()->setData (index, colour, Qt::BackgroundRole);
 | 
						|
        }
 | 
						|
    });
 | 
						|
  connect (&m_->defaults_action_, &QAction::triggered, [this] (bool /*checked*/) {
 | 
						|
      auto const& index = currentIndex ();
 | 
						|
      model ()->setData (index, model ()->data (index, DecodeHighlightingModel::EnabledDefaultRole).toBool () ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole);
 | 
						|
      model ()->setData (index, model ()->data (index, DecodeHighlightingModel::ForegroundDefaultRole), Qt::ForegroundRole);
 | 
						|
      model ()->setData (index, model ()->data (index, DecodeHighlightingModel::BackgroundDefaultRole), Qt::BackgroundRole);
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
DecodeHighlightingListView::~DecodeHighlightingListView ()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
QSize DecodeHighlightingListView::sizeHint () const
 | 
						|
{
 | 
						|
  auto item_height = sizeHintForRow (0);
 | 
						|
  if (item_height >= 0)
 | 
						|
    {
 | 
						|
      // set the height hint to exactly the space required for all the
 | 
						|
      // items
 | 
						|
      return {width (), (model ()->rowCount () * (item_height + 2 * spacing ())) + 2 * frameWidth ()};
 | 
						|
    }
 | 
						|
  return QListView::sizeHint ();
 | 
						|
}
 |