SlideShare a Scribd company logo
Hands on the New Hildon

     Gran Canaria Desktop Summit (GUADEC @ Paradise)

     Joaquim Rocha
     jrocha@igalia.com
whoami

 ●   GTK+ && Hildon && Python developer

 ●   Igalian since late 2008

 ●   Portuguese since 1985

                                     .. and lots of other interesting things :)



GCDS · Joaquim Rocha · jrocha@igalia.com                                      2
Hildon 2.2



 ●   New finger-friendly widgets

 ●   New UI philosophy
     – Deprecated widgets
     – Porting means “adapting”, not “recompiling”




GCDS · Joaquim Rocha · jrocha@igalia.com   3
Root view / Sub view philosophy

 ●   Applications are stacks of windows

 ●   The root window is the base
      –   E.g.: List of emails

 ●   Actions that break with what the user is doing
     should be done in a sub view
      –   E.g.: Writing an email

GCDS · Joaquim Rocha · jrocha@igalia.com    4
Root view / Sub view philosophy: Example




                   List of emails          Reading email
                    (Root View)             (Sub View)


GCDS · Joaquim Rocha · jrocha@igalia.com               5
Stacks of Windows



 ●   Use HildonStackableWindow

 ●   All you (normally) need to worry about is to
     show the windows, yes, with gtk_widget_show



GCDS · Joaquim Rocha · jrocha@igalia.com   6
Stacks of Windows: Code


rootview = hildon_stackable_window_new ();
...
gtk_widget_show_all (rootview);


subview = hildon_stackable_window_new ();
...
gtk_widget_show_all (subview);



GCDS · Joaquim Rocha · jrocha@igalia.com   7
Root View/Sub View Demo




                                       Stock items




GCDS · Joaquim Rocha · jrocha@igalia.com             8
Root View/Sub View : How can it be done



 ●   Initialize a GtkTreeView using
     hildon_gtk_tree_view_new

 ●   Use it the GTK+ way you're used to
tree_view = hildon_gtk_tree_view_new (HILDON_UI_NORMAL_MODE);




GCDS · Joaquim Rocha · jrocha@igalia.com              9
Tree Views Code: UI Mode

Defines the way the user interacts with the items
in a list

      –   Normal Mode: Tapping on a widget will
          behave as it would normally do, for example,
          triggering an action

      –   Edit Mode: Special mode where a range of
          items can be selected
GCDS · Joaquim Rocha · jrocha@igalia.com     10
Pannable Area
Pannable Area


 ●   A magical finger-friendly scrolling widget

 ●   Use it to display widgets that don't fit in the
     visible area

 ●   It's a container! Just add your contents


GCDS · Joaquim Rocha · jrocha@igalia.com       12
Pannable Area: Demo




                                  Eye of GNOME:

         Desktop properties VS Maemo Properties




GCDS · Joaquim Rocha · jrocha@igalia.com          13
Pannable Area: Code



contents = hildon_pannable_area_new ();

hildon_pannable_area_add_with_viewport (
                                 HILDON_PANNABLE_AREA (contents),
                                 main_contents);




GCDS · Joaquim Rocha · jrocha@igalia.com             14
Application Menu
Application Menu



One level! No more submenus,
subsubsubsubmenus, …

      –   Small number of items
      –   Allows filters


GCDS · Joaquim Rocha · jrocha@igalia.com   16
Application Menu: Filter




               Should NOT change contents but
                 how contents are presented




GCDS · Joaquim Rocha · jrocha@igalia.com   17
Application Menu: Don't stuff it

 ●   How to reduce the number of items
      ●   DRY
      ●   Put only what matters


                                           Eye of GNOME Demo:

                          Desktop menu VS Maemo App. Menu

GCDS · Joaquim Rocha · jrocha@igalia.com             18
Application Menu: Code


menu     = hildon_app_menu_new ();

filter = hildon_gtk_radio_button_new (HILDON_SIZE_FINGER_HEIGHT,
                                                           NULL);

gtk_button_set_label (GTK_BUTTON (filter), "a-Z");

gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (filter), FALSE);

hildon_app_menu_add_filter (HILDON_APP_MENU (menu),
                              GTK_BUTTON (filter));




