[PC-BSD Commits] r17715 - pcbsd-projects/PCDM

svn at pcbsd.org svn at pcbsd.org
Thu Jul 12 13:33:26 PDT 2012


Author: kenmoore
Date: 2012-07-12 20:33:26 +0000 (Thu, 12 Jul 2012)
New Revision: 17715

Modified:
   pcbsd-projects/PCDM/pcdm-backend.h
   pcbsd-projects/PCDM/pcdm-gui.cpp
   pcbsd-projects/PCDM/pcdm-gui.h
   pcbsd-projects/PCDM/pcdm-themes.cpp
   pcbsd-projects/PCDM/pcdm-themes.h
   pcbsd-projects/PCDM/sample.pcdm-theme
Log:
Add the beginnings of auto-generating the UI for PCDM, also clean up the theme configuration file a bit.



Modified: pcbsd-projects/PCDM/pcdm-backend.h
===================================================================
--- pcbsd-projects/PCDM/pcdm-backend.h	2012-07-12 17:37:49 UTC (rev 17714)
+++ pcbsd-projects/PCDM/pcdm-backend.h	2012-07-12 20:33:26 UTC (rev 17715)
@@ -16,6 +16,7 @@
     static QStringList keyVariants(const QString &, QStringList &savedKeyVariants);
     static void changeKbMap(QString model, QString layout, QString variant);
     static void loadConfFile(QString, QList<QPixmap>, QStringList);
+    static QStringList getSystemUsers();
 
 };
 

Modified: pcbsd-projects/PCDM/pcdm-gui.cpp
===================================================================
--- pcbsd-projects/PCDM/pcdm-gui.cpp	2012-07-12 17:37:49 UTC (rev 17714)
+++ pcbsd-projects/PCDM/pcdm-gui.cpp	2012-07-12 20:33:26 UTC (rev 17715)
@@ -2,11 +2,14 @@
 #include <QTimer>
 #include <QGraphicsPixmapItem>
 
+#include "pcdm-gui.h"
 #include "pcdm-backend.h"
+#include "pcdm-themes.h"
 
-PCDMgui::PCDMgui(QWidget *parent) : QWidget(parent)
+PCDMgui::PCDMgui()
 {
-    setupUi(this);
+    //Create the GUI based upon the current Theme
+    createGUIfromTheme();
 
     connect(abortButton, SIGNAL(clicked()), this, SLOT(slotAbort()));
     connect(backButton, SIGNAL(clicked()), this, SLOT(slotBack()));
@@ -40,6 +43,153 @@
     //delete ui;
 }
 
