00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _uappliImpl_hpp_
00022 #define _uappliImpl_hpp_
00023
00024 #include <vector>
00025 #include <ubit/ugroup.hpp>
00026 #include <ubit/uclassImpl.hpp>
00027 #include <ubit/update.hpp>
00028 #include <ubit/ustyle.hpp>
00029 #include <ubit/umessage.hpp>
00030 namespace ubit {
00031
00032
00033
00034 struct UpdateRequest {
00035 UGroup* obj;
00036 UUpdate upd;
00037 UpdateRequest(UGroup* _obj, const UUpdate& _upd) : obj(_obj), upd(_upd) {}
00038 };
00039
00040
00041
00042 class UAppliImpl {
00043 public:
00044 UAppliImpl();
00045
00046 bool isTerminated() const {return is_terminated;}
00047
00048 bool hasPendingRequest() {return request_mask != 0;}
00050
00051 void processPendingRequests();
00053
00054 void beginPaint(UHardWinImpl*);
00055 void endPaint(UHardWinImpl*);
00056 void processPaintRequests();
00057
00058 void addDeleteRequest(UBrick*);
00059 void addDeleteRequest(UView*);
00060 void processDeleteRequests();
00061
00062 void addUpdateRequest(UGroup*, const UUpdate&);
00063 UpdateRequest* findUpdateRequest(UBrick*, unsigned int& k);
00064 void processUpdateRequests();
00065 void processUpdateRequest(UpdateRequest&);
00066
00067
00068
00069 private:
00070 friend class UAppli;
00071 friend class UDisp;
00072 friend class UView;
00073 friend class UEventFlow;
00074 friend class UNatAppli;
00075 friend class UNatDisp;
00076 friend class UTimer;
00077 friend class UInput;
00078 friend class UMService;
00079
00080 UAppli* appli;
00081 bool is_terminated;
00082 UFrame* main_frame;
00083 UNatAppli* natappli;
00084
00085
00086
00087 UDispList displist;
00088 UFlowList flowlist;
00089
00090 UStyleSheet stylesheet;
00091 UStr imapath;
00092 UGroup *inputs, *timers;
00093 UMessagePortMap *messmap;
00094 UChildren modalwin_list;
00095 UWin* modalwin;
00096 UHardWinImpl* paint_wini;
00097 int main_status;
00098 int modal_status;
00099 UTime app_motion_lag, nat_motion_lag;
00100
00101 enum {DELETE_REQUEST = 1<<0, UPDATE_REQUEST = 1<<1, PAINT_REQUEST = 1<<2};
00102 int request_mask;
00103 bool syncing_update_requests;
00104 bool update_data;
00105 std::vector<UpdateRequest> update_list;
00106 std::vector<UBrick*> delete_b_list;
00107 std::vector<UView*> delete_v_list;
00108 };
00109
00110 }
00111 #endif
00112
00113
00114