Hello all,

Follows an idea of elementary widget and the proposed use cases. It is
very similar to elm_pager, but adds more meat so it can be used easily
for walk through wizards and configuration dialogs, avoiding messy
"all-in-one" dialogs that we often create. This will be very useful
for mobile systems such as phones, but could be used for set-top boxes
and even desktop it would make more sense.

I have no time to implement it now, and I was discussing it with
people at #edevelop... so if someone find time to do it, feel free to
help :-)


Use cases:

== Contacts ==

page #0:
    .---------------------------.
    |[Close]    Contacts   [New]|
    }---------------------------{
    | name1                     |
    | name2                     |
    | name3                     |
    `---------------------------'

     Notes:
       1. "close" is a custom button with
          elm_walkthrough_page_custom_previous_object_set()
       2. "new" is also a custom button.


page #1:
    .---------------------------.
    |[Cancel] New Contact [Save]|
    }---------------------------{
    | First: [                 ]|
    |  Last: [                 ]|
    | ...                       |
    `---------------------------'

     Notes:
       1. "Cancel" and "Save" are custom buttons,
          both go back to page #0, but one adds the entry
          and the other does not.

page #2:
    .---------------------------.
    |[Back]      Info     [Edit]|
    }---------------------------{
    | .---.                     |
    | |\o/| Some Person Bla     |
    | | # | <<nickname>>        |
    | `---'                     |
    | Mobile: +55 12 1234-5678  |
    |   Home: +55 12 1234-5679  |
    | ...                       |
    `---------------------------'

     Notes:
       1. "Edit" is a custom buttons.


page #3:
    .---------------------------.
    |[Cancel]  Edit Info  [Save]|
    }---------------------------{
    | First: [                 ]|
    |  Last: [                 ]|
    | ...                       |
    `---------------------------'

     Notes:
       1. "Cancel" and "Save" are custom buttons,
          both go back to page #0, but one saves the
          entry and the other does not.




== e17 keybinding dialog ==

Current (a mess which I dislike):

    .------------------------------.
    | [key bindings]  [action]     |
    | | key1       |  | act1 |     |
    | | key2       |  | act2 |     |
    | [add][del]      [act params] |
    | [mod][del all]               |
    | [restore]                    |
    | [ok][apply][close]           |
    `------------------------------'

Proposed walkthrough:

page #0:
    .------------------------------.
    |[Close]      Mode             |
    }------------------------------{
    | [ Add key binding ]          |
    | [ Modify binding by key ]    |
    | [ Modify binding by action ] |
    | [ Delete key binding ]       |
    `------------------------------'

     Notes:
       1. "close" is a custom button with
          elm_walkthrough_page_custom_previous_object_set()
       2. no next action in this dialog. It will
          go to page #1, #3, #5 or #7 based on button that
          is choosen.


page #1:
    .------------------------------.
    |[Back]      Add Key           |
    }------------------------------{
    | Click "add key" and type the |
    | key or "Escape" to cancel.   |
    }------------------------------{
    |          [ add key ]         |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle"
       2. no next action, it is handled automatically after key is
          captured, going to page #2.


page #2:
    .------------------------------.
    |[Back]   Select Action   [Set]|
    }------------------------------{
    | Select the action to be      |
    | associated key key <C-M-1>   |
    }------------------------------{
    | act1                         |
    | act2                         |
    | act3                         |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle", it assumes
          Control-Alt-1 (C-M-1) was choosen from previous
          step.
       2. "set" is a custom next action that finishes the
          walkthrough (or goes back to first)

page #3:
    .------------------------------.
    |[Back]   Select Key     [Next]|
    }------------------------------{
    | Select the key to change the |
    | action                       |
    }------------------------------{
    | key1        act1             |
    | key2        act2             |
    | key3        act3             |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle".
       2. I opted to show action name on right, but it could
          be hidden or shown just for the selected item.

page #4:
    .------------------------------.
    |[Back]  Select Action [Change]|
    }------------------------------{
    | Select new action for key    |
    | <C-M-1>                      |
    }------------------------------{
    | act1                         |
    | act2                         |
    | act3                         |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle", it assumes
          Control-Alt-1 (C-M-1) was choosen from previous
          step.
       2. "change" is a custom next action that finishes the
          walkthrough (or goes back to first)

page #5:
    .------------------------------.
    |[Back]   Select Action  [Next]|
    }------------------------------{
    | Select the action to change  |
    | the key                      |
    }------------------------------{
    | act1        key1             |
    | act2        key2             |
    | act3        key3             |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle".
       2. I opted to show key name on right, but it could
          be hidden or shown just for the selected item.

page #6:
    .------------------------------.
    |[Back]    Select Key  [Change]|
    }------------------------------{
    | Select new key for action    |
    | <Desktop/Flip Desktop Left>  |
    }------------------------------{
    |       [ select key ]         |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle", it assumes
          Control-Alt-1 (C-M-1) was choosen from previous
          step.
       2. "change" is a custom next action that finishes the
          walkthrough (or goes back to first)
       3. Dialog would check if key already exists and in that case
          ask for another key.

page #7:
    .------------------------------.
    |[Back]   Select Key   [Delete]|
    }------------------------------{
    | Select the key to delete the |
    | action                       |
    }------------------------------{
    | key1        act1             |
    | key2        act2             |
    | key3        act3             |
    `------------------------------'

     Notes:
       1. instruction text is "subtitle".
       2. I opted to show action name on right, but it could
          be hidden or shown just for the selected item.



    /* elm_walkthrough:
     *
     * Similar to elm_pager, but provides more helpers such as title
     * and subtitle (with nice transitions as pages change), as well
     * as navigation buttons that can be easily changed.
     *
     * This can be used to streamline some configuration dialogs,
     * presenting things that matter within that context.
     *
     * smart callbacks called:
     *   "page,changed" [int new_idx, int old_idx] (array of int[2])
     */
    Evas_Object *elm_walkthrough_add(Evas_Object *parent)

    Eina_Bool elm_walkthrough_page_go(Evas_Object *o, int idx);
    Eina_Bool elm_walkthrough_page_previous(Evas_Object *o);
    Eina_Bool elm_walkthrough_page_next(Evas_Object *o);

    Elm_Page *elm_walkthrough_page_add(Evas_Object *o, const char
*title, const char *subtitle, Evas_Object *contents);

    /* If page is using standard navigation controls, toggle
     * visibility of objects with Previous and Next actions.  by
     * default:
     *    - if object is first, there is no back.
     *    - if object is last, there is no next.
     *    - else: "<<Back" and "Next>>" are buttons with custom style.
     *
     * Buttons can be disabled or enabled until required fields in
     * pages are set.
     */
    void elm_walkthrough_page_standard_previous_visibile_set(Elm_Page
*page, Eina_Bool visible);
    void elm_walkthrough_page_standard_next_visibile_set(Elm_Page
*page, Eina_Bool visible);
    void elm_walkthrough_page_standard_previous_disabled_set(Elm_Page
*page, Eina_Bool disabled);
    void elm_walkthrough_page_standard_next_disabled_set(Elm_Page
*page, Eina_Bool disabled);


    /* set custom object instead of styled buttons with "<<Back" And "Next>>".
     * These will force object being show, even if setting the nav_previous
     * object of the first object. One may use this for "Cancel" and nav_next
     * of last for "Done" or "Create"...
     *
     * In this scenario you are also responsible for calling desired
     * action.  Either elm_walkthrough_page_go() or something
     * else. One can use this to implement non-sequential walkthroughs
     * (skip some steps based on current page information).
     */
    void elm_walkthrough_page_custom_previous_object_set(Elm_Page
*page, Evas_Object *obj);
    void elm_walkthrough_page_custom_next_object_set(Elm_Page *page,
Evas_Object *obj);


-- 
Gustavo Sverzut Barbieri
http://profusion.mobi embedded systems
--------------------------------------
MSN: [email protected]
Skype: gsbarbieri
Mobile: +55 (19) 9225-2202

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to