The Plasma ToolKit Plasma is a design for a new X11 toolkit, this is version 0.0.1 of it. - Be fully Fontsensitive The plasma gui will render its programs display based on the fontsize of the font the user has chosen and adapt to it, it will not force the user to use a predefined font size. When a fontsize is changed its spacing and widget size will change accordingly. Plasma will use the STSF fontrender framework. - Internationalized Plasma programs adapt automaticely to the chosen language setting by help of a local library that handles translations and local specific settings. It means also that it should be able to handle right to left, left to right and top to bottom text order. - Be fully configurable Plasma uses a four tired configuration approache, it hase a global configuration direction in its installation base that holds the defaults, it uses a global configuration store in /etc for system wide custon defaults, and lastly a user dependant configuration store in the user home directory. To hold temporal options a store in /tmp will be used. A user can make changes to the configuration globaly for all programs, or down to a single window of a single program. All changes to plasma should be able to be made on the fly, without having to shutdown the program to take effect. Configuration options will be stored in plaintext files. To incorporate left handed users that actualy use the mouse with the left hand it should allow to set mouse buttons, dialog buttons to be reorderded to those needs. Also configuration should be handled by a single configuration program in gui mode, where configuration options for the different widget classes can be set interactively. A program that calls the preference application should give it the list of all widget classes it uses, but not from widgets it doesn't uses, so the user can see only the widgets that are in sue by the program, and don't have to guess which ones she has to edit. - Themable Plasma allows the user to switch out all basic elemets of the toolkits graphical presentation against user selectable graphics via the preference application. - Fast Extra efford should be taken to make and keep plasma fast. - Consistent and pleasant to the eye. Plasma programs will follow the plasma interface guidelines, which will be deployed by the plasma layout engine, to provide an consistant feel and behavior for all programs. - Multithreaded Any plasma program should be multithreaded to make it more responsive and take advantage of multi cpu and multi core machines. - Extentable The plasma toolkit utilizes loadable modules and widgets at runtime to extend its capabilities. Example, in a file save/open dialog, loadable modules can be used to provide extra methods of accessing files, be it via ssh, rsh, webdav, http, ftp and so on. - Stable The toolkit should never be the reason for a crash in a stable release. - Make Gui design easy for programmers Plasma should make programming a gui easy, it should handle as much as possible of the layouting itself, allowing the programmer to concentrate on the actual program without worrying to much about the presentation. - Provide a consistend gui across all plasma apps - Deploy hardware accelleration Plasma should use available hardware accelleration to make its program interfaces more responsive. The most likely candiate for this would be opengl. - Provide a inter process communication interface The IPC should allow remote control of a program, as minium it should allow that the program can remotely told to shutdown gracefully. Other uses can be to tell a program to load a file, like telling a webbrowser to load a url or a text editor to load a textfile, a email program to open the compose dialog with an email address as to: field and so on. LUa scripting looks like a good candiate to be used for this. - fully drag and drop Plasma will feature full drag and drop support, which should be idealy compatible with already present drag and drop methods, most likely candidate seems XDND. - Widgets A widget is a runtime loadable module that is used to compse a programs gui. There are several widgets for use which make up the windows a program can display: - Non interactive widgets are used as display areas and don't accept user input -- Busyindicator The busyindicator is used to indicate the program is busy working and can't processes any user input at the time. -- Progress meter The progress indicator is used as feedback device to indicate the user the program is working, but still availble for input. -- Textdisplayfield a textdisplayfield is used to present text which lacks any form of interaction with the user, even copying text from it is not possible. - interactive widgets are used to interact with the user -- Button A button is used to interact with the user, when a button is pressed its action will be excuted immediatly. -- Textfield A textfield is use to display text to the user. It is an interactive widgets because it allows a copy and paste operation from it, unlike the textdisplayfield which doesn't allows this. -- Textinput field A textinputfield is used to enter text. -- Pathfield The pathfield is a specialized textinput field which is used to present a path where each path element is also a clickable button wich allows mouse and keyboard navigation. The path widget also provides a plasma wide bookmark system for paths, so a user can store her most used paths and access them more easily. -- Texteditorfield The texteditorfield is used for text editing operations which extends the limited scoop of the textinput field. Something like an embeeded nedit would be very nice here. -- Video field A video field is used to present a video stream for the user, it is usualy coupled with other widgets to allow the manipulation of the video streams playback. IT utilizes if possible extended hardware acceleration to help the video playback. -- Picture field A picture field is used to present a graphic. -- Tree A tree is used to presend information to the user in a collapsible tree. -- Checkmark A checkmark is used to present the user with an yes or no option field. It incorporates a textfield or a textdisplayfield, a pixmap field and the checkmark. -- Radiobutton A radiobutton is used to present a list of options from which the user can chose which are mutaly exclusive. -- Shell widget A shell widget provides a one line command line interface. -- Terminal widget the terminal widget provides a full interactive terminal. An embeeded rxvt would be nice here. -- Slider a slider provides a way to make gradual adjustments over a setable scale. The slider can have three distinctive different appereances: - compact mode, only a single button is displayed with the valude of the slider in the button itself when clicked on a slider box pops up in which the button can be moved, the change in value is reflected in the button. - condensed mode, its like the compact mode, but the slider box is also drawn by default. - spread mode, like the condensed mode, but the value is displayed beside the slider, not inside it. -- Toolbar A toolbar is used to present a row of selectable operations by the user, it can hold, text, pixmaps or both, ech click should be interpreted like a button and the corresponding action has to be executed. But a toolbar is more then a rwo of pretty buttons, its contends and arangement can be changed by the user or program on the fly to adept to different tasks. A toolbar should be drag and dropable to attach it to different sides of the window, or turn it into a window all by itself. -- Directorybrowser The directory browser allows to display the contents of a directory and features several modes to do so, a big icon mode, a small icon mode, a detail mode, a text mode, a tree mode and should be able to switch over to the terminal widget on the fly and back. -- Fold menus Fold menus are used to present a list of choseable options from which only one can be active at a time, the list is hiden and displaying the current active option to the user, the full list will unfold when the user clicks the widget with the left mouse button. -- scrollbars Scrollbars are used to scroll through a windows contents if the content is to big to be displayed in the current window size. A scrollbar should automaticly adapt to the size of the contents an be ghosted out when it can't be used. A scrollbar should have automaticly set buttons to allow the user to scroll through the contents. If space is limited those buttons should be placed together automaticaly just at the bottom of the scrollbar and no slider should be presented. If the space is bigger, for like more then 5 rows of display space, scroll buttons should be placed at the top and the bottom of the scrollbar for moving the content in both directions, also a slider should be present to allow for fast movement through the content. A click in the scrolbar container should scroll the content by one display row page in that direction, minus one row. -- Listview widget The listview widget is used to present the user with a sortable list of information, for example the concents of a mailbox in an email program. -- custom widgets Custom widgets allows the plasma toolkit to be extended on the fly, custom widgets should be runtime loadable modules and come with a runtime loadable preference module too, so the user can change the look of the widget. Example, a html display widget. -- Divider The divider widget allos to seperate different parts of container widgets to be seperated, and resized by the user to give the containers on each side of the divider a flexible space to be displayed in to match the users preference. - container widgets are used to group interactive and non interactive widgets together. -- Menu the menu widget is used to display a collection of choices to the user, it can be used in two ways, once as program menu which resides at the top of the window frame and as a popup menu which appears at the coursor position. Menus are activate by the right mouse button and stay open as long as that button is pressed. Options from the menu may be chosen in two ways, by releasing the right mouse button over an entry, or by selecting it with an left click while holding the right botton down. the second method allows for a number of menu options to be chosen, which should be processed in the order they where clicked by the program as if they where chosen individualy. A menu can incorporate several other widgets, like checkmarks and pixmap fields alongside textfields. In addition a menu can be detachable from its parent window and become a window itself. Menus can offer a way to be reconfigurable by the user to, to allow a customization by the user to better reflect her workstyle or most used menu options to be faster accessible. A program menu should always have a file, edit, preference and help options. dialogs and subwindows of a program should have a preference and help options -- Frame A frame groups a number of widgets together for logical purposes, its drawn with a small frame around them which can incorporate a title field using text or a pixmap. -- Tab A tab is a mthod to group several widegts together and allows replacing them with other widegts to switch the content of the tab. Its usualy displayed by a frame around it and a row of tabs aligned along side one side of the tab container for switching betwen different tabs, it can also provides buttons to create new tabs or remove old tabs. - the window widget is used to build the actual window of a program, it incorporates the container widgets into it. The window widgets provides hints for the window manager as to which window decoration, buttons and size and stacking order to use. - icon the icon widget is a small specialized window, that presents a pixmap to the user, which can be accomblished by a textfield. It also provides a popup menu that allows the user to interact with it. An icon should act as drag and drop target for files. Icons should be resizeable on the fly, prefered as vector icons. - Keybindings Plasma provides consistend keybings for all programs, which are customizable by the user over the preference program - Standard dialogs All dialog windows should open under the mouse coursor to minimize mouse movement. Dialogs can be blocking to prevent a user from interacting with the program until a respons is given, but that should be limited to occasions where its important that the request must be answered by the user first. The authenticationselector is a good candidate for a modal dialog while a information window should be never a blocking dialog, unless its a crash dialog. Plasma provides several standard dialogs which should be used by plasma programs. A dialog window should always allow the user to cancel it, gain more details on the kind of the dialog via a help menu, and a selector dialog shoul always be resizeable and remember the chosen size. To disdinguishe a dialog from a normal window, the window decoration is minimal providing no close button. -- Fileselector The fileselector is used to open and save files interactively. It acts as drag and drop target. The fileselctor will remember for each application the last used path. -- Colorselector The colorselector is used to allow for color adjustments by the user, it will use modules to provide different color models to be used in the selection progress. -- Fontselector the fontselector lets the user chose its fontsettings, it will provide the user with a filterable list of available fonts, a preview of the seleted fonts. -- Authenticationselector The authenticationselector is used for requestion a different authentication form the user by a program, for example for a remote host, or superuser rights. -- Information A information dialog is used to display information to the user, that ranges from warnings about failures, like a not accepted authentication to information windows with a progressbar which keeps the user informed about a subprocess progress with a task. It can also be used in case of a program crash to allow the user to chose what to do, stack trace, dump core etc. A information dialog should provide a clear text message that clearly descripes the case of the information, in case the user wants detailed information a button is provided that gives out technical details, like a stack trace, a servers error response etc. -- Printing The printing dialog is used to print files via the systems printing transport. CUPS as underlaying printing engine should do nicely, with the printing dialog as frontend for the user. -- Startup notification Every plasma gui application does provide a startup notification which is displayed till the application is ready to recive user input. This notification however does not block the user from doing anything during that time. it is only presented as feedback to allow the user to recognize that the application is starting up and that the system has correctly interpreted the user wish to start an application. - Entities Plasma uses so called entities to provide its functionality, each entity expands all plasma programs that can use the entitites functions. The goal of entities is to present plasma applications with a single api for handling differen needs with the entity engine handling the translation. Which also frees program developers of the burden to code to all those different APIs, instead they just have to code to the plasma entity API, and in return get their programs extended at runtime with the capabilities of newly added entities. Entities should handle endien and other conversions as needed, keeping plasma applications endian neutral. Hardware acceleration should be provided where possible. There are several core entities: -- Loaders Loaders provide plasma programs with functions to load files of different type each file type has its own loader, jpeg, gif, png images, text files, doc files etc. -- Savers Savers are like loaders, but for saving files. -- Viewers Viewers are display widgets that can be used by any application to display files for that a loader exists. -- Transports Transports are used to get the file from and to the program, the most basic transport is the file transport, other transport can be such as ssh, rsh, ftp, webdav etc Printing transport sends a programs output to a printing system. -- Authenticators A authenticator is a entity used to alloa a plasma application to ask the user for a authentication, it can be a kerberos module, a simple passwd query, a nis query, ldap query etc. This allows plasma applications to have to deal only with one api to present user credentials instead of a different ones for each kind of authentication mechanism in use. - Core Plasma Applications The plasma toolkit provides a collection of core applications, which serve as demonstration and foundation kit. -- Viewer The viewer is a simple viewer for plasma loaders and display widgets, it can display and filetype for that a loader and a viewer exists, and can convert between formats as long as a saver exists. This includes textfiles, video streams, audio files etc. -- Preference The plasma preference tool is the core of the visible user interface and allows the user to customize the appearance and behavior or plasma applications to her wishes. -- Privacy The privacy application manages plsama wide authentication information storage. Its setup dialog includes a password, a user defined question and answer to be presented to the user in case she forgets her own master password. - General stuff User glickable controls has yo apear raised Text and other inout fields have to lowered non editable fields, like headers and titles, display fields are neither raised nor lowered. Tabs should always be limited to a single row, multi row tabs are bad for consitant placement of elements. Active elements that recive the users input should be marked by a small, 1 pixel width border in a high contrast color. example, the default button in a dialog is surrounded by a red border, or the list view in an email program is surrounded by it to indicate that input and actions are targetet at this list, and not the message view. - Filesystem layout -- configuration stores $PREFIX/plasma/config/global /config/apps/individualapplication /pixmaps /widgets /scripts where prefix is one of custom, etc $HOME and /tmp custom/plasma/bin /libs /libs/entities/loaders /savers /transports /authenticators /viewers Advanced plasma Advanced plasma should allow the gui and the program logic to be able to be seperated to allow both to be executed on different machines. roadmap: 0.0.1 - 0.1 Concept design 0.11 - 0.99 coding 1.00 Plasma should be able to run and the preference program should be working and able to be used to configure plasma applications. It should now be possible to start writting usable applications for plasma. 2.00 Functional plasma environment with core applications Plasma concept by Barbie LeVile - 04.04.2004 Version 0.0.1