Add support for errors with a range of columns
[survex.git] / src / aven.h
blobd6f9673c843795d517125f86d434482f50ac5a70
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 "wx.h"
45 #include <string>
47 inline std::string
48 string_formatv(const char * fmt, va_list args)
50 static size_t len = 4096;
51 static char * buf = NULL;
52 while (true) {
53 if (!buf) buf = new char[len];
54 int r = vsnprintf(buf, len, fmt, args);
55 if (r < int(len) && r != -1) {
56 return std::string(buf, r);
58 delete [] buf;
59 buf = NULL;
60 len += len;
64 inline std::string
65 string_format(const char * fmt, ...)
67 va_list args;
68 va_start(args, fmt);
69 std::string s = string_formatv(fmt, args);
70 va_end(args);
71 return s;
74 // wmsg is the unicode version of msg.
75 wxString wmsg(int msg_no);
77 const wxString & wmsg_cfgpth();
79 class MainFrm;
81 extern bool double_buffered;
83 class wxPageSetupDialogData;
85 class Aven : public wxGLApp {
86 MainFrm * m_Frame;
87 // This must be a pointer, otherwise it gets initialised too early and
88 // we get a segfault on MS Windows when it tries to look up paper
89 // sizes in wxThePrintPaperDatabase which is still NULL at the point
90 // when the Aven class is constructed.
91 wxPageSetupDialogData * m_pageSetupData;
93 public:
94 Aven();
95 ~Aven();
97 #ifdef __WXMSW__
98 virtual bool Initialize(int& argc, wxChar **argv);
99 #endif
100 virtual bool OnInit();
102 wxPageSetupDialogData * GetPageSetupDialogData();
103 void SetPageSetupDialogData(const wxPageSetupDialogData & psdd);
105 #ifdef __WXMAC__
106 void MacOpenFiles(const wxArrayString & filenames);
107 void MacPrintFiles(const wxArrayString & filenames);
108 #endif
110 void ReportError(const wxString&);
113 DECLARE_APP(Aven)
115 #endif
117 #endif