mirror of
git://projects.qi-hardware.com/fped.git
synced 2024-11-25 06:12:28 +02:00
Make delete feel "safer".
- objects are now deleted by selecting them, then clicking on the delete icon - removed tool_ops.click, which was only there because of delete git-svn-id: http://svn.openmoko.org/trunk/eda/fped@5419 99fdad57-331a-0410-800a-d7fa5415bdb3
This commit is contained in:
parent
57e76aeb9e
commit
fe5f824b9e
2
Makefile
2
Makefile
@ -18,7 +18,7 @@ OBJS = fped.o expr.o coord.o obj.o delete.o inst.o util.o error.o \
|
||||
|
||||
XPMS = point.xpm delete.xpm vec.xpm frame.xpm frame_locked.xpm frame_ready.xpm \
|
||||
line.xpm rect.xpm pad.xpm circ.xpm meas.xpm meas_x.xpm meas_y.xpm \
|
||||
stuff.xpm stuff_off.xpm meas_off.xpm
|
||||
stuff.xpm stuff_off.xpm meas_off.xpm delete_off.xpm
|
||||
|
||||
CFLAGS_GTK = `pkg-config --cflags gtk+-2.0`
|
||||
LIBS_GTK = `pkg-config --libs gtk+-2.0`
|
||||
|
13
TODO
13
TODO
@ -2,9 +2,10 @@ Major missing features:
|
||||
- populate input area (still needed: mm/mil, rezoom)
|
||||
- add default unit (combine with grid unit selection ?)
|
||||
- consider adding auto/mm/mil selection for each dimension
|
||||
- add postscript output
|
||||
- add postscript output (partially done)
|
||||
- add option to include/omit helper vecs and frames (done for display, still
|
||||
need postscript)
|
||||
need postscript). Better idea: in PS, print the component 10x, 1x, and then
|
||||
each individual frame 10x.
|
||||
|
||||
Minor missing features:
|
||||
- reorder frames (can use text editor)
|
||||
@ -35,6 +36,9 @@ Code cleanup:
|
||||
- the drag logic is too complex. Better: let tool/instance just generate the
|
||||
list of points at each stage, then handle the highlighting and hovering
|
||||
inside a dragging module.
|
||||
- code organization is very poor. E.g., functions belonging to the different
|
||||
items (pads, silk objects, vectors, etc.) should be grouped by item, not by
|
||||
type of function, similar to how some things are now with gui_meas.c
|
||||
|
||||
Open decisions:
|
||||
- Q: should loop be (start, last) or (start, iterations) ? or start ... last ?
|
||||
@ -60,5 +64,8 @@ Future directions:
|
||||
- advanced: silk line width
|
||||
- future: when encountering an error after a change, we could try to find the
|
||||
same element in the old instance, and select it
|
||||
- future: consider editing off-canvas items in place
|
||||
- idea: run the sort algorithm of dump.c to generate a list of objects per
|
||||
frame, then show the list per frame in the GUI, e.g., as an alternative to
|
||||
the variables. Allow selection.
|
||||
- future: consider editing non-canvas items in place
|
||||
- near future: treat part name as pattern
|
||||
|
30
gui_tool.c
30
gui_tool.c
@ -41,15 +41,17 @@
|
||||
#include "icons/pad.xpm"
|
||||
#include "icons/point.xpm"
|
||||
#include "icons/delete.xpm"
|
||||
#include "icons/delete_off.xpm"
|
||||
#include "icons/rect.xpm"
|
||||
#include "icons/vec.xpm"
|
||||
|
||||
|
||||
static GtkWidget *ev_point, *ev_frame;
|
||||
static GtkWidget *ev_point, *ev_delete, *ev_frame;
|
||||
static GtkWidget *active_tool;
|
||||
static struct tool_ops *active_ops = NULL;
|
||||
static struct inst *hover_inst = NULL;
|
||||
static GtkWidget *frame_image, *frame_image_locked, *frame_image_ready;
|
||||
static GtkWidget *delete_image[2];
|
||||
|
||||
static struct drag_state {
|
||||
struct inst *inst; /* non-NULL if dragging an existing object */
|
||||
@ -167,24 +169,28 @@ static struct pix_buf *hover_common(GdkGC *gc, struct coord center, unit_type r)
|
||||
/* ----- delete ------------------------------------------------------------ */
|
||||
|
||||
|
||||
static void click_delete(struct coord pos)
|
||||
static void tool_selected_delete(void)
|
||||
{
|
||||
inst_deselect();
|
||||
inst_select(pos);
|
||||
if (selected_inst) {
|
||||
tool_dehover();
|
||||
inst_delete(selected_inst);
|
||||
}
|
||||
change_world();
|
||||
}
|
||||
tool_reset();
|
||||
}
|
||||
|
||||
|
||||
static struct tool_ops delete_ops = {
|
||||
.click = click_delete,
|
||||
.tool_selected = tool_selected_delete,
|
||||
};
|
||||
|
||||
|
||||
void tool_selected_inst(struct inst *inst)
|
||||
{
|
||||
set_image(ev_delete, delete_image[inst != NULL]);
|
||||
}
|
||||
|
||||
|
||||
/* ----- vec --------------------------------------------------------------- */
|
||||
|
||||
|
||||
@ -772,7 +778,7 @@ static struct pix_buf *drag_save_and_draw(void *user, struct coord to)
|
||||
* | |
|
||||
* N N don't
|
||||
* Y - if we could drag, drag_new/end_new, else fall over to tool
|
||||
* N Y click, else single-click creation, else drag_new/end_new
|
||||
* N Y else single-click creation, else drag_new/end_new
|
||||
*/
|
||||
|
||||
int tool_consider_drag(struct coord pos)
|
||||
@ -800,10 +806,6 @@ int tool_consider_drag(struct coord pos)
|
||||
}
|
||||
if (!active_ops)
|
||||
return 0;
|
||||
if (active_ops->click) {
|
||||
active_ops->click(pos);
|
||||
return 0;
|
||||
}
|
||||
|
||||
curr = get_hover_inst(pos);
|
||||
if (!curr)
|
||||
@ -961,7 +963,7 @@ GtkWidget *gui_setup_tools(GdkDrawable *drawable)
|
||||
|
||||
ev_point = tool_button(bar, drawable, xpm_point,
|
||||
tool_button_press_event, NULL);
|
||||
tool_button(bar, drawable, xpm_delete,
|
||||
ev_delete = tool_button(bar, drawable, NULL,
|
||||
tool_button_press_event, &delete_ops);
|
||||
tool_separator(bar);
|
||||
tool_button(bar, drawable, xpm_vec,
|
||||
@ -991,6 +993,10 @@ GtkWidget *gui_setup_tools(GdkDrawable *drawable)
|
||||
gtk_widget_ref(make_image(drawable, xpm_frame_ready));
|
||||
set_frame_image(frame_image);
|
||||
|
||||
delete_image[0] = gtk_widget_ref(make_image(drawable, xpm_delete_off));
|
||||
delete_image[1] = gtk_widget_ref(make_image(drawable, xpm_delete));
|
||||
set_image(ev_delete, delete_image[0]);
|
||||
|
||||
tool_reset();
|
||||
|
||||
return bar;
|
||||
|
@ -23,7 +23,6 @@ struct tool_ops {
|
||||
void (*tool_selected)(void);
|
||||
void (*tool_deselected)(void);
|
||||
struct inst *(*find_point)(struct coord pos);
|
||||
void (*click)(struct coord pos);
|
||||
void (*begin_drag_new)(struct inst *from);
|
||||
struct pix_buf *(*drag_new)(struct inst *from, struct coord to);
|
||||
int (*end_new_raw)(struct inst *from, struct coord to);
|
||||
@ -71,6 +70,8 @@ struct pix_buf *drag_new_line(struct inst *from, struct coord to);
|
||||
void tool_frame_update(void);
|
||||
void tool_frame_deleted(const struct frame *frame);
|
||||
|
||||
void tool_selected_inst(struct inst *inst);
|
||||
|
||||
void tool_reset(void);
|
||||
|
||||
GtkWidget *gui_setup_tools(GdkDrawable *drawable);
|
||||
|
@ -9,7 +9,7 @@ Single
|
||||
1200 2
|
||||
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||
3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
|
||||
2 1 0 15 18 7 50 -1 -1 0.000 0 1 -1 0 0 2
|
||||
2 1 0 15 19 7 50 -1 -1 0.000 0 1 -1 0 0 2
|
||||
4125 2925 5475 4275
|
||||
2 1 0 15 18 7 50 -1 -1 0.000 0 1 -1 0 0 2
|
||||
2 1 0 15 19 7 50 -1 -1 0.000 0 1 -1 0 0 2
|
||||
4125 4275 5475 2925
|
||||
|
15
icons/delete_off.fig
Normal file
15
icons/delete_off.fig
Normal file
@ -0,0 +1,15 @@
|
||||
#FIG 3.2 Produced by xfig version 3.2.5a
|
||||
Landscape
|
||||
Center
|
||||
Inches
|
||||
A4
|
||||
100.00
|
||||
Single
|
||||
-2
|
||||
1200 2
|
||||
2 2 0 1 0 7 55 -1 10 0.000 0 0 -1 0 0 5
|
||||
3600 2400 6000 2400 6000 4800 3600 4800 3600 2400
|
||||
2 1 0 15 0 7 50 -1 -1 0.000 0 1 -1 0 0 2
|
||||
4125 2925 5475 4275
|
||||
2 1 0 15 0 7 50 -1 -1 0.000 0 1 -1 0 0 2
|
||||
4125 4275 5475 2925
|
7
inst.c
7
inst.c
@ -118,6 +118,8 @@ int inst_select(struct coord pos)
|
||||
deselect_outside();
|
||||
edit_nothing();
|
||||
selected_inst = NULL;
|
||||
if (selected_inst)
|
||||
tool_selected_inst(NULL);
|
||||
FOR_INST_PRIOS_DOWN(prio) {
|
||||
if (!show(prio))
|
||||
continue;
|
||||
@ -154,6 +156,7 @@ int inst_select(struct coord pos)
|
||||
|
||||
selected:
|
||||
set_path(1);
|
||||
tool_selected_inst(selected_inst);
|
||||
if (selected_inst->ops->select)
|
||||
selected_inst->ops->select(selected_inst);
|
||||
return 1;
|
||||
@ -263,8 +266,10 @@ int inst_anchors(struct inst *inst, struct vec ***anchors)
|
||||
|
||||
void inst_deselect(void)
|
||||
{
|
||||
if (selected_inst)
|
||||
if (selected_inst) {
|
||||
set_path(0);
|
||||
tool_selected_inst(NULL);
|
||||
}
|
||||
deselect_outside();
|
||||
status_set_type_x("");
|
||||
status_set_type_y("");
|
||||
|
Loading…
Reference in New Issue
Block a user