Example #1
0
void addProtoStatusMenuItem(char *protoName)
{
	PROTOACCOUNT *pdescr = Proto_GetAccount(protoName);
	if (pdescr == nullptr || pdescr->ppro == nullptr)
		return;

	HGENMENU hRoot = Menu_GetProtocolRoot(pdescr->ppro);
	if (hRoot == nullptr)
		return;

	char buf[200];
	mir_snprintf(buf, "CSList/ShowList/%s", protoName);
	if (!ServiceExists(buf))
		CreateServiceFunctionParam(buf, showList, (LPARAM)protoName);

	CMenuItem mi(g_plugin);
	mi.flags = CMIF_UNICODE;
	mi.hIcolibItem = forms[0].hIcoLibItem;
	mi.name.w = MODULENAME;
	mi.position = 2000040000;
	mi.pszService = buf;
	mi.root = hRoot;
	Menu_AddStatusMenuItem(&mi);

	RegisterHotkeys(buf, pdescr->tszAccountName, pdescr->iOrder);
}
Example #2
0
int CMraProto::MraRebuildStatusMenu(WPARAM, LPARAM)
{
    CHAR szServiceFunction[MAX_PATH], szValueName[MAX_PATH];

    HGENMENU hRoot;
    {
        TCHAR szItem[MAX_PATH + 64];
        mir_sntprintf(szItem, _countof(szItem), _T("%s Custom Status"), m_tszUserName);

        CMenuItem mi;
        mi.root = pcli->pfnGetProtocolMenu(m_szModuleName);
        mi.name.t = szItem;
        mi.position = 10001;
        hRoot = Menu_AddStatusMenuItem(&mi, m_szModuleName);
    }

    CMenuItem mi;
    mi.position = 2000060000;
    mi.root = hRoot;
    mi.flags = CMIF_UNICODE;
    mi.pszService = szServiceFunction;

    CMStringW szStatusTitle;

    DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT;
    if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES))
        dwCount = MRA_XSTATUS_COUNT;
    for (DWORD i = 0; i < dwCount; i ++) {
        mir_snprintf(szServiceFunction, _countof(szServiceFunction), "/menuXStatus%ld", i);
        mi.position ++;
        if (i) {
            mir_snprintf(szValueName, _countof(szValueName), "XStatus%ldName", i);
            if (mraGetStringW(NULL, szValueName, szStatusTitle))
                mi.name.t = (TCHAR*)szStatusTitle.c_str();
            else
                mi.name.t = (TCHAR*)lpcszXStatusNameDef[i];

            mi.hIcolibItem = hXStatusAdvancedStatusIcons[i];
        }
        else {
            mi.name.t = (TCHAR*)lpcszXStatusNameDef[i];
            mi.hIcolibItem = NULL;
        }
        hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi, m_szModuleName);
    }
    return 0;
}
Example #3
0
int TwitterProto::OnBuildStatusMenu(WPARAM, LPARAM)
{
	CMenuItem mi;
	mi.root = Menu_GetProtocolRoot(this);
	mi.flags = CMIF_TCHAR;
	mi.position = 1001;
	Menu_AddStatusMenuItem(&mi, m_szModuleName);

	// TODO: Disable this menu item when offline
	// "Send Tweet..."
	mi.pszService = "/Tweet";
	CreateProtoService(mi.pszService, &TwitterProto::OnTweet);
	mi.name.t = LPGENT("Send Tweet...");
	mi.position = 200001;
	mi.hIcolibItem = GetIconHandle("tweet");
	Menu_AddStatusMenuItem(&mi, m_szModuleName);
	return 0;
}
Example #4
0
static int CreateMainMenuItems(WPARAM, LPARAM)
{
    char servicename[128];
    int i, count;

    CMenuItem mi;
    mi.position = 2000100000;
    mi.flags = CMIF_TCHAR;
    mcount = 0;
    count = GetProfileCount(0, 0);
    for (i = 0; i < count; i++) {
        TCHAR profilename[128];
        if (!db_get_b(NULL, MODULENAME, OptName(i, SETTING_CREATEMMITEM), 0) || GetProfileName(i, (LPARAM)profilename))
            continue;

        if (db_get_b(NULL, MODULENAME, OptName(i, SETTING_INSUBMENU), 1))
            mi.root = Menu_CreateRoot(MO_STATUS, LPGENT("Status profiles"), 2000100000);

        mi.name.t = profilename;
        mi.position = 2000100000 + mcount;
        mir_snprintf(servicename, _countof(servicename), "%s%d", MS_SS_MENUSETPROFILEPREFIX, mcount);
        switch(mcount) {
        case 0:
            hProfileServices[mcount] = CreateServiceFunction(servicename, profileService0);
            break;
        case 1:
            hProfileServices[mcount] = CreateServiceFunction(servicename, profileService1);
            break;
        case 2:
            hProfileServices[mcount] = CreateServiceFunction(servicename, profileService2);
            break;
        case 3:
            hProfileServices[mcount] = CreateServiceFunction(servicename, profileService3);
            break;
        case 4:
            hProfileServices[mcount] = CreateServiceFunction(servicename, profileService4);
            break;
        case 5:
            hProfileServices[mcount] = CreateServiceFunction(servicename, profileService5);
            break;
        default:
            MessageBox(NULL, TranslateT("There is a maximum of 6 menu items"), TranslateT("StartupStatus"), MB_OK);
            return 0;
        }
        mi.pszService = servicename;
        if (Menu_AddStatusMenuItem(&mi)) {
            menuprofiles[mcount] = i;
            mcount += 1;
        }
    }

    return 0;
}
Example #5
0
int CMraProto::MraRebuildStatusMenu(WPARAM wParam, LPARAM lParam)
{
	CHAR szServiceFunction[MAX_PATH*2], *pszServiceFunctionName, szValueName[MAX_PATH];
	strncpy(szServiceFunction, m_szModuleName, sizeof(szServiceFunction));
	pszServiceFunctionName = szServiceFunction + strlen(m_szModuleName);

	TCHAR szItem[MAX_PATH+64];
	mir_sntprintf(szItem, SIZEOF(szItem), _T("%s Custom Status"), m_tszUserName);

	CLISTMENUITEM mi = { sizeof(mi) };
	mi.position = 2000060000;
	mi.popupPosition = 500085000;
	mi.ptszPopupName = szItem;
	mi.flags = CMIF_UNICODE;
	mi.pszService = szServiceFunction;
	mi.pszContactOwner = m_szModuleName;

	CMStringW szStatusTitle;
	for (size_t i = 0; i < MRA_XSTATUS_COUNT; i++)  {
		mir_snprintf(pszServiceFunctionName, 100, "/menuXStatus%ld", i);
		mi.position++;
		if (i) {
			mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", i);
			if ( mraGetStringW(NULL, szValueName, szStatusTitle))
				mi.ptszName = (TCHAR*)szStatusTitle.c_str();
			else
				mi.ptszName = lpcszXStatusNameDef[i];

			mi.icolibItem = hXStatusAdvancedStatusIcons[i];
		}
		else {
			mi.ptszName = lpcszXStatusNameDef[i];
			mi.hIcon = NULL;
		}
		hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi);
	}
	return 0;
}
Example #6
0
/**
 * This function rebuilds the account context menu (clist status <account>). If user selected to
 * cascade menus, a root menu item is created which holds the popup for all the other items.
 * Note: since miranda 0.8 genmenu is part of core (we don't need to check for).
 *
 * @param	wParam				- 0 not used
 * @param	lParam				- clear bit for old menu items
 *								  0 don't delete old items (its calld by ME_CLIST_PREBUILDSTATUSMENU hook)
 *								  other then 0 delete old items first
 *
 * @return	always 0
 **/
