45
#include "ipecanvas.h"
46
#include "ipeoverlay.h"
64
// --------------------------------------------------------------------
66
class AppUi : public QMainWindow, public IpeCanvasServices,
67
public IpeOverlayServices, public IpeletHelper {
71
enum TCommands { ECmdGroup, ECmdUngroup, ECmdDuplicate, ECmdFront, ECmdBack,
72
ECmdForward, ECmdBackward, ECmdBehind, ECmdBefore,
73
ECmdCut, ECmdCopy, ECmdPaste, ECmdDelete, ECmdSelectAll,
74
ECmdNewLayer, ECmdLineWidth, ECmdDashStyle,
75
ECmdTextSize, ECmdMarkShape, ECmdMarkSize,
76
ECmdTextStyle, ECmdVerticalAlign, ECmdHorizontalAlign,
77
ECmdTransformableText, ECmdPinned,
78
ECmdLineJoin, ECmdLineCap, ECmdWindRule,
79
ECmdUndo, ECmdRedo, ECmdEdit,
80
ECmdSetArrows, ECmdArrowSize, ECmdStroke, ECmdFill,
81
ECmdComposePaths, ECmdJoinPaths, ECmdDecomposePath,
82
ECmdHere, ECmdSetOrigin, ECmdResetOrigin,
83
ECmdSetOriginSnap, ECmdSetDirection, ECmdSetDirectionSnap,
85
ECmdSetLine, ECmdSetLineSnap,
86
ECmdNewLayerNewView, ECmdNewView, ECmdDeleteView,
87
ECmdFirstView, ECmdLastView,
91
AppUi(QWidget* parent=0, Qt::WFlags f=0);
35
#include "ipeqtcanvas.h"
37
#include <QMainWindow>
40
#include <QDockWidget>
41
#include <QActionGroup>
42
#include <QListWidget>
45
#include <QToolButton>
48
using namespace ipeqt;
50
// avoid including Lua headers here
51
typedef struct lua_State lua_State;
53
// --------------------------------------------------------------------
58
QIcon icon(String name);
59
static QIcon colorIcon(Color color);
60
QPixmap pixmap(String name);
61
String iconDir() const { return iIconDir; }
67
static Prefs *singleton;
71
// --------------------------------------------------------------------
73
class LayerBox : public QListWidget {
76
LayerBox(QWidget *parent = 0);
78
void set(const Page *page, int view);
81
void activated(String name, String layer);
82
void showLayerBoxPopup(Vector v, String layer);
85
void layerChanged(QListWidgetItem *item);
88
virtual void mouseReleaseEvent(QMouseEvent *e);
89
virtual void mousePressEvent(QMouseEvent *e);
91
void addAction(QMenu *m, QListWidgetItem *item, String name,
98
// --------------------------------------------------------------------
100
class PathView : public QWidget {
104
PathView(QWidget* parent = 0, Qt::WFlags f = 0);
106
void set(const AllAttributes &all, Cascade *sheet);
108
virtual QSize sizeHint() const;
111
void activated(String name);
112
void showPathStylePopup(Vector v);
115
virtual void paintEvent(QPaintEvent *ev);
116
virtual void mouseReleaseEvent(QMouseEvent *e);
117
virtual void mousePressEvent(QMouseEvent *e);
118
virtual bool event(QEvent *ev);
125
// --------------------------------------------------------------------
129
class AppUi : public QMainWindow {
133
enum { EFileMenu, EEditMenu, EPropertiesMenu, ESnapMenu,
134
EModeMenu, EZoomMenu, ELayerMenu, EViewMenu,
135
EPageMenu, EIpeletMenu, EHelpMenu, ENumMenu };
137
// change list in front of AppUi::selector if enum changes
138
enum { EUiStroke, EUiFill, EUiPen, EUiTextSize, EUiMarkShape,
139
EUiSymbolSize, EUiGridSize, EUiAngleSize, EUiNum,
140
EUiView = EUiNum, EUiPage };
143
AppUi(lua_State *L0, int model, Qt::WFlags f=0);
94
bool Load(QString fileName);
95
bool Save(QString fname, bool warnOverwrite);
146
Canvas *canvas() { return iCanvas; }
147
void setupSymbolicNames(const Cascade *sheet);
148
void setAttributes(const AllAttributes &all, Cascade *sheet);
149
void setGridAngleSize(Attribute abs_grid, Attribute abs_angle);
150
void setLayers(const Page *page, int view);
151
void setZoom(double zoom);
152
void setActionsEnabled(bool mode);
153
QAction *findAction(const char *name) const;
154
void setNumbers(String vno, String pno);
97
static void ReadKeyAssignment();
156
// direct Lua methods
157
int setBookmarks(lua_State *L);
101
void UndoCmd(int cmd);
102
void SnapCmd(int cmd);
104
void InsertTextBox();
118
void changeTextWidth();
122
bool RunLatex(bool force = true);
126
void EditBookmarks();
131
void CopyPage(bool cut = false);
142
void UpdateStyleSheets();
147
void SetCreator(QAction *action);
148
void SetMouseDisplayIn(int);
160
void action(String name);
161
void qAction(const QString &name);
162
void selectLayerAction(QAction *a);
163
void moveToLayerAction(QAction *a);
164
void textStyleAction(QAction *a);
166
void layerAction(String name, String layer);
167
void mouseAction(int button);
168
void positionChanged();
169
void toolChanged(bool hasTool);
172
void wheelZoom(int degrees);
173
void absoluteButton(int id);
174
void selector(int id, String value);
175
void comboSelector(int id);
177
void bookmarkSelected(QListWidgetItem *item);
179
void aboutToShowSelectLayerMenu();
180
void aboutToShowMoveToLayerMenu();
181
void aboutToShowTextStyleMenu();
182
void showPathStylePopup(Vector v);
183
void showLayerBoxPopup(Vector v, String layer);
186
void addItem(QMenu *m, const QString &title, const char *name);
187
void addItem(int m, const QString &title, const char *name);
188
void addSnap(const char *name);
190
void callSelector(String name, String value);
191
void callSelector(const char *name, Color color);
192
void callSelector(const char *name, double scalar);
193
void setCheckMark(String name, Attribute a);
153
196
void closeEvent(QCloseEvent *ev);
156
void aboutToShowEditMenu();
157
void aboutToShowPropertiesMenu();
158
void aboutToShowMouseUnitsMenu();
160
void PageChanged(int);
162
void ViewChanged(int);
164
void ResolutionChanged(int);
165
void AbsoluteAttributes(bool);
166
void AbsoluteSnapping(bool);
167
void ToggleAbsoluteAttributes();
169
void SetStrokeColor();
171
void SetStrokeColorName(int item);
172
void SetFillColorName(int item);
174
void setMarkShape(int id);
175
void setTransformable(int id);
176
void setHorizontalAlignment(int id);
177
void setVerticalAlignment(int id);
178
void setTextStyle(int id);
179
void setPinned(int id);
180
void setLineJoin(int id);
181
void setLineCap(int id);
182
void setWindRule(int id);
184
void moveToLayer(int id);
185
void selectInLayer(int id);
187
void LineWidthChanged(int id);
188
void AbsLineWidthChanged(int val);
189
void DashStyleChanged(int id);
190
void TextSizeChanged(int id);
191
void AbsTextSizeChanged(int val);
192
void MarkSizeChanged(int id);
193
void AbsMarkSizeChanged(int val);
194
void ArrowSizeChanged(int id);
195
void AbsArrowSizeChanged(int val);
196
void ArrowChanged(bool on);
197
void GridSizeChanged(int id);
198
void AbsGridSizeChanged(int val);
199
void AngleSizeChanged(int id);
200
void AbsAngleSizeChanged(int val);
202
void SnapChanged(bool);
203
void GridVisible(bool);
204
void CoordinatesVisible(bool);
205
void LayerRightPress(QListWidgetItem *item, const QPoint &pos);
206
void LayerChanged(QListWidgetItem *item);
207
void BookmarkSelected(QListWidgetItem *item);
209
void PreferencesChanged();
211
private: // from IpeCanvasServices
212
virtual IpeBuffer StandardFont(IpeString fontName);
213
virtual void CvSvcRequestOverlay(QMouseEvent *ev);
214
virtual void CvSvcSetDrawingMode(bool mode);
215
virtual void CvSvcWheelZoom(int delta);
216
virtual void CvSvcMousePosition(const IpeVector &pos);
217
virtual void CvSvcClearMessage();
219
private: // from IpeOverlayServices
220
virtual void OvSvcAddObject(IpeObject *obj);
221
virtual const IpeAllAttributes &OvSvcAttributes();
222
virtual const IpeStyleSheet *OvSvcStyleSheet();
223
virtual void OvSvcAddUndoItem(IpePage *page, QString s);
224
virtual void OvSvcAddUndoItem(IpePage::iterator it, IpePage *page,
225
const IpePgObject &original, QString s);
226
virtual void OvSvcMessage(QString s);
228
private: // from IpeletHelper
229
virtual void Message(const char *msg);
230
virtual int MessageBox(const char *text, const char *button1,
231
const char *button2, const char *button3);
232
virtual bool GetString(const char *prompt, IpeString &str);
233
virtual const IpeStyleSheet *StyleSheet();
234
virtual const IpeDocument *Document();
235
virtual IpeDocument *EditDocument();
236
virtual int CurrentPage() const;
237
virtual int CurrentView() const;
238
virtual int CurrentLayer() const;
239
virtual const IpeSnapData &SnapData() const;
240
virtual const IpeAllAttributes &Attributes() const;
243
QKeySequence Key(IpeString function) const;
244
inline IpePage *Page() { return iDoc->page(iPno); }
245
void FitBox(const IpeRect &box);
247
void SetGridSizeFromPage();
248
void SwitchAttributeUi();
251
void ShowStyleInUi();
252
void AddUndo(IpeUndoItem *item);
254
IpeAttribute PageColor();
256
void AutoExport(IpeDocument::TFormat fm, const QString &fn,
259
void ErrMsg(QString str);
261
IpeFixed AbsValue(IpeAttribute attr);
262
void ConvertAbsolute(DecimalSpinBox *spin, IpeAttribute &attr);
264
void ResetCombo(IpeKind kind, QComboBox *combo,
265
IpeAttribute &attr, QPixmap *pixmap = 0);
266
void InsertColor(QComboBox *combo, IpeAttribute sym);
267
void SetColorFromQColor(IpeAttribute &colorToSet, QColor &qColor,
268
QPushButton *button);
270
virtual bool eventFilter(QObject *obj, QEvent *ev);
271
void addActions(QMenu *menu, const char *text[], int num, const char *slot);
279
QMenu *iPropertiesMenu;
289
QMenu *iTransformableMenu;
200
int iModel; // reference to Lua model
203
AllAttributes iAll; // current settings in UI
208
QMenu *iMenu[ENumMenu];
209
QMenu *iSelectLayerMenu;
210
QMenu *iMoveToLayerMenu;
290
211
QMenu *iTextStyleMenu;
291
QMenu *iMarkShapeMenu;
292
QMenu *iLabelVerticalAlignmentMenu;
293
QMenu *iLabelHorizontalAlignmentMenu;
295
QMenu *iLineJoinMenu;
297
QMenu *iWindRuleMenu;
299
QMenu *iMouseUnitsMenu;
301
QMenu *iSelectInLayerMenu;
302
QMenu *iMoveToLayerMenu;
304
QToolBar *iFileTools;
305
QToolBar *iResolutionTools;
306
QToolBar *iPageTools;
213
QToolButton *iButton[EUiGridSize];
214
QComboBox *iSelector[EUiNum];
216
QToolButton *iViewNumber;
217
QToolButton *iPageNumber;
307
219
QToolBar *iSnapTools;
308
220
QToolBar *iObjectTools;