mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 00:40:06 +00:00 
			
		
		
		
	Update settings category signals to be in line with variables and only fire once
Properly connect line labels to the category signals
This commit is contained in:
		
							parent
							
								
									20dbc7f5b7
								
							
						
					
					
						commit
						70cb3ab6d2
					
				
					 9 changed files with 252 additions and 117 deletions
				
			
		|  | @ -18,12 +18,13 @@ static const auto        logger_    = scwx::util::Logger::Create(logPrefix_); | |||
| class LineLabel::Impl | ||||
| { | ||||
| public: | ||||
|    explicit Impl() {}; | ||||
|    explicit Impl(LineLabel* self) : self_ {self} {}; | ||||
|    ~Impl() = default; | ||||
| 
 | ||||
|    void ResetLineSettings(); | ||||
| 
 | ||||
|    QImage GenerateImage() const; | ||||
|    void   UpdateLineLabel(const settings::LineSettings& lineSettings); | ||||
| 
 | ||||
|    LineLabel* self_; | ||||
| 
 | ||||
|    std::size_t borderWidth_ {1}; | ||||
|    std::size_t highlightWidth_ {1}; | ||||
|  | @ -33,26 +34,18 @@ public: | |||
|    boost::gil::rgba8_pixel_t highlightColor_ {255, 255, 0, 255}; | ||||
|    boost::gil::rgba8_pixel_t lineColor_ {0, 0, 255, 255}; | ||||
| 
 | ||||
|    settings::LineSettings* lineSettings_ {nullptr}; | ||||
| 
 | ||||
|    QPixmap pixmap_ {}; | ||||
|    bool    pixmapDirty_ {true}; | ||||
| 
 | ||||
|    boost::signals2::scoped_connection settingsStaged_ {}; | ||||
| }; | ||||
| 
 | ||||
| LineLabel::LineLabel(QWidget* parent) : | ||||
|     QFrame(parent), p {std::make_unique<Impl>()} | ||||
|     QFrame(parent), p {std::make_unique<Impl>(this)} | ||||
| { | ||||
| } | ||||
| 
 | ||||
| LineLabel::~LineLabel() | ||||
| { | ||||
|    p->ResetLineSettings(); | ||||
| } | ||||
| 
 | ||||
| void LineLabel::Impl::ResetLineSettings() | ||||
| { | ||||
|    lineSettings_ = nullptr; | ||||
| } | ||||
| LineLabel::~LineLabel() {} | ||||
| 
 | ||||