GCDS · Joaquim Rocha · jrocha@igalia.com              19
Application Menu: Code (cont.)


filter = hildon_gtk_radio_button_new_from_widget (
                                        HILDON_SIZE_FINGER_HEIGHT,
                                 GTK_RADIO_BUTTON (other_filter));

gtk_button_set_label (GTK_BUTTON (filter1), "z-A");
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (filter1), FALSE);

hildon_app_menu_add_filter (HILDON_APP_MENU (menu),
                              GTK_BUTTON (filter));




GCDS · Joaquim Rocha · jrocha@igalia.com              20
Application Menu: Code (cont. 2)



item = hildon_gtk_button_new (HILDON_SIZE_FINGER_HEIGHT);
gtk_button_set_label (GTK_BUTTON (item), "Foo Bar");

hildon_app_menu_append (HILDON_APP_MENU (menu), GTK_BUTTON(item));

...

hildon_window_set_app_menu (HILDON_WINDOW (main_window),
                                 HILDON_APP_MENU (menu));




GCDS · Joaquim Rocha · jrocha@igalia.com             21
Buttons Differences
Buttons Differences

 ●   You have GTK+ buttons and Hildon buttons
 ●   Hildon buttons have a title and a value
 ●   GTK+ buttons are the same, just chubbier




                                           [1]


GCDS · Joaquim Rocha · jrocha@igalia.com         23
GTK+ Button



Hildon provides convenience functions to create
hildonized GTK+ buttons
button = hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT);




GCDS · Joaquim Rocha · jrocha@igalia.com             24
Hildon Button



 ●   Title: E.g. a property's title

 ●   Value: E.g. a property's state

 ●   The arrangement can be vertical or horizontal


GCDS · Joaquim Rocha · jrocha@igalia.com   25
Hildon Button: Code



button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT,
                              HILDON_BUTTON_ARRANGEMENT_VERTICAL,
                                                   "My size is",
                                                   "Finger!");




GCDS · Joaquim Rocha · jrocha@igalia.com             26
Picker Button

 ●   A Hildon button that will show a picker dialog:
      –   Allows the user to choose an item from a
          TouchSelector

 ●   Use it instead a combo box or a set of radio
     buttons



GCDS · Joaquim Rocha · jrocha@igalia.com             27
Picker Button




button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT,
                         HILDON_BUTTON_ARRANGEMENT_VERTICAL);

hildon_button_set_title (HILDON_BUTTON (button),
                            "I think GCDS is:");




GCDS · Joaquim Rocha · jrocha@igalia.com             28
Picker Button: Creating the TouchSelector


selector = hildon_touch_selector_new_text ();


hildon_touch_selector_append_text (
                                HILDON_TOUCH_SELECTOR (selector),
                                                     "Awesome");
hildon_touch_selector_append_text (
                               HILDON_TOUCH_SELECTOR (selector),
                                                     "Great");
...




GCDS · Joaquim Rocha · jrocha@igalia.com             29
Picker Button: Creating the TouchSelector




hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
                              HILDON_TOUCH_SELECTOR (selector));




GCDS · Joaquim Rocha · jrocha@igalia.com             30
...so much
 code it
 makes my
 eyes hurt!



GCDS · Joaquim Rocha · jrocha@igalia.com   31   [2]
Specialized Picker Buttons



Just to make your life easier:

                                HildonDateButton

                               HildonTimeButton


GCDS · Joaquim Rocha · jrocha@igalia.com           32
Date and Time Button: Code



date_button = hildon_date_button_new (HILDON_SIZE_FINGER_HEIGHT,
                             HILDON_BUTTON_ARRANGEMENT_VERTICAL);


time_button = hildon_time_button_new (HILDON_SIZE_FINGER_HEIGHT,
                           HILDON_BUTTON_ARRANGEMENT_HORIZONTAL);




GCDS · Joaquim Rocha · jrocha@igalia.com             33
Checkbutton: Code


Use it like a check box

check_button = hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT);




GCDS · Joaquim Rocha · jrocha@igalia.com             34
Text Input Differences
Text Input Differences


 ●   HildonEntry and HildonTextView allow to set a
     placeholder text

 ●   HildonTextView expands according to its
     contents

 ●   Use placeholders as if they were tooltips

