Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Selection.h

Go to the documentation of this file.
00001 #ifndef SelectionH
00002 #define SelectionH
00003 
00004 /*******************************************************************************
00005 Copyright 1998,1999,2000,2001,2002 Petr Kulhanek
00006 
00007     This file is part of Core plugin.
00008 
00009     Core plugin is free software; you can redistribute it and/or modify
00010     it under the terms of the GNU General Public License as published by
00011     the Free Software Foundation; either version 2 of the License, or
00012     (at your option) any later version.
00013 
00014     Core plugin is distributed in the hope that it will be useful,
00015     but WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017     GNU General Public License for more details.
00018 
00019     You should have received a copy of the GNU General Public License
00020     along with Core plugin; if not, write to the Free Software
00021     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 *******************************************************************************/
00023 /*******************************************************************************
00024 ** PROJEKT:             Projekt NEMESIS
00025 ** SOUBOR:              Selection
00026 ** ÚČEL:                slouží selekci objektů molekuly
00027 ** VERZE:               4.0
00028 ** JAZYK:               CBuilder C++
00029 ** CÍLOVÝ POČÍTAČ:      IBM PC
00030 ** PROGRAMÁTOR:         Petr Kulhánek
00031 ** HISTORIE ÚPRAV:
00032 VERZE   DATUM       POZNÁMKA
00033 3.0     16.10.1998  vůči předchozim verzím má kompaktnější kód, je značně kratší
00034                     a modulárnější.
00035 4.0     25.07.1999
00036 4.1             2000-11-30      zahrnuta lokalizace, upraveno pro CExtObject
00037 *******************************************************************************/
00038 
00042 /* HLAVIČKOVÉ SOUBORY  ********************************************************/
00043 
00044 #include "CoreMainHeader.h"
00045 #include "SimpleList.h"
00046 #include "EventSystem.h"
00047 #include "ExtObject.h"
00048 
00049 /* KONEC HLAVIČKOVÝCH SOUBORů *************************************************/
00050 
00051 class CExtObject;
00052 
00053 // only for standard mode
00054 DECLARE_EVENT(ET_SELECTED_OBJECTS_CHANGE);
00055 DECLARE_EVENT(ET_DBL_CLICK_OBJECT_CHANGE);
00056 DECLARE_EVENT(ET_SELECTED_OBJECTS_END);
00057 
00058 // for all modes
00059 DECLARE_EVENT(ET_SELRES_SELECTED_OBJECTS_CHANGE);
00060 DECLARE_EVENT(ET_SELRES_SELECTED_OBJECTS_END);
00061 
00062 /* DEFINICE TŘÍD **************************************************************/
00063 
00065 
00068 enum EObject{
00069         SEL_NONE,
00070         SEL_CONNECT_ATOM,
00071         SEL_OBJECTS_FOR_DISTANCE,
00072         SEL_OBJECTS_FOR_ANGLE,
00073         SEL_OBJECTS_FOR_DIHEDRAL,
00074         SEL_ATOM,SEL_TWO_ATOMS,SEL_THREE_ATOMS,SEL_FOUR_ATOMS,
00075         SEL_ATOMS_LIST,
00076         SEL_CUMULATIVE_ATOMS_LIST,
00077         SEL_BOND,
00078         SEL_DIRECTION,
00079         SEL_DIRECTIONS_LIST,
00080         SEL_MOLECULE,
00081         SEL_FRAGMENT,
00082         SEL_MANIPULATE_FRAGMENT,
00083         SEL_EXT_OBJECT,
00084         };
00085 
00086 //------------------------------------------------------------------------------
00087 
00088 /*  TŘÍDA: ESelResult
00089     ÚČEL:  typy zpráv pro OnSelectionChange()
00090 */
00091 
00092 enum ESelResult{
00093         SELRES_CHANGE_CLAIM,
00094         SELRES_SELECTED_OBJECTS_CHANGE,
00095         SELRES_SELECTED_OBJECTS_END,
00096         SELRES_NONE_SELECTED,
00097         };
00098 
00099 //------------------------------------------------------------------------------
00100 
00101 typedef void __fastcall (__closure *TSelectionEvent)(class CSelection* Selection,ESelResult result);
00102 
00103 //------------------------------------------------------------------------------
00104 
00106 
00114 class NEMESIS_CORE_PACKAGE CSelection : public CExtObject{
00115     public:
00116     enum ELevel{
00117         STANDARD_LEVEL,
00118         DBL_CLICK_LEVEL,
00119         MASTER_LEVEL,
00120         };
00121 
00122     enum EAddMode{
00123         NORMAL,
00124         ADD,
00125         REMOVE,
00126         };
00127 
00128  // konstruktor a destruktor ---------------------------------------------------
00129        __fastcall CSelection(void);                  // konstruktor
00130 
00131  // metody - nastavovaní, zjištování a reset požadavku -------------------------
00132     void __fastcall SetClaim(EObject claim);         // požadavek na zvolený typ
00133 
00134     void __fastcall SetDblClickClaim(EObject claim);
00135     void __fastcall EndDblClickClaim(void);
00136 
00137     void __fastcall SetMasterClaim(EObject claim);
00138     void __fastcall EndMasterClaim(void);
00139 
00140     inline void __fastcall SetEnabled(bool enabled);
00141 
00142     void __fastcall Reset(void);       // reset seznamu objektů
00143     void __fastcall FlushBuffer(void); // pro některé požadavky (získání seznamů), vyvolá zprávu SELRES_SELECTED_OBJECTS_END
00144 
00145  // metody - zjišťovací metody -------------------------------------------------
00146     inline EObject __fastcall GetActualClaim(void);
00147     inline EObject __fastcall GetClaim(void);                    // jaký je požadavek ?
00148     inline EObject __fastcall GetDblClickClaim(void);
00149     inline EObject __fastcall GetMasterClaim(void);
00150     inline ELevel __fastcall  GetActualLevel(void);
00151     inline ESelResult __fastcall GetResultStatus(void);
00152 
00153     inline bool __fastcall IsDblClickMode(void);
00154     inline bool __fastcall IsMasterMode(void);
00155 
00156  // metody - registrace primitivních objektů -----------------------------------
00157     void __fastcall RegisterObject(CExtObject *object,int x,int y);   // registrace primitivu
00158     void __fastcall RegisterMultiObject(CExtObject *object,bool add);   // registrace primitivu
00159     void __fastcall EndRegisterMultiObject(void);   // registrace primitivu
00160 
00161     void __fastcall DblClick(void);                    // objekt při dvojkliku
00162 
00163     inline void __fastcall GetPositionOfSelection(int& x,int& y);
00164 
00165  // metody - načítání požadovaného objektu ------------------------------------
00166 
00167     inline int __fastcall NumOfSelectedObjects(void);   // počet zvolených objektů
00168     CExtObject* __fastcall FirstObject(bool remove);  // první požadovaný objekt
00169     CExtObject* __fastcall NextObject(bool remove);   // následné požadované objekty
00170     void __fastcall AddObjectToList(CExtObject* object);  // používá se pro výběr seznamu objektů
00171     void __fastcall EndAddObjectToList(void);
00172 
00173  // ------------- SEKCE PRIVATNÍCH DAT ----------------------------------------
00174     private:
00175     int                                   SelX,SelY;
00176     CSimpleIterator<CExtObject>           Pos;                // iterátor objektů
00177     CSimpleList<CExtObject>               ListOfObjects;      // pracovní buffer do kterého se ukládají data
00178     CSimpleList<CExtObject>               TemporaryObjects;
00179 
00180     EObject             Claim;              // aktualní požadavek na selekci
00181     EObject             StandardClaim;      // standardní požadavek na selekci
00182     EObject             MasterClaim;        // master požadavek na selekci
00183     EObject             DblClickClaim;
00184 
00185     bool                DblClickMode;       // určuje mod
00186     bool                MasterMode;         // určuje mod
00187     ELevel              Level;              // určuje úroveň
00188     bool                Enabled;            // určuje zda je třída aktivní přijímat objekty
00189     ESelResult          Result;             // výsledek poslední akce
00190     CExtObject*            LastSelectedObject;  // posledně zvolený objekt
00191     bool                MakeReset;
00192 
00193     TSelectionEvent     SelectionChange;
00194 
00195     void __fastcall _Reset(void);       // reset seznamu objektů - bez zaslání zprávy
00196     void __fastcall SetupClaim(ELevel from,bool set);
00197     void __fastcall RegisterForClaim(EAddMode addmode);
00198 
00199     virtual void __fastcall ProcessEvent(const CEventIdentifier& event,CExtObject* Sender,void* p_data);
00200 
00201     static ESelResult __fastcall RegisterObjectForAtoms(CSelection* p_sel,CExtObject *object,CSimpleList<CExtObject> &list,int num);
00202     static ESelResult __fastcall RegisterObjectForDistance(CSelection* p_sel,CExtObject *object,CSimpleList<CExtObject> &list);
00203     static ESelResult __fastcall RegisterObjectForAngle(CSelection* p_sel,CExtObject *object,CSimpleList<CExtObject> &list);
00204     static ESelResult __fastcall RegisterObjectForDihedral(CSelection* p_sel,CExtObject *object,CSimpleList<CExtObject> &list);
00205     static ESelResult __fastcall RegisterObjectForBond(CSelection* p_sel,CExtObject *object,CSimpleList<CExtObject> &list);
00206     static ESelResult __fastcall RegisterObjectForConectAtom(CSelection* p_sel,CExtObject *object,CSimpleList<CExtObject>& list);
00207     static ESelResult __fastcall RegisterObjectForDirection(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list,CSimpleList<CExtObject>& temp);
00208     static ESelResult __fastcall RegisterObjectForMolecule(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list);
00209     static ESelResult __fastcall RegisterObjectForManipulateFragment(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list);
00210     static ESelResult __fastcall RegisterObjectForFragment(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list);
00211     static ESelResult __fastcall RegisterObjectForAtomsList(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list);
00212     static ESelResult __fastcall RegisterObjectForCumAtomsList(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list,EAddMode addmode);
00213     static ESelResult __fastcall RegisterObjectForDirectionsList(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list);
00214     static ESelResult __fastcall RegisterObjectForExtObject(CSelection* p_sel,CExtObject* object,CSimpleList<CExtObject>& list);
00215 
00216  // VLASTNOSTI OBJEKTU
00217     public:
00218         __property TSelectionEvent OnSelectionChange={write=SelectionChange};
00219     };
00220 
00221 /* KONEC DEFINICE TŘÍD ********************************************************/
00222 
00223 inline void __fastcall CSelection::GetPositionOfSelection(int& x,int& y)
00224 {
00225  x = SelX;
00226  y = SelY;
00227 }
00228 
00229 //..............................................................................
00230 
00231 inline void __fastcall CSelection::SetEnabled(bool enabled)
00232 {
00233  Enabled = enabled;
00234  if( SelectionChange != NULL ) SelectionChange(this,SELRES_CHANGE_CLAIM);
00235 }
00236 
00237 //..............................................................................
00238 
00239 inline EObject __fastcall CSelection::GetActualClaim(void)
00240 {
00241  if( Enabled == false ) return(SEL_NONE);
00242  return(Claim);
00243 }
00244 
00245 //..............................................................................
00246 
00247 inline EObject __fastcall CSelection::GetClaim(void)
00248 {
00249  return(StandardClaim);
00250 }
00251 
00252 //..............................................................................
00253 
00254 inline EObject __fastcall CSelection::GetDblClickClaim(void)
00255 {
00256  return(DblClickClaim);
00257 }
00258 
00259 //..............................................................................
00260 
00261 inline EObject __fastcall CSelection::GetMasterClaim(void)
00262 {
00263  return(MasterClaim);
00264 }
00265 
00266 //..............................................................................
00267 
00268 inline CSelection::ELevel __fastcall CSelection::GetActualLevel(void)
00269 {
00270  return(Level);
00271 }
00272 
00273 //..............................................................................
00274 
00275 inline bool __fastcall CSelection::IsDblClickMode(void)
00276 {
00277  return(DblClickMode);
00278 }
00279 
00280 //..............................................................................
00281 
00282 inline bool __fastcall CSelection::IsMasterMode(void)
00283 {
00284  return(MasterMode);
00285 }
00286 
00287 //..............................................................................
00288 
00289 /*  FUNKCE: int  CSelection::NumOfSelectObjects(void)
00290     úČEL:   vrátí aktuální počet objektů v seznamu
00291     VÝSTUP: počet objektů
00292 */
00293 
00294 inline int __fastcall  CSelection::NumOfSelectedObjects(void)
00295 {
00296  return(ListOfObjects.NumOfMembers());
00297 }
00298 
00299 //..............................................................................
00300 
00301 inline ESelResult __fastcall CSelection::GetResultStatus(void)
00302 {
00303  return(Result);
00304 }
00305 
00306 //..............................................................................
00307 
00308 #endif
00309 
00310 

Generated on Sun Feb 9 12:53:51 2003 for NemesisCore by doxygen1.3-rc2