Skip to content

Commit 2c8d56e

Browse files
Use resizable split
1 parent ea64971 commit 2c8d56e

File tree

3 files changed

+62
-52
lines changed

3 files changed

+62
-52
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ include(FetchContent)
66
set(FETCHCONTENT_UPDATES_DISCONNECTED TRUE)
77
FetchContent_Declare(ftxui
88
GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui
9-
GIT_TAG aacb677e8449429b3dd96d9822065253c201a86b
9+
GIT_TAG 462664520ae20ccc6121c9ed706d49aa00fd73d0
1010
)
1111

1212
FetchContent_GetProperties(ftxui)

src/diff.cpp

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -265,25 +265,32 @@ int main(int argc, const char** argv) {
265265
auto scroller = Scroller(
266266
Renderer([&] { return Render(files[file_menu_selected], split); }));
267267

268-
auto container = Container::Horizontal({
269-
file_menu,
270-
scroller,
268+
auto file_menu_renderer = Renderer(file_menu, [&] {
269+
return vbox({
270+
text(L" Files "),
271+
separator(),
272+
file_menu->Render(),
273+
});
271274
});
272275

273-
container = Renderer(container, [&] {
276+
auto file_renderer = Renderer(scroller, [&, file_menu] {
274277
const File& file = files[file_menu_selected];
275-
return hbox({
276-
window(text(L" Files "), file_menu->Render()) |
277-
size(WIDTH, LESS_THAN, 30),
278-
vbox({
279-
window(
280-
text(L" Difference "),
281-
vbox({text(file.left_file + L" -> " + file.right_file),
282-
separator(), scroller->Render()})),
283-
filler(),
284-
}) | xflex_shrink,
278+
return vbox({
279+
text(L" Difference "),
280+
separator(),
281+
text(file.left_file + L" -> " + file.right_file),
282+
separator(),
283+
scroller->Render(),
285284
}) |
286-
bgcolor(Color::RGB(30, 30, 30)) | yflex;
285+
flex;
286+
});
287+
288+
int file_menu_width = 30;
289+
auto layout =
290+
ResizableSplitLeft(file_menu_renderer, file_renderer, &file_menu_width);
291+
292+
auto layout_renderer = Renderer(layout, [&] {
293+
return layout->Render() | bgcolor(Color::RGB(30, 30, 30)) | yflex;
287294
});
288295

289296
auto options = Container::Horizontal({
@@ -306,12 +313,12 @@ int main(int argc, const char** argv) {
306313
bgcolor(Color::White) | color(Color::Black);
307314
});
308315

309-
container = Container::Vertical({
316+
auto main_container = Container::Vertical({
310317
option_renderer,
311-
container,
318+
layout_renderer,
312319
});
313320

314-
container = CatchEvent(container, [&](Event event) {
321+
auto final_container = CatchEvent(main_container, [&](Event event) {
315322
if (event == Event::Character('s')) {
316323
split = !split;
317324
return true;
@@ -333,12 +340,12 @@ int main(int argc, const char** argv) {
333340
file_menu->TakeFocus();
334341

335342
auto screen = ScreenInteractive::Fullscreen();
336-
screen.Loop(container);
343+
screen.Loop(final_container);
337344

338345
return EXIT_SUCCESS;
339346
}
340347

341-
} // namespace diff
348+
} // namespace gittui::diff
342349

343350
// Copyright 2021 Arthur Sonzogni. All rights reserved.
344351
// Use of this source code is governed by the MIT license that can be found in

src/log.cpp

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ int main(int argc, const char** argv) {
154154
menu_files_entries.push_back(file.right_file);
155155
};
156156
refresh_files();
157+
157158
auto menu_files = Menu(&menu_files_entries, &menu_files_index);
158159
MenuBase::From(menu_commit)->on_change = [&] {
159160
refresh_files();
@@ -251,42 +252,44 @@ int main(int argc, const char** argv) {
251252
bgcolor(Color::White) | color(Color::Black);
252253
});
253254

254-
auto container = Container::Vertical({
255-
options,
256-
Container::Horizontal({
257-
menu_commit,
258-
menu_files,
259-
scroller,
260-
}),
255+
menu_files = Renderer(menu_files, [menu_files] {
256+
return vbox({
257+
text(L"Commit"),
258+
separator(),
259+
menu_files->Render() | size(WIDTH, EQUAL, 25) | yframe,
260+
});
261261
});
262262

263-
auto renderer = Renderer(container, [&] {
263+
menu_commit = Renderer(menu_commit, [menu_commit] {
264264
return vbox({
265-
option_renderer->Render(),
266-
hbox({
267-
vbox({
268-
text(L"Commit"),
269-
separator(),
270-
menu_commit->Render() | size(WIDTH, EQUAL, 25) | yframe,
271-
}),
272-
separator(),
273-
vbox({
274-
text(L"Files"),
275-
separator(),
276-
menu_files->Render() | size(WIDTH, EQUAL, 25) | yframe,
277-
}),
278-
separator(),
279-
vbox({
280-
text(L"Content"),
281-
separator(),
282-
scroller->Render() | xflex,
283-
}) | xflex,
284-
}) | yflex |
285-
nothing,
265+
text(L"Files"),
266+
separator(),
267+
menu_commit->Render() | size(WIDTH, EQUAL, 25) | yframe,
286268
});
287269
});
288270

289-
renderer = CatchEvent(renderer, [&](Event event) {
271+
scroller = Renderer(scroller, [scroller] {
272+
return vbox({
273+
text(L"Content"),
274+
separator(),
275+
scroller->Render() | flex,
276+
});
277+
});
278+
279+
int menu_commit_width = 25;
280+
int menu_files_width = 25;
281+
282+
auto container = scroller;
283+
container = ResizableSplitLeft(menu_files, container, &menu_files_width);
284+
container = ResizableSplitLeft(menu_commit, container, &menu_commit_width);
285+
container =
286+
Renderer(container, [container] { return container->Render() | flex; });
287+
container = Container::Vertical({
288+
option_renderer,
289+
container,
290+
});
291+
292+
container = CatchEvent(container, [&](Event event) {
290293
refresh_commit_list();
291294

292295
if (event == Event::Character('s')) {
@@ -314,7 +317,7 @@ int main(int argc, const char** argv) {
314317

315318
menu_commit->TakeFocus();
316319

317-
screen.Loop(renderer);
320+
screen.Loop(container);
318321
return EXIT_SUCCESS;
319322
}
320323

0 commit comments

Comments
 (0)