/*************************************************************************** kmagview.h - description ------------------- begin : Mon Feb 12 23:45:41 EST 2001 copyright : (C) 2001-2003 by Sarang Lakare email : sarang#users.sf.net copyright : (C) 2003-2005 by Olaf Schmidt email : ojschmidt@kde.org ***************************************************************************/ /*************************************************************************** * * * 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; version 2 of the License * * * ***************************************************************************/ #ifndef KMagZoomView_h_ #define KMagZoomView_h_ #ifdef HAVE_CONFIG_H #include #endif // include files for TQt #include #include #include #include #include #include #include #include //class KMagSelRect; #include "kmagselrect.h" /** * The KMagZoomView class provides the view widget for the KmagApp instance. * * @author Olaf Schmikt * @author Sarang Lakare */ class KMagZoomView : public TQScrollView { Q_OBJECT public: /// Constructor for the main view KMagZoomView(TQWidget *parent = 0, const char *name=0); /// Destructor for the main view ~KMagZoomView(); /// Toggles the refreshing of the window void toggleRefresh(); /// Returns the currently displayed zoomed view TQPixmap getPixmap(); /// Returns the state of the refresh switch bool getRefreshStatus() const { return m_refreshSwitch; }; /// Returns teh status of followMouse bool getFollowMouse() const { return m_followMouse; }; /// Get the status of "show rect. always" bool getShowSelRect() const { return (m_selRect.getAlwaysVisible()); }; /// Get the coordinates of the selection rectangle TQRect getSelRectPos() const { return (TQRect&)(m_selRect); }; /// Returns the current state of show mouse unsigned int getShowMouseType() const; /// Returns the different ways of showing mouse cursor TQStringList getShowMouseStringList() const; /// Returns the status of "fit to window" option bool getFitToWindow() const { return (m_fitToWindow); }; public slots: /// Sets zoom to the given value void setZoom(float zoom = 0.0); /// Sets the rotation to the given value void setRotation(int rotation = 0); /// Sets whether the magnified image is shown inverted void setInvertation(bool invert); /// Grabs a frame from the given portion of the display void grabFrame(); /// Update the mouse cursor in the zoom view void updateMouseView(); /// Set grab-window-follows-mouse mode void followMouse(bool follow = true); /// Shows/Hides the selection marker void showSelRect(bool show=true); /// Set the position of the selection region to the given pos void setSelRectPos(const TQRect & rect); /// Set the refresh rate in fps (frames per second) void setRefreshRate(float fps); /// Shows/Hides mouse cursor in the zoomed view bool showMouse(unsigned int type); /// Set the status of "fit to window" option void setFitToWindow (bool fit=true); /// Fits the zoom view to the zoom view window void fitToWindow(); signals: void contextMenu(TQPoint pos); protected: /// Called when the widget is hidden void hideEvent( TQHideEvent * e); /// Called when the widget is shown void showEvent( TQShowEvent * e); /// Called when the widget has been resized void resizeEvent(TQResizeEvent *e); /// Called when the widget is to be repainted void drawContents ( TQPainter * p, int clipx, int clipy, int clipw, int cliph ); /// This function calculates the mouse position relative to the image TQPoint calcMousePos(bool updateMousePos=true); /// This function draws the mouse cursor void paintMouseCursor(TQPaintDevice *dev, TQPoint mousePos); /// Called when mouse click is detected void mousePressEvent (TQMouseEvent *e); /// Called when mouse is moved void mouseMoveEvent(TQMouseEvent *e); /// Mouse button release event handler void mouseReleaseEvent(TQMouseEvent *e); /// Mouse button release event handler void keyPressEvent(TQKeyEvent *e); /// Mouse button release event handler void keyReleaseEvent(TQKeyEvent *e); /// Catch context menu events void contextMenuEvent (TQContextMenuEvent *e); /// Mouse button release event handler void focusOutEvent(TQFocusEvent *e); /// Returns the rectangle where the pixmap will be drawn TQRect pixmapRect(); private: /// Stores the pixmap grabbed from the screen - to be zoomed TQPixmap m_grabbedPixmap; /// The selected rectangle which is to be grabbed KMagSelRect m_selRect; /// Grabs a window when the timer goes off TQTimer m_grabTimer; /// Updates the mouse view TQTimer m_mouseViewTimer; /// Zoom matrix TQWMatrix m_zoomMatrix; /// Inverted zoom matrix TQWMatrix m_invertedMatrix; /// Saves the mouse position when a button is clicked and b4 the cursor is moved to new position TQPoint m_oldMousePos; /// Saves the center of the grab window TQPoint m_oldCenter; /// Possible modes for the mouse to be in enum KMagMouseMode { Normal, StartSelect, ResizeSelection, MoveSelection, GrabSelection }; /// The current mode which the mouse is KMagMouseMode m_mouseMode; /// stores the state of the Ctrl key bool m_ctrlKeyPressed; /// stores the state of the Shift key bool m_shiftKeyPressed; /// Store the more recent updated cursor position TQPoint m_latestCursorPos; /// Various ways of showing mouse cursor TQStringList m_showMouseTypes; // configuration options: /// To follow mouse motion or not when no key is pressed bool m_followMouse; /// State of refreshing - on or off bool m_refreshSwitch; /// Stores the state of the refresh switch on hide event bool m_refreshSwitchStateOnHide; /// Show mouse cursor type - 0 : do not show, non zero: show unsigned int m_showMouse; /// Frames per second for refresh unsigned int m_fps; /// Stores the amount to zoom the pixmap float m_zoom; /// Stores the degrees to rotate the pixmap int m_rotation; /// Whether the magnified image is to be shown inverted int m_invert; /// Fit the zoom view to the zoom window bool m_fitToWindow; /// Update the magnification matrix void updateMatrix(); }; #endif // KMagZoomView_h_