/******************************************************************************** * * * F r a m e W i n d o w W i d g e t * * * ********************************************************************************* * Copyright (C) 1997,2024 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as published by * * the Free Software Foundation; either version 3 of the License, or * * (at your option) any later version. * * * * This library 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 Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public License * * along with this program. If not, see * ********************************************************************************/ #ifndef FXFRAME_H #define FXFRAME_H #ifndef FXWINDOW_H #include "FXWindow.h" #endif namespace FX { /// Justification modes used by certain subclasses enum { JUSTIFY_NORMAL = 0, /// Default justification is centered text JUSTIFY_CENTER_X = 0, /// Contents centered horizontally JUSTIFY_LEFT = 0x00008000, /// Contents left-justified JUSTIFY_RIGHT = 0x00010000, /// Contents right-justified JUSTIFY_HZ_APART = JUSTIFY_LEFT|JUSTIFY_RIGHT, /// Combination of JUSTIFY_LEFT & JUSTIFY_RIGHT JUSTIFY_CENTER_Y = 0, /// Contents centered vertically JUSTIFY_TOP = 0x00020000, /// Contents aligned with label top JUSTIFY_BOTTOM = 0x00040000, /// Contents aligned with label bottom JUSTIFY_VT_APART = JUSTIFY_TOP|JUSTIFY_BOTTOM /// Combination of JUSTIFY_TOP & JUSTIFY_BOTTOM }; /// Default padding enum { DEFAULT_PAD = 2 }; /** * The Frame widget provides borders around some contents. Borders may be raised, sunken, * thick, ridged or etched. They can also be turned off completely. * In addition, a certain amount of padding may be specified between the contents of * the widget and the borders. The contents may be justified inside the widget using the * justification options. * The Frame widget is sometimes used by itself as a place holder, but most often is used * as a convenient base class for simple controls. */ class FXAPI FXFrame : public FXWindow { FXDECLARE(FXFrame) protected: FXColor baseColor; // Base color FXColor hiliteColor; // Highlight color FXColor shadowColor; // Shadow color FXColor borderColor; // Border color FXint padtop; // Top padding FXint padbottom; // Bottom padding FXint padleft; // Left padding FXint padright; // right padding FXint border; // Border size protected: FXFrame(); void drawBorderRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawRidgeRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawGrooveRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleRaisedRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawDoubleSunkenRectangle(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); void drawFrame(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h); private: FXFrame(const FXFrame&); FXFrame &operator=(const FXFrame&); public: long onPaint(FXObject*,FXSelector,void*); public: /// Construct frame window FXFrame(FXComposite* p,FXuint opts=FRAME_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=DEFAULT_PAD,FXint pr=DEFAULT_PAD,FXint pt=DEFAULT_PAD,FXint pb=DEFAULT_PAD); /// Return default width virtual FXint getDefaultWidth(); /// Return default height virtual FXint getDefaultHeight(); /// Change frame style void setFrameStyle(FXuint style); /// Get current frame style FXuint getFrameStyle() const; /// Get border width FXint getBorderWidth() const { return border; } /// Change top padding void setPadTop(FXint pt); /// Get top interior padding FXint getPadTop() const { return padtop; } /// Change bottom padding void setPadBottom(FXint pb); /// Get bottom interior padding FXint getPadBottom() const { return padbottom; } /// Change left padding void setPadLeft(FXint pl); /// Get left interior padding FXint getPadLeft() const { return padleft; } /// Change right padding void setPadRight(FXint pr); /// Get right interior padding FXint getPadRight() const { return padright; } /// Change highlight color void setHiliteColor(FXColor clr); /// Get highlight color FXColor getHiliteColor() const { return hiliteColor; } /// Change shadow color void setShadowColor(FXColor clr); /// Get shadow color FXColor getShadowColor() const { return shadowColor; } /// Change border color void setBorderColor(FXColor clr); /// Get border color FXColor getBorderColor() const { return borderColor; } /// Change base gui color void setBaseColor(FXColor clr); /// Get base gui color FXColor getBaseColor() const { return baseColor; } /// Save to stream virtual void save(FXStream& store) const; /// Load from stream virtual void load(FXStream& store); }; } #endif