#include "app.h"
#include <stdlib.h>
#include "dialer-res.h"

typedef struct _App {
  GtkBuilder * bldr;
  GtkWidget * popover;
  GtkWidget * window;
  GtkWidget * openpad;
  GtkWidget * dial;
} App;

void
app_destroy (GtkWidget * widget, gpointer user_data) {
  gtk_main_quit ();
}

void
app_do_stuff (GtkWidget * widget, App * user_data) {
  
  gtk_widget_show_all (user_data->popover);
}

void
app_install_style (App * self) {
  GtkCssProvider * cssprov = gtk_css_provider_new ();
  
  gtk_css_provider_load_from_resource (cssprov, "/org/gego/dialer/style.main.css");
  
  gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
                                             cssprov,
                                       GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
  
}

App *
app_new () {
  
  App * self = g_malloc (sizeof (App));
  
  self->bldr = gtk_builder_new ();
  
  GError * err = NULL;
  
  if (!gtk_builder_add_from_resource (self->bldr, "/org/gego/dialer/main.glade", &err)) {
    g_print ("Error: %s\n", err->message);
    g_object_unref (self->bldr);
    exit (1);
  }
  
  if (!gtk_builder_add_from_resource (self->bldr, "/org/gego/dialer/dial.glade", &err)) {
    g_print ("Error: %s\n", err->message);
    g_object_unref (self->bldr);
    exit (1);
  }
  
  self->window = (GtkWidget *) gtk_builder_get_object (self->bldr,
                                                       "GnomeDialer");
  
  self->openpad = (GtkWidget *) gtk_builder_get_object (self->bldr,
                                                        "openpad");
  
  g_signal_connect (G_OBJECT (self->openpad), "clicked",
                    G_CALLBACK (app_do_stuff),
                    self);
  
  gtk_builder_connect_signals(self->bldr, NULL);
  
  g_signal_connect (G_OBJECT(self->window), "destroy",
                    G_CALLBACK(app_destroy),
                    self);
  
  self->popover = gtk_popover_new (self->openpad);
  
  gtk_container_add (GTK_CONTAINER (self->popover),
                     GTK_WIDGET(gtk_builder_get_object (self->bldr, "dial")));
  
  app_install_style (self);
  
  gtk_widget_show_all (self->window);
  
  gtk_widget_hide (self->popover);
  
  return self;
}

