// // (C) Copyright 2003-2019 by Autodesk, Inc. // // Permission to use, copy, modify, and distribute this software in // object code form for any purpose and without fee is hereby granted, // provided that the above copyright notice appears in all copies and // that both that copyright notice and the limited warranty and // restricted rights notice below appear in all supporting // documentation. // // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE // UNINTERRUPTED OR ERROR FREE. // // Use, duplication, or disclosure by the U.S. Government is subject to // restrictions set forth in FAR 52.227-19 (Commercial Computer // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) // (Rights in Technical Data and Computer Software), as applicable. // using System; using System.Windows.Forms; using Autodesk.Revit.UI; namespace Revit.SDK.Samples.ModelessForm_ExternalEvent.CS { /// /// The class of our modeless dialog. /// /// /// Besides other methods, it has one method per each command button. /// In each of those methods nothing else is done but raising an external /// event with a specific request set in the request handler. /// /// public partial class ModelessForm : Form { // In this sample, the dialog owns the handler and the event objects, // but it is not a requirement. They may as well be static properties // of the application. private RequestHandler m_Handler; private ExternalEvent m_ExEvent; /// /// Dialog instantiation /// /// public ModelessForm(ExternalEvent exEvent, RequestHandler handler) { InitializeComponent(); m_Handler = handler; m_ExEvent = exEvent; } /// /// Form closed event handler /// /// protected override void OnFormClosed(FormClosedEventArgs e) { // we own both the event and the handler // we should dispose it before we are closed m_ExEvent.Dispose(); m_ExEvent = null; m_Handler = null; // do not forget to call the base class base.OnFormClosed(e); } /// /// Control enabler / disabler /// /// private void EnableCommands(bool status) { foreach (Control ctrl in this.Controls) { ctrl.Enabled = status; } if (!status) { this.btnExit.Enabled = true; } } /// /// A private helper method to make a request /// and put the dialog to sleep at the same time. /// /// /// It is expected that the process which executes the request /// (the Idling helper in this particular case) will also /// wake the dialog up after finishing the execution. /// /// private void MakeRequest(RequestId request) { m_Handler.Request.Make( request ); m_ExEvent.Raise(); DozeOff(); } /// /// DozeOff -> disable all controls (but the Exit button) /// /// private void DozeOff() { EnableCommands(false); } /// /// WakeUp -> enable all controls /// /// public void WakeUp() { EnableCommands(true); } /// /// Exit - closing the dialog /// /// private void btnExit_Click(object sender, EventArgs e) { Close(); } /// /// Making a door Left /// /// private void btnFlipLeft_Click(object sender, EventArgs e) { MakeRequest( RequestId.MakeLeft ); } /// /// Making a door Right /// /// private void btnFlipRight_Click(object sender, EventArgs e) { MakeRequest( RequestId.MakeRight ); } /// /// Flipping a door between Right and Left /// /// private void btnFlipLeftRight_Click(object sender, EventArgs e) { MakeRequest( RequestId.FlipLeftRight ); } /// /// Flipping a door between facing In and Out /// /// private void btnFlipInOut_Click(object sender, EventArgs e) { MakeRequest( RequestId.FlipInOut ); } /// /// Turning a door to face Out /// /// private void btnFlipOut_Click(object sender, EventArgs e) { MakeRequest( RequestId.TurnOut ); } /// /// Turning a door to face In /// /// private void btnFlipIn_Click(object sender, EventArgs e) { MakeRequest( RequestId.TurnIn ); } /// /// Turning a door around - flipping both hand and face /// /// private void btnRotate_Click(object sender, EventArgs e) { MakeRequest( RequestId.Rotate ); } /// /// Deleting a door /// /// private void btnDelete_Click(object sender, EventArgs e) { MakeRequest( RequestId.Delete ); } } // class }