aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..452b9a8
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,159 @@
+#include <stdarg.h>
+
+#include <glib.h>
+#include <glib/gprintf.h>
+
+#include <gdk/gdk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include <gtk/gtk.h>
+
+#include <Scintilla.h>
+#include <SciLexer.h>
+#include <ScintillaWidget.h>
+
+#include "sciteco.h"
+
+static GtkWidget *editor_widget;
+static GtkWidget *cmdline_widget;
+static GtkWidget *info_widget, *message_widget;
+
+void
+cmdline_display(const gchar *cmdline_str)
+{
+ gtk_entry_set_text(GTK_ENTRY(cmdline_widget), cmdline_str);
+ gtk_editable_set_position(GTK_EDITABLE(cmdline_widget), -1);
+}
+
+void
+message_display(GtkMessageType type, const gchar *fmt, ...)
+{
+ va_list ap;
+ gchar buf[255];
+
+ gtk_info_bar_set_message_type(GTK_INFO_BAR(info_widget), type);
+
+ va_start(ap, fmt);
+ g_vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+
+ gtk_label_set_text(GTK_LABEL(message_widget), buf);
+}
+
+void
+editor_msg(unsigned int iMessage, uptr_t wParam, sptr_t lParam)
+{
+ scintilla_send_message(SCINTILLA(editor_widget),
+ iMessage, wParam, lParam);
+}
+
+static gboolean
+cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
+ gpointer user_data __attribute__((unused)))
+{
+ gchar key = '\0';
+
+ g_printf("KEY \"%s\" (%d) SHIFT=%d CNTRL=%d\n",
+ event->string, *event->string,
+ event->state & GDK_SHIFT_MASK, event->state & GDK_CONTROL_MASK);
+
+ switch (event->keyval) {
+ case GDK_BackSpace:
+ key = '\b';
+ break;
+ case GDK_Tab:
+ key = '\t';
+ break;
+ default:
+ key = *event->string;
+ }
+
+ if (key)
+ cmdline_keypress(key);
+
+ return TRUE;
+}
+
+static gboolean
+exit_app(GtkWidget *w __attribute__((unused)),
+ GdkEventAny *e __attribute__((unused)),
+ gpointer p __attribute__((unused)))
+{
+ gtk_main_quit();
+ return TRUE;
+}
+
+static void
+widget_set_font(GtkWidget *widget, const gchar *font_name)
+{
+ PangoFontDescription *font_desc;
+
+ font_desc = pango_font_description_from_string(font_name);
+ gtk_widget_modify_font(widget, font_desc);
+ pango_font_description_free(font_desc);
+}
+
+int
+main(int argc, char **argv)
+{
+ GtkWidget *window, *vbox;
+ GtkWidget *info_content;
+
+ gtk_init(&argc, &argv);
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(window), "SciTECO");
+ g_signal_connect(G_OBJECT(window), "delete-event",
+ G_CALLBACK(exit_app), NULL);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+
+ editor_widget = scintilla_new();
+ scintilla_set_id(SCINTILLA(editor_widget), 0);
+ gtk_widget_set_usize(editor_widget, 500, 300);
+ gtk_widget_set_can_focus(editor_widget, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), editor_widget, TRUE, TRUE, 0);
+
+ info_widget = gtk_info_bar_new();
+ info_content = gtk_info_bar_get_content_area(GTK_INFO_BAR(info_widget));
+ message_widget = gtk_label_new("");
+ gtk_misc_set_alignment(GTK_MISC(message_widget), 0., 0.);
+ gtk_container_add(GTK_CONTAINER(info_content), message_widget);
+ gtk_box_pack_start(GTK_BOX(vbox), info_widget, FALSE, FALSE, 0);
+
+ cmdline_widget = gtk_entry_new();
+ gtk_entry_set_has_frame(GTK_ENTRY(cmdline_widget), FALSE);
+ gtk_editable_set_editable(GTK_EDITABLE(cmdline_widget), FALSE);
+ widget_set_font(cmdline_widget, "Courier");
+ g_signal_connect(G_OBJECT(cmdline_widget), "key-press-event",
+ G_CALLBACK(cmdline_key_pressed), NULL);
+ gtk_box_pack_start(GTK_BOX(vbox), cmdline_widget, FALSE, FALSE, 0);
+
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+
+ editor_msg(SCI_SETFOCUS, 1);
+ editor_msg(SCI_SETCARETSTYLE, 2);
+ editor_msg(SCI_STYLESETFONT, STYLE_DEFAULT, (sptr_t)"Courier");
+ editor_msg(SCI_STYLECLEARALL);
+ editor_msg(SCI_SETLEXER, SCLEX_CPP);
+ editor_msg(SCI_SETKEYWORDS, 0, (sptr_t)"int char");
+ editor_msg(SCI_STYLESETFORE, SCE_C_COMMENT, 0x008000);
+ editor_msg(SCI_STYLESETFORE, SCE_C_COMMENTLINE, 0x008000);
+ editor_msg(SCI_STYLESETFORE, SCE_C_NUMBER, 0x808000);
+ editor_msg(SCI_STYLESETFORE, SCE_C_WORD, 0x800000);
+ editor_msg(SCI_STYLESETFORE, SCE_C_STRING, 0x800080);
+ editor_msg(SCI_STYLESETBOLD, SCE_C_OPERATOR, 1);
+ editor_msg(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}"
+ );
+
+ cmdline_display("*");
+ gtk_widget_grab_focus(cmdline_widget);
+
+ gtk_widget_show_all(window);
+ gtk_main();
+
+ return 0;
+}