+void PCDMgui::createGUIfromTheme(){
+  //Create the Toolbar
+  QToolbar* toolbar;
+    //Put it in the proper location
+    this->addToolBar( Theme::toolbarLocation(), toolbar );  //use the theme location
+    toolbar->setMovable(FALSE);
+    toolbar->setFloatable(FALSE);
+    //Set the default style and icon sizes
+    toolbar->setToolButtonStyle( Theme::toolbarStyle() );  //use the theme style
+    toolbar->setIconSize( QSize(Theme::toolbarSizeWidth(),Theme::toolbarSizeHeight()) ); //use theme size
+
+  //Populate the Toolbar with items
+    //----Locale Switcher
+
+    //----Keyboard Layout Switcher
+
+    //----System Shutdown/Restart
+    QToolButton* systemButton = new QToolButton(toolbar);
+    QMenu* systemMenu;
+    systemMenu->addAction( tr("Restart"),this, SLOT(slotRestartComputer()) );
+    systemMenu->addAction( tr("Shut Down"), this, SLOT(slotShutdownComputer()) );
+    systemMenu->addAction( tr("Close PCDM"), this, SLOT(slotClosePCDM()) );
+    systemButton->setMenu(systemMenu);
+    systemButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
+
+
+  //Create the grid layout
+  QGridLayout* grid;
+
+  //Populate the grid with items
+    //----Header Image
+    QString hLayout = Theme::objectIconStyle("header");
+    QLabel* header; 
+    if(hLayout!="disabled"){
+      header->setPixmap( QPixmap( Theme::objectIconPath("header") ) );
+      grid->addWidget( header, Theme::objectLocationRow("header"), \
+                      Theme::objectLocationColumn("header"), \
+                      Theme::objectLocationRowSpan("header"), \
+                      Theme::objectLocationColumnSpan("header"), Qt::AlignCenter);
+    }
+
+    //----Username Input collection
+    QString pLayout = Theme::objectIconStyle("user");
+    QComboBox* unameline;
+    unameline->addItems(Backend::getSystemUsers());
+    unameline->setCurrentIndex(0); //select the first username on the list
+    if(pLayout == "disabled"){
+      //Icon Disabled - just add widget to the grid
+      grid->addWidget( unameline, Theme::objectLocationRow("user"), \
+                      Theme::objectLocationColumn("user"), \
+                      Theme::objectLocationRowSpan("user"), \
+                      Theme::objectLocationColumnSpan("user"), Qt::AlignCenter); 
+    }else{
+      //Put the Icon and Widget in their own layout before adding to the main grid
+      int rI,rW,cI,cW;
+      if(pLayout=="above"){ rI=0; cI=0; rW=1; cW=0; } //icon above
+      if(pLayout=="below"){ rI=1; cI=0; rW=0; cW=0; } //icon below
+      if(pLayout=="left") { rI=0; cI=1; rW=0; cW=0; } //icon to the left
+      if(pLayout=="right"){ rI=0; cI=0; rW=0; cW=1; } //icon to the right
+      QGridLayout* ugrid;
+      QPixmap tmp( Theme::objectIconPath("user") );
+      QLabel* unameIcon; unameIcon->setPixmap(tmp.scaled(Theme::objectIconSize("user")));
+      ugrid->addWidget(unameline,rW,cW,Qt::AlignCenter);
+      ugrid->addWidget(unameIcon,rI,cI,Qt::AlignCenter);
+
+      grid->addLayout( ugrid, Theme::objectLocationRow("user"), \
+                      Theme::objectLocationColumn("user"), \
+                      Theme::objectLocationRowSpan("user"), \
+                      Theme::objectLocationColumnSpan("user"), Qt::AlignCenter);
+    }
+
+    //----Password Input collection
+    QString pLayout = Theme::objectIconStyle("password");
+    QLineEdit* pwline; pwline->setEchoMode(QLineEdit::Password);
+    if(pLayout == "disabled"){
+      //Icon Disabled - just add widget to the grid
+      grid->addWidget( pwline, Theme::objectLocationRow("password"), \
+                      Theme::objectLocationColumn("password"), \
+                      Theme::objectLocationRowSpan("password"), \
+                      Theme::objectLocationColumnSpan("password"), Qt::AlignCenter); 
+    }else{
+      //Put the Icon and Widget in their own layout before adding to the main grid
+      int rI,rW,cI,cW;
+      if(pLayout=="above"){ rI=0; cI=0; rW=1; cW=0; } //icon above
+      if(pLayout=="below"){ rI=1; cI=0; rW=0; cW=0; } //icon below
+      if(pLayout=="left") { rI=0; cI=1; rW=0; cW=0; } //icon to the left
+      if(pLayout=="right"){ rI=0; cI=0; rW=0; cW=1; } //icon to the right
+      QGridLayout* pgrid;
+      QPixmap tmp( Theme::objectIconPath("password") );
+      QLabel* pwIcon; pwIcon->setPixmap(tmp.scaled(Theme::objectIconSize("password")));
+      pgrid->addWidget(pwline,rW,cW,Qt::AlignCenter);
+      pgrid->addWidget(pwIcon,rI,cI,Qt::AlignCenter);
+
+      grid->addLayout( pgrid, Theme::objectLocationRow("password"), \
+                      Theme::objectLocationColumn("password"), \
+                      Theme::objectLocationRowSpan("password"), \
+                      Theme::objectLocationColumnSpan("password"), Qt::AlignCenter);
+    }
+
+    //----Login Button
+    QString lLayout = Theme::objectIconStyle("login");
+    if(lLayout=="disabled"){ QPushButton* pushlogin = new QPushButton(tr("Login")); }
+    else{ QPushButton* pushlogin = new QPushButton( QIcon(Theme::objectIconPath("login")),tr("Login") ); }
+    pushlogin
+    grid->addWidget( pwline, Theme::objectLocationRow("password"), \
+                      Theme::objectLocationColumn("password"), \
+                      Theme::objectLocationRowSpan("password"), \
+                      Theme::objectLocationColumnSpan("password"), Qt::AlignCenter); 
+
+    //----Desktop Environment Switcher
+      //NOTE: This will be changed to a "fancy" switcher later)
+    QString deLayout = Theme::objectIconStyle("desktop");
+    QComboBox* deSwitcher;
+    deSwitcher->addItems(Backend::getAvailableDesktops());
+    deSwitcher->setCurrentIndex(0); //select the first desktop on the list (for now)
+    if(deLayout == "disabled"){
+      //Icon Disabled - just add widget to the grid
+      grid->addWidget( deSwitcher, Theme::objectLocationRow("desktop"), \
+                      Theme::objectLocationColumn("desktop"), \
+                      Theme::objectLocationRowSpan("desktop"), \
+                      Theme::objectLocationColumnSpan("desktop"), Qt::AlignCenter); 
+    }else{
+      //Put the Icon and Widget in their own layout before adding to the main grid
+      int rI,rW,cI,cW;
+      if(deLayout=="above"){ rI=0; cI=0; rW=1; cW=0; } //icon above
+      if(deLayout=="below"){ rI=1; cI=0; rW=0; cW=0; } //icon below
+      if(deLayout=="left") { rI=0; cI=1; rW=0; cW=0; } //icon to the left
+      if(deLayout=="right"){ rI=0; cI=0; rW=0; cW=1; } //icon to the right
+      QGridLayout* degrid;
+      QPixmap tmp( Theme::objectIconPath("desktop") );
+      QLabel* deIcon; pwIcon->setPixmap(tmp.scaled(Theme::objectIconSize("desktop")));
+      degrid->addWidget(deSwitcher,rW,cW,Qt::AlignCenter);
+      degrid->addWidget(deIcon,rI,cI,Qt::AlignCenter);
+
+      grid->addLayout( degrid, Theme::objectLocationRow("desktop"), \
+                      Theme::objectLocationColumn("desktop"), \
+                      Theme::objectLocationRowSpan("desktop"), \
+                      Theme::objectLocationColumnSpan("desktop"), Qt::AlignCenter);
+    }
+
+  //Connect the grid to the Window
+  this->setLayout(grid);
+
+  //Connect all the buttons to their proper slots
+
+}
+
 void PCDMgui::slotPushKeyLayout()
 {
   wKey = new widgetKeyboard();

Modified: pcbsd-projects/PCDM/pcdm-gui.h
===================================================================
--- pcbsd-projects/PCDM/pcdm-gui.h	2012-07-12 17:37:49 UTC (rev 17714)
+++ pcbsd-projects/PCDM/pcdm-gui.h	2012-07-12 20:33:26 UTC (rev 17715)
@@ -1,5 +1,5 @@
-#ifndef PCDEGUI_H
-#define PCDEGUI_H
+#ifndef PCDMGUI_H
+#define PCDMGUI_H
 
 #include <QtGui/QWidget>
 #include <QMessageBox>
@@ -9,17 +9,20 @@
 #include "pcdm-backend.h"
 #include "pcdm-themes.h"
 
-class PCDMgui : public QWidget, private Ui::PCDMgui
+class PCDMgui : public QMainWindow
 {
     Q_OBJECT
 
 public:
-    PCDMgui(QWidget *parent = 0);
+    PCDMgui();
     ~PCDMgui();
     void changeLang(QString code);
     void progInit();
 
 private slots:
+    void slotRestartComputer();
+    void slotShutdownComputer();
+
     void slotChangeLanguage();
 
     // Start xvkbd
@@ -34,6 +37,9 @@
     QGraphicsScene *customScene;
     QStringList languages;
 
+    //Functions
+    void createGUIfromTheme();
+
     // Internal functions for the GUI
     bool toggleKeyLayout;
 
@@ -44,4 +50,4 @@
 
 };
 
-#endif // PCDEGUI_H
+#endif // PCDMGUI_H

Modified: pcbsd-projects/PCDM/pcdm-themes.cpp
===================================================================
--- pcbsd-projects/PCDM/pcdm-themes.cpp	2012-07-12 17:37:49 UTC (rev 17714)
+++ pcbsd-projects/PCDM/pcdm-themes.cpp	2012-07-12 20:33:26 UTC (rev 17715)
@@ -1,10 +1,15 @@
 #include "pcdm-themes.h"
 
 //Setup variables that save the current theme data
-QStringList images, imSizes, imLayout, gridLayout;
+QStringList images, imSizes, imLayout, gridLayout, tbFormat, validLayouts, needText;
 bool isFullscreen=TRUE;
 int windowWidth, windowHeight, gridWidth, gridHeight;
+validLayouts << "above" << "below" << "left" << "right" << "none" << "icononly";
+needText << "user" << "password" << "login";
+/*
+tbFormat = [locationString, styleString, widthInt, heightInt]
 
+*/
 
 //Create the functions to read and output the theme data
 void Theme::loadDefaults(QString vars){
@@ -24,6 +29,7 @@
     images <<":images/keyboard.png";		imSizes << "32x32";	// [10]=Virtual Keyboard
   }
   if( (vars=="all") || (vars=="layout") ){
+    tbLocation="bottom";
     gridWidth=5; gridHeight=6;
     //Default Layout for the application
     imLayout.clear(); 		gridLayout.clear();
@@ -33,13 +39,19 @@
     imLayout << "left";		gridLayout << "1-3x1";	// [3]=User
     imLayout << "left";		gridLayout << "1-3x2";	// [4]=Password
     imLayout << "left";		gridLayout << "1-3x3";	// [5]=Login
-    imLayout << "icononly";	gridLayout << "0x5";	// [6]=Keyboard Layout
-    imLayout << "icononly";	gridLayout << "1x5";	// [7]=Locale
-    imLayout << "icononly";	gridLayout << "2x5";	// [8]=System
-    imLayout << "icononly";	gridLayout << "3x5";	// [9]=Desktop
-    imLayout << "icononly";	gridLayout << "4x5";	// [10]=Virtual Keyboard
+    imLayout << "icononly";	gridLayout << "";	// [6]=Keyboard Layout
+    imLayout << "icononly";	gridLayout << "";	// [7]=Locale
+    imLayout << "icononly";	gridLayout << "";	// [8]=System
+    imLayout << "icononly";	gridLayout << "4x5";	// [9]=Desktop
+    imLayout << "icononly";	gridLayout << "";	// [10]=Virtual Keyboard
   }
-
+  if( (vars=="all") || (vars=="toolbar") ){
+    tbFormat.clear();
+    tbFormat << "bottom";	// [0] Location [bottom | top | left | right]
+    tbFormat << "icononly";	// [1] Style [icononly | textonly | textbeside | textunder]
+    tbFormat << "32";		// [2] Width in pixels
+    tbFormat << "32";		// [3] Height in pixels
+  }
 }
 
 void Theme::loadTheme(QString themeFile){
@@ -76,7 +88,73 @@
 
   return TRUE;
 }
