Ejemplo n.º 1
0
static void
ggg_plan_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
{
  GggPlanDialog *dialog = GGG_PLAN_DIALOG (object);

  switch (property_id) {
  case PROP_PROVIDER:
    {
      RestXmlNode *node;
      node = g_value_get_boxed (value);
      populate_store (dialog->priv->store, node);
      gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->priv->combo), 0);

      node = rest_xml_node_find (node, "name");
      if (node && node->content && strlen (node->content) > 0) {
          char *str;
          /* TRANSLATORS: placeholder is service provider name,
           * e.g. "Vodafone" */
          str = g_strdup_printf (_("Select your %s 3G Plan"),
                                 node->content);
          gtk_label_set_text (GTK_LABEL (dialog->priv->label), str);
          g_free (str);
      } else {
          gtk_label_set_text (GTK_LABEL (dialog->priv->label),
                              _("Select your 3G Plan"));
      }
    }
    break;
  default:
    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
    break;
  }
}
static void
ggg_plan_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
{
  GggPlanDialog *dialog = GGG_PLAN_DIALOG (object);

  switch (property_id) {
  case PROP_PROVIDER:
    {
      RestXmlNode *node;
      node = g_value_get_boxed (value);
      populate_store (dialog->priv->store, node);
      gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->priv->combo), 0);
    }
    break;
  default:
    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
    break;
  }
}
Ejemplo n.º 3
0
static void
state_machine (void)
{
  GtkWidget *dialog;
  int old_state;

  while (state != STATE_FINISH) {
    /* For sanity checking state changes later */
    old_state = state;

    switch (state) {
    case STATE_START:
      /*
       * Determine if we need to select a service or can go straight to probing
       * the service.
       */
      if (services) {
        if (services->next) {
          dialog = g_object_new (GGG_TYPE_SERVICE_DIALOG,
                                 "services", services,
                                 NULL);
          switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
          case GTK_RESPONSE_CANCEL:
          case GTK_RESPONSE_DELETE_EVENT:
            state = STATE_FINISH;
            break;
          case GTK_RESPONSE_ACCEPT:
            service = ggg_service_dialog_get_selected (GGG_SERVICE_DIALOG (dialog));
            state = STATE_SERVICE;
            break;
          }
          gtk_widget_destroy (dialog);
        } else {
          service = services->data;
          state = STATE_SERVICE;
        }
      } else {
        g_printerr ("No services found\n");
        state = STATE_FINISH;
      }
      break;
    case STATE_SERVICE:
      /*
       * Exmaine the service and determine if we can probe some information, or
       * have to do guided configuration.
       */
      g_assert (service);

      if (ggg_service_is_roaming (service)) {
        state = STATE_COUNTRY;
      } else {
        provider_node = ggg_mobile_info_get_provider_for_ids
          (ggg_service_get_mcc (service), ggg_service_get_mnc (service));
        /* If we found a provider switch straight to the plan selector, otherwises
           fall back to the manual configuration */
        state = provider_node ? STATE_PLAN : STATE_MANUAL;
      }
      break;
    case STATE_COUNTRY:
      dialog = g_object_new (GGG_TYPE_COUNTRY_DIALOG, NULL);
      switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
      case GTK_RESPONSE_CANCEL:
      case GTK_RESPONSE_DELETE_EVENT:
        state = STATE_FINISH;
        break;
      case GTK_RESPONSE_REJECT:
        state = STATE_MANUAL;
        break;
      case GTK_RESPONSE_ACCEPT:
        country_node = ggg_country_dialog_get_selected (GGG_COUNTRY_DIALOG (dialog));
        state = STATE_PROVIDER;
        break;
      }
      gtk_widget_destroy (dialog);
      break;
    case STATE_PROVIDER:
      g_assert (country_node);
      dialog = g_object_new (GGG_TYPE_PROVIDER_DIALOG,
                             "country", country_node,
                             NULL);
      switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
      case GTK_RESPONSE_CANCEL:
      case GTK_RESPONSE_DELETE_EVENT:
        state = STATE_FINISH;
        break;
      case GTK_RESPONSE_REJECT:
        state = STATE_MANUAL;
        break;
      case GTK_RESPONSE_ACCEPT:
        provider_node = ggg_provider_dialog_get_selected (GGG_PROVIDER_DIALOG (dialog));
        state = STATE_PLAN;
        break;
      }
      gtk_widget_destroy (dialog);
      break;
    case STATE_PLAN:
      g_assert (provider_node);
      dialog = g_object_new (GGG_TYPE_PLAN_DIALOG,
                             "provider", provider_node,
                             NULL);
      switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
      case GTK_RESPONSE_CANCEL:
      case GTK_RESPONSE_DELETE_EVENT:
        state = STATE_FINISH;
        break;
      case GTK_RESPONSE_REJECT:
        state = STATE_MANUAL;
        break;
      case GTK_RESPONSE_ACCEPT:
        plan_node = ggg_plan_dialog_get_selected (GGG_PLAN_DIALOG (dialog));
        state = STATE_SAVE;
        break;
      }
      gtk_widget_destroy (dialog);
      break;
    case STATE_MANUAL:
      dialog = g_object_new (GGG_TYPE_MANUAL_DIALOG, NULL);
      switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
      case GTK_RESPONSE_CANCEL:
      case GTK_RESPONSE_DELETE_EVENT:
        state = STATE_FINISH;
        break;
      case GTK_RESPONSE_ACCEPT:
        plan_node = ggg_manual_dialog_get_plan (GGG_MANUAL_DIALOG (dialog));
        state = STATE_SAVE;
        break;
      }
      break;
    case STATE_SAVE:
      g_assert (plan_node);

      ggg_service_set (service,
                       rest_xml_node_get_attr (plan_node, "value"),
                       get_child_content (plan_node, "username"),
                       get_child_content (plan_node, "password"));

      ggg_service_connect (service);

      state = STATE_FINISH;
      break;
    case STATE_FINISH:
      break;
    }

    g_assert (state != old_state);
  }
}