Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite some preview callbacks in Scheme #1067

Merged
merged 48 commits into from
Jun 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
d8e43e9
gui: Split creation and run of the file select dialog
vzh May 21, 2024
cd43be9
schematic: Make two C getters available in FFI
vzh Jun 2, 2024
4d68bba
gui: Make x_fileselect_add_preview() available in Scheme
vzh Jun 2, 2024
9fe50cf
gui: Call x_fileselect_add_preview() in Scheme
vzh May 21, 2024
696a703
gui: Create a preview widget for the File select dialog in Scheme
vzh May 21, 2024
cfd0752
schematic: Factor out a new module for working with preview widgets
vzh May 21, 2024
6c07f9f
schematic: Initialize the File select dialog preview widget in Scheme
vzh May 21, 2024
1ceebd2
gui: Simplify the function creating a preview
vzh May 21, 2024
7a7a018
gui: Re-use an already existing function for preview creation
vzh May 21, 2024
433ba86
gui: Make a callback available in Scheme
vzh May 22, 2024
9548eb4
schematic: Connect a signal for File select dialog in Scheme
vzh May 22, 2024
584889e
gui: Make the update preview callback available for Scheme FFI
vzh May 22, 2024
fd0a57c
gui: Make the update preview callback assigned directly in Scheme
vzh May 22, 2024
1fd50c3
schematic: Replace a foreign C callback with a Scheme one
vzh May 23, 2024
f05a82e
gui: Move one function call out of schematic_preview_update()
vzh May 23, 2024
968437c
gui: Check that preview object is not NULL in Scheme code
vzh May 23, 2024
6a28577
gui: Obtain the preview pages in Scheme code
vzh May 23, 2024
f797437
gui: Move deletion of preview page objects to Scheme
vzh May 23, 2024
9e5602c
gui: Move to Scheme obtaining of preview page toplevel object
vzh May 23, 2024
fa7023a
gui: Utilize getter for preview parent window in Compselect code
vzh May 23, 2024
ba97776
gui: Make SchematicPreview an opaque struct
vzh May 23, 2024
972da14
gui: Add getter for SchematicPreview's 'active' field
vzh May 23, 2024
5e960f2
gui: Add getter for SchematicPreview's 'buffer' field
vzh May 23, 2024
79533ee
gui: Rename preview property getter to avoid further conflicts
vzh Jun 10, 2024
de01ebd
gui: Add getter for SchematicPreview's 'filename' field
vzh May 23, 2024
d8a128d
gui: Utilize SchematicPreview's 'active' field in schematic_preview_u…
vzh May 23, 2024
73bf440
gui: Utilize SchematicPreview's 'filename' field in schematic_preview…
vzh May 23, 2024
a1639fb
gui: Utilize SchematicPreview's 'buffer' field in schematic_preview_u…
vzh May 23, 2024
f7002d1
gui: Utilize SchematicPreview's 'active' field in preview scroll call…
vzh May 23, 2024
903f530
gui: Utilize SchematicPreview's 'window' field in preview scroll call…
vzh May 23, 2024
ed9b0da
schematic: Replace C callback for scrolling with a Scheme one
vzh May 23, 2024
b4c8290
gui: Rewrite schematic_preview_callback_scroll_event() in Scheme
vzh May 23, 2024
8d6d0de
schematic: Reverse the order of branches in a condition
vzh May 23, 2024
d8c15c5
gui: Move one SchematicPreview's getter call to Scheme
vzh May 23, 2024
3b953c4
gui: Move call for getter for SchematicPreview's field 'filename' to …
vzh May 23, 2024
1fc031e
gui: Move call for getter for SchematicPreview's field 'buffer' to Sc…
vzh May 23, 2024
fee9df9
gui: Replace assertion in the C code with an error in Scheme
vzh May 24, 2024
c318c7e
gui: Utilize the setters for page geometry values in schematic_previe…
vzh May 24, 2024
f3f85cb
gui: Move opening a file to Scheme
vzh Jun 2, 2024
bd3f905
schematic: Make page geometry setters available in Scheme
vzh Jun 2, 2024
4b22dc7
gui: Move calculating preview geometry to Scheme
vzh Jun 2, 2024
b12c95f
schematic: Simplify calculation of preview width and height increment
vzh Jun 2, 2024
7435529
gui: Get rid of a cast
vzh Jun 2, 2024
baec1b1
gui: Get rid of one function argument
vzh Jun 2, 2024
1cf5ea8
gui: Move a condition test to Scheme
vzh Jun 3, 2024
5b788d8
gui: Move the call to o_read_buffer() to Scheme
vzh Jun 3, 2024
e6f4a19
gui: Rewrite the rest of schematic_preview_update() in Scheme
vzh Jun 3, 2024
b444f28
schematic: Use Scheme function to create preview error text
vzh Jun 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions liblepton/scheme/lepton/ffi.scm
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@
lepton_page_get_page_control
lepton_page_set_page_control
lepton_page_get_pid
lepton_page_get_toplevel
lepton_page_get_undo_bottom
lepton_page_set_undo_bottom
lepton_page_get_undo_current
Expand Down Expand Up @@ -712,6 +713,7 @@
(define-lff lepton_page_get_page_control int '(*))
(define-lff lepton_page_set_page_control void (list '* int))
(define-lff lepton_page_get_pid int '(*))
(define-lff lepton_page_get_toplevel '* '(*))
(define-lff lepton_page_get_undo_bottom '* '(*))
(define-lff lepton_page_set_undo_bottom void '(* *))
(define-lff lepton_page_get_undo_current '* '(*))
Expand Down
32 changes: 10 additions & 22 deletions libleptongui/include/preview_widget.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,31 +32,14 @@
typedef struct _SchematicPreviewClass SchematicPreviewClass;
typedef struct _SchematicPreview SchematicPreview;

struct _SchematicPreviewClass
{
GschemPageViewClass parent_class;
};

struct _SchematicPreview
{
GschemPageView parent_instance;

GschemToplevel *window;

gchar *filename;
gchar *buffer;

gboolean active;
};

GType
schematic_preview_get_type (void);

G_BEGIN_DECLS

GtkWidget*
schematic_preview_new ();

G_BEGIN_DECLS

gboolean
schematic_preview_callback_button_press (GtkWidget *widget,
GdkEventButton *event,
Expand All @@ -65,9 +48,14 @@ void
schematic_preview_callback_realize (GtkWidget *widget,
gpointer user_data);
gboolean
schematic_preview_callback_scroll_event (GtkWidget *widget,
GdkEventScroll *event,
GschemToplevel *w_current);
schematic_preview_get_active (GtkWidget *preview);

gchar*
schematic_preview_get_buffer (GtkWidget *preview);

gchar*
schematic_preview_get_filename (GtkWidget *preview);

GschemToplevel*
schematic_preview_get_window (GtkWidget *preview);

Expand Down
12 changes: 11 additions & 1 deletion libleptongui/include/prototype.h
Original file line number Diff line number Diff line change
Expand Up @@ -496,8 +496,15 @@ schematic_compselect_new (GschemToplevel *w_current);


/* x_fileselect.c */
GtkWidget*
schematic_file_select_dialog_new (GschemToplevel *w_current);

void
x_fileselect_add_preview (GtkWidget *dialog,
GtkWidget *preview);
GSList*
x_fileselect_open (GschemToplevel *w_current);
x_fileselect_open (GschemToplevel *w_current,
GtkWidget *dialog);

gboolean
x_fileselect_save (GschemToplevel *w_current,
Expand All @@ -508,6 +515,9 @@ schematic_file_open (GschemToplevel *w_current,
LeptonPage *page,
const gchar *filename,
GError **err);
void
x_fileselect_callback_update_preview (GtkFileChooser *chooser,
gpointer user_data);

/* x_fstylecb.c */
GtkWidget* x_fstylecb_new ();
Expand Down
1 change: 1 addition & 0 deletions libleptongui/scheme/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ nobase_dist_scmdata_DATA = \
schematic/gettext.scm \
schematic/dialog.scm \
schematic/dialog/file-select.scm \
schematic/preview-widget.scm \
schematic/dialog/slot-edit.scm \
schematic/ffi.scm \
schematic/ffi/gobject.scm \
Expand Down
20 changes: 3 additions & 17 deletions libleptongui/scheme/schematic/callback.scm
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#:use-module (schematic dialog file-select)
#:use-module (schematic ffi)
#:use-module (schematic gettext)
#:use-module (schematic preview-widget)
#:use-module (schematic window foreign)
#:use-module (schematic window)

Expand Down Expand Up @@ -135,15 +136,6 @@

(define (callback-add-component *widget *window)
(define window (pointer->window *window))
(define signal-callback-list
(list
(if %m4-use-gtk3
`("draw" . ,*x_event_draw)
`("expose-event" . ,*x_event_expose))
`("realize" . ,*schematic_preview_callback_realize)
`("button-press-event" . ,*schematic_preview_callback_button_press)
`("configure-event" . ,*x_event_configure)
`("scroll-event" . ,*schematic_preview_callback_scroll_event)))

(o_redraw_cleanstates *window)

Expand All @@ -154,14 +146,8 @@
(string->pointer "response")
*x_compselect_callback_response
*window)
(let ((*preview (schematic_compselect_get_preview *compselect-widget)))
(for-each
(lambda (element)
(schematic_signal_connect *preview
(string->pointer (car element))
(cdr element)
(schematic_preview_get_window *preview)))
signal-callback-list))
(init-preview-widget-signals
(schematic_compselect_get_preview *compselect-widget))
(schematic_window_set_compselect *window *compselect-widget)))
(x_compselect_open (schematic_window_get_compselect *window))

Expand Down
23 changes: 21 additions & 2 deletions libleptongui/scheme/schematic/dialog/file-select.scm
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
;;; Lepton EDA Schematic Capture
;;; Scheme API
;;; Copyright (C) 2022 Lepton EDA Contributors
;;; Copyright (C) 2022-2024 Lepton EDA Contributors
;;;
;;; This program is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
Expand All @@ -21,9 +21,11 @@
#:use-module (srfi srfi-1)
#:use-module (system foreign)

#:use-module (lepton ffi boolean)
#:use-module (lepton ffi glib)

#:use-module (schematic ffi)
#:use-module (schematic preview-widget)
#:use-module (schematic window)
#:use-module (schematic window foreign)

Expand All @@ -36,8 +38,25 @@ pages. The current page of the window is set to the page of the
last loaded page."
(define *window (check-window window 1))

(define (*make-dialog)
(let ((*dialog
(schematic_file_select_dialog_new *window)))
(when (true? (schematic_window_get_file_preview *window))
(let ((*preview (schematic_preview_new)))
(x_fileselect_add_preview
*dialog
(init-preview-widget-signals *preview))
;; Connect callback to update preview.
(schematic_signal_connect *dialog
(string->pointer "update-preview")
*x_fileselect_callback_update_preview
*preview)))
*dialog))

(define filenames
(gslist->list (x_fileselect_open *window) pointer->string 'free))
(gslist->list (x_fileselect_open *window (*make-dialog))
pointer->string
'free))

;; Open each file.
(define pages
Expand Down
35 changes: 29 additions & 6 deletions libleptongui/scheme/schematic/ffi.scm
Original file line number Diff line number Diff line change
Expand Up @@ -331,9 +331,12 @@
gschem_page_view_zoom_extents
schematic_page_view_grab_focus

schematic_preview_new
*schematic_preview_callback_realize
*schematic_preview_callback_button_press
*schematic_preview_callback_scroll_event
schematic_preview_get_active
schematic_preview_get_buffer
schematic_preview_get_filename
schematic_preview_get_window

schematic_signal_connect
Expand All @@ -360,6 +363,8 @@
schematic_window_get_draw_grips
schematic_window_set_draw_grips
schematic_window_get_enforce_hierarchy
schematic_window_get_file_preview
schematic_window_set_file_preview
schematic_window_set_first_wx
schematic_window_set_first_wy
schematic_window_get_second_wx
Expand Down Expand Up @@ -424,6 +429,10 @@
gschem_options_widget_new

gschem_page_geometry_set_viewport
gschem_page_geometry_set_world_bottom
gschem_page_geometry_set_world_left
gschem_page_geometry_set_world_right
gschem_page_geometry_set_world_top

gschem_text_properties_widget_new
text_edit_dialog
Expand Down Expand Up @@ -458,7 +467,7 @@
*x_event_configure
*x_event_draw
*x_event_expose
*x_event_scroll
x_event_scroll
schematic_event_get_button
schematic_event_is_double_button_press
schematic_event_get_doing_stroke
Expand All @@ -468,9 +477,11 @@
schematic_event_control_mask
schematic_event_shift_mask


schematic_file_select_dialog_new
x_fileselect_add_preview
x_fileselect_open
x_fileselect_save
*x_fileselect_callback_update_preview
schematic_file_open

x_image_setup
Expand Down Expand Up @@ -632,9 +643,12 @@
(define-lff schematic_page_view_grab_focus void '(*))

;;; preview_widget.c
(define-lff schematic_preview_new '* '())
(define-lfc *schematic_preview_callback_realize)
(define-lfc *schematic_preview_callback_button_press)
(define-lfc *schematic_preview_callback_scroll_event)
(define-lff schematic_preview_get_active int '(*))
(define-lff schematic_preview_get_buffer '* '(*))
(define-lff schematic_preview_get_filename '* '(*))
(define-lff schematic_preview_get_window '* '(*))

;;; schematic_hierarchy.c
Expand Down Expand Up @@ -679,6 +693,8 @@
(define-lff schematic_window_get_draw_grips int '(*))
(define-lff schematic_window_set_draw_grips void (list '* int))
(define-lff schematic_window_get_enforce_hierarchy int '(*))
(define-lff schematic_window_get_file_preview int '(*))
(define-lff schematic_window_set_file_preview void (list int '*))
(define-lff schematic_window_set_first_wx void (list '* int))
(define-lff schematic_window_set_first_wy void (list '* int))
(define-lff schematic_window_get_second_wx int '(*))
Expand Down Expand Up @@ -749,6 +765,10 @@

;;; gschem_page_geometry.c
(define-lff gschem_page_geometry_set_viewport void (list '* int int double))
(define-lff gschem_page_geometry_set_world_bottom void (list '* int))
(define-lff gschem_page_geometry_set_world_left void (list '* int))
(define-lff gschem_page_geometry_set_world_right void (list '* int))
(define-lff gschem_page_geometry_set_world_top void (list '* int))

;;; gschem_text_properties_widget.c
(define-lff gschem_text_properties_widget_new '* '(*))
Expand Down Expand Up @@ -997,7 +1017,7 @@
(define-lfc *x_event_configure)
(define-lfc *x_event_draw)
(define-lfc *x_event_expose)
(define-lfc *x_event_scroll)
(define-lff x_event_scroll int '(* * *))
(define-lff schematic_event_get_button int '(*))
(define-lff schematic_event_is_double_button_press int '(*))
(define-lff schematic_event_get_doing_stroke int '())
Expand All @@ -1008,8 +1028,11 @@
(define-lff schematic_event_shift_mask int '())

;;; x_fileselect.c
(define-lff x_fileselect_open '* '(*))
(define-lff schematic_file_select_dialog_new '* '(*))
(define-lff x_fileselect_add_preview void '(* *))
(define-lff x_fileselect_open '* '(* *))
(define-lff x_fileselect_save int '(* * *))
(define-lfc *x_fileselect_callback_update_preview)
(define-lff schematic_file_open int '(* * * *))

;;; x_image.c
Expand Down
Loading
Loading