+//********** WINDOW OBJECTS *************
+QString objectIconStyle(QString obj){
+  int i = getObjectIndex(obj);
+  bool invalid = FALSE;
+  QString output = imLayout[i].toLower();
+  if(output="icononly" && needText.contains(obj)){ invalid=TRUE; }
+  if(!validLayouts.contains(output) || invalid){
+    qDebug() << "PCDM: Invalid layout detected for" << obj << "- defaulting to \"left\"";
+    return "left";
+  } 
+  QString
+  return imLayout[i].toLower();
+}
 
+QString objectIconPath(QString obj){
+  int i = getObjectIndex(obj);
+  return images[i];
+}
+
+QSize objectIconSize(QString obj){
+  int i = getObjectIndex(obj);
+  int width = imSizes[i].section("x",0,0).toInt();
+  int height = imSizes[i].section("x",1,1).toInt();
+  if(width.isEmpty()){
+    qDebug() << "PCDM: No image size given for" << obj << "- defaulting to 64x64";
+    width=64;
+    height=64;
+  }
+  if(height.isEmpty()){ 
+    qDebug() << "PCDM: No image height given for" << obj << "- assuming a square image"; 
+    height = width; 
+  }
+  return QSize(width,height);
+}
+
+int objectLocationRow(QString obj){
+  int i = getObjectIndex(obj);
+  QString row = gridLayout[i].section("x",0,0).section("-",0,0);
+  return row.toInt();
+}
+
+int objectLocationColumn(QString obj){
+  int i = getObjectIndex(obj);
+  QString col = gridLayout[i].section("x",1,1).section("-",0,0);
+  return col.toInt();
+}
+
+int objectLocationRowSpan(QString obj){
+  int i = getObjectIndex(obj);
+  QString row = gridLayout[i].section("x",0,0).section("-",1,1);
+  if(row.isEmpty()){ return 1; }
+  int rowSpan = row.toInt() - objectLocationRow(obj);
+  if(rowSpan < 1){ rowSpan=1; }
+  return rowSpan;
+}
+
+int objectLocationColumnSpan(QString obj){
+  int i = getObjectIndex(obj);
+  QString col = gridLayout[i].section("x",1,1).section("-",1,1);
+  if(col.isEmpty()){ return 1; }
+  int colSpan = col.toInt() - objectLocationColumn(obj);
+  if(colSpan < 1){ colSpan=1; }
+  return colSpan;
+}
+
+
+//********** SPLASH SCREEN ***********
 bool Theme::useSplashscreen(){
   if(images[2].isEmpty() || images[2] == "disabled"){ return FALSE; }
   else
@@ -84,6 +162,36 @@
 }
 
 QString Theme::splashscreen(){
-  return splashPath;
+  return images[2];
 };
 
