This has meant very little for a long time as configure.ac just hardcoded these values depending on the current OS versions at the time. The only place where this is really 'needed' is XlationSvc.c in DtSvc so that differences between locale specifications on various versions of an OS can be accounted for. So for now, we just define those when building DtSvc. We could probably safely remove them as well with an update to the Xlate locale DB to remove ancient cruft we don't care about anymore. For various other modules, like dtlogin, dtsession, etc we just use the code that was already being used due to the hardcoded values we've had for the last 10-ish years.
472 lines
13 KiB
C++
472 lines
13 KiB
C++
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they 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 these libraries and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/* $TOG: BaseUI.h /main/5 1998/04/06 13:31:37 mgreess $ */
|
|
/* *
|
|
* (c) Copyright 1993, 1994 Hewlett-Packard Company *
|
|
* (c) Copyright 1993, 1994 International Business Machines Corp. *
|
|
* (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
|
|
* (c) Copyright 1993, 1994 Novell, Inc. *
|
|
*/
|
|
|
|
#ifndef BASEUI_H
|
|
#define BASEUI_H
|
|
|
|
#include <stdio.h>
|
|
|
|
#ifndef _BOOLEAN_
|
|
#define _BOOLEAN_
|
|
#if defined(sun)
|
|
#include <sys/types.h>
|
|
#define boolean boolean_t
|
|
# if defined(__XOPEN_OR_POSIX)
|
|
#define true _B_TRUE
|
|
#define false _B_FALSE
|
|
# else
|
|
#define true B_TRUE
|
|
#define false B_FALSE
|
|
# endif
|
|
#elif defined(__linux__) || defined(CSRG_BASED)
|
|
#include <stdbool.h>
|
|
#define boolean bool
|
|
#else
|
|
typedef enum
|
|
{
|
|
false = 0,
|
|
true = 1
|
|
} boolean;
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef STRDUP
|
|
#define STRDUP(string) (string ? strdup(string) : (char*) NULL)
|
|
#define STRCMP(s1, s2) (s1 && s2 ? strcmp(s1, s2) : (s1 ? 1 : -1))
|
|
#define STRLEN(string) (string ? strlen(string) : 0)
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
BASE_UI,
|
|
APPLICATION,
|
|
BUTTON,
|
|
COMBO_BOX,
|
|
CONTAINER,
|
|
DIALOG,
|
|
LABEL,
|
|
LIST,
|
|
GROUP,
|
|
HELP_SYSTEM,
|
|
ICON,
|
|
MAIN_WINDOW,
|
|
MENU,
|
|
MENU_BAR,
|
|
PROMPT,
|
|
SEPARATOR,
|
|
SPIN_BUTTON,
|
|
SCALE,
|
|
TEXT
|
|
} UI_Class;
|
|
|
|
typedef enum
|
|
{
|
|
MODELESS,
|
|
MODAL,
|
|
INFORMATION,
|
|
ERROR,
|
|
WORK_IN_PROGRESS,
|
|
FILE_SELECTION, // This type is always modal
|
|
DIRECTORY_SELECTION, // This type is always modal
|
|
FILE_DIRECTORY_SELECTION, // This type is always modal
|
|
QUESTION, // This type is always modal
|
|
WARNING, // This type is always modal
|
|
PROMPT_DIALOG, // This type is always modal
|
|
MODAL_WORK_IN_PROGRESS,
|
|
MODAL_ERROR,
|
|
MODAL_INFORMATION
|
|
} DialogType;
|
|
|
|
typedef enum
|
|
{
|
|
PULLDOWN_MENU,
|
|
OPTION_MENU,
|
|
POPUP_MENU
|
|
} MenuType;
|
|
|
|
typedef enum
|
|
{
|
|
LEFT_JUSTIFIED,
|
|
CENTERED,
|
|
RIGHT_JUSTIFIED
|
|
} LabelType;
|
|
|
|
typedef enum
|
|
{
|
|
VERTICAL_SCALE,
|
|
HORIZONTAL_SCALE
|
|
} ScaleType;
|
|
|
|
typedef enum
|
|
{
|
|
FIXED_LIST,
|
|
SCROLLED_LIST
|
|
} ListType;
|
|
|
|
typedef enum
|
|
{
|
|
READ_ONLY,
|
|
EDITABLE,
|
|
SCROLLED_READ_ONLY,
|
|
SCROLLED_EDITABLE
|
|
} TextType;
|
|
|
|
typedef enum
|
|
{
|
|
SINGLE_SELECT,
|
|
MULTIPLE_SELECT,
|
|
EXTENDED_SELECT,
|
|
BROWSE_SELECT
|
|
} SelectionType;
|
|
|
|
typedef enum
|
|
{
|
|
STRING_PROMPT,
|
|
MULTI_LINE_STRING_PROMPT,
|
|
INTEGER_PROMPT,
|
|
REAL_PROMPT
|
|
} PromptType;
|
|
|
|
typedef enum
|
|
{
|
|
CHECK_BOX,
|
|
RADIO_GROUP,
|
|
HORIZONTAL_CHECK_BOX,
|
|
HORIZONTAL_RADIO_GROUP,
|
|
FORM_BOX
|
|
} GroupType;
|
|
|
|
typedef enum
|
|
{
|
|
CANVAS,
|
|
FORM,
|
|
VERTICAL_ROW_COLUMN,
|
|
HORIZONTAL_ROW_COLUMN,
|
|
PANE,
|
|
WORK_AREA,
|
|
ICON_LIST,
|
|
SCROLLED_CANVAS,
|
|
SCROLLED_FORM,
|
|
SCROLLED_VERTICAL_ROW_COLUMN,
|
|
SCROLLED_HORIZONTAL_ROW_COLUMN,
|
|
SCROLLED_PANE,
|
|
SCROLLED_WORK_AREA,
|
|
SCROLLED_ICON_LIST
|
|
} ContainerType;
|
|
|
|
typedef enum
|
|
{
|
|
PUSH_BUTTON,
|
|
TOGGLE_BUTTON,
|
|
UP_ARROW_BUTTON,
|
|
DOWN_ARROW_BUTTON,
|
|
LEFT_ARROW_BUTTON,
|
|
RIGHT_ARROW_BUTTON
|
|
} ButtonType;
|
|
|
|
typedef enum
|
|
{
|
|
NO_LINE,
|
|
SINGLE_LINE,
|
|
DOUBLE_LINE,
|
|
SINGLE_DASHED_LINE,
|
|
DOUBLE_DASHED_LINE,
|
|
SHADOW_ETCHED_IN,
|
|
SHADOW_ETCHED_OUT,
|
|
SHADOW_ETCHED_IN_DASH,
|
|
SHADOW_ETCHED_OUT_DASH
|
|
} SeparatorStyle;
|
|
|
|
typedef enum
|
|
{
|
|
AS_PLACED,
|
|
GRID,
|
|
BROWSER,
|
|
TREE,
|
|
PROPERTIES
|
|
} ViewStyle;
|
|
|
|
typedef enum
|
|
{
|
|
NAME_ONLY,
|
|
VERY_LARGE_ICON,
|
|
LARGE_ICON,
|
|
MEDIUM_ICON,
|
|
SMALL_ICON,
|
|
TINY_ICON,
|
|
DETAILS
|
|
} IconStyle;
|
|
|
|
typedef enum
|
|
{
|
|
LEFT_SLANTED_ARROW_CURSOR,
|
|
RIGHT_SLANTED_ARROW_CURSOR,
|
|
WATCH_CURSOR,
|
|
HOUR_GLASS_CURSOR,
|
|
IBEAM_CURSOR,
|
|
CROSS_HAIRS_CURSOR
|
|
} PointerCursor;
|
|
|
|
class BaseUI;
|
|
|
|
typedef boolean (*SelectProc) (BaseUI *object);
|
|
typedef boolean (*CompareProc) (BaseUI **first, BaseUI **second);
|
|
typedef void (*TimeOutCallback) (BaseUI *object, void *callback_data);
|
|
typedef void (*ButtonCallback) (void *);
|
|
typedef void (*DialogCallback) (void *);
|
|
typedef boolean (*ValidationCallback) (void *client_data, void *call_data);
|
|
typedef void (*ThreadCallback) (BaseUI *obj, char *output, int rc);
|
|
|
|
const int NO_SUBCLASS = -1;
|
|
|
|
class BaseUI {
|
|
|
|
public:
|
|
|
|
#ifdef DEBUG
|
|
static int indent;
|
|
static boolean trace_calls;
|
|
static void EnterFunction(char *message);
|
|
static void LeaveFunction(char *message);
|
|
#define TraceFunctionCalls(flag) trace_calls = flag
|
|
#else
|
|
#define EnterFunction(message)
|
|
#define LeaveFunction(message)
|
|
#define TraceFunctionCalls(flag)
|
|
#endif
|
|
|
|
|
|
protected:
|
|
|
|
static int _UniqueID;
|
|
|
|
char *_name;
|
|
char *_category;
|
|
int _id;
|
|
BaseUI *_parent;
|
|
BaseUI **_children;
|
|
int _numChildren;
|
|
BaseUI **_allChildren;
|
|
int _numAllChildren;
|
|
boolean _has_been_opened;
|
|
boolean _opened;
|
|
boolean _visible;
|
|
boolean _active;
|
|
boolean _selected;
|
|
boolean _update;
|
|
char *_update_message;
|
|
ViewStyle _viewStyle;
|
|
IconStyle _iconStyle;
|
|
|
|
BaseUI(BaseUI *parent,
|
|
const char *name,
|
|
const char *category = NULL);
|
|
|
|
// Derived classes must define these functions
|
|
virtual boolean SetVisiblity(boolean) = 0;
|
|
virtual boolean SetActivity(boolean) = 0;
|
|
virtual boolean SetSelected(boolean) = 0;
|
|
virtual boolean SetName(char *) = 0;
|
|
virtual boolean SetCategory(char *) = 0;
|
|
virtual boolean SetOpen(boolean) = 0;
|
|
virtual boolean SetView(ViewStyle) = 0;
|
|
virtual boolean SetIcon(IconStyle) = 0;
|
|
virtual boolean SetParent(BaseUI *new_parent) = 0;
|
|
virtual void SetAddTimeOut(TimeOutCallback, void *, long interval) = 0;
|
|
virtual void DoRefresh() = 0;
|
|
virtual void DoToFront() = 0;
|
|
virtual void DoContextualHelp() = 0;
|
|
virtual void DoBeginUpdate() = 0;
|
|
virtual void DoEndUpdate() = 0;
|
|
virtual void DoMakeVisible() = 0;
|
|
virtual boolean DoIsVisible() { return true; }
|
|
virtual void DoUpdateMessage(char *message) = 0;
|
|
virtual boolean SetOrder(int) = 0;
|
|
|
|
void SetVisible(boolean);
|
|
void AddToParent();
|
|
void DeleteFromParent();
|
|
void AddToParentContainer();
|
|
void DeleteFromParentContainer();
|
|
void _Find(void *, int, int *, BaseUI ***, SelectProc, boolean,
|
|
boolean, boolean, int);
|
|
BaseUI *_FindBy(char *, int, int *, BaseUI ***, SelectProc, boolean,
|
|
boolean, boolean);
|
|
|
|
// These messages are sent to all parents
|
|
// up to and including the parent container
|
|
virtual void NotifyCreate(BaseUI *) { } ;
|
|
virtual void NotifyDelete(BaseUI *) { } ;
|
|
virtual void NotifyVisiblity(BaseUI *) { } ;
|
|
virtual void NotifySelected(BaseUI *) { } ;
|
|
virtual void NotifyOpen(BaseUI *) { } ;
|
|
|
|
public:
|
|
|
|
// Not Used By Subclasses, for application programmers only
|
|
void *ApplicationData;
|
|
|
|
virtual ~BaseUI(); // destructor
|
|
|
|
virtual boolean HandleHelpRequest();
|
|
void ContextualHelp();
|
|
int UniqueID() { return _id; }
|
|
boolean ObjectExists(int unique_id);
|
|
|
|
// Set functions
|
|
void Visible(boolean); // Set visiblity, calls SetVisiblity
|
|
void Active(boolean); // Set sensitivity, calls SetActivity
|
|
void Selected(boolean); // Set selected status, calls SetSelected
|
|
void Open(boolean); // Set opened status, calls SetOpen
|
|
void Name(char *); // Set name, calls SetName
|
|
void Category(char *); // Set category, calls SetCategory
|
|
void ContainerView(ViewStyle); // Set container view, calls SetView
|
|
void IconView(IconStyle); // Set icon view, calls SetIcon
|
|
void Parent(BaseUI *new_parent); // Set parent, calls SetParent
|
|
virtual void Details(char *) { }
|
|
|
|
// Access functions
|
|
const boolean Visible() { return _visible; }
|
|
const boolean Active() { return _active; }
|
|
const boolean Selected() { return _selected; }
|
|
const boolean Open() { return _opened; }
|
|
const boolean HasBeenOpened() { return _has_been_opened; }
|
|
const char * Name() { return _name; }
|
|
const char * Category() { return _category; }
|
|
const ViewStyle ContainerView() { return _viewStyle; }
|
|
const IconStyle IconView() { return _iconStyle; }
|
|
virtual char * Details() { return NULL; }
|
|
|
|
BaseUI * Parent() { return _parent; }
|
|
BaseUI ** Children() { return _children; }
|
|
int NumChildren() { return _numChildren; }
|
|
BaseUI ** AllChildren() { return _allChildren; }
|
|
int NumAllChildren() { return _numAllChildren; }
|
|
|
|
// These are for children
|
|
BaseUI ** Siblings();
|
|
int NumSiblings();
|
|
BaseUI * ContainerParent();
|
|
int NumContainerChildren();
|
|
BaseUI ** ContainerChildren();
|
|
void DeleteChildren();
|
|
|
|
virtual void PointerShape(PointerCursor) { }
|
|
virtual PointerCursor PointerShape() { return LEFT_SLANTED_ARROW_CURSOR; }
|
|
virtual void AttachAll(int /*offset*/ = 0) { }
|
|
virtual void AttachTop(int /*offset*/ = 0) { }
|
|
virtual void AttachBottom(int /*offset */= 0) { }
|
|
virtual void AttachLeft(int /*offset */= 0) { }
|
|
virtual void AttachRight(int /*offset */= 0) { }
|
|
virtual void AttachTop( BaseUI *,
|
|
int /*offset*/ = 0, boolean /*opposite*/ = false) { }
|
|
virtual void AttachBottom(BaseUI *,
|
|
int /*offset*/ = 0, boolean /*opposite*/ = false) { }
|
|
virtual void AttachLeft( BaseUI *,
|
|
int /*offset*/ = 0, boolean /*opposite*/ = false) { }
|
|
virtual void AttachRight( BaseUI *,
|
|
int /*offset*/ = 0, boolean /*opposite*/ = false) { }
|
|
virtual void WidthHeight(int /*width*/, int /*height*/) { }
|
|
virtual void WidthHeight(int * /*width*/, int * /*height*/) { }
|
|
virtual void Width(int /*width*/) { }
|
|
virtual int Width() { return 0; }
|
|
virtual void Height(int /*height*/) { }
|
|
virtual int Height() { return 0; }
|
|
virtual void StringWidthHeight(const char * /*string*/, int * /*w*/,
|
|
int * /*h*/) { }
|
|
virtual int StringWidth(const char * /*string*/) { return 0; }
|
|
virtual int StringHeight(const char * /*string*/) { return 0; }
|
|
|
|
virtual void Thread(const char * /*cmd*/, ThreadCallback,
|
|
int /*buf_len*/ = 512) { }
|
|
virtual void Thread(int /*pid*/, int /*fd*/, ThreadCallback,
|
|
int /*buf_len*/ = 512) { }
|
|
virtual void Thread(int /*socket*/, ThreadCallback,
|
|
int /*buf_len*/ = 512) { }
|
|
|
|
// Add timeouts to object (interval is in terms of milliseconds)
|
|
void AddTimeOut(TimeOutCallback, void *callback_data, long interval);
|
|
virtual int MicroSleep(long milliseconds);
|
|
void Refresh();
|
|
void ToFront();
|
|
void BeginUpdate();
|
|
void EndUpdate();
|
|
void MakeVisible();
|
|
boolean IsVisible();
|
|
void UpdateMessage(const char *message);
|
|
|
|
BaseUI *FindByName(char *pattern,
|
|
int depth = 1,
|
|
int *n_mactches = NULL,
|
|
BaseUI ***matches = NULL,
|
|
SelectProc select_proc = NULL,
|
|
boolean regular_expression = false,
|
|
boolean case_sensitive = true);
|
|
BaseUI *FindByCategory(char *pattern,
|
|
int depth = 1,
|
|
int *n_mactches = NULL,
|
|
BaseUI ***matches = NULL,
|
|
SelectProc select_proc = NULL,
|
|
boolean regular_expression = false,
|
|
boolean case_sensitive = true);
|
|
void OrderByName(boolean flag); // Calls SetOrder
|
|
void GroupByCategory(boolean flag); // Calls SetOrder
|
|
int Order(); // Returns order
|
|
void Order(int new_position); // Calls SetOrder
|
|
|
|
// Dumps object to stdout
|
|
virtual void Dump(boolean verbose = false,
|
|
int level = 0);
|
|
// Dumps object hierarchy to stdout
|
|
void DumpHierarchy(boolean verbose = false,
|
|
int level = 0);
|
|
|
|
// Select/UnSelected all immediate children
|
|
virtual void SelectAll(boolean select_status = true);
|
|
|
|
// Select/UnSelected all children, and their children, etc...
|
|
virtual void SelectAllDescendants(boolean select_status = true);
|
|
|
|
// Open/Close all children, and their children, etc...
|
|
virtual void OpenAllDescendants(boolean opened = true);
|
|
|
|
// Get selected items
|
|
virtual void Selection(int *n_items,
|
|
BaseUI ***items = NULL);
|
|
|
|
virtual const UI_Class UIClass() { return BASE_UI; }
|
|
virtual const int UISubClass() { return NO_SUBCLASS; }
|
|
|
|
virtual const char *const UIClassName() { return "BaseUI"; }
|
|
|
|
};
|
|
|
|
#endif // BASEUI_H
|