Hook TildaTerminal and TildaWindow together
[tilda-gobject.git] / tilda-terminal.c
index 06a712b..1c76325 100644 (file)
@@ -10,7 +10,21 @@ static GObjectClass *parent_class = NULL;
 
 enum tilda_terminal_properties {
        TILDA_TERMINAL_NUMBER = 1,
-       // TODO: All properties
+
+       /* All non-constructor-only properties */
+       TILDA_TERMINAL_BACKGROUND_IMAGE,
+       TILDA_TERMINAL_SHELL,
+       TILDA_TERMINAL_FONT,
+       TILDA_TERMINAL_TITLE,
+       TILDA_TERMINAL_WORKING_DIRECTORY,
+
+       TILDA_TERMINAL_SCROLLBACK_LINES,
+       TILDA_TERMINAL_TRANSPARENCY_PERCENT,
+
+       TILDA_TERMINAL_BACKSPACE_BINDING,
+       TILDA_TERMINAL_DELETE_BINDING,
+       TILDA_TERMINAL_DYNAMIC_TITLE,
+       TILDA_TERMINAL_EXIT_ACTION,
 };
 
 static void
@@ -23,6 +37,10 @@ tilda_terminal_instance_init (GTypeInstance *instance,
         * NOTE: any constructor-time values will be set later. */
        self->dispose_has_run = FALSE;
        self->number = 0;
+
+       self->vte_term = vte_terminal_new ();
+       self->scrollbar = gtk_vscrollbar_new (VTE_TERMINAL(self->vte_term)->adjustment);
+       self->hbox = gtk_hbox_new (FALSE, 0);
 }
 
 static void
