00001
00015 #ifndef INC_RVC_UIFORMDBRECORD_H
00016 #define INC_RVC_UIFORMDBRECORD_H
00017
00018 #ifndef INC_MGUI_FORM_H
00019 #include <mgui/form.h>
00020 #endif
00021
00022 #ifndef INC_RVC_DBTABLE_H
00023 #include <rvc/dbtable.h>
00024 #endif
00025
00026 #ifndef INC_MI32_SERIALIZABLE_H
00027 #include <mi32/serializable.h>
00028 #endif
00029
00030 class DBEDIT_TINSTANCE;
00031 namespace SML {
00032 union ARG;
00033 class CONTEXT;
00034 class STRING;
00035 }
00036
00037 namespace RVC {
00038 namespace UI {
00039
00040
00042 class FORM_DB_RECORD : public MGUI::FORM_COMPOSITE {
00043 public:
00044
00046 enum FORMSTYLE {
00047 FORMSTYLE_Grid,
00048 FORMSTYLE_UserDefined
00049 };
00050
00051 class SETTINGS : public SERIALIZABLE {
00052 public:
00053 SETTINGS ();
00054 SETTINGS (const SETTINGS& rhs);
00055 virtual ~SETTINGS ();
00056 SETTINGS& operator= (const SETTINGS& rhs);
00057
00058 #ifndef GENERATING_DOXYGEN_OUTPUT
00059 class PRIV;
00060 SETTINGS& operator= (const PRIV& priv);
00061 const PRIV* GetPriv (
00062 ) const { return ((this == 0) ? 0 : m_pPriv); }
00063 private:
00064 PRIV *m_pPriv;
00065
00066
00067 virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00068 virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname) const;
00069
00070 #endif
00071 };
00072
00074 static void SML_Install (
00075 SML::CONTEXT *context
00076 );
00077
00079 FORM_DB_RECORD (
00080 DBEDIT_TINSTANCE *idata,
00081 FORMSTYLE formstyle
00082 );
00083
00085 virtual ~FORM_DB_RECORD ();
00086
00088 void ClearChangedSettings ();
00089
00091 ERRVALUE Create (
00092 MGUI::LAYOUT_PANE_BASE& ParentPane,
00093 const SETTINGS *pSettings = 0
00094 );
00095
00097 void DlgEditUserDefined ();
00098
00100 void GetRecordRef (
00101 DBTABLE::RECORDREFTYPE& RefType,
00102 INT32& RefNum
00103 ) const;
00104
00106 INT32 GetRecordRefNum (
00107 ) const;
00108
00110 DBTABLE::RECORDREFTYPE GetRecordRefType (
00111 ) const;
00112
00114 void GetSettings (
00115 SETTINGS& settings
00116 ) const;
00117
00119 ERRVALUE GetValues (
00120 RVC::DBTABLE::RECORD& record
00121 );
00122
00124 bool HasChangedSettings (
00125 ) const;
00126
00128 bool IsRecordChanged (
00129 ) const;
00130
00133 void NotifyDlgClose ();
00134
00137 void NotifyDlgOpen ();
00138
00140 ERRVALUE Reread ();
00141
00144 INT32 SaveRecord (
00145 bool AskUser = true
00146 );
00147
00149 void SetDelegateOnChangedFieldValue (
00150 DELEGATE_VOID_INT32 delegate
00151 );
00152
00154 ERRVALUE SetRecordRef (
00155 DBTABLE::RECORDREFTYPE RefType,
00156 INT32 RefNum
00157 );
00158
00160 ERRVALUE SetValues (
00161 const RVC::DBTABLE::RECORD& record,
00162 bool IsChanged
00163 );
00164
00166 void UndoAll ();
00167
00170 bool UndoLast ();
00171
00172 #ifndef GENERATING_DOXYGEN_OUTPUT
00173 class PRIV;
00174 private:
00175 PRIV *m_pPriv;
00176
00177 static void * SMLFUNC_Create (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
00178 static double SMLFUNC_GetFieldNum (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
00179 static SML::STRING* SMLFUNC_GetFieldStr (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
00180 static double SMLFUNC_SaveChanges (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
00181 static void SMLFUNC_SetField (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
00182 static void SMLFUNC_SetRecord (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
00183
00184 FORM_DB_RECORD (const FORM_DB_RECORD&);
00185 FORM_DB_RECORD& operator= (const FORM_DB_RECORD&);
00186 #endif
00187 };
00188
00189
00190 }
00191 }
00192
00193
00194 #endif // INC_RVC_UIFORMDBRECORD_H