| boost::gil::rgba8_pixel_t LineLabel::border_color() const | ||||
| { | ||||
|  | @ -90,11 +83,6 @@ void LineLabel::set_border_width(std::size_t width) | |||
|    p->pixmapDirty_ = true; | ||||
|    updateGeometry(); | ||||
|    update(); | ||||
| 
 | ||||
|    if (p->lineSettings_ != nullptr) | ||||
|    { | ||||
|       p->lineSettings_->border_width().StageValue(width); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| void LineLabel::set_highlight_width(std::size_t width) | ||||
|  | @ -103,11 +91,6 @@ void LineLabel::set_highlight_width(std::size_t width) | |||
|    p->pixmapDirty_    = true; | ||||
|    updateGeometry(); | ||||
|    update(); | ||||
| 
 | ||||
|    if (p->lineSettings_ != nullptr) | ||||
|    { | ||||
|       p->lineSettings_->highlight_width().StageValue(width); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| void LineLabel::set_line_width(std::size_t width) | ||||
|  | @ -116,11 +99,6 @@ void LineLabel::set_line_width(std::size_t width) | |||
|    p->pixmapDirty_ = true; | ||||
|    updateGeometry(); | ||||
|    update(); | ||||
| 
 | ||||
|    if (p->lineSettings_ != nullptr) | ||||
|    { | ||||
|       p->lineSettings_->line_width().StageValue(width); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| void LineLabel::set_border_color(boost::gil::rgba8_pixel_t color) | ||||
|  | @ -128,12 +106,6 @@ void LineLabel::set_border_color(boost::gil::rgba8_pixel_t color) | |||
|    p->borderColor_ = color; | ||||
|    p->pixmapDirty_ = true; | ||||
|    update(); | ||||
| 
 | ||||
|    if (p->lineSettings_ != nullptr) | ||||
|    { | ||||
|       p->lineSettings_->border_color().StageValue( | ||||
|          util::color::ToArgbString(color)); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| void LineLabel::set_highlight_color(boost::gil::rgba8_pixel_t color) | ||||
|  | @ -141,12 +113,6 @@ void LineLabel::set_highlight_color(boost::gil::rgba8_pixel_t color) | |||
|    p->highlightColor_ = color; | ||||
|    p->pixmapDirty_    = true; | ||||
|    update(); | ||||
| 
 | ||||
|    if (p->lineSettings_ != nullptr) | ||||
|    { | ||||
|       p->lineSettings_->highlight_color().StageValue( | ||||
|          util::color::ToArgbString(color)); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| void LineLabel::set_line_color(boost::gil::rgba8_pixel_t color) | ||||
|  | @ -154,30 +120,30 @@ void LineLabel::set_line_color(boost::gil::rgba8_pixel_t color) | |||
|    p->lineColor_   = color; | ||||
|    p->pixmapDirty_ = true; | ||||
|    update(); | ||||
| 
 | ||||
|    if (p->lineSettings_ != nullptr) | ||||
|    { | ||||
|       p->lineSettings_->line_color().StageValue( | ||||
|          util::color::ToArgbString(color)); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
| void LineLabel::set_line_settings(settings::LineSettings& lineSettings) | ||||
| { | ||||
|    p->ResetLineSettings(); | ||||
|    p->settingsStaged_ = lineSettings.staged_signal().connect( | ||||
|       [this, &lineSettings]() { p->UpdateLineLabel(lineSettings); }); | ||||
| 
 | ||||
|    set_border_color(util::color::ToRgba8PixelT( | ||||
|    p->UpdateLineLabel(lineSettings); | ||||
| } | ||||
| 
 | ||||
| void LineLabel::Impl::UpdateLineLabel( | ||||
|    const settings::LineSettings& lineSettings) | ||||
| { | ||||
|    self_->set_border_color(util::color::ToRgba8PixelT( | ||||
|       lineSettings.border_color().GetStagedOrValue())); | ||||
|    set_highlight_color(util::color::ToRgba8PixelT( | ||||
|    self_->set_highlight_color(util::color::ToRgba8PixelT( | ||||
|       lineSettings.highlight_color().GetStagedOrValue())); | ||||
|    set_line_color( | ||||
|    self_->set_line_color( | ||||
|       util::color::ToRgba8PixelT(lineSettings.line_color().GetStagedOrValue())); | ||||
| 
 | ||||
|    set_border_width(lineSettings.border_width().GetStagedOrValue()); | ||||
|    set_highlight_width(lineSettings.highlight_width().GetStagedOrValue()); | ||||
|    set_line_width(lineSettings.line_width().GetStagedOrValue()); | ||||
| 
 | ||||
|    p->lineSettings_ = &lineSettings; | ||||
|    self_->set_border_width(lineSettings.border_width().GetStagedOrValue()); | ||||
|    self_->set_highlight_width( | ||||
|       lineSettings.highlight_width().GetStagedOrValue()); | ||||
|    self_->set_line_width(lineSettings.line_width().GetStagedOrValue()); | ||||
| } | ||||
| 
 | ||||
| QSize LineLabel::minimumSizeHint() const | ||||
|  |  | |||
|  | @ -37,13 +37,7 @@ public: | |||
|       SetupUi(); | ||||
|       ConnectSignals(); | ||||
|    } | ||||
|    ~Impl() | ||||
|    { | ||||
|       for (auto& c : bs2Connections_) | ||||
|       { | ||||
|          c.disconnect(); | ||||
|       } | ||||
|    }; | ||||
|    ~Impl() {}; | ||||
| 
 | ||||
|    void     AddPhenomenonLine(const std::string&      name, | ||||
|                               settings::LineSettings& lineSettings, | ||||
|  | @ -59,10 +53,8 @@ public: | |||
|    QStackedWidget* phenomenonPagesWidget_; | ||||
|    QListWidget*    phenomenonListView_; | ||||
| 
 | ||||
|    EditLineDialog* editLineDialog_; | ||||
|    LineLabel*      activeLineLabel_ {nullptr}; | ||||
| 
 | ||||
|    std::vector<boost::signals2::connection> bs2Connections_ {}; | ||||
|    EditLineDialog*         editLineDialog_; | ||||
|    settings::LineSettings* activeLineSettings_ {nullptr}; | ||||
| 
 | ||||
|    boost::unordered_flat_map<awips::Phenomenon, QWidget*> phenomenonPages_ {}; | ||||
| }; | ||||
|  | @ -147,30 +139,27 @@ void AlertPaletteSettingsWidget::Impl::ConnectSignals() | |||
|          } | ||||
|       }); | ||||
| 
 | ||||
|    connect( | ||||
|       editLineDialog_, | ||||
|       &EditLineDialog::accepted, | ||||
|       self_, | ||||
|       [this]() | ||||
|       { | ||||
|          // If the active line label was set
 | ||||
|          if (activeLineLabel_ != nullptr) | ||||
|          { | ||||
|             // Update the active line label with selected line settings
 | ||||
|             activeLineLabel_->set_border_color(editLineDialog_->border_color()); | ||||
|             activeLineLabel_->set_highlight_color( | ||||
|                editLineDialog_->highlight_color()); | ||||
|             activeLineLabel_->set_line_color(editLineDialog_->line_color()); | ||||
|    connect(editLineDialog_, | ||||
|            &EditLineDialog::accepted, | ||||
|            self_, | ||||
|            [this]() | ||||
|            { | ||||
|               // If the active line label was set
 | ||||
|               if (activeLineSettings_ != nullptr) | ||||
|               { | ||||
|                  // Update the active line settings with selected line settings
 | ||||
|                  activeLineSettings_->StageValues( | ||||
|                     editLineDialog_->border_color(), | ||||
|                     editLineDialog_->highlight_color(), | ||||
|                     editLineDialog_->line_color(), | ||||
|                     editLineDialog_->border_width(), | ||||
|                     editLineDialog_->highlight_width(), | ||||
|                     editLineDialog_->line_width()); | ||||
| 
 | ||||
|             activeLineLabel_->set_border_width(editLineDialog_->border_width()); | ||||
|             activeLineLabel_->set_highlight_width( | ||||
|                editLineDialog_->highlight_width()); | ||||
|             activeLineLabel_->set_line_width(editLineDialog_->line_width()); | ||||
| 
 | ||||
|             // Reset the active line label
 | ||||
|             activeLineLabel_ = nullptr; | ||||
|          } | ||||
|       }); | ||||
|                  // Reset the active line settings
 | ||||
|                  activeLineSettings_ = nullptr; | ||||
|               } | ||||
|            }); | ||||
| } | ||||
| 
 | ||||
| void AlertPaletteSettingsWidget::Impl::SelectPhenomenon( | ||||
|  | @ -260,19 +249,14 @@ void AlertPaletteSettingsWidget::Impl::AddPhenomenonLine( | |||
| 
 | ||||
|    self_->AddSettingsCategory(&lineSettings); | ||||
| 
 | ||||
|    boost::signals2::connection c = lineSettings.RegisterResetCallback( | ||||
|       [lineLabel, &lineSettings]() | ||||
|       { lineLabel->set_line_settings(lineSettings); }); | ||||
|    bs2Connections_.push_back(c); | ||||
| 
 | ||||
|    connect( | ||||
|       toolButton, | ||||
|       &QAbstractButton::clicked, | ||||
|       self_, | ||||
|       [this, lineLabel]() | ||||
|       [this, lineLabel, &lineSettings]() | ||||
|       { | ||||
|          // Set the active line label for when the dialog is finished
 | ||||
|          activeLineLabel_ = lineLabel; | ||||
|          activeLineSettings_ = &lineSettings; | ||||
| 
 | ||||
|          // Initialize dialog with current line settings
 | ||||
|          editLineDialog_->set_border_color(lineLabel->border_color()); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat