00001 #ifndef __STYLECONSTS_H
00002 #define __STYLECONSTS_H
00003
00004 typedef unsigned short StyleType;
00005
00006 #ifdef _WINDOWS
00007 #include <string.h>
00008 #endif
00009 #include <string.h>
00010 #include <stdlib.h>
00011 #include <qglobal.h>
00012 class QImage;
00013
00014 struct GraphicLink
00015 {
00016 QImage* graphic;
00017 bool isLink;
00018 unsigned long link;
00019 GraphicLink(QImage* p, bool isLnk, unsigned long tgt) :
00020 graphic(p), isLink(isLnk), link(tgt) {}
00021 ~GraphicLink();
00022 };
00023
00024 struct pmstore
00025 {
00026 unsigned int count;
00027 bool m_isScaleable;
00028 GraphicLink* graphic;
00029 pmstore(bool _canScale, QImage* p, bool isLnk, unsigned long tgt) : count(1), m_isScaleable(_canScale)
00030 {
00031 graphic = new GraphicLink(p, isLnk, tgt);
00032 }
00033 ~pmstore();
00034 };
00035
00036 enum EalignmentType
00037 {
00038 m_AlignLeft,
00039 m_AlignRight,
00040 m_AlignCentre,
00041 m_AlignJustify,
00042 m_AlignNone
00043 };
00044
00045 class CBasicStyle
00046 {
00047 friend class CStyle;
00048 bool m_bold,
00049 m_italic;
00050 unsigned long m_table;
00051 int m_fontsize;
00052 EalignmentType m_align;
00053 unsigned char red, green, blue;
00054 unsigned char bred, bgreen, bblue;
00055 unsigned char pred, pgreen, pblue;
00056 unsigned long data;
00057 unsigned long offset;
00058 bool isLink;
00059
00060 bool m_underline;
00061 bool m_strikethru;
00062 bool m_monospaced;
00063 unsigned char m_leftmargin, m_rightmargin;
00064 signed char m_extraspace;
00065 signed char m_voffset;
00066 CBasicStyle()
00067 {
00068 unset();
00069 m_table = 0xffffffff;
00070 }
00071 bool operator!=(const CBasicStyle& rhs)
00072 {
00073 return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0);
00074 }
00075 void unset()
00076 {
00077 m_bold = false;
00078 m_italic = false;
00079 m_fontsize = 0;
00080 m_align = m_AlignLeft;
00081 red = green = blue = 0;
00082 bred = bgreen = bblue = 255;
00083 pred = pgreen = pblue = 255;
00084 data = 0;
00085 offset = 0;
00086 isLink = false;
00087
00088 m_underline = false;
00089 m_strikethru = false;
00090 m_leftmargin = 0;
00091 m_rightmargin = 0;
00092 m_monospaced = false;
00093 m_extraspace = 0;
00094 m_voffset = 0;
00095 }
00096 };
00097
00098 class CStyle
00099 {
00100 CBasicStyle sty;
00101 pmstore* graphic;
00102 public:
00103 signed char getVOffset() { return sty.m_voffset; }
00104 void setVOffset(signed char sp) { sty.m_voffset = sp; }
00105 signed char getExtraSpace() { return sty.m_extraspace; }
00106 void setExtraSpace(signed char sp) { sty.m_extraspace = sp; }
00107 bool getPictureLink()
00108 {
00109 return (graphic != NULL && graphic->graphic->isLink);
00110 }
00111 unsigned long getPictureLinkData()
00112 {
00113 return graphic->graphic->link;
00114 }
00115 void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; }
00116 unsigned char getLeftMargin() { return sty.m_leftmargin; }
00117 void setRightMargin(unsigned char m) { sty.m_rightmargin = m; }
00118 unsigned char getRightMargin() { return sty.m_rightmargin; }
00119 unsigned char Red() { return sty.red; }
00120 unsigned char Green() { return sty.green; }
00121 unsigned char Blue() { return sty.blue; }
00122 void setColour(unsigned char r, unsigned char g, unsigned char b)
00123 {
00124 sty.red = r;
00125 sty.green = g;
00126 sty.blue = b;
00127 }
00128 unsigned char bRed() { return sty.bred; }
00129 unsigned char bGreen() { return sty.bgreen; }
00130 unsigned char bBlue() { return sty.bblue; }
00131 unsigned char pRed() { return sty.pred; }
00132 unsigned char pGreen() { return sty.pgreen; }
00133 unsigned char pBlue() { return sty.pblue; }
00134 void setPaper(unsigned char r, unsigned char g, unsigned char b)
00135 {
00136 sty.pred = r;
00137 sty.pgreen = g;
00138 sty.pblue = b;
00139 }
00140 void setBackground(unsigned char r, unsigned char g, unsigned char b)
00141 {
00142 sty.bred = r;
00143 sty.bgreen = g;
00144 sty.bblue = b;
00145 }
00146 CStyle() : graphic(NULL) {}
00147 ~CStyle();
00148
00149 CStyle(const CStyle&);
00150 CStyle& operator=(const CStyle&);
00151 void unset();
00152 bool isTable() const { return (sty.m_table != 0xffffffff); }
00153 void setTable(unsigned long _b) { sty.m_table = _b; }
00154 unsigned long getTable() { return sty.m_table; }
00155 bool isPicture() const { return (graphic != NULL); }
00156 bool canScale() const { return graphic->m_isScaleable; }
00157 void clearPicture();
00158 void setPicture(bool canScale, QImage* _g, bool il=false, unsigned long tgt=0);
00159 QImage* getPicture()
00160 {
00161 QImage* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL);
00162 return pm;
00163 }
00164 void setUnderline() { sty.m_underline = true; }
00165 void unsetUnderline() { sty.m_underline = false; }
00166 bool isUnderline() { return sty.m_underline; }
00167 void setStrikethru() { sty.m_strikethru = true; }
00168 void unsetStrikethru() { sty.m_strikethru = false; }
00169 bool isStrikethru() { return sty.m_strikethru; }
00170 void setBold() { sty.m_bold = true; }
00171 void unsetBold() { sty.m_bold = false; }
00172 bool isBold() { return sty.m_bold; }
00173 void setItalic() { sty.m_italic = true; }
00174 void unsetItalic() { sty.m_italic = false; }
00175 bool isItalic() { return sty.m_italic; }
00176 void setMono() { sty.m_monospaced = true; }
00177 void unsetMono() { sty.m_monospaced = false; }
00178 bool isMono() { return sty.m_monospaced; }
00179
00180 void setLeftJustify()
00181 {
00182 sty.m_align = m_AlignLeft;
00183 }
00184 void setRightJustify()
00185 {
00186 sty.m_align = m_AlignRight;
00187 }
00188 void setCentreJustify()
00189 {
00190 sty.m_align = m_AlignCentre;
00191 }
00192 void setFullJustify()
00193 {
00194 sty.m_align = m_AlignJustify;
00195 }
00196 void setNoJustify()
00197 {
00198 sty.m_align = m_AlignNone;
00199 }
00200 StyleType getJustify()
00201 {
00202 return sty.m_align;
00203 }
00204
00205 void setFontSize(int _fs)
00206 {
00207 sty.m_fontsize = _fs;
00208 }
00209 int getFontSize() const
00210 {
00211 return sty.m_fontsize;
00212 }
00213 bool operator!=(const CStyle& rhs)
00214 {
00215 return
00216 (
00217 (sty != rhs.sty) ||
00218 (graphic != rhs.graphic)
00219 );
00220 }
00221 void setLink(bool _l) { sty.isLink = _l; }
00222 bool getLink() { return sty.isLink; }
00223
00224
00225 void setData(unsigned long _d) { sty.data = _d; }
00226 unsigned long getData() { return sty.data; }
00227 void setOffset(unsigned long _d) { sty.offset = _d; }
00228 unsigned long getOffset() { return sty.offset; }
00229 void invert();
00230 };
00231
00232 #endif