17 #include <gtksourceview/gtksourceview.h> 
   18 #include <gtksourceview/gtksourcebuffer.h> 
   50 static void mape_edit_view_set_filename(
MapeEditView* view,
 
   51                                         const gchar* filename)
 
   58     gchar* utf8_file_casefold;
 
   59     gchar* utf8_landscape_txt_casefold;
 
   61     const gchar* lang_name;
 
   62     const gchar* lang_filename;
 
   63     GtkSourceLanguage* lang;
 
   64     GtkSourceStyleScheme* 
style;
 
   65     GtkWidget* error_dialog;
 
   67     buf = GTK_SOURCE_BUFFER(
 
   68         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view) )
 
   85         basename = g_path_get_basename(filename);
 
   88         utf8_file = g_filename_to_utf8(
 
  100             utf8_file_casefold = g_utf8_casefold(utf8_file, -1);
 
  101             utf8_landscape_txt_casefold = g_utf8_casefold(
"landscape.txt", -1);
 
  104             if(g_utf8_collate(utf8_file_casefold, utf8_landscape_txt_casefold) == 0)
 
  108             g_free(utf8_file_casefold);
 
  109             g_free(utf8_landscape_txt_casefold);
 
  117     if(new_type != view->
type)
 
  119         view->
type = new_type;
 
  123             lang_name = 
"c4landscape";
 
  124             lang_filename = 
"Landscape.txt";
 
  127             lang_name = 
"c4mapscript";
 
  128             lang_filename = 
"Map.c";
 
  132             g_assert_not_reached();
 
  137         lang = gtk_source_language_manager_get_language(
 
  142         style = gtk_source_style_scheme_manager_get_scheme(
 
  147         if(lang == NULL || 
style == NULL)
 
  150             error_dialog = gtk_message_dialog_new(
 
  155                 "Syntax Highlighting Not Available" 
  158             gtk_message_dialog_format_secondary_text(
 
  159                 GTK_MESSAGE_DIALOG(error_dialog),
 
  160                 "The syntax highlighting file for %s files " 
  161                 "could not be located. Perhaps mape has not " 
  162                 "been properly installed. Syntax " 
  163                 "highlighting is disabled.",
 
  167             gtk_window_set_title(GTK_WINDOW(error_dialog), 
"Mape");
 
  169             gtk_dialog_run(GTK_DIALOG(error_dialog) );
 
  170             gtk_widget_destroy(error_dialog);
 
  174             gtk_source_buffer_set_language(buf, lang);
 
  175             gtk_source_buffer_set_style_scheme(buf, 
style);
 
  181 mape_edit_view_thread_result_destroy_func(gpointer data)
 
  184     if(result->
pixbuf != NULL) g_object_unref(G_OBJECT(result->
pixbuf));
 
  185     if(result->
error != NULL) g_error_free(result->
error);
 
  190 static void mape_edit_view_cb_changed(GtkTextBuffer* buffer,
 
  196 static void mape_edit_view_cb_update(GtkWidget* widget,
 
  203 static GdkPixbuf* mape_edit_view_render_map(
const gchar* source,
 
  205                                             const gchar* file_path,
 
  217     const gchar* filename;
 
  223     if(mat_map == NULL || tex_map == NULL)
 
  227             g_quark_from_static_string(
"MAPE_EDIT_VIEW_ERROR"),
 
  229             "Material.ocg is not loaded" 
  235     if(file_path != NULL)
 
  237         basename = g_path_get_basename(file_path);
 
  240         dirname = g_path_get_dirname(file_path);
 
  241         scriptname = g_build_filename(dirname, 
"Script.c", NULL);
 
  251             filename = 
"Landscape.txt";
 
  258             g_assert_not_reached();
 
  278         map_width = gdk_pixbuf_get_width(pixbuf);
 
  279         map_height = gdk_pixbuf_get_height(pixbuf);
 
  281         zoom_width = (guint)(map_width * map_zoom + 0.5);
 
  282         zoom_height = (guint)(map_height * map_zoom + 0.5);
 
  283         if(map_width != zoom_width || map_height != zoom_height)
 
  285             zoombuf = gdk_pixbuf_scale_simple(
 
  292             g_object_unref(pixbuf);
 
  302 mape_edit_view_thread_result(gpointer data_)
 
  313     if(result->
pixbuf == NULL)
 
  315         g_assert(result->
error != NULL);
 
  319             result->
error->message
 
  324         now = g_get_monotonic_time();
 
  327         time_text = g_strdup_printf(
 
  328             "Landscape rendered successfully (%.2fs)",
 
  350 static gpointer mape_edit_view_thread_entry(gpointer data_)
 
  354     GError* error = NULL;
 
  359     res_buf = mape_edit_view_render_map(
 
  374     result->
error = error;
 
  381     result->
idle_id = g_idle_add_full(
 
  382         G_PRIORITY_DEFAULT_IDLE,
 
  383         mape_edit_view_thread_result,
 
  385         mape_edit_view_thread_result_destroy_func
 
  398     GtkSourceBuffer* buf;
 
  399     GPtrArray* search_dirs;
 
  400     const gchar* 
const* data_dirs;
 
  401     const gchar* 
const* dir;
 
  413     view->
view = gtk_source_view_new();
 
  414     buf = GTK_SOURCE_BUFFER(
 
  415         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view) )
 
  418     g_signal_connect_after(
 
  421         G_CALLBACK(mape_edit_view_cb_changed),
 
  427         "button-press-event",
 
  428         G_CALLBACK(mape_edit_view_cb_update),
 
  432     view->
font_desc = pango_font_description_new();
 
  433     pango_font_description_set_family(view->
font_desc, 
"monospace");
 
  436     search_dirs = g_ptr_array_new();
 
  440         g_win32_get_package_installation_subdirectory(NULL, NULL, 
"mape-syntax")
 
  446         g_build_filename(g_get_home_dir(), 
".mape-syntax", NULL)
 
  451         g_strdup(
"./mape-syntax")
 
  456         g_strdup(
"./src/mape/mape-syntax")
 
  459     data_dirs = g_get_system_data_dirs();
 
  460     for(dir = data_dirs; *dir != NULL; ++ dir)
 
  461         g_ptr_array_add(search_dirs, g_build_filename(*dir, 
"mape", NULL));
 
  462     g_ptr_array_add(search_dirs, NULL);
 
  465     gtk_source_language_manager_set_search_path(
 
  467         (gchar**)search_dirs->pdata
 
  471     gtk_source_style_scheme_manager_set_search_path(
 
  473       (gchar**)search_dirs->pdata
 
  476     g_ptr_array_foreach(search_dirs, (GFunc)g_free, NULL);
 
  477     g_ptr_array_free(search_dirs, TRUE);
 
  479     mape_edit_view_set_filename(view, NULL);
 
  481     gtk_widget_show(view->
view);
 
  483     view->
window = gtk_scrolled_window_new(NULL, NULL);
 
  485     gtk_scrolled_window_set_policy(
 
  486         GTK_SCROLLED_WINDOW(view->
window),
 
  487         GTK_POLICY_AUTOMATIC,
 
  491     gtk_scrolled_window_set_shadow_type(
 
  492         GTK_SCROLLED_WINDOW(view->
window),
 
  497         GTK_CONTAINER(view->
window),
 
  501     gtk_widget_show(view->
window);
 
  533     gtk_text_buffer_set_text(
 
  534         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view)),
 
  539     gtk_text_buffer_set_modified(
 
  540         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view)),
 
  546                              const gchar* filename,
 
  555     result = g_file_get_contents(filename, &contents, &length, error);
 
  556     if(result == FALSE) 
return FALSE;
 
  559     result = g_utf8_validate(contents, length, NULL);
 
  577             utf8_file = g_filename_to_utf8(
 
  585             if(utf8_file == NULL)
 
  586                 utf8_file = g_strdup(
"<unknown file name>");
 
  590                 g_quark_from_static_string(
 
  591                     "MAPE_EDIT_VIEW_ERROR" 
  594                 "Could not read file %s: Either the encoding " 
  595                 "is unknown or it is a binary file",
 
  612     mape_edit_view_set_filename(view, filename);
 
  616     gtk_text_buffer_set_text(
 
  617         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view)),
 
  624     gtk_text_buffer_set_modified(
 
  625         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view)),
 
  633                              const gchar* filename,
 
  636     GtkTextBuffer* buffer;
 
  643     buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view) );
 
  644     gtk_text_buffer_get_start_iter(buffer, &begin);
 
  645     gtk_text_buffer_get_end_iter(buffer, &end);
 
  646     source = gtk_text_buffer_get_text(buffer, &begin, &end, TRUE);
 
  659     if(conv == NULL) 
return FALSE;
 
  661     result = g_file_set_contents(filename, conv, -1, error);
 
  663     if(result == FALSE) 
return FALSE;
 
  665     gtk_text_buffer_set_modified(
 
  666         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view)),
 
  670     mape_edit_view_set_filename(view, filename);
 
  681     return gtk_text_buffer_get_modified(
 
  682         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view->
view))
 
  688     gtk_source_buffer_undo(
 
  690             gtk_text_view_get_buffer(GTK_TEXT_VIEW(edit_view->
view))
 
  697     gtk_source_buffer_redo(
 
  699             gtk_text_view_get_buffer(GTK_TEXT_VIEW(edit_view->
view))
 
  708     GtkSourceBuffer* buffer;
 
  709     GtkWrapMode wrap_mode;
 
  711     view = GTK_SOURCE_VIEW(edit_view->
view);
 
  712     buffer = GTK_SOURCE_BUFFER(
 
  713         gtk_text_view_get_buffer(GTK_TEXT_VIEW(view))
 
  716     gtk_source_view_set_tab_width(
 
  721     gtk_source_view_set_insert_spaces_instead_of_tabs(
 
  726     gtk_source_view_set_auto_indent(
 
  731     wrap_mode = GTK_WRAP_CHAR;
 
  733         wrap_mode = GTK_WRAP_NONE;
 
  734     gtk_text_view_set_wrap_mode(
 
  739     gtk_source_view_set_show_line_numbers(
 
  744     gtk_source_view_set_highlight_current_line(
 
  749     gtk_source_buffer_set_highlight_matching_brackets(
 
  766     GError* error = NULL;
 
  768     GtkTextBuffer* buffer;
 
  776         buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(edit_view->
view) );
 
  777         gtk_text_buffer_get_start_iter(buffer, &begin);
 
  778         gtk_text_buffer_get_end_iter(buffer, &end);
 
  782         data->
view = edit_view;
 
  783         data->
source = gtk_text_buffer_get_text(buffer, &begin, &end, TRUE);
 
  808             mape_edit_view_thread_entry,
 
MapeEditView * mape_edit_view_new(MapePreView *pre_view, MapeStatusbar *statusbar, GError **error)
 
void mape_edit_view_reload(MapeEditView *edit_view)
 
void mape_edit_view_undo(MapeEditView *edit_view)
 
gboolean mape_edit_view_get_modified(MapeEditView *view)
 
void mape_edit_view_redo(MapeEditView *edit_view)
 
void mape_edit_view_destroy(MapeEditView *view)
 
gboolean mape_edit_view_open(MapeEditView *view, const gchar *filename, GError **error)
 
void mape_edit_view_clear(MapeEditView *view)
 
MapeMaterialMap * mat_map
 
gboolean mape_edit_view_save(MapeEditView *view, const gchar *filename, GError **error)
 
void mape_edit_view_apply_preferences(MapeEditView *edit_view, MapePreferences *preferences)
 
GtkSourceStyleSchemeManager * style_manager
 
GtkSourceLanguageManager * lang_manager
 
MapeStatusbar * statusbar
 
PangoFontDescription * font_desc
 
@ MAPE_EDIT_VIEW_ERROR_UNKNOWN_ENCODING
 
@ MAPE_EDIT_VIEW_ERROR_MISSING_MAPS
 
GdkPixbuf * mape_mapgen_render(const gchar *filename, const gchar *source, MapeMapgenType type, const gchar *script_path, MapeMaterialMap *material_map, MapeTextureMap *texture_map, guint width, guint height, GError **error)
 
enum _MapeMapgenType MapeMapgenType
 
@ MAPE_MAPGEN_LANDSCAPE_TXT
 
MapeMaterialMap * mat_map
 
gboolean auto_indentation
 
gboolean bracket_matching
 
void mape_pre_view_update(MapePreView *view, GdkPixbuf *pixbuf)
 
void mape_random_seed(unsigned int seed)
 
void mape_statusbar_set_compile(MapeStatusbar *bar, const gchar *text)