///////////////////////////////////////////////////////////////////////////// // // This file is Copyright 1992,1993 by Warwick W. Allison. // This file is part of the gem++ library. // You are free to copy and modify these sources, provided you acknowledge // the origin by retaining this notice, and adhere to the conditions // described in the file COPYING.LIB. // ///////////////////////////////////////////////////////////////////////////// #include "gemfiw.h" #include "geme.h" class GEMiconformwindow : GEMformwindow { public: GEMiconformwindow(GEMactivity& act, const GEMrsc& in, int RSCindex, GEMformwindow* of) : GEMformwindow(act,in,RSCindex,0), parent(of) { } GEMiconformwindow(const GEMiconformwindow& copy, GEMformwindow* of) : GEMformwindow(copy), parent(of) { } virtual void Top(const GEMevent& e) { Click(e); } virtual GEMfeedback Click(const GEMevent&) { GEMevent ev; ev.Rectangle(ev.X()-1,ev.Y()-1,3,3,TRUE); // Wait for mouse move >1 ... ev.Button(1,0); // ... or for button up. ev.Get(MU_M1|MU_BUTTON); if (ev.Rectangle()) { int bx,by,bw,bh; int nx,ny; wind_get(0,WF_WORKXYWH,&bx,&by,&bw,&bh); GRect w=BorderRect(); graf_dragbox(w.g_w,w.g_h,w.g_x,w.g_y,bx,by,bw,bh,&nx,&ny); GEMformwindow::Move(nx,ny); } else { Close(); if (parent->Zooms(TRUE)) { GRect s=BorderRect(); GRect f=parent->BorderRect(); graf_growbox(s.g_x,s.g_y,s.g_w,s.g_y,f.g_x,f.g_y,f.g_w,f.g_h); } else { parent->Zooms(FALSE); } parent->Open(); } return ContinueInteraction; } private: GEMformwindow* parent; }; GEMformiconwindow::GEMformiconwindow(GEMactivity& act, const GEMrsc& in, int RSCform, int RSCicon) : GEMformwindow(act,in,RSCform,CLOSER|MOVER|NAME|FULLER), icon(new GEMiconformwindow(act,in,RSCicon,this)) { Zooms(TRUE); } GEMformiconwindow::GEMformiconwindow(GEMactivity& act, const GEMrsc& in, int RSCform, int RSCicon, int Parts) : GEMformwindow(act,in,RSCform,Parts), icon(new GEMiconformwindow(act,in,RSCicon,this)) { Zooms(TRUE); } GEMformiconwindow::GEMformiconwindow(const GEMformiconwindow& copy) : GEMformwindow(copy), icon(new GEMiconformwindow(*copy.icon,this)) { } GEMformiconwindow::~GEMformiconwindow() { delete icon; } void GEMformiconwindow::UserFulled() { Close(); if (Zooms(TRUE)) { GRect s=BorderRect(); GRect f=icon->BorderRect(); graf_shrinkbox(f.g_x,f.g_y,f.g_w,f.g_y,s.g_x,s.g_y,s.g_w,s.g_h); } else { Zooms(FALSE); } icon->Open(); } void GEMformiconwindow::Open() { if (IsIconified()) icon->Close(); GEMformwindow::Open(); } bool GEMformiconwindow::IsIconified() const { return icon->IsOpen(); }