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

Reply via email to