X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcontent_part.h;h=590be311289406c738b153423d5a6ab206a8d9e2;hb=182b9d2e2feb6545592868606aaf0f0146095481;hp=98e9a6d1ce2c046ea25d9bd13959a38c9ab347e7;hpb=29fe2d3a4c347e15b987f9e61e56d22a21d4678f;p=dcpomatic.git diff --git a/src/lib/content_part.h b/src/lib/content_part.h index 98e9a6d1c..590be3112 100644 --- a/src/lib/content_part.h +++ b/src/lib/content_part.h @@ -1,36 +1,41 @@ /* - 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) + explicit ContentPart (Content* parent) : _parent (parent) {} @@ -39,32 +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; mutable boost::mutex _mutex; }; + #endif