Bu yıl (2017) Google Summer of Code’a, LibreOffice üzerinde “Revamp the Customize Dialog” projesiyle kabul edildim ve yaz boyu LibreOffice’in özelleştirme penceresini daha kullanıcı dostu hale getirmek, modernleştirmek ve hatalarını gidermek için çalıştım. Sürecin sonunda Google’ın zorunlu tuttuğu bir bitirme raporu hazırlayıp sundum ve programı başarıyla tamamlamış oldum. :)

Başlarken

LibreOffice 5 Logo

İlk öneri, LibreOffice’in Tools > Customization menüsünden ulaşılabilen Özelleştirme Penceresinin birçok özelliğe sahip olduğu fakat bazı özelliklerin eksik olması yanında kullanıcı deneyiminin iyileştirilerek kullanım sürecinin sezgisel bir hale getirilmesine ve eskiden kalan bazı hataların giderilmesine ihtiyaç olduğu yönündeydi. İşin başlangıç noktası olarak kabul edebileceğimiz taslağı şurada bulabilirsiniz: https://user-prompt.com/how-to-make-libreoffice-customization-usable/

Başvurum bir GSoC projesi olarak kabul edildikten sonra, bu konu farklı gruplardan birçok kişinin ilgisini çekti ve uzun tartışmalar ve fikir alış-verişleri sonunda, daha iyi erişebilirlik ve faresiz gezinme imkanı sunduğu için yeni bir tasarımda karar kıldık (varyant 2). Temel amaçlardan bazıları:

  • Modern ve sezgisel bir tasarım
  • Erişebilirlik
  • Kullanıcı dostu olma
  • İşlevler arasında arama yapabilme
  • İyi bilinen iki bölmeli tasarımla güzel bir iş akışı sağlamak
  • Altta yatan kodun hatalarının giderilmesi ve iyileştirilmesi

Çalışmalar

İlk vuruş

Tasarım kararı kesinleştikten sonra, tasarım ekibi tarafından en önemli özellik olarak kabul edilen arama özelliğini geliştirmekle işe başladım. Tamamladıktan sonra, bu özelliğin doğrudan master dalına işlenmesine karar verdik. Bununla ilgili girdiyi LibreOffice 6.0 Sürüm Notlarında da bulabilirsiniz.

Klavye Özelleştirme sekmesinin işlevler bölmesindeki yeni arama kutucuğu

Ayırma

Özelleştirme iletişim penceresinin çoğu 5 bin satırdan fazla uzunluktaki tek bir dosyada (cfg.cxx) kodlanmıştı. Bu durum, hata ayıklamayı ve işlem akışını anlamayı oldukça güçleştiriyordu. O yüzden bu dosyayı alt sınıflar için farklı dosyalar (SvxToolbarConfigPage ve SvxMenuConfigPage gibi) olacak şekilde parçaladım ve yeniden düzenledim. Ayrıca ilgili sınıfların ortak kullandığı fonksiyonları içeren bir yardımcı sınıf (SvxConfigPageHelper) oluşturdum.

Yeni görünüm

Üzerinde çalışması daha rahat bir kodlama ortamı sağladıktan sonra, kullanıcı arayüzünü yeni tasarıma dönüştürmeye başladım. Bu süreçte:

  • Eski tasarıma ait ögeler hem .ui hem de .cxx/.hxx dosyalarından çıkarıldı,
  • Yeni tasarım ögeleri .ui dosyasına eklendi,
  • Menü, Araç Çubuğu ve İçerik Menüsü sekmeleri yeni tasarıma benzer hale getirildi

Acil durum

Tam bu işlerin ortasında acilen apandisit ameliyatı olmam gerekti ve bir süre hastanede, bir süre de evde dinlenmek zorunda kaldım. Haliyle bu arada proje üzerinde çalışamadım. Tam “Bu iş bitti artık” deyip vazgeçmişken mentorum, içi dışı güzel insan Katarina (bubli) Behrens yurt dışından telefonla arayıp hem geçmiş olsun dileklerini iletti hem de moral verdi. Kendisinin de desteğiyle kısa sürede tekrar işler rayına oturdu.

