Project

General

Profile

Actions

Feature #1149

open

Rewrite UI using pigtk-icontable and friends

Added by Hammel over 1 year ago. Updated 10 days ago.

Status:
In Progress
Priority:
Immediate
Assignee:
Category:
Image display
Target version:
Start date:
31 May 2024
Due date:
% Done:

10%

Estimated time:
Severity:
02 - High

Description

This will allow better movement through the list of videos.

This would probably be best handled like the launcher, with an array of choices on the left and a banner/description on the right. Basically replace the list with the pigtk-icontable. This would prevent requiring a second display area (like a Netflix or Plex choice) while still providing details of the current selection.

This needs to support search option by keyboard - simply typing a name moves to the first match, or doesn't move if no match. The typed name needs to be displayed somewhere, perhaps in a status bar area at the top.


Related issues

Related to VideoFE - Feature #522: Switch UI to something like PlexIn ProgressHammel17 Apr 2016

Actions
Actions #1

Updated by Hammel 12 days ago

  • Description updated (diff)
Actions #2

Updated by Hammel 12 days ago

  • Related to Feature #522: Switch UI to something like Plex added
Actions #3

Updated by Hammel 10 days ago

  • Status changed from New to In Progress
  • % Done changed from 0 to 10

pigtk-icontable doesn't really work. It needs a list of icons in a special structure which doesn't map easily to my GSLists. It could work, maybe, but I'm not sure how yet.

Alternatively, I can use the launcher's mechanism to drawing, which doesn't use a special widget. This is being implemented in a branch for videofe.
Currently I've just written draw_icon(), which needs a dbGetEntry(page,idx). This requires a paging variable to be kept as we move through the list of videos. I could just keep a global offset and then map that to the idx that defines the icon on the display table.

Actions #4

Updated by Hammel 10 days ago

I keep going back to pigtk-icontable. It really should work for this. But it's a complete rewrite of how the db is handled.

How should we use pigtk-icontable for this.
  1. dbLoad() builds array of GtkIconCell entries
    1. The JSON data is stored in entry->data
  2. GSList iconWindow is a sliding window on the larger GSList.
    1. Used to tell GtkIconTable widget what to display.
    2. Initialize to first entry of primary list.
      1. Length must never be less than 1 page of data.
      2. videofe manages display with calls to gtk_icontable_set() with new head for iconWindow.
  3. Initialize: gtk_icontable_set(iconWindow)
  4. videofe manages
    1. Current page
    2. Current row
    3. Current offset
    4. Never use gtk_icontable_page() functions - manage this in videofe directly.
      1. Use _next_cell, _prev_cell, _next_row, _prev_row
      2. Moving out of page with _next_cell resets iconWindow, manually sets display to first col/last row (moves window by 1 row)
      3. Moving out of page with _prev_cell resets iconWindow, manually sets display to last col/last row (moves window by 1 row)
      4. Page request moves to start of next or prev page boundary in iconWindow and activates row 1/col 1 in display.
  5. Movies
    1. cell title is movie title
  6. TV
    1. cell title is episode title
  7. Keyboard navigation
    1. Search
      1. "/" enables search
        1. Text is entered in pigtk-textline below pigtk-icontable.
        2. Navigation doesn't change till search disabled.
        3. ENTER disables search and moves to first match, by row boundary.

This is a start. It's going to take a complete rewrite of db.c, I think, but it will be worth it.

Actions

Also available in: Atom PDF