Example #1
0
E_API E_Dialog *
e_util_dialog_internal(const char *title, const char *txt)
{
   E_Dialog *dia;

   dia = e_dialog_new(NULL, "E", "_error_dialog");
   if (!dia) return NULL;
   e_dialog_title_set(dia, title);
   e_dialog_text_set(dia, txt);
   e_dialog_icon_set(dia, "dialog-error", 64);
   e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
   e_dialog_button_focus_num(dia, 0);
   elm_win_center(dia->win, 1, 1);
   e_dialog_show(dia);
   return dia;
}
/********** externally accesible functions ****************/
EAPI E_Confirm_Dialog *
e_confirm_dialog_show(const char *title, const char *icon, const char *text,
                      const char *button_text, const char *button2_text,
                      void (*func)(void *data), void (*func2)(void *data),
                      void *data, void *data2,
                      void (*del_func)(void *data), void *del_data)
{
    E_Confirm_Dialog *cd;
    E_Dialog *dia;

    cd = E_OBJECT_ALLOC(E_Confirm_Dialog, E_CONFIRM_DIALOG_TYPE, _e_confirm_dialog_free);
    cd->yes.func = func;
    cd->yes.data = data;
    cd->no.func = func2;
    cd->no.data = data2;
    cd->del.func = del_func;
    cd->del.data = del_data;

    dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_confirm_dialog");
    if (!dia)
    {
        e_object_del(E_OBJECT(cd));
        return NULL;
    }
    dia->data = cd;
    cd->dia = dia;

    e_win_delete_callback_set(dia->win, _e_confirm_dialog_delete);

    if (title) e_dialog_title_set(dia, title);
    if (icon) e_dialog_icon_set(dia, icon, 64);
    if (text) e_dialog_text_set(dia, text);

    e_dialog_button_add(dia, !button_text ? _("Yes") : button_text, NULL, _e_confirm_dialog_yes, cd);
    e_dialog_button_add(dia, !button2_text ? _("No") : button2_text, NULL, _e_confirm_dialog_no, cd);

    e_dialog_button_focus_num(dia, 1);
    e_win_centered_set(dia->win, 1);
    e_dialog_show(dia);

    return cd;
}
Example #3
0
/*
 * Validate the entered configuration. Display and error message
 * if required.
 */
