Readd previous functions and fix device search

merge-requests/14/head
Ordissimo 2024-10-25 19:20:45 +02:00
rodzic 96d99e4a79
commit afb72fcba6
1 zmienionych plików z 129 dodań i 88 usunięć

Wyświetl plik

@ -52,6 +52,7 @@
#include "progress.h"
#include "preferences.h"
#include "preview.h"
#include "../libgtk/utils-gtk.h"
#ifndef PATH_MAX
# define PATH_MAX 1024
@ -87,6 +88,8 @@
# endif /* ENABLE_GIMP_1_2 */
# endif
static GtkApplication *app = NULL;
static void query (void);
#ifndef ENABLE_GIMP_1_2
static void run (const gchar * name, gint nparams, const GimpParam * param,
@ -119,7 +122,7 @@ enum
struct scan_win_t
{
GtkWidget *shell;
GtkWidget *menubar;
GMenu *menubar;
GtkWidget *hruler;
GtkWidget *vruler;
GtkWidget *info_label;
@ -154,7 +157,7 @@ struct scan_win_t
scan_win;
static const char *prog_name;
static GtkWidget *choose_device_dialog;
static GtkWidget *choose_device_dialog = NULL;
static GSGDialog *dialog;
static const SANE_Device **devlist;
static gint seldev = -1; /* The selected device */
@ -1013,7 +1016,8 @@ scan_done (void)
if (scan_win.preview)
gtk_widget_set_sensitive (scan_win.preview->preview, TRUE);
gtk_widget_set_sensitive (scan_win.scan_button, TRUE);
gtk_widget_set_sensitive (scan_win.menubar, TRUE);
// gtk_widget_set_sensitive (scan_win.menubar, TRUE);
if (scan_win.input_tag >= 0)
{
@ -1091,7 +1095,7 @@ scan_start (void)
if (scan_win.preview)
gtk_widget_set_sensitive (scan_win.preview->preview, FALSE);
gtk_widget_set_sensitive (scan_win.scan_button, FALSE);
gtk_widget_set_sensitive (scan_win.menubar, FALSE);
// gtk_widget_set_sensitive (scan_win.menubar, FALSE);
#ifdef HAVE_LIBGIMP_GIMP_H
if (scan_win.mode == SANE_GIMP_EXTENSION && scan_win.tile)
@ -1450,24 +1454,29 @@ files_exit_callback (GtkWidget * widget, gpointer data)
quit_xscanimage ();
}
static GtkWidget *
static GMenu *
files_build_menu (void)
{
GtkWidget *menu; //, *item;
GMenu *menu; //, *item;
GMenu *section;
GMenuItem *menu_item_quit;
DBG (DBG_debug, "files_build_menu\n");
/*
menu = gtk_menu_new ();
item = gtk_menu_item_new ();
gtk_container_add (GTK_CONTAINER (menu), item);
gtk_widget_show (item);
// GSimpleAction *act_quit = g_simple_action_new ("quit", NULL);
// g_signal_connect_swapped (act_quit, "activate", G_CALLBACK (files_exit_callback), NULL);
// g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (act_quit));
item = gtk_menu_item_new_with_label ("Exit");
gtk_container_add (GTK_CONTAINER (menu), item);
g_signal_connect (G_OBJECT (item), "activate",
G_CALLBACK (files_exit_callback), 0);
gtk_widget_show (item);
*/
menu = g_menu_new ();
section = g_menu_new ();
menu_item_quit = g_menu_item_new ("Exit", "app.quit");
g_menu_append_item (section, menu_item_quit);
g_object_unref (menu_item_quit);
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
g_object_unref (menu_item_quit);
DBG (DBG_debug, "files_build_menu: finished\n");
return menu;
}
@ -1575,14 +1584,14 @@ preview_options_dialog (GtkWidget * widget, gpointer data)
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
gtk_box_append (GTK_BOX (vbox), hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
button = gtk_check_button_new_with_label ("Preserve preview image");
g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (update_int_callback),
&preferences.preserve_preview);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
gtk_check_button_set_active(GTK_CHECK_BUTTON(button),
preferences.preserve_preview);
gtk_box_append (GTK_BOX (hbox), button);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
gtk_widget_show (button);
gtk_widget_show (hbox);
@ -1591,14 +1600,14 @@ preview_options_dialog (GtkWidget * widget, gpointer data)
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
gtk_box_append (GTK_BOX (vbox), hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
button = gtk_check_button_new_with_label ("Use private colormap");
g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (update_int_callback),
&preferences.preview_own_cmap);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
gtk_check_button_set_active(GTK_CHECK_BUTTON (button),
preferences.preview_own_cmap);
gtk_box_append (GTK_BOX (hbox), button);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
gtk_widget_show (button);
gtk_widget_show (hbox);
@ -1607,18 +1616,17 @@ preview_options_dialog (GtkWidget * widget, gpointer data)
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
gtk_box_append (GTK_BOX (vbox), hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
gtk_widget_show (hbox);
label = gtk_label_new ("Gamma correction value");
gtk_box_append (GTK_BOX (hbox), label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
gtk_widget_show (label);
sprintf (buf, "%g", preferences.preview_gamma);
text = gtk_entry_new ();
gtk_editable_set_text (GTK_EDITABLE (text), buf);
gtk_box_append (GTK_BOX (hbox), text);
gtk_box_pack_start (GTK_BOX (hbox), text, TRUE, TRUE, 2);
g_signal_connect (G_OBJECT (text), "changed",
G_CALLBACK (update_double_callback),
&preferences.preview_gamma);
@ -1716,10 +1724,16 @@ pref_toggle_twocolumn (GtkWidget * widget, gpointer data)
*/
}
static GtkWidget *
static GMenu *
pref_build_menu (void)
{
GtkWidget *menu; // , *item, *submenu;
GMenu *menu; // , *item, *submenu;
DBG (DBG_debug, "pref_build_menu\n");
menu = g_menu_new ();
// g_object_unref (section);
return menu;
/*
GtkWidget *unit_mm, *unit_cm, *unit_in;
GSList *units_group = NULL;
@ -1867,7 +1881,6 @@ device_dialog (void)
devname = devlist[seldev]->name;
/* create the dialog box */
scan_win.shell = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (scan_win.shell), (char *) devname);
gtk_window_set_resizable (GTK_WINDOW (scan_win.shell), TRUE);
gtk_window_set_default_size (GTK_WINDOW (scan_win.shell), 400, 400);
@ -1875,12 +1888,12 @@ device_dialog (void)
G_CALLBACK (scan_win_delete), NULL);
/* create the main vbox */
vbox = gtk_dialog_get_content_area(GTK_DIALOG (scan_win.shell));
/* create the menubar */
// scan_win.menubar = gtk_menu_bar_new ();
gtk_box_append (GTK_BOX (vbox), scan_win.menubar);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
if (GTK_IS_WINDOW(scan_win.shell))
gtk_window_set_child(GTK_WINDOW(scan_win.shell), vbox);
else
g_message("%d) %s\n", __LINE__, __FUNCTION__);
/* "Files" submenu: */
/*
@ -1890,6 +1903,7 @@ device_dialog (void)
files_build_menu ());
gtk_widget_show (menubar_item);
*/
g_menu_append_submenu (scan_win.menubar, "File", G_MENU_MODEL (files_build_menu ()));
/* "Preferences" submenu: */
/*
@ -1899,6 +1913,7 @@ device_dialog (void)
pref_build_menu ());
gtk_widget_show (menubar_item);
*/
g_menu_append_submenu (scan_win.menubar, "Preferences", G_MENU_MODEL (pref_build_menu ()));
// gtk_widget_show (scan_win.menubar);
@ -1907,7 +1922,7 @@ device_dialog (void)
{
frame = gtk_frame_new ("Output");
// gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
gtk_box_append (GTK_BOX (vbox), frame);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
@ -1915,18 +1930,18 @@ device_dialog (void)
gtk_frame_set_child (GTK_FRAME (frame), hbox);
label = gtk_label_new ("Filename");
gtk_box_append (GTK_BOX (hbox), label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
text = gtk_entry_new ();
gtk_editable_set_text (GTK_EDITABLE (text), (char *) preferences.filename);
gtk_box_append (GTK_BOX (hbox), text);
gtk_box_pack_start (GTK_BOX (hbox), text, TRUE, TRUE, 2);
g_signal_connect (G_OBJECT (text), "changed",
G_CALLBACK (filename_changed_callback), 0);
scan_win.filename_entry = text;
button = gtk_button_new_with_label ("Browse");
gtk_box_append (GTK_BOX (hbox), button);
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 2);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (browse_filename_callback), 0);
@ -1945,9 +1960,9 @@ device_dialog (void)
GTK_CORNER_TOP_RIGHT);
dialog_window = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_set_homogeneous (GTK_BOX (dialog_window), FALSE);
gtk_window_set_child(GTK_WINDOW (scrolled_window), dialog_window);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW (scrolled_window), dialog_window);
gtk_box_append (GTK_BOX (vbox), scrolled_window);
gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
gtk_widget_show (scrolled_window);
gtk_widget_show (dialog_window);
@ -1959,35 +1974,39 @@ device_dialog (void)
/* The info row */
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
// gtk_container_set_border_width (GTK_CONTAINER (hbox), 3);
gtk_box_append (GTK_BOX (vbox), hbox);
gtk_container_set_border_width (GTK_WIDGET (hbox), 3);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
frame = gtk_frame_new (NULL);
gtk_box_append (GTK_BOX (hbox), frame);
gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
// gtk_container_set_border_width (GTK_CONTAINER (hbox), 2);
gtk_frame_set_child(GTK_FRAME (frame), hbox);
gtk_container_set_border_width (GTK_WIDGET (hbox), 2);
gtk_frame_set_child (GTK_FRAME (frame), hbox);
gtk_widget_show (hbox);
scan_win.info_label = gtk_label_new ("0x0: 0KB");
gtk_box_append (GTK_BOX (hbox), scan_win.info_label);
gtk_box_pack_start (GTK_BOX (hbox), scan_win.info_label, FALSE, FALSE, 0);
gtk_widget_show (scan_win.info_label);
update_param (dialog, 0);
GtkWidget *bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, TRUE, 0);
/* The Scan button */
scan_win.scan_button = gtk_dialog_add_button (GTK_DIALOG (scan_win.shell), "Scan", GTK_RESPONSE_OK);
scan_win.scan_button = gtk_button_new_with_label("Scan");
gtk_box_pack_start (GTK_BOX (bbox), scan_win.scan_button, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (scan_win.scan_button), "clicked",
G_CALLBACK (scan_dialog), scan_win.shell);
gtk_widget_show (scan_win.scan_button);
/* The Preview button */
scan_win.preview_button = gtk_dialog_add_button (GTK_DIALOG (scan_win.shell), "Preview Window", GTK_RESPONSE_ACCEPT);
scan_win.preview_button = gtk_button_new_with_label("Preview Window");
gtk_box_pack_start (GTK_BOX (bbox), scan_win.preview_button, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (scan_win.preview_button), "clicked",
G_CALLBACK (scan_preview), scan_win.shell);
gtk_widget_show (scan_win.preview_button);
@ -2007,14 +2026,14 @@ device_dialog (void)
#endif
pref_device_restore (); /* restore device-settings */
gtk_widget_show (scan_win.shell);
gtk_window_present(GTK_WINDOW(scan_win.shell));
DBG (DBG_debug, "device_dialog: finished\n");
}
static void
ok_choose_dialog_callback (void)
{
gtk_window_destroy (GTK_WINDOW(choose_device_dialog));
gtk_widget_hide (GTK_WIDGET(choose_device_dialog));
device_dialog ();
}
@ -2025,83 +2044,88 @@ select_device_callback (GtkWidget * widget, gpointer data)
}
static void
group_change_callback (GtkToggleButton* button, gpointer data)
group_change_callback (GtkCheckButton* button, gpointer data)
{
if (gtk_toggle_button_get_active(button))
if (gtk_check_button_get_active(button))
{
seldev = (long) data;
}
}
static gint32
static gint
choose_device (void)
{
GtkWidget *main_vbox, *vbox, *button, *group = NULL;
GtkWidget *main_vbox, *vbox, *bbox, *button, *group = NULL;
const SANE_Device *adev;
gint i;
DBG (DBG_debug, "choose_device\n");
choose_device_dialog = gtk_dialog_new ();
choose_device_dialog = scan_win.shell;
gtk_window_set_title (GTK_WINDOW (choose_device_dialog), "Select device");
g_signal_connect (G_OBJECT (choose_device_dialog), "delete_event",
G_CALLBACK (files_exit_callback), NULL);
main_vbox = gtk_dialog_get_content_area(GTK_DIALOG (choose_device_dialog));
gtk_window_set_modal (GTK_WINDOW (choose_device_dialog), TRUE);
// g_signal_connect (G_OBJECT (choose_device_dialog), "delete_event", G_CALLBACK (files_exit_callback), NULL);
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
if (GTK_IS_WINDOW(choose_device_dialog))
gtk_window_set_child (GTK_WINDOW (choose_device_dialog), main_vbox);
else
g_message("%d) %s\n", __LINE__, __FUNCTION__);
/* The list of drivers */
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_box_set_homogeneous (GTK_BOX (vbox), FALSE);
// gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
gtk_box_append (GTK_BOX (main_vbox), vbox);
gtk_container_set_border_width (GTK_WIDGET (vbox), 3);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
gtk_widget_show (vbox);
/* The radio buttons */
button = NULL;
group = NULL;
for (i = 0; i < ndevs; i++)
{
adev = devlist[i];
if (button == NULL)
button = gtk_check_button_new_with_label ((char *) adev->name);
if (group == NULL)
{
button = gtk_check_button_new_with_label ((char *) adev->name);
group = button;
}
/*
else
{
gtk_check_button_set_label( GTK_CHECK_BUTTON(button), adev->name );
group = button;
}*/
gtk_check_button_set_group (GTK_CHECK_BUTTON (button), GTK_CHECK_BUTTON (group));
}
/*
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (select_device_callback),
(void *) (long) i);
*/
g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (group_change_callback),
(void *) (long) i);
gtk_box_append (GTK_BOX (vbox), button);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
gtk_widget_show (button);
if (i == defdev) {
gtk_check_button_set_group (GTK_CHECK_BUTTON (button), GTK_CHECK_BUTTON (group));
gtk_check_button_set_active (GTK_CHECK_BUTTON (group), TRUE);
gtk_check_button_set_active(GTK_CHECK_BUTTON(button), TRUE);
}
}
bbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_pack_start (GTK_BOX (main_vbox), bbox, FALSE, TRUE, 0);
/* The OK button */
button = gtk_dialog_add_button (GTK_DIALOG (choose_device_dialog), "OK", GTK_RESPONSE_OK);
button = gtk_button_new_with_label ("Ok");
gtk_window_set_default_widget (GTK_WINDOW (choose_device_dialog), button);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (ok_choose_dialog_callback), NULL);
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0);
/* The Cancel button */
button = gtk_dialog_add_button (GTK_DIALOG (choose_device_dialog), "Cancel", GTK_RESPONSE_OK);
button = gtk_button_new_with_label ("Cancel");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (files_exit_callback), NULL);
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (bbox), button, TRUE, TRUE, 0);
gtk_widget_show (choose_device_dialog);
gtk_window_present(GTK_WINDOW(choose_device_dialog));
DBG (DBG_debug, "choose_device: finished\n");
return 0;
}
@ -2124,11 +2148,11 @@ init (int argc, char **argv)
//char filename[PATH_MAX];
//struct stat st;
SANE_Status status;
scan_win.info_label = NULL;
DBG_INIT ();
DBG (DBG_debug, "init\n");
gtk_init ();
/*
#ifdef HAVE_LIBGIMP_GIMP_H
gtk_rc_parse (gimp_gtkrc ());
@ -2228,13 +2252,8 @@ init (int argc, char **argv)
}
static void
interface (int argc, char **argv)
interface_app (void)
{
scan_win.info_label = NULL;
DBG (DBG_debug, "interface\n");
init (argc, argv);
for (ndevs = 0; devlist[ndevs]; ++ndevs);
if (seldev >= 0)
@ -2282,6 +2301,25 @@ interface (int argc, char **argv)
DBG (DBG_debug, "interface: finished\n");
}
static void
interface (int argc, char **argv)
{
DBG (DBG_debug, "interface\n");
init (argc, argv);
interface_app ();
}
static void
activate(GApplication *app, gpointer *data) {
/* create the menubar */
scan_win.menubar = g_menu_new ();
scan_win.shell = gtk_application_window_new(GTK_APPLICATION(app));
interface_app ();
gtk_application_set_menubar (GTK_APPLICATION (app), G_MENU_MODEL (scan_win.menubar));
gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(gtk_application_window_new(GTK_APPLICATION(app))), TRUE);
}
int
main (int argc, char **argv)
{
@ -2323,12 +2361,15 @@ main (int argc, char **argv)
# endif /* !ENABLE_GIMP_1_2 */
g_set_print_handler (old_print_func);
g_set_printerr_handler (old_printerr_func);
if (result)
interface (argc, argv);
if (!result)
exit(-1);
}
#else
interface (argc, argv);
#endif /* HAVE_LIBGIMP_GIMP_H */
init (argc, argv);
app = gtk_application_new("com.scan2vcard", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
DBG (DBG_debug, "main: finished\n");
return 0;
}