diff options
author | Julien Nabet <serval2412@yahoo.fr> | 2015-12-04 00:17:05 +0100 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2015-12-05 12:16:31 +0000 |
commit | c21d081d0d3a66f0b7695c6c82910a7f0b588af2 (patch) | |
tree | 65a92b18c488a4d33dcf3b0bc5a8c32ba2319f95 /dbaccess/source/ui/misc/WTypeSelect.cxx | |
parent | 446a3a06098ef75c034ae00e6671255973e7e5a0 (diff) |
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@mamane.lu>
Tested-by: Lionel Elie Mamane <lionel@mamane.lu>
Diffstat (limited to 'dbaccess/source/ui/misc/WTypeSelect.cxx')
-rw-r--r-- | dbaccess/source/ui/misc/WTypeSelect.cxx | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/dbaccess/source/ui/misc/WTypeSelect.cxx b/dbaccess/source/ui/misc/WTypeSelect.cxx index dcde972e33d3..bcd2b85f4746 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); |