[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - dbaccess/source

Julien Nabet serval2412 at yahoo.fr
Sat Dec 5 04:16:54 PST 2015


 dbaccess/source/ui/misc/WTypeSelect.cxx |   34 ++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

New commits:
commit c21d081d0d3a66f0b7695c6c82910a7f0b588af2
Author: Julien Nabet <serval2412 at yahoo.fr>
Date:   Fri Dec 4 00:17:05 2015 +0100

    tdf#96234: Type Formatting, Primary key checkbox may be checked
    
    Right click on a field in Type Formatting (Base, paste a table from Calc for eg)
    makes a popup which takes into account now if the field is a primary key or not.
    
    Handles multi-fields primary key, too: the selected fields must be exactly
    those in the primary key, no more, no less.
    
    Cherry-picked from: b0658929bea09386f524879228b35996375537f4
    
    Change-Id: I545b946bccd3fc02f4f6c3bdb99f914d181a3d40
    Reviewed-on: https://gerrit.libreoffice.org/20410
    Reviewed-by: Lionel Elie Mamane <lionel at mamane.lu>
    Tested-by: Lionel Elie Mamane <lionel at mamane.lu>

diff --git a/dbaccess/source/ui/misc/WTypeSelect.cxx b/dbaccess/source/ui/misc/WTypeSelect.cxx
index dcde972..bcd2b85 100644
--- a/dbaccess/source/ui/misc/WTypeSelect.cxx
+++ b/dbaccess/source/ui/misc/WTypeSelect.cxx
@@ -430,23 +430,45 @@ bool OWizTypeSelectList::PreNotify( NotifyEvent& rEvt )
                 ptWhere = pComEvt->GetMousePosPixel();
 
             PopupMenu aContextMenu(ModuleRes(RID_SBA_RTF_PKEYPOPUP));
+            // Should primary key checkbox be checked?
+            const sal_Int32 nCount = GetEntryCount();
+            bool bCheckOk = false;
+            for(sal_Int32 j = 0 ; j < nCount ; ++j)
+            {
+                OFieldDescription* pFieldDescr = static_cast<OFieldDescription*>(GetEntryData(j));
+                // if at least one of the fields is selected but not in the primary key,
+                // or is in the primary key but not selected, then don't check the
+                // primary key checkbox.
+                if( pFieldDescr && pFieldDescr->IsPrimaryKey() != IsEntryPosSelected(j) )
+                {
+                    bCheckOk = false;
+                    break;
+                }
+                if (!bCheckOk && IsEntryPosSelected(j))
+                    bCheckOk = true;
+            }
+
+            if (bCheckOk)
+                aContextMenu.CheckItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, true );
+
             switch( aContextMenu.Execute( this, ptWhere ) )
             {
                 case SID_TABLEDESIGN_TABED_PRIMARYKEY:
                 {
-                    sal_uInt16 nCount = GetEntryCount();
-                    for(sal_uInt16 j = 0 ; j < nCount ; ++j)
+                    for(sal_Int32 j = 0 ; j < nCount ; ++j)
                     {
                         OFieldDescription* pFieldDescr = static_cast<OFieldDescription*>(GetEntryData(j));
                         if( pFieldDescr )
                         {
-                            if(pFieldDescr->IsPrimaryKey() && !IsEntryPosSelected(j))
-                                setPrimaryKey(pFieldDescr,j);
-                            else if(IsEntryPosSelected(j))
+                            if(!bCheckOk && IsEntryPosSelected(j))
                             {
-                                setPrimaryKey(pFieldDescr,j,!pFieldDescr->IsPrimaryKey());
+                                setPrimaryKey(pFieldDescr,j,true);
                                 SelectEntryPos(j);
                             }
+                            else
+                            {
+                                setPrimaryKey(pFieldDescr,j);
+                            }
                         }
                     }
                     GetSelectHdl().Call(this);


More information about the Libreoffice-commits mailing list