Subversion Repositories Scribus

Rev

Rev 9063 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
3 paul 7
#ifndef MPALETTE_H
8
#define MPALETTE_H
9
 
10
#include <qbuttongroup.h>
11
#include <qcheckbox.h>
12
#include <qcombobox.h>
13
#include <qframe.h>
14
#include <qgroupbox.h>
15
#include <qlabel.h>
16
#include <qpushbutton.h>
17
#include <qradiobutton.h>
18
#include <qspinbox.h>
19
#include <qtoolbutton.h>
20
#include <qwidget.h>
21
#include <qwidgetstack.h>
22
#include <qlayout.h>
23
#include <qtooltip.h>
24
#include <qimage.h>
25
#include <qpixmap.h>
27 Franz 26
#include <qlistbox.h>
68 Franz 27
#include <qlineedit.h>
1263 tsoots 28
#include <qtimer.h>
2148 fschmid 29
#include <qtoolbox.h>
2309 fschmid 30
#include <qpopupmenu.h>
2969 craig 31
 
32
#include "scribusapi.h"
1525 cbradney 33
#include "scrpalettebase.h"
3 paul 34
#include "mspinbox.h"
35
#include "pageitem.h"
36
#include "page.h"
838 cbradney 37
class ScribusDoc;
3 paul 38
#include "linkbutton.h"
39
#include "linecombo.h"
40
#include "spalette.h"
33 Franz 41
#include "fontcombo.h"
4689 mrdocs 42
#include "colorcombo.h"
710 cbradney 43
class StyleSelect;
173 Franz 44
#include "alignselect.h"
45
#include "shadebutton.h"
3540 cbradney 46
class Cpalette;
121 Franz 47
class Autoforms;
740 fschmid 48
class ArrowChooser;
5832 fschmid 49
class ScComboBox;
5257 cbradney 50
class ScribusMainWindow;
1502 tsoots 51
class UserActionSniffer;
5832 fschmid 52
/*
2969 craig 53
class SCRIBUS_API LabelButton : public QLabel
265 Franz 54
{
55
        Q_OBJECT
56
 
57
public:
58
        LabelButton(QWidget* parent, QString text1, QString text2);
59
        ~LabelButton() {};
60
        void setTexts(QString text1, QString text2);
61
        bool getState();
62
 
63
private:
64
        bool state;
65
        QString TextA;
66
        QString TextB;
67
 
68
signals:
69
        void clicked();
70
 
71
protected:
266 Franz 72
        virtual void enterEvent(QEvent*);
73
        virtual void leaveEvent(QEvent*);
74
        virtual void mousePressEvent(QMouseEvent*);
265 Franz 75
        virtual void mouseReleaseEvent(QMouseEvent *);
76
};
5832 fschmid 77
*/
2969 craig 78
class SCRIBUS_API NameWidget : public QLineEdit
68 Franz 79
{
248 Franz 80
        Q_OBJECT
68 Franz 81
 
82
public:
168 Franz 83
        NameWidget(QWidget* parent);
84
        ~NameWidget() {};
68 Franz 85
 
86
signals:
168 Franz 87
        void Leaved();
68 Franz 88
 
89
protected:
248 Franz 90
        virtual void focusOutEvent(QFocusEvent *);
68 Franz 91
};
92
 
