Beispiel #1
0
static void set_ignores_rgb(ImageStatsRGB *stats, const char *clr)
{
  char buf[128];
  sprintf(buf, "%s_ignore_value_checkbutton", clr);
  stats->have_no_data = get_checked(buf);

  if (stats->have_no_data) {
    sprintf(buf, "%s_ignore_value_entry", clr);
    stats->no_data_value = get_double_from_entry(buf);
  }
  else {
    stats->no_data_value = 0;
  }

  sprintf(buf, "%s_ignore_range_checkbutton", clr);
  stats->have_no_data_range = get_checked(buf);
  if (stats->have_no_data_range) {
    sprintf(buf, "%s_ignore_range_min_entry", clr);
    stats->no_data_min = get_double_from_entry(buf);
    sprintf(buf, "%s_ignore_range_max_entry", clr);
    stats->no_data_max = get_double_from_entry(buf);
  }
  else {
    stats->no_data_min = 0;
    stats->no_data_max = 0;
  }
}
int PluginAutomation::handle_event()
{
	set_checked(!get_checked());
	mwindow->edl->session->auto_conf->plugins = get_checked();
	mwindow->gui->draw_overlays(1);
	mwindow->gui->unlock_window();
	mwindow->gwindow->gui->update_toggles(1);
	mwindow->gui->lock_window("PluginAutomation::handle_event");
	return 1;
}
int ShowTransitions::handle_event()
{
	set_checked(get_checked() ^ 1);
	mwindow->edl->session->auto_conf->transitions = get_checked();
	mwindow->gui->draw_overlays(1);
//	mwindow->gui->mainmenu->draw_items();
	mwindow->gui->unlock_window();
	mwindow->gwindow->gui->update_toggles(1);
	mwindow->gui->lock_window("ShowTransitions::handle_event");
	return 1;
}
Beispiel #4
0
static int get_format()
{
    if (get_checked("format_asf_internal_radiobutton"))
        return FORMAT_ASF_INTERNAL;
    else if (get_checked("format_csv_radiobutton"))
        return FORMAT_CSV;
    
    // not reached
    assert(0);
    return -1;
}
Beispiel #5
0
static void update_gs_map_settings()
{
  int on;

  on = get_checked("rb_gs_custom");
  enable_widget("hbox_gs_custom_range", on);
  on = get_checked("gs_ignore_range_checkbutton");
  enable_widget("hbox_gs_ignore_range", on);
  on = get_checked("gs_ignore_value_checkbutton");
  enable_widget("hbox_gs_ignore_value", on);
}
Beispiel #6
0
int ShowAutomation::handle_event()
{
	set_checked(get_checked() ^ 1);
	mwindow->edl->session->auto_conf->autos[subscript] = get_checked();
	mwindow->gui->canvas->draw_overlays();
	mwindow->gui->canvas->flash();
//	mwindow->gui->mainmenu->draw_items();
	mwindow->gui->unlock_window();
	mwindow->gwindow->gui->update_toggles(1);
	mwindow->gui->lock_window("ShowAutomation::handle_event");
	return 1;
}
Beispiel #7
0
static void set_ignores(ImageInfo *ii, int from_gui)
{
  if (ii->data_ci->data_type == GREYSCALE_FLOAT ||
      ii->data_ci->data_type == GREYSCALE_BYTE)
  {  
    ImageStats *stats = &ii->stats;
    if (from_gui) {
      stats->have_no_data = get_checked("gs_ignore_value_checkbutton");
      if (stats->have_no_data)
        stats->no_data_value = get_double_from_entry("gs_ignore_value_entry");
      else
        stats->no_data_value = 0;
      
      stats->have_no_data_range = get_checked("gs_ignore_range_checkbutton");
      if (stats->have_no_data_range) {
        stats->no_data_min = get_double_from_entry("gs_ignore_range_min_entry");
        stats->no_data_max = get_double_from_entry("gs_ignore_range_max_entry");
      }
      else {
        stats->no_data_min = 0;
        stats->no_data_max = 0;
      }
    }
    else {
      if (meta_is_valid_double(ii->meta->general->no_data)) {
        stats->have_no_data = TRUE;
        stats->no_data_value = ii->meta->general->no_data;
      } else {
        stats->have_no_data = FALSE;
        stats->no_data_value = -99999; // should never be checked
      }
      
      stats->have_no_data_range = FALSE;
    }
  }
  else {
    if (from_gui) {
      set_ignores_rgb(&ii->stats_r, "red");
      set_ignores_rgb(&ii->stats_g, "green");
      set_ignores_rgb(&ii->stats_b, "blue");
    }
    else {
      ii->stats_r.have_no_data = FALSE;
      ii->stats_r.have_no_data_range = FALSE;
      ii->stats_g.have_no_data = FALSE;
      ii->stats_g.have_no_data_range = FALSE;
      ii->stats_b.have_no_data = FALSE;
      ii->stats_b.have_no_data_range = FALSE;
    }

  }
}
Beispiel #8
0
static void set_mapping_rgb(ImageStatsRGB *stats, const char *color)
{
  char buf[64];
  sprintf(buf, "rb_%s_truncate", color);
  if (get_checked(buf)) {
    stats->truncate = TRUE;
    return;
  }

  stats->truncate = FALSE;

  sprintf(buf, "rb_%s_minmax", color);
  if (get_checked(buf)) {
    stats->map_min = stats->act_min;
    stats->map_max = stats->act_max;
    return;
  }

  sprintf(buf, "rb_%s_custom", color);
  if (get_checked(buf)) {
    sprintf(buf, "%s_custom_min_entry", color);
    stats->map_min = get_double_from_entry(buf);
    sprintf(buf, "%s_custom_max_entry", color);
    stats->map_max = get_double_from_entry(buf);
    return;
  }

  // remaining mappings use the standard deviation... guard against
  // that being zero (all data identical)
  if (stats->stddev <= 0) {
    stats->map_min = stats->avg - 1;
    stats->map_max = stats->avg + 1;
    return;
  }

  sprintf(buf, "rb_%s_2sigma", color);
  if (get_checked(buf)) {
    stats->map_min = stats->avg - 2*stats->stddev;
    stats->map_max = stats->avg + 2*stats->stddev;
    return;
  }

  sprintf(buf, "rb_%s_3sigma", color);
  if (get_checked(buf)) {
    stats->map_min = stats->avg - 3*stats->stddev;
    stats->map_max = stats->avg + 3*stats->stddev;
    return;
  }
}
Beispiel #9
0
int ShowTitles::handle_event()
{
	set_checked(get_checked() ^ 1);
	mwindow->edl->session->show_titles = get_checked();
	mwindow->gui->update(1,
		1,
		0,
		0,
		1, 
		0,
		0);
	mwindow->gui->unlock_window();
	mwindow->gwindow->gui->update_toggles(1);
	mwindow->gui->lock_window("ShowTitles::handle_event");
	return 1;
}
Beispiel #10
0
static void disable_correct_hbox()
{
    int is_rgb = get_checked("combine_bands_into_rgb_radiobutton");
    enable_widget("single_band_as_greyscale_hbox", !is_rgb);
    enable_widget("combine_bands_into_rgb_hbox", is_rgb);
    enable_widget("lut_optionmenu", !is_rgb);
}
Beispiel #11
0
SIGNAL_CALLBACK void on_save_button_clicked(GtkWidget *w)
{
    // save the specified subset!
    const char *dir = get_string_from_entry("dir_entry");
    const char *file = get_string_from_entry("filename_entry");
    const char *ext = get_format()==FORMAT_CSV ? "csv" : "img";

    if (strlen(file) == 0) {
        message_box("Please provide a name for the file.");
        return;
    }

    char *save_file = 
        MALLOC(sizeof(char)*(strlen(dir)+strlen(file)+strlen(ext)+5));

    if (strlen(dir) > 0) {
        if (dir[strlen(dir)-1] == DIR_SEPARATOR || dir[strlen(dir)-1] == '/')
            sprintf(save_file, "%s%s.%s", dir, file, ext);
        else
            sprintf(save_file, "%s/%s.%s", dir, file, ext);
    } else
        sprintf(save_file, "%s.%s", file, ext);

    int strict_boundary = get_checked("strict_boundary_checkbutton");
    int load = get_checked("load_saved_subset_checkbutton");
    int ok;

    if (get_format()==FORMAT_CSV) {
        ok = save_as_csv(curr, save_file, get_what_to_save(),
                         strict_boundary, load);
    } else {
        assert(get_format()==FORMAT_ASF_INTERNAL);
        ok = save_as_asf(curr, save_file, get_what_to_save(),
                         strict_boundary, load);
    }

    free(save_file);

    if (ok)
        close_subset_window(curr);
}
Beispiel #12
0
SIGNAL_CALLBACK void
on_bands_apply_button_clicked(GtkWidget *w)
{
    int ml = get_checked("multilook_checkbutton");
    if (!is_multiband) {
        // multilook checkbox only, single-band data
        char *f = STRDUP(curr->filename);
        reload_file_banded(f, NULL, ml);
        free(f);
    }
    else if (get_checked("combine_bands_into_rgb_radiobutton")) {
        // multiband rgb
        char *r = get_band_combo_text(curr->meta, "red_combobox");
        char *g = get_band_combo_text(curr->meta, "green_combobox");
        char *b = get_band_combo_text(curr->meta, "blue_combobox");
        char *s = MALLOC(sizeof(char)*(strlen(r)+strlen(g)+strlen(b)+10));
        sprintf(s,"%s,%s,%s",r?r:"-",g?g:"-",b?b:"-");
        //printf("Load banded: %s, %s\n", g_filename, s);
        char *f = STRDUP(curr->filename);
        reload_file_banded(f, s, ml);
        free(s);
        FREE(r);
        FREE(g);
        FREE(b);
        free(f);
    } else {
        // greyscale
        char *gs = get_band_combo_text(curr->meta,
                                       "single_band_as_greyscale_combobox");
        if (gs) {
            char *f = STRDUP(curr->filename);
            reload_file_banded(f, gs, ml);
            FREE(gs);
            FREE(f);
        }
    }
}
Beispiel #13
0
	inline void compare(Point& p, int x, int y, int offsetx, int offsety)
	{
		Point other = get_checked(x + offsetx, y + offsety);
		other.dx += offsetx;
		other.dy += offsety;
		other.dist_sq = other.dx*other.dx + other.dy*other.dy;
		if (other.dist_sq < p.dist_sq)
			p = other;

		//int newX = x + offsetx, newY = y + offsety;
		//if (0 <= newX && 0 <= newY && newX < width && newY < height)
		//{
		//	Point newp = data[newX*width + newY];
		//	newp.dx += offsetx;
		//	newp.dy += offsety;
		//	newp.dist_sq = newp.dx*newp.dx + newp.dy*newp.dy;

		//	if (newp.dist_sq < p.dist_sq)
		//		p = newp;
		//}
	}
