ui/motif/Grid.h

Wed, 04 Dec 2024 20:36:16 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 04 Dec 2024 20:36:16 +0100
branch
newapi
changeset 407
8ea123dd89db
parent 406
0ebf9d7b23e8
permissions
-rw-r--r--

semi functional grid container (Motif)

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2024 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef GRID_H
#define GRID_H

#include <X11/Intrinsic.h>
#include <X11/IntrinsicP.h>
#include <Xm/XmAll.h>
#include <Xm/Primitive.h>
#include <Xm/PrimitiveP.h>
#include <Xm/ManagerP.h>

#ifdef __cplusplus
extern "C" {
#endif

#define gridColumn "gridColumn"
#define gridRow "gridRow"
#define gridColspan "gridColspan"
#define gridRowspan "gridRowspan"
#define gridHExpand "gridHExpand"
#define gridVExpand "gridVExpand"
#define gridHFill "gridHFill"
#define gridVFill "gridVFill"
#define gridMarginLeft "gridMarginLeft"
#define gridMarginRight "gridMarginRight"
#define gridMarginTop "gridMarginTop"
#define gridMarginBottom "gridMarginBottom"
    

typedef struct GridDef {
    Dimension size;
    Dimension pos;
    Boolean expand;
} GridDef;
    
typedef struct GridClassPart {
    int test;
} GridClassPart;
    
typedef struct GridClassRec {
    CoreClassPart        core_class;
    CompositeClassPart   composite_class;
    ConstraintClassPart  constraint_class;
    XmManagerClassPart  manager_class;
    GridClassPart    mywidgetclass;
} GridClassRec;


typedef struct GridPart {
    int margin_left;
    int margin_right;
    int margin_top;
    int margin_bottom;
    int max_col;
    int max_row;
    
    Boolean sizerequest;
} GridPart;

typedef struct GridRec {
    CorePart	    core;
    CompositePart   composite;
    ConstraintPart  constraint;
    XmManagerPart   manager;
    GridPart    mywidget;
} GridRec;

typedef struct GridContraintPart {
    Dimension x;
    Dimension y;
    Dimension margin_left;
    Dimension margin_right;
    Dimension margin_top;
    Dimension margin_bottom;
    Boolean hexpand;
    Boolean vexpand;
    Boolean hfill;
    Boolean vfill;
    Dimension colspan;
    Dimension rowspan;
    Dimension pref_width;
    Dimension pref_height;
} GridContraintPart;

typedef struct GridConstraintRec {
    XmManagerConstraintPart manager;
    GridContraintPart grid;
} GridConstraintRec;

typedef GridRec* MyWidget;

extern WidgetClass gridClass;

void grid_class_initialize();
void grid_initialize();
void grid_realize();
void grid_destroy();
void grid_resize();
void grid_expose();
Boolean grid_set_values();
Boolean grid_acceptfocus(Widget , Time*);

void grid_place_children(MyWidget w);

void grid_getfocus();
void grid_loosefocus();

void grid_constraint_init(
    Widget	request,
    Widget	neww,
    ArgList	args,
    Cardinal*	num_args
);

XtGeometryResult GridGeometryManager(Widget	widget, XtWidgetGeometry *request, XtWidgetGeometry *reply);
void GridChangeManaged(Widget widget);
Boolean ConstraintSetValues(Widget old, Widget request, Widget neww, ArgList args, Cardinal *num_args);


#ifdef __cplusplus
}
#endif

#endif /* GRID_H */

mercurial