mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
This commit is contained in:
364
Library/MeterWindow.h
Normal file
364
Library/MeterWindow.h
Normal file
@@ -0,0 +1,364 @@
|
||||
/*
|
||||
Copyright (C) 2001 Kimmo Pekkola
|
||||
|
||||
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
/*
|
||||
$Header: /home/cvsroot/Rainmeter/Library/MeterWindow.h,v 1.1.1.1 2005/07/10 18:51:06 rainy Exp $
|
||||
|
||||
$Log: MeterWindow.h,v $
|
||||
Revision 1.1.1.1 2005/07/10 18:51:06 rainy
|
||||
no message
|
||||
|
||||
Revision 1.21 2004/07/11 17:19:29 rainy
|
||||
Changed messageboxes to logs.
|
||||
Mouse leave checks transparent pixels.
|
||||
Added !RainmeterToggleConfig.
|
||||
|
||||
Revision 1.20 2004/06/05 10:55:54 rainy
|
||||
Too much changes to be listed in here...
|
||||
|
||||
Revision 1.19 2004/03/13 16:19:17 rainy
|
||||
Added support for multiple configs
|
||||
|
||||
Revision 1.18 2003/12/05 15:50:10 Rainy
|
||||
Multi-instance changes.
|
||||
|
||||
Revision 1.17 2003/02/10 18:10:56 rainy
|
||||
no message
|
||||
|
||||
Revision 1.16 2002/12/23 14:25:21 rainy
|
||||
Separated skin and other settings.
|
||||
Stats are now written in ini file.
|
||||
|
||||
Revision 1.15 2002/07/01 15:27:36 rainy
|
||||
AlwaysOnTop gets now three values.
|
||||
Added Toggle().
|
||||
Added RainmeterCurrentConfig and RainmeterCurrentConfigIni.
|
||||
The ini file's timestamp is checked before it is overwritten.
|
||||
AboutBox is now in separate source file.
|
||||
Added SnapEdges.
|
||||
|
||||
Revision 1.14 2002/05/05 10:48:15 rainy
|
||||
The last message is stored into a membervariable.
|
||||
|
||||
Revision 1.13 2002/05/04 08:14:45 rainy
|
||||
Configs store also the names of the ini-files.
|
||||
|
||||
Revision 1.12 2002/04/27 10:27:42 rainy
|
||||
Added hide/show to meters and enable/disable to measures
|
||||
|
||||
Revision 1.11 2002/03/31 09:58:53 rainy
|
||||
Added some comments
|
||||
|
||||
Revision 1.10 2001/12/23 10:14:09 rainy
|
||||
Added support for different configs.
|
||||
The position of the window is now remembered.
|
||||
|
||||
Revision 1.9 2001/10/28 10:15:21 rainy
|
||||
Added left and right mouse up actions.
|
||||
IsNT() can now identify different OS more precisely.
|
||||
|
||||
Revision 1.8 2001/10/14 07:26:21 rainy
|
||||
Added m_StatsDate
|
||||
|
||||
Revision 1.7 2001/09/26 16:25:44 rainy
|
||||
Added support for statistics.
|
||||
Meters and Measures are now stored here.
|
||||
|
||||
Revision 1.6 2001/09/01 12:57:13 rainy
|
||||
Added support for Bar and Bitmap meters.
|
||||
|
||||
Revision 1.5 2001/08/25 18:08:34 rainy
|
||||
Added mousebutton actions.
|
||||
The About dialog has now the build date.
|
||||
|
||||
Revision 1.4 2001/08/25 17:14:00 rainy
|
||||
Pointer to CRainmeter is now stored in a member variable.
|
||||
Added few more methods.
|
||||
|
||||
Revision 1.3 2001/08/19 09:10:18 rainy
|
||||
Added GetWindow() and OnGetRevID().
|
||||
|
||||
Revision 1.2 2001/08/12 15:37:39 Rainy
|
||||
ToggleWindowIfNecessary is now ShowWindowIfAppropriate.
|
||||
Added method for mouseover messages.
|
||||
|
||||
Revision 1.1.1.1 2001/08/11 10:58:19 Rainy
|
||||
Added to CVS.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __METERWINDOW_H__
|
||||
#define __METERWINDOW_H__
|
||||
|
||||
#pragma warning(disable: 4786)
|
||||
|
||||
#include <windows.h>
|
||||
#include <gdiplus.h>
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include "ConfigParser.h"
|
||||
#include "Export.h"
|
||||
|
||||
#define BEGIN_MESSAGEPROC switch(uMsg) {
|
||||
#define MESSAGE(handler, msg) case msg: return Window?Window->handler(wParam, lParam):DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
#define REJECT_MESSAGE(msg) case msg: return 0;
|
||||
#define END_MESSAGEPROC } return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
|
||||
#define WM_DELAYED_EXECUTE WM_APP
|
||||
|
||||
enum MOUSE
|
||||
{
|
||||
MOUSE_LMB_DOWN,
|
||||
MOUSE_LMB_UP,
|
||||
MOUSE_RMB_DOWN,
|
||||
MOUSE_RMB_UP,
|
||||
MOUSE_OVER,
|
||||
MOUSE_LEAVE
|
||||
};
|
||||
|
||||
enum ZPOSITION
|
||||
{
|
||||
ZPOSITION_ONDESKTOP = -2,
|
||||
ZPOSITION_ONBOTTOM = -1,
|
||||
ZPOSITION_NORMAL = 0,
|
||||
ZPOSITION_ONTOP = 1,
|
||||
ZPOSITION_ONTOPMOST = 2
|
||||
};
|
||||
|
||||
enum BGMODE
|
||||
{
|
||||
BGMODE_IMAGE = 0,
|
||||
BGMODE_COPY,
|
||||
BGMODE_SOLID,
|
||||
BGMODE_SCALED_IMAGE
|
||||
};
|
||||
|
||||
enum HIDEMODE
|
||||
{
|
||||
HIDEMODE_NONE = 0,
|
||||
HIDEMODE_HIDE,
|
||||
HIDEMODE_FADEIN,
|
||||
HIDEMODE_FADEOUT
|
||||
};
|
||||
|
||||
enum BEVELTYPE
|
||||
{
|
||||
BEVELTYPE_NONE,
|
||||
BEVELTYPE_UP,
|
||||
BEVELTYPE_DOWN
|
||||
};
|
||||
|
||||
enum BANGCOMMAND
|
||||
{
|
||||
BANG_REFRESH,
|
||||
BANG_REDRAW,
|
||||
BANG_TOGGLEMETER,
|
||||
BANG_SHOWMETER,
|
||||
BANG_HIDEMETER,
|
||||
BANG_TOGGLEMEASURE,
|
||||
BANG_ENABLEMEASURE,
|
||||
BANG_DISABLEMEASURE,
|
||||
BANG_SHOW,
|
||||
BANG_HIDE,
|
||||
BANG_TOGGLE,
|
||||
BANG_MOVE,
|
||||
BANG_ZPOS,
|
||||
BANG_LSHOOK,
|
||||
BANG_ABOUT,
|
||||
BANG_MOVEMETER,
|
||||
BANG_PLUGIN
|
||||
};
|
||||
|
||||
enum PATH_FOLDER
|
||||
{
|
||||
PATH_FOLDER_INI,
|
||||
PATH_FOLDER_SKINS,
|
||||
PATH_FOLDER_CURRENT_SKIN,
|
||||
PATH_FOLDER_PLUGIN
|
||||
};
|
||||
|
||||
class CRainmeter;
|
||||
class CMeasure;
|
||||
class CMeter;
|
||||
|
||||
class CMeterWindow
|
||||
{
|
||||
public:
|
||||
CMeterWindow(std::wstring& config, std::wstring& iniFile);
|
||||
~CMeterWindow();
|
||||
|
||||
int Initialize(CRainmeter& Rainmeter);
|
||||
|
||||
void RunBang(BANGCOMMAND bang, const WCHAR* arg);
|
||||
|
||||
void MoveMeter(int x, int y, const WCHAR* name);
|
||||
void HideMeter(const WCHAR* name);
|
||||
void ShowMeter(const WCHAR* name);
|
||||
void ToggleMeter(const WCHAR* name);
|
||||
void DisableMeasure(const WCHAR* name);
|
||||
void EnableMeasure(const WCHAR* name);
|
||||
void ToggleMeasure(const WCHAR* name);
|
||||
void Refresh(bool init);
|
||||
void Redraw();
|
||||
|
||||
void MoveWindow(int x, int y);
|
||||
void ChangeZPos(ZPOSITION zPos);
|
||||
|
||||
Gdiplus::Bitmap* GetDoubleBuffer() { return m_DoubleBuffer; };
|
||||
HWND GetWindow() { return m_Window; };
|
||||
|
||||
CConfigParser& GetParser() { return m_Parser; };
|
||||
|
||||
const std::wstring& GetSkinAuthor() { return m_Author; };
|
||||
const std::wstring& GetSkinName() { return m_SkinName; };
|
||||
const std::wstring& GetSkinIniFile() { return m_SkinIniFile; };
|
||||
|
||||
std::list<CMeasure*>& GetMeasures() { return m_Measures; };
|
||||
std::list<CMeter*>& GetMeters() { return m_Meters; };
|
||||
|
||||
ZPOSITION GetWindowZPosition() { return m_WindowZPosition; }
|
||||
bool GetNativeTransparency() { return m_NativeTransparency; }
|
||||
bool GetClickThrough() { return m_ClickThrough; }
|
||||
bool GetKeepOnScreen() { return m_KeepOnScreen; }
|
||||
bool GetWindowDraggable() { return m_WindowDraggable; }
|
||||
bool GetSavePosition() { return m_SavePosition; }
|
||||
bool GetSnapEdges() { return m_SnapEdges; }
|
||||
HIDEMODE GetWindowHide() { return m_WindowHide; }
|
||||
int GetAlphaValue() { return m_AlphaValue; }
|
||||
int GetUpdateCounter() { return m_UpdateCounter; }
|
||||
|
||||
void AddMeasureBang(const WCHAR* bang, int index, CMeasure* measure);
|
||||
|
||||
LRESULT OnCopyData(WPARAM wParam, LPARAM lParam);
|
||||
|
||||
protected:
|
||||
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
LRESULT OnPaint(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCreate(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnTimer(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnCommand(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnNcHitTest(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnWindowPosChanging(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnContextMenu(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedExecute(WPARAM wParam, LPARAM lParam);
|
||||
|
||||
private:
|
||||
void CreateRegion(bool clear);
|
||||
void GetSkinFolders(const std::wstring& folder);
|
||||
Gdiplus::Bitmap* GrabDesktop(int x, int y, int w, int h);
|
||||
void SnapToWindow(CMeterWindow* window, LPWINDOWPOS wp);
|
||||
void MapCoordsToScreen(int& x, int& y, int w, int h);
|
||||
|
||||
void Update(bool nodraw);
|
||||
void UpdateTransparency(int alpha, bool reset);
|
||||
void ReadConfig();
|
||||
void WriteConfig();
|
||||
void ReadSkin();
|
||||
void InitializeMeters();
|
||||
void ShowWindowIfAppropriate();
|
||||
bool DoAction(int x, int y, MOUSE mouse, bool test);
|
||||
bool ResizeWindow(bool reset);
|
||||
void FadeWindow(int from, int to);
|
||||
|
||||
CConfigParser m_Parser;
|
||||
|
||||
Gdiplus::Bitmap* m_DoubleBuffer;
|
||||
Gdiplus::Bitmap* m_Background; // The background bitmap
|
||||
SIZE m_BackgroundSize;
|
||||
|
||||
HWND m_Window; // Handle to the Rainmeter window
|
||||
HINSTANCE m_User32Library;
|
||||
BOOL m_ChildWindow;
|
||||
|
||||
std::wstring m_RightMouseDownAction; // Action to run when right mouse is pressed
|
||||
std::wstring m_LeftMouseDownAction; // Action to run when left mouse is pressed
|
||||
std::wstring m_RightMouseUpAction; // Action to run when right mouse is released
|
||||
std::wstring m_LeftMouseUpAction; // Action to run when left mouse is released
|
||||
std::wstring m_MouseOverAction; // Action to run when mouse goes over the window
|
||||
std::wstring m_MouseLeaveAction; // Action to run when mouse leaves the window
|
||||
std::wstring m_OnRefreshAction; // Action to run when window is initialized
|
||||
|
||||
bool m_MouseOver;
|
||||
|
||||
std::wstring m_Author; // Skin's author
|
||||
std::wstring m_BackgroundName; // Name of the background image
|
||||
Gdiplus::Rect m_BackgroundMargins;
|
||||
Gdiplus::Rect m_DragMargins;
|
||||
int m_WindowX; // Window's X-position
|
||||
int m_WindowY; // Window's Y-position
|
||||
int m_WindowW; // Window's width
|
||||
int m_WindowH; // Window's Height
|
||||
bool m_WindowDraggable; // True, if window can be moved
|
||||
int m_WindowUpdate; // Measure update frequency
|
||||
HIDEMODE m_WindowHide; // If true, the window is hidden when mouse is over it
|
||||
bool m_WindowStartHidden; // If true, the window is hidden at startup
|
||||
bool m_SavePosition; // If true, the window's position is saved
|
||||
bool m_SnapEdges; // If true, the window snaps to the edges of the screen when moved
|
||||
bool m_NativeTransparency; // If true, use the W2k/XP native transparency
|
||||
int m_AlphaValue; // The 'from' transparency value 0 - 255
|
||||
int m_FadeDuration; // Time it takes to fade the window
|
||||
bool m_MeasuresToVariables; // If true, Measured values are transformed to Litestep's eVars
|
||||
bool m_AllowNegativeCoordinates; // If true, Negative coordinates are OK
|
||||
ZPOSITION m_WindowZPosition; // Window's Z-position
|
||||
bool m_DynamicWindowSize; //
|
||||
bool m_ClickThrough; //
|
||||
bool m_KeepOnScreen; //
|
||||
|
||||
BGMODE m_BackgroundMode; // The background mode
|
||||
Gdiplus::Color m_SolidColor; // Color of the solid background
|
||||
Gdiplus::Color m_SolidColor2; // Color of the solid background
|
||||
Gdiplus::REAL m_SolidAngle; //
|
||||
BEVELTYPE m_SolidBevel; // The type of the bevel
|
||||
|
||||
DWORD m_FadeStartTime;
|
||||
int m_FadeStartValue;
|
||||
int m_FadeEndValue;
|
||||
int m_TransparencyValue;
|
||||
|
||||
bool m_Refreshing; // This is true, when the meter is refreshing
|
||||
|
||||
bool m_Hidden; // True, if Rainmeter is hidden
|
||||
bool m_ResetRegion; // If true, the window region is recalculated during the next update
|
||||
|
||||
std::list<CMeasure*> m_Measures; // All the measures
|
||||
std::list<CMeter*> m_Meters; // All the meters
|
||||
|
||||
std::wstring m_SkinName; // Name of the current skin folder
|
||||
std::wstring m_SkinIniFile; // Name of the current skin iniFile
|
||||
|
||||
std::wstring m_ConfigEditor;
|
||||
|
||||
UINT m_Message; // The current window message
|
||||
|
||||
int m_UpdateCounter;
|
||||
|
||||
CRainmeter* m_Rainmeter; // Pointer to the main object
|
||||
|
||||
static int m_InstanceCount;
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user