|
1 // |
|
2 // OSSP asgui - Accounting system graphical user interface |
|
3 // Copyright (c) 2002-2004 The OSSP Project (http://www.ossp.org/) |
|
4 // Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com> |
|
5 // Copyright (c) 2002-2004 Michael Schloh von Bennewitz <michael@schloh.com> |
|
6 // Copyright (c) 2002-2004 Cable & Wireless Telecommunications Services GmbH |
|
7 // |
|
8 // This file is part of OSSP asgui, an accounting system graphical user |
|
9 // interface which can be found at http://www.ossp.org/pkg/tool/asgui/. |
|
10 // |
|
11 // Permission to use, copy, modify, and distribute this software for |
|
12 // any purpose with or without fee is hereby granted, provided that |
|
13 // the above copyright notice and this permission notice appear in all |
|
14 // copies. |
|
15 // |
|
16 // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
|
17 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
18 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
19 // IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR |
|
20 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
23 // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
24 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
25 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
26 // OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
27 // SUCH DAMAGE. |
|
28 // |
|
29 // as_gui.h: ISO C++ interface |
|
30 // |
|
31 |
|
32 #ifndef AS_GUI_MWIN_H |
|
33 #define AS_GUI_MWIN_H |
|
34 |
|
35 #include <qmainwindow.h> |
|
36 |
|
37 #ifdef HAVE_CONFIG_H |
|
38 #include "ac_config.h" |
|
39 #endif |
|
40 |
|
41 #include "as_except.h" // Exception classes |
|
42 |
|
43 // Version information |
|
44 #define _AS_VERSION_CPP_AS_HEADER_ |
|
45 #include "as_version.cpp" |
|
46 #undef _AS_VERSION_CPP_AS_HEADER_ |
|
47 |
|
48 // Trolltech class prototypes |
|
49 class QAction; |
|
50 class QHeader; |
|
51 class QTimeEdit; |
|
52 class QComboBox; |
|
53 class QLineEdit; |
|
54 class QLabel; |
|
55 class QDate; |
|
56 class QFile; |
|
57 |
|
58 // Local class prototypes |
|
59 class ASTimeEdit; |
|
60 class Daydatedit; // Might be replaced with ASTimeEdit throughout |
|
61 class TiTable; |
|
62 class Preferences; |
|
63 class Prefpanel; |
|
64 |
|
65 // Intentional no operation |
|
66 #define TITRAQ_NOP ((void)0) |
|
67 |
|
68 #ifdef HAVE_CONFIG_H |
|
69 #if (SIZEOF_CHAR == 1) |
|
70 typedef unsigned char U8; |
|
71 #else |
|
72 ?==Error: Undefined 8 bit type |
|
73 #endif // U8 |
|
74 |
|
75 #if (SIZEOF_SHORT == 2) |
|
76 typedef unsigned short U16; |
|
77 #elif (SIZEOF_INT == 2) |
|
78 typedef unsigned int U16; |
|
79 #elif (SIZEOF_LONG == 2) |
|
80 typedef unsigned long U16; |
|
81 #else |
|
82 ?==Error: Undefined 16 bit type |
|
83 #endif // U16 |
|
84 |
|
85 #if (SIZEOF_SHORT == 4) |
|
86 typedef unsigned short U32; |
|
87 #elif (SIZEOF_INT == 4) |
|
88 typedef unsigned int U32; |
|
89 #elif (SIZEOF_LONG == 4) |
|
90 typedef unsigned long U32; |
|
91 #else |
|
92 ?==Error: Undefined 32 bit type |
|
93 #endif // U32 |
|
94 |
|
95 #else // HAVE_CONFIG_H (not defined) |
|
96 typedef unsigned char U8; |
|
97 |
|
98 #if (2 == 2) |
|
99 typedef unsigned short U16; |
|
100 #elif (4 == 2) |
|
101 typedef unsigned int U16; |
|
102 #else |
|
103 ?==Error: Undefined 16 bit type |
|
104 #endif |
|
105 |
|
106 #if (2 == 4) |
|
107 typedef unsigned short U32; |
|
108 #elif (4 == 4) |
|
109 typedef unsigned int U32; |
|
110 #elif (4 == 4) |
|
111 typedef unsigned long U32; |
|
112 #else |
|
113 ?== Error: Undefined 32 bit type |
|
114 #endif |
|
115 #endif // HAVE_CONFIG_H |
|
116 |
|
117 |
|
118 // Main table size |
|
119 const int g_knBlocks = 32; |
|
120 |
|
121 // Styles enumeration |
|
122 typedef enum |
|
123 { |
|
124 TITRAQ_STYLECDE, |
|
125 TITRAQ_STYLESGI, |
|
126 TITRAQ_STYLEMOTIF, |
|
127 TITRAQ_STYLEMPLUS, |
|
128 TITRAQ_STYLEPLAT, |
|
129 TITRAQ_STYLEMSOFT |
|
130 } styles_t; |
|
131 |
|
132 // Main application form window |
|
133 class Titraqform : public QMainWindow |
|
134 { |
|
135 Q_OBJECT // Generate MOC object model stubs |
|
136 |
|
137 public: |
|
138 Titraqform(QWidget *pParent = 0, const char *kszName = 0, WFlags Flags = 0); |
|
139 ~Titraqform(void); |
|
140 |
|
141 // Accessor methods |
|
142 const QString getRowdata(void) const; // Get a whole row of data |
|
143 void setRowdata(QString &) const; // Set a whole row of data |
|
144 const int getFirstcol(void) const; // Learn which col is first |
|
145 const bool isOpen(void) {return (m_szFilename == NULL) ? false : true;}; // Doc state |
|
146 void setOpen(bool bDocopen = true) // Set state of document |
|
147 { |
|
148 if (bDocopen) { |
|
149 if (m_szFilename == NULL) |
|
150 m_szFilename = new QString(); |
|
151 } |
|
152 else |
|
153 if (m_szFilename != NULL) { |
|
154 delete m_szFilename; |
|
155 m_szFilename = NULL; |
|
156 } |
|
157 }; |
|
158 const QString *getFilename(void) // Get the current file name |
|
159 { |
|
160 if (this->isOpen()) |
|
161 return m_szFilename; |
|
162 else |
|
163 throw Genexcept("File name does not exist."); |
|
164 }; |
|
165 void setFilename(const QString &Fname) // Set file name |
|
166 { |
|
167 if (this->isOpen()) // If a file name exists |
|
168 setOpen(false); // then get rid of it first |
|
169 m_szFilename = new QString(Fname); |
|
170 }; |
|
171 |
|
172 // Utility members |
|
173 void loadInit(void); // Parse cmds and open initial file |
|
174 |
|
175 // Top level members |
|
176 Preferences *m_pPrefs; |
|
177 |
|
178 // Main application actions |
|
179 QAction *m_pFilenewact, *m_pFileopenact; |
|
180 QAction *m_pFilesaveact, *m_pFilesaveasact; |
|
181 QAction *m_pFilecloseact, *m_pFilequitact; |
|
182 QAction *m_pAddrowact, *m_pDelrowact; |
|
183 QAction *m_pRefreshact, *m_pCutact; |
|
184 QAction *m_pCopyact, *m_pPasteact; |
|
185 QAction *m_pSyncact, *m_pPrefsact; |
|
186 QAction *m_pReportact; |
|
187 |
|
188 // Table, cells, and entries in package layout |
|
189 TiTable *m_pMaintable; |
|
190 QHeader *m_pTablehead; |
|
191 QStringList *m_pTaskentries; |
|
192 |
|
193 // Edition widgets |
|
194 QLabel *m_pStatusedit; // Control to show entry status |
|
195 QLineEdit *m_pLineedit; // Control to line number |
|
196 QLineEdit *m_pUseredit; // Control to edit user name |
|
197 QLineEdit *m_pGuidedit; // Control to edit GUID |
|
198 QLineEdit *m_pCrcedit; // Control to edit CRC |
|
199 QLineEdit *m_pRevedit; // Control to edit revision |
|
200 Daydatedit *m_pDateedit; // Control to edit date |
|
201 QTimeEdit *m_pStarttime; // Control to edit start time |
|
202 QTimeEdit *m_pEndtime; // Control to edit finish time |
|
203 // QTimeEdit *m_pAmount; // Control to edit total time |
|
204 ASTimeEdit *m_pAmount; // Control to edit total time |
|
205 QComboBox *m_pTasks; // Control to choose a task |
|
206 QLineEdit *m_pRemark; // Control to edit remark |
|
207 |
|
208 protected slots: |
|
209 void cutEntry(void); // Cut task entries from the list |
|
210 void copyEntry(void); // Copy task entries from the list |
|
211 void pasteEntry(void); // Paste task entries to the list |
|
212 void addEntry(int nRows= -1); // Add task entries to the list |
|
213 void delEntry(int nRows= -1); // Delete task entries from the list |
|
214 void refreshDisplay(void); // Refresh the display of all data items |
|
215 void syncIiop(void); // Syncronize data with server using IIOP |
|
216 void syncSoap(void); // Syncronize data with server using SOAP |
|
217 void newDoc(void); // Make and display a new document window |
|
218 void openDoc(void); // Open and display an existing document |
|
219 void quitApp(void); // Close the current document and quit |
|
220 void saveFile(void); // Serialize to the current file |
|
221 void saveAs(void); // Serialize to a selected file |
|
222 void saveName(void); // Implicitly serialize to a selected file |
|
223 void helpContents(void); // Use the help contents |
|
224 void aboutTitraq(void); // Learn more about this program itself |
|
225 void aboutOSSP(void); // Learn more about the OSSP |
|
226 void aboutQt(void); // Learn more about Qt |
|
227 void selAll(void); // Edit menu select all |
|
228 void onClick(int, int, int, const QPoint &); // Table was clicked |
|
229 void inplaceEdit(int, int, int, const QPoint &); // Enter in place edit mode |
|
230 void updEdit(int, int nCol = 0); // Update edit controls |
|
231 void validateRow(void); // Validate current row of matrix |
|
232 void validateRow(int, int); // Validate specified row of matrix |
|
233 void updSizes(int, int, int); // Update edit sizes |
|
234 void calcCrc(void); // Calculate CRC of current row |
|
235 void calcCrc(int, int); // Calculate CRC of specified row |
|
236 void dataChanged(int, int); // Timesheet data changed |
|
237 void updateLine(const QString &); // Update line number column |
|
238 void updateUser(const QString &); // Update user column |
|
239 void updateGuid(const QString &); // Update GUID column |
|
240 void updateCrc(const QString &); // Update CRC column |
|
241 void updateRev(const QString &); // Update rev column |
|
242 void updateDate(const QDate &); // Update date column |
|
243 void updateStart(const QTime &); // Update start column |
|
244 void updateFinish(const QTime &); // Update finish column |
|
245 void updateAmount(const QTime &); // Update amount column |
|
246 void updateTask(const QString &); // Update task column |
|
247 void updateRemark(const QString &); // Update remark column |
|
248 void confirmEdit(void); // Confirm whole row edition |
|
249 void configPrefs(void); // Edit menu configure preferences |
|
250 void normalView(void); // View menu normal |
|
251 void editingView(void); // View menu editing |
|
252 void timingView(void); // View menu timing |
|
253 void showFilebar(void); // View menu show file toolbar |
|
254 void showEditbar(void); // View menu show edit toolbar |
|
255 void showViewbar(void); // View menu show view toolbar |
|
256 void showPrefsbar(void); // View menu show prefs toolbar |
|
257 void showWhatsbar(void); // View menu show whats this toolbar |
|
258 void showStatcol(void); // View menu show status column |
|
259 void showLinecol(void); // View menu show line numbers column |
|
260 void showUsercol(void); // View menu show Users column |
|
261 void showGuidcol(void); // View menu show GUIDs column |
|
262 void showCrccol(void); // View menu show CRC column |
|
263 void showRevcol(void); // View menu show Rev column |
|
264 void showDatecol(void); // View menu show Dates column |
|
265 void showStartcol(void); // View menu show Start time column |
|
266 void showFinishcol(void); // View menu show Finish time column |
|
267 void showAmountcol(void); // View menu show Amounts column |
|
268 void showTaskcol(void); // View menu show Tasks column |
|
269 void showRemarkcol(void); // View menu show Remarks column |
|
270 void genReport(void); // Generate a local formatted report |
|
271 void savePrefs(void); // Save user preferences |
|
272 void applyPrefs(void); // Apply preferences from applied() |
|
273 void applyPrefs(Prefpanel *); // Apply preferences from accept() |
|
274 |
|
275 protected: |
|
276 // Application main events |
|
277 void closeEvent(QCloseEvent *); // Close current document in main window |
|
278 |
|
279 // Application main window widgets |
|
280 QFrame *m_pCenframe; // Central frame |
|
281 QVBoxLayout *m_pMainlayout; // Package and control layouts |
|
282 QVBoxLayout *m_pPackagelayout; // Main table control |
|
283 QHBoxLayout *m_pEditlayout; // Lower edition widgets |
|
284 |
|
285 private: |
|
286 // Owned by QMainWindow |
|
287 QMenuBar *m_pMenubar; |
|
288 QPopupMenu *m_pViewpopup; // Saved for manipulating views |
|
289 QPopupMenu *m_pTbarspopup; // Saved for manipulating toolbars |
|
290 QPopupMenu *m_pColspopup; // Saved for manipulating columns |
|
291 QStatusBar *m_pStatbar; |
|
292 |
|
293 // Belong to us |
|
294 QToolBar *m_pFiletools; |
|
295 QToolBar *m_pEdittools; |
|
296 QToolBar *m_pViewtools; |
|
297 QToolBar *m_pPrefstools; |
|
298 QToolBar *m_pWhatstools; |
|
299 QString *m_szFilename; |
|
300 |
|
301 // Constructor helpers |
|
302 void setupPrefs(void); // Preferences |
|
303 void setupActions(void); // Actions |
|
304 void setupMenubar(void); // Menu bar |
|
305 void setupToolbars(void); // Tool bars |
|
306 void setupStatusbar(void); // Status bar |
|
307 void setupCentralwidget(void); // Assemble main Frame widget |
|
308 void setupTable(void); // Table widget |
|
309 void setupEditlay(void); // Editing lay |
|
310 void setupPieces(void); // Assemble widget pieces |
|
311 void setupColumns(void); // Arrange and configure columns |
|
312 void enableIface(bool); // [En/dis]able most ui pieces |
|
313 |
|
314 // Data processing |
|
315 void loadAccounts(QFile &); // Load accounts from file |
|
316 void loadAccounts(QTextStream &); // Load accounts from stream |
|
317 void loadData(QFile &); // Load personal data from file |
|
318 void loadData(QTextStream &); // Load personal data from stream |
|
319 void saveData(QFile &); // Save accounting data to file |
|
320 void saveData(QTextStream &); // Save accounting data to stream |
|
321 const bool validateData(QFile &) const; // Validate personal data in file |
|
322 const bool validateData(QString &) const; // Validate personal data from string |
|
323 }; |
|
324 |
|
325 #endif // AS_GUI_MWIN_H |