WARNING: USE THIS SOFTWARE AT YOUR OWN RISK! THIS IS EXPERIMENTAL SOFTWARE NOT INTENDED FOR PRODUCTION USE! Zuble is currently an early stage prototype. As such Zuble is minimally tested and inherently unstable. It is provided for experimental, development, and demonstration purposes only. Zuble QML Types   |  Zuble C++ Classes   |  Zuble Overview
Zuble  0.1
Zuble Framework C++/QML extension API
ZTextStream.h
Go to the documentation of this file.
1 /*
2 * Zuble - A run-time system for QML/Javascript applications
3 * Copyright (C) 2013, 2014 Bob Dinitto
4 *
5 * Filename: ZTextStream.h
6 * Created on: 11/9/2014
7 * Author: Bob Dinitto
8 *
9 * Zuble is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 *
23 */
24 
25 #ifndef ZTEXTSTREAM_H
26 #define ZTEXTSTREAM_H
27 
28 #include "ZFile.h"
29 #include "zblcore_global.h"
30 #include <QObject>
31 #include <QTextStream>
32 
33 namespace Zbl
34 {
49 class ZTextStream : public QObject
50 {
51  Q_OBJECT
52  Q_ENUMS(RealNumberNotation)
53  Q_ENUMS(FieldAlignment)
54  Q_ENUMS(Status)
55  Q_ENUMS(NumberFlag)
56 public:
57 
58  typedef QSharedPointer<QTextStream> QTextStreamPtr;
59 
60 
61  // to participate in automatic enum propagation
62  // for QML programs we redeclare these QTextStream enums;
63  // note background Javascript programs can't use QML
64  // type engine, those programs use m_tags instead
65 
67  SmartNotation = QTextStream::SmartNotation,
68  FixedNotation = QTextStream::FixedNotation,
69  ScientificNotation = QTextStream::ScientificNotation
70  };
71 
73  AlignLeft = QTextStream::AlignLeft,
74  AlignRight = QTextStream::AlignRight,
75  AlignCenter = QTextStream::AlignCenter,
76  AlignAccountingStyle = QTextStream::AlignAccountingStyle
77  };
78 
79  enum Status {
80  Ok = QTextStream::Ok,
81  ReadPastEnd = QTextStream::ReadPastEnd,
82  ReadCorruptData = QTextStream::ReadCorruptData,
83  WriteFailed = QTextStream::WriteFailed
84  };
85 
86 
87  enum NumberFlag {
88  ShowBase =QTextStream::ShowBase,
89  ForcePoint = QTextStream::ForcePoint,
90  ForceSign = QTextStream::ForceSign,
91  UppercaseBase = QTextStream::UppercaseBase,
92  UppercaseDigits = QTextStream::UppercaseDigits
93  };
94  Q_DECLARE_FLAGS(NumberFlags, NumberFlag)
95 
96 
97 
98  explicit ZTextStream(QObject *parent = nullptr);
99  explicit ZTextStream(const ZqIODevicePtr device, QObject *parent = nullptr);
100  explicit ZTextStream(const ZqStringPtr string, QObject *parent = nullptr);
101 
102  virtual ~ZTextStream();
103 
108  static void registerType();
109 
113  Q_PROPERTY(QVariant tags READ getTags)
114 
115 
120  Q_PROPERTY(QObject* device READ getJsDevice)
121 
122 
123  Q_PROPERTY(bool autoDetectUnicode READ
125 
126  Q_PROPERTY(bool atEnd READ atEnd)
127  Q_PROPERTY(QVariant pos READ pos)
128 
129  Q_PROPERTY(uint status READ getStatus)
131  Q_PROPERTY(uint padChar READ getPadChar WRITE setPadChar)
132  Q_PROPERTY(int fieldWidth READ getFieldWidth WRITE setFieldWidth)
133  Q_PROPERTY(uint numberFlags READ getNumberFlags WRITE setNumberFlags)
134  Q_PROPERTY(int integerBase READ getIntegerBase WRITE setIntegerBase)
137  Q_PROPERTY(QString string READ getString)
138 
139  QVariant getTags();
140  QObject* getJsDevice();
141 
142  bool getAutoDetectUnicode() const;
143  void setAutoDetectUnicode(bool autoDetectOn);
144  uint getStatus() const;
145  bool atEnd() const;
146  QVariant pos() const;
147  void setFieldAlignment(uint alignment);
148  uint getFieldAlignment() const;
149  void setPadChar(uint ch);
150  uint getPadChar() const;
151  void setFieldWidth(int width);
152  int getFieldWidth() const;
153  void setNumberFlags(uint flags);
154  uint getNumberFlags() const;
155  void setIntegerBase(int base);
156  int getIntegerBase() const;
157  void setRealNumberNotation(uint notation);
158  uint getRealNumberNotation() const;
159  void setRealNumberPrecision(int precision);
160  int getRealNumberPrecision() const;
161  QString getString() const;
162 
163  Q_INVOKABLE void release();
164  Q_INVOKABLE void resetStatus();
165  Q_INVOKABLE void reset();
166  Q_INVOKABLE void flush();
167  Q_INVOKABLE bool seek(QVariant pos); // tbd: should this be an integer type?
168  Q_INVOKABLE void skipWhiteSpace();
169  Q_INVOKABLE void setLocale(const QString &locale);
170 
171  Q_INVOKABLE QString read(qint64 maxSize);
172  Q_INVOKABLE QString readLine(qint64 maxSize);
173  Q_INVOKABLE QString readAll();
174  Q_INVOKABLE uint readChar();
175  Q_INVOKABLE signed short readShort();
176  Q_INVOKABLE unsigned short readUShort();
177  Q_INVOKABLE signed int readInt();
178  Q_INVOKABLE unsigned int readUInt();
179  Q_INVOKABLE signed long readLong();
180  Q_INVOKABLE unsigned long readULong();
181  Q_INVOKABLE qlonglong readLongLong();
182  Q_INVOKABLE qulonglong readULongLong();
183  Q_INVOKABLE float readFloat();
184  Q_INVOKABLE double readDouble();
185  Q_INVOKABLE QString readString();
186  Q_INVOKABLE QObject* readBytes();
187 
188  Q_INVOKABLE bool writeLine(const QString& text);
189  Q_INVOKABLE bool writeChar(uint data);
190  Q_INVOKABLE bool writeShort(signed short data);
191  Q_INVOKABLE bool writeUShort(unsigned short data);
192  Q_INVOKABLE bool writeInt(signed int data);
193  Q_INVOKABLE bool writeUInt(unsigned int data);
194  Q_INVOKABLE bool writeLong(signed long data);
195  Q_INVOKABLE bool writeULong(unsigned long data);
196  Q_INVOKABLE bool writeLongLong(qlonglong data);
197  Q_INVOKABLE bool writeULongLong(qulonglong data);
198  Q_INVOKABLE bool writeFloat(float data);
199  Q_INVOKABLE bool writeDouble(double data);
200  Q_INVOKABLE bool writeString(const QString& text);
201  Q_INVOKABLE bool writeBytes(QObject* data);
202 
203 signals:
204 
205 public slots:
206 
207  void getQDevice(QIODevice** device); // for ZioDevice
208 
209 protected:
210 
211  void createTags();
212  void initZioDevice();
213  void validateData() const;
214  void validateReadable() const;
215  void validateWritable() const;
216 
218 
219  //QTextStreamPtr m_t;
220  QTextStream* m_t;
221 
223 
228 
229 
230  //QFile* m_f;
231 
236  static QVariant m_tags;
237 };
238 
239 
240 } // Zbl
241 
242 
243 #endif // ZTEXTSTREAM_H
static void registerType()
Registers ZTextStream as a QML type.
void setRealNumberNotation(uint notation)
ZqIODevicePtr m_d
Definition: ZTextStream.h:217
QString getString() const
static QVariant m_tags
QVariantMap of QTextStream enumerations for use by Javascript programs.
Definition: ZTextStream.h:236
ZioDevice * m_zd
Pointer to contained ZioDevice object.
Definition: ZTextStream.h:227
Q_INVOKABLE bool writeShort(signed short data)
Q_INVOKABLE QString readLine(qint64 maxSize)
Q_INVOKABLE bool writeLine(const QString &text)
Q_INVOKABLE bool writeChar(uint data)
void validateReadable() const
ZTextStream(QObject *parent=nullptr)
Definition: ZTextStream.cpp:36
Q_INVOKABLE void skipWhiteSpace()
Q_INVOKABLE bool writeFloat(float data)
void setFieldWidth(int width)
virtual ~ZTextStream()
Definition: ZTextStream.cpp:84
bool getAutoDetectUnicode() const
int getFieldWidth() const
Q_INVOKABLE bool writeLong(signed long data)
uint getRealNumberNotation() const
void setAutoDetectUnicode(bool autoDetectOn)
Q_INVOKABLE signed long readLong()
Q_INVOKABLE bool writeUShort(unsigned short data)
Q_INVOKABLE double readDouble()
Q_INVOKABLE bool writeBytes(QObject *data)
void setNumberFlags(uint flags)
bool atEnd() const
Q_INVOKABLE bool writeUInt(unsigned int data)
Q_INVOKABLE bool writeULongLong(qulonglong data)
Q_INVOKABLE qulonglong readULongLong()
QSharedPointer< QString > ZqStringPtr
Definition: zglobal.h:165
void setPadChar(uint ch)
void validateWritable() const
Q_INVOKABLE signed short readShort()
QTextStream * m_t
Definition: ZTextStream.h:220
A javascript wrapper for QIODevice.
Definition: ZioDevice.h:40
void getQDevice(QIODevice **device)
Q_INVOKABLE void release()
Definition: ZAndGate.cpp:6
Q_INVOKABLE signed int readInt()
Q_INVOKABLE uint readChar()
Q_INVOKABLE QString readString()
void setRealNumberPrecision(int precision)
uint getStatus() const
QVariant pos() const
uint getPadChar() const
uint getFieldAlignment() const
Q_INVOKABLE bool writeDouble(double data)
Q_INVOKABLE void setLocale(const QString &locale)
QObject * getJsDevice()
Q_INVOKABLE unsigned long readULong()
Q_INVOKABLE void flush()
Q_INVOKABLE QString read(qint64 maxSize)
Q_INVOKABLE bool seek(QVariant pos)
QVariant tags
A Javascript object containing QFile enumeration values.
Definition: ZTextStream.h:113
Q_INVOKABLE float readFloat()
Q_INVOKABLE bool writeInt(signed int data)
uint getNumberFlags() const
QObject device
A ZioDevice object presents this object&#39;s QIODevice interface to Javascript programs.
Definition: ZTextStream.h:120
void setIntegerBase(int base)
Q_INVOKABLE bool writeULong(unsigned long data)
int getRealNumberPrecision() const
int getIntegerBase() const
Q_INVOKABLE void reset()
Q_INVOKABLE void resetStatus()
Q_INVOKABLE QObject * readBytes()
Q_INVOKABLE unsigned short readUShort()
Q_INVOKABLE bool writeLongLong(qlonglong data)
Q_INVOKABLE qlonglong readLongLong()
void setFieldAlignment(uint alignment)
void validateData() const
QVariant getTags()
QSharedPointer< QIODevice > ZqIODevicePtr
Definition: zglobal.h:164
Q_INVOKABLE bool writeString(const QString &text)
Q_INVOKABLE unsigned int readUInt()
Reads and writes UTF-8 text to an i/o stream.
Definition: ZTextStream.h:49
QSharedPointer< QTextStream > QTextStreamPtr
Definition: ZTextStream.h:58
Q_INVOKABLE QString readAll()
ZqStringPtr m_s
Definition: ZTextStream.h:222