Fix coding style
[survex.git] / src / aven.h
blobc763dd68501225fe8053859490797033bddd8e4a
1 /*
2 // aven.h
3 //
4 // Main class for Aven.
5 //
6 // Copyright (C) 2001, Mark R. Shinwell.
7 // Copyright (C) 2002,2003,2004,2005,2006,2015 Olly Betts
8 //
9 // This program is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 2 of the License, or
12 // (at your option) any later version.
14 // This program 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
17 // GNU General Public License for more details.
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 /* Note: this header needs to be safe to include from C code */
26 #ifndef aven_h
27 #define aven_h
29 #include <stdarg.h>
31 #define APP_NAME wxT("Aven")
32 #define APP_ABOUT_IMAGE wxT("aven-about.png")
34 extern
35 #ifdef __cplusplus
36 "C"
37 #endif
38 void aven_v_report(int severity, const char *fnm, int line, int en,
39 va_list ap);
41 #ifdef __cplusplus
43 #include "message.h"
44 #include "wx.h"
46 #include <string>
48 inline std::string
49 string_formatv(const char * fmt, va_list args)
51 static size_t len = 4096;
52 static char * buf = NULL;
53 while (true) {
54 if (!buf) buf = new char[len];
55 int r = vsnprintf(buf, len, fmt, args);
56 if (r < int(len) && r != -1) {
57 return std::string(buf, r);
59 delete [] buf;
60 buf = NULL;
61 len += len;
65 inline std::string
66 string_format(const char * fmt, ...)
68 va_list args;
69 va_start(args, fmt);
70 std::string s = string_formatv(fmt, args);
71 va_end(args);
72 return s;
75 // wmsg is the unicode version of msg.
76 inline wxString wmsg(int msg_no) {
77 return wxString::FromUTF8(msg(msg_no));
80 const wxString & wmsg_cfgpth();
82 class MainFrm;
84 class wxPageSetupDialogData;
86 class Aven : public wxApp {
87 MainFrm * m_Frame;
88 // This must be a pointer, otherwise it gets initialised too early and
89 // we get a segfault on MS Windows when it tries to look up paper
90 // sizes in wxThePrintPaperDatabase which is still NULL at the point
91 // when the Aven class is constructed.
92 wxPageSetupDialogData * m_pageSetupData;
94 public:
95 Aven();
96 ~Aven();
98 #ifdef __WXMSW__
99 virtual bool Initialize(int& argc, wxChar **argv);
100 #endif
101 virtual bool OnInit();
103 wxPageSetupDialogData * GetPageSetupDialogData();
104 void SetPageSetupDialogData(const wxPageSetupDialogData & psdd);
106 #ifdef __WXMAC__
107 void MacOpenFiles(const wxArrayString & filenames);
108 void MacPrintFiles(const wxArrayString & filenames);
109 #endif
111 void ReportError(const wxString&);
114 DECLARE_APP(Aven)
116 #endif
118 #endif