aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp187
1 files changed, 19 insertions, 168 deletions
diff --git a/main.cpp b/main.cpp
index 3c82326..179d896 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,134 +1,22 @@
#include <stdio.h>
#include <string.h>
-#include <stdarg.h>
#include <stdlib.h>
#include <glib.h>
#include <glib/gprintf.h>
#include <glib/gstdio.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include <gtk/gtk.h>
-#include "gtk-info-popup.h"
-
#include <Scintilla.h>
#include <SciLexer.h>
-#include <ScintillaWidget.h>
#include "sciteco.h"
+#include "interface.h"
#include "parser.h"
#include "qbuffers.h"
#include "undo.h"
-static GtkWidget *editor_widget;
-static GtkWidget *cmdline_widget;
-static GtkWidget *info_widget, *message_widget;
-
-GtkInfoPopup *filename_popup;
-
#define INI_FILE ".teco_ini"
-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];
-
- va_start(ap, fmt);
- g_vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
-
- switch (type) {
- case GTK_MESSAGE_ERROR:
- g_fprintf(stderr, "Error: %s\n", buf);
- break;
- case GTK_MESSAGE_WARNING:
- g_fprintf(stderr, "Warning: %s\n", buf);
- break;
- case GTK_MESSAGE_INFO:
- g_printf("Info: %s\n", buf);
- break;
- default:
- g_printf("%s\n", buf);
- }
-
- gtk_info_bar_set_message_type(GTK_INFO_BAR(info_widget), type);
- gtk_label_set_text(GTK_LABEL(message_widget), buf);
-}
-
-sptr_t
-editor_msg(unsigned int iMessage, uptr_t wParam, sptr_t lParam)
-{
- return scintilla_send_message(SCINTILLA(editor_widget),
- iMessage, wParam, lParam);
-}
-
-static gboolean
-cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event,
- gpointer user_data __attribute__((unused)))
-{
-#ifdef DEBUG
- g_printf("KEY \"%s\" (%d) SHIFT=%d CNTRL=%d\n",
- event->string, *event->string,
- event->state & GDK_SHIFT_MASK, event->state & GDK_CONTROL_MASK);
-#endif
-
- switch (event->keyval) {
- case GDK_BackSpace:
- cmdline_keypress('\b');
- break;
- case GDK_Tab:
- cmdline_keypress('\t');
- break;
- case GDK_Return:
- switch (editor_msg(SCI_GETEOLMODE)) {
- case SC_EOL_CR:
- cmdline_keypress('\r');
- break;
- case SC_EOL_CRLF:
- cmdline_keypress('\r');
- /* fall through */
- case SC_EOL_LF:
- default:
- cmdline_keypress('\n');
- }
- break;
- default:
- if (*event->string)
- cmdline_keypress(*event->string);
- }
-
- 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);
-}
-
static gchar *mung_file = NULL;
static inline void
@@ -162,7 +50,7 @@ process_options(int &argc, char **&argv)
INI_FILE, NULL);
}
- gtk_init(&argc, &argv);
+ interface.parse_args(argc, argv);
/* remaining arguments, are arguments to the munged file */
}
@@ -170,65 +58,30 @@ process_options(int &argc, char **&argv)
int
main(int argc, char **argv)
{
- GtkWidget *window, *vbox;
- GtkWidget *info_content;
-
process_options(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);
-
- filename_popup = GTK_INFO_POPUP(gtk_info_popup_new(cmdline_widget));
-
- 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);
+ interface.ssm(SCI_SETFOCUS, 1);
+ interface.ssm(SCI_SETCARETSTYLE, 2);
+ interface.ssm(SCI_STYLESETFONT, STYLE_DEFAULT, (sptr_t)"Courier");
+ interface.ssm(SCI_STYLECLEARALL);
+ interface.ssm(SCI_SETLEXER, SCLEX_CPP);
+ interface.ssm(SCI_SETKEYWORDS, 0, (sptr_t)"int char");
+ interface.ssm(SCI_STYLESETFORE, SCE_C_COMMENT, 0x008000);
+ interface.ssm(SCI_STYLESETFORE, SCE_C_COMMENTLINE, 0x008000);
+ interface.ssm(SCI_STYLESETFORE, SCE_C_NUMBER, 0x808000);
+ interface.ssm(SCI_STYLESETFORE, SCE_C_WORD, 0x800000);
+ interface.ssm(SCI_STYLESETFORE, SCE_C_STRING, 0x800080);
+ interface.ssm(SCI_STYLESETBOLD, SCE_C_OPERATOR, 1);
qregisters.initialize();
ring.edit(NULL);
/* add remaining arguments to unnamed buffer */
for (int i = 1; i < argc; i++) {
- editor_msg(SCI_ADDTEXT, strlen(argv[i]), (sptr_t)argv[i]);
- editor_msg(SCI_ADDTEXT, 1, (sptr_t)"\r");
+ interface.ssm(SCI_ADDTEXT, strlen(argv[i]), (sptr_t)argv[i]);
+ interface.ssm(SCI_ADDTEXT, 1, (sptr_t)"\r");
}
- editor_msg(SCI_GOTOPOS, 0);
+ interface.ssm(SCI_GOTOPOS, 0);
if (g_file_test(mung_file, G_FILE_TEST_IS_REGULAR)) {
if (!file_execute(mung_file))
@@ -243,11 +96,9 @@ main(int argc, char **argv)
undo.enabled = true;
- cmdline_display("*");
- gtk_widget_grab_focus(cmdline_widget);
+ interface.cmdline_update("*");
- gtk_widget_show_all(window);
- gtk_main();
+ interface.event_loop();
return 0;
}