The main reason is to prepare #5348 for landing.
This commit is contained in:
Pavel Sanda 2018-12-14 19:19:08 +01:00
parent 3e9a1c2da7
commit 05282ceeec
3 changed files with 57 additions and 1 deletions

View File

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

View File

@ -1014,6 +1014,56 @@ void Cursor::clearSelection()
}
int Cursor::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 Cursor::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;
}
void Cursor::setTargetX(int x)
{
x_target_ = x;

View File

@ -186,6 +186,12 @@ public:
void setSelection(DocIterator const & where, int n);
///
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 start of selection
CursorSlice selBegin() const;
/// access end of selection