Beispiel #14
0
void process()
{
  clear_results_message();

  child_params_t *cp = MALLOC(sizeof(child_params_t));
  strcpy(cp->in_file, get_string_from_entry("input_file_entry"));

  char *odir = get_string_from_entry("output_directory_entry");
  char *ofile = get_string_from_entry("output_file_entry");

  if (strlen(odir) > 0) {
#ifdef win32
    if (odir[strlen(odir)-1]=='/' || odir[strlen(odir)-1]=='\\')
#else
    if (odir[strlen(odir)-1]=='/')
#endif
      sprintf(cp->out_file, "%s%s", odir, ofile);
    else
      sprintf(cp->out_file, "%s/%s", odir, ofile);
  }
  else {
    strcpy(cp->out_file, ofile);
  }

  if (strlen(cp->in_file)==0) {
    message_box("No input file specified!");
    free(cp);
    return;
  }
  else if (strlen(cp->out_file)==0) {
    message_box("No output file selected!");
    free(cp);
    return;
  }
  else if (!fileExists(cp->in_file)) {
    message_box("Input file \"%s\" not found!", cp->in_file);
    free(cp);
    return;
  }

  int input_format = get_combo_box_item("input_format_combobox");
  int output_format = get_combo_box_item("output_format_combobox");

  if (input_format==INPUT_AUTO) {
    select_defaults_by_file_type(cp->in_file, FALSE);
    input_format = get_combo_box_item("input_format_combobox");
    if (input_format==INPUT_AUTO) {
      message_box("Can't figure out which type of data this is.\n"
                  "Please select the input format manually.");
      free(cp);
      return;
    }
  }

  strcpy(cp->in_format, input_format_to_str(input_format));
  strcpy(cp->out_format, output_format_to_str(output_format));
  char *logFile = appendExt(cp->out_file, ".log");

#ifdef win32
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    memset(&si, 0, sizeof(si));
    memset(&pi, 0, sizeof(pi));
    si.cb = sizeof(si);
    
    char *cmd = MALLOC(sizeof(char)*
        (strlen(cp->in_file) + strlen(cp->out_file) + strlen(get_asf_bin_dir_win()) + 512));
    sprintf(cmd,
        "\"%s/convert2vector.exe\" "
        "-log \"%s\" "
        "-input-format %s -output-format %s \"%s\" \"%s\"",
        get_asf_bin_dir_win(),
        logFile,
        cp->in_format, cp->out_format, cp->in_file, cp->out_file);

    // clear out any previously existing log file
    fLog = fopen(logFile, "a");
    FCLOSE(fLog);

    if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        DWORD dw = GetLastError();
        //printf( "CreateProcess failed (%ld)\n", dw );

        LPVOID lpMsgBuf;
        FormatMessage(
          FORMAT_MESSAGE_ALLOCATE_BUFFER |
          FORMAT_MESSAGE_FROM_SYSTEM |
          FORMAT_MESSAGE_IGNORE_INSERTS,
          NULL,
          dw,
          MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
          (LPTSTR)&lpMsgBuf,
          0,
          NULL);

        printf("CreateProcess() failed with error %ld: %s\n",
            dw, (char*)lpMsgBuf);
        printf("Failed command: %s\n", cmd);
    }

    DWORD dwWaitResult;

    // now wait for process to finish
    do {
        while (gtk_events_pending())
            gtk_main_iteration();
        dwWaitResult = WaitForSingleObject(pi.hProcess, 50);
    }
    while (dwWaitResult == WAIT_TIMEOUT);
