summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Nabet <serval2412@yahoo.fr>2015-12-04 00:17:05 +0100
committerLionel Elie Mamane <lionel@mamane.lu>2015-12-05 12:16:31 +0000
commitc21d081d0d3a66f0b7695c6c82910a7f0b588af2 (patch)
tree65a92b18c488a4d33dcf3b0bc5a8c32ba2319f95
parent446a3a06098ef75c034ae00e6671255973e7e5a0 (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>
-rw-r--r--dbaccess/source/ui/misc/WTypeSelect.cxx34
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);