static int parse_config_gui(E_Config_Dialog_Data *cfdata)
{
   E_Dialog *error_popup;
   char error_message[1024];
   int config_ok = 1;
   char *end_pointer;
   float parsed_float;
   const char *text_value;
   regex_t *reg_expression;
   int regex_result;
   char *viewpos_file;
   float lat, lon;

   sprintf(error_message, "The configuration you have entered is invalid:<br>");

   if (cfdata->local_xplanet.source_type == SOURCE_ORIGIN)
      cfdata->local_xplanet.origin = strdup(e_widget_ilist_selected_value_get(cfdata->gui.o_source_ilist));
   else
      cfdata->local_xplanet.projection = strdup(e_widget_ilist_selected_value_get(cfdata->gui.o_source_ilist));

   if (cfdata->local_xplanet.source_type == SOURCE_ORIGIN)
   {
      if (strcmp(cfdata->local_xplanet.body, "random") && !strcmp(cfdata->local_xplanet.body, cfdata->local_xplanet.origin))
      {
         sprintf(error_message + strlen(error_message),
            "<br>* Target and origin cannot be the same.");
         config_ok = 0;
      }
   }

   switch (cfdata->local_xplanet.viewpos_type)
   {
   case VIEWPOS_LATLON:
   {
      end_pointer = (char *)e_widget_entry_text_get(cfdata->gui.o_viewpos_lat);
      if (strlen(end_pointer) == 0)
      {
         sprintf(error_message + strlen(error_message),
               "<br>* You must enter a latitude.");
         config_ok = 0;
      }
      else
      {
         parsed_float = strtof(e_widget_entry_text_get(cfdata->gui.o_viewpos_lat),
               &end_pointer);
         if (*end_pointer != '\0' || parsed_float < -90.0 || parsed_float > 90.0)
         {
            sprintf(error_message + strlen(error_message),
                  "<br>* The entered latitude is invalid - must be in the range -90 to 90.");
            config_ok = 0;
         }
         else cfdata->local_xplanet.viewpos_lat = parsed_float;
      }

      end_pointer = (char *)e_widget_entry_text_get(cfdata->gui.o_viewpos_lon);
      if (strlen(end_pointer) == 0)
      {
         sprintf(error_message + strlen(error_message),
               "<br>* You must enter a longitude.");
         config_ok = 0;
      }
      else
      {
         parsed_float = strtof(e_widget_entry_text_get(cfdata->gui.o_viewpos_lon),
               &end_pointer);
         if (*end_pointer != '\0' || parsed_float < -180.0 || parsed_float > 360.0)
         {
            sprintf(error_message + strlen(error_message),
                  "<br>* The entered longitude is invalid - must be in the range 0 to 360 or -180 to 180");
            config_ok = 0;
         }
         else cfdata->local_xplanet.viewpos_lon = parsed_float;
      }
      break;
   }
   case VIEWPOS_FILE:
   {
      lat = INVALID_COORD;
      lon = INVALID_COORD;

      viewpos_file = (char *)e_widget_entry_text_get(cfdata->gui.o_viewpos_file_val);
      switch(read_viewpos_file(viewpos_file, &lat, &lon))
      {
      case VIEWPOS_FILE_NO_PERM:
      {
         sprintf(error_message + strlen(error_message),
               "<br>* No permissions to read viewing position file");
         config_ok = 0;
         break;
      }
      case VIEWPOS_FILE_NOT_FOUND:
      {
         sprintf(error_message + strlen(error_message),
               "<br>* The viewing position file cannot be found");
         config_ok = 0;
         break;
      }
      case VIEWPOS_FILE_IS_DIR:
      {
         sprintf(error_message + strlen(error_message),
               "<br>* The viewing position file is a directory");
         config_ok = 0;
         break;
      }
      case VIEWPOS_FILE_FORMAT_ERROR:
      {
         sprintf(error_message + strlen(error_message),
               "<br>* The viewing position file is in the wrong format (must be 2 numbers, lat then lon)");
         config_ok = 0;
         break;
      }
      case VIEWPOS_FILE_OK:
         cfdata->local_xplanet.viewpos_file = (char *)eina_stringshare_add(viewpos_file);
         break;
      }
      break;
   }
   default:
      break;
   }

   cfdata->local_xplanet.use_localtime = e_widget_check_checked_get(cfdata->gui.o_use_localtime);
   cfdata->local_xplanet.localtime = cfdata->gui.o_localtime;

   cfdata->local_xplanet.show_label = e_widget_check_checked_get(cfdata->gui.o_show_label);
   cfdata->local_xplanet.label_text = strdup(e_widget_entry_text_get(cfdata->gui.o_label_text));

   text_value = strdup(e_widget_entry_text_get(cfdata->gui.o_label_pos_other_text));
   if (!text_value || strlen(text_value) == 0)
   {
      cfdata->local_xplanet.label_pos_other = "";
      if (cfdata->local_xplanet.label_pos == LABEL_POS_OTHER)
      {
         sprintf(error_message + strlen(error_message),
               "<br>* You have not entered a label position");
         config_ok = 0;
      }
   }
   else
   {
      reg_expression = E_NEW(regex_t, 1);
      regcomp(reg_expression, "^[+-][0-9][0-9]*[+-][0-9][0-9]*$", 0);
      regex_result = regexec(reg_expression, text_value, 0, NULL, 0);
      if (regex_result)
      {
         sprintf(error_message + strlen(error_message),
               "<br>* The entered label position is invalid - must be of the form -15+15");
         config_ok = 0;
      }
      else cfdata->local_xplanet.label_pos_other = text_value;

      regfree(reg_expression);
      free(reg_expression);
   }

   cfdata->local_xplanet.use_config = e_widget_check_checked_get(cfdata->gui.o_config_check);
   cfdata->local_xplanet.config_name = strdup(e_widget_entry_text_get(cfdata->gui.o_config_name));

   cfdata->local_xplanet.extra_options = strdup(e_widget_entry_text_get(cfdata->gui.o_extra_options));

   if (!config_ok)
   {
      error_popup = e_dialog_new(e_container_current_get(
            e_manager_current_get()), "eplanet_error", "eplanet/error");
      e_dialog_title_set(error_popup, "Configuration error");
      e_dialog_text_set(error_popup, (const char *) &error_message);
      e_dialog_button_add(error_popup, D_("OK"), NULL, NULL, NULL);
      e_dialog_show(error_popup);
   }

   return config_ok;
}