Go Down

Topic: Phi_prompt new release teaser - scrolling list items (Read 3108 times) previous topic - next topic

liudr

May 11, 2011, 02:42 am Last Edit: May 21, 2011, 05:36 am by liudr Reason: 1
UPDATE:
This is a new render option for list. The highlighted list item is always centered while the list scrolls up and down at button push:
http://www.youtube.com/watch?v=QjmF9RN4qjg

UPDATE:
Here is another teaser showing off scrolling text areas using phi_prompt library that I will release soon. The text area can be any size and be displayed anywhere (no clipping on the display edge!). You also have the option to sacrifice a whole column of characters to display a DOS-looking scroll bar, tailored to the size of your text area and text length! Here you go mowcius!

The top line is just a fixed text output so it doesn't scroll.

http://www.youtube.com/watch?v=-fbKJDLdwPs

ORIGINAL POST
I'm getting phi_prompt ready for a new release with the below additions:


  •    Support 20X4 character screen with more flexible "2X2? list mode so you can list M columns by N rows with X  characters per row, all M, N, and X are your choice (Done)

  •    List your "2X2? list anywhere on a larger screen instead of the basic 16X2 screen (Done)

  •    Easy to call "YES/NO" dialog.(Done)

  •    Easy to display "YES/NO", "HIGH/LOW" options for numerical inputs so you don't have to construct a list and do it the list way.(Planning)

  •    Add scrolling texts that scrolls to fit in smaller space (Done)

  •    Add floating point number input (Done)

  •    Add event function so each time the user changes a number, a function is called to update operations (planning)

  •    Add dialog functions to make a dialog. This function creates a complete dialog with various controls and the user uses left and right keys to navigate among the controls and change their values. It is going to look like a dialog on your computer. You make some choices and push yes. (planning)

  •    Add multi-line text display. (Done)



The new release will give developers freedom to display lists in m columns by n rows, and customize lists in other rendering modes. It also features auto-scrolling list items for items too long to fit in. See the teaser video below.

http://www.youtube.com/watch?v=E_3fv4maspk


Nikka93


Grendel

Cool stuff!  #subscribed

Learning this stuff has made me REALLY respect the guys who develop stuff like smartphones.  I used to brag on how much I knew electronics... I dont do that anymore.  Nothing like being a noob with 20 years experience.  8)

liudr


italian food is the best one  :smiley-mr-green:


I don't know all those shapes but they're all good with the right sauce and meat/shrimp.  :)

I also tried to auto scroll all items that are too long but that started to look silly and distracting so I am only scrolling the highlighted item. No time for pasta today. It's going to be wraps.

liudr


Cool stuff!  #subscribed

Learning this stuff has made me REALLY respect the guys who develop stuff like smartphones.  I used to brag on how much I knew electronics... I dont do that anymore.  Nothing like being a noob with 20 years experience.  8)


Thanks. I will make an effort to expand these features to GLCD this summer. character LCDs are good for basic display but you can't do too much interaction as there's no space. I will also see if I can incorporate a number pad as optional input beside the one I'm using.

liudr

New features are added: scrolling text area and yes/no dialog. See OP for the video or here:

http://www.youtube.com/watch?v=-fbKJDLdwPs


liudr


Neat! :D


Thanks mowcius. Once I am happy enough to release what I wrote recently, I can move on to port the functions to GLCD. This will be really interesting and even more useful.

mowcius

I'd be interested to have a look at what you wrote for the scrolling text function - got a couple of ideas that I'd like to try with the scroll bar.

raron

Nice! Also nice touch with the scrollbar there! :)

liudr


I'd be interested to have a look at what you wrote for the scrolling text function - got a couple of ideas that I'd like to try with the scroll bar.

mowcius, here they are:

1. The function that renders "long message", so displaying (including scroll bar) is done here:

Code: [Select]

