geany.h 6.53 KB
Newer Older
Enrico Tröger's avatar
Enrico Tröger committed
1 2 3
/*
 *      geany.h - this file is part of Geany, a fast and lightweight IDE
 *
4
 *      Copyright 2006 Enrico Troeger <enrico.troeger@uvena.de>
Enrico Tröger's avatar
Enrico Tröger committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
20
 * $Id$
Enrico Tröger's avatar
Enrico Tröger committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
 */

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <gtk/gtk.h>

#ifndef PLAT_GTK
#   define PLAT_GTK 1
#endif

#ifndef GEANY_H
#define GEANY_H

#include "Scintilla.h"
#include "SciLexer.h"
#include "ScintillaWidget.h"

#include "tm_tagmanager.h"

#include "filetypes.h"

#define SSM(s, m, w, l) scintilla_send_message(s, m, w, l)

46

Enrico Tröger's avatar
Enrico Tröger committed
47 48 49 50 51 52 53 54 55 56 57
#ifdef G_OS_WIN32
# include <windows.h>
# include <commdlg.h>
# define GEANY_WIN32
# define GEANY_DATA_DIR PACKAGE_DATA_DIR
#else
# define GEANY_DATA_DIR PACKAGE_DATA_DIR "/" PACKAGE
#endif


#define GEANY_HOME_DIR					g_get_home_dir()
Enrico Tröger's avatar
Enrico Tröger committed
58
#define GEANY_CODENAME					"Nivers"
Enrico Tröger's avatar
Enrico Tröger committed
59 60
#define GEANY_HOMEPAGE					"http://geany.uvena.de/"
#define GEANY_MAX_OPEN_FILES			25
61
#define GEANY_SESSION_FILES				15
Enrico Tröger's avatar
Enrico Tröger committed
62 63 64
#define GEANY_MAX_TAGS_COUNT			1000
#define GEANY_WORDCHARS					"_#&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
#define GEANY_MAX_AUTOCOMPLETE_WORDS	30
65
#define GEANY_MSGWIN_HEIGHT				240
Enrico Tröger's avatar
Enrico Tröger committed
66 67 68 69
#define GEANY_STRING_UNTITLED			_("untitled")


#ifndef DOCDIR
70
# define DOCDIR PACKAGE_DATA_DIR"/doc/"PACKAGE"/html/"
Enrico Tröger's avatar
Enrico Tröger committed
71 72 73 74 75 76
#endif


/* structure for representing an open tab with all its related stuff. */
typedef struct document
{
77
	gboolean		 is_valid;
78
	gboolean		 has_tags;
79
	// the filename is encoded in UTF-8, but every GLibC function expect the locale representation
Enrico Tröger's avatar
Enrico Tröger committed
80 81 82 83 84 85 86
	gchar 			*file_name;
	gchar 			*encoding;
	filetype		*file_type;
	TMWorkObject	*tm_file;
	ScintillaObject	*sci;
	GtkWidget		*tab_label;
	GtkWidget		*tabmenu_label;
87 88
	GtkWidget		*tag_tree;
	GtkTreeStore	*tag_store;
Enrico Tröger's avatar
Enrico Tröger committed
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
	GtkTreeIter		 iter;
	gboolean		 readonly;
	gboolean		 changed;
	gboolean		 do_overwrite;
	gboolean		 line_breaking;
	time_t			 last_check;	// to remember the last disk check
	time_t			 mtime;
} document;



/* array of document elements to hold all information of the notebook tabs */
document doc_list[GEANY_MAX_OPEN_FILES];