INT_PTR RebuildAccount(WPARAM, LPARAM lParam)
{
	const BYTE mItems = 3;				// menuitems to create
	BYTE item = 0;

	int mProtoCount = pcli->menuProtoCount;

	// on call by hook or first start
	if (!lParam || !hMenuItemAccount) {
		size_t sizeNew = mItems * mProtoCount * sizeof(HGENMENU);
		hMenuItemAccount = (HGENMENU*)mir_realloc(hMenuItemAccount, sizeNew);
		// set all bytes 0 to avoid problems
		memset(hMenuItemAccount, 0, sizeNew);
	}
	// on options change
	else // delete all MenuItems backward (first item second group)
		RemoveMenuItems(hMenuItemAccount, mItems * mProtoCount);

	// load options
	int flag = db_get_b(NULL, MODNAME, SET_MI_ACCOUNT, MCAS_NOTINITIATED);
	if (flag == MCAS_NOTINITIATED) {
		flag = MCAS_EXIMPORT | TRUE;
		db_set_b(NULL, MODNAME, SET_MI_ACCOUNT, flag);
	}

	// loop for all account names
	for (int i = 0; i < mProtoCount; i++) {
		// set all bytes 0 to avoid problems
		item = 0;

		HGENMENU mhRoot = pcli->menuProtos[i].pMenu, mhExIm;
		if (mhRoot == NULL)
			break;

		PROTOACCOUNT *pa = Proto_GetAccount(pcli->menuProtos[i].szProto);

		// create service name main (account module name) and set pointer to end it
		char text[200];
		mir_strcpy(text, pcli->menuProtos[i].szProto);

		CMenuItem mi;
		mi.pszService = text;
		char* tDest = text + mir_strlen(text);

		// support new genmenu style
		mi.root = mhRoot;

		switch (flag) {
		case 3:
			// cascade off
			mhExIm = mhRoot;
			// seperator
			mi.position = 50100;
			hMenuItemAccount[mItems*i + item++] = Menu_AddStatusMenuItem(&mi, pa->szModuleName);
			break;
		case 5:
			// cascade all
			mi.position = 50100;
			mi.hIcolibItem = IcoLib_GetIcon(ICO_COMMON_MAIN);
			mi.name.a = MODULELONGNAME;
			hMenuItemAccount[mItems*i + item] = Menu_AddStatusMenuItem(&mi, pa->szModuleName);
			mhRoot = hMenuItemAccount[mItems*i + item++];
			mhExIm = mhRoot;
			break;
		case 9:
			// cascade Ex/Import
			mi.position = 50100;
			mi.hIcolibItem = IcoLib_GetIcon(ICO_BTN_EXIMPORT);
			mi.name.a = LPGEN("Export/import");
			hMenuItemAccount[mItems*i + item] = Menu_AddStatusMenuItem(&mi, pa->szModuleName);
			mhRoot = hMenuItemAccount[mItems*i + item++];
			mhExIm = mhRoot;
			break;
		default:
			// disable Menue
			return 0;
		}

		// VCard's Ex/Import menuitems
		mi.root = mhExIm;

		// Export
		mir_strcpy(tDest, "/ExportAccount");
		CreateServiceFunction(mi.pszService, svcExIm_Account_Service);
		mi.name.a = LPGEN("&Export xml");
		mi.position = 50200;
		mi.hIcolibItem = IcoLib_GetIcon(ICO_BTN_EXPORT);
		hMenuItemAccount[mItems*i + item++] = Menu_AddStatusMenuItem(&mi, pa->szModuleName);

		// Import
		mir_strcpy(tDest, "/ImportAccount");
		CreateServiceFunction(mi.pszService, svcExIm_Account_Service);
		mi.name.a = LPGEN("&Import xml");
		mi.position = 50300;
		mi.hIcolibItem = IcoLib_GetIcon(ICO_BTN_IMPORT);
		hMenuItemAccount[mItems*i + item++] = Menu_AddStatusMenuItem(&mi, pa->szModuleName);
	}
	return 0;
}