Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef GRAPHICSHEET_H
00030 #define GRAPHICSHEET_H
00031
00032 #include <QtGui>
00033
00034 #include "SelectionWidget.h"
00035
00036 namespace SciFigs {
00037
00038 class GraphicObject;
00039 class SelectionWidget;
00040 class AxisWindow;
00041 class GraphContent;
00042 class TextEdit;
00043 class OrderTip;
00044 class GraphicSheetProperties;
00045
00046 class SCIFIGS_EXPORT GraphicSheet : public QScrollArea, public PropertyContext, public PropertyItem, public XMLClass
00047 {
00048 Q_OBJECT
00049
00050 Q_PROPERTY(QString objectName READ objectName WRITE setObjectName STORED true)
00051
00052 Q_PROPERTY(QString name READ dummyPropertyString WRITE setObjectName STORED false)
00053 Q_PROPERTY(QString objectList READ dummyPropertyString WRITE setDummyProperty STORED false)
00054 Q_PROPERTY(QString objectOrder READ dummyPropertyString WRITE setDummyProperty STORED false)
00055
00056 Q_PROPERTY(bool orderIndex READ isOrderIndex WRITE showOrderIndex STORED false SCRIPTABLE true)
00057 Q_PROPERTY(int objectCount READ objectCount STORED false SCRIPTABLE true)
00058 Q_PROPERTY(int transparency READ transparency WRITE setTransparency SCRIPTABLE true)
00059 Q_PROPERTY(bool transparentMask READ transparentMask WRITE setTransparentMask SCRIPTABLE true)
00060 DUMMY_PROPERTIES;
00061 public:
00062 GraphicSheet(QWidget *parent=0);
00063 ~GraphicSheet();
00064
00065 virtual const QString& xml_tagName() const {return xmlGraphicSheetTag;}
00066 static const QString xmlGraphicSheetTag;
00067
00068 QString uniqueName(GraphicObject * obj, QString newName);
00069 int objectCount();
00070 void clear(bool force);
00071 QString objectList() const;
00072 void setObjectList(QString list);
00073 void setObjectOrder(QString list);
00074
00075 int paletteCount();
00076 bool removeObject(GraphicObject * obj, bool force);
00077 void addObject(GraphicObject * obj);
00078 GraphicObject * findObject(QString tag, QString name);
00079 void showObject(GraphicObject * obj);
00080 void showAllObjects();
00081
00082 void setStatusBar(QStatusBar * s) {_statusBar=s;}
00083 QStatusBar * statusBar() {return _statusBar;}
00084 bool isOrderIndex() const {return _orderIndex >= 0;}
00085 void setOrderIndex(GraphicObject * obj);
00086
00087 void autoResizeContent();
00088 double printBottom();
00089 double printRight();
00090
00091 int maximumResolution();
00092 template <typename T> QList<T> selectedObjects() const;
00093 GraphicObject * activeObject(const char * inherits=0);
00094 void print(QPrinter& printer);
00095 Point2D currentOrigin();
00096
00097 void addFileActions(QMenu * m, QToolBar * tb, bool shortcuts=true);
00098 void addEditActions(QMenu * m, QToolBar * tb, bool shortcuts=true);
00099 void addFormatActions(QMenu * m, bool shortcuts=true);
00100 void addInsertActions(QMenu * m, QToolBar * tb, bool shortcuts=true);
00101 void addMenu(QMenu * m);
00102
00103 SelectionWidget * addSelection(GraphicObject * obj);
00104
00105 void addProperties(PropertyProxy * pp);
00106 void removeProperties(PropertyProxy * pp);
00107 virtual void properties(PropertyWidget * w) const;
00108 virtual void setProperty(uint wid, int pid, QVariant val);
00109
00110 void setTransparency(int val) {_transparency=val;}
00111 void setTransparentMask(bool val);
00112
00113 int transparency() const {return _transparency;}
00114 bool transparentMask() const {return _transparentMask;}
00115
00116 virtual QSize minimumSizeHind() const {return QSize(100,100);}
00117 protected:
00118 virtual void mousePressEvent (QMouseEvent * e);
00119 virtual void mouseReleaseEvent (QMouseEvent * e);
00120 void addActions();
00121 private:
00122 SelectionWidget * _currentActiveSelection;
00123 void printSvg(const QString& fileName, int dpi);
00124 void printSize(double& x0, double& y0, double& x1, double& y1,
00125 double& mx0, double& my0, double& mx1, double& my1);
00126
00127 bool _transparentMask;
00128 int _transparency;
00129
00130 int _orderIndex;
00131
00132 QString _currentFile;
00133
00134 Point2D _dragDelta;
00135 QTimer _dragDelay;
00136
00137
00138 QStatusBar * _statusBar;
00139
00140 QList<GraphicObject *> _loadedObjects;
00141
00142 static uint _category, _tabPrint;
00143 signals:
00144 void currentFileChanged(const QString& fileName);
00145 void activeSelectionChanged(GraphicObject * obj);
00146 private slots:
00147 void dragObjects(Point2D delta);
00148 void dragObjectsDelayed();
00149 QList<GraphicObject *> graphicObjects() const;
00150 public slots:
00151 Q_SCRIPTABLE void clear() {clear(false);}
00152 Q_SCRIPTABLE void fileNew();
00153 Q_SCRIPTABLE void fileOpen();
00154 Q_SCRIPTABLE void fileOpen(QString fileName, double dx=0, double dy=0);
00155 Q_SCRIPTABLE void fileSave();
00156 Q_SCRIPTABLE void fileSaveAs();
00157 Q_SCRIPTABLE void fileSave(QString fileName);
00158 Q_SCRIPTABLE void setPreferences ();
00159
00160 Q_SCRIPTABLE void undo();
00161 Q_SCRIPTABLE void redo();
00162 Q_SCRIPTABLE void cut();
00163 Q_SCRIPTABLE void copy();
00164 Q_SCRIPTABLE void copyImage();
00165 Q_SCRIPTABLE void paste();
00166
00167 Q_SCRIPTABLE void selectAll();
00168 Q_SCRIPTABLE bool selectAll(QString actionTitle);
00169 Q_SCRIPTABLE void unSelectAll() {selectObjects(0, Qt::NoModifier);}
00170 Q_SCRIPTABLE void selectObjects(GraphicObject * obj, Qt::KeyboardModifiers m=Qt::NoModifier);
00171 Q_SCRIPTABLE void select(GraphicObject * obj) {selectObjects(obj, Qt::NoModifier);}
00172 Q_SCRIPTABLE void addSelect(GraphicObject * obj) {selectObjects(obj, Qt::ShiftModifier);}
00173 Q_SCRIPTABLE void selectNextChild();
00174 Q_SCRIPTABLE void addSelectNextChild();
00175
00176 GraphicObject * addObject();
00177 Q_SCRIPTABLE bool removeObject(GraphicObject * obj) {return removeObject (obj, false);}
00178 Q_SCRIPTABLE GraphicObject * object(QString objectName);
00179 Q_SCRIPTABLE GraphicObject * object(int index);
00180
00181 void moveObject(GraphicObject * obj=0);
00182 void resizeObject();
00183 void startDragging();
00184 Q_SCRIPTABLE void exportFile(QString fileName=QString::null, QString fileFormat=QString::null, int dpi=0);
00185 Q_SCRIPTABLE void exportImage(QString fileName=QString::null, QString imageFormat=QString::null, int dpi=0);
00186 Q_SCRIPTABLE QPixmap image(int dpi=0);
00187 Q_SCRIPTABLE void print(int dpi=0);
00188 Q_SCRIPTABLE void print(bool outputToFile, QString name, int dpi);
00189 void updatePageLimits(QPrinter& p);
00190 Q_SCRIPTABLE void copyMakeUp();
00191 Q_SCRIPTABLE void pasteMakeUp();
00192 Q_SCRIPTABLE void saveMakeUp(QString fileName=QString::null);
00193 Q_SCRIPTABLE void restoreMakeUp(QString fileName=QString::null);
00194 Q_SCRIPTABLE void saveLayers(QString fileName=QString::null);
00195 Q_SCRIPTABLE void addLayers();
00196 virtual Q_SCRIPTABLE void update();
00197 virtual Q_SCRIPTABLE void deepUpdate();
00198 Q_SCRIPTABLE void showOrderIndex(bool isOn);
00199 Q_SCRIPTABLE void alignLeft() {alignX(0.0);}
00200 Q_SCRIPTABLE void alignHCenter() {alignX(0.5);}
00201 Q_SCRIPTABLE void alignRight() {alignX(1.0);}
00202 Q_SCRIPTABLE void alignTop() {alignY(0.0);}
00203 Q_SCRIPTABLE void alignVCenter() {alignY(0.5);}
00204 Q_SCRIPTABLE void alignBottom() {alignY(1.0);}
00205 Q_SCRIPTABLE void alignX(double localPosition);
00206 Q_SCRIPTABLE void alignY(double localPosition);
00207 Q_SCRIPTABLE void raiseSelection();
00208 Q_SCRIPTABLE void lowerSelection();
00209 Q_SCRIPTABLE void showProperties();
00210 protected:
00211 virtual void xml_polish(XML_POLISH_ARGS);
00212 virtual void xml_polishChild(XML_POLISHCHILD_ARGS);
00213 virtual void xml_writeChildren(XML_WRITECHILDREN_ARGS) const;
00214 virtual XMLMember xml_member(XML_MEMBER_ARGS);
00215 virtual bool xml_setProperty(XML_SETPROPERTY_ARGS) {return qobject_setProperty(this, memberID, tag, attributes, content, context);}
00216 };
00217
00218 template <typename T>
00219 QList<T> GraphicSheet::selectedObjects() const
00220 {
00221 QList<T> wList;
00222 QList<SelectionWidget *> wSelList=findChildren<SelectionWidget *>();
00223 SelectionWidget * wSel;
00224 foreach(wSel, wSelList) {
00225 if(wSel->state()!=SelectionWidget::Hoover) {
00226 GraphicObject * w=wSel->widget();
00227 T castedW=qobject_cast<T>(w);
00228 if(castedW)
00229 wList << castedW;
00230 }
00231 }
00232 return wList;
00233 }
00234
00235 }
00236
00237 #endif // GRAPHICSHEET_H