Enable graphics-unify only for selections containing graphics insets.

Follow-up of
https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg204907.html
This commit is contained in:
Pavel Sanda 2018-05-02 22:35:09 +02:00
parent 065e37e96f
commit 641ae5c7ad
3 changed files with 57 additions and 1 deletions

View File

@ -1154,7 +1154,7 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
break; break;
case LFUN_GRAPHICS_UNIFY: case LFUN_GRAPHICS_UNIFY:
flag.setEnabled(cur.selection()); flag.setEnabled(cur.countInsetsInSelection(GRAPHICS_CODE)>1);
break; break;
case LFUN_WORD_FINDADV: { case LFUN_WORD_FINDADV: {

View File

@ -496,6 +496,56 @@ void CursorData::clearSelection()
} }
int CursorData::countInsetsInSelection(InsetCode const & inset_code)
{
if (!selection_)
return 0;
DocIterator from, to;
from = selectionBegin();
to = selectionEnd();
int count = 0;
if (!from.nextInset()) //move to closest inset
from.forwardInset();
while (!from.empty() && from < to) {
Inset * inset = from.nextInset();
if (!inset)
break;
if (inset->lyxCode() == inset_code)
count ++;
from.forwardInset();
}
return count;
}
bool CursorData::insetInSelection(InsetCode const & inset_code)
{
if (!selection_)
return false;
DocIterator from, to;
from = selectionBegin();
to = selectionEnd();
if (!from.nextInset()) //move to closest inset
from.forwardInset();
while (!from.empty() && from < to) {
Inset * inset = from.nextInset();
if (!inset)
break;
if (inset->lyxCode() == inset_code)
return true;
from.forwardInset();
}
return false;
}
bool CursorData::fixIfBroken() bool CursorData::fixIfBroken()
{ {
bool const broken_cursor = DocIterator::fixIfBroken(); bool const broken_cursor = DocIterator::fixIfBroken();

View File

@ -129,6 +129,12 @@ public:
void setSelection(DocIterator const & where, int n); void setSelection(DocIterator const & where, int n);
/// ///
void clearSelection(); void clearSelection();
/// check whether selection contains specific type of inset
/// returns 0 if no selection was made
bool insetInSelection(InsetCode const & inset);
/// count occurences of specific inset type in the selection
/// returns 0 if no selection was made
int countInsetsInSelection(InsetCode const & inset);
/// access to normalized selection anchor /// access to normalized selection anchor
CursorSlice normalAnchor() const; CursorSlice normalAnchor() const;