X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcontent_part.h;h=590be311289406c738b153423d5a6ab206a8d9e2;hb=ff639b3cf30afcc097bfd21d39c8d15f466cadd6;hp=dbc5232395bed3c49b8db3215b19b644df55b3cb;hpb=7749e3cc9ac7b51c2a77ee4f2c3c99e381747716;p=dcpomatic.git diff --git a/src/lib/content_part.h b/src/lib/content_part.h index dbc523239..590be3112 100644 --- a/src/lib/content_part.h +++ b/src/lib/content_part.h @@ -1,38 +1,42 @@ /* - Copyright (C) 2016 Carl Hetherington + Copyright (C) 2016-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ + #ifndef DCPOMATIC_CONTENT_PART_H #define DCPOMATIC_CONTENT_PART_H + +#include "change_signaller.h" #include "content.h" -#include #include + class Content; class Film; + class ContentPart { public: - ContentPart (Content* parent, boost::shared_ptr film) + explicit ContentPart (Content* parent) : _parent (parent) - , _film (film) {} protected: @@ -40,33 +44,35 @@ protected: void maybe_set (T& member, T new_value, int property) const { + ContentChangeSignaller cc (_parent, property); { boost::mutex::scoped_lock lm (_mutex); if (member == new_value) { + cc.abort (); return; } member = new_value; } - _parent->signal_changed (property); } template void maybe_set (boost::optional& member, T new_value, int property) const { + ContentChangeSignaller cc (_parent, property); { boost::mutex::scoped_lock lm (_mutex); if (member && member.get() == new_value) { + cc.abort (); return; } member = new_value; } - _parent->signal_changed (property); } Content* _parent; - boost::weak_ptr _film; mutable boost::mutex _mutex; }; + #endif