2969 craig 93
class SCRIBUS_API Mpalette : public ScrPaletteBase
168 Franz 94
{
95
        Q_OBJECT
96
 
3 paul 97
public:
2834 cbradney 98
        Mpalette(QWidget* parent);
248 Franz 99
        ~Mpalette() {};
7526 fschmid 100
 
101
        virtual void closeEvent(QCloseEvent *closeEvent);
3540 cbradney 102
        void updateColorSpecialGradient();
103
        const VGradient getFillGradient();
104
        void updateColorList();
4704 cbradney 105
        void setGradientEditMode(bool);
168 Franz 106
        void updateCmsList();
5620 jghali 107
        void setTextFlowMode(PageItem::TextFlowMode mode);
168 Franz 108
        void ShowCMS();
4645 subik 109
        /*! \brief fills the langs combobox in language specific order
110
        \author 10/07/2004 - Petr Vanek - rewritten to fix #1185.
111
        Uses sortQStringList from utils.cpp - STL!
112
        \param langMap a structure with languages/hyphs*/
332 Franz 113
        void fillLangCombo(QMap<QString,QString> langMap);
1278 tsoots 114
        /** @brief Returns true if there is a user action going on at the moment of call. */
1286 tsoots 115
        bool userActionOn(); // not yet implemented!!! This is needed badly.
116
                         // When user releases the mouse button or arrow key, changes must be checked
117
                         // and if in ScribusView a groupTransaction has been started it must be also
118
                         // commmited
332 Franz 119
 
3540 cbradney 120
        Cpalette *Cpal;
332 Franz 121
        Autoforms* SCustom;
6451 fschmid 122
        Autoforms* SCustom2;
7992 cbradney 123
        ParaStyleComboBox *paraStyleCombo;
124
        CharStyleComboBox *charStyleCombo;
2508 fschmid 125
        FontComboH* Fonts;
740 fschmid 126
        ArrowChooser* startArrow;
127
        ArrowChooser* endArrow;
332 Franz 128
        QButtonGroup* RotationGroup;
8494 fschmid 129
        QButtonGroup* textFlowOptions;
130
        QButtonGroup* textFlowOptions2;
3540 cbradney 131
 
3 paul 132
public slots:
5257 cbradney 133
        void setMainWindow(ScribusMainWindow *mw);
2199 cbradney 134
        void languageChange();
3691 cbradney 135
        void setDoc(ScribusDoc *d);
136
        void unsetDoc();
4738 cbradney 137
        void unsetItem();
7900 fschmid 138
//      void setCurrentItem(PageItem *);
4131 cbradney 139
        void setMultipleSelection(bool);
168 Franz 140
        void NewSel(int nr);
141
        void SetCurItem(PageItem *i);
4619 cbradney 142
        void unitChange();
272 Franz 143
        void setLevel(uint l);
248 Franz 144
        void setXY(double x, double y);
145
        void setBH(double x, double y);
168 Franz 146
        void setR(double r);
147
        void setRR(double r);
148
        void setCols(int r, double g);
2309 fschmid 149
        void setLspMode(int id);
168 Franz 150
        void setLsp(double r);
151
        void setSize(int s);
8997 cbradney 152
        void setFontFace(const QString&);
2382 fschmid 153
        void setExtra(int e);
275 Franz 154
        void setDvals(double left, double top, double bottom, double right);
168 Franz 155
        void ChangeScaling();
156
        void setLvalue(double scx, double scy, double x, double y);
157
        void setSvalue(double s);
3934 cbradney 158
        void setLIvalue(Qt::PenStyle p, Qt::PenCapStyle pc, Qt::PenJoinStyle pj);
9063 avox 159
        /// update TB values:
160
        void updateStyle(const ParagraphStyle& newCurrent);
168 Franz 161
        void setStil(int s);
162
        void setAli(int e);
7992 cbradney 163
        void setParStyle(const QString& name);
164
        void setCharStyle(const QString& name);
8055 cbradney 165
        void setOpticalMargins(int);
8898 avox 166
        void setMinWordTracking();
167
        void setNormWordTracking();
168
        void setMinGlyphExtension();
169
        void setMaxGlyphExtension();
2247 fschmid 170
        void setShadowOffs(int x, int y);
2262 fschmid 171
        void setUnderline(int p, int w);
172
        void newUnderline();
2272 fschmid 173
        void setStrike(int p, int w);
174
        void newStrike();
2257 fschmid 175
        void setOutlineW(int x);
176
        void newOutlineW();
168 Franz 177
        void setTScale(int e);
178
        void NewTScale();
2230 fschmid 179
        void NewTScaleV();
2234 fschmid 180
        void NewTBase();
2230 fschmid 181
        void setTScaleV(int e);
2234 fschmid 182
        void setTBase(int e);
168 Franz 183
        void SetLineFormats(ScribusDoc *dd);
184
        void SetSTline(QListBoxItem *c);
2508 fschmid 185
        void NewTFont(QString);
168 Franz 186
        void newTxtFill();
187
        void newTxtStroke();
173 Franz 188
        void setActShade();
168 Franz 189
        void setActFarben(QString p, QString b, int shp, int shb);
190
        void ManageTabs();
4695 cbradney 191
        void setLocked(bool);
192
        void setSizeLocked(bool);
4699 cbradney 193
        void setPrintingEnabled(bool);
194
        void setFlippedH(bool);
195
        void setFlippedV(bool);
248 Franz 196
 
3 paul 197
private slots:
168 Franz 198
        void SelTab(int t);
199
        void NewX();
200
        void NewY();
201
        void NewW();
202
        void NewH();
203
        void NewR();
204
        void NewRR();
205
        void NewLsp();
265 Franz 206
        void HandleGapSwitch();
168 Franz 207
        void NewCols();
208
        void NewGap();
209
        void NewSize();
210
        void NewExtra();
4699 cbradney 211
        void handleFlipH();
212
        void handleFlipV();
168 Franz 213
        void ToggleKette();
214
        void HChange();
215
        void VChange();
2389 fschmid 216
        void ToggleKetteD();
217
        void HChangeD();
218
        void VChangeD();
168 Franz 219
        void NewLocalXY();
220
        void NewLocalSC();
2389 fschmid 221
        void NewLocalDpi();
6057 fschmid 222
        void EditEff();
223
        void EditPSD();
168 Franz 224
        void NewLS();
225
        void NewLSty();
226
        void NewLJoin();
227
        void NewLEnd();
173 Franz 228
        void NewAli(int a);
168 Franz 229
        void setTypeStyle(int s);
2247 fschmid 230
        void newShadowOffs();
168 Franz 231
        void NewLMode();
232
        void DoLower();
233
        void DoRaise();
234
        void DoFront();
235
        void DoBack();
236
        void NewRotMode(int m);
2183 fschmid 237
        void DoFlow(int id);
168 Franz 238
        void MakeIrre(int f, int c, double *vals);
239
        void EditSh();
6451 fschmid 240
        void EditSh2();
168 Franz 241
        void NewTDist();
294 Franz 242
        void NewSpGradient(double x1, double y1, double x2, double y2);
735 fschmid 243
        void toggleGradientEdit();
168 Franz 244
        void DoRevert();
9118 avox 245
        void doClearCStyle();
246
        void doClearPStyle();
168 Franz 247
        void handleLock();
4695 cbradney 248
        void handleLockSize();
168 Franz 249
        void handlePrint();
7926 fschmid 250
        void handlePathType();
251
        void handlePathFlip();
168 Franz 252
        void handlePathLine();
253
        void handlePathDist();
254
        void handlePathOffs();
4477 fschmid 255
        void handleFillRule();
5320 fschmid 256
        void handleOverprint();
168 Franz 257
        void ChProf(const QString& prn);
258
        void ChIntent();
259
        void NewName();
260
        void NewLanguage();
232 Franz 261
        void HandleTLines();
740 fschmid 262
        void setStartArrow(int id);
263
        void setEndArrow(int id);
6451 fschmid 264
        void setGroupTransparency(int trans);
265
        void setGroupBlending(int blend);
6722 fschmid 266
        void doGrouping();
248 Franz 267
 
1448 cbradney 268
protected slots:
1525 cbradney 269
        //virtual void reject();
1502 tsoots 270
        void mspinboxStartUserAction();
271
        void mspinboxFinishUserAction();
4110 cbradney 272
        void updateSpinBoxConstants();
1448 cbradney 273
 
3 paul 274
signals:
275
        void DocChanged();
5774 avox 276
        void NewParStyle(int);
277
        void NewAlignment(int);
278
        void NewEffects(int);
279
        void ShapeEdit();
280
        void NewFont(const QString&);
162 Franz 281
        void UpdtGui(int);
3 paul 282
 
283
protected:
5781 cbradney 284
        ScribusMainWindow *m_ScMW;
5257 cbradney 285
 
248 Franz 286
        QVBoxLayout* MpalLayout;
287
        QVBoxLayout* pageLayout;
288
        QVBoxLayout* pageLayout_2;
289
        QVBoxLayout* pageLayout_2a;
290
        QVBoxLayout* pageLayout_2b;
4477 fschmid 291
        QVBoxLayout* pageLayout_2c;
248 Franz 292
        QVBoxLayout* pageLayout_3;
293
        QVBoxLayout* pageLayout_4;
294
        QVBoxLayout* pageLayout_5;
295
        QVBoxLayout* pageLayout_5a;
296
        QVBoxLayout* pageLayout_5b;
5320 fschmid 297
        QVBoxLayout* pageLayout_6;
298
        QVBoxLayout* OverPLayout;
248 Franz 299
        QVBoxLayout* TLineLayout;
300
        QHBoxLayout* layout60;
301
        QGridLayout* Layout44;
302
        QHBoxLayout* Layout13;
303
        QGridLayout* Layout12;
304
        QHBoxLayout* layout47;
305
        QVBoxLayout* layout46;
306
        QGridLayout* layout41;
307
        QHBoxLayout* Layout1;
308
        QGridLayout* layout43;
309
        QVBoxLayout* Layout24;
310
        QHBoxLayout* Layout18;
311
        QHBoxLayout* Layout13_2;
312
        QGridLayout* Layout12_2;
313
        QHBoxLayout* NameGroupLayout;
314
        QGridLayout* GeoGroupLayout;
315
        QGridLayout* LayerGroupLayout;
316
        QHBoxLayout* RotationGroupLayout;
317
        QHBoxLayout* ShapeGroupLayout;
318
        QGridLayout* DistanceLayout;
319
        QGridLayout* DistanceLayout2;
4477 fschmid 320
        QVBoxLayout* DistanceLayout3;
248 Franz 321
        QGridLayout* GroupBox3aLayout;
322
        QVBoxLayout* GroupBoxCMLayout;
5620 jghali 323
        QVBoxLayout* textFlowOptionsLayout;
8494 fschmid 324
        QVBoxLayout* textFlowOptionsLayout2;
248 Franz 325
        QHBoxLayout* layout23;
326
        QHBoxLayout* layout24;
6451 fschmid 327
        QVBoxLayout* page_group_layout;
328
        QHBoxLayout* ShapeGroupLayout2;
329
        QGridLayout* Layout1t;
8054 cbradney 330
        QHBoxLayout* wordTrackingHLayout;
331
        QHBoxLayout* glyphExtensionHLayout;
3540 cbradney 332
 
333
        NameWidget* NameEdit;
334
 
335
        QWidget* page;
336
        QWidget* page_2;
337
        QWidget* page_2a;
338
        QWidget* page_2b;
4477 fschmid 339
        QWidget* page_2c;
3540 cbradney 340
        QWidget* page_3;
341
        QWidget* page_4;
342
        QWidget* page_5;
343
        QWidget* page_5a;
344
        QWidget* page_5b;
5320 fschmid 345
        QWidget* page_6;
6451 fschmid 346
        QWidget* page_group;
3540 cbradney 347
 
348
        QLabel* xposLabel;
349
        QLabel* widthLabel;
350
        QLabel* yposLabel;
351
        QLabel* heightLabel;
352
        QLabel* rotationLabel;
353
        QLabel* basepointLabel;
354
        QLabel* LevelTxt;
355
        QLabel* SRect;
6451 fschmid 356
        QLabel* SRect2;
3540 cbradney 357
        QLabel* rndcornersLabel;
358
        QLabel* startoffsetLabel;
359
        QLabel* distfromcurveLabel;
7926 fschmid 360
        QLabel* pathTextTypeLabel;
3540 cbradney 361
        QLabel* topLabel;
362
        QLabel* columnsLabel;
363
        QLabel* bottomLabel;
364
        QLabel* leftLabel;
365
        QLabel* rightLabel;
366
        QLabel* trackingLabel;
367
        QLabel* fontsizeLabel;
368
        QLabel* yscaleLabel;
369
        QLabel* xscaleLabel;
370
        QLabel* xposImgLabel;
371
        QLabel* yposImgLabel;
372
        QLabel* linewidthLabel;
373
        QLabel* endingsLabel;
374
        QLabel* linetypeLabel;
375
        QLabel* StrokeIcon;
376
        QLabel* ShadeTxt2;
377
        QLabel* ShadeTxt1;
378
        QLabel* FillIcon;
7992 cbradney 379
        QLabel* paraStyleLabel;
380
        QLabel* charStyleLabel;
3540 cbradney 381
        QLabel* langLabel;
382
        QLabel* LineModeT;
383
        QLabel* TextCms1;
384
        QLabel* TextCms2;
385
        QLabel* edgesLabel;
386
        QLabel* ChBaseTxt;
387
        QLabel* ScaleTxt;
388
        QLabel* ScaleTxtV;
389
        QLabel* imgDPIXLabel;
390
        QLabel* imgDPIYLabel;
391
        QLabel* startArrowText;
6451 fschmid 392
        QLabel* endArrowText;
393
        QLabel* TransTxt;
394
        QLabel* TransTxt2;
8054 cbradney 395
        QLabel* optMarginLabel;
396
        QLabel* wordTrackingLabel;
397
        QLabel* minWordTrackingLabel;
8865 avox 398
        QLabel* normWordTrackingLabel;
8054 cbradney 399
        QLabel* glyphExtensionLabel;
400
        QLabel* minGlyphExtensionLabel;
401
        QLabel* maxGlyphExtensionLabel;
3540 cbradney 402
 
5832 fschmid 403
//      LabelButton* colgapLabel;
404
        ScComboBox* colgapLabel;
3540 cbradney 405
        StyleSelect* SeStyle;
406
        AlignSelect* GroupAlign;
407
 
408
        LinkButton* keepImageWHRatioButton;
409
        LinkButton* keepFrameWHRatioButton;
410
        LinkButton* keepImageDPIRatioButton;
411
        LineCombo* LStyle;
412
 
413
        ShadeButton *PM1;
414
        ShadeButton *PM2;
415
        PageItem *CurItem;
416
        bool HaveDoc;
417
        bool HaveItem;
418
        ScribusDoc *doc;
419
        double Umrech;
420
        bool LMode;
421
        double RoVal;
422
 
423
 
424
        QButtonGroup* ShapeGroup;
6451 fschmid 425
        QButtonGroup* ShapeGroup2;
4477 fschmid 426
        QButtonGroup* Distance3;
5320 fschmid 427
        QButtonGroup* OverP;
3540 cbradney 428
 
429
        QToolButton* TabsButton;
430
 
431
        QToolButton* Zup;
432
        QToolButton* ZDown;
433
        QToolButton* ZTop;
434
        QToolButton* ZBottom;
435
 
436
        QToolBox* TabStack;
437
        QWidgetStack* TabStack2;
438
        QWidgetStack* TabStack3;
439
 
440
 
441
        QGroupBox* NameGroup;
442
        QGroupBox* GeoGroup;
443
        QGroupBox* LayerGroup;
444
        QGroupBox* Distance;
445
        QGroupBox* Distance2;
446
        QGroupBox* GroupBoxCM;
447
        QGroupBox* TLines;
448
        QGroupBox* GroupBox3a;
6451 fschmid 449
        QGroupBox* TransGroup;
3540 cbradney 450
 
5705 jghali 451
        QToolButton* textFlowDisabled;
452
        QToolButton* textFlowUsesFrameShape;
453
        QToolButton* textFlowUsesBoundingBox;
454
        QToolButton* textFlowUsesContourLine;
8445 fschmid 455
        QToolButton* textFlowUsesImageClipping;
8494 fschmid 456
        QToolButton* textFlowDisabled2;
457
        QToolButton* textFlowUsesFrameShape2;
458
        QToolButton* textFlowUsesBoundingBox2;
459
        QToolButton* textFlowUsesContourLine2;
460
        QToolButton* textFlowUsesImageClipping2;
3540 cbradney 461
        QCheckBox* Aspect;
7926 fschmid 462
        QCheckBox* flippedPathText;
3540 cbradney 463
        QCheckBox* showcurveCheckBox;
464
        QCheckBox* TopLine;
465
        QCheckBox* LeftLine;
466
        QCheckBox* RightLine;
467
        QCheckBox* BottomLine;
468
 
7926 fschmid 469
        ScComboBox* pathTextType;
3540 cbradney 470
        QComboBox* langCombo;
471
        QComboBox* InputP;
472
        QComboBox* MonitorI;
473
        QComboBox* LineMode;
4689 mrdocs 474
        ColorCombo* TxStroke;
3540 cbradney 475
        QComboBox* LJoinStyle;
476
        QComboBox* LEndStyle;
4689 mrdocs 477
        ColorCombo* TxFill;
6451 fschmid 478
        ScComboBox* blendMode;
8054 cbradney 479
        QComboBox *optMarginCombo;
3540 cbradney 480
 
481
        QListBox* StyledLine;
482
 
483
        MSpinBox* Width;
484
        MSpinBox* Xpos;
485
        MSpinBox* Ypos;
486
        MSpinBox* Height;
487
        MSpinBox* Rot;
488
        MSpinBox* RoundRect;
489
        MSpinBox* dGap;
490
        MSpinBox* DTop;
491
        MSpinBox* DBottom;
492
        MSpinBox* DLeft;
493
        MSpinBox* DRight;
494
        MSpinBox* Dist;
495
        MSpinBox* LineW;
496
        MSpinBox* Size;
497
        MSpinBox* LineSp;
498
        MSpinBox* Extra;
4821 cbradney 499
        MSpinBox* imageYOffsetSpinBox;
500
        MSpinBox* imageXOffsetSpinBox;
501
        MSpinBox* imageYScaleSpinBox;
502
        MSpinBox* imageXScaleSpinBox;
3540 cbradney 503
        MSpinBox* imgDpiX;
504
        MSpinBox* imgDpiY;
505
        MSpinBox* LSize;
506
        MSpinBox* ChScale;
507
        MSpinBox* ChScaleV;
508
        MSpinBox* ChBase;
8054 cbradney 509
        MSpinBox* minWordTrackingSpinBox;
8865 avox 510
        MSpinBox* normWordTrackingSpinBox;
8054 cbradney 511
        MSpinBox* minGlyphExtSpinBox;
512
        MSpinBox* maxGlyphExtSpinBox;
3540 cbradney 513
        QSpinBox* DCol;
6451 fschmid 514
        QSpinBox* TransSpin;
3540 cbradney 515
 
516
        QRadioButton* TopLeft;
517
        QRadioButton* TopRight;
518
        QRadioButton* Center;
519
        QRadioButton* BottomLeft;
520
        QRadioButton* BottomRight;
521
        QRadioButton* FreeScale;
522
        QRadioButton* FrameScale;
4477 fschmid 523
        QRadioButton* EvenOdd;
524
        QRadioButton* NonZero;
5320 fschmid 525
        QRadioButton* KnockOut;
526
        QRadioButton* Overprint;
3540 cbradney 527
 
528
        QFrame* Line1;
529
        QFrame* Line2;
530
        QFrame* Line4;
531
        QFrame* Line5;
532
        QFrame* Frame4;
533
 
534
        QPopupMenu* lineSpacingPop;
535
 
4963 cbradney 536
        QToolButton* linespacingButton;
6722 fschmid 537
        QToolButton* DoGroup;
538
        QToolButton* DoUnGroup;
3540 cbradney 539
        QToolButton* FlipH;
540
        QToolButton* FlipV;
541
        QToolButton* Locked;
542
        QToolButton* NoPrint;
543
        QToolButton* NoResize;
544
        QToolButton* Revert;
9118 avox 545
        QToolButton* charStyleClear;
546
        QToolButton* paraStyleClear;
3540 cbradney 547
        QToolButton* EditShape;
6451 fschmid 548
        QToolButton* EditShape2;
6057 fschmid 549
        QToolButton* EditEffects;
550
        QToolButton* EditPSDProps;
3540 cbradney 551
 
552
 
1502 tsoots 553
        bool _userActionOn;
554
        UserActionSniffer *userActionSniffer;
555
        void installSniffer(MSpinBox *spinBox);
2207 cbradney 556
 
557
        int idXYZItem;
558
        int idShapeItem;
559
        int idTextItem;
560
        int idImageItem;
561
        int idLineItem;
562
        int idColorsItem;
6451 fschmid 563
        int idGroupItem;
3 paul 564
};
565
 
2969 craig 566
class SCRIBUS_API UserActionSniffer : public QObject
1502 tsoots 567
{
568
        Q_OBJECT
569
 
570
public:
571
        UserActionSniffer();
572
protected:
573
        bool eventFilter( QObject *o, QEvent *e );
574
signals:
575
        void actionStart();
576
        void actionEnd();
577
};
578
 
3 paul 579
#endif