Gerisi çorap söküğü

Mentorlar tarafından gözden geçirilip git deposuna işlenen her yamayla/commitle birlikte özgüvenim artmaya başladı ve her yamada bir öncekinden daha iyi iş çıkarmak için uğraştım. Göz açıp kapayıncaya kadar, hazırladığım 19 yama, LibreOffice resmi kod (git) deposunda bu proje için oluşturulan dala işlendi ve sonuçta neredeyse tamamen yenilenmiş Özelleştirme penceresi ortaya çıktı.

Menü sekmesi: Yeni Özelleştirme iletişim penceresinin Menü sekmesi

Araç çubuğu sekmesi: Yeni Özelleştirme iletişim penceresinin Araç Çubuğu sekmesi

İçerik menüsü sekmesi: Yeni Özelleştirme iletişim penceresinin İçerik Menüsü sekmesi

Neler yapıldı? Yapılacak ne kaldı?

Yapılanlar:

  • Menü, Araç Çubuğu ve İçerik Menüsü sekmeleri yeni tasarıma uygun hale getirildi
  • Gerçek zamanlı arama özelliği geliştirildi ve ilk öneriye dahil olmayan Olaylar sekmesi dışındaki tüm sekmelere eklendi
  • Neredeyse tüm görsel gereçlerin kodlanması tamamlandı ve düzgün şekilde işlev görür hale geldi

Yeni Özelleştirme İletişim Penceresini iş başında görebilirsiniz:

LibreOffice’in Yenilenmiş Özelleştirme İletişim Penceresi - GSoC 2017

Ayrıca derlenmiş paketleri indirip kurarak kendiniz de deneyebilirsiniz (Linux_x86-64_deb): https://drive.google.com/open?id=0B-JvlLHm1-kKcW5xbmR5Q1l3bDg

Yapılacaklar:

  • Kullanıcı arayüzü ögelerine biçemler ve makrolar atayabilme olanağı
  • Tasarımda önerilen İşlev ve dişli düğmelerinin geliştirilmesi
  • Klavye ve Olaylar sekmelerinin yeni tasarıma dönüştürülmesi
  • Mevcut ve gelecekte ortaya çıkacak hataların giderilmesi

GSoC kapsamındaki yamalar

  1. Implement search feature in the Kayboard tab
  2. Add RemoveEntry method to SvTreeListBox
  3. Use SvTreeListBox’s own method: RemoveEntry
  4. Separate SvxMenuConfigPage from cfg.cxx
  5. Separate SvxToolbarConfigPage from cfg.cxx
  6. Cleanup duplicate functions in cfg.cxx
  7. Add new helper class to cui for SvxConfigPage
  8. Convert UI of Customize Dialog to the new design
  9. Add custom widget class: CommandCategoryListBox
  10. Remove useless if check
  11. Initialize and update Function list box properly
  12. Initialize and update command categories and functions for the Toolbar tab
  13. Implement “Add” button in the Customize dialog
  14. Implement “Remove” button in the Customize dialog
  15. Implement Search/Filter feature in the Customize dialog
  16. Implement “Insert” button in the Customize dialog
  17. Add some exception messages to the removeSettings method
  18. Implement “Reset” button in the Customize dialog
  19. Make toolbar/menu addition/removal functional again in the Customize dialog
  20. Disable the individual reset button for the menubar menus
  21. Make the Modify button functional in the Customize dialog

Bu yamaların tamamı denetimden geçerek ilgili alt dala işlendi ve ana dala (master) da aktarıldı.

Ayrıca LibreOffice’e yaptığım tüm kod katkılarını şurada görebilirsiniz: https://bit.ly/2ktej2r

Proje bilgi sayfası: https://summerofcode.withgoogle.com/projects/#6712596873871360