问题:现在50平台上的bar是可以任意手动拖动的(在主菜单界面拖动更改),请问能不能把这个功能关掉。也就是主菜单界面的app应用不能随意拖动到shortcur bar上。
回答:
可以尝试如下修改:
1.VappLauncherCosmosMmPageMenu::handlePenDown
if ((getHover().group == VCP_PAGE_MENU_GROUP_MAIN && getHover().index >= VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_UNCHANGABLE_PAGE_ITEM_COUNT) ||//这个条件保留
(getHover().group == VCP_PAGE_MENU_GROUP_BOTTOM_BAR && getHover().index < VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_CHANGABLE_BAR_ITEM_COUNT))//把这个条件去掉,在长按shortcut上的icon时就不会进入editor模式。如果需要长按shortcut还是可以进入editor mode,这条可以不改
2.VappLauncherCosmosMmPageMenu::handleOrganizeStart
if ((getHover().group == VCP_PAGE_MENU_GROUP_MAIN && getHover().index >= VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_UNCHANGABLE_PAGE_ITEM_COUNT) ||//保留
(getHover().group == VCP_PAGE_MENU_GROUP_BOTTOM_BAR && getHover().index < VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_CHANGABLE_BAR_ITEM_COUNT))//去掉这个,editor模式下,shortcut上的icon不会被抓起来。
3.VappLauncherCosmosMmCell::updateEditMode函数中
if (strncmp(m_appName, "native.mtk.launcher", MMI_APP_NAME_MAX_LEN) == 0)//仿照home icon,将需要固定的shortcut icon的opecity做调整
{
if (editMode)
{
m_stableFrameContainer->setOpacity(0.3f);
}
else
{
m_stableFrameContainer->setOpacity(1.0f);
}
}
经过上述操作后,shortcut bar上的icon确实是不会被抓起来了,也无法实现拖动了。但是cell上的icon可以被拖动到shortcut bar,并且拖动至该区域后该icon会消失,cell上相应的出现了空白区域。有没有方法修改cell上的icon拖动区域,不让其拖动到shortcut bar区域内呢。
void VappLauncherCosmosMmPageMenu::inPageOrganizeMove(VfxS32 touchX, VfxS32 touchY)
{
const VcpPageMenuCellPos currentTo = cellHittest(VfxPoint(touchX, touchY), VFX_TRUE);
const VcpPageMenuCellPos prevOrganizeTo = getOrganizeTo();
if (currentTo.group == prevOrganizeTo.group)
{
if (currentTo.index != MAINMENU_HITTEST_NOT_FOUND &&
((currentTo.group == VCP_PAGE_MENU_GROUP_MAIN && currentTo.index >= VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_UNCHANGABLE_PAGE_ITEM_COUNT) ||
(currentTo.group == VCP_PAGE_MENU_GROUP_BOTTOM_BAR && currentTo.index < VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_CHANGABLE_BAR_ITEM_COUNT)))
{
setOrganizeTo(currentTo);
if (prevOrganizeTo != getOrganizeTo() )
{
if (getOrganizeTo().index > prevOrganizeTo.index)
{
for (VfxS32 i = prevOrganizeTo.index; i < getOrganizeTo().index; ++i)
{
VcpPageMenuCellPos dest(prevOrganizeTo.group, i);
VcpPageMenuCellPos src(prevOrganizeTo.group, i+1);
setCell(dest, getCell(src) );
}
setCell(getOrganizeTo(), m_menuView->getDraggingFrame() );
}
else
{
for (VfxS32 i = prevOrganizeTo.index; i > getOrganizeTo().index; --i)
{
VcpPageMenuCellPos dest(prevOrganizeTo.group, i);
VcpPageMenuCellPos src(prevOrganizeTo.group, i-1);
setCell(dest, getCell(src) );
}
setCell(getOrganizeTo(), m_menuView->getDraggingFrame() );
}
}
}
}
else if (currentTo.group == VCP_PAGE_MENU_GROUP_MAIN)
{
// remove the dragging cell from the old page
removeCellFrom(getOrganizeTo() );
// put the dragging cell to the new page
const VcpPageMenuCellPos currentDirectPos = cellHittest(VfxPoint(touchX, touchY), VFX_FALSE);
putCellTo(currentDirectPos, m_menuView->getDraggingFrame() );
}
else if (currentTo.group == VCP_PAGE_MENU_GROUP_BOTTOM_BAR)
{
VfxBool isFull = VFX_TRUE;
for (VfxS32 i = 0; i < VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_CHANGABLE_BAR_ITEM_COUNT; ++i)
{
if (m_groupCells[i] == NULL)
{
isFull = VFX_FALSE;
break;
}
}
#ifdef __CHERRY_CUST__
isFull = VFX_TRUE;//让shortcut恒为full,其他所有的icon都不能拖到shortcut上
#endif
if (!isFull)
{
// remove the dragging cell from the old page
const VcpPageMenuCellPos currentDirectPos = cellHittest(VfxPoint(touchX, touchY), VFX_FALSE);
if (currentDirectPos.index < VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_CHANGABLE_BAR_ITEM_COUNT)
{
removeCellFrom(getOrganizeTo() );
// put the dragging cell to the new page
putCellTo(currentDirectPos, m_menuView->getDraggingFrame() );
}
}
}
m_menuView->setAnimDirty(VAPP_LAUNCHER_COSMOS_MM_ORGANIZE_DURATION);
checkUpdate();
}
经过以上修改后,就大功告成了。