+//********** TOOLBAR INFORMATION ***********
+Qt::ToolBarArea Theme::toolbarLocation(){
+  if(tbFormat[0].toLower()=="left"){ return Qt::LeftToolBarArea; }
+  else if(tbFormat[0].toLower()=="right"){ return Qt::RightToolBarArea; }
+  else if(tbFormat[0].toLower()=="top"){ return Qt::TopToolBarArea; }
+  else if(tbFormat[0].toLower()=="bottom"){ return Qt::BottomToolBarArea; }
+  else{ 
+    qDebug() << "PCDM: Invalid toolbar location - defaulting to the bottom";
+    return Qt::BottomToolBarArea;
+  }
+}
+
+Qt::ToolButtonStyle Theme::toolbarStyle(){
+  if(tbFormat[1].toLower()=="icononly"){ return Qt::ToolButtonIconOnly; }
+  else if(tbFormat[1].toLower()=="textonly"){ return Qt::ToolButtonTextOnly; }
+  else if(tbFormat[1].toLower()=="textbeside"){ return Qt::ToolButtonTextBesideIcon; }
+  else if(tbFormat[1].toLower()=="textunder"){ return Qt::ToolButtonTextUnderIcon; }
+  else{ 
+    qDebug() << "PCDM: Invalid toolbar style - defaulting to show icon only";
+    return Qt::ToolButtonIconOnly;
+  }
+}
+
+int Theme::toolbarSizeWidth(){
+  return tbFormat[3].toInt();
+}
+
+int Theme::toolbarSizeHeight(){
+  return tbFormat[4].toInt();
+}

