diff options
Diffstat (limited to 'kcontrol/displayconfig/monitorworkspace.cpp')
-rw-r--r-- | kcontrol/displayconfig/monitorworkspace.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/kcontrol/displayconfig/monitorworkspace.cpp b/kcontrol/displayconfig/monitorworkspace.cpp new file mode 100644 index 000000000..b8907b71d --- /dev/null +++ b/kcontrol/displayconfig/monitorworkspace.cpp @@ -0,0 +1,151 @@ +/** + * monitorworkspace.cpp + * + * Copyright (c) 2011 Timothy Pearson <kb9vqf@pearsoncomputing.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <tqcheckbox.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqlineedit.h> +#include <tqpushbutton.h> + +#include <unistd.h> +#include <string> +#include <stdio.h> +#include <tqstring.h> + +#include "monitorworkspace.h" + +using namespace std; + +/**** Monitor Region ****/ + +MonitorRegion::MonitorRegion() +{ +} + +MonitorRegion::MonitorRegion(TQRect rect) +{ + rectangles.resize(1); + rectangles[0] = rect; +} + +MonitorRegion::MonitorRegion(TQMemArray<TQRect> newrects) +{ + rectangles = newrects; +} + +MonitorRegion::~MonitorRegion() +{ +} + +TQMemArray<TQRect> MonitorRegion::rects() +{ + return rectangles; +} + +MonitorRegion MonitorRegion::unite(MonitorRegion rect) +{ + int i; + int j; + TQMemArray<TQRect> newrectangles = rectangles.copy(); // This MUST be a copy, otherwise Bad Things will happen VERY quickly! + newrectangles.resize(rectangles.count() + rect.rects().count()); + j=0; + for (i=rectangles.count();i<newrectangles.count();i++) { + newrectangles[i] = rect.rects()[j]; + j++; + } + MonitorRegion newregion(newrectangles); + return newregion; +} + +bool MonitorRegion::contains(TQRect rect) +{ + int i; + for (i=0;i<rectangles.count();i++) { + if (rectangles[i].intersects(rect)) + return true; + } + return false; +} + +/**** Draggable Monitor Widget ****/ +DraggableMonitor::DraggableMonitor( TQWidget* parent, const char* name, int wflags ) + : TQLabel( parent, name, wflags ) +{ + setAlignment(AlignHCenter | AlignVCenter); + setFrameShape(Box); + setFrameShadow(Plain); + setLineWidth(4); + setMidLineWidth(4); +} + +DraggableMonitor::~DraggableMonitor() +{ + +} + +void DraggableMonitor::mousePressEvent(TQMouseEvent *event) +{ + lastMousePosition = event->pos(); + emit(monitorSelected(screen_id)); +} + +void DraggableMonitor::mouseMoveEvent(TQMouseEvent *event) +{ + TQPoint mousePos = event->pos(); + TQPoint mouseMove = TQPoint(mousePos.x() - lastMousePosition.x(), mousePos.y() - lastMousePosition.y()); + + int moveToX = x()+mouseMove.x(); + int moveToY = y()+mouseMove.y(); + + int maxX = parentWidget()->width() - width() - 1; + int maxY = parentWidget()->height() - height() - 1; + + if (moveToX < 1) moveToX = 1; + if (moveToY < 1) moveToY = 1; + if (moveToX > maxX) moveToX = maxX; + if (moveToY > maxY) moveToY = maxY; + + move(moveToX, moveToY); +} + +void DraggableMonitor::mouseReleaseEvent(TQMouseEvent *event) +{ + emit(monitorDragComplete(screen_id)); +} + +/**** Draggable Monitor Container ****/ +MonitorWorkspace::MonitorWorkspace( TQWidget* parent, const char* name ) + : TQWorkspace( parent, name ) +{ + +} + +MonitorWorkspace::~MonitorWorkspace() +{ + +} + +void MonitorWorkspace::resizeEvent( TQResizeEvent* re ) +{ + TQWorkspace::resizeEvent(re); + emit(workspaceRelayoutNeeded()); +} + +#include "monitorworkspace.moc" |