#else
  asfFork(child_func, (void*)cp, parent_func, NULL);
#endif

  char message[1024];
  strcpy(message, "-");

  int success=FALSE;
  FILE *lfp = fopen(logFile, "r");
  if (!lfp) {
    sprintf(message, "Error Opening Log File '%s': %s\n",
            logFile, strerror(errno));
  }
  else {
    char *output = NULL;
    char line[1024];
    while (fgets(line, 1024, lfp)) {
      if (output) {
        output = realloc(output, sizeof(char)*(strlen(output)+strlen(line)+1));
        strcat(output, line);
      }
      else {
        output = malloc(sizeof(char)*(strlen(line)+1));
        strcpy(output, line);
      }
    }
    fclose(lfp);
    //unlink(logFile);

    char *p = output, *q;
    while (p) {
      q = strchr(p+1, '\n');
      if (q) {
        *q = '\0';
        if (strstr(p, "Error")!=NULL || strstr(p, "ERROR")!=NULL) {
          *q = '\n';
          int i,n = 0;
          do {
            p = q + 1;
            q = strchr(p, '\n') - 1;
            while (isspace(*q)) --q;
            if (q - p > 2) {
              // First 220 characters of the error string, unless line ends
              // first.  Don't cut off in the middle of a word, though
              strcpy(message, "Error: ");
              strncat(message, p, 220);
              while (isalnum(message[strlen(message)-1]))
                message[strlen(message)-1] = '\0';
              for (n=0; n<strlen(message); ++n)
                if (message[n] == '\n' || message[n] == '*') message[n] = ' ';
              int eating=FALSE;
              for (n=0,i=0; n<strlen(message); ++n) {
                if (isspace(message[n])) {
                  if (!eating) {
                    eating=TRUE;
                    message[i++] = message[n];
                  }
                } else {
                  eating=FALSE;
                  message[i++] = message[n];
                }
              }
              message[i]='\0';
              char *eoe = strstr(message, "End of error");
              if (eoe)
                *eoe = '\0';
              else if (strlen(message)>200)
                strcat(message, " ...");
              break;
            }
          }
          while (*p != '*' && ++n<5); // * flags the end of the error message
        }

        if (strstr(p,"Successful completion!") != NULL) {
          strcpy(message, "Processed successfully!");
          success=TRUE;
          break;
        }

        *q = '\n';
      }
      p=q;
    }

    if (strlen(message)==0) {
      // Did not find an error message, or the success message!
      // So, assume there was an error, but we don't know why
      strcpy(message, "Processing failed!");
    }

    FREE(output);
  }

  int open_output = get_checked("open_output_checkbutton");
  if (!success) open_output = FALSE;

  put_string_to_label("result_label", message);
  asfPrintStatus(message);
  asfPrintStatus("\n\nDone.\n\n");

  if (open_output) {
    switch (output_format) {
      case OUTPUT_KML:
        open_in_google_earth(cp->out_file);
        break;
      case OUTPUT_ALOS_CSV:
        open_in_excel(cp->out_file);
      default:
        // do nothing, output type has no natural associated app
        break;
    }
  }

  free(cp);
}
Beispiel #15
0
static void set_mapping(ImageInfo *ii, int from_gui)
{
  if (ii->data_ci->data_type == GREYSCALE_FLOAT ||
      ii->data_ci->data_type == GREYSCALE_BYTE)
  {  
    ImageStats *stats = &(ii->stats);
    if (from_gui) {
      if (get_checked("rb_gs_minmax")) {
        stats->map_min = stats->act_min;
        stats->map_max = stats->act_max;
        stats->truncate = FALSE;
      }
      else if (get_checked("rb_gs_truncate")) {
        stats->truncate = TRUE;
      }
      else if (get_checked("rb_gs_custom")) {
        stats->map_min = get_double_from_entry("gs_custom_min_entry");
        stats->map_max = get_double_from_entry("gs_custom_max_entry");
        stats->truncate = FALSE;
      }
      else if (stats->stddev <= 0) {
        stats->map_min = stats->avg - 1;
        stats->map_max = stats->avg + 1;
        stats->truncate = FALSE;
      }
      else if (get_checked("rb_gs_2sigma")) {
        stats->map_min = stats->avg - 2*stats->stddev;
        stats->map_max = stats->avg + 2*stats->stddev;
        stats->truncate = FALSE;
      }
      else if (get_checked("rb_gs_3sigma")) {
        stats->map_min = stats->avg - 3*stats->stddev;
        stats->map_max = stats->avg + 3*stats->stddev;
        stats->truncate = FALSE;
      }
    }
    else {
      // initialize to defaults
      stats->truncate = FALSE;
      if (stats->stddev <= 0) {
        stats->map_min = stats->avg - 1;
        stats->map_max = stats->avg + 1;
      }
      else {
        stats->map_min = stats->avg - 2*stats->stddev;
        stats->map_max = stats->avg + 2*stats->stddev;
      }
    }
  }
  else {
    if (from_gui) {
      set_mapping_rgb(&ii->stats_r, "red");
      set_mapping_rgb(&ii->stats_g, "green");
      set_mapping_rgb(&ii->stats_b, "blue");
    }
    else {
      if(ii->data_ci->data_type == RGB_FLOAT) {
        // Default to 2sigma byte conversion when dealing with RGB_FLOAT images
        ii->stats_r.truncate = ii->stats_g.truncate = ii->stats_b.truncate = FALSE;
        ii->stats_r.map_min = ii->stats_r.avg - 2*ii->stats_r.stddev;
        ii->stats_r.map_max = ii->stats_r.avg + 2*ii->stats_r.stddev;
        ii->stats_g.map_min = ii->stats_g.avg - 2*ii->stats_g.stddev;
        ii->stats_g.map_max = ii->stats_g.avg + 2*ii->stats_g.stddev;
        ii->stats_b.map_min = ii->stats_b.avg - 2*ii->stats_b.stddev;
        ii->stats_b.map_max = ii->stats_b.avg + 2*ii->stats_b.stddev;
      }
      else {
        set_mapping_defaults_rgb(&ii->stats_r);
        set_mapping_defaults_rgb(&ii->stats_g);
        set_mapping_defaults_rgb(&ii->stats_b);
      }
    }
  }
}
Beispiel #16
0
int AutosFollowEdits::handle_event()
{ 
	mwindow->edl->session->autos_follow_edits ^= 1; 
	set_checked(!get_checked());
	return 1;
}
Beispiel #17
0
int PluginsFollowEdits::handle_event()
{
	set_checked(get_checked() ^ 1);
	mwindow->edl->session->plugins_follow_edits = get_checked(); 
	return 1;
}
Beispiel #18
0
int LabelsFollowEdits::handle_event()
{
	set_checked(get_checked() ^ 1);
	mwindow->set_labels_follow_edits(get_checked());
	return 1;
}
int TransitionPopupOn::handle_event()
{
	popup->transition->on = !get_checked();
	mwindow->sync_parameters(CHANGE_EDL);
	return 1;
}