GCDS · Joaquim Rocha · jrocha@igalia.com   36
Text Input Differences: Code



   name = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT);
   hildon_entry_set_placeholder (HILDON_ENTRY (name),
                                 "Your full name");


   info = hildon_text_view_new ();
   hildon_text_view_set_placeholder (HILDON_TEXT_VIEW (info),
                                     "Some info about you");




GCDS · Joaquim Rocha · jrocha@igalia.com              37
Where to go from here?


 ●   Hildon Tutorial:
      ●   http://maemo.org/api_refs/5.0/beta/tutorial/html/
 ●   Hildon HIG:
      ●   http://maemo.org/api_refs/5.0/beta/hig/html/
 ●   Hildon API reference:
      ●   http://maemo.org/api_refs/5.0/beta/hildon/


GCDS · Joaquim Rocha · jrocha@igalia.com                      38
And That's All Folks




                                   Questions?



GCDS · Joaquim Rocha · jrocha@igalia.com        39
Thank you!


[1] http://www.flickr.com/photos/lilcrabbygal/484635049/
[2] http://farm4.static.flickr.com/3061/2924390962_61dc14d42c.jpg?v=0

More Related Content

Similar to Hands On The New Hildon

Hildon 2.2: the Hildon toolkit for Fremantle
Hildon 2.2: the Hildon toolkit for FremantleHildon 2.2: the Hildon toolkit for Fremantle
Hildon 2.2: the Hildon toolkit for FremantleAlberto Garcia
 
DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...
DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...
DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...FIDE Master Tihomir Dovramadjiev PhD
 
DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...
DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...
DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...FIDE Master Tihomir Dovramadjiev PhD
 
Graphics Programming OpenGL & GLUT in Code::Blocks
Graphics Programming OpenGL & GLUT in Code::BlocksGraphics Programming OpenGL & GLUT in Code::Blocks
Graphics Programming OpenGL & GLUT in Code::BlocksBudditha Hettige
 
Multitouching your apps
Multitouching your appsMultitouching your apps
Multitouching your appsFSCONS
 

Similar to Hands On The New Hildon (7)

Hildon 2.2: the Hildon toolkit for Fremantle
Hildon 2.2: the Hildon toolkit for FremantleHildon 2.2: the Hildon toolkit for Fremantle
Hildon 2.2: the Hildon toolkit for Fremantle
 
201801 SER332 Lecture 04
201801 SER332 Lecture 04201801 SER332 Lecture 04
201801 SER332 Lecture 04
 
DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...
DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...
DrTAD Blender Tutorial Animation Basics - Transforming 3D geometry with shape...
 
DrTAD Blender Tutorial Animation Basics - Keys - Movement
DrTAD Blender Tutorial Animation Basics - Keys - MovementDrTAD Blender Tutorial Animation Basics - Keys - Movement
DrTAD Blender Tutorial Animation Basics - Keys - Movement
 
DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...
DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...
DrTAD Blender Tutorial Animation Basics - Morphing 2 objects with Shrinkwrap ...
 
Graphics Programming OpenGL & GLUT in Code::Blocks
Graphics Programming OpenGL & GLUT in Code::BlocksGraphics Programming OpenGL & GLUT in Code::Blocks
Graphics Programming OpenGL & GLUT in Code::Blocks
 
Multitouching your apps
Multitouching your appsMultitouching your apps
Multitouching your apps
 

Recently uploaded

Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfFIDO Alliance
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomCzechDreamin
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2DianaGray10
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...CzechDreamin
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxDavid Michel
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfFIDO Alliance
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfFIDO Alliance
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxAbida Shariff
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka DoktorováCzechDreamin
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...CzechDreamin
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlPeter Udo Diehl
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?Mark Billinghurst
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyJohn Staveley
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityScyllaDB
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIES VE
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessUXDXConf
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaCzechDreamin
 

Recently uploaded (20)

Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 

