Exemple #1
0
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;
}
Exemple #2
0
/***********************************************************************************
 * 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");
	}
}