@@ -40,6 +58,69 @@ tilda_terminal_set_property (GObject      *object,
                        g_print ("terminal number: %d\n", self->number);
                        break;
 
+               case TILDA_TERMINAL_BACKGROUND_IMAGE:
+                       g_free (self->background_image);
+                       self->background_image = g_value_dup_string (value);
+                       // TODO: Actually set it in self->vte_term
+                       g_print ("terminal back img: %s\n", self->background_image);
+                       break;
+
+               case TILDA_TERMINAL_SHELL:
+                       g_free (self->shell);
+                       self->shell = g_value_dup_string (value);
+                       g_print ("terminal shell: %s\n", self->shell);
+                       break;
+
+               case TILDA_TERMINAL_FONT:
+                       g_free (self->font);
+                       self->font = g_value_dup_string (value);
+                       g_print ("terminal font: %s\n", self->font);
+                       break;
+
+               case TILDA_TERMINAL_TITLE:
+                       g_free (self->title);
+                       self->title = g_value_dup_string (value);
+                       g_print ("terminal title: %s\n", self->title);
+                       break;
+
+               case TILDA_TERMINAL_WORKING_DIRECTORY:
+                       g_free (self->working_directory);
+                       self->working_directory = g_value_dup_string (value);
+                       g_print ("terminal wrk dir: %s\n", self->working_directory);
+                       break;
+
+               case TILDA_TERMINAL_SCROLLBACK_LINES:
+                       self->scrollback_lines = g_value_get_int (value);
+                       g_print ("terminal scrollback lines: %d\n", self->scrollback_lines);
+                       break;
+
+               case TILDA_TERMINAL_TRANSPARENCY_PERCENT:
+                       self->transparency_percent = g_value_get_int (value);
+                       g_print ("terminal transp percent: %d\n", self->transparency_percent);
+                       break;
+
+               case TILDA_TERMINAL_BACKSPACE_BINDING:
+                       self->backspace_binding = g_value_get_int (value);
+                       //vte_terminal_set_backspace_binding (VTE_TERMINAL(self->vte_term), self->backspace_binding);
+                       g_print ("terminal backspace key: %d\n", self->backspace_binding);
+                       break;
+
+               case TILDA_TERMINAL_DELETE_BINDING:
+                       self->delete_binding = g_value_get_int (value);
+                       //vte_terminal_set_delete_binding (VTE_TERMINAL(self->vte_term), self->delete_binding);
+                       g_print ("terminal delete key: %d\n", self->delete_binding);
+                       break;
+
+               case TILDA_TERMINAL_DYNAMIC_TITLE:
+                       self->dynamic_title = g_value_get_int (value);
+                       g_print ("terminal dynamic title: %d\n", self->dynamic_title);
+                       break;
+
+               case TILDA_TERMINAL_EXIT_ACTION:
+                       self->exit_action = g_value_get_int (value);
+                       g_print ("terminal exit action: %d\n", self->exit_action);
+                       break;
+
                default:
                        /* We don't have this property... */
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -61,6 +142,34 @@ tilda_terminal_get_property (GObject    *object,
                        g_value_set_int (value, self->number);
                        break;
 
+               case TILDA_TERMINAL_BACKGROUND_IMAGE:
+                       g_value_set_string (value, self->background_image);
+                       break;
+
+               case TILDA_TERMINAL_SHELL:
+                       g_value_set_string (value, self->shell);
+                       break;
+
+               case TILDA_TERMINAL_FONT:
+                       g_value_set_string (value, self->font);
+                       break;
+
+               case TILDA_TERMINAL_TITLE:
+                       g_value_set_string (value, self->title);
+                       break;
+
+               case TILDA_TERMINAL_WORKING_DIRECTORY:
+                       g_value_set_string (value, self->working_directory);
+                       break;
+
+               case TILDA_TERMINAL_SCROLLBACK_LINES:
+                       g_value_set_int (value, self->scrollback_lines);
+                       break;
+
+               case TILDA_TERMINAL_TRANSPARENCY_PERCENT:
+                       g_value_set_int (value, self->transparency_percent);
+                       break;
+
                default:
                        /* We don't have this property... */
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -74,6 +183,7 @@ tilda_terminal_constructor (GType                  type,
                                                        GObjectConstructParam *construct_properties)
 {
        GObject *obj;
+       TildaTerminal *self;
 
        /* Invoke parent constructor */
        TildaTerminalClass *klass;
@@ -86,7 +196,18 @@ tilda_terminal_constructor (GType                  type,
         * ctor properties have been set.
         *
         * TODO: This is the place to do DBus-init */
+       self = TILDA_TERMINAL(obj);
+
+       /* Pack into the hbox */
+       gtk_box_pack_end (GTK_BOX(self->hbox), self->scrollbar, FALSE, FALSE, 0);
+       gtk_box_pack_end (GTK_BOX(self->hbox), self->vte_term, TRUE, TRUE, 0);
+       gtk_widget_show (self->scrollbar);
+
 
+       g_signal_connect (G_OBJECT(self->vte_term), "child-exited",
+                                         G_CALLBACK(gtk_main_quit), self);
+
+       vte_terminal_fork_command (VTE_TERMINAL(self->vte_term), NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE);
 
        return obj;
 }
@@ -124,6 +245,11 @@ tilda_terminal_finalize (GObject *obj)
         */
 
        // TODO: g_free() any primitives here
+       g_free (self->background_image);
+       g_free (self->shell);
+       g_free (self->font);
+       g_free (self->title);
+       g_free (self->working_directory);
 
 
        /* Chain up to the parent class */
@@ -159,6 +285,80 @@ tilda_terminal_class_init (gpointer g_class,
        g_object_class_install_property (gobject_class,
                                                                         TILDA_TERMINAL_NUMBER,
                                                                         pspec);
+
+       pspec = g_param_spec_string ("background-image",
+                                                                "Terminal's background image",
+                                                                "Get/Set terminal's background image",
+                                                                NULL,
+                                                                G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_BACKGROUND_IMAGE,
+                                                                        pspec);
+
+       pspec = g_param_spec_string ("shell",
+                                                                "Terminal's shell",
+                                                                "Get/Set terminal's shell",
+                                                                NULL,
+                                                                G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_SHELL,
+                                                                        pspec);
+
+       pspec = g_param_spec_string ("font",
+                                                                "Terminal's font",
+                                                                "Get/Set terminal's font",
+                                                                NULL,
+                                                                G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_FONT,
+                                                                        pspec);
+
+       pspec = g_param_spec_string ("title",
+                                                                "Terminal's title",
+                                                                "Get/Set terminal's title",
+                                                                NULL,
+                                                                G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_TITLE,
+                                                                        pspec);
+
+       pspec = g_param_spec_string ("working-directory",
+                                                                "Terminal's initial working directory",
+                                                                "Get/Set terminal's initial working directory",
+                                                                NULL,
+                                                                G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_WORKING_DIRECTORY,
+                                                                        pspec);
+
+       pspec = g_param_spec_int ("scrollback-lines",
+                                                         "Terminal's scrollback amount (lines)",
+                                                         "Get/Set terminal's scrollback amount",
+                                                         0,
+                                                         INT_MAX, // TODO: artificially limit this?
+                                                         1000,
+                                                         G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_SCROLLBACK_LINES,
+                                                                        pspec);
+
+       pspec = g_param_spec_int ("transparency-percent",
+                                                         "Terminal's transparency (percent)",
+                                                         "Get/Set terminal's transparency",
+                                                         0,
+                                                         100,
+                                                         0,
+                                                         G_PARAM_READWRITE);
+
+       g_object_class_install_property (gobject_class,
+                                                                        TILDA_TERMINAL_TRANSPARENCY_PERCENT,
+                                                                        pspec);
 }
 
 GType
@@ -189,13 +389,17 @@ tilda_terminal_get_type (void)
        return type;
 }
 
+#if 0
+
 int main (int argc, char *argv[])
 {
        GObject *tt;
        gint test_number = INT_MIN;
+       gchar *test_string = NULL;
 
        /* Initialize the GObject type system */
        g_type_init ();
+       gtk_init (&argc, &argv);
 
        tt = g_object_new (TILDA_TYPE_TERMINAL, "number", 10, NULL);
        g_object_get (G_OBJECT (tt), "number", &test_number, NULL);
@@ -207,10 +411,21 @@ int main (int argc, char *argv[])
        g_object_get (G_OBJECT (tt), "number", &test_number, NULL);
        g_assert (test_number == 22);
 
+       g_object_set (G_OBJECT (tt), "font", "hello I'm a font");
+       g_object_set (G_OBJECT (tt), "font", "Bitstream Vera Sans Mono 13");
+
+       g_object_get (G_OBJECT (tt), "font", &test_string, NULL);
+       g_print ("Read Font: %s\n", test_string);
+       // NOTE: you MUST free the string!!!!
+       g_free (test_string);
+
+       g_object_set (G_OBJECT (tt), "transparency-percent", 50);
+
        g_object_unref (G_OBJECT (tt));
 
        return 0;
 }
 
-/* vim: set ts=4 sts=4 sw=4 noet tw=112: */
+#endif
 
+/* vim: set ts=4 sts=4 sw=4 noet tw=112: */