BALL  1.4.1
propertyEditor.h
Go to the documentation of this file.
00001 #ifndef BALL_VIEW_WIDGETS_PROPERTYEDITOR_H
00002 #define BALL_VIEW_WIDGETS_PROPERTYEDITOR_H
00003 
00004 #ifndef BALL_COMMON_GLOBAL_H
00005 # include <BALL/COMMON/global.h>
00006 #endif
00007 
00008 #ifndef BALL_DATATYPE_HASHMAP_H
00009 # include <BALL/DATATYPE/hashMap.h>
00010 #endif
00011 
00012 #include <BALL/VIEW/UIC/ui_propertyEditor.h>
00013 #include <BALL/VIEW/UIC/ui_propEditorWidget.h>
00014 #include <BALL/VIEW/UIC/ui_editorPDBInfoDialog.h>
00015 
00016 #ifndef BALL_FORMAT_PDBINFO_H
00017 # include <BALL/FORMAT/PDBInfo.h>
00018 #endif
00019 
00020 #include <QtGui/QWidget>
00021 
00022 class QLabel;
00023 class QSpinBox;
00024 class QLineEdit;
00025 class QCheckBox;
00026 
00027 namespace BALL
00028 {
00029   class NamedProperty;
00030   class PropertyManager;
00031 
00032   namespace VIEW
00033   {
00038     class PropEditorWidget : public QWidget
00039     {
00040       Q_OBJECT
00041 
00042       public:
00046         PropEditorWidget(const std::string& name, QWidget* parent);
00047 
00051         virtual const QString& getName() const;
00052 
00056         void setEditable(bool mode);
00057 
00061         bool isEditable() const;
00062 
00070         void apply(PropertyManager* man, bool create = false);
00071 
00075         void reset(PropertyManager* man);
00076 
00081         virtual PropEditorWidget* clone(const std::string& name, QWidget* parent) = 0;
00082 
00083       signals:
00087         void deleteProperty();
00088 
00092         void duplicateProperty();
00093 
00097         void valueChanged();
00098 
00099       protected:
00100         void setupUi_();
00101 
00105         bool addWidget_(int i, QWidget* w);
00106 
00111         virtual void apply_(PropertyManager* man) = 0;
00112 
00117         virtual void reset_(const NamedProperty& prop) = 0;
00118 
00119         QString name_;
00120         Ui::PropEditorWidget ui_;
00121     };
00122 
00123     class BoolEditorWidget : public PropEditorWidget
00124     {
00125       Q_OBJECT
00126 
00127       public:
00128         BoolEditorWidget(const NamedProperty& prop, QWidget* parent);
00129         virtual BoolEditorWidget* clone(const std::string& name, QWidget* parent);
00130 
00131       protected:
00132         virtual void apply_(PropertyManager* man);
00133         virtual void reset_(const NamedProperty& prop);
00134 
00135       private:
00136         QCheckBox* box_;
00137     };
00138 
00139     class IntEditorWidget : public PropEditorWidget
00140     {
00141       Q_OBJECT
00142 
00143       public:
00144         IntEditorWidget(const NamedProperty& prop, QWidget* parent);
00145         virtual IntEditorWidget* clone(const std::string& name, QWidget* parent);
00146 
00147       protected:
00148         virtual void apply_(PropertyManager* man);
00149         virtual void reset_(const NamedProperty& prop);
00150 
00151 
00152       private:
00153         QSpinBox* box_;
00154     };
00155 
00156     class UIntEditorWidget : public PropEditorWidget
00157     {
00158       Q_OBJECT
00159 
00160       public:
00161         UIntEditorWidget(const NamedProperty& prop, QWidget* parent);
00162         virtual UIntEditorWidget* clone(const std::string& name, QWidget* parent);
00163 
00164       protected:
00165         virtual void apply_(PropertyManager* man);
00166         virtual void reset_(const NamedProperty& prop);
00167 
00168       private:
00169         QSpinBox* box_;
00170     };
00171 
00172     class FloatEditorWidget : public PropEditorWidget
00173     {
00174       Q_OBJECT
00175 
00176       public:
00177         FloatEditorWidget(const NamedProperty& prop, QWidget* parent);
00178         virtual FloatEditorWidget* clone(const std::string& name, QWidget* parent);
00179 
00180       protected:
00181         virtual void apply_(PropertyManager* man);
00182         virtual void reset_(const NamedProperty& prop);
00183 
00184       private:
00185         QLineEdit* edit_;
00186     };
00187 
00188     class DoubleEditorWidget : public PropEditorWidget
00189     {
00190       Q_OBJECT
00191 
00192       public:
00193         DoubleEditorWidget(const NamedProperty& prop, QWidget* parent);
00194         virtual DoubleEditorWidget* clone(const std::string& name, QWidget* parent);
00195 
00196       protected:
00197         virtual void apply_(PropertyManager* man);
00198         virtual void reset_(const NamedProperty& prop);
00199 
00200       private:
00201         QLineEdit* edit_;
00202     };
00203 
00204     class StringEditorWidget : public PropEditorWidget
00205     {
00206       Q_OBJECT
00207 
00208       public:
00209         StringEditorWidget(const NamedProperty& prop, QWidget* parent);
00210         virtual StringEditorWidget* clone(const std::string& name, QWidget* parent);
00211 
00212       protected:
00213         virtual void apply_(PropertyManager* man);
00214         virtual void reset_(const NamedProperty& prop);
00215 
00216       private:
00217         QLineEdit* edit_;
00218     };
00219 
00223     class PropDeleteWidget : public PropEditorWidget
00224     {
00225       public:
00226         PropDeleteWidget(const NamedProperty& prop, QWidget* parent)
00227           : PropEditorWidget(prop.getName(), parent)
00228         {
00229           addWidget_(1,new QLabel(tr("(not editable)"),this));
00230           ui_.duplicate_button->setEnabled(false);
00231         }
00232         virtual PropEditorWidget* clone(const std::string&, QWidget*)
00233         {
00234           return NULL;
00235         }
00236       protected:
00237         virtual void apply_(PropertyManager *) {}
00238         virtual void reset_(const NamedProperty &) {}
00239     };
00240 
00241     class PDBInfoEditorWidget : public PropEditorWidget
00242     {
00243       Q_OBJECT
00244 
00245       public:
00246         PDBInfoEditorWidget(const PDBInfo& info, QWidget* parent);
00247         virtual PDBInfoEditorWidget* clone(const std::string& name, QWidget* parent);
00248 
00249       protected slots:
00250         void startEditorDialog();
00251 
00252       protected:
00253         virtual void apply_(PropertyManager* man);
00254         virtual void reset_(const NamedProperty& prop);
00255 
00256       private:
00257         // TODO: This should maybe become a generic TextEditor and not be as hackish.
00258         class EditorPDBInfoDialog : public QDialog {
00259         public:
00260           EditorPDBInfoDialog(QWidget* parent) : QDialog(parent)
00261           {
00262             ui_.setupUi(this);
00263             QFont mono("Monaco"); mono.setStyleHint(QFont::TypeWriter);
00264             ui_.textEditor->setFont(mono);
00265           }
00266         protected:
00267           friend class PDBInfoEditorWidget;
00268           Ui::editorPDBInfoDialog ui_;
00269         };
00270 
00271         PDBInfo localCopy_;
00272         EditorPDBInfoDialog* editorDialog_;
00273     };
00274 
00281     class BALL_VIEW_EXPORT PropertyEditor : public QWidget
00282     {
00283       Q_OBJECT
00284 
00285       public:
00292         explicit PropertyEditor(QWidget* parent = 0, bool editable = true);
00293 
00301         PropertyEditor(PropertyManager* manager, QWidget* parent, bool editable = true);
00302 
00308         void setPropertyManager(PropertyManager* man);
00309 
00313         void setEditable(bool mode);
00314 
00318         bool isEditable() const;
00319 
00323         bool hasChanges() const;
00324 
00325       public slots:
00329         void apply();
00330 
00334         void reset();
00335 
00336       signals:
00340         void valueChanged();
00341 
00342       protected:
00343         void setupUi_();
00344 
00345         PropEditorWidget* addProperty_(const NamedProperty& prop);
00346         PropEditorWidget* addProperty_(PropEditorWidget* editor);
00347         PropEditorWidget* createEditorWidget_(const NamedProperty& prop);
00348         QString chooseName_(const QString& initial);
00349         void deleteProperty_(PropEditorWidget* editor);
00350 
00351       protected slots:
00352         void scheduleDelete_();
00353         void scheduleDuplicate_();
00354         void valueChanged_();
00355 
00356         void createNewBool_();
00357         void createNewInt_();
00358         void createNewUInt_();
00359         void createNewFloat_();
00360         void createNewDouble_();
00361         void createNewString_();
00362 
00363       private:
00364         bool has_changes_;
00365         bool is_editable_;
00366         PropertyManager* manager_;
00367         QList<PropEditorWidget*> new_properties_;
00368         QList<PropEditorWidget*> deleted_properties_;
00369 
00370         Ui::PropertyEditor ui_;
00371     };
00372 
00373   }
00374 }
00375 
00376 #endif //BALL_VIEW_WIDGETS_PROPERTYEDITOR_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines