bool CTablePositioner::TryPosition(int left_x, int top_y)
{
	write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Trying position %i, %i\n",
		left_x, top_y);
	for (int i=0; i<_number_of_tables; i++)
	{
		HWND potential_neighbour_window = HWNDs_of_child_windows[i];
		if (potential_neighbour_window == p_autoconnector->attached_hwnd())
		{
			// Our window to be aligned is also in the list.
			// Don't try to align the window to itself.
			continue;
		}
		if (PotentialNewPositionOverlapsTable(left_x, top_y, 
			potential_neighbour_window))
		{
			write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Candidate-position overlaps table\n");
			return false;
		}
	}
	// We have found a good position that does not overlap any other table
	// Move our connected table over there.
	_new_left_x = left_x;
	_new_top_y  = top_y;
	write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Found a free slot\n");
	write_log(preferences.debug_table_positioner(), "[CTablePositioner] TryPosition() Going to move the table to %i, %i\n",
		_new_left_x, _new_top_y);
	MoveWindowToItsPosition();
	return true;
}
void CTablePositioner::MoveToTopLeft()
{
	write_log(preferences.debug_table_positioner(), "[CTablePositioner] MoveToTopLeft()\n");
	_new_left_x = 0;
	_new_top_y  = 0;
	MoveWindowToItsPosition();
}
Beispiel #3
0
void CTablePositioner::MoveToBottomRight()
{
	write_log(preferences.debug_table_positioner(), "[CTablePositioner] MoveToBottomRight()\n");
	_new_left_x = _desktop_rectangle.right  - _table_size_x + 1;
	_new_top_y  = _desktop_rectangle.bottom - _table_size_y + 1;
	MoveWindowToItsPosition();
}
// To be called once per heartbeat
void CTablePositioner::AlwaysKeepPositionIfEnabled()
{
	if (!preferences.table_positioner_always_keep_position()
		|| (p_autoconnector->attached_hwnd() == NULL))
	{
		write_log(preferences.debug_table_positioner(), "[CTablePositioner] AlwaysKeepPositionIfEnabled() disabled or not connected\n");
		return;
	}
	RECT current_position;
	GetWindowRect(p_autoconnector->attached_hwnd(), &current_position);
	if ((current_position.left == _new_left_x)
		&& (current_position.top == _new_top_y))
	{
		write_log(preferences.debug_table_positioner(), "[CTablePositioner] AlwaysKeepPositionIfEnabled() position is good\n");
	}
	else
	{
		write_log(preferences.debug_table_positioner(), "[CTablePositioner] AlwaysKeepPositionIfEnabled() restoring old position\n");
		MoveWindowToItsPosition();
	}
}