annotate base/PropertyContainer.h @ 167:665342c6ec57

* Add a bit of resistance to pane dragging so as to make it harder to inadvertently drag in the other axis from the one you intended
author Chris Cannam
date Fri, 22 Sep 2006 16:46:10 +0000
parents 4f26f623a8bc
children 60ba218a54bb
rev   line source
Chris@49 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@52 4 Sonic Visualiser
Chris@52 5 An audio file viewer and annotation editor.
Chris@52 6 Centre for Digital Music, Queen Mary, University of London.
Chris@52 7 This file copyright 2006 Chris Cannam.
Chris@0 8
Chris@52 9 This program is free software; you can redistribute it and/or
Chris@52 10 modify it under the terms of the GNU General Public License as
Chris@52 11 published by the Free Software Foundation; either version 2 of the
Chris@52 12 License, or (at your option) any later version. See the file
Chris@52 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _PROPERTY_CONTAINER_H_
Chris@0 17 #define _PROPERTY_CONTAINER_H_
Chris@0 18
Chris@46 19 #include "Command.h"
Chris@46 20
Chris@0 21 #include <QString>
Chris@0 22 #include <QObject>
Chris@0 23 #include <vector>
Chris@0 24
Chris@28 25 class PlayParameters;
Chris@0 26
Chris@29 27 class PropertyContainer : public QObject
Chris@0 28 {
Chris@29 29 Q_OBJECT
Chris@29 30
Chris@0 31 public:
Chris@27 32 virtual ~PropertyContainer() { }
Chris@27 33
Chris@0 34 typedef QString PropertyName;
Chris@0 35 typedef std::vector<PropertyName> PropertyList;
Chris@0 36
Chris@0 37 enum PropertyType {
Chris@0 38 ToggleProperty, // on or off
Chris@0 39 RangeProperty, // range of integers
Chris@0 40 ValueProperty, // range of integers given string labels
Chris@0 41 ColourProperty, // colours, get/set as qRgb
Chris@116 42 UnitsProperty, // unit from UnitDatabase, get/set unit id
Chris@0 43 InvalidProperty, // property not found!
Chris@0 44 };
Chris@0 45
Chris@0 46 /**
Chris@0 47 * Get a list of the names of all the supported properties on this
Chris@94 48 * container. These should be fixed (i.e. not internationalized).
Chris@0 49 */
Chris@0 50 virtual PropertyList getProperties() const;
Chris@0 51
Chris@0 52 /**
Chris@94 53 * Return the human-readable (and i18n'ised) name of a property.
Chris@94 54 */
Chris@94 55 virtual QString getPropertyLabel(const PropertyName &) const = 0;
Chris@94 56
Chris@94 57 /**
Chris@0 58 * Return the type of the given property, or InvalidProperty if
Chris@0 59 * the property is not supported on this container.
Chris@0 60 */
Chris@0 61 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@0 62
Chris@0 63 /**
Chris@0 64 * If this property has something in common with other properties
Chris@0 65 * on this container, return a name that can be used to group them
Chris@0 66 * (in order to save screen space, for example). e.g. "Window
Chris@0 67 * Type" and "Window Size" might both have a group name of "Window".
Chris@0 68 * If this property is not groupable, return the empty string.
Chris@0 69 */
Chris@0 70 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@0 71
Chris@0 72 /**
Chris@0 73 * Return the minimum and maximum values for the given property
Chris@0 74 * and its current value in this container. Min and/or max may be
Chris@0 75 * passed as NULL if their values are not required.
Chris@0 76 */
Chris@0 77 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@0 78 int *min, int *max) const;
Chris@0 79
Chris@0 80 /**
Chris@0 81 * If the given property is a ValueProperty, return the display
Chris@0 82 * label to be used for the given value for that property.
Chris@0 83 */
Chris@0 84 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@0 85 int value) const;
Chris@0 86
Chris@29 87 virtual QString getPropertyContainerName() const = 0;
Chris@29 88 virtual QString getPropertyContainerIconName() const = 0;
Chris@29 89
Chris@29 90 virtual PlayParameters *getPlayParameters() { return 0; }
Chris@29 91
Chris@29 92 signals:
Chris@141 93 void propertyChanged(PropertyContainer::PropertyName);
Chris@29 94
Chris@29 95 public slots:
Chris@0 96 /**
Chris@0 97 * Set a property. This is used for all property types. For
Chris@0 98 * boolean properties, zero is false and non-zero true; for
Chris@0 99 * colours, the integer value should be treated as a qRgb.
Chris@0 100 */
Chris@0 101 virtual void setProperty(const PropertyName &, int value);
Chris@46 102
Chris@46 103 /**
Chris@46 104 * Set a property using a command, supporting undo and redo.
Chris@136 105 * The default implementation should work for most subclasses.
Chris@46 106 */
Chris@46 107 virtual void setPropertyWithCommand(const PropertyName &, int value);
Chris@46 108
Chris@46 109 protected:
Chris@46 110
Chris@46 111 class SetPropertyCommand : public Command
Chris@46 112 {
Chris@46 113 public:
Chris@46 114 SetPropertyCommand(PropertyContainer *pc, const PropertyName &pn, int);
Chris@46 115 virtual ~SetPropertyCommand() { }
Chris@46 116
Chris@46 117 virtual void execute();
Chris@46 118 virtual void unexecute();
Chris@46 119 virtual QString getName() const;
Chris@46 120
Chris@46 121 protected:
Chris@46 122 PropertyContainer *m_pc;
Chris@46 123 PropertyName m_pn;
Chris@46 124 int m_value;
Chris@46 125 int m_oldValue;
Chris@46 126 };
Chris@0 127 };
Chris@0 128
Chris@0 129 #endif