Modified: pcbsd-projects/PCDM/pcdm-themes.h
===================================================================
--- pcbsd-projects/PCDM/pcdm-themes.h	2012-07-12 17:37:49 UTC (rev 17714)
+++ pcbsd-projects/PCDM/pcdm-themes.h	2012-07-12 20:33:26 UTC (rev 17715)
@@ -14,16 +14,30 @@
   static void readThemeFile(QString);
 
 public:
+  //General Theme Settings
   static void loadTheme(QString);
   static bool isFullScreen();
   static int windowSize(QString);
-  static int gridSize(QString);
+  //Window Layout
   static QString imagePath(QString);
   static int imageSize(QString,QString);
   static int objectLocation(QString,QString);
+  //Window objects
+  static QString objectIconStyle(QString);
+  static QString objectIconPath(QString);
+  static QSize objectIconSize(QString);
+  static int objectLocationRow(QString);
+  static int objectLocationColumn(QString);
+  static int objectLocationRowSpan(QString);
+  static int objectLocationColumnSpan(QString);
+  //Splash Screen
   static QString splashscreen();
   static bool useSplashscreen();
-
+  //Toolbar functions
+  static Qt::ToolBarArea toolbarLocation();
+  static Qt::ToolButtonStyle toolbarStyle();
+  static int toolbarSizeWidth();
+  static int toolbarSizeHeight();
   
 
 };

