QvisVariableButton.h 6.21 KB
Newer Older
hrchilds's avatar
hrchilds committed
1 2
/*****************************************************************************
*
hrchilds's avatar
hrchilds committed
3
* Copyright (c) 2000 - 2007, The Regents of the University of California
hrchilds's avatar
hrchilds committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
* Produced at the Lawrence Livermore National Laboratory
* All rights reserved.
*
* This file is part of VisIt. For details, see http://www.llnl.gov/visit/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution  and  use  in  source  and  binary  forms,  with  or  without
* modification, are permitted provided that the following conditions are met:
*
*  - Redistributions of  source code must  retain the above  copyright notice,
*    this list of conditions and the disclaimer below.
*  - Redistributions in binary form must reproduce the above copyright notice,
*    this  list of  conditions  and  the  disclaimer (as noted below)  in  the
*    documentation and/or materials provided with the distribution.
*  - Neither the name of the UC/LLNL nor  the names of its contributors may be
*    used to  endorse or  promote products derived from  this software without
*    specific prior written permission.
*
* 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  REGENTS  OF  THE  UNIVERSITY OF
* CALIFORNIA, THE U.S.  DEPARTMENT  OF  ENERGY 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.
*
*****************************************************************************/

hrchilds's avatar
hrchilds committed
38 39 40 41 42
#ifndef QVIS_VARIABLE_BUTTON_H
#define QVIS_VARIABLE_BUTTON_H
#include <qpushbutton.h>
#include <qobjectlist.h>
#include <string>
hrchilds's avatar
hrchilds committed
43
#include <winutil_exports.h>
hrchilds's avatar
hrchilds committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

class QvisVariableButtonHelper;
class QvisVariablePopupMenu;
class VariableMenuPopulator;

// ****************************************************************************
// Class: QvisVariableButton
//
// Purpose:
//   This button pops up a variable menu based on the active source or the
//   selected plot's database.
//
// Notes:      This class uses 2 static variable menus that are shared for
//   all instances of the class. There is one menu for variables from the
//   active source and another menu for variables from the current plot
//   source. Menus are shared across instances of this class to reduce the
//   number of menus that have to be updated when the variable lists change.
//
// Programmer: Brad Whitlock
// Creation:   Fri Dec 3 10:20:56 PDT 2004
//
// Modifications:
hrchilds's avatar
hrchilds committed
66 67 68
//   Brad Whitlock, Fri Apr 1 16:23:43 PST 2005
//   Added Label var support.
//
hrchilds's avatar
hrchilds committed
69 70 71
//   Hank Childs, Tue Jul 19 14:39:43 PDT 2005
//   Added Array var support.
//
hrchilds's avatar
hrchilds committed
72 73 74 75
//   Brad Whitlock, Tue Sep 26 15:39:40 PST 2006
//   Added another constructor and some properties so they can be exposed
//   in Qt designer.
//
hrchilds's avatar
hrchilds committed
76 77
// ****************************************************************************

hrchilds's avatar
hrchilds committed
78
class WINUTIL_API QvisVariableButton : public QPushButton
hrchilds's avatar
hrchilds committed
79 80
{
    Q_OBJECT
hrchilds's avatar
hrchilds committed
81 82 83
    Q_PROPERTY(int varTypes READ getVarTypes WRITE setVarTypes )
    Q_PROPERTY(QString variable READ getVariable WRITE setVariable )
    Q_PROPERTY(QString defaultVariable READ getDefaultVariable WRITE setDefaultVariable )
hrchilds's avatar
hrchilds committed
84
public:
hrchilds's avatar
hrchilds committed
85
    QvisVariableButton(QWidget *parent, const char *name = 0);
hrchilds's avatar
hrchilds committed
86 87 88 89 90
    QvisVariableButton(bool addDefault_, bool addExpr_, bool usePlot,
        int mask, QWidget *parent, const char *name = 0);
    virtual ~QvisVariableButton();

    virtual void setText(const QString &);
hrchilds's avatar
hrchilds committed
91

hrchilds's avatar
hrchilds committed
92
    virtual void setDefaultVariable(const QString &);
hrchilds's avatar
hrchilds committed
93 94 95 96 97 98
    QString getDefaultVariable() const { return defaultVariable; }
    int  getVarTypes() const { return varTypes; }
    void setVarTypes(int t) { varTypes = t; }

    const QString &getVariable() const;
    void setVariable(const QString &t);
hrchilds's avatar
hrchilds committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

    void setChangeTextOnVariableChange(bool);

    //
    // Static methods that are used in connection with all variable menus.
    //
    static void UpdateActiveSourceButtons(VariableMenuPopulator *pop);
    static void UpdatePlotSourceButtons(VariableMenuPopulator *pop);
    static void ConnectExpressionCreation(QObject *, const char *);

    //
    // Const values for which menus to show. Or them together to get
    // multiple variable menus in the button.
    //
    static const int Scalars;
    static const int Vectors;
    static const int Meshes;
    static const int Materials;
    static const int Subsets;
    static const int Species;
    static const int Curves;
    static const int Tensors;
    static const int SymmetricTensors;
hrchilds's avatar
hrchilds committed
122
    static const int Labels;
hrchilds's avatar
hrchilds committed
123
    static const int Arrays;
hrchilds's avatar
hrchilds committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
signals:
    void activated(const QString &varName);
public slots:
    void changeVariable(int, const QString &);
private slots:
    void connectMenu();
    void disconnectMenu();
    void deferredDisconnectMenu();
private:
    void UpdateMenu();

    struct VariablePopupInfo
    {
        VariablePopupInfo();
        virtual ~VariablePopupInfo();

        void Initialize();
        void UpdateMenus(VariableMenuPopulator *pop);
        void connect(QvisVariableButton *);
        void disconnect();

        QvisVariableButtonHelper  *helper;
        QvisVariablePopupMenu    **varMenus;
    };

    static QObjectList        instances;
    static VariablePopupInfo  activeSourceInfo;
    static VariablePopupInfo  plotSourceInfo;
    static QObject           *expressionCreator;
    static const char        *expressionSlot;

    bool                      addDefault;
    bool                      addExpr;
    bool                      usePlotSource;
    bool                      changeTextOnVarChange;
    int                       varTypes;
hrchilds's avatar
hrchilds committed
160
    QString                   variable;
hrchilds's avatar
hrchilds committed
161 162 163 164 165
    QString                   defaultVariable;
    QvisVariablePopupMenu    *menu;
};

#endif