Author: rinrab
Date: Wed Apr 1 22:21:41 2026
New Revision: 1932721
Log:
svnbrowse: Introduce 'view' that does the rendering of what the model has.
* subversion/svnbrowse/svnbrowse.c
(svn_browse__view_t): New struct.
(view_make): New function.
(ui_draw -> view_draw): Rename function and work with a view.
(sub_main): Construct and use the view.
Modified:
subversion/trunk/subversion/svnbrowse/svnbrowse.c
Modified: subversion/trunk/subversion/svnbrowse/svnbrowse.c
==============================================================================
--- subversion/trunk/subversion/svnbrowse/svnbrowse.c Wed Apr 1 20:48:06
2026 (r1932720)
+++ subversion/trunk/subversion/svnbrowse/svnbrowse.c Wed Apr 1 22:21:41
2026 (r1932721)
@@ -162,22 +162,34 @@ model_create(svn_browse__model_t **model
return SVN_NO_ERROR;
}
+typedef struct svn_browse__view_t {
+ /* TODO: store information about terminal screen (a WINDOW* in curses world)
*/
+ svn_browse__model_t *model;
+} svn_browse__view_t;
+
+static svn_browse__view_t *
+view_make(svn_browse__model_t *model, apr_pool_t *result_pool)
+{
+ svn_browse__view_t *view = apr_pcalloc(result_pool, sizeof(*view));
+ view->model = model;
+ return view;
+}
+
static void
-ui_draw(svn_browse__model_t *ctx, apr_pool_t *pool)
+view_draw(svn_browse__view_t *view, apr_pool_t *pool)
{
int i;
- const char *abspath = svn_path_url_add_component2(ctx->root,
- ctx->current->relpath,
- pool);
+ const char *abspath = svn_path_url_add_component2(
+ view->model->root, view->model->current->relpath, pool);
mvprintw(0, 4, "Browsing: %s", abspath);
- for (i = 0; i < ctx->current->list->nelts; i++)
+ for (i = 0; i < view->model->current->list->nelts; i++)
{
- svn_browse__item_t *item = APR_ARRAY_IDX(ctx->current->list, i,
+ svn_browse__item_t *item = APR_ARRAY_IDX(view->model->current->list, i,
svn_browse__item_t *);
- if (i == ctx->current->selection)
+ if (i == view->model->current->selection)
standout();
if (i == 0)
@@ -194,7 +206,7 @@ ui_draw(svn_browse__model_t *ctx, apr_po
item->dirent->created_rev,
item->dirent->last_author);
- if (i == ctx->current->selection)
+ if (i == view->model->current->selection)
standend();
}
}
@@ -205,6 +217,7 @@ sub_main(int *code, int argc, char *argv
const char *url;
svn_opt_revision_t revision;
svn_browse__model_t *ctx;
+ svn_browse__view_t *view;
apr_pool_t *iterpool;
if (argc != 2)
@@ -224,6 +237,8 @@ sub_main(int *code, int argc, char *argv
keypad(stdscr, TRUE);
nonl();
+ view = view_make(ctx, pool);
+
iterpool = svn_pool_create(pool);
while (TRUE)
@@ -234,7 +249,7 @@ sub_main(int *code, int argc, char *argv
const char *new_url;
clear();
- ui_draw(ctx, iterpool);
+ view_draw(view, iterpool);
refresh();
/* getch() reads the next character/key with the following additional