diff base/PropertyContainer.cpp @ 46:5364a9d338a2

* Add Insert Instant function in main window * Ensure selections and window geometry are saved in session file * Add wait cursor on session file save * Various improvements to display of texts in pane (clearer readability) * Use commands for setting properties on layers and panes (still need to batch up multiple sets on the same property) * Fix failure of spectrogram to refresh when initial part became visible * Some fixes & paint optimisations in View &c * Make curve mode for time value layers work properly when resolution == 1 * Some vague improvements for time value layer vertical scale
author Chris Cannam
date Thu, 16 Mar 2006 18:46:00 +0000
parents d86891498eef
children bac8b14ab355
line wrap: on
line diff
--- a/base/PropertyContainer.cpp	Wed Mar 15 18:11:23 2006 +0000
+++ b/base/PropertyContainer.cpp	Thu Mar 16 18:46:00 2006 +0000
@@ -8,6 +8,9 @@
 */
 
 #include "PropertyContainer.h"
+#include "CommandHistory.h"
+
+#include <iostream>
 
 PropertyContainer::PropertyList
 PropertyContainer::getProperties() const
@@ -42,7 +45,47 @@
 }
 
 void
-PropertyContainer::setProperty(const PropertyName &, int) 
+PropertyContainer::setProperty(const PropertyName &name, int) 
+{
+    std::cerr << "WARNING: PropertyContainer[" << getPropertyContainerName().toStdString() << "]::setProperty(" << name.toStdString() << "): no implementation in subclass!" << std::endl;
+}
+
+void
+PropertyContainer::setPropertyWithCommand(const PropertyName &name, int value)
+{
+    int currentValue = getPropertyRangeAndValue(name, 0, 0);
+    if (value == currentValue) return;
+
+    CommandHistory::getInstance()->addCommand
+	(new SetPropertyCommand(this, name, value));
+}
+
+PropertyContainer::SetPropertyCommand::SetPropertyCommand(PropertyContainer *pc,
+							  const PropertyName &pn,
+							  int value) :
+    m_pc(pc),
+    m_pn(pn),
+    m_value(value),
+    m_oldValue(0)
 {
 }
 
+void
+PropertyContainer::SetPropertyCommand::execute()
+{
+    m_oldValue = m_pc->getPropertyRangeAndValue(m_pn, 0, 0);
+    m_pc->setProperty(m_pn, m_value);
+}
+
+void
+PropertyContainer::SetPropertyCommand::unexecute() 
+{
+    m_pc->setProperty(m_pn, m_oldValue);
+}
+
+QString
+PropertyContainer::SetPropertyCommand::getName() const
+{
+    return m_pc->tr("Set %1 Property").arg(m_pn);
+}
+