Hands On The New Hildon

  • 1. Hands on the New Hildon Gran Canaria Desktop Summit (GUADEC @ Paradise) Joaquim Rocha jrocha@igalia.com
  • 2. whoami ● GTK+ && Hildon && Python developer ● Igalian since late 2008 ● Portuguese since 1985 .. and lots of other interesting things :) GCDS · Joaquim Rocha · jrocha@igalia.com 2
  • 3. Hildon 2.2 ● New finger-friendly widgets ● New UI philosophy – Deprecated widgets – Porting means “adapting”, not “recompiling” GCDS · Joaquim Rocha · jrocha@igalia.com 3
  • 4. Root view / Sub view philosophy ● Applications are stacks of windows ● The root window is the base – E.g.: List of emails ● Actions that break with what the user is doing should be done in a sub view – E.g.: Writing an email GCDS · Joaquim Rocha · jrocha@igalia.com 4
  • 5. Root view / Sub view philosophy: Example List of emails Reading email (Root View) (Sub View) GCDS · Joaquim Rocha · jrocha@igalia.com 5
  • 6. Stacks of Windows ● Use HildonStackableWindow ● All you (normally) need to worry about is to show the windows, yes, with gtk_widget_show GCDS · Joaquim Rocha · jrocha@igalia.com 6
  • 7. Stacks of Windows: Code rootview = hildon_stackable_window_new (); ... gtk_widget_show_all (rootview); subview = hildon_stackable_window_new (); ... gtk_widget_show_all (subview); GCDS · Joaquim Rocha · jrocha@igalia.com 7
  • 8. Root View/Sub View Demo Stock items GCDS · Joaquim Rocha · jrocha@igalia.com 8
  • 9. Root View/Sub View : How can it be done ● Initialize a GtkTreeView using hildon_gtk_tree_view_new ● Use it the GTK+ way you're used to tree_view = hildon_gtk_tree_view_new (HILDON_UI_NORMAL_MODE); GCDS · Joaquim Rocha · jrocha@igalia.com 9
  • 10. Tree Views Code: UI Mode Defines the way the user interacts with the items in a list – Normal Mode: Tapping on a widget will behave as it would normally do, for example, triggering an action – Edit Mode: Special mode where a range of items can be selected GCDS · Joaquim Rocha · jrocha@igalia.com 10
  • 12. Pannable Area ● A magical finger-friendly scrolling widget ● Use it to display widgets that don't fit in the visible area ● It's a container! Just add your contents GCDS · Joaquim Rocha · jrocha@igalia.com 12
  • 13. Pannable Area: Demo Eye of GNOME: Desktop properties VS Maemo Properties GCDS · Joaquim Rocha · jrocha@igalia.com 13
  • 14. Pannable Area: Code contents = hildon_pannable_area_new (); hildon_pannable_area_add_with_viewport ( HILDON_PANNABLE_AREA (contents), main_contents); GCDS · Joaquim Rocha · jrocha@igalia.com 14
  • 16. Application Menu One level! No more submenus, subsubsubsubmenus, … – Small number of items – Allows filters GCDS · Joaquim Rocha · jrocha@igalia.com 16
  • 17. Application Menu: Filter Should NOT change contents but how contents are presented GCDS · Joaquim Rocha · jrocha@igalia.com 17
  • 18. Application Menu: Don't stuff it ● How to reduce the number of items ● DRY ● Put only what matters Eye of GNOME Demo: Desktop menu VS Maemo App. Menu GCDS · Joaquim Rocha · jrocha@igalia.com 18
  • 19. Application Menu: Code menu = hildon_app_menu_new (); filter = hildon_gtk_radio_button_new (HILDON_SIZE_FINGER_HEIGHT, NULL); gtk_button_set_label (GTK_BUTTON (filter), "a-Z"); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (filter), FALSE); hildon_app_menu_add_filter (HILDON_APP_MENU (menu), GTK_BUTTON (filter)); GCDS · Joaquim Rocha · jrocha@igalia.com 19
  • 20. Application Menu: Code (cont.) filter = hildon_gtk_radio_button_new_from_widget ( HILDON_SIZE_FINGER_HEIGHT, GTK_RADIO_BUTTON (other_filter)); gtk_button_set_label (GTK_BUTTON (filter1), "z-A"); gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (filter1), FALSE); hildon_app_menu_add_filter (HILDON_APP_MENU (menu), GTK_BUTTON (filter)); GCDS · Joaquim Rocha · jrocha@igalia.com 20
  • 21. Application Menu: Code (cont. 2) item = hildon_gtk_button_new (HILDON_SIZE_FINGER_HEIGHT); gtk_button_set_label (GTK_BUTTON (item), "Foo Bar"); hildon_app_menu_append (HILDON_APP_MENU (menu), GTK_BUTTON(item)); ... hildon_window_set_app_menu (HILDON_WINDOW (main_window), HILDON_APP_MENU (menu)); GCDS · Joaquim Rocha · jrocha@igalia.com 21
  • 23. Buttons Differences ● You have GTK+ buttons and Hildon buttons ● Hildon buttons have a title and a value ● GTK+ buttons are the same, just chubbier [1] GCDS · Joaquim Rocha · jrocha@igalia.com 23
  • 24. GTK+ Button Hildon provides convenience functions to create hildonized GTK+ buttons button = hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT); GCDS · Joaquim Rocha · jrocha@igalia.com 24
  • 25. Hildon Button ● Title: E.g. a property's title ● Value: E.g. a property's state ● The arrangement can be vertical or horizontal GCDS · Joaquim Rocha · jrocha@igalia.com 25
  • 26. Hildon Button: Code button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL, "My size is", "Finger!"); GCDS · Joaquim Rocha · jrocha@igalia.com 26
  • 27. Picker Button ● A Hildon button that will show a picker dialog: – Allows the user to choose an item from a TouchSelector ● Use it instead a combo box or a set of radio buttons GCDS · Joaquim Rocha · jrocha@igalia.com 27
  • 28. Picker Button button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL); hildon_button_set_title (HILDON_BUTTON (button), "I think GCDS is:"); GCDS · Joaquim Rocha · jrocha@igalia.com 28
  • 29. Picker Button: Creating the TouchSelector selector = hildon_touch_selector_new_text (); hildon_touch_selector_append_text ( HILDON_TOUCH_SELECTOR (selector), "Awesome"); hildon_touch_selector_append_text ( HILDON_TOUCH_SELECTOR (selector), "Great"); ... GCDS · Joaquim Rocha · jrocha@igalia.com 29
  • 30. Picker Button: Creating the TouchSelector hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button), HILDON_TOUCH_SELECTOR (selector)); GCDS · Joaquim Rocha · jrocha@igalia.com 30
  • 31. ...so much code it makes my eyes hurt! GCDS · Joaquim Rocha · jrocha@igalia.com 31 [2]
  • 32. Specialized Picker Buttons Just to make your life easier: HildonDateButton HildonTimeButton GCDS · Joaquim Rocha · jrocha@igalia.com 32
  • 33. Date and Time Button: Code date_button = hildon_date_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_VERTICAL); time_button = hildon_time_button_new (HILDON_SIZE_FINGER_HEIGHT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL); GCDS · Joaquim Rocha · jrocha@igalia.com 33
  • 34. Checkbutton: Code Use it like a check box check_button = hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT); GCDS · Joaquim Rocha · jrocha@igalia.com 34
  • 36. Text Input Differences ● HildonEntry and HildonTextView allow to set a placeholder text ● HildonTextView expands according to its contents ● Use placeholders as if they were tooltips GCDS · Joaquim Rocha · jrocha@igalia.com 36
  • 37. Text Input Differences: Code name = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT); hildon_entry_set_placeholder (HILDON_ENTRY (name), "Your full name"); info = hildon_text_view_new (); hildon_text_view_set_placeholder (HILDON_TEXT_VIEW (info), "Some info about you"); GCDS · Joaquim Rocha · jrocha@igalia.com 37
  • 38. Where to go from here? ● Hildon Tutorial: ● http://maemo.org/api_refs/5.0/beta/tutorial/html/ ● Hildon HIG: ● http://maemo.org/api_refs/5.0/beta/hig/html/ ● Hildon API reference: ● http://maemo.org/api_refs/5.0/beta/hildon/ GCDS · Joaquim Rocha · jrocha@igalia.com 38
  • 39. And That's All Folks Questions? GCDS · Joaquim Rocha · jrocha@igalia.com 39
  • 40. Thank you! [1] http://www.flickr.com/photos/lilcrabbygal/484635049/ [2] http://farm4.static.flickr.com/3061/2924390962_61dc14d42c.jpg?v=0