Modified: pcbsd-projects/PCDM/sample.pcdm-theme
===================================================================
--- pcbsd-projects/PCDM/sample.pcdm-theme	2012-07-12 17:37:49 UTC (rev 17714)
+++ pcbsd-projects/PCDM/sample.pcdm-theme	2012-07-12 20:33:26 UTC (rev 17715)
@@ -3,39 +3,14 @@
 ########################################
 # **** NOTE: Any option that is not set here will use the default PCDM setting *****
 
-## Base Directories for files ##
-IMAGE_DIR=/usr/local/share/PCDM/images  #location of all image files for this theme
+## Base directory for images (if absolute path not explicitly declared) ##
+IMAGE_DIR=/usr/local/share/PCDM/images  #location of all/most image files for this theme
 
 
 #### Images (relative to IMAGE_DIR) ####
-## (set any of these to "disabled" to disable that image/icon) ##
-HEADER_IMAGE=default-header.png  # Default image to be displayed as a window header
-
 BACKGROUND_IMAGE=background.jpg  # will fit to the window size if possible
+SPLASHSCREEN_IMAGE=default-splash.png #Image to use as a splash screen (set to "disabled" if none)
 
-SPLASHSCREEN_IMAGE=default-splash.png #Image to use as a splash screen
-
-USER_IMAGE=default-user.png  # Default image for the user selection pulldown
-USER_IMAGE_SIZE=64x64  #use this to scale the image file (in pixels), otherwise use actual size
-
-PASSWORD_IMAGE=default-password.png  # Default image for the password entry box
-PASSWORD_IMAGE_SIZE=64x64
-
-LOGIN_IMAGE=default-login.png  # Default image contained in the login button
-LOGIN_IMAGE_SIZE=15x15
-
-KEYBOARD_LAYOUT_IMAGE=keyboard-layout.png  # Default image for keyboard layout selection pulldown
-KEYBOARD_IMAGE_SIZE=32x32
-
-LANGUAGE_IMAGE=language-setting.png  # Default image for language selection pulldown
-LANGUAGE_IMAGE_SIZE=32x32
-
-DE_SELECT_IMAGE=default-de-select.png  # Default image for the DE selection pulldown (cannot be disabled)
-DE_SELECT_IMAGE_SIZE=32x32
-
-SYSTEM_IMAGE=default-system.png  # Default image for the System box (shutdown/reboot options)
-SYSTEM_IMAGE_SIZE=32x32
-
 #### Screen Display ####
 
 # MAIN WINDOW DISPLAY #