/* store some pointers and variables for frequently used widgets  */
typedef struct MyApp
{
	gint			 	 toolbar_icon_style;
108
	// 0:x, 1:y, 2:width, 3:height
Enrico Tröger's avatar
Enrico Tröger committed
109 110
	gint				 geometry[4];
	gboolean			 debug_mode;
111 112
	// represents the state at startup while opening session files
	gboolean			 opening_session_files;
113 114
	// represents the state when Geany is quitting completely
	gboolean			 quitting;
115
	gboolean			 have_vte;
Enrico Tröger's avatar
Enrico Tröger committed
116 117
	gboolean			 ignore_global_tags;
	gboolean			 toolbar_visible;
118 119
	gboolean			 treeview_symbol_visible;
	gboolean			 treeview_openfiles_visible;
Enrico Tröger's avatar
Enrico Tröger committed
120 121 122 123 124 125 126 127
	gboolean			 msgwindow_visible;
	gboolean			 show_white_space;
	gboolean			 use_auto_indention;
	gboolean			 show_indent_guide;
	//gboolean			 line_breaking;
	gboolean			 show_line_endings;
	gboolean			 show_markers_margin;
	gboolean			 fullscreen;
128
	gboolean			 beep_on_errors;
129
	gboolean			 switch_msgwin_pages;
Enrico Tröger's avatar
Enrico Tröger committed
130 131 132 133 134 135 136 137 138 139
	gboolean			 auto_close_xml_tags;
	gboolean			 auto_complete_constructs;
	gboolean			 main_window_realized;
	gint				 pref_editor_tab_width;
	gboolean			 pref_editor_new_line;
	gboolean			 pref_editor_trail_space;
	gboolean			 pref_main_load_session;
	gboolean			 pref_main_save_winpos;
	gboolean			 pref_main_confirm_exit;
	gboolean			 pref_main_show_search;
140
	gint				 mru_length;
141
	gint				 long_line_column;
142 143 144
#ifdef HAVE_VTE
	gchar				*lib_vte;
#endif
145
	gchar				*long_line_color;
Enrico Tröger's avatar
Enrico Tröger committed
146 147 148 149 150 151 152 153 154 155
	gchar				*pref_template_developer;
	gchar				*pref_template_company;
	gchar				*pref_template_mail;
	gchar				*pref_template_initial;
	gchar				*pref_template_version;
	gchar				*editor_font;
	gchar				*tagbar_font;
	gchar				*msgwin_font;
	gchar				*configdir;
	gchar				*search_text;
156
	gchar				*terminal_settings;
Enrico Tröger's avatar
Enrico Tröger committed
157 158 159 160 161 162 163 164 165 166
	gchar				*build_args_inc;
	gchar				*build_args_libs;
	gchar				*build_args_prog;
	gchar				 build_make_custopt[256];
	gchar				*build_browser_cmd;
	gchar				*build_c_cmd;
	gchar				*build_cpp_cmd;
	/* I called it fpc (www.freepascal.org) to demonstrate I mean a pascal compiler,
	 * but feel free to use the GNU one as well */
	gchar				*build_fpc_cmd;
167 168 169 170
	gchar				*build_tex_dvi_cmd;
	gchar				*build_tex_pdf_cmd;
	gchar				*build_tex_view_dvi_cmd;
	gchar				*build_tex_view_pdf_cmd;
Enrico Tröger's avatar
Enrico Tröger committed
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
	gchar				*build_java_cmd;
	gchar				*build_javac_cmd;
	gchar				*build_make_cmd;
	gchar				*build_term_cmd;
	gchar			   **recent_files;
	GtkIconSize			 toolbar_icon_size;
	GtkWidget			*toolbar;
	GtkWidget			*compile_button;
	GtkWidget			*compile_button_image;
	GtkWidget			*tagbar;
	GtkWidget			*treeview_notebook;
	GtkWidget			*notebook;
	GtkWidget			*statusbar;
	GtkWidget			*window;
	GtkWidget			*popup_menu;
	GtkWidget			*toolbar_menu;
	GtkWidget			*new_file_menu;
	GtkWidget			*menu_insert_include_item[2];
	GtkWidget			*popup_goto_items[3];
	GtkWidget			*popup_items[4];
	GtkWidget			*menu_copy_items[4];
	GtkWidget			*redo_items[2];
	GtkWidget			*undo_items[2];
	GtkWidget			*save_buttons[2];
	GtkWidget			*sensitive_buttons[16];
	GtkWidget			*open_colorsel;
	GtkWidget			*open_fontsel;
	GtkWidget			*open_filesel;
	GtkWidget			*save_filesel;
	GtkWidget			*prefs_dialog;
	GtkWidget			*find_dialog;
	GtkWidget			*replace_dialog;
	GtkWidget			*build_menu_item_link;
204 205
	GtkWidget			*default_tag_tree;
	//GtkTreeStore		*default_tag_store;
Enrico Tröger's avatar
Enrico Tröger committed
206 207 208 209 210 211 212 213 214 215
	const TMWorkspace	*tm_workspace;
	GQueue				*recent_queue;
} MyApp;

MyApp *app;

gint this_year;
gint this_month;
gint this_day;

216 217 218 219 220 221 222 223 224

// small struct to track tag name and type together
typedef struct GeanySymbol
{
	gchar	*str;
	gint	 type;
} GeanySymbol;


Enrico Tröger's avatar
Enrico Tröger committed
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
enum
{
	GEANY_IMAGE_SMALL_CROSS,
	GEANY_IMAGE_LOGO,
	GEANY_IMAGE_COMPILE,
	GEANY_IMAGE_SAVE_ALL,
	GEANY_IMAGE_NEW_ARROW
};

enum {
	GEANY_RESPONSE_REPLACE = 1,
	GEANY_RESPONSE_REPLACE_ALL = 2,
	GEANY_RESPONSE_REPLACE_SEL = 3
};


enum
{
	UP,
	DOWN,
	LEFT,
	RIGHT
};

// prototype from tagmanager/parse.h, used in document.c, ugly but it works
extern langType getNamedLanguage(const char *const name);

// implementation in main.c
void geany_debug(gchar const *format, ...);

#endif