Skip to content

Commit 925c9bf

Browse files
committed
Move slides though deleted ones
1 parent 0ea8c16 commit 925c9bf

1 file changed

Lines changed: 52 additions & 17 deletions

File tree

src/Services/SlideManager.vala

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -82,48 +82,83 @@ public class Spice.SlideManager : Object {
8282

8383
public void move_down (Slide slide) {
8484
var index = slides.index_of (slide);
85-
86-
if (index + 1 < slides.size) {
87-
stderr.printf ("Moving slide %d down\n", index);
88-
var slide_2 = slides.get (index + 1);
8985

90-
slides.set (index + 1, slide);
91-
slides.set (index, slide_2);
86+
var next_slide = get_next_slide (slide);
87+
if (next_slide != null) {
88+
var next_index = slides.index_of (next_slide);
89+
90+
slides.set (next_index, slide);
91+
slides.set (index, next_slide);
9292

9393
slides_sorted ();
9494
}
9595
}
9696

9797
public void move_up (Slide slide) {
9898
var index = slides.index_of (slide);
99-
if (index - 1 >= 0) {
100-
stderr.printf ("Moving slide %d up\n", index);
101-
var slide_2 = slides.get (index - 1);
10299

103-
slides.set (index - 1, slide);
104-
slides.set (index, slide_2);
100+
var previous_slide = get_previous_slide (slide);
101+
if (previous_slide != null) {
102+
var previous_index = slides.index_of (previous_slide);
103+
104+
slides.set (previous_index, slide);
105+
slides.set (index, previous_slide);
105106

106107
slides_sorted ();
107108
}
108109
}
109110

110111
public void next_slide () {
112+
var next_slide = get_next_slide (current_slide);
113+
114+
if (next_slide != null) {
115+
current_slide = next_slide;
116+
} else {
117+
// TODO: Show end of presentation slide
118+
window.unfullscreen ();
119+
}
120+
}
121+
122+
private Slide? get_next_slide (Slide current) {
123+
Slide? next_slide = null;
111124
bool found = false;
112125
int n = 1;
126+
113127
do {
114-
var next_index = slides.index_of (current_slide) + n++;
128+
var next_index = slides.index_of (current) + n++;
115129
if (next_index < slides.size) {
116-
var new_slide = slides.get (next_index);
117-
if (new_slide.visible) {
118-
current_slide = new_slide;
130+
var slide = slides.get (next_index);
131+
if (slide.visible) {
132+
next_slide = slide;
119133
found = true;
120134
}
121135
} else {
122-
// TODO: Show end of presentation slide
123-
window.unfullscreen ();
124136
found = true;
125137
}
126138
} while (!found);
139+
140+
return next_slide;
141+
}
142+
143+
private Slide? get_previous_slide (Slide current) {
144+
Slide? previous_slide = null;
145+
bool found = false;
146+
int n = 1;
147+
148+
do {
149+
var previous_index = slides.index_of (current) - n++;
150+
if (previous_index < slides.size) {
151+
var slide = slides.get (previous_index);
152+
if (slide.visible) {
153+
previous_slide = slide;
154+
found = true;
155+
}
156+
} else {
157+
found = true;
158+
}
159+
} while (!found);
160+
161+
return previous_slide;
127162
}
128163

129164
public Slide new_slide (Json.Object? save_data = null) {

0 commit comments

Comments
 (0)