static int mh_newindex (lua_State* l) { menu* m = lua_touserdata(l,1); const char* nm = luaL_checkstring(l,2); if (streq(nm, "checked")) { if (m->sub) luaL_error(l, "unsupported operation"); int flags = MF_BYCOMMAND | (luaL_checkboolean(l,3)? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(m->parent, m->command, flags); } else if (streq(nm, "enabled")) { if (m->sub) luaL_error(l, "unsupported operation"); int flags = MF_BYCOMMAND | (luaL_checkboolean(l,3)? MF_ENABLED : MF_DISABLED); EnableMenuItem(m->parent, m->command, flags); } else if (streq(nm, "name")) SetMenuName(m->parent, m->position, luaL_checkstring(l,3)); else if (streq(nm, "text")) { const char* str = luaL_checkstring(l,3); const wchar_t* wstr = strcvt(str, CP_UTF8, CP_UTF16, NULL); mh_updateLabel(m, wstr, -1, -1); free(wstr); } else if (streq(nm, "onAction")) { if (m->sub || m->command<IDM_CUSTOMCOMMAND) luaL_error(l, "unsupported operation"); if (!lua_isfunction(l,2)) luaL_typerror(l, 2, "function"); lua_pushlightuserdata(l, m->command); lua_pushvalue(l,3); lua_rawset(l, LUA_REGISTRYINDEX); void** p = getCustomCommand(m->command - IDM_CUSTOMCOMMAND); *p = lua_topointer(l,3); } else if (streq(nm, "accelerator")) { const char* str = NULL; if (!lua_isnil(l,3)) str = luaL_checkstring(l,3); int f, k; if (!(m->sub) && str && parseKeyName(str, &f, &k)) { BOOL b = removeAccelerator(m->command); addAccelerator(f, k, m->command); mh_updateLabel(m, NULL, f, k); } else if (!str) { BOOL b = removeAccelerator(m->command); mh_updateLabel(m, NULL, 0, 0); }} else if (streq(nm, "radio")) { BOOL b = luaL_checkboolean(l,3); MENUITEMINFO mii; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_FTYPE; if (!GetMenuItemInfo(m->parent, m->command, FALSE, &mii)) return 0; if (b) mii.fType|=MFT_RADIOCHECK; else mii.fType&=~MFT_RADIOCHECK; if (!SetMenuItemInfo(m->parent, m->command, FALSE, &mii)) return 0; return 1; } // SUITE else luaL_argerror(l, 2, "unknown property"); return 0; }
void TextMessageDlg::newMsg(const TextMessage& msg, bool store) { switch(msg.nMsgType) { case MSGTYPE_USER : { QString line = ui.historyTextEdit->addTextMessage(msg); ui.newmsgLabel->setText(tr("New message")); QString folder = ttSettings->value(SETTINGS_MEDIASTORAGE_USERLOGFOLDER).toString(); if(store && folder.size()) { User user; if(TT_GetUser(ttInst, m_userid, &user)) { if(!m_logFile.isOpen()) openLogFile(m_logFile, folder, _Q(user.szNickname)); } writeLogEntry(m_logFile, line); } } break; case MSGTYPE_CUSTOM : { QStringList cmd_msg = getCustomCommand(msg); if(cmd_msg.size() >= 2 && cmd_msg[0] == TT_INTCMD_TYPING_TEXT) { if(cmd_msg[1] == "1") { ui.newmsgLabel->setText(tr("New message - remote user typing.")); if(m_remote_typing_id) killTimer(m_remote_typing_id); m_remote_typing_id = startTimer(REMOTE_TYPING_DELAY); } else { if(m_remote_typing_id) killTimer(m_remote_typing_id); m_remote_typing_id = 0; ui.newmsgLabel->setText(tr("New message")); } } break; } default : break; } }
static int mh_index (lua_State* l) { menu* m = lua_touserdata(l,1); if (lua_isnumber(l,2)) { if (!m->sub) return 0; int n = lua_tointeger(l,2); if (n==0) n=-1; if (n<0) n += GetMenuItemCount(m->menu); else n--; MENUITEMINFO mii; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_ID | MIIM_SUBMENU; if (!GetMenuItemInfo(m->menu, n, TRUE, &mii)) return 0; menu x; x.sub = mii.hSubMenu!=0; x.origin = m->origin; x.parent = m->menu; x.position = n; if (mii.hSubMenu!=0) x.menu = mii.hSubMenu; else x.command = mii.wID; lua_settop(l,0); lua_pushfulluserdata(l, &x, sizeof(x), "menuhandle"); return 1; } const char* nm = luaL_checkstring(l,2); if (streq(nm, "checked")) { if (m->sub) luaL_error(l, "unsupported operation"); MENUITEMINFO mii; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STATE | MIIM_FTYPE; if (!GetMenuItemInfo(m->parent, m->command, FALSE, &mii)) return 0; lua_pushboolean(l, 0!=(mii.fState&MFS_CHECKED)); return 1; } else if (streq(nm, "radio")) { if (m->sub) luaL_error(l, "unsupported operation"); MENUITEMINFO mii; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_FTYPE; if (!GetMenuItemInfo(m->parent, m->command, FALSE, &mii)) return 0; lua_pushboolean(l, 0!=(mii.fType&MFT_RADIOCHECK)); return 1; } else if (streq(nm, "enabled")) { if (m->sub) luaL_error(l, "unsupported operation"); MENUITEMINFO mii; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STATE; if (!GetMenuItemInfo(m->parent, m->command, FALSE, &mii)) return 0; lua_settop(l,0); lua_pushboolean(l, 0==(mii.fState&MFS_DISABLED)); return 1; } else if (streq(nm, "text")) { const wchar_t* wc = mh_getLabel(m); const char* mbc = strcvt(wc, CP_UTF16, CP_UTF8, NULL); lua_pushstring(l, mbc); free(mbc); free(wc); return 1; } else if (streq(nm, "name")) { const char* menuName = GetMenuName(m->parent, m->position); lua_settop(l,0); lua_pushstring(l,menuName); return 1; } else if (streq(nm, "accelerator")) { int f, k; if (!(m->sub) && findAccelerator(m->command, &f, &k)) { const wchar_t* wkn = getKeyName(f,k,0); const char* kn = strcvt(wkn, CP_UTF16, CP_UTF8, NULL); lua_pushstring(l,kn); free(kn); free(wkn); return 1; } return 0; } else if (streq(nm, "onAction")) { if (m->sub) return 0; if (m->command>=IDM_CUSTOMCOMMAND) lua_pushluafunction(l, *getCustomCommand(m->command - IDM_CUSTOMCOMMAND)); else { lua_pushinteger(l, m->command); lua_pushcclosure(l, mh_commandclosure, 1); } return 1; } else if (streq(nm, "builtIn")) { if (m->sub) return 0; lua_pushboolean(l, m->command<IDM_CUSTOMCOMMAND); return 1; } else if (streq(nm, "parent")) { menu x; x.sub = TRUE; x.parent = GetParentMenu(m->parent, m->origin, &(x.position)); x.menu = m->parent; x.origin = m->origin; if (!x.parent) return 0; lua_settop(l,0); lua_pushfulluserdata(l, &x, sizeof(x), "menuhandle"); return 1; } else if (streq(nm, "parentHandle")) { lua_pushlightuserdata(l, m->parent); return 1; } else if (streq(nm, "handle") || streq(nm, "command")) { if (m->sub) lua_pushlightuserdata(l, m->command); else lua_pushinteger(l, m->command); return 1; } //SUITE else if (luaL_getmetafield(l, 1, nm)) return 1; else if (m->sub) { MENUITEMINFO mii; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_DATA; for (int i=0, n=GetMenuItemCount(m->menu); i<n; i++) { if (!GetMenuItemInfo(m->menu, i, TRUE, &mii)) continue; if (mii.dwItemData && streq(nm, mii.dwItemData)) { menu x; x.sub = mii.hSubMenu!=0; x.parent = m->menu; x.origin = m->origin; x.position = i; if (mii.hSubMenu!=0) x.menu = mii.hSubMenu; else x.command = mii.wID; lua_settop(l,0); lua_pushfulluserdata(l, &x, sizeof(x), "menuhandle"); return 1; }}} return 0; }