https://community.kde.org/api.php?action=feedcontributions&user=Pandit&feedformat=atomKDE Community Wiki - User contributions [en]2024-03-28T15:50:49ZUser contributionsMediaWiki 1.40.2https://community.kde.org/index.php?title=GSoC/2012/StatusReports&diff=22825GSoC/2012/StatusReports2012-07-18T08:01:51Z<p>Pandit: </p>
<hr />
<div>Status Report:GSoC and SoK 2012<br />
<br />
= GSoC =<br />
<br />
== Puneet Goyal ==<br />
<br />
'''Project Name:''' Enhancement to peer-to-peer DBus for Telepathy DBus Tubes<br />
<br />
'''A _Brief_ Description''' Telepathy is a modular framework for real-time communications that handles voice, video, text, file transfer, and so on. It makes extensive use of the D-Bus messaging bus and a modular design. When an application connects to a peer to peer dbus tube, it must know what exactly to look for. Even When it registers for another object, the other side of the tube must know about it. So the ideas is to create a class that could ease the object to register and unregister on the DBus Tubes, and to provide you with an interface similar to the one as a DBus Server.<br />
<br />
''' Status: ''' <br />
org.freedesktop.DBus.Peer Interface and Adaptor- complete<br />
org.freedesktop.DBus.ObjectManager Interface and Adaptor - complete<br />
Tabbed Kwhiteboard using ObjectManager Interface - Pending<br />
<br />
<br />
''' Screenshot: '''<br />
<br />
''' IRC Nick: ''' puneetgoyal<br />
<br />
''' IRC Channels: ''' #kde-telepathy, #kde-in<br />
<br />
'''Blog: ''' http://blog.puneetgoyal.co.in<br />
<br />
''' This is awesome about GSoC: '''<br />
<br />
''' This is what I learned during GSoC: '''<br />
<br />
== Cyril Oblikov ==<br />
<br />
'''Project Name:''' Asynchronous errors handling during file transfer<br />
<br />
'''A _Brief_ Description''' The goal is to bring powerful, easy to use and suitable for both desktops and touch devices way to handle errors during copying or moving files. Since this project will be finished, errors will no more block copying process. The functionality for kdelibs is already done in last GSoC. You can see my blog posts about it: [http://en.munknex.net/2011/07/gsoc-errors-handling-during-file.html first], [http://en.munknex.net/2011/08/gsoc-results-interaction-dialog.html second]. <br />
<br />
''' Google+: ''' [https://plus.google.com/106405830534079517375 munknex]<br />
<br />
'''Blog: ''' http://munknex.net<br />
<br />
'''Report 1: ''' [http://en.munknex.net/2012/06/new-kde-copy-dialog-first-preview.html New KDE Copy Dialog: First Preview]<br />
<br />
== Rishab Arora ==<br />
<br />
'''Project Name:''' Improving Data Storage, Logs and adding DSO catalogs to KStars <br />
<br />
'''A _Brief_ Description''' My proposal aims at improving the way the data is handled inside KStars. All user data which is currently being fed by multiple text files can be consolidated into a SQLite database which also makes the data more manageable and resolves many issues. This will also let me improve drastically on the ability to create portable logs about sky objects with a detailed interface and storage. However, in cases where reading the text files (comma/space/colon delimited) is necessary, I shall create separate provisions for processing them which is robust, tested and reliable. I shall also target the way the sky objects are stored and referenced and transfer all those objects to another SQLite database to make the data more manageable.<br />
<br />
''' Status: ''' User generated data is now stored in a SQLite database. Built file parsers to handle text file processing where absolutely required.<br />
<br />
''' IRC Nick: ''' spacetime<br />
<br />
''' IRC Channels: ''' #kde-edu #kstars #kde-in<br />
<br />
'''Blog: ''' http://blog.rishab.in/category/kde/<br />
<br />
''' This is awesome about GSoC: '''<br />
<br />
''' This is what I learned during GSoC: '''<br />
<br />
== Shreya Pandit ==<br />
<br />
'''Project Name:''' Introduction of Context Action Based Layout and UI Improvements in Gluon Creator<br />
<br />
'''A _Brief_ Description''' Gluon Creator, as we all know is that wonder pen, that allows a gaming freak to wield his magic with click-and-go! The craze for game development has grown exponentially in terms of popularity in the last few years. For an open source lover, an obvious choice to start with is Gluon Creator. It would be so awesome, if everyone, from a novice to a professional feels elated and at ease while dealing with creator.<br />
<br />
The project caters to this by introducing a new Slideshow feature like the Startup tutorial in Qt creator, that acquaints the user with all aspects of the application. It also aims at introducing a Game Distribution Wizard, that will reform the way users can share and enjoy games! Finally, I will reform many parts of Gluon Creator's current UI layout,making it more context based,so that it is more informative and usable :)<br />
<br />
''' Status: ''' The slideshow has been completed. The welcome screen has now been modified to show all new options, and the old page based layout is now gone. Now I am working on the context based layout feature, that tracks current focus of Creator and applies all actions (cut/copy/paste/save and the like) correctly to whatever is in user's attention.<br />
<br />
''' IRC Nick: ''' shreyap<br />
<br />
''' IRC Channels: ''' #gluon #kde-in<br />
<br />
'''Blog: ''' www.shreyapandit.com<br />
<br />
== Sinny Kumari ==<br />
<br />
'''Project:''' Advanced features and enhancements for Plasma Media Center <br />
<br />
'''A _Brief_ Description''' Plasma Media Center (PMC) aims to provide users all the media related facilities like Listening Music, Watching Videos, Viewing Pictures, etc. Currently, PMC have all the basic features that a Media Center need to have. My project is to add advanced features in PMC like add to playlist, cover fetching, picture slideshow, tagging, online services like fetching pictures from picasa and many more.<br />
<br />
'''Link (Wiki):'''http://techbase.kde.org/Projects/Plasma/Plasma_Media_Center<br />
<br />
'''Link (Project):''' https://projects.kde.org/projects/playground/multimedia/plasma-mediacenter/repository<br />
<br />
'''Blog:''' http://www.sinny.in/node/21 http://www.sinny.in/node/19<br />
<br />
'''IRC :''' #plasma-mediacenter (ksinny)<br />
<br />
== Yash Shah ==<br />
<br />
'''Project Name:''' Multimodal Accessibility: Using Computer Vision to improve Speech Recognition in Simon <br />
<br />
'''A _Brief_ Description''' A major obstacle for command and control speech recognition systems is to differentiate commands from background noise. Many systems solve this by using physical buttons or certain key phrases to activate/deactivate the speech recognition. This project explores the use of computer vision to determine when to activate / deactivate the sound recognition using visual cues. For a media centre or robot applications, it would make a lot more sense to only activate the recognition when the user is actively looking at the screen/robot and is speaking something. This is strikingly similar to the day-to-day communication between humans! Face recognition can also be employed to provide different speech models for different people. In this way the media centre could adapt to different people in one household. <br />
[http://yashshah.com/blog/google-summer-of-code-2012-kde/ Checkout my blog post about it]<br />
<br />
''' IRC Nick: ''' yashshah<br />
<br />
''' IRC Channels: ''' #kde-accessibility<br />
<br />
'''Blog: ''' [http://yashshah.com/blog/category/kde/ yashshah.com/blog/category/kde/]<br />
<br />
== Vinay S Rao ==<br />
<br />
'''Project Name:''' Gluon: Implementing Saving/Loading Gluon Engine's Game State <br />
<br />
'''A _Brief_ Description''' <br />
My project mainly involves providing effective ways to save the Gluon Engine's Game state. This is a feature that any game developer would like to provide. To implement this first requires serialization of the current scene of the game. My project takes this further, by creating basic scene graphs, to compare two scenes. That way, only the necessary data is saved. Also, variants of basic save/load APIs like checkpoints, level saves etc are to be built. I plan to follow up this GSoC project, with an implementation of a replay feature, that takes scene graphs further by using timestamps of events, and using deterministic prediction to minimize data and processing required.<br />
<br />
''' IRC Nick: ''' vsrao<br />
<br />
== Zhengliang Feng ==<br />
<br />
'''Project Name:''' Integrate Spotify into Amarok<br />
<br />
'''A _Brief_ Description''' This project is to integrate Spotify collection and music streaming into Amarok. So that users can login into Spotify, access their playlists and stream & play music through Amarok.<br />
<br />
''' Status: ''' Implementing basic classes of the Spotify plugin.<br />
<br />
''' Screenshot: '''<br />
<br />
''' IRC Nick: ''' ofan<br />
<br />
''' IRC Channels: ''' #kde-soc, #amarok.dev<br />
<br />
'''Blog: ''' http://ofan.me<br />
<br />
''' This is awesome about GSoC: ''' GSoC offered an great opportunity to practice programming skills and contribute code to open source projects.<br />
<br />
''' This is what I learned during GSoC: ''' Communication is very important.<br />
<br />
== Viranch Mehta ==<br />
<br />
'''Project Name:''' KDE games: Port KBreakout to QtQuick<br />
<br />
''' Brief Description: ''' The project is to port the current game graphics interface to Qt's popular QtQuick.<br />
<br />
''' Status: ''' Porting complete: Open for alpha testing and bug fixing.<br />
<br />
''' IRC Nick: ''' viranch<br />
<br />
''' IRC Channels: ''' #kde-games<br />
<br />
== Jigar Raisinghani ==<br />
<br />
'''Project Name:''' SUPPORT FOR PIVOT TABLES IN CALLIGRA SHEETS<br />
<br />
'''A _Brief_ Description''' Pivot Tables will be a data summarization feature for data visualization application (Calligra Sheets). Users can summarize data (also from ods files) by simply using drag & drop functionality. User has the freedom to choose the interested fields to work with and organize/summarize data as he/she wishes. It gives the user the analytical power by allowing him/her to rotate/transform columns to rows and vice versa and hence called “PIVOT”.<br />
<br />
''' Status: ''' Working on Extraction of data using QAbstractTableModel implementation<br />
<br />
''' Screenshot: ''' In the blog link given below<br />
<br />
''' IRC Nick: ''' jigar<br />
<br />
''' IRC Channels: ''' #kde #calligra<br />
<br />
'''Blog: ''' http://jigarraisinghani.blogspot.in/2012/06/pivot-tablesdesign.html<br />
<br />
== Paul Mendez ==<br />
<br />
'''Project Name:''' Support for edition of shape animations in Calligra Stage<br />
<br />
'''A _Brief_ Description''' At present, Calligra Stage can only show shape animations it loads from a file. It is not possible to add, edit or remove shape animations using Calligra Stage user interface. The goal of this project is to implement an user interface to let users easily add, edit or remove shape animations, manage animation trigger events and change animation parameters.<br />
<br />
''' Status: ''' Support of formula tag for animations is already commited. User interface and data model used to present animation data of each slide in a docker is almost done. Next Step: start adding some edition features.<br />
<br />
''' Screenshot: ''' <br />
<br />
''' IRC Nick: ''' paul_m<br />
<br />
''' IRC Channels: ''' #kde #calligra<br />
<br />
'''Blog: ''' http://paulm-byte.blogspot.com/<br />
<br />
== Avnee Nathani ==<br />
<br />
'''Project Name: ''' Porting KDiamond (game) to Qt Quick<br />
<br />
'''Brief Description: ''' KDiamond is one of the addictive KDE-Games. Whilst the game is very intuitive to play, I feel that the gameplay and the user interactions can be improved to make it more compelling. My proposal is to port KDiamond to Qt Quick - which would allow me to enhance the UI for better gameplay, and with the UI capabilities of QML - give a new feel of the game to the player. I also plan to add some more UI components like - dialogs, particles effect, transitions to the game to to make it more engaging and fun to play!<br />
<br />
'''Status: ''' Implementing UI of the game - adding transitions and animations, integrating game graphics<br />
<br />
'''IRC Nick: ''' AvneeNathani<br />
<br />
'''IRC Channels: ''' #kdegames<br />
<br />
'''Blog: ''' http://avnee.wordpress.com/<br />
<br />
== Abhinav Badola ==<br />
<br />
'''Project Name:''' Video Metadata Support in Exiv2 library<br />
<br />
'''Brief Description''' All recent digital-still camera devices provide video capture. digiKam must be able to manage these files as it do with images. digiKam can already play-back video and register files to the database, but it lack important metadata used to catalogue and sort items (as date, camera name, and all record conditions). To improve video files support, video metadata management done in background needs to be improved. This requires extensive work to be done on Exiv2 shared library, the back-bone of digiKam for photo metadata handling.<br />
<br />
''' Status: ''' Implementing read functionality for the RIFF container format<br />
<br />
''' IRC Nick: ''' badola<br />
<br />
''' IRC Channels: ''' #digikam<br />
<br />
<br />
== Amandeep Singh ==<br />
<br />
'''Project Name: ''' Focus Tracking in KWin / KMagnifier <br />
<br />
'''Brief Description: ''' Currently the KWin zoom plugin and KMagnifier implement focus tracking using Kaccessible which only works for Qt/KDE applications. In this project I will change the existing code in the KWin zoom-plugin and KMagnifier to use DBus to connect with AT-SPI2 and fetch needed information about focused widget. Also I will identify and fix cases where common applications are not sending the focus events and correct accessibility problems in Qt's widgets as they emerge, for example Qt's tree-views.<br />
<br />
'''Status: ''' libkdeaccessibility extended, patches for KMag done, KWin is next and then comes the apps.<br />
<br />
'''IRC Nick: ''' dedman<br />
<br />
'''IRC Channels: ''' #kde-accessibility<br />
<br />
'''Blog: ''' http://amanonit.blogspot.com/search/label/kde<br />
<br />
<br />
== Samikshan Bairagya ==<br />
<br />
'''Project Name:''' Add "What's Interesting..." feature to KStars and make star-hopping user-configurable.<br />
<br />
'''A _Brief_ Description''' Often beginner astronomers open up KStars, look around a bit, but then can't figure out what to do next. This project aims to make KStars more beginner friendly through a new feature called "What's Interesting..." This feature will consist of a QML based easy-to-use user interface that will suggest sky objects currently visible in the sky taking into account the equipment-wise and location-wise limitations/availability of the user. The user's experience level and interest in astronomy will also be taken into account, thus providing the beginner/intermediate user a more personalised experience. Also this project aims to make the star hopping feature of KStars more usable by giving the user the option to specify equipment and location conditions.<br />
<br />
''' Status: ''' Done with designing the model-view architecture to show list of interesting sky-objects. Currently testing different algorithms to decide the visibility of sky-objects. Pending beautification of UI, code documentation. Will start with star hopping then.<br />
<br />
''' Screenshot: ''' Refer to blog link.<br />
<br />
''' IRC Nick: ''' samxan<br />
<br />
''' IRC Channels: ''' #kde-edu , #kstars<br />
<br />
'''Blog: ''' http://samxan.wordpress.com/category/foss/gsoc-2012/<br />
<br />
''' This is awesome about GSoC: ''' Its fun and you learn a lot of stuff and you feel great!<br />
<br />
''' This is what I learned during GSoC: ''' Till now, understood the awesome concept of model-view. Also loved the way C++ models could be exported to QML for use with Qt Quick views. Also it is almost best not to overlook mistakes to get stuff done.<br />
<br />
== Matěj Laitl ==<br />
<br />
'''Project Name:''' Statistics synchronization for pluggable devices and Last.fm in Amarok<br />
<br />
'''A Brief Description:''' Amarok can maintain useful per-track play statistics and meta-data such as: play count, first/last played date, rating and labels; these are tracked for each collection separately. This project will implement statistics synchronization between all collections that support them (local, iPod) in its first part. Second part is to implement synchronization of the statistics from scrobbling services such as Last.fm to Amarok. (other way around already partially works)<br />
<br />
'''Status:''' Latest status can be tracked on [http://strohel.blogspot.com/search/label/gsoc my blog]. By the end of 3rd week, statistics synchronization between local collection already works.<br />
<br />
'''Screenshot:''' [http://2.bp.blogspot.com/-g4i2m3LnAfQ/T9XPH75R_BI/AAAAAAAAAGA/APuLisGOIrk/s1600/amarok1.png here]<br />
<br />
'''IRC Nick:''' strohel<br />
<br />
'''IRC Channels:''' #amarok, #gtkpod<br />
<br />
'''Blog:''' [http://strohel.blogspot.com/ strohel.blogspot.com]<br />
<br />
'''This is awesome about GSoC:''' I can finally work on open-source full-time during the summer without having to take less fun jobs on proprietary software.<br />
<br />
'''This is what I learned during GSoC:''' Mainly that Amarok codebase is in a desperate need of some major clean-ups. ;)<br />
<br />
== Martin K&uuml;ttler ==<br />
<br />
'''Project Name:''' New interface for Cantor<br />
<br />
'''A _Brief_ Description''' Cantor is a KDE application for mathematics. It uses various backend software to do the actual calculations, and strives to provide a common, intuitive and nice-looking interface. The design of the original interface had some limitations though, and it is the goal of this project to implement a new interface for Cantor. The first step is to reproduce the features (and the look&feel mostly, though some improvements are there) of the old interface. After that a couple of new features, such as a nice search&replace bar, are planed.<br />
<br />
''' Status: ''' Currently I still re-implement features that the old interface already has, but there is not much left to do for that.<br />
<br />
''' IRC Nick: ''' mkuettler<br />
<br />
'''Blog: ''' [http://mkuettler.blogspot.com mkuettler.blogspot.com]<br />
<br />
== Phalgun Guduthur ==<br />
<br />
'''Project Name:''' Semantic desktop collection in Amarok<br />
<br />
'''A _Brief_ Description''' Nepomuk has been a great semantic framework in recent years with many applications like Dolphin using it for managing metadata associated with its files and resources. But Amarok, still doesn't make use of the existing framework which comes bundled with any KDE distro. So, the objective of the project is to develop a Nepomuk based collection backend for Amarok which is functionally equivalent to the existing embedded MySql backend. An earlier attempt to achieve this was made this in GSoC 2008, but it never went on to be implemented and bundled along with the Amarok package because of reliability and performance issues. This is another attempt to make use of the excellent Nepomuk framework in Amarok and make it more semantic.<br />
<br />
''' Status: ''' Have a working Nepomuk Collection in Amarok now. Can be used as a plugin. Fine tuning the collection and tightening the loose ends. <br />
<br />
''' IRC Nick: ''' phalgun<br />
<br />
''' IRC Channels: ''' #amarok, #kde-in, #pes-os<br />
<br />
'''Blog: ''' http://blog.phalgun.in/tagged/gsoc<br />
<br />
''' This is awesome about GSoC: ''' Getting to know new people and is a platform to start contributing to open source projects that people use. Being part of something that so many people around the world use is satisfying.<br />
<br />
== Maximilian Löffler ==<br />
<br />
'''Project Name:''' Kate Scripting IDE Plugin<br />
<br />
'''A _Brief_ Description''' Kate supports a variety of possibilities for scripting, for example indentation and user defined commands. Although scripting in Kate is quite powerful, it is rarely used. This project aims at making scripting within Kate more popular by providing a plugin for Kate, which makes the process of creating and managing scripts easier.<br />
<br />
''' Status: ''' After figuring out the core capabilities which the IDE plugin should hold, they are now going to be implemented. Currently implementing script wizard for creating new scripts. There will be more features added in the future.<br />
<br />
'''Blog: ''' http://kate-editor.org<br />
<br />
''' This is awesome about GSoC: ''' GSoC is the perfect opportunity for me to deepen my C++ skills in combination with working on an awesome project.<br />
<br />
== Ganeshprasad T P ==<br />
<br />
'''Project Name:''' Bullet integration into Gluon<br />
<br />
'''A Brief Description''' Gluon has been an excellent cross-platform free and open source 2D game engine from KDE. It aims to make life easier for game developers by providing a simple but powerful API to handle 2D objects, sounds and inputs.Gluon will be a revolution in the way we’ve seen 2D game creation. People will be able to create new games in a more flexible manner, while the Gluon web content system will allow them to earn rewards.ntegration of Bullet physics to Gluon is a huge addition in this direction. Since the gaming world has entered the rage of Good effects and better look(better Graphics) ,The integration of Bullet physics to Gluon engine provides game developer to create games with clear effects such as collision detection, collision response etc.. in Gluon. This will be huge advantage to develop modern graphics games through Gluon.<br />
<br />
''' Status: ''' Right now creating different collision shapes.<br />
<br />
''' IRC Nick: ''' gani<br />
<br />
''' IRC Channels: ''' #gluon, #kde-in, #pes-os<br />
<br />
'''Blog: ''' http://ganeshprasad.tumblr.com/<br />
<br />
''' This is awesome about GSoC: ''' provides excellent opportunity to know new contributors of same interest and resourceful persons who are highly motivational and is a awesome platform to start contributing to open source projects that people use. Place to learn a lot.The concept that code we write is used by world is exciting. <br />
<br />
== Islam Wazery ==<br />
<br />
'''Project Name:''' Import Tool Revamp in digiKam<br />
<br />
'''A Brief Description''' digiKam features a graphical interface to access and download pictures from digital cameras. Code is rather old, using Qt3Support classes for the icon view, the UI code intermangled deeply with backend code, and has not seen very much care and love for some years. This project would involve taking the old code apart, rewriting a clean code base backend and front-end, but also adding user interface elements to make the most important everyday task as easy as possible.<br />
<br />
''' Status: ''' Implementing the views<br />
<br />
''' IRC Nick: ''' wazery<br />
<br />
''' IRC Channels: ''' #digikam, #ubuntu-eg<br />
<br />
'''Project link: ''' http://community.kde.org/Digikam/GSoC2012/CameraUserInterfaceRevamp<br />
<br />
''' This is awesome about GSoC: ''' Till now, understood the awesome concept of model-view, the digiKam code base, and getting to know new contributors.<br />
<br />
== Luís Gabriel Lima ==<br />
<br />
'''Project Name:''' QMLify Plasma widgets<br />
<br />
'''A _Brief_ Description''': The aim of this project is to port some of the plasmoids that are currently written in C++ to QML. A great advantage in porting it is reduce the code maintenance effort for the KDE community. The plasmoids written in QML will have considerably less code as QML allows the creation of fluid UIs in a powerful declarative way. <br />
<br />
''' Status: ''' <br />
[http://quickgit.kde.org/index.php?p=kdeplasma-addons.git&a=shortlog&h=refs/heads/plasma/luisgabriellima/weatherstation-qml LCD Weather Station] - Almost done (Pending? popup icon)<br />
[http://quickgit.kde.org/index.php?p=kde-workspace.git&a=shortlog&h=refs/heads/plasma/luisgabriellima/pager-qml Pager] - Work in progress<br />
Weather Forecast - To be done<br />
Kdeexample template - To be done<br />
<br />
''' IRC Nick: ''' luisgabriel<br />
<br />
''' IRC Channels: ''' #kde-devel, #plasma, #kde-brasil<br />
<br />
'''Blog: ''' http://luisgabriel.me<br />
<br />
== Pankaj Bhambhani ==<br />
<br />
'''Project Name:''' Facebook Integration for Choqok<br />
<br />
'''A Brief Description''' To enhance Choqok user experience by integration features of the social networking site Facebook. Primary or elementary functionalities include Posting to Facebook, Viewing Feed, Ability to Like and Comment a Post, etc. The Facebook Resource for Akonadi is an excellent library resource for this job. It can retrieve user’s news feed and list of posts and can also post on the user’s wall. See http://developers.facebook.com/docs/reference/api/ for more details<br />
<br />
'''Status:''' We can post to facebook and also view posts on Choqok ( Text and Images can be rendered properly)<br />
<br />
'''IRC Nick:''' panx, pankajb64<br />
<br />
'''IRC Channels:''' #choqok, #kde-in<br />
<br />
'''Blog:''' www.pankajb64.co.nr<br />
<br />
<br />
'''This is awesome about GSOC:''' The fact that you could learn about so many different things so quickly and so easily and get to interact with so many people. Also, the fact that code reuse is beneficial for quick and easy development of new things from similar old things. <br />
<br />
'''This is what I learned during GSOC:''' Always keep you code readable :) There may be others using or editing it. Comments are like gold dust :D<br />
<br />
== Abhishek B S ==<br />
<br />
'''Project Name:''' Improve Formula Shape in Calligra<br />
<br />
'''A Brief Description:''' Improve the Formula Shape for Calligra in the areas of basic math utilities, inline editing, general layout of formulas,fonts and provide support in MathML for 'XML entities'. Formula shape would definitely need these features to be complete. Many of the users would love to have formula shapes improved and I feel these are great enhancements.<br />
<br />
''' Status: ''' A good looking tab for commonly used formulas in Formula Editing Tool. Improved the layout for superscripts and subscripts. <br />
<br />
''' IRC Nick: ''' abhishek_<br />
<br />
''' IRC Channels: ''' #calligra, #kde-in, #pes-os<br />
<br />
''' This is awesome about GSoC: ''' To work on real-world softwares apart from the smaller projects in the universities is amazing and provides scope for personal improvement in terms of programming and product development. Even better is to be a part of a successful and dynamic community.<br />
<br />
== Lisa Vitolo ==<br />
'''Project name:''' Solid API extension for partitioning, and a Dolphin plugin to use it.<br />
<br />
'''A brief description:''' implement a high-level submodule of Solid for basic partitioning operations; this should make the task of writing a partitioner easier than it is with the current libraries. In addition I'm writing a partitioner in QML, integrated as a Dolphin plugin, that uses this library.<br />
<br />
''' Status: ''' the library is feature complete, except for a couple of bugs to fix. You can register, undo and redo basilar actions: removing, resizing, moving, creating, formatting and modifying properties of partitions, plus partition table management, all for GPT and MBR. All classes and public methods of the API are documented for doxygen, and there is a tutorial for developing applications that use this module. The QML application is complete, but it needs to be integrated as a plugin.<br />
<br />
''' IRC Nick: ''' shainer<br />
<br />
''' IRC Channels: ''' #kde-soc, #solid, #chakra, #chakra-devel<br />
<br />
''' This is awesome about GSoC: ''' I had the opportunity to get more involved in the KDE community and techbase.<br />
<br />
''' This is what I learned during GSoC: ''' how to organize my time, and the work to do, when I have to face several obligations at once (mainly university exams). Plus I had the opportunity to improve a lot my knowledge of QML and the model-view paradigm.<br />
<br />
== Smit Patel ==<br />
<br />
'''Project Name:''' Bibliography engine integration and UI to manage citations in Calligra Words <br />
<br />
'''A _Brief_ Description''' Currently Calligra Words can add/remove citations and bibliographies. But it doesn't store citations for future use and doesn't have any interface for bibliography engines. The aim of this project is to provide a user interface which will let the users manage and organize citation database and to provide an interface for bibliography engines which allows them to insert citation and bibliography in Words.<br />
<br />
''' Status: ''' <br />
Bibliography database UI - complete<br />
bridge actions 1) insert_citation 2) insert_cite_record - complete<br />
action insert_bibliography for bridge interface - pending<br />
<br />
''' Screenshot: '''<br />
<br />
''' IRC Nick: ''' smitpatel<br />
<br />
''' IRC Channels: ''' #calligra, #kde-in <br />
<br />
'''Blog: ''' http://smitr.blogspot.com/<br />
<br />
''' This is awesome about GSoC: '''<br />
<br />
''' This is what I learned during GSoC: '''<br />
<br />
<br />
== Alessandro Cosentino ==<br />
<br />
'''Project Name:''' A feed aggregator for ownCloud <br />
<br />
'''A _Brief_ Description''' The goal of this project is to create an ownCloud application for reading and managing RSS/Atom feeds. As opposed to most of the aggregators existing on the web, the ownCloud aggregator will give the user full ownership and control over the data, which is in the general philosophy of ownCloud. The aggregator will have a web user interface and will integrate with other applications in the ownCloud suite. Moreover, it will provide a web API for synchronization with mobile and standalone desktop feed readers, KDE Akregator above all.<br />
<br />
''' Status: ''' <br />
Model layer + database layer - complete<br />
Web GUI - almost complete<br />
API - starts July 16th<br />
<br />
''' Screenshot: ''' <br />
<br />
''' IRC Nick: ''' zimba12<br />
<br />
''' IRC Channels: ''' #owncloud-dev, #akregator, #kde-soc<br />
<br />
'''Blog: ''' [http://algorithmsforthekitchen.com/blog/ Algorithms for the Kitchen]<br />
<br />
''' This is awesome about GSoC: '''<br />
<br />
''' This is what I learned during GSoC: '''<br />
<br />
<br />
<br />
== A.H.M. Mahfuzur Rahman (Mamun) ==<br />
<br />
'''Project Name:''' Face Recognition for Digikam <br />
<br />
'''A _Brief_ Description''' The aim of this project is to develop a workable system of face recognition for digikam. Keeping this in mind, we are working on several algorithms in libface. Some are improvement of previous algorithms implemented in libface and others are new implementation. After the satisfactory implementation of algorithms, we will update libkface with the improvements and incorporate the algorithms with digikam UI.<br />
<br />
''' Status: ''' <br />
Eigenface + Fisherface Implementation - complete<br />
Libface GUI - complete for testing now (Refurbishment will be done if necessary)<br />
HMM implementation - Ongoing ...<br />
Update of digikam UI and Integration to Digikam UI of the algorithms - Hope to start at the end of July <br />
<br />
''' Screenshot: ''' <br />
Not available right now. The work has been done on algorithms hitherto.<br />
<br />
<br />
''' IRC Nick: ''' nightCrawler<br />
<br />
''' IRC Channels: ''' #digikam, #okular<br />
<br />
'''Blog: ''' [http://nightcrawlerinshadow.wordpress.com/ Nightcrawler in Shadow]<br />
<br />
''' This is awesome about GSoC: '''<br />
<br />
''' This is what I learned during GSoC: '''<br />
<br />
== Shrikrishna Holla ==<br />
<br />
'''Project Name:''' Adding an Infinite Canvas / Wraparound mode for Krita<br />
<br />
'''A _Brief_ Description''' Krita focuses on texturing, matte painting and comics drawing. For texturing, the Krita image model needs to be expanded in two ways: First, the canvas needs to be made infinite, so the user can paint textures of any size without stopping, and second, a mode for creating tileable textures where painting strokes that go off the canvas, wrap over on the opposite side avoiding texture seams along the edges. Panning in this mode would essentially work just as an offset for the whole canvas to wrap around, allowing artists to check tiled textures for seams.<br />
<br />
''' Status: ''' Infinite Canvas mode up and running; last few bugs to fix.<br />
Wraparound mode - pending <br />
<br />
''' IRC Nick: ''' shrikrishna<br />
<br />
''' IRC Channels: ''' #krita, #kde-in, #pes-os<br />
<br />
''' This is awesome about GSoC: ''' The experience, the exposure, the learning curve, the confidence it gives<br />
<br />
''' This is what I learned during GSoC: ''' A lot of things; starting from technical stuff like the usage of git to communication skills on how to engage with people on IRC<br />
<br />
== Francisco Fernandes ==<br />
<br />
'''Project Name:''' A Sandpainting brush for Krita<br />
<br />
'''A _Brief_ Description''' Sandpainting is the art of rearrange powdered pigments onto a surface to make an unfixed, or fixed, granular painting. Unfixed sand paintings have a long established cultural history in numerous social groups around the globe. This project propose a simple unfixed sand brush to the digital painting software Krita, based on grain particle simulations.<br />
<br />
''' Status: ''' <br />
Paintop loads properly [Done]<br />
Particles physics settings possible using the brush settings widget. [Done]<br />
Particles created on the canvas made persistent by Krita annotations [Done]<br />
Creation a custom grid to improve particles interactions (collisions and sellection) [on the run]<br />
<br />
Creation of the animation framework <br />
Particle spread on canvas (needs collision)<br />
<br />
''' Screenshot: ''' <br />
[http://s3.amazonaws.com/twitpic/photos/large/619231294.png?AWSAccessKeyId=AKIAJF3XCCKACR3QDMOA&Expires=1342537484&Signature=6x7bFTOYzKT1kZRJmkd5JOOg1P4%3D&key=/ status]<br />
<br />
'''Video: '''<br />
[http://www.youtube.com/watch?feature=player_embedded&v=agvmCqRfG1s/ Sand paintop 02 - Particles with velocity and acceleration ]<br />
<br />
''' IRC Nick: ''' chicao<br />
<br />
''' IRC Channels: ''' #krita, #kde-brasil, #archlinux-br<br />
<br />
'''Blog: ''' [http://pedepinico.blogspot.com.br/search/label/kde/ Pe De Pinico]<br />
<br />
<br />
''' This is awesome about GSoC: ''' <br />
The community interaction and the learning is the most valuable experiences I'm getting from<br />
the GSoC.<br />
<br />
''' This is what I learned during GSoC: ''' <br />
Improved my C++ and Qt4 programming.<br />
Learned about integration methods (had to search and test many techniques to find a proper one)<br />
Learned about particles system and real-time physics.<br />
<br />
== Roney Gomes ==<br />
<br />
''' Project Name:''' Porting Games to a More Modern Graphics Framework<br />
<br />
''' A Brief Description:''' When Qt changed from version 3 to 4, there was a significant lack of performance regarding QGraphicsView, which forced the developers to build their own graphics framework. Now, that QGraphicsView has matured, the return to the framework seems feasible. That's a good practice, since it avoids the developers to constantly reinvent the wheel, primarily focusing on the development of their applications rather than in the tools necessary to create them.<br />
<br />
''' Status: ''' Working on KGoldRunner, trying to add the fancy borders some themes have around their backgrounds.<br />
<br />
''' IRC Nick: ''' roney<br />
<br />
''' IRC Channels: ''' #kde-games-devel #kde-devel<br />
<br />
''' Blog: ''' http://logofn.blogspot.com.br/<br />
<br />
''' This is awesome about GSoC: ''' Learning is certainly one of the most exciting things of life, actually to see<br />
your creation working is something really awesome. GSoC gave me the opportunity to learn, see and share the fruits of<br />
my work.<br />
<br />
== Felix Rohrbach ==<br />
''' Project Name:''' OCS specific JSON parser in Attica <br />
<br />
''' A Brief Description''' Attica is a client library for the Open Collaboration Service protocol. Open Collaboration Services (OCS) is a common protocol for providing social networking and collaboration across different services. My task is to write a JSON parser in Attica, as part of the ongoing process for creating a standardized JSON interface with OCS.<br />
<br />
''' Status:''' Changed the design of attica to work with multiple parsers. Currently writing parsers for the individual json inputs.<br />
<br />
''' IRC Nick: ''' fxrh<br />
<br />
''' IRC Channels: ''' #kde-devel #ocs #gluon<br />
<br />
= SoK =<br />
<br />
<br />
== Heena ==<br />
<br />
'''Project Name:''' To develop the KDE game pairs and to work as a theme editor for this game. <br />
<br />
'''A _Brief_ Description''' In the next KDE release the game Pairs will make its first public appearance.<br />
It is designed to increase the logic and foster the IQ skills of children.<br />
<br />
<br />
''' IRC Nick: ''' stack3457<br />
<br />
''' Screenshot: ''' Coming soon<br />
<br />
''' IRC Channels: ''' #kdegames , #kde-edu<br />
<br />
''' Google+: ''' [https://plus.google.com/u/0/me/posts heena]<br />
<br />
'''Blog: ''' [http://heenamahour.blogspot.in/ my_blog]<br />
<br />
<br />
''' KDE summer of code is great platform foster the programming skills. '''<br />
<br />
''' I get to learn more about the kde applications and significance.'''<br />
<br />
== Sharad Dixit ==<br />
<br />
'''Project Name:''' Implementation of Variable thickness lines in Calligra Karbon <br />
<br />
'''A _Brief_ Description''' One of the most fundamental basics of drawing is varying the width of your lines to show shape, form and perspective. Almost every line tapers at either end, and often gets thicker and thinner in different places as needed. For purely technical and histrorical reasons though, every vector program (Illustrator, Inkscape, Karbon etc) make curves all one hard width. Task is to create a variable width path shape / tool, much like the path tool, would allow drawing curves, but where each node could have its width set so that the line width changed smoothly from node to node. As Karbon is part of the Calligra suite, this would be beneficial to apps such as Krita,also.[http://community.kde.org/Calligra/Karbon karbon] <br />
<br />
''' Screenshot: ''' [http://bugsfiles.kde.org/attachment.cgi?id=56995 Here]<br />
<br />
''' IRC Nick: ''' illumiknight<br />
<br />
''' IRC Channels: ''' #calligra<br />
<br />
''' Google+: ''' [https://plus.google.com/u/1/114564598758277630384 sharad]<br />
<br />
'''Blog: ''' [http://karbonsummerofkde12.wordpress.com/ Here]<br />
<br />
''' This is awesome about KDE Summer of code: '''<br />
<br />
''' This is what I learned during KDE Soc: '''<br />
<br />
== Utku Aydın ==<br />
<br />
'''Project Name:''' Port Marble to Plasma Active platform<br />
<br />
'''A Brief Description:''' Project's aim is a nicely polished, end-user ready Marble Touch for Plasma Active. That will enable users to use their favorite Virtual Globe on their Plasma Active powered tablets.<br />
<br />
<br />
''' Status: ''' Creating a Foursquare online service, a plugin that shows venues on the map<br />
<br />
''' Screenshot: ''' http://ompldr.org/vZTVmNA (Latest status of Foursquare plugin)<br />
<br />
''' IRC Nick: ''' utku<br />
<br />
''' IRC Channels: ''' #marble<br />
<br />
'''Blog: ''' http://utkuaydin.wordpress.com (nothing related to SoK yet)<br />
<br />
''' This is awesome about SoK: ''' Like my previous Google Code-in experience, I get a chance to work with talented people in a more organized process.<br />
<br />
''' This is what I learned during SoK: ''' QML is awesome.<br />
<br />
== Jasneet Singh Bhatti ==<br />
<br />
'''Project Name:''' Improvement of the current Amarok Unit Testing scenario<br />
<br />
'''A Brief Description''' This project aims at creating useful comprehensive unit tests that will provide coverage for the core components of the Amarok source, along with high quality documentation that will make it easier for other developers to write tests for the features they implement and hopefully for those of others too<br />
<br />
''' Status: ''' Almost finished writing tests for core/meta<br />
<br />
''' IRC Nick: ''' jasneet<br />
<br />
''' IRC Channels: ''' #amarok, #amarok-dev<br />
<br />
'''Blog: ''' http://jascmevirtually.tumblr.com/ Will be updated regularly with the project progress<br />
<br />
''' This is awesome about SoK: ''' The opportunity to interact and learn from highly skilled and experienced developers and make a significant contribution to the open source community<br />
<br />
''' This is what I am learning during SoK: ''' Understanding workflows, better coding conventions, design, testing and much more<br />
<br />
== David Yang ==<br />
<br />
'''Project Name:''' Developing and improving the pairs game from KDE-edu.<br />
<br />
'''A _Brief_ Description''' Making the first release of pairs a good one. Pairs is an educational game designed to exercise the memory skills of small children. Multiplayer coming soon!<br />
<br />
''' Status: ''' Will start when school gets out of my way.<br />
<br />
''' Screenshot: '''<br />
<br />
''' IRC Nick: ''' DavidYang<br />
<br />
''' IRC Channels: ''' #kde-edu #kde-games<br />
<br />
'''Blog: ''' davidosyang.wordpress.com. Completly empty for now.<br />
<br />
''' This is awesome about SoK: ''' That I can get a mentor to help me get into contributing to an open source project.<br />
<br />
''' This is what I learned during SoK: ''' Yeah, I know how to answer this before I've started my project. Want me to grab a copy of kde 5.3 from 2015 while I'm at it?<br />
<br />
== Garima Joshi ==<br />
<br />
'''Project Name:''' Grammar Checking in Calligra.<br />
<br />
'''A Brief Description''' This project aims to add support for grammar checking in Calligra. For this purpose we have decided to use the link-grammar parser. Besides the actual checking visualisation with some underline (needs to be integreted with the red underline of spellchecking) and some dialogs to control the behaviors need to be added also.<br />
<br />
''' Status: ''' Currently redoing the whole undelining framework for both spell and grammar checking.<br />
<br />
''' IRC Nick: ''' garima_<br />
<br />
''' IRC Channels: ''' #calligra<br />
<br />
'''Blog: ''' http://garimajoshi.blogspot.in<br />
<br />
''' This is awesome about SoK: ''' Getting a chance to work with an awesome mentor and a great community and getting a first hand experience in software development.<br />
<br />
''' This is what I learned during SoK: ''' To work on real world software problems and a huge codebase. Coding conventions and development workflow.<br />
<br />
== Varun Herale ==<br />
<br />
'''Project Name:''' Wallpaper Kipi-Plugin<br />
<br />
'''A Brief Description''' This project aims to make the wallpaper plugin work in KDE4 which uses Plasma desktop and D-Bus IPC.<br />
<br />
''' Status: ''' Coding done and waiting to push a patch to plasma after feature freeze ends.<br />
<br />
''' IRC Nick: ''' varun_herale<br />
<br />
''' IRC Channels: ''' #digikam<br />
<br />
'''Blog: ''' <br />
<br />
''' This is awesome about SoK: ''' Getting a chance to work with a mentor and community on something that I use a lot, and also the experience gained in software development.<br />
<br />
''' This is what I learned during SoK: ''' More about KDE projects, coding conventions, testing, and development workflow!</div>Pandithttps://community.kde.org/index.php?title=Akademy/2012/QtQuick&diff=21822Akademy/2012/QtQuick2012-06-16T15:15:41Z<p>Pandit: </p>
<hr />
<div>'''Qt Quick 2 Training on Monday, 2 July 2012'''<br />
<br />
Qt 5 is coming, and one of its most outstanding features will be Qt Quick 2. <br />
During Akademy, a training will be held covering the basic concepts of Qt Quick 2, how to make your own GUI with a specific emphasis on user interaction, animations and transitions between states. Last but not least, will be presented how to use the Qt C++ API to extend the Qt Quick 2 runtime.<br />
<br />
KDAB will be conducting this training, which is sponsored by Nokia in addition to their Platinum sponsorship. Nokia and KDAB are committed to Qt and KDE, and are offering this training to support that commitment. <br />
<br />
Coaches: Volker Krause and Kévin Ottens<br />
<br />
Preliminary schedule:<br />
<br />
09:30 - 11:00 Concepts and composing user interfaces<br />
<br />
11:00 - 11:15 Break<br />
<br />
11:15 - 12:45 User interaction<br />
<br />
12:45 - 13:45 Lunch Break<br />
<br />
13:45 - 15:15 Animations, states and transitions<br />
<br />
15:15 - 15:30 Break<br />
<br />
15:30 - 17:00 C++ Integration<br />
<br />
<br />
----<br />
<br />
'''Registration is required.'''<br />
<br />
The workshop is suitable for beginners and advanced developers. Please add your name and information below if you want to attend.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Number<br />
! Name/IRC nick/email<br />
! Level of Qt expertise<br />
|-<br />
| width="10%" | 1<br />
| width="35%" | Ima Hotshot<br />
| width="55%" | I can do cute with one hand behind my back.<br />
|-<br />
| 2<br />
| Helio Chissini de Castro<br />
| Some Qt but need learn new tricks<br />
|-<br />
| 3<br />
| Lauri Võsandi<br />
| Always ready to learn new stuff!<br />
|-<br />
| 4<br />
| Sune Vuorela<br />
| c++ champion, haven't yet succeeded hello world in qtquick<br />
|-<br />
| 5<br />
| Luciano Montanaro<br />
| Good Qt knowledge, some Qt Quick 1<br />
|-<br />
| 6<br />
| Sinny Kumari (ksinny)<br />
| Intermediate Qt and QtQuick 1<br />
|-<br />
| 7<br />
| Shantanu Tushar (shaan7)<br />
| Advanced Qt and QtQuick 1<br />
|-<br />
| 8<br />
| Christoph Cullmann (cullmann)<br />
| Qt ok, Qt Quick never tried<br />
|-<br />
| 9<br />
| Dominik Haumann (dhaumann)<br />
| Qt, Qt Quick never tried<br />
|-<br />
| 10<br />
| Pradeepto Bhattacharya (pradeepto) <br />
| Qt <br />
|-<br />
| 11<br />
| Martin Gräßlin (mgraesslin)<br />
| Good Qt knowledge, knows the annoying parts of transiting ot QtQuick 1<br />
|-<br />
| 12<br />
| José Millán Soto (fid_jose)<br />
| Experience with Qt, but I've never tried QtQuick<br />
|-<br />
| 13<br />
| Maximilian Löffler<br />
| Just started with Qt, never worked with Qt Quick<br />
|-<br />
| 14<br />
| John Layt (jlayt)<br />
| Qt Maintainer, doesn't mean I know what I'm doing :-)<br />
|-<br />
| 15<br />
| Park Shinjo (peremen)<br />
| Some Qt, no Qt Quick yet<br />
|-<br />
| 16<br />
| Sven Petai (hadara)<br />
| very little QT experience, no Qt Quick experience<br />
|-<br />
| 17<br />
| Alejandro Castaño<br />
| Good Qt/Qt Quick<br />
|-<br />
| 18<br />
| Adrian Lopez<br />
| very little Qt and Qt Quick experience<br />
|-<br />
| 19<br />
| Joseph Wenninger<br />
| Qt widget based: quite good, Qt Quick: no expeience<br />
|-<br />
| 20<br />
| Dan Vratil<br />
| Good Qt knowledge, Qt Quick basics<br />
|-<br />
| 21<br />
| Niels Slot<br />
| Decent Qt knowledge, almost no Qt Quick experience<br />
|-<br />
| 22<br />
| Mirko Boehm<br />
| I code Qt while sleepwalking after three Mai Tais. But not QML.<br />
|-<br />
| 23<br />
| Jure Repinc<br />
| Good Qt, only tried Qt Quick 1 a little<br />
|-<br />
| 24<br />
| Lindsay Roberts<br />
| Medium Qt, low Quick.<br />
|-<br />
| 25<br />
| Antonio Larrosa<br />
| Good Qt, no Qt Quick<br />
|-<br />
| 26<br />
| Yash shah<br />
| Qt, no experience with Qt Quick<br />
|-<br />
| 27<br />
| Daniele E. Domenichelli (drdanz)<br />
| Good Qt, almost no Qt Quick experience<br />
|-<br />
| 28<br />
| Christian Reiner<br />
| Did some c++/Qt, no Qt Quick<br />
|-<br />
| 29<br />
| Sivan Greenberg<br />
| Done quite some QML by now, wants more insight of the C++ side.<br />
|-<br />
| 30<br />
| Benjamin Port<br />
| A bit experience with Qt, but never really use QtQuick (only some test)<br />
|-<br />
| 31<br />
| Felix Rohrbach (fxrh)<br />
| Medium Qt, no QtQuick<br />
|-<br />
| 32<br />
| Shreya Pandit(shreya)<br />
| Intermediate Qt and beginner Qt Quick<br />
|-<br />
| 33<br />
| <br />
| <br />
|-<br />
| 34<br />
| <br />
| <br />
|-<br />
| 35<br />
| <br />
| <br />
|-<br />
| 36<br />
| <br />
| <br />
|-<br />
| 37<br />
| <br />
| <br />
|-<br />
| 38<br />
| <br />
| <br />
|-<br />
| 39<br />
| <br />
| <br />
|-<br />
| 40<br />
| <br />
| <br />
|}</div>Pandithttps://community.kde.org/index.php?title=Akademy/2012/QtQuick&diff=21821Akademy/2012/QtQuick2012-06-16T15:14:50Z<p>Pandit: </p>
<hr />
<div>'''Qt Quick 2 Training on Monday, 2 July 2012'''<br />
<br />
Qt 5 is coming, and one of its most outstanding features will be Qt Quick 2. <br />
During Akademy, a training will be held covering the basic concepts of Qt Quick 2, how to make your own GUI with a specific emphasis on user interaction, animations and transitions between states. Last but not least, will be presented how to use the Qt C++ API to extend the Qt Quick 2 runtime.<br />
<br />
KDAB will be conducting this training, which is sponsored by Nokia in addition to their Platinum sponsorship. Nokia and KDAB are committed to Qt and KDE, and are offering this training to support that commitment. <br />
<br />
Coaches: Volker Krause and Kévin Ottens<br />
<br />
Preliminary schedule:<br />
<br />
09:30 - 11:00 Concepts and composing user interfaces<br />
<br />
11:00 - 11:15 Break<br />
<br />
11:15 - 12:45 User interaction<br />
<br />
12:45 - 13:45 Lunch Break<br />
<br />
13:45 - 15:15 Animations, states and transitions<br />
<br />
15:15 - 15:30 Break<br />
<br />
15:30 - 17:00 C++ Integration<br />
<br />
<br />
----<br />
<br />
'''Registration is required.'''<br />
<br />
The workshop is suitable for beginners and advanced developers. Please add your name and information below if you want to attend.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Number<br />
! Name/IRC nick/email<br />
! Level of Qt expertise<br />
|-<br />
| width="10%" | 1<br />
| width="35%" | Ima Hotshot<br />
| width="55%" | I can do cute with one hand behind my back.<br />
|-<br />
| 2<br />
| Helio Chissini de Castro<br />
| Some Qt but need learn new tricks<br />
|-<br />
| 3<br />
| Lauri Võsandi<br />
| Always ready to learn new stuff!<br />
|-<br />
| 4<br />
| Sune Vuorela<br />
| c++ champion, haven't yet succeeded hello world in qtquick<br />
|-<br />
| 5<br />
| Luciano Montanaro<br />
| Good Qt knowledge, some Qt Quick 1<br />
|-<br />
| 6<br />
| Sinny Kumari (ksinny)<br />
| Intermediate Qt and QtQuick 1<br />
|-<br />
| 7<br />
| Shantanu Tushar (shaan7)<br />
| Advanced Qt and QtQuick 1<br />
|-<br />
| 8<br />
| Christoph Cullmann (cullmann)<br />
| Qt ok, Qt Quick never tried<br />
|-<br />
| 9<br />
| Dominik Haumann (dhaumann)<br />
| Qt, Qt Quick never tried<br />
|-<br />
| 10<br />
| Pradeepto Bhattacharya (pradeepto) <br />
| Qt <br />
|-<br />
| 11<br />
| Martin Gräßlin (mgraesslin)<br />
| Good Qt knowledge, knows the annoying parts of transiting ot QtQuick 1<br />
|-<br />
| 12<br />
| José Millán Soto (fid_jose)<br />
| Experience with Qt, but I've never tried QtQuick<br />
|-<br />
| 13<br />
| Maximilian Löffler<br />
| Just started with Qt, never worked with Qt Quick<br />
|-<br />
| 14<br />
| John Layt (jlayt)<br />
| Qt Maintainer, doesn't mean I know what I'm doing :-)<br />
|-<br />
| 15<br />
| Park Shinjo (peremen)<br />
| Some Qt, no Qt Quick yet<br />
|-<br />
| 16<br />
| Sven Petai (hadara)<br />
| very little QT experience, no Qt Quick experience<br />
|-<br />
| 17<br />
| Alejandro Castaño<br />
| Good Qt/Qt Quick<br />
|-<br />
| 18<br />
| Adrian Lopez<br />
| very little Qt and Qt Quick experience<br />
|-<br />
| 19<br />
| Joseph Wenninger<br />
| Qt widget based: quite good, Qt Quick: no expeience<br />
|-<br />
| 20<br />
| Dan Vratil<br />
| Good Qt knowledge, Qt Quick basics<br />
|-<br />
| 21<br />
| Niels Slot<br />
| Decent Qt knowledge, almost no Qt Quick experience<br />
|-<br />
| 22<br />
| Mirko Boehm<br />
| I code Qt while sleepwalking after three Mai Tais. But not QML.<br />
|-<br />
| 23<br />
| Jure Repinc<br />
| Good Qt, only tried Qt Quick 1 a little<br />
|-<br />
| 24<br />
| Lindsay Roberts<br />
| Medium Qt, low Quick.<br />
|-<br />
| 25<br />
| Antonio Larrosa<br />
| Good Qt, no Qt Quick<br />
|-<br />
| 26<br />
| Yash shah<br />
| Qt, no experience with Qt Quick<br />
|-<br />
| 27<br />
| Daniele E. Domenichelli (drdanz)<br />
| Good Qt, almost no Qt Quick experience<br />
|-<br />
| 28<br />
| Christian Reiner<br />
| Did some c++/Qt, no Qt Quick<br />
|-<br />
| 29<br />
| Sivan Greenberg<br />
| Done quite some QML by now, wants more insight of the C++ side.<br />
|-<br />
| 30<br />
| Benjamin Port<br />
| A bit experience with Qt, but never really use QtQuick (only some test)<br />
|-<br />
| 31<br />
| Felix Rohrbach (fxrh)<br />
| Medium Qt, no QtQuick<br />
|-<br />
| 32<br />
| Shreya Pandit(shreya)<br />
| Intermediate Qt and Qt Quick<br />
|-<br />
| 33<br />
| <br />
| <br />
|-<br />
| 34<br />
| <br />
| <br />
|-<br />
| 35<br />
| <br />
| <br />
|-<br />
| 36<br />
| <br />
| <br />
|-<br />
| 37<br />
| <br />
| <br />
|-<br />
| 38<br />
| <br />
| <br />
|-<br />
| 39<br />
| <br />
| <br />
|-<br />
| 40<br />
| <br />
| <br />
|}</div>Pandithttps://community.kde.org/index.php?title=Calligra/Meetings/Fall_2011_meeting/Minutes&diff=16253Calligra/Meetings/Fall 2011 meeting/Minutes2011-11-25T07:04:29Z<p>Pandit: /* Sunday */</p>
<hr />
<div>..<br />
<br />
<br />
== Kexi BoF ==<br />
===Friday===<br />
*OwnCloud integration for Kexi storage, contributors needed<br />
*WebForms, contributors needed<br />
<br />
*Fullscreen: TODO<br />
*Define object model for public Kexi APIs, then start to implement using QtScript. Documentation of the object model would become a base for section in the Kexi Handbook (minus development notes).<br />
<br />
===Saturday===<br />
====Branding====<br />
*Good news: we have calligra.org!<br />
*The community has decided on the logo, it's not up for discussion now. We go further to helping users/3rd parties to properly refer to our project in a way so we feel comfortable enough.<br />
*[http://kexi-project.org/pics/ads/calligra/Calligra_Branding_2011-11.pdf Calligra Branding presentation] (jstaniek)<br />
*[http://kexi-project.org/pics/ads/calligra/Calligra%20Suite%20Logo%20Guidelines-draft2.pdf Logo guidelines draft 2], please discuss (jstaniek)<br />
*Compare to<br />
**Fedora http://fedoraproject.org/wiki/Logo/UsageGuidelines<br />
**openSUSE: http://en.opensuse.org/openSUSE:Trademark_guidelines<br />
**LibreOffice http://wiki.documentfoundation.org/Marketing/Branding<br />
<br />
====Kexi====<br />
=====Plan: Move plugin tabbed toolbars to plugins=====<br />
*define KexiTabInfo { QString name; QString toolTip; QString whatsThis; QString tabText; QColor tabColor; QWidget* widget; } <br />
*implement virtual QList<KexiTabInfo*> KexiPart::createMenuTabs() const = 0;<br />
*implement createMenuTabs() is kexi form and report plugins.<br />
=====Idea: User feedback module=====<br />
*design & implement user feedback module<br />
**ask users to participate in anonymous gathering of statistical data<br />
**collect user<br />
**user can sign up using nick name to see her contribution!<br />
=====Idea: New developers in Kexi Mobile sub-project=====<br />
SPOILER! Three new Kexi devs are N9* owners now and two of them look forward to contribute something.<br />
=====Practices=====<br />
*Use //! @todo, Q_ASSERT(), see techbase for more hints<br />
=====KoReports and/or mail merge?=====<br />
Mail merge CAN be superset of KoReports BUT the latter less complex code because of lack of ODF dependency and flake editing code that is not all needed for reports.<br />
=====Tasks=====<br />
*Radek: unit tests for Predicate<br />
*Radek: Chart form widget, look as possibilities of sharing code with koreport chart <br />
*Dimitrios: Split function for any view; vertical, horizontal; start with internal (in view, per view); consider external one<br />
*Dimitrios: family of functions<br />
**Quick bugfix: RMB menu should be related to clicked tab, not always the active one<br />
**"New Window" - creates new empty kexi main window with prj navigator and tabbed toolbar<br />
**Detach tab - do the same as in "New Window", close current tab and open it in the new window; never destroy the object's view but just reparent<br />
**Attach tab - close the tab in the "New Window", if the new window is empty, close it, attach the tab to place it was attached to before; never destroy the object's view but just reparent<br />
**Full screen; F11<br />
**Split View, as in Kate's View menu: Previous Split View Shift+F8; Next Split View F8; Split Vertical CTRL+Shift+L; Split Horizontal CTRL+Shift+H; Close Current View CTRL+Shift+R; needs synchronisation when data is changed and filters are applied<br />
**Dual View: Split View with Table or Query on top and related Autoform below - when launched from table or query; Split View with Form on top and related Table view below - when launched from form<br />
<br />
*Open: show records selected for removal in DML queries in color, e.g. red (preview) before actual execution of query<br />
*Add "Translations" node in the project navigator<br />
*Add Format Tab for use in designers<br />
**Use format tools for data mode (rich text edit?)<br />
<br />
*Angry Access Users! <br />
*Send a Cake for 22th anniversary of MSA!<br />
<br />
===Sunday===<br />
*Eating our own Dog food:Why?<br />
<br />
*Dimitrios:Must use application developed by ourselves<br />
*jstaniek:Testing by contributors is very valuable.Developers are also actors in their own use cases.Eating dog food helps to avoid feature duplication.<br />
*leads to team building<br />
*We increase knowledge about applications,better integration<br />
<br />
*Inge:Create Kexi specific tools using generic shapes for benefit of Kexi.<br />
*jstaniek:proposes idea of separate sidebar for shapes instead of property editor.<br />
*Inge:Kexi as a Bugzilla client:Use Kexi as a tool for backtracking and a link to Bugzilla<br />
*Inge:Create application where list of docs match to list of features(stored in a database)<br />
*Radek:use kexi as a source of data or tables<br />
*Jstaniek:Discussions about pros and cons of using KoReports in Kexi<br />
*Improve support for analyzing data in Kexi<br />
*jstaniek:Work on new Predicate backend is picking up speed,release tentative in Calligra 3.0<br />
*Thank You Note<br />
<br />
'''Integration BoF<br />
<br />
*jstaniek:Integration Ideas-People must contribute to common Calligra Applications.Koreports(in calligralibs) used by Kexi and Plan.<br />
*Proposal of having Mail Merge in Calligra Libs<br />
*Use Modern kexi GUI in other applications<br />
*jstaniek:Emphasize reuse of Calligra:Including implementation of Forms Interface in other Calligra applications<br />
*Suresh:QtScript and benefits of Jscript<br />
*Inge:Kexi integration with Nepomuk<br />
*jstaniek:Discussion on QAnimatedStack<br />
*jstaniek:Importance of Modal Menu to reduce clottering of menu area while exiting a particular kind of mode<br />
*Inge:Idea of themes is proposed</div>Pandithttps://community.kde.org/index.php?title=Calligra/Meetings/Fall_2011_meeting/Minutes&diff=16252Calligra/Meetings/Fall 2011 meeting/Minutes2011-11-25T06:37:09Z<p>Pandit: /* Sunday */</p>
<hr />
<div>..<br />
<br />
<br />
== Kexi BoF ==<br />
===Friday===<br />
*OwnCloud integration for Kexi storage, contributors needed<br />
*WebForms, contributors needed<br />
<br />
*Fullscreen: TODO<br />
*Define object model for public Kexi APIs, then start to implement using QtScript. Documentation of the object model would become a base for section in the Kexi Handbook (minus development notes).<br />
<br />
===Saturday===<br />
====Branding====<br />
*Good news: we have calligra.org!<br />
*The community has decided on the logo, it's not up for discussion now. We go further to helping users/3rd parties to properly refer to our project in a way so we feel comfortable enough.<br />
*[http://kexi-project.org/pics/ads/calligra/Calligra_Branding_2011-11.pdf Calligra Branding presentation] (jstaniek)<br />
*[http://kexi-project.org/pics/ads/calligra/Calligra%20Suite%20Logo%20Guidelines-draft2.pdf Logo guidelines draft 2], please discuss (jstaniek)<br />
*Compare to<br />
**Fedora http://fedoraproject.org/wiki/Logo/UsageGuidelines<br />
**openSUSE: http://en.opensuse.org/openSUSE:Trademark_guidelines<br />
**LibreOffice http://wiki.documentfoundation.org/Marketing/Branding<br />
<br />
====Kexi====<br />
=====Plan: Move plugin tabbed toolbars to plugins=====<br />
*define KexiTabInfo { QString name; QString toolTip; QString whatsThis; QString tabText; QColor tabColor; QWidget* widget; } <br />
*implement virtual QList<KexiTabInfo*> KexiPart::createMenuTabs() const = 0;<br />
*implement createMenuTabs() is kexi form and report plugins.<br />
=====Idea: User feedback module=====<br />
*design & implement user feedback module<br />
**ask users to participate in anonymous gathering of statistical data<br />
**collect user<br />
**user can sign up using nick name to see her contribution!<br />
=====Idea: New developers in Kexi Mobile sub-project=====<br />
SPOILER! Three new Kexi devs are N9* owners now and two of them look forward to contribute something.<br />
=====Practices=====<br />
*Use //! @todo, Q_ASSERT(), see techbase for more hints<br />
=====KoReports and/or mail merge?=====<br />
Mail merge CAN be superset of KoReports BUT the latter less complex code because of lack of ODF dependency and flake editing code that is not all needed for reports.<br />
=====Tasks=====<br />
*Radek: unit tests for Predicate<br />
*Radek: Chart form widget, look as possibilities of sharing code with koreport chart <br />
*Dimitrios: Split function for any view; vertical, horizontal; start with internal (in view, per view); consider external one<br />
*Dimitrios: family of functions<br />
**Quick bugfix: RMB menu should be related to clicked tab, not always the active one<br />
**"New Window" - creates new empty kexi main window with prj navigator and tabbed toolbar<br />
**Detach tab - do the same as in "New Window", close current tab and open it in the new window; never destroy the object's view but just reparent<br />
**Attach tab - close the tab in the "New Window", if the new window is empty, close it, attach the tab to place it was attached to before; never destroy the object's view but just reparent<br />
**Full screen; F11<br />
**Split View, as in Kate's View menu: Previous Split View Shift+F8; Next Split View F8; Split Vertical CTRL+Shift+L; Split Horizontal CTRL+Shift+H; Close Current View CTRL+Shift+R; needs synchronisation when data is changed and filters are applied<br />
**Dual View: Split View with Table or Query on top and related Autoform below - when launched from table or query; Split View with Form on top and related Table view below - when launched from form<br />
<br />
*Open: show records selected for removal in DML queries in color, e.g. red (preview) before actual execution of query<br />
*Add "Translations" node in the project navigator<br />
*Add Format Tab for use in designers<br />
**Use format tools for data mode (rich text edit?)<br />
<br />
*Angry Access Users! <br />
*Send a Cake for 22th anniversary of MSA!<br />
<br />
===Sunday===<br />
*Kexi Integration BoF<br />
*Eating our own Dog food:Why?<br />
<br />
Dimitrios:Must use application developed by ourselves<br />
jstaniek:Testing by contributors is very valuable<br />
jstaniek:developers are also actors in their own use cases.Eating dog food helps to avoid feature duplication.<br />
*leads to team building<br />
*We increase knowledge about applications,better integration<br />
<br />
Inge:Create Kexi specific tools using generic shapes for benefit of Kexi.</div>Pandithttps://community.kde.org/index.php?title=Calligra/Meetings/Fall_2011_meeting/Minutes&diff=16251Calligra/Meetings/Fall 2011 meeting/Minutes2011-11-25T06:33:57Z<p>Pandit: /* Sunday */</p>
<hr />
<div>..<br />
<br />
<br />
== Kexi BoF ==<br />
===Friday===<br />
*OwnCloud integration for Kexi storage, contributors needed<br />
*WebForms, contributors needed<br />
<br />
*Fullscreen: TODO<br />
*Define object model for public Kexi APIs, then start to implement using QtScript. Documentation of the object model would become a base for section in the Kexi Handbook (minus development notes).<br />
<br />
===Saturday===<br />
====Branding====<br />
*Good news: we have calligra.org!<br />
*The community has decided on the logo, it's not up for discussion now. We go further to helping users/3rd parties to properly refer to our project in a way so we feel comfortable enough.<br />
*[http://kexi-project.org/pics/ads/calligra/Calligra_Branding_2011-11.pdf Calligra Branding presentation] (jstaniek)<br />
*[http://kexi-project.org/pics/ads/calligra/Calligra%20Suite%20Logo%20Guidelines-draft2.pdf Logo guidelines draft 2], please discuss (jstaniek)<br />
*Compare to<br />
**Fedora http://fedoraproject.org/wiki/Logo/UsageGuidelines<br />
**openSUSE: http://en.opensuse.org/openSUSE:Trademark_guidelines<br />
**LibreOffice http://wiki.documentfoundation.org/Marketing/Branding<br />
<br />
====Kexi====<br />
=====Plan: Move plugin tabbed toolbars to plugins=====<br />
*define KexiTabInfo { QString name; QString toolTip; QString whatsThis; QString tabText; QColor tabColor; QWidget* widget; } <br />
*implement virtual QList<KexiTabInfo*> KexiPart::createMenuTabs() const = 0;<br />
*implement createMenuTabs() is kexi form and report plugins.<br />
=====Idea: User feedback module=====<br />
*design & implement user feedback module<br />
**ask users to participate in anonymous gathering of statistical data<br />
**collect user<br />
**user can sign up using nick name to see her contribution!<br />
=====Idea: New developers in Kexi Mobile sub-project=====<br />
SPOILER! Three new Kexi devs are N9* owners now and two of them look forward to contribute something.<br />
=====Practices=====<br />
*Use //! @todo, Q_ASSERT(), see techbase for more hints<br />
=====KoReports and/or mail merge?=====<br />
Mail merge CAN be superset of KoReports BUT the latter less complex code because of lack of ODF dependency and flake editing code that is not all needed for reports.<br />
=====Tasks=====<br />
*Radek: unit tests for Predicate<br />
*Radek: Chart form widget, look as possibilities of sharing code with koreport chart <br />
*Dimitrios: Split function for any view; vertical, horizontal; start with internal (in view, per view); consider external one<br />
*Dimitrios: family of functions<br />
**Quick bugfix: RMB menu should be related to clicked tab, not always the active one<br />
**"New Window" - creates new empty kexi main window with prj navigator and tabbed toolbar<br />
**Detach tab - do the same as in "New Window", close current tab and open it in the new window; never destroy the object's view but just reparent<br />
**Attach tab - close the tab in the "New Window", if the new window is empty, close it, attach the tab to place it was attached to before; never destroy the object's view but just reparent<br />
**Full screen; F11<br />
**Split View, as in Kate's View menu: Previous Split View Shift+F8; Next Split View F8; Split Vertical CTRL+Shift+L; Split Horizontal CTRL+Shift+H; Close Current View CTRL+Shift+R; needs synchronisation when data is changed and filters are applied<br />
**Dual View: Split View with Table or Query on top and related Autoform below - when launched from table or query; Split View with Form on top and related Table view below - when launched from form<br />
<br />
*Open: show records selected for removal in DML queries in color, e.g. red (preview) before actual execution of query<br />
*Add "Translations" node in the project navigator<br />
*Add Format Tab for use in designers<br />
**Use format tools for data mode (rich text edit?)<br />
<br />
*Angry Access Users! <br />
*Send a Cake for 22th anniversary of MSA!<br />
<br />
===Sunday===<br />
*Kexi Integration BoF<br />
*Eating our own Dog food:Why?</div>Pandithttps://community.kde.org/index.php?title=Calligra/Meetings/Fall_2011_meeting&diff=15852Calligra/Meetings/Fall 2011 meeting2011-11-08T04:54:07Z<p>Pandit: /* Attendees */</p>
<hr />
<div>== Calligra Sprint Fall 2011 ==<br />
"Calligra 2.4 Sprint"<br />
<br />
=== When? ===<br />
*11th-13th November 2011<br />
*<strike>[http://www.doodle.com/r5tb9kqaq8be3gnt fill in doodle with available time]</strike><br />
<br />
=== Where? ===<br />
Helsinki, at Nokia.<br />
<br />
*Office:<br />
Nokia<br />
Ruoholahti<br />
Itamerenkatu 11-13<br />
00180 Helsinki, Helsinki, Finland<br />
<br />
When you come to the office please go to the reception and say that you are coming to the Calligra Sprint. There you will get your badge which you will need to wear while you are inside the Nokia office. I will pick you up. You can ask the receptionist to give me a call. Once the reception or the office is closed please give Thorsten or Suresh a call.<br />
<br />
Thorsten Phone +49 151 1483 1665<br />
Shuresh Phone +358 504 837 281<br />
<br />
*Hotel:<br />
Radisson Blu Seaside<br />
Ruoholahdenranta,3<br />
180 Helsinki, Finland<br />
<br />
http://www.radissonblu.com/seasidehotel-helsinki<br />
<br />
*How to get from airport: [http://www.reittiopas.fi/en/?from_in=Airport&from=stop*Helsinki%2FVR%2C+Helsinki*2552450*6673670&via_in=&via=&via_time=0&to_in=Ruoholahti+Chapel%2C+Helsinki&to=poi*Ruoholahti+Chapel%2C+Helsinki*2550944*6672723&hour=16&minute=00&timetype=departure&day=11&month=11&year=2011&cmargin=3&wspeed=70&method=1&stz=0&mc1=0&mc2=0&mc3=0&mc4=0&mc5=0&mc6=0&mc0=0&nroutes=3 link]<br />
<br />
*How to get from hotel to Office:<br />
The Office is only 5 minutes away from the hotel.<br />
http://g.co/maps/g89bp<br />
<br />
*Weather in Helsinki: [http://en.ilmatieteenlaitos.fi/local-weather]<br />
<br />
=== Attendees ===<br />
*See https://sprints.kde.org/sprint/43<br />
*Who needs a visum?<br />
<br />
<br />
Please try and add yourself in order of arrival (note the date)<br />
<br />
<br />
{| border="1"<br />
! Name || Arrives || Leaves<br />
|-<br />
|Thorsten|| Airport 10.11. 15:45 || Airport 13.11. 17:00<br />
|-<br />
|Boud|| Airport 11.11. 13:05 || Airport 13.11. 18:00 <br />
|-<br />
|PierreSt|| Airport 11.11. 14:10 (AY0804) || Airport 13.11. 16:20<br />
|-<br />
|Tanis|| Airport 11.11. 14:10 (AY0804) || Airport 13.11. 17:00<br />
|-<br />
|Brijesh|| Airport 11.11. 14:50 || Airport 14.11. 20:00 <br />
|-<br />
|Smit|| Airport 11.11. 14:50 || Airport 14.11. 20:00<br />
|-<br />
|Shreya|| Airport 11.11. 14:50 || Airport 14.11. 20:10<br />
|-<br />
|Shantanu|| Airport 11.11. 14:50 || Airport 14.11. 20:10<br />
|-<br />
|Aakriti|| Airport 11.11. 14:50 || Airport 14.11. 20:10<br />
|-<br />
|Leinir|| Airport 11.11. 16:20 (BA0794) || Airport 13.11. 17:10<br />
|-<br />
|Stuartmd|| Airport 11.11. 16:20 (BA0794) || Airport 13.11. 17:10<br />
|-<br />
|Boemann|| Airport 11.11. 17:40 (SK712) || Airport 13.11. 18:20<br />
|-<br />
|Pinaraf|| Airport 11.11. 19:20 (AF1098) || Airport 13.11. 16:05<br />
|-<br />
|Jan|| Airport 11.11. 22:05 (AY918) || Airport 13.11. 17:00<br />
|-<br />
| || ||<br />
|}<br />
<br />
=== Links ===<br />
*[http://events.linkedin.com/Calligra-Sprint-2011-II/pub/817995 LinkedIn Event for the Sprint - click "Attending" button if you attend]<br />
*Programme: please fill the [[/Ideas|ideas page]].<br />
*Meeting [[/Minutes/]]</div>Pandithttps://community.kde.org/index.php?title=Calligra/Meetings/Fall_2011_meeting&diff=15851Calligra/Meetings/Fall 2011 meeting2011-11-08T04:45:07Z<p>Pandit: /* Attendees */</p>
<hr />
<div>== Calligra Sprint Fall 2011 ==<br />
"Calligra 2.4 Sprint"<br />
<br />
=== When? ===<br />
*11th-13th November 2011<br />
*<strike>[http://www.doodle.com/r5tb9kqaq8be3gnt fill in doodle with available time]</strike><br />
<br />
=== Where? ===<br />
Helsinki, at Nokia.<br />
<br />
*Office:<br />
Nokia<br />
Ruoholahti<br />
Itamerenkatu 11-13<br />
00180 Helsinki, Helsinki, Finland<br />
<br />
When you come to the office please go to the reception and say that you are coming to the Calligra Sprint. There you will get your badge which you will need to wear while you are inside the Nokia office. I will pick you up. You can ask the receptionist to give me a call. Once the reception or the office is closed please give Thorsten or Suresh a call.<br />
<br />
Thorsten Phone +49 151 1483 1665<br />
Shuresh Phone +358 504 837 281<br />
<br />
*Hotel:<br />
Radisson Blu Seaside<br />
Ruoholahdenranta,3<br />
180 Helsinki, Finland<br />
<br />
http://www.radissonblu.com/seasidehotel-helsinki<br />
<br />
*How to get from airport: [http://www.reittiopas.fi/en/?from_in=Airport&from=stop*Helsinki%2FVR%2C+Helsinki*2552450*6673670&via_in=&via=&via_time=0&to_in=Ruoholahti+Chapel%2C+Helsinki&to=poi*Ruoholahti+Chapel%2C+Helsinki*2550944*6672723&hour=16&minute=00&timetype=departure&day=11&month=11&year=2011&cmargin=3&wspeed=70&method=1&stz=0&mc1=0&mc2=0&mc3=0&mc4=0&mc5=0&mc6=0&mc0=0&nroutes=3 link]<br />
<br />
*How to get from hotel to Office:<br />
The Office is only 5 minutes away from the hotel.<br />
http://g.co/maps/g89bp<br />
<br />
*Weather in Helsinki: [http://en.ilmatieteenlaitos.fi/local-weather]<br />
<br />
=== Attendees ===<br />
*See https://sprints.kde.org/sprint/43<br />
*Who needs a visum?<br />
<br />
<br />
Please try and add yourself in order of arrival (note the date)<br />
<br />
<br />
{| border="1"<br />
! Name || Arrives || Leaves<br />
|-<br />
|Thorsten|| Airport 10.11. 15:45 || Airport 13.11. 17:00<br />
|-<br />
|Boud|| Airport 11.11. 13:05 || Airport 13.11. 18:00 <br />
|-<br />
|PierreSt|| Airport 11.11. 14:10 (AY0804) || Airport 13.11. 16:20<br />
|-<br />
|Tanis|| Airport 11.11. 14:10 (AY0804) || Airport 13.11. 17:00<br />
|-<br />
|Brijesh|| Airport 11.11. 14:50 || Airport 14.11. 20:00 <br />
|-<br />
|Smit|| Airport 11.11. 14:50 || Airport 14.11. 20:00<br />
|-<br />
|Shreya|| Airport 11.11. 14:50 || Airport 14.11. 20:10<br />
|-<br />
|Leinir|| Airport 11.11. 16:20 (BA0794) || Airport 13.11. 17:10<br />
|-<br />
|Stuartmd|| Airport 11.11. 16:20 (BA0794) || Airport 13.11. 17:10<br />
|-<br />
|Boemann|| Airport 11.11. 17:40 (SK712) || Airport 13.11. 18:20<br />
|-<br />
|Pinaraf|| Airport 11.11. 19:20 (AF1098) || Airport 13.11. 16:05<br />
|-<br />
|Jan|| Airport 11.11. 22:05 (AY918) || Airport 13.11. 17:00<br />
|-<br />
| || ||<br />
|}<br />
<br />
=== Links ===<br />
*[http://events.linkedin.com/Calligra-Sprint-2011-II/pub/817995 LinkedIn Event for the Sprint - click "Attending" button if you attend]<br />
*Programme: please fill the [[/Ideas|ideas page]].<br />
*Meeting [[/Minutes/]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15177Kexi/Junior Jobs/Web Browser Form Widget2011-10-06T14:08:17Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
<strike>*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.</strike><br />
<strike>*TODO 008: Add QString title property (read only, will be usable for scripting)</strike><br />
<br />
<strike>*TODO 009: add bool modified property (read only, will be usable for scripting)</strike><br />
<br />
<strike>*TODO 010: add QString selectedText property (read only, will be usable for scripting) </strike><br />
<br />
<strike>*TODO 011: add const QIcon icon property (read only, will be usable for scripting) </strike><br />
<br />
<strike>*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)</strike><br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
<strike>*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.</strike><br />
<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
<br />
====Report Element TODOs====<br />
*(by jstaniek) user has no way to know the report page has been loaded. Perhaps some feedback like QProgressBar in the record navigator bar could be enough. Use QProgressBar::setRange(0, 0) to avoid setting scale (we do not know scale).<br />
*Add '''bool scaledContents''' property; if set the contents of the web page are scaled regardles of the zoom level<br />
*Add '''qreal zoomFactor''' property<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15176Kexi/Junior Jobs/Web Browser Form Widget2011-10-06T14:07:44Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
<strike>*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.</strike><br />
<strike>*TODO 008: Add QString title property (read only, will be usable for scripting)</strike><br />
<br />
<strike>*TODO 009: add bool modified property (read only, will be usable for scripting)</strike><br />
<br />
<strike>*TODO 010: add QString selectedText property (read only, will be usable for scripting) </strike><br />
<br />
<strike>*TODO 011: add const QIcon icon property (read only, will be usable for scripting) </strike><br />
<br />
<strike>*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)</strike><br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
<strike>*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.</strike><br />
<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
<br />
====Report Element TODOs====<br />
*(by jstaniek) user has no way to know the report page has been loaded. Perhaps some feedback like QProgressBar in the record navigator bar could be enough. Use QProgressBar::setRange(0, 0) to avoid setting scale (we do not know scale).<br />
*Add '''bool scaledContents''' property; if set the contents of the web page are scaled regardles of the zoom level<br />
*Add '''qreal zoomFactor''' property<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15175Kexi/Junior Jobs/Web Browser Form Widget2011-10-06T14:03:38Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
<strike>*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.</strike><br />
<strike>*TODO 008: Add QString title property (read only, will be usable for scripting)</strike><br />
<strike>*TODO 009: add bool modified property (read only, will be usable for scripting)</strike><br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
<strike>*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)</strike><br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
<strike>*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.</strike><br />
<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
<br />
====Report Element TODOs====<br />
*(by jstaniek) user has no way to know the report page has been loaded. Perhaps some feedback like QProgressBar in the record navigator bar could be enough. Use QProgressBar::setRange(0, 0) to avoid setting scale (we do not know scale).<br />
*Add '''bool scaledContents''' property; if set the contents of the web page are scaled regardles of the zoom level<br />
*Add '''qreal zoomFactor''' property<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15174Kexi/Junior Jobs/Web Browser Form Widget2011-10-06T14:02:37Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
<strike>*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.</strike><br />
<strike>*TODO 008: Add QString title property (read only, will be usable for scripting)</strike><br />
<strike>*TODO 009: add bool modified property (read only, will be usable for scripting)</strike><br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
<strike>*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)</strike><br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
<br />
====Report Element TODOs====<br />
*(by jstaniek) user has no way to know the report page has been loaded. Perhaps some feedback like QProgressBar in the record navigator bar could be enough. Use QProgressBar::setRange(0, 0) to avoid setting scale (we do not know scale).<br />
*Add '''bool scaledContents''' property; if set the contents of the web page are scaled regardles of the zoom level<br />
*Add '''qreal zoomFactor''' property<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15173Kexi/Junior Jobs/Web Browser Form Widget2011-10-06T13:50:08Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
<strike>*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.</strike><br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
<br />
====Report Element TODOs====<br />
*(by jstaniek) user has no way to know the report page has been loaded. Perhaps some feedback like QProgressBar in the record navigator bar could be enough. Use QProgressBar::setRange(0, 0) to avoid setting scale (we do not know scale).<br />
*Add '''bool scaledContents''' property; if set the contents of the web page are scaled regardles of the zoom level<br />
*Add '''qreal zoomFactor''' property<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15077Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T14:23:20Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15076Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T13:43:03Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
<strike>*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)</strike><br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
<br />
<strike>*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))</strike><br />
<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
*TODO 018: in WebBrowserWidget.cpp: please finish reformatting the code according to the guidelines at<br />
http://community.kde.org/Kexi/Junior_Jobs/Web_Browser_Form_Widget#Coding_standards -- what left is especially:<br />
*some indentation (spaces not tabs)<br />
*if blocks like:<br />
if(m_view->history()->canGoForward())<br />
{<br />
m_view->history()->forward();<br />
}<br />
<br />
should be:<br />
if (m_view->history()->canGoForward()) {<br />
m_view->history()->forward();<br />
}<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15075Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T13:29:43Z<p>Pandit: /* Kexi Report Element */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)<br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
*TODO 018: in WebBrowserWidget.cpp: please finish reformatting the code according to the guidelines at<br />
http://community.kde.org/Kexi/Junior_Jobs/Web_Browser_Form_Widget#Coding_standards -- what left is especially:<br />
*some indentation (spaces not tabs)<br />
*if blocks like:<br />
if(m_view->history()->canGoForward())<br />
{<br />
m_view->history()->forward();<br />
}<br />
<br />
should be:<br />
if (m_view->history()->canGoForward()) {<br />
m_view->history()->forward();<br />
}<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
<strike>*The element should inserted into a separate report plugin</strike><br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15070Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T12:42:59Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.</strike><br />
<strike>**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar</strike><br />
<strike>**TODO 006.2: Show the bar when loadStarted() signal is emitted</strike><br />
<strike>**TODO 006.3: Hide when loadFinished()</strike><br />
<strike>**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)<br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))<br />
<strike>*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:</strike><br />
<strike>inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.</strike><br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
*TODO 018: in WebBrowserWidget.cpp: please finish reformatting the code according to the guidelines at<br />
http://community.kde.org/Kexi/Junior_Jobs/Web_Browser_Form_Widget#Coding_standards -- what left is especially:<br />
*some indentation (spaces not tabs)<br />
*if blocks like:<br />
if(m_view->history()->canGoForward())<br />
{<br />
m_view->history()->forward();<br />
}<br />
<br />
should be:<br />
if (m_view->history()->canGoForward()) {<br />
m_view->history()->forward();<br />
}<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
*The element should inserted into a separate report plugin<br />
<br />
TODO<br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15069Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T12:41:06Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
<strike>*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)</strike><br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
<strike>*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger</strike><br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
<strike>*TODO 006: Add progress bar widget at the right hand of the web toolbar.<br />
**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar<br />
**TODO 006.2: Show the bar when loadStarted() signal is emitted<br />
**TODO 006.3: Hide when loadFinished()<br />
**TODO 006.4: do not display the bar when there is no page loading process</strike><br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)<br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))<br />
*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:<br />
inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.<br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
*TODO 018: in WebBrowserWidget.cpp: please finish reformatting the code according to the guidelines at<br />
http://community.kde.org/Kexi/Junior_Jobs/Web_Browser_Form_Widget#Coding_standards -- what left is especially:<br />
*some indentation (spaces not tabs)<br />
*if blocks like:<br />
if(m_view->history()->canGoForward())<br />
{<br />
m_view->history()->forward();<br />
}<br />
<br />
should be:<br />
if (m_view->history()->canGoForward()) {<br />
m_view->history()->forward();<br />
}<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
*The element should inserted into a separate report plugin<br />
<br />
TODO<br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15068Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T12:39:27Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<strike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)<br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger<br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
*TODO 006: Add progress bar widget at the right hand of the web toolbar.<br />
**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar<br />
**TODO 006.2: Show the bar when loadStarted() signal is emitted<br />
**TODO 006.3: Hide when loadFinished()<br />
**TODO 006.4: do not display the bar when there is no page loading process<br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)<br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))<br />
*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:<br />
inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.<br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
*TODO 018: in WebBrowserWidget.cpp: please finish reformatting the code according to the guidelines at<br />
http://community.kde.org/Kexi/Junior_Jobs/Web_Browser_Form_Widget#Coding_standards -- what left is especially:<br />
*some indentation (spaces not tabs)<br />
*if blocks like:<br />
if(m_view->history()->canGoForward())<br />
{<br />
m_view->history()->forward();<br />
}<br />
<br />
should be:<br />
if (m_view->history()->canGoForward()) {<br />
m_view->history()->forward();<br />
}<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
*The element should inserted into a separate report plugin<br />
<br />
TODO<br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandithttps://community.kde.org/index.php?title=Kexi/Junior_Jobs/Web_Browser_Form_Widget&diff=15067Kexi/Junior Jobs/Web Browser Form Widget2011-09-26T12:38:44Z<p>Pandit: /* Form Widget TODOs */</p>
<hr />
<div>Web browser widget is a GUI element that displays web page and allows for navigation experience similar to regular web browsers. <br />
<br />
Proposed and mentored by [[User:Jstaniek|Jstaniek]] 22:37, 17 February 2011 (UTC)<br />
<br />
{{Note|This task is assigned within the [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE] program. It was available within sponsored [http://community.kde.org/GSoC/2011/Ideas#Project:_Add_Web_pages_elements_to_Kexi Google Summer of Code 2011 program]. See [http://community.kde.org/GSoC details].}}<br />
<br />
See also: [[../Map_Browser_Form_Widget|Map Browser Form Widget]] Junior Job.<br />
<br />
==Definitions==<br />
*See [[Kexi/Junior_Jobs/Map_Browser_Form_Widget#Definitions|Definitions]]<br />
<br />
==The Goals==<br />
*Deliver extra "Web Browser" widget compatible with Kexi Forms.<br />
*Deliver extra "Web Browser" report element compatible with Kexi Report.<br />
*<strike>Deliver "web" element as a flake shape for any Flake-capable app.</strike><br />
<br />
==Requirements==<br />
<br />
===Kexi Form Widget===<br />
*Design and implement the widget and provide it through separate factory using the kexi widget factory API<br />
*All the code should be stored in this tree in calligra/:<br />
kexi/plugins/forms/widgets/webbrowser/CMakeLists.txt<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserFactory.cpp<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.h<br />
kexi/plugins/forms/widgets/webbrowser/WebBrowserWidget.cpp<br />
kexi/plugins/forms/widgets/webbrowser/kformdesigner_webfactory.desktop<br />
<br />
*To implement the widget derive from QWebView class, part of the QtWebKit module<br />
*Do not export the any class, just export the plugin using K_EXPORT_KEXI_FORM_WIDGET_FACTORY_PLUGIN(WebWidgetFactory, webbrowser) in WebBrowserFactory.cpp<br />
*Class name of the widget should be KexiWebBrowser <br />
*User-visible name of the widget should be "Web Browser"<br />
*Name prefix of the widget should be "web"<br />
*User-visible description of the widget should be "Web browser"<br />
*class name of the factory should be WebBrowserFactory, and the name passed to the KFormDesigner::WidgetFactory constructor should be "webbrowser"<br />
*provide translations (i18n()) for all user-visible property names in the factory constructor (see StdWidgetFactory for reference), e.g.<br />
m_propDesc["url"] = i18n("Address");<br />
*the build should be allowed for webbrowser/CMakeLists.txt only if the QtWebKit module is present, try to check it using cmake; usually the QtWebKit is present but it is not always the case<br />
*Testing: proper implementation should after installing provide web browser widget within the widget palette of "Form Design" tab. Inserting the web browser widget should show it, changing properties through the property editor should work, switching to data view mode should display the browser properly and the browser's contents (web page) should be available for zooming (using the wheel) and panning (using the mouse move). All these mouse actions should be disabled on the widget in design mode, so the user is able to drag and drop the widget within the form.<br />
<br />
====Hints====<br />
*The directory of the forms framework is kexi/kformeditor/, standard factory is implemented in kexi/formeditor/<br />
*The widget factory API is provided by the KFormDesigner::WidgetFactory base class. Inherit it as StdWidgetFactory does. <br />
*You can test QWebView widget in Qt Designer too.<br />
<br />
====Data-awarness====<br />
*Data binding: the "url" property should be made available for data bindings, what would make the web browser widget data-aware<br />
**This means that the web widget accept data source binding as the "text box" widget in Kexi Forms does.<br />
**The web widget should bind (two-way: read, write) the data source (of type string) to the url property<br />
**Look at KexiDBCheckBox code which binds to a column of database (of boolean type): kexi/plugins/forms/widgets/kexidbcheckbox.h to see what to inherit and what to implement to enable bindings<br />
**When data-awarness is properly declared in the web widget's class, Kexi will recognize that automatically and the column binding GUI will appear on the right-hand pane whenever web widget is selected in Kexi Form Designer.<br />
**Note: to use the data-aware interfaces you need to '''move''' the webbrowser/ directory out of the formeditor/factories/ directory to kexi/plugins/forms/widgets/ directory, otherwise it won't compile. Basically, code in kexi/plugins/forms/ depends on kexi/formeditor/, '''not the other way round'''. Sorry about that. Do not forget to provide proper kformdesigner_webfactory.desktop and install it, as other form widget factories do.<br />
<br />
====Data-awarness - "content" extension====<br />
(initiated by Adam Pigg, explained by [[User:Jstaniek|Jstaniek]] 20:05, 20 June 2011 (UTC))<br />
*Data binding, second option: the "content" property should be made available for data bindings<br />
**it is of string type and sets the html markup of the page using ''void QWebView::setHtml( const QString & html, const QUrl & baseUrl = QUrl() )''<br />
**TODO: the method has ''baseUrl'' argument: external objects such as stylesheets or images referenced in the HTML document are located relative to baseUrl. But this means the "content" property would not define all the content, media files, code and style sheets have to be provided.<br />
**Possible solution: have the full content (compressed snapshot of a web page or pages in a BLOB field)<br />
**For this Kexi's web widget would need to provide functions to users for saving snapshot of a web page in expected format (archived snapshot)<br />
**TODO: do some research for open formats for such a snapshot, find one for possible re-use, finc code for possible re-use<br />
<br />
====Form Widget TODOs====<br />
Notes:<br />
*Please prepend '''DONE''' below for any item that is finished.<br />
*For many tasks described below, look at the [http://code.google.com/p/arora/ Arora] browser's source code for reference use of QtWebKit API<br />
<br />
Requirements:<br />
<srtike>*TODO 001: Improve back/forward buttons: use QPair<KGuiItem, KGuiItem> KStandardGuiItem::backAndForward() to get KGuiItem instances, then use KPushButton(KGuiItem) ctors to create buttons with standard icons and texts as in konqueror</strike><br />
*TODO 002: Add "Stop" action after "Reload" button. Use KPushButton ctor with KStandardGuiItem::stop() argument; link the button to the stop action of QWebPage, to trigger action use QWebPage::triggerAction(QWebPage::Stop)<br />
*TODO 003: Use QWebHistory * QWebPage::history() const to track history buffer and add back/forward histories for back/forward buttons.<br />
*TODO 004: Look at history (QWebPage::history()) and disable/enable back/forward button when back/forward action is impossible/possible to trigger<br />
*TODO 005: Enable Reload/Stop/Back/Forward buttons only when there is content set<br />
*TODO 006: Add progress bar widget at the right hand of the web toolbar.<br />
**TODO 006.1: Use QWebPage::loadProgress ( int progress ) signal to update the progress bar<br />
**TODO 006.2: Show the bar when loadStarted() signal is emitted<br />
**TODO 006.3: Hide when loadFinished()<br />
**TODO 006.4: do not display the bar when there is no page loading process<br />
*TODO 007: Create zoomFactor property in WebBrowserWidget and then have method qreal WebBrowserWidget::zoomFactor() { return m_view->zoomFactor(); } and similarly for the setZoomFactor() setter. Since QWebView is a component of the WebBrowserWidget, we need to 'pull down' properties from QWebView by hand to WebBrowserWidget.<br />
*TODO 008: Add QString title property (read only, will be usable for scripting)<br />
*TODO 009: add bool modified property (read only, will be usable for scripting)<br />
*TODO 010: add QString selectedText property (read only, will be usable for scripting)<br />
*TODO 011: add const QIcon icon property (read only, will be usable for scripting)<br />
*TODO 012: add qreal textScale property (r/w, uses textSizeMultiplier/setTextSizeMultiplier methods)<br />
*TODO: 013: in WebBrowserWidget.cpp: Use m_view->forward() directly, without history() and without checking any conditions (these are checked already by Qt)<br />
*TODO 014: in WebBrowserWidget.cpp: Code clarity note: always use static connect( const QObject * sender, const char * signal, const<br />
QObject * receiver, const char * method) i.e. with 4 arguments to avoid mistakes. So fix 7 connect() lines.<br />
*TODO 015: in WebBrowserWidget.cpp: Code simplicity note: you do not need to add slots to connect signal to signal, e.g. connect(m_backButton, SIGNAL(clicked()), this, SIGNAL(goBack()))<br />
*TODO 016: Improvement for the toolbar: implement updateToolbar() in the toolbar class:<br />
inside: call setEnabled(history()->canGoBack()) for back button, do similarly for the forward button.<br />
*TODO 017: Improvement for the toolbar: add url bar of class [http://api.kde.org/4.0-api/kdelibs-apidocs/kio/html/classKUrlComboBox.html KUrlComboCox]<br />
**TODO 017.1: Update contents of the bar in updateToolbar() defined in point whenever your current url changes (in setUrl() and for signal linkClicked())<br />
*TODO 018: in WebBrowserWidget.cpp: please finish reformatting the code according to the guidelines at<br />
http://community.kde.org/Kexi/Junior_Jobs/Web_Browser_Form_Widget#Coding_standards -- what left is especially:<br />
*some indentation (spaces not tabs)<br />
*if blocks like:<br />
if(m_view->history()->canGoForward())<br />
{<br />
m_view->history()->forward();<br />
}<br />
<br />
should be:<br />
if (m_view->history()->canGoForward()) {<br />
m_view->history()->forward();<br />
}<br />
<br />
===Kexi Report Element===<br />
*Expose the web to Kexi Reports via the KoReports official API for elements<br />
*The element should inserted into a separate report plugin<br />
<br />
TODO<br />
<br />
===Flake Shape===<br />
'''Update (jstaniek, August 2011): web flake shape is already part of Calligra so this subtask is dropped.'''<br />
<strike><br />
*expose the maps as a flake shape (for any Flake-capable app)<br />
*add support for so called Replacement Images, compare:<br />
"The OpenDocument Format contains a great idea: so called Replacement Images. <br />
The idea is that when you have an embedded object in an ODF file, perhaps not <br />
all applications can handle that particular kind of embedded object.<br />
<br />
So in addition to the object itself, a saving application has the option to save <br />
an extra image of the object alongside of the object itself. That way, the loading <br />
application can at least show the contents of the object to the user even if he <br />
or she cannot edit the object. " [http://ingwa2.blogspot.com/2011/05/starview-metafiles-in-calligra.html more]<br />
</strike><br />
<br />
==After implementation==<br />
TODO: we have to update calligra/README.PACKAGERS document to indicate that the plugin must be packaged separately to avoid hard dependency on QtWebKit<br />
<br />
==Development==<br />
This is a notepad for development<br />
<br />
===Coding standards===<br />
*[http://techbase.kde.org/Policies/Kdelibs_Coding_Style]<br />
<br />
===Assigned Developers===<br />
*Shreya Pandit (shreya.pandit25 at gmail.com) within [http://blog.lydiapintscher.de/2011/04/25/announcing-season-of-kde-2011/ Season of KDE]<br />
<br />
===Source Code Location===<br />
The development happens in the '''calligra''' repository: [http://community.kde.org/Calligra/Building/Building_Calligra#Getting_the_source_code], branch '''kexi-web-Shreya'''. Once it's ready for review, it will be provided for review at http://git.reviewboard.kde.org. Then the code will find its wat to the master branch of calligra.<br />
<br />
[[Category:Kexi Junior Jobs]]</div>Pandit