ChooseLevelInPrefs/fr
From OOo4Kids
|
Choix du niveau de l'utilisateur dans les préférences |
À propos du code proposé dans cette page : tous les changements par rapport au code original d'OpenOffice.org ayant servi de base, et fournis dans cette page, sont :
- sous Licence LGPL v3 ( et vous pouvez-le redistribuer et / ou le modifier selon les termes de la licence GNU Lesser General Public License telle que publiée par la Free Software Foundation)
- Copyright Eric Bachard 12th august 2009
Introduction
Ci-dessous, vous trouverez une description technique de l'implémentation de la fonctionnalité : Choix du niveau de l'utlisateur dans les préférences. Il est ainsi question de code source (C++, objective C), mais aussi de comment on lit écrit dans les fichiers de cofiguration, via le "config manager" , et nous supposons que le lecteur possède les bases nécessaires pour lire et comprendre le contenu de ce qui est exposé.
Les pré-requis pour lire cet article sont encore à définir, mais si certaines notions ne vous sont pas familières, nous vous invitons à consulter le wiki d'OpenOffice.org pour compléter vos connaissances, afin de pouvoir lire cet article dans les meilleures conditions possibles.
Merci à Eike Rathke, Thorsten Behrens et Cédric Bosdonnat pour leurs précieux conseils.
But
Spécifications
- Modifier les préférences, afin de permettre de choisir un niveau d'utilisateur parmi : débutant, moyen, expert
- Boutons "Radio" disposés horizontalement : un seul bouton est sélectionné (actif) à la fois
- Le niveau proposé par défaut (première utilisation d'OOo4Kids) est débutant
Comme indiqué ci-dessous :
Exemples d'utilisation de cette fonctionnalité
- Dans Calc, toutes les fonctions sont présentes, c'est à dire utilisables, mais ne sont pas forcément visibles dans la liste proposée par l'assistant "fonctions" :
- avec le niveau "débutant, seules quelques fonctions apparaîtront dans cette liste ;
- avec le niveau moyen sélectionné, 30 à 40 fonctions apparaîtront ;
- niveau expert sélectionné : toutes les fonctions sont dans la liste.
- Dans Writer (juste une idée) : en fonction du niveau, on pourrait afficher plus ou moins de choses dans les boîtes de dialogues du styliste.
- Dans l'assisstant Writer (à écrire), en fonction du niveau, on pourrait proposer certains modèles, ou d'autres.
- (ajouter votre idée )
Dans le code
Nous allons utiliser la class MiscTabPage et dérivées, pour implementer la nouvelle option.
Fait :
- ajout des nouveaux objets suivants dans le constructeur de la classe OfaMiscTabPage
- Nom : aUserLevelFL ; type : Fixed Line
- Nom : aUserLevelBeginnerRB ; type : Radio Button
- Nom : aUserLevelAverageRB ; type : Radio Button
- Nom : aUserLevelExpertRB ; type : Radio Button
- Les déclarer dans le fichier d'en tête (optgdlg.hxx)
- Implémentation de méthodes statiques pour :
- lire la valeur, appelée UserLevel dans les préférences, c'est à dire dans le fichier Common.xcu, accessible dans le noeud "Misc".
- Connaître le bouton Radio actif courant
- Prendre en charge le clic sur un de ces boutons Radio ( via un callback )
Tout fonctionne actuellement : :
- l'interface utilisateur ( UI ) est ok
- le fichier .xcu semble parfaitement fonctionner, et la valeur est lisible dans le Common.xcu file, placé dans le répertoire $SYSUSERCONFIG (ce répertoire contient l'ensemble des préférences utilisateur)
- initialisation des boutons : OK
- lecture de la valeur du choix au lancement : vérifié OK
- cliquer, et voir le nouveau Radio bouton actif, un seul à la fois : vérifié OK
- démarrer OOo4Kids avec une valeur donnée dans le Common.xcu : initialisation est OK, tous les cas possibles ont été vérifiés OK aussi
- écrire la nouvelle valeur dans les préférences : vérifié OK
- Vérifier que la valeur est modifiée : valider un changement, cliquer sur OK, réouvrir les préférences et vérifier que le changement est toujours là : vérifié OK
Merci de nous rapporter tout problème que vous pourriez rencontrer.
Module : svx
Pour les préférences, tout ou presque est situé dans le module svx (autre possibilité : sfx2/source/dialog), svx/source/cui/optgdlg.hrc contient des informations utiles, comme lignes et colonnes, dimensions .. etc. svx/source/cui/optgdlg.src est l'endroit où l'on définit l'emplacement des contrôles.
Fichiers concernés :
- svx/source/cui/optgdlg.src : contient les contrôles et leur positionnement, mais aussi des textes (boutons, listes .. etc)
Index: svx/source/cui/optgdlg.src
===================================================================
--- svx/source/cui/optgdlg.src (revision 275641)
+++ svx/source/cui/optgdlg.src (working copy)
@@ -41,49 +41,49 @@
TabPage OFA_TP_MISC
{
- HelpID = HID_OFA_TP_MISC ;
- SVLook = TRUE ;
- Size = MAP_APPFONT ( 260 , 185 ) ;
- Hide = TRUE ;
+ HelpID = HID_OFA_TP_MISC ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT ( 260, 185 ) ;
+ Hide = TRUE ;
FixedLine FL_HELP
{
- Pos = MAP_APPFONT( COL0, ROW0 );
- Size = MAP_APPFONT( WHOLE_WIDTH, RSC_CD_FIXEDLINE_HEIGHT );
- Text [ en-US ] = "Help";
- };
- CheckBox CB_TOOLTIP
- {
- Pos = MAP_APPFONT( COL1, ROW1 );
- Size = MAP_APPFONT( WHOLE_WIDTH - COL1, RSC_CD_CHECKBOX_HEIGHT );
- Text [ en-US ] = "~Tips";
- };
- CheckBox CB_EXTHELP
- {
- Pos = MAP_APPFONT( COL2, ROW2 );
- Size = MAP_APPFONT( WHOLE_WIDTH - COL2, RSC_CD_CHECKBOX_HEIGHT );
- Text [ en-US ] = "~Extended tips";
- };
- CheckBox CB_HELPAGENT
- {
- Pos = MAP_APPFONT( COL1, ROW3 );
- Size = MAP_APPFONT( WHOLE_WIDTH - COL1, RSC_CD_CHECKBOX_HEIGHT );
- Text [ en-US ] = "~Help Agent";
- };
+ Pos = MAP_APPFONT( COL0, ROW0 );
+ Size = MAP_APPFONT( WHOLE_WIDTH, 10 );
+ Text [ en-US ] = "Help";
+ };
+ CheckBox CB_TOOLTIP
+ {
+ Pos = MAP_APPFONT ( COL1, ROW1 ) ;
+ Size = MAP_APPFONT ( 60, 10 ) ;
+ Text [ en-US ] = "~Tips";
+ };
+ CheckBox CB_EXTHELP
+ {
+ Pos = MAP_APPFONT ( COL1 + 60, ROW1 ) ;
+ Size = MAP_APPFONT ( 60, 10 ) ;
+ Text [ en-US ] = "~Extended tips";
+ };
+ CheckBox CB_HELPAGENT
+ {
+ Pos = MAP_APPFONT( COL1 + 120, ROW1 );
+ Size = MAP_APPFONT ( 60, 10 ) ;
+ Text [ en-US ] = "~Help Agent";
+ };
PushButton PB_HELPAGENT_RESET
{
- Pos = MAP_APPFONT( COL2, ROW4 );
- Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
- Text [ en-US ] = "~Reset Help Agent";
- };
+ Pos = MAP_APPFONT( COL1 + 180, ROW1 );
+ Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
+ Text [ en-US ] = "~Reset Help Agent";
+ };
FixedText FT_HELPFORMAT
{
- Pos = MAP_APPFONT( COL1, OFFS_TEXTBOX_FIXEDTEXT(ROW5) );
+ Pos = MAP_APPFONT( COL1, ROW3 );
Size = MAP_APPFONT( DIFF( COL1, COL3 ), RSC_CD_FIXEDTEXT_HEIGHT );
Text [ en-US ] = "Help ~formatting";
};
ListBox LB_HELPFORMAT
{
- Pos = MAP_APPFONT( COL4, ROW5 );
+ Pos = MAP_APPFONT( COL4, ROW3 );
Size = MAP_APPFONT( WHOLE_WIDTH - COL4, 50 );
DropDown = TRUE ;
Border = TRUE ;
@@ -97,6 +97,38 @@
< "High Contrast White" ; > ;
};
};
+ FixedLine FL_USERLEVEL
+ {
+ Pos = MAP_APPFONT( COL0, ROW4 );
+ Size = MAP_APPFONT( WHOLE_WIDTH, 10 );
+ Text [ en-US ] = "User Level";
+ Text [ fr ] = "Niveau";
+ };
+ RadioButton RB_USERLEVEL_BEGINNER
+ {
+ TabStop = TRUE;
+ Pos = MAP_APPFONT ( COL1, ROW5 ) ;
+ Size = MAP_APPFONT ( 60, 10 ) ;
+ Text [ en-US ] = "Beginner";
+ Text [ fr ] = "Débutant";
+ };
+ RadioButton RB_USERLEVEL_AVERAGE
+ {
+ TabStop = TRUE;
+ Pos = MAP_APPFONT ( COL1 + 60, ROW5 ) ;
+ Size = MAP_APPFONT ( 60, 10 ) ;
+ Text [ en-US ] = "Average";
+ Text [ fr ] = "Moyen";
+ };
+ RadioButton RB_USERLEVEL_EXPERT
+ {
+ TabStop = TRUE;
+ Pos = MAP_APPFONT( COL1 + 120, ROW5 );
+ Size = MAP_APPFONT ( 60, 10 ) ;
+ Text [ en-US ] = "Expert";
+ Text [ fr ] = "Expert";
+ };
+
FixedLine FL_FILEDLG
{
Pos = MAP_APPFONT( COL0, ROW6 );
@@ -177,16 +209,17 @@
TabPage OFA_TP_VIEW
{
- HelpID = HID_OFA_TP_VIEW ;
- SVLook = TRUE ;
- Size = MAP_APPFONT ( 260 , 185 ) ;
- Hide = TRUE ;
+ HelpID = HID_OFA_TP_VIEW ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT ( 260 , 185 ) ;
+ Hide = TRUE ;
FixedLine FL_USERINTERFACE
- {
- Pos = MAP_APPFONT ( 6 , ROW0 ) ;
- Size = MAP_APPFONT ( 120 , 8 ) ;
- Text [ en-US ] = "User Interface" ;
+ {
+ Pos = MAP_APPFONT ( 6 , ROW0 ) ;
+ Size = MAP_APPFONT ( 120 , 8 ) ;
+ Text [ en-US ] = "User Interface" ;
};
+
FixedText FT_WINDOWSIZE
{
Pos = MAP_APPFONT ( 12 , OFFS_TEXTBOX_FIXEDTEXT( ROW_MF_SCALING ) ) ;
- svx/source/cui/optgdlg.hxx : fichiers d'en-tête de la boîte de dialogues.
Index: svx/source/cui/optgdlg.hxx
===================================================================
--- svx/source/cui/optgdlg.hxx (revision 275641)
+++ svx/source/cui/optgdlg.hxx (working copy)
@@ -38,6 +38,13 @@
#include <readonlyimage.hxx>
#define FOLDERWEBVIEW_DEFAULTFILE "folder.so"
+#if defined( OOo4Kids )
+#define USER_LEVEL_BEGINNER 1
+#define USER_LEVEL_AVERAGE 2
+#define USER_LEVEL_EXPERT 3
+#endif
+
+
// predeclarations
class CanvasSettings;
class SvtOptionsDrawinglayer;
@@ -55,7 +62,12 @@
PushButton aHelpAgentResetBtn;
FixedText aHelpFormatFT;
ListBox aHelpFormatLB;
-
+#ifdef OOo4Kids
+ FixedLine aUserLevelFL;
+ RadioButton aUserLevelBeginnerRB;
+ RadioButton aUserLevelAverageRB;
+ RadioButton aUserLevelExpertRB;
+#endif
FixedLine aFileDlgFL;
ReadOnlyImage aFileDlgROImage;
CheckBox aFileDlgCB;
@@ -77,6 +89,9 @@
DECL_LINK( TwoFigureConfigHdl, NumericField* );
DECL_LINK( HelpCheckHdl_Impl, CheckBox* );
DECL_LINK( HelpAgentResetHdl_Impl, PushButton* );
+#ifdef OOo4Kids
+ DECL_LINK( UserLevelCheckHdl_Impl, RadioButton* pButton );
+#endif
protected:
virtual int DeactivatePage( SfxItemSet* pSet = NULL );
- svx/source/cui/optgdlg.hrc : contient des constantes prédéfinies (utilisées pour rendre le code plus llisible)
Index: svx/source/cui/optgdlg.hrc =================================================================== --- svx/source/cui/optgdlg.hrc (revision 275641) +++ svx/source/cui/optgdlg.hrc (working copy) @@ -202,6 +202,12 @@ #define FT_HELPAGENT_TIME_UNIT 59 #define FL_DOCSTATUS 60 #define CB_DOCSTATUS 61 + +#define FL_USERLEVEL 62 +#define RB_USERLEVEL_BEGINNER 63 +#define RB_USERLEVEL_AVERAGE 64 +#define RB_USERLEVEL_EXPERT 65 + #endif // #ifndef _SVX_OPTGDLG_HRC // ******************************************************************* EOF
- svx/source/cui/optgdlg.cxx : implémentation de la boîte de dialog, ici nos méthodes setUserLevel() et getUserLevel() + le callback pour exécuter l'une ou l'autre quand un bouton Radio est cliqué.
Index: svx/source/cui/optgdlg.cxx
===================================================================
--- svx/source/cui/optgdlg.cxx (revision 275641)
+++ svx/source/cui/optgdlg.cxx (working copy)
@@ -106,6 +106,10 @@
#include <vcl/svapp.hxx>
+#ifdef OOo4Kids
+#include "vcl/unohelp.hxx"
+#endif
+
#include "optgdlg.hrc"
#include "optgdlg.hxx"
#include "ofaitem.hxx"
@@ -127,6 +131,94 @@
#define MAX_PROGRAM_ENTRIES 3
+#ifdef OOo4Kids
+static const OUString sULConfigSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) );
+static const OUString sULAccessSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) );
+
+static short getUserLevel()
+{
+ short dUserLevel = 1; // default is beginner
+ try
+ {
+ // get service provider
+ Reference< XMultiServiceFactory > xSMgr( vcl::unohelper::GetMultiServiceFactory() );
+ // create configuration hierachical access name
+ if( xSMgr.is() )
+ {
+ try
+ {
+ Reference< XMultiServiceFactory > xConfigProvider(
+ Reference< XMultiServiceFactory >(
+ xSMgr->createInstance( sULConfigSrvc ),
+ UNO_QUERY )
+ );
+ if( xConfigProvider.is() )
+ {
+ Sequence< Any > aArgs(1);
+ PropertyValue aVal;
+ aVal.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) );
+ aVal.Value <<= OUString( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.Common/Misc" ) );
+ aArgs.getArray()[0] <<= aVal;
+ Reference< XNameAccess > xConfigAccess(
+ Reference< XNameAccess >(
+ xConfigProvider->createInstanceWithArguments( sULAccessSrvc, aArgs ), UNO_QUERY )
+ );
+ if( xConfigAccess.is() )
+ {
+ try
+ {
+ short bValue = 1;
+ Any aAny = xConfigAccess->getByName( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "UserLevel" ) ) );
+ if( aAny >>= bValue )
+ dUserLevel = bValue;
+ }
+ catch( NoSuchElementException& )
+ {
+ }
+ catch( WrappedTargetException& )
+ {
+ }
+ }
+ }
+ }
+ catch( Exception& )
+ {
+ }
+ }
+ }
+ catch( WrappedTargetException& )
+ {
+ }
+ return dUserLevel;
+}
+
+static void setUserLevel( short nLevel )
+{
+ try
+ {
+ Reference < XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory();
+ // get configuration provider
+ Reference< XMultiServiceFactory > theConfigProvider = Reference< XMultiServiceFactory >(
+ xFactory->createInstance(sULConfigSrvc), UNO_QUERY_THROW);
+ Sequence< Any > theArgs(1);
+ NamedValue v(OUString::createFromAscii("NodePath"),
+ makeAny(OUString::createFromAscii("org.openoffice.Office.Common/Misc")));
+ theArgs[0] <<= v;
+ Reference< XPropertySet > pset = Reference< XPropertySet >(
+ theConfigProvider->createInstanceWithArguments(sULAccessSrvc, theArgs), UNO_QUERY_THROW);
+
+ Any result = pset->getPropertyValue(OUString::createFromAscii("UserLevel"));
+
+ pset->setPropertyValue(OUString::createFromAscii("UserLevel"), makeAny(nLevel));
+ Reference< XChangesBatch >(pset, UNO_QUERY_THROW)->commitChanges();
+ }
+ catch( Exception& )
+ {
+ }
+}
+#endif // OOo4Kids
+
// class OfaMiscTabPage --------------------------------------------------
int OfaMiscTabPage::DeactivatePage( SfxItemSet* pSet_ )
@@ -212,6 +304,12 @@
aHelpAgentResetBtn ( this, SVX_RES( PB_HELPAGENT_RESET ) ),
aHelpFormatFT ( this, SVX_RES( FT_HELPFORMAT ) ),
aHelpFormatLB ( this, SVX_RES( LB_HELPFORMAT ) ),
+#ifdef OOo4Kids
+ aUserLevelFL ( this, SVX_RES( FL_USERLEVEL ) ),
+ aUserLevelBeginnerRB ( this, SVX_RES( RB_USERLEVEL_BEGINNER ) ),
+ aUserLevelAverageRB ( this, SVX_RES( RB_USERLEVEL_AVERAGE ) ),
+ aUserLevelExpertRB ( this, SVX_RES( RB_USERLEVEL_EXPERT ) ),
+#endif
aFileDlgFL ( this, SVX_RES( FL_FILEDLG ) ),
aFileDlgROImage ( this, SVX_RES( FI_FILEDLG_RO ) ),
aFileDlgCB ( this, SVX_RES( CB_FILEDLG ) ),
@@ -227,11 +325,20 @@
{
FreeResource();
+ //system fileopen only available in Windows and with gtk vclplug based
+ //picker and on MacOSX (aqua version)
+#if !defined( WNT ) && !defined( ENABLE_GTK ) && !( defined(MACOSX) && defined(QUARTZ) )
+ aFileDlgFL.Hide();
+ aFileDlgCB.Hide();
+#else
+# ifdef ENABLE_GTK
if (!lcl_HasSystemFilePicker())
{
aFileDlgFL.Hide();
aFileDlgCB.Hide();
}
+# endif
+#endif
#if ! defined(QUARTZ)
aPrintDlgFL.Hide();
@@ -310,6 +417,28 @@
aHelpAgentCB.SetClickHdl( aLink );
aHelpAgentResetBtn.SetClickHdl( LINK( this, OfaMiscTabPage, HelpAgentResetHdl_Impl ) );
+#ifdef OOo4Kids
+ aUserLevelBeginnerRB.SetClickHdl( LINK( this, OfaMiscTabPage, UserLevelCheckHdl_Impl ));
+ aUserLevelAverageRB.SetClickHdl( LINK( this, OfaMiscTabPage, UserLevelCheckHdl_Impl ));
+ aUserLevelExpertRB.SetClickHdl( LINK( this, OfaMiscTabPage, UserLevelCheckHdl_Impl ));
+
+ // initialize the Radio button (User Level)
+ switch ( getUserLevel() )
+ {
+ case USER_LEVEL_BEGINNER:
+ aUserLevelBeginnerRB.SetState( TRUE );
+ break;
+ case USER_LEVEL_AVERAGE:
+ aUserLevelAverageRB.SetState( TRUE );
+ break;
+ case USER_LEVEL_EXPERT:
+ aUserLevelExpertRB.SetState( TRUE );
+ break;
+ default:
+ break;
+ }
+#endif // OOo4Kids
+
//fill default names as user data
static const char* aHelpFormatNames[] =
{
@@ -502,6 +631,30 @@
return 0;
}
+#ifdef OOo4Kids
+IMPL_LINK( OfaMiscTabPage, UserLevelCheckHdl_Impl, RadioButton*, pButton )
+{
+ (void) pButton;
+ if ( aUserLevelExpertRB.IsChecked() )
+ setUserLevel( USER_LEVEL_EXPERT );
+ else if ( aUserLevelAverageRB.IsChecked() )
+ setUserLevel( USER_LEVEL_AVERAGE );
+ else
+ setUserLevel( USER_LEVEL_BEGINNER );
+
+ return 0;
+}
+#endif // OOo4Kids
+
// -----------------------------------------------------------------------
// -------------------------------------------------------------------
En ce qui concerne le look, nous avons à placer correctement chaque bouton. La première idée (implémentée, mais peut être débattue) est :
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Niveau Utilisateur :
Débutant [X] Moyen [ ] Expert [ ]
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Module : officecfg
- Common.xcs va contenir le schéma, i.e. le prototype de la valeur née de la focntionnalité
Index: officecfg/registry/schema/org/openoffice/Office/Common.xcs =================================================================== --- officecfg/registry/schema/org/openoffice/Office/Common.xcs (revision 275641) +++ officecfg/registry/schema/org/openoffice/Office/Common.xcs (working copy) @@ -5697,6 +5697,13 @@ </info> <value>false</value> </prop> + <prop oor:name="UserLevel" oor:type="xs:short"> + <info> + <author>ericb</author> + <desc> Determines the level of difficulty of the features presented to the user</desc> + </info> + <value>1</value> + </prop> <prop oor:name="SymbolSet" oor:type="xs:short"> <!-- UIHints: Tools Options General View --> <info>
- Common.xcu contient le niveau courant, sous forme d'un entier court, et dont la valeur initiale correspond à "débutant"
Index: officecfg/registry/data/org/openoffice/Office/Common.xcu
===================================================================
--- officecfg/registry/data/org/openoffice/Office/Common.xcu (revision 275641)
+++ officecfg/registry/data/org/openoffice/Office/Common.xcu (working copy)
@@ -547,6 +547,9 @@
<prop oor:name="UseSystemPrintDialog" install:module="macosx">
<value>true</value>
</prop>
+ <prop oor:name="UserLevel" oor:type="xs:short">
+ <value>1</value>
+ </prop>
</node>
<node oor:name="Save">
<node oor:name="Document">
- Setup.cxu va contenir, le chemin, dans le noeud "Misc" de la valeur "UserLevel" dans les préférences.
Index: officecfg/registry/data/org/openoffice/Setup.xcu
===================================================================
--- officecfg/registry/data/org/openoffice/Setup.xcu (revision 275641)
+++ officecfg/registry/data/org/openoffice/Setup.xcu (working copy)
@@ -838,6 +838,7 @@
org.openoffice.Office.Common/Misc/SymbolSet
org.openoffice.Office.Common/Misc/UseSystemFileDialog
org.openoffice.Office.Common/Misc/UseSystemPrintDialog
+ org.openoffice.Office.Common/Misc/UserLevel
org.openoffice.Office.Common/Misc/SymbolStyle
org.openoffice.Office.Common/Passwords
org.openoffice.Office.Common/Print/PrintingModifiesDocument
Helpers for the implementation (UI only)
To reorganize the tab, the values below will be very helpfull:
#define WHOLE_WIDTH 248 #define EDIT_WIDTH 30 #define UNIT_WIDTH 40 #define COLSPACE RSC_SP_CTRL_DESC_X #define COL0 6 #define COL1 (COL0+6) #define COL2 (COL1+10) #define COL3 (COL2+100) #define COL4 (COL3+COLSPACE) #define COL5 (COL4+EDIT_WIDTH) #define COL6 (COL5+COLSPACE) #define ROWSPACE RSC_SP_CTRL_DESC_Y #define ROW0 3 #define ROW1 (ROW0+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE) #define ROW2 (ROW1+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE) #define ROW3 (ROW2+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE) #define ROW4 (ROW3+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE) #define ROW5 (ROW4+RSC_CD_PUSHBUTTON_HEIGHT+ROWSPACE) #define ROW6 (ROW5+RSC_CD_DROPDOWN_HEIGHT+ROWSPACE) #define ROW7 (ROW6+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE) #define ROW8 (ROW7+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE) #define ROW9 (ROW8+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE) #define ROW10 (ROW9+RSC_CD_CHECKBOX_HEIGHT+ROWSPACE) #define ROW11 (ROW10+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE)