void long_msg_lcd(phi_prompt_struct* para)
{
  byte columns=para->step.i/100, rows=para->step.i%100, ch;
  if (para->low.i>=strlen(para->ptr.msg)) ch=0;
  else ch=para->ptr.msg[para->low.i];
  for (byte i=0;i<rows;i++)
  {
    lcd->setCursor(para->col,para->row+i);
    for (byte j=0;j<columns;j++)
    {
      if (ch==0) lcd->write(' ');
      else
      {
        lcd->write(ch);
        ch=para->ptr.msg[para->low.i+i*columns+j+1];
      }
    }
  }
  if (para->option==1)
  {
    byte location=int((((float)para->low.i)/strlen(para->ptr.msg)*(rows*2-2)));
    for (byte i=0;i<rows;i++)
    {
      lcd->setCursor(para->col+columns,para->row+i);
      if (i==0)
      {
        if (location==0) lcd->write(0);
        else lcd->write(1);
      }
     
      else if (i==rows-1)
      {
        if (location==(rows*2-2-1)) lcd->write(5);
        else lcd->write(4);
      }

      else if ((location+1)/2==i)
      {
        if ((location-1)/2*2==location-1) lcd->write(2);
        else lcd->write(3);
      }
      else lcd->write(' ');
     
    }
  }
}



2. This function interacts with the user (via keypad call wait_on_escape and lcd via the long_message function) so scrolling is done here:
The reason I called this function text area is to correspond to Java's text area to display text.
Code: [Select]

int text_area(phi_prompt_struct *para)
{
  byte columns=para->step.i/100, rows=para->step.i%100, ch;
  long_msg_lcd(para);
  while(true)
  {
    byte temp1=wait_on_escape(50);
    switch (temp1)
    {
      case 1:
      if (para->low.i+columns<para->high.i)
      {
        para->low.i+=columns;
        long_msg_lcd(para);
      }
      break;
     
      case 2:
      if (para->low.i-columns>=0)
      {
        para->low.i-=columns;
        long_msg_lcd(para);
      }
      break;
      case 3: // Left is pressed
      return(-3);
      break;
     
      case 4: // Right is pressed
      return(-4);
      break;
     
      case 5: // Enter is pressed
      return(1);
      break;
     
      case 6: // Escape is pressed
      return (-1);
      break;
     
      default:
      break;
    }
  }
}



3. Here's the struct in case you need it to understand the code:
It tells you what each field holds besides comments inline with the code.
Code: [Select]

union buffer_pointer
{
int *i_buffer;
float * f_buffer;
char ** list;
char* msg;
};

union four_bytes
{
int i;
long l;
float f;
byte b;
char c;
};

struct phi_prompt_struct
{
  buffer_pointer ptr;
  four_bytes low; // Lower limit for text panel (.c), integers (.i) and floats (.f) and default item for list (.i)
  four_bytes high; // Upper limit for text panel (.c), integers (.i) and floats (.f) and last item for list (.i)
  four_bytes step;// Step size for integers (.i) and integer/decimal for floats (.i), such as 302 means 3 digits before decimal and 2 digits after.
  byte col; // Which column to display input
  byte row; // Which row to display input
  byte width; // Maximal number of character on integers, floats, a list item, and total allowed input characters for text panel
  int option; // What display options to choose
//  LiquidCrystal *lcd; // Which display to use. Removed in second release
//  phi_buttons **btns; // Which series of buttons to use. Removed in second release
  void (*update_function)(phi_prompt_struct *); // This is not being used in this version but reserved for future releases.
}; //22 bytes



mowcius

Oh I am still here by the way - just haven't had chance to test this yet. It's on my list :)

liudr


Oh I am still here by the way - just haven't had chance to test this yet. It's on my list :)


I'll post the new library that includes all these and example code. Everything I planned for will either get released or wait for the next release. I feel like back in the early 90's programming in DOS except I am no longer using ASM, which is good for my age.

mowcius

Cool - I'll have a play then. I fancy a scrolling menu too :) I've got one half coded here somewhere.

liudr


Cool - I'll have a play then. I fancy a scrolling menu too :) I've got one half coded here somewhere.


Do you mean a menu with highlighted item always in the middle and a key press scrolls all contents up or down one line at a time, instead of the following?

http://www.youtube.com/watch?v=VqtkNgH4OxA

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy