int advancedClicked( void ) { /* routine when gadget "Enable advanced ixprefs features" is clicked. */ advanced = !advanced; if (advanced) { AddGadget(ixprefsWnd, ixprefsGadgets[GDX_translateslash], (UWORD)~0); ShowChecked(GDX_translateslash, translateslash); AddGadget(ixprefsWnd, ixprefsGadgets[GDX_enforcerhit], (UWORD)~0); ShowChecked(GDX_enforcerhit, enforcerhit); }else{ EraseGadget(ixprefsWnd, ixprefsGadgets[GDX_translateslash]); EraseGadget(ixprefsWnd, ixprefsGadgets[GDX_enforcerhit]); } return RUNNING; }
/*********************************************************************************** * Procedure: cover_window * Synopsis: (void)cover_window(); * Purpose: cover the window with a bool gadget - deactivate other gadgets ***********************************************************************************/ void cover_window(void) { struct Gadget *gad; if (cover == 0) /* is there a cover already? */ { gad = (struct Gadget *)get_mem(sizeof(struct Gadget)); if (gad) { cover = gad; gad->LeftEdge = global.ri.WindowLeft; gad->TopEdge = global.ri.WindowTitle; gad->Width = global.width; gad->Height = global.height - global.ri.WindowTitle; gad->Flags = GADGHNONE; gad->Activation = 0; gad->GadgetType = BOOLGADGET; AddGadget(global.window, gad, 0); } cover_count = 0; } else /* one cover is enough - as long as we don't take it off too soon */ cover_count++; }
void SnapGadgets::CheckAfterLoadReceivers() { if( _gadgets.empty() && !EditorUtils::editor) { // если ни одной точки привязки нет, создадим одну сами, установленную в центр уровня IPoint min, max; EditorUtils::GetFieldMinMax(min, max); IPoint center( (max.x + min.x + 1) * GameSettings::SQUARE_SIDE / 2, (max.y + min.y + 1) * GameSettings::SQUARE_SIDE / 2); if( max.x > min.x && max.y > min.y ) // иначе поле пустое и нечего туда что-то ставить { SnapGadget *g = new SnapGadget(); g->SetSnapPoint(center); // точки на источниках энергии std::vector<IPoint> vec; Gadgets::square_new_info.EnergySource_Get(vec); if(!vec.empty()) { for(size_t i = 0; i < vec.size(); ++i) { SnapGadgetCaptureElement::SHARED_PTR e(new SnapGadgetCaptureElement()); e->SetIndex(vec[i]); e->activateType = ACTIVATE_TYPE_OR; g->AddElement(e); } }else{ Assert(Gadgets::levelSettings.getString("LevelObjective", "energy") != "receivers"); } // точки в приемниках энергии Gadgets::receivers.GetReceiversPositions(vec); if(!vec.empty()) { for(size_t i = 0; i < vec.size(); ++i) { SnapGadgetReleaseElement::SHARED_PTR e(new SnapGadgetReleaseElement()); e->SetIndex(vec[i]); e->activateType = ACTIVATE_TYPE_AND; g->AddElement(e); } } AddGadget(g); } } _loaded = true; }
bool SnapGadgets::Editor_MouseUp(const IPoint &mouse_pos, Game::Square *sq) { if(EditorUtils::activeEditBtn != EditorUtils::SnapGadgetAdd) { return false; } if(Core::mainInput.IsShiftKeyDown()) { if(_currentEditorGadget) { if(_currentEditorGadget->Editor_MouseUp(GameSettings::ToFieldPos(mouse_pos))) { return true; } } } // Не попали по cущеcтвующим элементам. Ставить новый элемент можно только на видимую часть поля. if(!_currentEditorGadget && !_isRightMouse && FPoint(_mouseDownPos - mouse_pos).GetDistanceToOrigin() < 10.f && Game::isVisible(sq->address)) { SnapGadget *g = new SnapGadget(); { // Добавляем элемент конца... SnapGadgetReleaseElement::SHARED_PTR el = SnapGadgetReleaseElement::SHARED_PTR(new SnapGadgetReleaseElement()); el->SetIndex(sq->address.ToPoint()); el->activateType = ACTIVATE_TYPE_AND; g -> AddElement(el); } { // Добавляем элемент начала... SnapGadgetCaptureElement::SHARED_PTR el = SnapGadgetCaptureElement::SHARED_PTR(new SnapGadgetCaptureElement()); el->SetIndex(sq->address.ToPoint()); el->activateType = ACTIVATE_TYPE_AND; g -> AddElement(el); } // Преобразовываем координаты к координатам на поле int mx = mouse_pos.x + GameSettings::FieldCoordMouse().x; int my = mouse_pos.y + GameSettings::FieldCoordMouse().y; // Уcтанавливаем точку центра g -> SetSnapPoint(IPoint(mx, my)); AddGadget(g); }else{ Editor_ReleaseGadget(); } return false; }
extern "C" int __cdecl wmain(int argc, wchar_t *argv[]) { int iExitCode = -1; wprintf(L"IDesktopGadget Sample\n" L"================================\n" L"Demonstrates how to use the IDesktopGadget interface to programmatically add\n" L"Windows desktop gadgets to the current user's desktop.\n\n"); if (argc != 2) { wprintf(L"ERROR: You need to specify a gadget name!"); return -1; } if (CheckValidInstallPath(argv[1])) { HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (SUCCEEDED(hr)) { IDesktopGadget *pDG; hr = CoCreateInstance(CLSID_DesktopGadget, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDG)); if (SUCCEEDED(hr)) { if (SUCCEEDED(AddGadget(pDG, argv[1]))) { iExitCode = 0; } pDG->Release(); } else { wprintf(L"CoCreateInstance(CLSID_DesktopGadget) failed, error=%X\n", hr); } CoUninitialize(); } } else { wprintf(L"Gadgets cannot be programmatically installed from the specified location."); } return iExitCode; }
void SnapGadgets::LoadLevel(rapidxml::xml_node<> *root) { Clear(); // Удаляем, еcли еcть что-то... rapidxml::xml_node<> *gadgets = root->first_node("Snap"); rapidxml::xml_node<> *gadget = gadgets ? gadgets->first_node("Gadget") : NULL; while (gadget) { SnapGadget *g = new SnapGadget(); int x = Xml::GetFloatAttribute(gadget, "x")*GameSettings::SQUARE_SIDEF; int y = Xml::GetFloatAttribute(gadget, "y")*GameSettings::SQUARE_SIDEF; if(!Xml::GetBoolAttributeOrDef(gadget, "change_point_to_index", false)) { x = int(x/80.f); y = int(y/80.f); } float scrollSpeed = SNAP_SCROLL_SPEED; scrollSpeed = Xml::GetFloatAttribute(gadget, "scrollSpeed"); bool activateType_default = Xml::GetBoolAttributeOrDef(gadget, "activate_relese_type", false); g -> SetSnapPoint(IPoint(x, y)); g -> SetScrollSpeed(scrollSpeed); rapidxml::xml_node<> *element = gadget -> first_node("Item"); int elementsCount = 0; while (element) { SnapGadgetBaseElement::SHARED_PTR e(0); int type_int = Xml::GetIntAttribute(element, "type"); if(type_int == 0) { e = SnapGadgetCaptureElement::SHARED_PTR(new SnapGadgetCaptureElement()); }else if(type_int == 1) { e = SnapGadgetReleaseElement::SHARED_PTR(new SnapGadgetReleaseElement()); }else if(type_int == 2) { e = SnapGadgetReleaseBorderElement::SHARED_PTR(new SnapGadgetReleaseBorderElement()); }else{ Assert(false); } e->LoadLevel(element); g -> AddElement(e); element = element -> next_sibling("Item"); elementsCount += 1; } if (!elementsCount) { delete g; } else { AddGadget(g); } gadget = gadget -> next_sibling("Gadget"); } }