aboutsummaryrefslogtreecommitdiff
path: root/tests/bait.c
blob: fd6081b5d2c185d760cd38ca42d0e4867c70ab36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Scintilla "Bait" example to demonstrate various problems with folding 
#include <gtk/gtk.h>

#include <Scintilla.h>
//#include <SciLexer.h>
#define PLAT_GTK 1
#include <ScintillaWidget.h>

static int exit_app(GtkWidget*w, GdkEventAny*e, gpointer p) {
   gtk_main_quit();
   return w||e||p||1;	// Avoid warnings
}

int main(int argc, char **argv) {
   GtkWidget *app;
   GtkWidget *editor;
   ScintillaObject *sci;

   gtk_init(&argc, &argv);
   app = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   editor = scintilla_new();
   sci = SCINTILLA(editor);

   gtk_container_add(GTK_CONTAINER(app), editor);
   g_signal_connect(app, "delete_event", G_CALLBACK(exit_app), 0);

   scintilla_set_id(sci, 0);
   //gtk_widget_set_usize(editor, 500, 300);

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

   SSM(SCI_STYLESETBACK, STYLE_DEFAULT, 0x000000);
   SSM(SCI_STYLESETFORE, STYLE_DEFAULT, 0xFFFFFF);
   SSM(SCI_STYLECLEARALL, 0, 0);

   SSM(SCI_INSERTTEXT, 0, (sptr_t)
    "int main(int argc, char **argv) {\n"
    "    // Start up the gnome\n"
    "    gnome_init(\"stest\", \"1.0\", argc, argv);\n}"
   );

   /*
    * FIXME: Should enable automatic folding by clicking on the margin.
    */
   SSM(SCI_SETAUTOMATICFOLD, SC_AUTOMATICFOLD_CLICK | SC_AUTOMATICFOLD_SHOW | SC_AUTOMATICFOLD_CHANGE, 0);

   SSM(SCI_SETMARGINWIDTHN, 2, SSM(SCI_TEXTWIDTH, 33, (sptr_t)"XX"));
   SSM(SCI_SETMARGINMASKN, 2, (1 << SC_MARKNUM_FOLDER) | (1 << SC_MARKNUM_FOLDEROPEN));
   /*
    * FIXME: Should inherit background color from STYLE_DEFAULT?
    */
   SSM(SCI_SETMARGINTYPEN, 2, SC_MARGIN_BACK);

   SSM(SCI_SETFOLDLEVEL, 0, (SC_FOLDLEVELBASE) | SC_FOLDLEVELHEADERFLAG);
   SSM(SCI_SETFOLDLEVEL, 1, (SC_FOLDLEVELBASE + 1));
   //SSM(SCI_TOGGLEFOLD, 0, 0);

   gtk_widget_show_all(app);
   gtk_widget_grab_focus(GTK_WIDGET(editor));
   gtk_main();

   return 0;
}