Skip to content

Commit fe76380

Browse files
committed
add column merge
to the column menu
1 parent 873e290 commit fe76380

File tree

6 files changed

+78
-6
lines changed

6 files changed

+78
-6
lines changed

TODO

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
- load ws with locked tab, rightclick menu on locked tab does not
22
have tick selected
33

4+
a bit tricky to fix
5+
46
- the "new tab" icon is still broken in the windows build
57

68
- change "Merge into ..."
@@ -12,6 +14,8 @@
1214

1315
Just does save/load for you
1416

17+
how would we do a dynamic pullright menu?:n mes
18+
1519
# menu redesign
1620

1721
- maxpos, then create mark from coordinate should be two clicks

src/columnview.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,36 @@ columnview_action(GSimpleAction *action, GVariant *parameter, View *view)
566566
workspace_queue_layout(ws);
567567
symbol_recalculate_all();
568568
}
569-
else if (g_str_equal(name, "column-merge"))
569+
else if (g_str_equal(name, "column-merge") &&
570+
parameter) {
571+
Column *from =
572+
workspace_column_find(ws, g_variant_get_string(parameter, NULL));
573+
char filename[VIPS_PATH_MAX];
574+
575+
if (!temp_name(filename, IOBJECT(from)->name, "ws")) {
576+
workspace_set_show_error(ws, TRUE);
577+
return;
578+
}
579+
580+
workspace_deselect_all(ws);
581+
column_select_symbols(from);
582+
if (!workspacegroup_save_selected(wsg, filename)) {
583+
workspace_set_show_error(ws, TRUE);
584+
return;
585+
}
586+
587+
workspace_column_select(ws, col);
588+
if (!workspacegroup_merge_rows(wsg, filename)) {
589+
workspace_set_show_error(ws, TRUE);
590+
return;
591+
}
592+
593+
unlinkf("%s", filename);
594+
595+
workspace_deselect_all(ws);
596+
symbol_recalculate_all();
597+
}
598+
else if (g_str_equal(name, "column-merge-file"))
570599
columnview_merge(cview);
571600
else if (g_str_equal(name, "column-saveas"))
572601
columnview_saveas(cview);

src/gtk/workspacegroupview.ui

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
</section>
9292
</menu>
9393

94-
<menu id="workspacegroup-column-menu">
94+
<menu id="workspacegroup_column_menu">
9595
<section>
9696
<item>
9797
<attribute name='label' translatable='yes'>Edit caption</attribute>
@@ -105,9 +105,21 @@
105105
<attribute name='label' translatable='yes'>Duplicate</attribute>
106106
<attribute name='action'>win.column-duplicate</attribute>
107107
</item>
108+
</section>
109+
110+
<!-- the thing at this position is replaced dynamically by
111+
workspacegroupview_background_menu() with the column merge menu
112+
-->
113+
<section>
114+
<submenu>
115+
<attribute name='label' translatable='yes'>placeholder1</attribute>
116+
</submenu>
117+
</section>
118+
119+
<section>
108120
<item>
109-
<attribute name='label' translatable='yes'>Merge into ...</attribute>
110-
<attribute name='action'>win.column-merge</attribute>
121+
<attribute name='label' translatable='yes'>Merge from file ...</attribute>
122+
<attribute name='action'>win.column-merge-file</attribute>
111123
</item>
112124
<item>
113125
<attribute name='label' translatable='yes'>Save as ...</attribute>
@@ -157,7 +169,7 @@
157169

158170
<child>
159171
<object class="GtkPopoverMenu" id="column_menu">
160-
<property name="menu-model">workspacegroup-column-menu</property>
172+
<property name="menu-model">workspacegroup_column_menu</property>
161173
</object>
162174
</child>
163175

src/mainwindow.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,9 @@ static GActionEntry mainwindow_entries[] = {
610610
{ "column-edit-caption", mainwindow_view_action },
611611
{ "column-select-all", mainwindow_view_action },
612612
{ "column-duplicate", mainwindow_view_action },
613-
{ "column-merge", mainwindow_view_action },
613+
// takes a string param with the name of the column to merge
614+
{ "column-merge", mainwindow_view_action, "s" },
615+
{ "column-merge-file", mainwindow_view_action },
614616
{ "column-saveas", mainwindow_view_action },
615617
{ "column-delete", mainwindow_view_action },
616618

src/workspacegroupview.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,19 @@ workspacegroupview_pick_rowview(Workspacegroupview *wsgview,
188188
return columnview_find_rowview(cview, x, y);
189189
}
190190

191+
static void *
192+
workspacegroupview_add_column_item(Column *col, void *user_data)
193+
{
194+
GMenu *columns = G_MENU(user_data);
195+
196+
GMenuItem *item = g_menu_item_new(IOBJECT(col)->name, NULL);
197+
GVariant *target = g_variant_new_string(IOBJECT(col)->name);
198+
g_menu_item_set_action_and_target_value(item, "win.column-merge", target);
199+
g_menu_append_item(columns, item);
200+
201+
return NULL;
202+
}
203+
191204
static void
192205
workspacegroupview_background_menu(GtkGestureClick *gesture,
193206
guint n_press, double x, double y, void *user_data)
@@ -207,6 +220,15 @@ workspacegroupview_background_menu(GtkGestureClick *gesture,
207220
if ((cview = workspacegroupview_pick_columnview_title(wsgview, x, y))) {
208221
mainwindow_set_action_view(VIEW(cview));
209222
menu = wsgview->column_menu;
223+
224+
// generate the dynamic column submenu
225+
GMenu *columns = g_menu_new();
226+
workspace_map_column(ws, workspacegroupview_add_column_item, columns);
227+
GMenu *column_menu = wsgview->workspacegroup_column_menu;
228+
g_menu_remove(column_menu, 1);
229+
g_menu_insert_submenu(column_menu, 1, "Merge column",
230+
G_MENU_MODEL(columns));
231+
210232
}
211233
else if ((rview = workspacegroupview_pick_rowview(wsgview, x, y))) {
212234
mainwindow_set_action_view(VIEW(rview));
@@ -236,6 +258,7 @@ workspacegroupview_class_init(WorkspacegroupviewClass *class)
236258
BIND_VARIABLE(Workspacegroupview, notebook);
237259
BIND_VARIABLE(Workspacegroupview, workspace_menu);
238260
BIND_VARIABLE(Workspacegroupview, column_menu);
261+
BIND_VARIABLE(Workspacegroupview, workspacegroup_column_menu);
239262
BIND_VARIABLE(Workspacegroupview, row_menu);
240263

241264
BIND_CALLBACK(workspacegroupview_new_tab_clicked);

src/workspacegroupview.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ struct _Workspacegroupview {
4545
GtkWidget *workspace_menu;
4646
GtkWidget *column_menu;
4747
GtkWidget *row_menu;
48+
49+
GMenu *workspacegroup_column_menu;
4850
};
4951

5052
typedef struct _WorkspacegroupviewClass {

0 commit comments

Comments
 (0)