@@ -45,29 +20,42 @@
   # ADD WINDOW ITEMS ON A GRID LAYOUT
   WINDOW_GRID_SIZE=[7,3]  # number of [rows,columns] to fill the window
   # FORMAT: WINDOW_ITEM=<item>::<relative icon location>::[row,column]
-    # <item>: [header | login | user | password | keyboard | locale | desktop | system]
-    # <relative icon location>: [above|below|left|right|none|icononly] (not used for header item)
+    # <item>: [header | login | user | password]
+    # <relative icon location>: [above|below|left|right|none] (not used for header item)
     # [row,column]: positive integers designating grid point(s) to use for the object (starting at 0)
     # Note: [0,0]=upper left corner, therefore if number of rows=4, valid row entries are 0->3 
-  WINDOW_ITEM=header::icononly::[0,0-2]  #(optional) top row, columns 0-3 (all of them in this example)
-  WINDOW_ITEM=user::left::[2,1]        #(required) user icon can NOT be "icononly" (input required)
-  WINDOW_ITEM=password::left::[3,1]    #(required) password icon can NOT be "icononly" (input required)
-  WINDOW_ITEM=login::left::[4,1]       #(required) login icon MUST be "none", "icononly", or "left"
-  WINDOW_ITEM=desktop::above::[6,1]      #(required) Desktop environment switcher
+  WINDOW_ITEM=header::icononly::[0,0-2] # MUST be "icononly" or "none"
+  HEADER_IMAGE=default-header.png  	# Default image to be displayed as a window header
 
+  WINDOW_ITEM=user::left::[2,1]        	#(required) username input display
+  USER_IMAGE=default-user.png  		# Default image for the user selection pulldown
+  USER_IMAGE_SIZE=64x64  		# Size for the image (in pixels)
 
-  # Add Toolbar Items
+  WINDOW_ITEM=password::left::[3,1]    	#(required) password input display
+  PASSWORD_IMAGE=default-password.png  	# Default image for the password entry box
+  PASSWORD_IMAGE_SIZE=64x64		# size for the image (in pixels)
+
+  WINDOW_ITEM=login::left::[4,1]        #(required) login icon MUST be "none" or "left"
+  LOGIN_IMAGE=default-login.png  	# Small image contained in the login button (auto-scaled)
+
+  WINDOW_ITEM=desktop::above::[6,1]     #(required) Desktop environment switcher
+  DE_SELECT_IMAGE=default-de-select.png # (required) Default image for the DE selection pulldown
+
+  # ADD TOOLBAR ITEMS
   WINDOW_TOOLBAR_LOCATION=bottom # [bottom,top,left,right]
   TOOLBAR_DEFAULT_SIZE=32x32     # Set the default size for all images in the toolbar
   TOOLBAR_STYLE=icononly 	 # [icononly | textonly | textbesideicon | textundericon]
-  # FORMAT: TOOLBAR_ITEM=<item>::<style>::<location>
+  # FORMAT: TOOLBAR_ITEM=<item>::<style>
     # <item>: [keyboard | locale | desktop | system]
     # <style>: [currentstyle | pulldown]
-    # <location>: positive integer value for order on toolbar (0 = top/leftmost item)
-  TOOLBAR_ITEM=system::currentstyle::0	#(required) system options MUST exist
-  TOOLBAR_ITEM=locale::pulldown::1	#(optional) locale switcher
-  TOOLBAR_ITEM=keyboard::pulldown::2	#(optional) keyboard layout switcher
-  
+  TOOLBAR_ITEM=system::currentstyle	#(required) system options MUST exist
+  SYSTEM_IMAGE=default-system.png  	# Default image for the System box (shutdown/reboot options)
+
+  TOOLBAR_ITEM=locale::pulldown		#(optional) locale switcher
+  LOCALE_IMAGE=language-setting.png  	# Default image for language selection pulldown
+
+  TOOLBAR_ITEM=keyboard::pulldown	#(optional) keyboard layout switcher
+  KEYBOARD_IMAGE=keyboard-layout.png  	# Default image for keyboard layout selection pulldown
     
 
 



More information about the Commits mailing list