Prefix:4.0.0
-Suffix:preview1-00175
-Number:175
-VCS:2fa635d2fb52a3da978cdb98cb3a1d6ef956ff91
+Suffix:preview1-00183
+Number:183
+VCS:a56b675e791c491b1a1f50dcc0c36a779a82ebc8
<members>
<member name="T:Tizen.Multimedia.StreamRecorder">
<summary>
- Provides methods to control stream recorder.
- </summary>
- <remarks>
- StreamRecorder class provides functions to record raw image frame
- also provides recording start, stop and save the content etc.
- </remarks>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorder._recordingStatusChanged">
- <summary>
- Occurred when recording is progressing for recording status.
+ Provides the ability to record user buffer from application.
</summary>
+ <seealso cref="T:Tizen.Multimedia.Recorder"/>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorder._recordingLimitReached">
+ <member name="M:Tizen.Multimedia.StreamRecorder.GetSupportedFileFormats">
<summary>
- Occurred when recording time or size reach limit.
+ Gets the file formats that the current device supports.
</summary>
+ <returns>An IEnumerable of <see cref="T:Tizen.Multimedia.RecorderFileFormat"/> representing the supported file formats.</returns>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorder._bufferConsumed">
+ <member name="M:Tizen.Multimedia.StreamRecorder.GetSupportedAudioCodecs">
<summary>
- Occurred when streamrecorder complete to use pushed buffer.
+ Gets the audio codecs that the current device supports.
</summary>
+ <returns>An IEnumerable of <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/> representing the supported audio codecs.</returns>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorder._recorderNotified">
+ <member name="M:Tizen.Multimedia.StreamRecorder.GetSupportedVideoCodecs">
<summary>
- Occurred when streamrecorder state is changed.
+ Gets the video codecs that the current device supports.
</summary>
+ <returns>An IEnumerable of <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/> representing the supported video codecs.</returns>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorder._recordingErrorOccurred">
+ <member name="M:Tizen.Multimedia.StreamRecorder.GetSupportedVideoResolutions">
<summary>
- Occurred when error is occured.
+ Gets the video resolutions that the current device supports.
</summary>
+ <returns>An IEnumerable of <see cref="T:Tizen.Multimedia.Size"/> representing the supported resolutions.</returns>
</member>
<member name="M:Tizen.Multimedia.StreamRecorder.#ctor">
<summary>
- Stream recorder constructor.
+ Initialize a new instance of the <see cref="T:Tizen.Multimedia.StreamRecorder"/> class.
</summary>
+ <exception cref="T:System.NotSupportedException">The feature is not supported.</exception>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Finalize">
+ <member name="P:Tizen.Multimedia.StreamRecorder.State">
<summary>
- Stream recorder destructor.
+ Gets the current state of the stream recorder.
</summary>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
</member>
- <member name="E:Tizen.Multimedia.StreamRecorder.RecorderNotified">
- <summary>
- Event that occurs when streamrecorder state is changed.
- </summary>
- </member>
- <member name="E:Tizen.Multimedia.StreamRecorder.BufferConsumed">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Prepare(Tizen.Multimedia.StreamRecorderOptions)">
<summary>
- Event that occurs when buffer had comsumed completely.
+ Prepares the stream recorder with the specified options.
</summary>
+ <remarks>The recorder must be <see cref="F:Tizen.Multimedia.RecorderState.Idle"/>.</remarks>
+ <param name="options">The options for recording.</param>
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>
+ <exception cref="T:System.ArgumentException">Both <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Audio"/> and
+ <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Video"/> are null.
+ </exception>
+ <exception cref="T:System.NotSupportedException"><paramref name="options"/> contains a value which is not supported.</exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Unprepare"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderOptions"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderAudioOptions"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderVideoOptions"/>
</member>
- <member name="E:Tizen.Multimedia.StreamRecorder.RecordingStatusChanged">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Unprepare">
<summary>
- Event that occurs when recording status changed.
+ Unprepares the stream recorder.
</summary>
+ <remarks>
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state by
+ <see cref="M:Tizen.Multimedia.StreamRecorder.Prepare(Tizen.Multimedia.StreamRecorderOptions)"/>, <see cref="M:Tizen.Multimedia.StreamRecorder.Cancel"/> and <see cref="M:Tizen.Multimedia.StreamRecorder.Commit"/>.\n
+ The recorder state will be <see cref="F:Tizen.Multimedia.RecorderState.Idle"/>.\n
+ \n
+ It has no effect if the recorder is already in the <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> state.
+ </remarks>
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Prepare(Tizen.Multimedia.StreamRecorderOptions)"/>
</member>
- <member name="E:Tizen.Multimedia.StreamRecorder.RecordingLimitReached">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Start">
<summary>
- Event that occurs when recording limit is reached.
+ Starts recording.
</summary>
+ <remarks>
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> state by
+ <see cref="M:Tizen.Multimedia.StreamRecorder.Prepare(Tizen.Multimedia.StreamRecorderOptions)"/> or
+ <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>.\n
+ \n
+ It has no effect if the recorder is already in the <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state.
+ </remarks>
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>
+ <exception cref="T:System.UnauthorizedAccessException">The access of the resources can not be granted.</exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Commit"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Cancel"/>
</member>
- <member name="E:Tizen.Multimedia.StreamRecorder.RecordingErrorOccurred">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Pause">
<summary>
- Event that occurs when an error occured during recorder operation.
+ Pauses recording.
</summary>
+ <remarks>
+ Recording can be resumed with <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/>.\n
+ \n
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/> \n
+ \n
+ It has no effect if the recorder is already in the <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state.
+ </remarks>
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Commit"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Cancel"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.FilePath">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Commit">
<summary>
- The file path to record.
+ Stops recording and saves the result.
</summary>
<remarks>
- If the same file already exists in the file system, then old file
- will be overwritten.
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/> or
+ <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>.\n
+ \n
+ The recorder state will be <see cref="F:Tizen.Multimedia.RecorderState.Ready"/> after commit.\n
+ <para>
+ http://tizen.org/privilege/mediastorage is needed if the save path are relevant to media storage.
+ http://tizen.org/privilege/externalstorage is needed if the save path are relevant to external storage.
+ </para>
</remarks>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
+ <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>
+ <exception cref="T:System.UnauthorizedAccessException">The access to the resources can not be granted.</exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
</member>
- <!-- Badly formed XML comment ignored for member "P:Tizen.Multimedia.StreamRecorder.State" -->
- <member name="P:Tizen.Multimedia.StreamRecorder.FileFormat">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Cancel">
<summary>
- Get/Set the file format for recording media stream.
+ Cancels recording.
+ The recording data is discarded and not written.
</summary>
<remarks>
- Must set <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>.
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/> or
+ <see cref="F:Tizen.Multimedia.RecorderState.Paused"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>.
</remarks>
- <exception cref="T:System.ArgumentException">The format does not valid.</exception>
- <seealso cref="P:Tizen.Multimedia.StreamRecorder.SupportedFileFormats"/>
+ <exception cref="T:System.InvalidOperationException">The recorder is not in the valid state.</exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.AudioCodec">
+ <member name="M:Tizen.Multimedia.StreamRecorder.PushBuffer(Tizen.Multimedia.MediaPacket)">
<summary>
- The audio codec for encoding an audio stream.
+ Pushes a packet as recording raw data.
</summary>
+ <param name="packet">An audio or video packet to record.</param>
<remarks>
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Audio"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Recording"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/>.
</remarks>
- <exception cref="T:System.ArgumentException">The codec does not valid.</exception>
- <seealso cref="P:Tizen.Multimedia.StreamRecorder.SupportedAudioEncodings"/>
+ <exception cref="T:System.InvalidOperationException">
+ The recorder is not in the valid state.\n
+ -or-\n
+ <paramref name="packet"/> is an audio packet but audio recording is not enabled(See <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Audio"/>).\n
+ -or-\n
+ <paramref name="packet"/> is a video packet but video recording is not enabled(See <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Video"/>).\n
+ -or-\n
+ <paramref name="packet"/> is a video packet but the <see cref="P:Tizen.Multimedia.VideoMediaFormat.MimeType"/> does not match the video source format.\n
+ -or-\n
+ An internal error occurs.
+ </exception>
+ <exception cref="T:System.ObjectDisposedException">The <see cref="T:Tizen.Multimedia.StreamRecorder"/> has already been disposed.</exception>
+ <see cref="M:Tizen.Multimedia.StreamRecorder.Prepare(Tizen.Multimedia.StreamRecorderOptions)"/>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderOptions.Audio"/>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderOptions.Video"/>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderVideoOptions.SourceFormat"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.VideoCodec">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Dispose">
<summary>
- The video codec for encoding video stream.
+ Release any unmanaged resources used by this object.
</summary>
- <remarks>
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Video"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>
- </remarks>
- <exception cref="T:System.ArgumentException">The codec does not valid.</exception>
- <seealso cref="P:Tizen.Multimedia.StreamRecorder.SupportedVideoEncodings"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.SizeLimit">
+ <member name="M:Tizen.Multimedia.StreamRecorder.Dispose(System.Boolean)">
<summary>
- The maximum size of a recording file in KB(kilobytes). If 0, means
- unlimited recording size.
+ Releases the resources used by the StreamRecorder.
</summary>
- <remarks>
- After reaching the limitation, the data which is being recorded will
- be discarded and not written to the file.
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- </remarks>
- <exception cref="T:System.ArgumentException">The value set to below 0.</exception>
- <seealso cref="T:Tizen.Multimedia.StreamRecordingLimitReachedEventArgs"/>
+ <param name="disposing">
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+ </param>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.TimeLimit">
+ <member name="E:Tizen.Multimedia.StreamRecorder.StateChanged">
<summary>
- The time limit of a recording file in Seconds. If 0, means unlimited recording
- time.
+ Occurs when <see cref="T:Tizen.Multimedia.StreamRecorder"/> state is changed.
</summary>
- <remarks>
- After reaching the limitation, the data which is being recorded will
- be discarded and not written to the file.
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- </remarks>
- <exception cref="T:System.ArgumentException">The value set to below 0.</exception>
- <seealso cref="T:Tizen.Multimedia.StreamRecordingLimitReachedEventArgs"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.AudioSampleRate">
+ <member name="E:Tizen.Multimedia.StreamRecorder.BufferConsumed">
<summary>
- The sampling rate of an audio stream in hertz.
+ Occurs when a buffer had consumed completely.
</summary>
- <remarks>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Audio"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>.
- </remarks>
- <exception cref="T:System.ArgumentException">The value set to below 0.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.AudioBitRate">
+ <member name="E:Tizen.Multimedia.StreamRecorder.RecordingStatusChanged">
<summary>
- The bitrate of an audio encoder in bits per second.
+ Occurs when recording status is changed.
</summary>
- <remarks>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Audio"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>
- </remarks>
- <exception cref="T:System.ArgumentException">The value set to below 0.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.VideoBitRate">
+ <member name="E:Tizen.Multimedia.StreamRecorder.RecordingLimitReached">
<summary>
- The bitrate of an video encoder in bits per second.
+ Occurs when recording limit is reached.
</summary>
- <remarks>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Video"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>
- </remarks>
- <exception cref="T:System.ArgumentException">The value set to below 0.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.VideoFrameRate">
+ <member name="E:Tizen.Multimedia.StreamRecorder.ErrorOccurred">
<summary>
- The video frame rate for recording media stream.
+ Occurs when an error occurred during a recorder operation.
</summary>
- <remarks>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Video"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>
- </remarks>
- <exception cref="T:System.NotSupportedException">The value set to below 0.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.VideoSourceFormat">
+ <member name="T:Tizen.Multimedia.StreamRecorderAudioOptions">
<summary>
- Get or Set the video source format for recording media stream.
+ Specifies the options associated with audio recording.
</summary>
- <exception cref="T:System.ArgumentException">The value set to a invalid value.</exception>
- <seealso cref="T:Tizen.Multimedia.StreamRecorderVideoSourceFormat"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorder"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderOptions"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderVideoOptions"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.AudioChannel">
+ <member name="M:Tizen.Multimedia.StreamRecorderAudioOptions.#ctor(Tizen.Multimedia.RecorderAudioCodec)">
<summary>
- The number of audio channel.
+ Initialize a new instance of the <see cref="T:Tizen.Multimedia.StreamRecorderAudioOptions"/> class with the specified codec.
</summary>
+ <param name="codec">The <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/> for encoding audio stream.</param>
<remarks>
- The attribute is applied only in Created state.
- For mono recording, set channel to 1.
- For stereo recording, set channel to 2.
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
+ <see cref="P:Tizen.Multimedia.StreamRecorderAudioOptions.SampleRate"/>, <see cref="P:Tizen.Multimedia.StreamRecorderAudioOptions.BitRate"/> and <see cref="P:Tizen.Multimedia.StreamRecorderAudioOptions.Channels"/> will be set as default.
</remarks>
- <exception cref="T:System.ArgumentException">The value set to a invalid value.</exception>
+ <exception cref="T:System.ArgumentException"><paramref name="codec"/> is not valid.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.Resolution">
+ <member name="M:Tizen.Multimedia.StreamRecorderAudioOptions.#ctor(Tizen.Multimedia.RecorderAudioCodec,System.Int32,System.Int32,System.Int32)">
<summary>
- Video resolution of the video recording.
+ Initialize a new instance of the <see cref="T:Tizen.Multimedia.StreamRecorderAudioOptions"/> class with the specified
+ codec, sample rate, bit rate and channel value.
</summary>
- <remarks>
- Must set <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.Video"/> or <see cref="F:Tizen.Multimedia.StreamRecorderSourceType.VideoAudio"/>
- by <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/> state.
- </remarks>
- <exception cref="T:System.ArgumentException">The value set to a invalid value.</exception>
- <seealso cref="P:Tizen.Multimedia.StreamRecorder.SupportedVideoResolutions"/>
+ <param name="codec">The <see cref="T:Tizen.Multimedia.RecorderAudioCodec"/> for encoding audio stream.</param>
+ <param name="sampleRate">The sample rate for encoding audio stream.</param>
+ <param name="bitRate">The bit rate for encoding audio stream.</param>
+ <param name="channels">The number of channels for encoding audio stream.</param>
+ <exception cref="T:System.ArgumentException"><paramref name="codec"/> is not valid.</exception>
+ <exception cref="T:System.ArgumentOutOfRangeException">
+ <paramref name="sampleRate"/> is less than zero.\n
+ -or-\n
+ <paramref name="bitRate"/> is less than or equal to zero.\n
+ -or-\n
+ <paramref name="channels"/> is less than or equal to zero.
+ </exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.SupportedFileFormats">
+ <member name="P:Tizen.Multimedia.StreamRecorderAudioOptions.Codec">
<summary>
- Retrieves all the file formats supported by the stream recorder.
+ Gets or sets the audio codec for encoding an audio stream.
</summary>
- <returns>
- It returns a list containing all the supported file
- formats by Stream recorder.
- </returns>
- <seealso cref="T:Tizen.Multimedia.StreamRecorderFileFormat"/>
+ <value>The codec for audio stream recording.</value>
+ <exception cref="T:System.ArgumentException"><paramref name="value"/> is not valid.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.GetSupportedAudioCodecs"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.SupportedAudioEncodings">
+ <member name="P:Tizen.Multimedia.StreamRecorderAudioOptions.SampleRate">
<summary>
- Retrieves all the audio encoders supported by the recorder.
+ Gets or sets the sampling rate of the audio stream in hertz.
</summary>
- <returns>
- It returns a list containing all the supported audio encoders
- by recorder.
- </returns>
- <seealso cref="T:Tizen.Multimedia.StreamRecorderAudioCodec"/>
+ <remarks>If the value is zero, the sample rate will be decided based on input buffers.</remarks>
+ <value>The sample rate value for stream recorder. The default is zero.</value>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.SupportedVideoEncodings">
+ <member name="P:Tizen.Multimedia.StreamRecorderAudioOptions.BitRate">
<summary>
- Retrieves all the video encoders supported by the recorder.
+ Gets or sets the bit rate of the audio encoder in bits per second.
</summary>
- <returns>
- It returns a list containing all the supported video encoders
- by recorder.
- </returns>
- <seealso cref="T:Tizen.Multimedia.StreamRecorderVideoCodec"/>
+ <value>The bit rate value for audio stream recording. The default is 128000.</value>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorder.SupportedVideoResolutions">
+ <member name="P:Tizen.Multimedia.StreamRecorderAudioOptions.Channels">
<summary>
- Retrieves all the video resolutions supported by the recorder.
+ Gets or sets the number of audio channels.
</summary>
- <returns>
- It returns videoresolution list containing the width and height of
- different resolutions supported by recorder.
- </returns>
- <seealso cref="T:Tizen.Multimedia.StreamRecorderVideoResolution"/>
+ <value>The number of audio channels for audio stream recording. The default is 2.</value>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Prepare">
+ <member name="T:Tizen.Multimedia.StreamRecorderBufferConsumedEventArgs">
<summary>
- Prepare the stream recorder.
+ Provides data for the <see cref="E:Tizen.Multimedia.StreamRecorder.BufferConsumed"/> event.
</summary>
- <remarks>
- Before calling the function, it is required to set <see cref="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)"/>,
- <see cref="T:Tizen.Multimedia.StreamRecorderAudioCodec"/>, <see cref="T:Tizen.Multimedia.StreamRecorderVideoCodec"/> and <see cref="T:Tizen.Multimedia.StreamRecorderFileFormat"/> properties of recorder.
- </remarks>
- <exception cref="T:System.InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Unprepare"/>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Unprepare">
+ <member name="P:Tizen.Multimedia.StreamRecorderBufferConsumedEventArgs.Packet">
<summary>
- Resets the stream recorder.
+ Gets the packet that has consumed.
</summary>
- <remarks>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Prepared"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Prepare"/>, <see cref="M:Tizen.Multimedia.StreamRecorder.Cancel"/> and <see cref="M:Tizen.Multimedia.StreamRecorder.Commit"/>.
- The StreamRecorder state will be <see cref="F:Tizen.Multimedia.StreamRecorderState.Created"/>.
- </remarks>
- <exception cref="T:System.InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Prepare"/>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Start">
+ <member name="T:Tizen.Multimedia.StreamRecorderError">
<summary>
- Starts the recording.
+ Specifies errors for <see cref="T:Tizen.Multimedia.StreamRecorder"/>/
</summary>
- <remarks>
- If file path has been set to an existing file, this file is removed automatically and updated by new one.
- The filename should be set before this function is invoked.
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Prepared"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Prepare"/> or
- <see cref="F:Tizen.Multimedia.StreamRecorderState.Paused"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>.
- The filename shuild be set by <see cref="P:Tizen.Multimedia.StreamRecorder.FilePath"/>
- </remarks>
- <exception cref="T:System.InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- <exception cref="T:System.UnauthorizedAccessException">The access ot the resources can not be granted.</exception>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Commit"/>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Cancel"/>
- <seealso cref="P:Tizen.Multimedia.StreamRecorder.FilePath"/>
- <seealso cref="P:Tizen.Multimedia.StreamRecorder.FileFormat"/>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Pause">
+ <member name="F:Tizen.Multimedia.StreamRecorderError.InternalError">
<summary>
- Pause the recording.
+ Internal error.
</summary>
- <remarks>
- Recording can be resumed with <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/>.
- </remarks>
- <exception cref="T:System.InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Commit"/>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Cancel"/>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Commit">
+ <member name="F:Tizen.Multimedia.StreamRecorderError.OutOfStorage">
<summary>
- Stops recording and saves the result.
+ Out of storage.
</summary>
- <remarks>
- The recorder state must be <see cref="F:Tizen.Multimedia.StreamRecorderState.Recording"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Start"/> or
- <see cref="F:Tizen.Multimedia.StreamRecorderState.Paused"/> state by <see cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
- When you want to record audio or video file, you need to add privilege according to rules below additionally.
- <para>
- http://tizen.org/privilege/mediastorage is needed if input or output path are relevant to media storage.
- http://tizen.org/privilege/externalstorage is needed if input or output path are relevant to external storage.
- </para>
- </remarks>
- <exception cref="T:System.InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- <exception cref="T:System.UnauthorizedAccessException">The access ot the resources can not be granted.</exception>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Cancel">
+ <member name="T:Tizen.Multimedia.StreamRecorderVideoFormat">
<summary>
- Cancels the recording.
- The recording data is discarded and not written in the recording file.
+ Specifies the video source formats for <see cref="T:Tizen.Multimedia.StreamRecorder"/>.
</summary>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Start"/>
- <seealso cref="M:Tizen.Multimedia.StreamRecorder.Pause"/>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.PushBuffer(Tizen.Multimedia.MediaPacket)">
+ <member name="F:Tizen.Multimedia.StreamRecorderVideoFormat.Nv12">
<summary>
- Push stream buffer as recording raw data.
+ Nv12 format.
</summary>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.EnableSourceBuffer(Tizen.Multimedia.StreamRecorderSourceType)">
+ <member name="F:Tizen.Multimedia.StreamRecorderVideoFormat.Nv21">
<summary>
- Set the source type of pushed data.
+ Nv21 format.
</summary>
</member>
- <member name="M:Tizen.Multimedia.StreamRecorder.Dispose">
+ <member name="F:Tizen.Multimedia.StreamRecorderVideoFormat.I420">
<summary>
- Release any unmanaged resources used by this object.
+ I420 format.
</summary>
</member>
<member name="T:Tizen.Multimedia.StreamRecorderAudioCodec">
</member>
<member name="F:Tizen.Multimedia.StreamRecorderNotify.StateChanged">
<summary>
- State changed noti.
- </summary>
- </member>
- <member name="T:Tizen.Multimedia.StreamRecordingLimitType">
- <summary>
- Enumeration for the recording limit type.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecordingLimitType.Time">
- <summary>
- Time limit in seconds of recording file
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecordingLimitType.Size">
- <summary>
- Size limit in KB(KiloBytes) of recording file.
- </summary>
- </member>
- <member name="T:Tizen.Multimedia.StreamRecorderState">
- <summary>
- Enumeration for stream recorder states.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorderState.None">
- <summary>
- Stream recorder is not created.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorderState.Created">
- <summary>
- Stream recorder is created, but not prepared.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorderState.Prepared">
- <summary>
- Stream recorder is ready to record.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorderState.Recording">
- <summary>
- Stream recorder is recording pushed packet.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorderState.Paused">
- <summary>
- Stream recorder is paused.
+ State changed.
</summary>
</member>
<member name="T:Tizen.Multimedia.StreamRecorderVideoCodec">
Audio/Video both
</summary>
</member>
- <member name="T:Tizen.Multimedia.StreamRecorderVideoSourceFormat">
- <summary>
- Enumeration for video source format.
- </summary>
- </member>
- <member name="F:Tizen.Multimedia.StreamRecorderVideoSourceFormat.Nv12">
+ <member name="T:Tizen.Multimedia.StreamRecorderErrorOccurredEventArgs">
<summary>
- Nv12 Video source format
+ Provides data for the <see cref="E:Tizen.Multimedia.StreamRecorder.ErrorOccurred"/> event.
</summary>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorderVideoSourceFormat.Nv21">
+ <member name="P:Tizen.Multimedia.StreamRecorderErrorOccurredEventArgs.Error">
<summary>
- Nv21 video source format
+ Gets the error code.
</summary>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorderVideoSourceFormat.I420">
+ <member name="P:Tizen.Multimedia.StreamRecorderErrorOccurredEventArgs.State">
<summary>
- I420 video source format
+ Gets the state of the recorder.
</summary>
</member>
- <member name="T:Tizen.Multimedia.StreamRecorderErrorCode">
+ <member name="T:Tizen.Multimedia.StreamRecorderOptions">
<summary>
- Enumeration for stream recorder failure error.
+ Specifies the options associated with <see cref="T:Tizen.Multimedia.StreamRecorder"/>.
</summary>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorder"/>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.Prepare(Tizen.Multimedia.StreamRecorderOptions)"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderAudioOptions"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderVideoOptions"/>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorderErrorCode.None">
+ <member name="M:Tizen.Multimedia.StreamRecorderOptions.#ctor(System.String,Tizen.Multimedia.RecorderFileFormat)">
<summary>
- Sucessful.
+ Initialize a new instance of the <see cref="T:Tizen.Multimedia.StreamRecorderOptions"/> class with the specified
+ save path and file format.
</summary>
+ <param name="savePath">The path that the recording result is saved.</param>
+ <param name="fileFormat">The file format of output file.</param>
+ <exception cref="T:System.ArgumentNullException"><paramref name="savePath"/>is null.</exception>
+ <exception cref="T:System.ArgumentException">
+ <paramref name="savePath"/>is an empty string.\n
+ -or-\n
+ <paramref name="fileFormat"/> is not valid.
+ </exception>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorderErrorCode.InvalidParameter">
+ <member name="P:Tizen.Multimedia.StreamRecorderOptions.SavePath">
<summary>
- Internal error.
+ Gets or sets the file path to record.
</summary>
+ <remarks>
+ If the same file already exists in the file system, then old file will be overwritten.
+ </remarks>
+ <exception cref="T:System.ArgumentNullException"><paramref name="value"/>is null.</exception>
+ <exception cref="T:System.ArgumentException"><paramref name="value"/>is an empty string.</exception>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorderErrorCode.InvalidOperation">
+ <member name="P:Tizen.Multimedia.StreamRecorderOptions.FileFormat">
<summary>
- Internal error.
+ Gets or sets the file format for recording media stream.
</summary>
+ <exception cref="T:System.ArgumentException"><paramref name="value"/> is not valid.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.GetSupportedFileFormats"/>
</member>
- <member name="F:Tizen.Multimedia.StreamRecorderErrorCode.OutOfMemory">
+ <member name="P:Tizen.Multimedia.StreamRecorderOptions.TimeLimit">
<summary>
- Out of memory.
+ Gets or sets the time limit of recording.
</summary>
+ <value>
+ The maximum time of recording in seconds, or 0 for unlimited time.
+ </value>
+ <remarks>
+ After reaching the limitation, the data which is being recorded will
+ be discarded and not written to the file.
+ The recorder state must be <see cref="F:Tizen.Multimedia.RecorderState.Idle"/> state.
+ </remarks>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ <seealso cref="E:Tizen.Multimedia.StreamRecorder.RecordingLimitReached"/>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderOptions.SizeLimit"/>
</member>
- <member name="T:Tizen.Multimedia.StreamRecorderNotifiedEventArgs">
+ <member name="P:Tizen.Multimedia.StreamRecorderOptions.SizeLimit">
<summary>
- An extended Eventargs class which contains interrupted policy details, previous and current
- state of the recorder.
+ Gets or sets the maximum size of a recording file.
</summary>
+ <value>
+ The maximum size of a recording file in kilobytes, or 0 for unlimited size.
+ </value>
+ <remarks>
+ After reaching the limitation, the data which is being recorded will
+ be discarded and not written to the file.
+ </remarks>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ <seealso cref="E:Tizen.Multimedia.StreamRecorder.RecordingLimitReached"/>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderOptions.TimeLimit"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorderNotifiedEventArgs.Previous">
+ <member name="P:Tizen.Multimedia.StreamRecorderOptions.Audio">
<summary>
- The previous state of the stream recorder.
+ Gets or sets the options for audio recording.
</summary>
+ <remarks>
+ <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Audio"/> or <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Video"/> must be set for recording.
+ </remarks>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderOptions.Video"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorderNotifiedEventArgs.Current">
+ <member name="P:Tizen.Multimedia.StreamRecorderOptions.Video">
<summary>
- The current state of the stream recorder.
+ Gets or sets the options for video recording.
</summary>
+ <remarks>
+ <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Audio"/> or <see cref="P:Tizen.Multimedia.StreamRecorderOptions.Video"/> must be set for recording.
+ </remarks>
+ <seealso cref="P:Tizen.Multimedia.StreamRecorderOptions.Audio"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorderNotifiedEventArgs.Notify">
+ <member name="T:Tizen.Multimedia.StreamRecorderStateChangedEventArgs">
<summary>
- The notify of the event.
+ Provides data for the <see cref="E:Tizen.Multimedia.StreamRecorder.StateChanged"/> event.
</summary>
</member>
- <member name="T:Tizen.Multimedia.StreamRecorderVideoResolution">
+ <member name="P:Tizen.Multimedia.StreamRecorderStateChangedEventArgs.Previous">
<summary>
- Resolution for stream recorder.
+ Gets the previous state of the stream recorder.
</summary>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorderVideoResolution.Width">
+ <member name="P:Tizen.Multimedia.StreamRecorderStateChangedEventArgs.Current">
<summary>
- The video width.
+ Gets the current state of the stream recorder.
</summary>
- <value>The width.</value>
</member>
- <member name="P:Tizen.Multimedia.StreamRecorderVideoResolution.Height">
+ <member name="T:Tizen.Multimedia.StreamRecorderVideoOptions">
<summary>
- The video height.
+ Specifies the options associated with video recording.
</summary>
- <value>The height.</value>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorder"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderOptions"/>
+ <seealso cref="T:Tizen.Multimedia.StreamRecorderAudioOptions"/>
</member>
- <member name="T:Tizen.Multimedia.StreamRecordingBufferConsumedEventArgs">
+ <member name="M:Tizen.Multimedia.StreamRecorderVideoOptions.#ctor(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.Size,Tizen.Multimedia.StreamRecorderVideoFormat,System.Int32)">
<summary>
- An extended EventArgs.
+ Initialize a new instance of the <see cref="T:Tizen.Multimedia.StreamRecorderVideoOptions"/> class with the specified
+ codec, resolution, source format and frame rate.
</summary>
+ <param name="codec">The <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/> for encoding video stream.</param>
+ <param name="resolution">The resolution of video recording.</param>
+ <param name="sourceFormat">The format of source stream.</param>
+ <param name="frameRate">The frame rate for encoding video stream.</param>
+ <remarks>
+ <see cref="P:Tizen.Multimedia.StreamRecorderVideoOptions.BitRate"/> will be set as default.
+ </remarks>
+ <exception cref="T:System.ArgumentException">
+ <paramref name="codec"/> is not valid.\n
+ -or-\n
+ <paramref name="sourceFormat"/> is not valid.\n
+ </exception>
+ <exception cref="T:System.ArgumentOutOfRangeException">
+ Width or height of <paramref name="resolution"/> is less than or equal to zero.\n
+ -or-\n
+ <paramref name="frameRate"/> is less than or equal to zero.\n
+ </exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecordingBufferConsumedEventArgs.Buffer">
+ <member name="M:Tizen.Multimedia.StreamRecorderVideoOptions.#ctor(Tizen.Multimedia.RecorderVideoCodec,Tizen.Multimedia.Size,Tizen.Multimedia.StreamRecorderVideoFormat,System.Int32,System.Int32)">
<summary>
- Consumed buffer.
+ Initialize a new instance of the <see cref="T:Tizen.Multimedia.StreamRecorderVideoOptions"/> class with the specified
+ codec, resolution, source format, frame rate and bit rate.
</summary>
+ <param name="codec">The <see cref="T:Tizen.Multimedia.RecorderVideoCodec"/> for encoding video stream.</param>
+ <param name="resolution">The resolution of video recording.</param>
+ <param name="sourceFormat">The format of source stream.</param>
+ <param name="frameRate">The frame rate for encoding video stream.</param>
+ <param name="bitRate">The bit rate for encoding video stream.</param>
+ <exception cref="T:System.ArgumentException">
+ <paramref name="codec"/> is not valid.\n
+ -or-\n
+ <paramref name="sourceFormat"/> is not valid.\n
+ </exception>
+ <exception cref="T:System.ArgumentOutOfRangeException">
+ Width or height of <paramref name="resolution"/> is less than or equal to zero.\n
+ -or-\n
+ <paramref name="frameRate"/> is less than or equal to zero.\n
+ -or-\n
+ <paramref name="bitRate"/> is less than zero.
+ </exception>
</member>
- <member name="T:Tizen.Multimedia.StreamRecordingErrorOccurredEventArgs">
+ <member name="P:Tizen.Multimedia.StreamRecorderVideoOptions.Codec">
<summary>
- An extended EventArgs class which contains details about error status and
- state of the recorder when it failed.
+ Gets or sets the video codec for encoding video stream.
</summary>
+ <value>The codec for video stream recording.</value>
+ <exception cref="T:System.ArgumentException"><paramref name="value"/> is not valid.</exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.GetSupportedVideoCodecs"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecordingErrorOccurredEventArgs.Error">
+ <member name="P:Tizen.Multimedia.StreamRecorderVideoOptions.Resolution">
<summary>
- The error code.
+ Gets or sets the resolution of the video recording.
</summary>
+ <value>The output resolution for video stream recording.</value>
+ <exception cref="T:System.ArgumentOutOfRangeException">
+ Width or height of <paramref name="value"/> is less than or equal to zero.
+ </exception>
+ <seealso cref="M:Tizen.Multimedia.StreamRecorder.GetSupportedVideoResolutions"/>
</member>
- <member name="P:Tizen.Multimedia.StreamRecordingErrorOccurredEventArgs.State">
+ <member name="P:Tizen.Multimedia.StreamRecorderVideoOptions.FrameRate">
<summary>
- The state of the recorder.
+ Gets or sets the frame rate for recording media stream.
</summary>
+ <value>The frame rate value for video stream recording.</value>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
</member>
- <member name="T:Tizen.Multimedia.StreamRecordingLimitReachedEventArgs">
+ <member name="P:Tizen.Multimedia.StreamRecorderVideoOptions.SourceFormat">
<summary>
- An extended EventArgs class containing details about the recording limit.
+ Gets or sets the video source format for recording media stream.
</summary>
+ <value>The source format of buffers for video stream recording.</value>
+ <exception cref="T:System.ArgumentException"><paramref name="value"/> is not valid.</exception>
</member>
- <member name="P:Tizen.Multimedia.StreamRecordingLimitReachedEventArgs.Type">
+ <member name="P:Tizen.Multimedia.StreamRecorderVideoOptions.BitRate">
<summary>
- The limitation type.
+ The bit rate of the video encoder in bits per second.
</summary>
+ <value>The bit rate value for video stream recording. The default is 0.</value>
+ <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
</member>
</members>
</doc>
<!-- Badly formed XML comment ignored for member "E:Tizen.NUI.Application.BatteryLow" -->
<!-- Badly formed XML comment ignored for member "E:Tizen.NUI.Application.MemoryLow" -->
<!-- Badly formed XML comment ignored for member "E:Tizen.NUI.Application.AppControl" -->
+ <member name="M:Tizen.NUI.Application.AddIdle(System.Delegate)">
+ <summary>
+ Ensures that the function passed in is called from the main loop when it is idle.
+ </summary>
+ <param name="func">The function to call</param>
+ <returns>true if added successfully, false otherwise</returns>
+ </member>
<member name="M:Tizen.NUI.Application.New">
Outer::outer_method(int)
</member>
Exit Application.
</summary>
</member>
+ <member name="M:Tizen.NUI.NUICoreBackend.AddIdle(System.Delegate)">
+ <summary>
+ Ensures that the function passed in is called from the main loop when it is idle.
+ </summary>
+ <param name="func">The function to call</param>
+ <returns>true if added successfully, false otherwise</returns>
+ </member>
<member name="M:Tizen.NUI.NUICoreBackend.Run(System.String[])">
<summary>
Run Application.
Converts a string to NUIEventType instance.
</summary>
</member>
+ <member name="F:Tizen.NUI.NUIWidgetCoreBackend._application">
+ <summary>
+ Application instance to connect event.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.NUIWidgetCoreBackend.Handlers">
+ <summary>
+ Dictionary to contain each type of event callback.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.#ctor">
+ <summary>
+ The default Constructor.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.#ctor(System.String)">
+ <summary>
+ The constructor with stylesheet.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.AddEventHandler(Tizen.Applications.CoreBackend.EventType,System.Action)">
+ <summary>
+ Add NUIWidgetApplication event to Application.
+ Put each type of event callback in Dictionary.
+ </summary>
+ <param name="evType">Type of event</param>
+ <param name="handler">Event callback</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.AddEventHandler``1(Tizen.Applications.CoreBackend.EventType,System.Action{``0})">
+ <summary>
+ Add NUIWidgetApplication event to Application.
+ Put each type of event callback in Dictionary.
+ </summary>
+ <typeparam name="TEventArgs">Argument type for the event</typeparam>
+ <param name="evType">Type of event</param>
+ <param name="handler">Event callback</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.Dispose">
+ <summary>
+ Dispose function.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.Exit">
+ <summary>
+ Exit Application.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.Run(System.String[])">
+ <summary>
+ Run Application.
+ </summary>
+ <param name="args">Arguments from commandline.</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.OnRegionChanged(System.Object,Tizen.NUI.WidgetApplication.WidgetApplicationEventArgs)">
+ <summary>
+ Region changed event callback function.
+ </summary>
+ <param name="source">Application instance</param>
+ <param name="e">Event argument for RegionChanged</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.OnMemoryLow(System.Object,Tizen.NUI.WidgetApplication.WidgetApplicationEventArgs)">
+ <summary>
+ Memory Low event callback function.
+ </summary>
+ <param name="source">Application instance</param>
+ <param name="e">Event argument for MemoryLow</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.OnLanguageChanged(System.Object,Tizen.NUI.WidgetApplication.WidgetApplicationEventArgs)">
+ <summary>
+ Language changed event callback function.
+ </summary>
+ <param name="source">Application instance</param>
+ <param name="e">Event argument for LanguageChanged</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetCoreBackend.OnBatteryLow(System.Object,Tizen.NUI.WidgetApplication.WidgetApplicationEventArgs)">
+ <summary>
+ Battery low event callback function.
+ </summary>
+ <param name="source">Application instance</param>
+ <param name="e">Event argument for BatteryLow</param>
+ </member>
<member name="T:Tizen.NUI.PropertyNotification.NotifyEventArgs">
@brief Event arguments that passed via Notify signal
collection but not when one of the elements of the collection is modified as it is a bit
tricky to detect unmanaged code that modifies the collection under our feet.
</member>
+ <member name="T:Tizen.NUI.WidgetApplication">
+ <summary>
+ Widget application
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.WidgetApplication.Dispose(Tizen.NUI.DisposeTypes)">
+ <summary>
+ To make Window instance be disposed.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.WidgetApplication.MainLoop">
+ <summary>
+ This starts the application.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.WidgetApplication.Quit">
+ <summary>
+ This quits the application.
+ Tizen applications should use Lower to improve re-start performance unless they need to Quit completely.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.WidgetApplication.GetWindow">
+ <summary>
+ Get window.
+ </summary>
+ <returns> The window for widget instance.</returns>
+ </member>
+ <member name="M:Tizen.NUI.WidgetApplication.GetResourcePath">
+ <summary>
+ Get path application resources are stored at.
+ </summary>
+ <returns>The full path of the resources</returns>
+ </member>
+ <member name="T:Tizen.NUI.WidgetApplication.WidgetApplicationEventArgs">
+ <summary>
+ Event arguments that passed via widget app event signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.WidgetApplication.WidgetApplicationEventArgs.WidgetApplication">
+ <summary>
+ Widget application.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.WidgetApplication.Init">
+ <summary>
+ Init event.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.WidgetApplication.Terminate">
+ <summary>
+ Terminate event.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.WidgetApplication.LanguageChanged">
+ <summary>
+ LanguageChanged event.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.WidgetApplication.RegionChanged">
+ <summary>
+ RegionChanged event.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.WidgetApplication.BatteryLow">
+ <summary>
+ BatteryLow event.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.WidgetApplication.MemoryLow">
+ <summary>
+ MemoryLow event.
+ </summary>
+ </member>
<member name="T:Tizen.NUI.Adaptor">
<summary>
An Adaptor object is used to initialize and control how Dali runs.
The delay time is not included in the looping time.<br/>
When the delay time is negative value, it would treat as play immediately.<br/>
</summary>
- <param name="delayMiliSeconds">The delay time</param>
+ <param name="delayMilliseconds">The delay time</param>
</member>
<member name="M:Tizen.NUI.Animation.Pause">
<summary>
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.Ellipsis" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.AutoScrollLoopDelay" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.AutoScrollStopMode" -->
- <member name="P:Tizen.NUI.BaseComponents.TextLabel.LineCount">
- <summary>
- The line count of text.
- </summary>
- </member>
- <!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.LineWrapMode" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.TextColorAnimatable" -->
+ <!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.LineCount" -->
+ <!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.TextLabel.LineWrapMode" -->
<member name="T:Tizen.NUI.BaseComponents.VideoView">
<summary>
VideoView is a control for video playback and display.
View is the base class for all views.
</summary>
</member>
+ <member name="M:Tizen.NUI.BaseComponents.View.Add(Tizen.NUI.BaseComponents.View)">
+ <summary>
+ Adds a child view to this View.
+ </summary>
+ <seealso cref="!:Container::Add()">
+ </seealso>
+ </member>
+ <member name="M:Tizen.NUI.BaseComponents.View.Remove(Tizen.NUI.BaseComponents.View)">
+ <summary>
+ Removes a child View from this View. If the view was not a child of this view, this is a no-op.
+ </summary>
+ <seealso cref="!:Container::Remove()">
+ </seealso>
+ </member>
+ <member name="M:Tizen.NUI.BaseComponents.View.GetChildAt(System.UInt32)">
+ <summary>
+ Retrieves child view by index.
+ </summary>
+ <seealso cref="!:Container::GetChildAt()">
+ </seealso>
+ </member>
+ <member name="M:Tizen.NUI.BaseComponents.View.GetChildCount">
+ <summary>
+ Retrieves the number of children held by the view.
+ </summary>
+ <seealso cref="!:Container::GetChildCount()">
+ </seealso>
+ </member>
+ <!-- Badly formed XML comment ignored for member "M:Tizen.NUI.BaseComponents.View.GetParent" -->
+ <member name="M:Tizen.NUI.BaseComponents.View.Dispose(Tizen.NUI.DisposeTypes)">
+
+ </member>
<!-- Badly formed XML comment ignored for member "E:Tizen.NUI.BaseComponents.View.FocusGained" -->
<!-- Badly formed XML comment ignored for member "E:Tizen.NUI.BaseComponents.View.FocusLost" -->
<member name="T:Tizen.NUI.BaseComponents.View.KeyEventArgs">
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.CurrentPosition" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.Size2D" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.CurrentSize" -->
- <!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.Parent" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.Opacity" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.Position2D" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.BaseComponents.View.ScreenPosition" -->
</remarks>
<param name="target">Will be lowered below this view</param>
</member>
- <member name="M:Tizen.NUI.BaseComponents.View.Add(Tizen.NUI.BaseComponents.View)">
- <summary>
- Adds a child view to this View.
- </summary>
- <pre>This View(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent view.</pre>
- <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
- <remarks>If the child already has a parent, it will be removed from old parent and reparented to this view. This may change child's position, color, scale etc as it now inherits them from this view.</remarks>
- <param name="child">The child</param>
- </member>
- <member name="M:Tizen.NUI.BaseComponents.View.Remove(Tizen.NUI.BaseComponents.View)">
- <summary>
- Removes a child View from this View. If the view was not a child of this view, this is a no-op.
- </summary>
- <pre>This View(the parent) has been initialized. The child view is not the same as the parent view.</pre>
- <param name="child">The child</param>
- </member>
<member name="M:Tizen.NUI.BaseComponents.View.Unparent">
<summary>
Removes a View from its Parent View / Layer. If the View has no parent, this method does nothing.
</summary>
<pre>The (child) View has been initialized. </pre>
</member>
- <member name="M:Tizen.NUI.BaseComponents.View.GetChildCount">
- <summary>
- Retrieves the number of children held by the view.
- </summary>
- <pre>The View has been initialized.</pre>
- <returns>The number of children</returns>
- </member>
- <member name="M:Tizen.NUI.BaseComponents.View.GetChildAt(System.UInt32)">
- <summary>
- Retrieves child view by index.
- </summary>
- <pre>The View has been initialized.</pre>
- <param name="index">The index of the child to retrieve</param>
- <returns>The view for the given index or empty handle if children not initialized</returns>
- </member>
<member name="M:Tizen.NUI.BaseComponents.View.FindChildByName(System.String)">
<summary>
Search through this view's hierarchy for an view with the given name.
<param name="color">A Color to be converted to Vector4</param>
</member>
<!-- Badly formed XML comment ignored for member "M:Tizen.NUI.Color.op_Implicit(Tizen.NUI.Vector4)~Tizen.NUI.Color" -->
+ <member name="T:Tizen.NUI.Container">
+ <summary>
+
+ Container is an abstract class to be inherited from by classes that desire to have Views
+ added to them.
+
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.Container.Add(Tizen.NUI.BaseComponents.View)">
+ <summary>
+ Adds a child view to this Container.
+ </summary>
+ <pre>This Container(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent view.</pre>
+ <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
+ <remarks>If the child already has a parent, it will be removed from old parent and reparented to this view. This may change child's position, color, scale etc as it now inherits them from this view.</remarks>
+ <param name="view">The child view to add</param>
+ </member>
+ <member name="M:Tizen.NUI.Container.Remove(Tizen.NUI.BaseComponents.View)">
+ <summary>
+ Removes a child View from this View. If the view was not a child of this view, this is a no-op.
+ </summary>
+ <pre>This View(the parent) has been initialized. The child view is not the same as the parent view.</pre>
+ <param name="child">The child</param>
+ </member>
+ <member name="M:Tizen.NUI.Container.GetChildAt(System.UInt32)">
+ <summary>
+ Retrieves child view by index.
+ </summary>
+ <pre>The View has been initialized.</pre>
+ <param name="index">The index of the child to retrieve</param>
+ <returns>The view for the given index or empty handle if children not initialized</returns>
+ </member>
+ <member name="M:Tizen.NUI.Container.GetParent">
+ <summary>
+ Get the parent of this container
+ </summary>
+ <pre>The child container has been initialized.</pre>
+ <returns>The parent container</returns>
+ </member>
+ <member name="M:Tizen.NUI.Container.GetChildCount">
+ <summary>
+ Get the number of children for this container
+ </summary>
+ <pre>The container has been initialized.</pre>
+ <returns>number of children</returns>
+ </member>
+ <member name="P:Tizen.NUI.Container.Parent">
+ <summary>
+ Get the parent Container
+ Read only
+ </summary>
+ <pre>The child container has been initialized.</pre>
+ <returns>The parent container</returns>
+ </member>
+ <member name="P:Tizen.NUI.Container.ChildCount">
+ <summary>
+ Get the number of children for this container
+ Read only
+ </summary>
+ <pre>The container has been initialized.</pre>
+ <returns>number of children</returns>
+ </member>
<member name="T:Tizen.NUI.Spin">
<summary>
Spin CustomView class
Layers provide a mechanism for overlaying groups of actors on top of each other.
</summary>
</member>
+ <member name="M:Tizen.NUI.Layer.Add(Tizen.NUI.BaseComponents.View)">
+ from Container base class
+ <summary>
+ Adds a child view to this layer.
+ </summary>
+ <seealso cref="!:Container::Add()">
+ </seealso>
+ </member>
+ <member name="M:Tizen.NUI.Layer.Remove(Tizen.NUI.BaseComponents.View)">
+ <summary>
+ Removes a child View from this layer. If the view was not a child of this layer, this is a no-op.
+ </summary>
+ <seealso cref="!:Container::Add()">
+ </seealso>
+ </member>
+ <member name="M:Tizen.NUI.Layer.GetChildAt(System.UInt32)">
+ <summary>
+ Retrieves child view by index.
+ </summary>
+ <pre>The View has been initialized.</pre>
+ <param name="index">The index of the child to retrieve</param>
+ <returns>The view for the given index or empty handle if children not initialized</returns>
+ </member>
<member name="M:Tizen.NUI.Layer.#ctor">
<summary>
Creates a Layer object.
<param name="child">The id of the child to find</param>
<returns> A handle to the view if found, or an empty handle if not. </returns>
</member>
- <member name="M:Tizen.NUI.Layer.Add(Tizen.NUI.BaseComponents.View)">
- <summary>
- Adds a child view to this layer.
- </summary>
- <pre>This layer(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent layer.</pre>
- <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
- <remarks>If the child already has a parent, it will be removed from old parent and reparented to this layer. This may change child's position, color, scale etc as it now inherits them from this layer.</remarks>
- <param name="child">The child</param>
- </member>
- <member name="M:Tizen.NUI.Layer.Remove(Tizen.NUI.BaseComponents.View)">
- <summary>
- Removes a child View from this layer. If the view was not a child of this layer, this is a no-op.
- </summary>
- <pre>This layer(the parent) has been initialized. The child view is not the same as the parent view.</pre>
- <param name="child">The child</param>
- </member>
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.Layer.Depth" -->
<member name="M:Tizen.NUI.Layer.Raise">
<summary>
</member>
<!-- Badly formed XML comment ignored for member "M:Tizen.NUI.Layer.MoveAbove(Tizen.NUI.Layer)" -->
<!-- Badly formed XML comment ignored for member "M:Tizen.NUI.Layer.MoveBelow(Tizen.NUI.Layer)" -->
- <member name="M:Tizen.NUI.Layer.GetChildAt(System.UInt32)">
- <summary>
- Retrieves child view by index.
- </summary>
- <pre>The View has been initialized.</pre>
- <param name="index">The index of the child to retrieve</param>
- <returns>The view for the given index or empty handle if children not initialized</returns>
- </member>
<member name="T:Tizen.NUI.Layer.LayerBehavior">
<summary>
Enumeration for the behavior of the layer.
Exit NUIApplication.
</summary>
</member>
+ <member name="M:Tizen.NUI.NUIApplication.AddIdle(System.Delegate)">
+ <summary>
+ Ensures that the function passed in is called from the main loop when it is idle.
+ </summary>
+ <param name="func">The function to call</param>
+ <returns>true if added successfully, false otherwise</returns>
+ </member>
<member name="T:Tizen.NUI.NUIApplication.WindowMode">
<summary>
Enumeration for deciding whether a NUI application window is opaque or transparent.
character will move character by character to next line
</summary>
</member>
+ <member name="T:Tizen.NUI.NUIWidgetApplication">
+ <summary>
+ Represents an application that have UI screen. The NUIWidgetApplication class has a default stage.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.#ctor">
+ <summary>
+ The default constructor.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.#ctor(System.String)">
+ <summary>
+ The constructor with stylesheet.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnLocaleChanged(Tizen.Applications.LocaleChangedEventArgs)">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnLowBattery(Tizen.Applications.LowBatteryEventArgs)">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnLowMemory(Tizen.Applications.LowMemoryEventArgs)">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnRegionFormatChanged(Tizen.Applications.RegionFormatChangedEventArgs)">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnTerminate">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnPreCreate">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.OnCreate">
+ <summary>
+ Overrides this method if want to handle behavior.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.Run(System.String[])">
+ <summary>
+ Run NUIWidgetApplication.
+ </summary>
+ <param name="args">Arguments from commandline.</param>
+ </member>
+ <member name="M:Tizen.NUI.NUIWidgetApplication.Exit">
+ <summary>
+ Exit NUIWidgetApplication.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.NUIWidgetApplication.Window">
+ <summary>
+ Get the window instance.
+ </summary>
+ </member>
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.PaddingType.Left" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.PaddingType.Right" -->
<!-- Badly formed XML comment ignored for member "P:Tizen.NUI.PaddingType.Bottom" -->
The type of the wheel event
</summary>
</member>
+ <member name="T:Tizen.NUI.Widget">
+ <summary>
+ Widget object should be created by WidgetApplication.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.Widget.Dispose(Tizen.NUI.DisposeTypes)">
+ <summary>
+ To make Widget instance be disposed.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.Widget.#ctor(System.String)">
+ <summary>
+ This is the constructor for Widget.
+ </summary>
+ <param name="id">for widget instance</param>
+ </member>
+ <member name="T:Tizen.NUI.Widget.CreateEventArgs">
+ <summary>
+ Event arguments that passed via KeyEvent signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.CreateEventArgs.WidgetData">
+ <summary>
+ widget data.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.CreateEventArgs.Bundle">
+ <summary>
+ a bundle.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.CreateEventArgs.WindowSize">
+ <summary>
+ window size.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.Widget.Create">
+ <summary>
+ Create event.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.TerminateEventArgs">
+ <summary>
+ Event arguments that passed via terminate event signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.TerminateEventArgs.WidgetData">
+ <summary>
+ widget data.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.TerminateEventArgs.Bundle">
+ <summary>
+ a bundle.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.TerminateEventArgs.WidgetTerminateType">
+ <summary>
+ widget terminate type.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.Widget.Terminate">
+ <summary>
+ Terminate event.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.PauseEventArgs">
+ <summary>
+ Event arguments that passed via pause event signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.PauseEventArgs.WidgetData">
+ <summary>
+ widget data.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.Widget.Pause">
+ <summary>
+ Pause event.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.ResumeEventArgs">
+ <summary>
+ Event arguments that passed via pause event signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.ResumeEventArgs.WidgetData">
+ <summary>
+ widget data.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.Widget.Resume">
+ <summary>
+ Resume event.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.ResizeEventArgs">
+ <summary>
+ Event arguments that passed via resize signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.ResizeEventArgs.WidgetData">
+ <summary>
+ widget data.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.ResizeEventArgs.WindowSize">
+ <summary>
+ window size.
+ </summary>
+ </member>
+ <member name="E:Tizen.NUI.Widget.Resize">
+ <summary>
+ Resize event.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.UpdateEventArgs">
+ <summary>
+ Event arguments that passed via update event signal.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.UpdateEventArgs.WidgetData">
+ <summary>
+ widget data.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.UpdateEventArgs.Bundle">
+ <summary>
+ A bundle.
+ </summary>
+ </member>
+ <member name="P:Tizen.NUI.Widget.UpdateEventArgs.Force">
+ <summary>
+ It means several steps.
+ </summary>
+ <remark>
+ 0 -> no force
+ 1 -> force but do someting
+ 2 -> force
+ </remark>
+ </member>
+ <member name="E:Tizen.NUI.Widget.Update">
+ <summary>
+ Update event.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.WidgetTerminateType">
+ <summary>
+ Enumeration for terminate type of widget instance.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetTerminateType.Permanent">
+ <summary>
+ User deleted this widget from the viewer
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetTerminateType.Temporary">
+ <summary>
+ Widget is deleted because of other reasons (e.g. widget process is terminated temporarily by the system)
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.Widget.WidgetLifecycleEventType">
+ <summary>
+ Enumeration for lifecycle event type of widget instance.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetLifecycleEventType.AppDead">
+ <summary>
+ The widget is dead.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetLifecycleEventType.Create">
+ <summary>
+ The widget is dead.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetLifecycleEventType.Destroy">
+ <summary>
+ The widget is destroyed.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetLifecycleEventType.Pause">
+ <summary>
+ The widget is paused.
+ </summary>
+ </member>
+ <member name="F:Tizen.NUI.Widget.WidgetLifecycleEventType.Resume">
+ <summary>
+ The widget is resumed.
+ </summary>
+ </member>
+ <member name="T:Tizen.NUI.WidgetData">
+ <summary>
+ Widget data.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.WidgetData.Dispose(Tizen.NUI.DisposeTypes)">
+ <summary>
+ To make Window instance be disposed.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.WidgetData.GetInstanceId">
+ <summary>
+ Get widget instance id.
+ </summary>
+ <returns>Id of widget instance.</returns>
+ </member>
+ <member name="M:Tizen.NUI.WidgetData.GetContent">
+ <summary>
+ Get widget instance content.
+ </summary>
+ <returns>Content of widget instance.</returns>
+ </member>
+ <member name="M:Tizen.NUI.WidgetData.GetWindow">
+ <summary>
+ Get widget instance Window.
+ </summary>
+ <returns>Window of widget instance</returns>
+ </member>
+ <member name="M:Tizen.NUI.WidgetData.SetContent(System.String)">
+ <summary>
+ Set widget instance arguments.
+ </summary>
+ <param name="content">Content of widget instance</param>
+ </member>
+ <member name="M:Tizen.NUI.WidgetData.SetWindow(Tizen.NUI.Window)">
+ <summary>
+ Set widget instance arguments.
+ </summary>
+ <param name="window">Window of widget instance.</param>
+ </member>
<!-- Badly formed XML comment ignored for member "T:Tizen.NUI.WidgetView" -->
<member name="M:Tizen.NUI.WidgetView.Dispose(Tizen.NUI.DisposeTypes)">
<summary>
</summary>
<returns>The preffered brightness.</returns>
</member>
+ <member name="P:Tizen.NUI.Window.Title">
+ <summary>
+ Gets/Sets a window title.
+ </summary>
+ </member>
+ <member name="M:Tizen.NUI.Window.SetClass(System.String,System.String)">
+ <summary>
+ Sets the window name and class string.
+ </summary>
+ <param name="name">The name of the window</param>
+ <param name="klass">The class of the window</param>
+ </member>
<member name="M:Tizen.NUI.Window.Raise">
<summary>
Raises window to the top of Window stack.
</summary>
<param name="serviceType">The DNSSD service type</param>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.ArgumentException">Thrown when serviceType is null.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
</member>
</remarks>
<since_tizen> 4 </since_tizen>
<privilege>http://tizen.org/privilege/internet</privilege>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
<exception cref="T:System.UnauthorizedAccessException">Thrown when permission is denied.</exception>
Stops browsing the DNSSD remote service.
</summary>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
</member>
<param name="serviceType">The DNSSD service type. It is expressed as type followed by protocol, separated by a dot(e.g. "_ftp._tcp").
It must begin with an underscore, followed by 1-15 characters which may be letters, digits or hyphens.
</param>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when serviceType is set to null.</exception>
</member>
In case of error, null will be returned during get and exception will be thrown during set.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when Name value is set to null.</exception>
<exception cref="T:System.InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
In case of error, -1 will be returned during get and exception will be thrown during set.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown if value of Port is set to less than 0 or more than 65535.</exception>
<exception cref="T:System.InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
<since_tizen> 4 </since_tizen>
<param name="key">The key of the TXT record. It must be a null-terminated string with 9 characters or fewer excluding null. It is case insensitive.</param>
<param name="value">The value of the TXT record.If null, then "key" will be added with no value. If non-null but value_length is zero, then "key=" will be added with empty value.</param>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when value of key is null.</exception>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
</summary>
<since_tizen> 4 </since_tizen>
<param name="key">The key of the TXT record to be removed.</param>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when value of key is null.</exception>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
Name of the service must be set.
<since_tizen> 4 </since_tizen>
<privilege>http://tizen.org/privilege/internet</privilege>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
<exception cref="T:System.UnauthorizedAccessException">Thrown when permission is denied.</exception>
A local service registered using RegisterService() must be passed.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD is not supported.</exception>
</member>
</remarks>
<since_tizen> 4 </since_tizen>
<privilege>http://tizen.org/privilege/internet</privilege>
- <feature>http://tizen.org/feature/network.dnssd</feature>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="!:InvalidOperationException">Thrown when any other error occured.</exception>
<exception cref="!:NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
<exception cref="!:UnauthorizedAccessException">Thrown when permission is denied.</exception>
Stops browsing the DNSSD/SSDP remote service.
</summary>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="!:InvalidOperationException">Thrown when any other error occured.</exception>
<exception cref="!:NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
</member>
</remarks>
<since_tizen> 4 </since_tizen>
<privilege>http://tizen.org/privilege/internet</privilege>
- <feature>http://tizen.org/feature/network.dnssd</feature>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
<exception cref="T:System.UnauthorizedAccessException">Thrown when permission is denied.</exception>
A local service registered using RegisterService() must be passed.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.dnssd</feature>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
</member>
</summary>
<since_tizen> 4 </since_tizen>
<param name="target">The target to browse for the service.</param>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.ArgumentException">Thrown when target is null.</exception>
<exception cref="T:System.NotSupportedException">Thrown when SSDP is not supported.</exception>
</member>
Application will keep browsing for available/unavailable services until it calls StopDiscovery().
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occured.</exception>
<exception cref="T:System.NotSupportedException">Thrown when SSDP is not supported.</exception>
</member>
</summary>
<since_tizen> 4 </since_tizen>
<privilege>http://tizen.org/privilege/internet</privilege>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occured.</exception>
<exception cref="T:System.NotSupportedException">Thrown when SSDP is not supported.</exception>
<exception cref="T:System.UnauthorizedAccessException">Thrown when permission is denied.</exception>
</summary>
<since_tizen> 4 </since_tizen>
<param name="target">The SSDP local service's target. It may be a device type or a service type.</param>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when target is set to null.</exception>
</member>
In case of error, null will be returned during get and exception will be thrown during set.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when Usn value is set to null.</exception>
<exception cref="T:System.InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
In case of error, null will be returned during get and exception will be thrown during set.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
<exception cref="T:System.ArgumentException">Thrown when Url value is set to null.</exception>
<exception cref="T:System.InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
</remarks>
<since_tizen> 4 </since_tizen>
<privilege>http://tizen.org/privilege/internet</privilege>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when SSDP is not supported.</exception>
<exception cref="T:System.UnauthorizedAccessException">Thrown when permission is denied.</exception>
A local service registered using RegisterService() must be passed.
</remarks>
<since_tizen> 4 </since_tizen>
- <feature>http://tizen.org/feature/network.ssdp</feature>
+ <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
<exception cref="T:System.InvalidOperationException">Thrown when any other error occurred.</exception>
<exception cref="T:System.NotSupportedException">Thrown when SSDP is not supported.</exception>
</member>
<param name="query">The query used for filtering the results</param>
<returns>The count of records</returns>
</member>
- <member name="M:Tizen.Pims.Contacts.ContactsDatabase.AddDBChangedDelegate(System.String,System.EventHandler{Tizen.Pims.Contacts.DBChangedEventArgs})">
+ <member name="M:Tizen.Pims.Contacts.ContactsDatabase.AddDBChangedEventHandler(System.String,System.EventHandler{Tizen.Pims.Contacts.DBChangedEventArgs})">
<summary>
- Registers a callback function to be invoked when a record changes.
+ Registers a EventHandler to be invoked when a record changes.
</summary>
<param name="viewUri">The view URI of records whose changes are monitored</param>
<param name="DBChanged">The EventHandler to register</param>
</member>
- <member name="M:Tizen.Pims.Contacts.ContactsDatabase.RemoveDBChangedDelegate(System.String,System.EventHandler{Tizen.Pims.Contacts.DBChangedEventArgs})">
+ <member name="M:Tizen.Pims.Contacts.ContactsDatabase.RemoveDBChangedEventHandler(System.String,System.EventHandler{Tizen.Pims.Contacts.DBChangedEventArgs})">
<summary>
- Deregisters a callback function.
+ Deregisters a EventHandler.
</summary>
<param name="viewUri">The view URI of records whose changes are monitored</param>
<param name="DBChanged">The EventHandler to deregister</param>
Name: csapi-tizenfx
Summary: Assemblies of Tizen .NET
-Version: 4.0.0.175
+Version: 4.0.0.183
Release: 1
Group: Development/Libraries
License: Apache-2.0
certificates.Add(CertificateType.Distributor, new PackageCertificate(distRootCertificate, distIntermediateCertificate, distSignerCertificate));
string dist2RootCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
- string dist2IntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
- string dist2SignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2RootCertificate);
+ string dist2IntermediateCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2IntermediateCertificate);
+ string dist2SignerCertificate = GetValue(nativeCertificates, Interop.Package.CertificateType.Distributor2SignerCertificate);
certificates.Add(CertificateType.Distributor2, new PackageCertificate(dist2RootCertificate, dist2IntermediateCertificate, dist2SignerCertificate));
return certificates;
--- /dev/null
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+ internal static partial class StreamRecorder
+ {
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate bool VideoResolutionCallback(int width, int height, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate bool FileFormatCallback(StreamRecorderFileFormat format, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate bool AudioEncoderCallback(StreamRecorderAudioCodec codec, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate bool VideoEncoderCallback(StreamRecorderVideoCodec codec, IntPtr userData);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_file_format")]
+ internal static extern StreamRecorderErrorCode FileFormats(StreamRecorderHandle handle,
+ FileFormatCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_audio_encoder")]
+ internal static extern StreamRecorderErrorCode AudioEncoders(StreamRecorderHandle handle,
+ AudioEncoderCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_encoder")]
+ internal static extern StreamRecorderErrorCode VideoEncoders(StreamRecorderHandle handle,
+ VideoEncoderCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_resolution")]
+ internal static extern StreamRecorderErrorCode VideoResolution(StreamRecorderHandle handle,
+ VideoResolutionCallback callback, IntPtr userData = default(IntPtr));
+ }
+}
--- /dev/null
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+ internal static partial class StreamRecorder
+ {
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void RecordingLimitReachedCallback(RecordingLimitType type, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void RecordingStatusCallback(ulong elapsedTime, ulong fileSize, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void NotifiedCallback(int previous, int current,
+ StreamRecorderNotify notify, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void RecorderErrorCallback(StreamRecorderErrorCode error,
+ RecorderState current, IntPtr userData);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ internal delegate void BufferConsumedCallback(IntPtr buffer, IntPtr userData);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_notify_cb")]
+ internal static extern StreamRecorderErrorCode SetNotifiedCallback(StreamRecorderHandle handle,
+ NotifiedCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_notify_cb")]
+ internal static extern int UnsetNotifiedCallback(StreamRecorderHandle handle);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_status_cb")]
+ internal static extern StreamRecorderErrorCode SetStatusChangedCallback(StreamRecorderHandle handle,
+ RecordingStatusCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_status_cb")]
+ internal static extern int UnsetStatusChangedCallback(StreamRecorderHandle handle);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit_reached_cb")]
+ internal static extern StreamRecorderErrorCode SetLimitReachedCallback(StreamRecorderHandle handle,
+ RecordingLimitReachedCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_limit_reached_cb")]
+ internal static extern int UnsetLimitReachedCallback(StreamRecorderHandle handle);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_error_cb")]
+ internal static extern StreamRecorderErrorCode SetErrorCallback(StreamRecorderHandle handle,
+ RecorderErrorCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_error_cb")]
+ internal static extern int UnsetErrorCallback(StreamRecorderHandle handle);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_buffer_consume_completed_cb")]
+ internal static extern StreamRecorderErrorCode SetBufferConsumedCallback(StreamRecorderHandle handle,
+ BufferConsumedCallback callback, IntPtr userData = default(IntPtr));
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_buffer_consume_completed_cb")]
+ internal static extern int UnsetBufferConsumedCallback(StreamRecorderHandle handle);
+ }
+}
--- /dev/null
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Multimedia;
+
+internal static partial class Interop
+{
+ internal static partial class StreamRecorder
+ {
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_filename")]
+ internal static extern StreamRecorderErrorCode SetFileName(StreamRecorderHandle handle, string path);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_filename")]
+ internal static extern int GetFileName(StreamRecorderHandle handle, out IntPtr path);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_file_format")]
+ internal static extern StreamRecorderErrorCode SetFileFormat(StreamRecorderHandle handle,
+ StreamRecorderFileFormat format);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_file_format")]
+ internal static extern int GetFileFormat(StreamRecorderHandle handle, out int format);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder")]
+ internal static extern StreamRecorderErrorCode SetAudioEncoder(StreamRecorderHandle handle,
+ StreamRecorderAudioCodec codec);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder")]
+ internal static extern int GetAudioEncoder(StreamRecorderHandle handle, out int codec);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder")]
+ internal static extern StreamRecorderErrorCode SetVideoEncoder(StreamRecorderHandle handle,
+ StreamRecorderVideoCodec codec);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder")]
+ internal static extern int GetVideoEncoder(StreamRecorderHandle handle, out int codec);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_resolution")]
+ internal static extern StreamRecorderErrorCode SetVideoResolution(StreamRecorderHandle handle,
+ int width, int height);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_resolution")]
+ internal static extern StreamRecorderErrorCode GetVideoResolution(StreamRecorderHandle handle,
+ out int width, out int height);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_framerate")]
+ internal static extern StreamRecorderErrorCode SetVideoFrameRate(StreamRecorderHandle handle, int framerate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_framerate")]
+ internal static extern int GetVideoFramerate(StreamRecorderHandle handle, out int framerate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_source_format")]
+ internal static extern StreamRecorderErrorCode SetVideoSourceFormat(StreamRecorderHandle handle,
+ StreamRecorderVideoFormat format);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_source_format")]
+ internal static extern int GetVideoSourceFormat(StreamRecorderHandle handle, out int format);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit")]
+ internal static extern StreamRecorderErrorCode SetRecordingLimit(StreamRecorderHandle handle,
+ RecordingLimitType type, int limit);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_recording_limit")]
+ internal static extern int GetRecordingLimit(StreamRecorderHandle handle, int type, out int format);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_samplerate")]
+ internal static extern StreamRecorderErrorCode SetAudioSampleRate(StreamRecorderHandle handle, int samplerate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_samplerate")]
+ internal static extern int GetAudioSampleRate(StreamRecorderHandle handle, out int samplerate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder_bitrate")]
+ internal static extern StreamRecorderErrorCode SetAudioEncoderBitrate(StreamRecorderHandle handle, int bitrate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder_bitrate")]
+ internal static extern int GetAudioEncoderBitrate(StreamRecorderHandle handle, out int bitrate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder_bitrate")]
+ internal static extern StreamRecorderErrorCode SetVideoEncoderBitRate(StreamRecorderHandle handle, int bitrate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder_bitrate")]
+ internal static extern int GetVideoEncoderBitrate(StreamRecorderHandle handle, out int bitrate);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_channel")]
+ internal static extern StreamRecorderErrorCode SetAudioChannel(StreamRecorderHandle handle, int channel);
+
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_channel")]
+ internal static extern int GetAudioChannel(StreamRecorderHandle handle, out int channel);
+ }
+}
{
internal static partial class StreamRecorder
{
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void RecordingLimitReachedCallback(StreamRecordingLimitType type, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void RecordingStatusCallback(ulong elapsedTime, ulong fileSize, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void NotifiedCallback(StreamRecorderState previous, StreamRecorderState current, StreamRecorderNotify notfication, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void RecorderErrorCallback(StreamRecorderErrorCode error, StreamRecorderState current, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate void BufferConsumedCallback(IntPtr buffer, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool VideoResolutionCallback(int width, int height, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool FileFormatCallback(StreamRecorderFileFormat format, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool AudioEncoderCallback(StreamRecorderAudioCodec codec, IntPtr userData);
-
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- internal delegate bool VideoEncoderCallback(StreamRecorderVideoCodec codec, IntPtr userData);
-
- /* begin of method */
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_create")]
- internal static extern int Create(out IntPtr handle);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_destroy")]
- internal static extern int Destroy(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Create(out StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_prepare")]
- internal static extern int Prepare(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Prepare(StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unprepare")]
- internal static extern int Unprepare(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Unprepare(StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_start")]
- internal static extern int Start(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Start(StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_pause")]
- internal static extern int Pause(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Pause(StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_commit")]
- internal static extern int Commit(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Commit(StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_cancel")]
- internal static extern int Cancel(IntPtr handle);
+ internal static extern StreamRecorderErrorCode Cancel(StreamRecorderHandle handle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_push_stream_buffer")]
- internal static extern int PushStreamBuffer(IntPtr handle, IntPtr/* media_packet_h */ inbuf);
+ internal static extern StreamRecorderErrorCode PushStreamBuffer(StreamRecorderHandle handle,
+ IntPtr mediaPacketHandle);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_enable_source_buffer")]
- internal static extern int EnableSourceBuffer(IntPtr handle, int type);
+ internal static extern StreamRecorderErrorCode EnableSourceBuffer(StreamRecorderHandle handle,
+ StreamRecorderSourceType type);
[DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_state")]
- internal static extern int GetState(IntPtr handle, out int state);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_filename")]
- internal static extern int SetFileName(IntPtr handle, string path);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_filename")]
- internal static extern int GetFileName(IntPtr handle, out IntPtr path);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_file_format")]
- internal static extern int SetFileFormat(IntPtr handle, int format);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_file_format")]
- internal static extern int GetFileFormat(IntPtr handle, out int format);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder")]
- internal static extern int SetAudioEncoder(IntPtr handle, int codec);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder")]
- internal static extern int GetAudioEncoder(IntPtr handle, out int codec);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder")]
- internal static extern int SetVideoEncoder(IntPtr handle, int codec);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder")]
- internal static extern int GetVideoEncoder(IntPtr handle, out int codec);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_resolution")]
- internal static extern int SetVideoResolution(IntPtr handle, int width, int height);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_resolution")]
- internal static extern int GetVideoResolution(IntPtr handle, out int width, out int height);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_framerate")]
- internal static extern int SetVideoFramerate(IntPtr handle, int framerate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_framerate")]
- internal static extern int GetVideoFramerate(IntPtr handle, out int framerate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_source_format")]
- internal static extern int SetVideoSourceFormat(IntPtr handle, int format);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_source_format")]
- internal static extern int GetVideoSourceFormat(IntPtr handle, out int format);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit")]
- internal static extern int SetRecordingLimit(IntPtr handle, int type, int limit);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_recording_limit")]
- internal static extern int GetRecordingLimit(IntPtr handle, int type, out int format);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_samplerate")]
- internal static extern int SetAudioSampleRate(IntPtr handle, int samplerate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_samplerate")]
- internal static extern int GetAudioSampleRate(IntPtr handle, out int samplerate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_encoder_bitrate")]
- internal static extern int SetAudioEncoderBitrate(IntPtr handle, int bitrate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_encoder_bitrate")]
- internal static extern int GetAudioEncoderBitrate(IntPtr handle, out int bitrate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_video_encoder_bitrate")]
- internal static extern int SetVideoEncoderBitrate(IntPtr handle, int bitrate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_video_encoder_bitrate")]
- internal static extern int GetVideoEncoderBitrate(IntPtr handle, out int bitrate);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_audio_channel")]
- internal static extern int SetAudioChannel(IntPtr handle, int channel);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_get_audio_channel")]
- internal static extern int GetAudioChannel(IntPtr handle, out int channel);
- /* End of method */
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_file_format")]
- internal static extern int FileFormats(IntPtr handle, FileFormatCallback callback, IntPtr userData);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_audio_encoder")]
- internal static extern int AudioEncoders(IntPtr handle, AudioEncoderCallback callback, IntPtr userData);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_encoder")]
- internal static extern int VideoEncoders(IntPtr handle, VideoEncoderCallback callback, IntPtr userData);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_foreach_supported_video_resolution")]
- internal static extern int VideoResolution(IntPtr handle, VideoResolutionCallback callback, IntPtr userData);
- /* End of foreach method */
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_notify_cb")]
- internal static extern int SetNotifiedCallback(IntPtr handle, NotifiedCallback callback, IntPtr userData);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_notify_cb")]
- internal static extern int UnsetNotifiedCallback(IntPtr handle);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_status_cb")]
- internal static extern int SetStatusChangedCallback(IntPtr handle, RecordingStatusCallback callback, IntPtr userData);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_status_cb")]
- internal static extern int UnsetStatusChangedCallback(IntPtr handle);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_recording_limit_reached_cb")]
- internal static extern int SetLimitReachedCallback(IntPtr handle, RecordingLimitReachedCallback callback, IntPtr userData);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_recording_limit_reached_cb")]
- internal static extern int UnsetLimitReachedCallback(IntPtr handle);
-
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_error_cb")]
- internal static extern int SetErrorCallback(IntPtr handle, RecorderErrorCallback callback, IntPtr userData);
+ internal static extern StreamRecorderErrorCode GetState(StreamRecorderHandle handle, out RecorderState state);
+ }
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_error_cb")]
- internal static extern int UnsetErrorCallback(IntPtr handle);
+ internal class StreamRecorderHandle : SafeHandle
+ {
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_destroy")]
+ private static extern StreamRecorderErrorCode Destroy(IntPtr handle);
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_set_buffer_consume_completed_cb")]
- internal static extern int SetBufferConsumedCallback(IntPtr handle, BufferConsumedCallback callback, IntPtr userDat);
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_cancel")]
+ private static extern StreamRecorderErrorCode Cancel(IntPtr handle);
- [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unset_buffer_consume_completed_cb")]
- internal static extern int UnsetBufferConsumedCallback(IntPtr handle);
+ [DllImport(Libraries.StreamRecorder, EntryPoint = "streamrecorder_unprepare")]
+ private static extern StreamRecorderErrorCode Unprepare(IntPtr handle);
+
+ protected StreamRecorderHandle() : base(IntPtr.Zero, true)
+ {
+ }
+
+ public override bool IsInvalid => handle == IntPtr.Zero;
+
+ protected override bool ReleaseHandle()
+ {
+ try
+ {
+ Cancel(handle).Ignore(StreamRecorderErrorCode.InvalidState).ThrowIfError("Failed to cancel.");
+ Unprepare(handle).Ignore(StreamRecorderErrorCode.InvalidState).ThrowIfError("Failed to unprepare.");
+ Destroy(handle).ThrowIfError("Failed to destory.");
+
+ return true;
+ }
+ catch (Exception e)
+ {
+ Tizen.Log.Debug(GetType().FullName, $"Failed to release native RecorderHandle; {e.Message}");
+
+ return false;
+ }
+ }
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+ public partial class StreamRecorder
+ {
+ internal void LoadCapabilities()
+ {
+ _videoCodecs = LoadVideoCodecs(this);
+ _audioCodecs = LoadAudioCodecs(this);
+ _fileFormats = LoadFileFormats(this);
+ _videoResolutions = LoadResolutions(this);
+ }
+
+ private static IEnumerable<RecorderVideoCodec> LoadVideoCodecs(StreamRecorder recorder)
+ {
+ var result = new List<RecorderVideoCodec>();
+ Native.VideoEncoderCallback callback = (codec, _) =>
+ {
+ result.Add(codec.ToRecorderEnum());
+ return true;
+ };
+
+ Native.VideoEncoders(recorder.Handle, callback).ThrowIfError("Failed to get the supported video codecs.");
+
+ return result.AsReadOnly();
+ }
+
+ private static IEnumerable<RecorderAudioCodec> LoadAudioCodecs(StreamRecorder recorder)
+ {
+ var result = new List<RecorderAudioCodec>();
+
+ Native.AudioEncoders(recorder.Handle, (codec, _) =>
+ {
+ result.Add(codec.ToRecorderEnum());
+ return true;
+ }).ThrowIfError("Failed to get the supported audio codecs.");
+
+ return result.AsReadOnly();
+ }
+
+ private static IEnumerable<RecorderFileFormat> LoadFileFormats(StreamRecorder recorder)
+ {
+ var result = new List<RecorderFileFormat>();
+
+ Native.FileFormats(recorder.Handle, (fileFormat, _) =>
+ {
+ result.Add(fileFormat.ToRecorderEnum());
+ return true;
+ }).ThrowIfError("Failed to get the supported file formats.");
+
+ return result.AsReadOnly();
+ }
+
+ private static IEnumerable<Size> LoadResolutions(StreamRecorder recorder)
+ {
+ List<Size> result = new List<Size>();
+
+ Native.VideoResolutionCallback callback = (width, height, _) =>
+ {
+ result.Add(new Size(width, height));
+ return true;
+ };
+
+ Native.VideoResolution(recorder.Handle, callback).
+ ThrowIfError("Failed to get the supported video resolutions.");
+
+ return result.AsReadOnly();
+ }
+
+ private IEnumerable<RecorderFileFormat> _fileFormats;
+
+ /// <summary>
+ /// Gets the file formats that the current device supports.
+ /// </summary>
+ /// <returns>An IEnumerable of <see cref="RecorderFileFormat"/> representing the supported file formats.</returns>
+ public IEnumerable<RecorderFileFormat> GetSupportedFileFormats() => _fileFormats;
+
+ private IEnumerable<RecorderAudioCodec> _audioCodecs;
+
+ /// <summary>
+ /// Gets the audio codecs that the current device supports.
+ /// </summary>
+ /// <returns>An IEnumerable of <see cref="RecorderAudioCodec"/> representing the supported audio codecs.</returns>
+ public IEnumerable<RecorderAudioCodec> GetSupportedAudioCodecs() => _audioCodecs;
+
+ private IEnumerable<RecorderVideoCodec> _videoCodecs;
+
+ /// <summary>
+ /// Gets the video codecs that the current device supports.
+ /// </summary>
+ /// <returns>An IEnumerable of <see cref="RecorderVideoCodec"/> representing the supported video codecs.</returns>
+ public IEnumerable<RecorderVideoCodec> GetSupportedVideoCodecs() => _videoCodecs;
+
+ private IEnumerable<Size> _videoResolutions;
+
+ /// <summary>
+ /// Gets the video resolutions that the current device supports.
+ /// </summary>
+ /// <returns>An IEnumerable of <see cref="Size"/> representing the supported resolutions.</returns>
+ public IEnumerable<Size> GetSupportedVideoResolutions() => _videoResolutions;
+
+ internal void ValidateFileFormat(RecorderFileFormat format)
+ {
+ if (_fileFormats.Contains(format) == false)
+ {
+ throw new NotSupportedException($"{format.ToString()} is not supported.");
+ }
+ }
+
+ internal void ValidateAudioCodec(RecorderAudioCodec codec)
+ {
+ if (_audioCodecs.Contains(codec) == false)
+ {
+ throw new NotSupportedException($"{codec.ToString()} is not supported.");
+ }
+ }
+
+ internal void ValidateVideoCodec(RecorderVideoCodec codec)
+ {
+ if (_videoCodecs.Contains(codec) == false)
+ {
+ throw new NotSupportedException($"{codec.ToString()} is not supported.");
+ }
+ }
+
+ internal void ValidateVideoResolution(Size resolution)
+ {
+ if (_videoResolutions.Contains(resolution) == false)
+ {
+ throw new NotSupportedException($"Resolution({resolution.ToString()}) is not supported.");
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+ public partial class StreamRecorder
+ {
+ /// <summary>
+ /// Occurs when <see cref="StreamRecorder"/> state is changed.
+ /// </summary>
+ public event EventHandler<StreamRecorderStateChangedEventArgs> StateChanged;
+
+
+ /// <summary>
+ /// Occurs when a buffer had consumed completely.
+ /// </summary>
+ public event EventHandler<StreamRecorderBufferConsumedEventArgs> BufferConsumed;
+
+ /// <summary>
+ /// Occurs when recording status is changed.
+ /// </summary>
+ public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged;
+
+ /// <summary>
+ /// Occurs when recording limit is reached.
+ /// </summary>
+ public event EventHandler<RecordingLimitReachedEventArgs> RecordingLimitReached;
+
+ /// <summary>
+ /// Occurs when an error occurred during a recorder operation.
+ /// </summary>
+ public event EventHandler<StreamRecorderErrorOccurredEventArgs> ErrorOccurred;
+
+ private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
+ private Native.RecorderErrorCallback _recorderErrorCallback;
+ private Native.RecordingStatusCallback _recordingStatusCallback;
+ private Native.BufferConsumedCallback _bufferConsumedCallback;
+ private Native.NotifiedCallback _notifiedCallback;
+
+ private void RegisterStreamRecorderNotifiedEvent()
+ {
+ _notifiedCallback = (previous, current, notify, _) =>
+ {
+ if (previous == 0)
+ {
+ return;
+ }
+
+ StateChanged?.Invoke(this, new StreamRecorderStateChangedEventArgs(
+ (RecorderState)previous, (RecorderState)current));
+ };
+
+ Native.SetNotifiedCallback(_handle, _notifiedCallback).
+ ThrowIfError("Failed to initialize state changed event.");
+ }
+
+ private void RegisterBufferConsumedEvent()
+ {
+ _bufferConsumedCallback = (lockedPacketHandle, _) =>
+ {
+ MediaPacket packet = null;
+
+ // Lock must be disposed here, note that the packet won't be disposed.
+ using (MediaPacket.Lock packetLock =
+ MediaPacket.Lock.FromHandle(lockedPacketHandle))
+ {
+ Debug.Assert(packetLock != null);
+
+ packet = packetLock.MediaPacket;
+ }
+
+ BufferConsumed?.Invoke(this, new StreamRecorderBufferConsumedEventArgs(packet));
+ };
+
+ Native.SetBufferConsumedCallback(_handle, _bufferConsumedCallback).
+ ThrowIfError("Failed to initialize buffer consumed event.");
+ }
+
+ private void RegisterRecordingStatusChangedEvent()
+ {
+ _recordingStatusCallback = (elapsedTime, fileSize, _) =>
+ {
+ RecordingStatusChanged?.Invoke(this, new RecordingStatusChangedEventArgs((long)elapsedTime, (long)fileSize));
+ };
+ Native.SetStatusChangedCallback(_handle, _recordingStatusCallback).
+ ThrowIfError("Failed to initialize status changed event.");
+ }
+
+ private void RegisterRecordingLimitReachedEvent()
+ {
+ _recordingLimitReachedCallback = (type, _) =>
+ {
+ RecordingLimitReached?.Invoke(this, new RecordingLimitReachedEventArgs(type));
+ };
+
+ Native.SetLimitReachedCallback(_handle, _recordingLimitReachedCallback).
+ ThrowIfError("Failed to initialize limit reached event.");
+ }
+
+ private void RegisterRecordingErrorOccurredEvent()
+ {
+ _recorderErrorCallback = (error, currentState, _) =>
+ {
+ ErrorOccurred?.Invoke(this, new StreamRecorderErrorOccurredEventArgs(
+ error == StreamRecorderErrorCode.OutOfStorage ?
+ StreamRecorderError.OutOfStorage : StreamRecorderError.InternalError, currentState));
+ };
+ Native.SetErrorCallback(_handle, _recorderErrorCallback).
+ ThrowIfError("Failed to set error callback");
+ }
+ }
+}
*/
using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using Tizen.Internals.Errors;
+using System.Diagnostics;
+using System.Linq;
+using NativeHandle = Interop.StreamRecorderHandle;
using Native = Interop.StreamRecorder;
namespace Tizen.Multimedia
{
- static internal class StreamRecorderLog
- {
- internal const string Tag = "Tizen.Multimedia.StreamRecorder";
- }
-
/// <summary>
- /// Provides methods to control stream recorder.
+ /// Provides the ability to record user buffer from application.
/// </summary>
- /// <remarks>
- /// StreamRecorder class provides functions to record raw image frame
- /// also provides recording start, stop and save the content etc.
- /// </remarks>
- public class StreamRecorder : IDisposable
+ /// <seealso cref="Recorder"/>
+ public partial class StreamRecorder : IDisposable
{
- private IntPtr _handle;
+ private NativeHandle _handle;
private bool _disposed = false;
- /// <summary>
- /// Occurred when recording is progressing for recording status.
- /// </summary>
- private EventHandler<RecordingStatusChangedEventArgs> _recordingStatusChanged;
- private Native.RecordingStatusCallback _recordingStatusCallback;
- /// <summary>
- /// Occurred when recording time or size reach limit.
- /// </summary>
- private EventHandler<StreamRecordingLimitReachedEventArgs> _recordingLimitReached;
- private Native.RecordingLimitReachedCallback _recordingLimitReachedCallback;
- /// <summary>
- /// Occurred when streamrecorder complete to use pushed buffer.
- /// </summary>
- private EventHandler<StreamRecordingBufferConsumedEventArgs> _bufferConsumed;
- private Native.BufferConsumedCallback _bufferConsumedCallback;
- /// <summary>
- /// Occurred when streamrecorder state is changed.
- /// </summary>
- private EventHandler<StreamRecorderNotifiedEventArgs> _recorderNotified;
- private Native.NotifiedCallback _notifiedCallback;
- /// <summary>
- /// Occurred when error is occured.
- /// </summary>
- private EventHandler<StreamRecordingErrorOccurredEventArgs> _recordingErrorOccurred;
- private Native.RecorderErrorCallback _recorderErrorCallback;
- private List<StreamRecorderFileFormat> _formats;
- private List<StreamRecorderAudioCodec> _audioCodec;
- private List<StreamRecorderVideoCodec> _videoCodec;
- private List<StreamRecorderVideoResolution> _resolutions;
- StreamRecorderVideoResolution _videoResolution = null;
+ private bool _audioEnabled;
+ private bool _videoEnabled;
+ private StreamRecorderVideoFormat _sourceFormat;
/// <summary>
- /// Stream recorder constructor.
+ /// Initialize a new instance of the <see cref="StreamRecorder"/> class.
/// </summary>
+ /// <exception cref="NotSupportedException">The feature is not supported.</exception>
public StreamRecorder()
{
- int ret = Native.Create(out _handle);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to create stream recorder");
- }
- _formats = new List<StreamRecorderFileFormat>();
- _audioCodec = new List<StreamRecorderAudioCodec>();
- _videoCodec = new List<StreamRecorderVideoCodec>();
- _resolutions = new List<StreamRecorderVideoResolution>();
- _videoResolution = new StreamRecorderVideoResolution(_handle);
- }
-
- /// <summary>
- /// Stream recorder destructor.
- /// </summary>
- ~StreamRecorder()
- {
- Dispose(false);
- }
-
- /// <summary>
- /// Event that occurs when streamrecorder state is changed.
- /// </summary>
- public event EventHandler<StreamRecorderNotifiedEventArgs> RecorderNotified
- {
- add
- {
- if (_recorderNotified == null)
- {
- RegisterStreamRecorderNotifiedEvent();
- }
- _recorderNotified += value;
- }
- remove
- {
- _recorderNotified -= value;
- if (_recorderNotified == null)
- {
- UnregisterStreamRecorderNotifiedEvent();
- }
- }
- }
-
- /// <summary>
- /// Event that occurs when buffer had comsumed completely.
- /// </summary>
- public event EventHandler<StreamRecordingBufferConsumedEventArgs> BufferConsumed
- {
- add
+ try
{
- if (_bufferConsumed == null)
- {
- RegisterBufferComsumedEvent();
- }
- _bufferConsumed += value;
+ Native.Create(out _handle).ThrowIfError("Failed to create stream recorder.");
}
- remove
+ catch (TypeLoadException)
{
- _bufferConsumed -= value;
- if (_bufferConsumed == null)
- {
- UnregisterBufferComsumedEvent();
- }
- }
- }
-
- /// <summary>
- /// Event that occurs when recording status changed.
- /// </summary>
- public event EventHandler<RecordingStatusChangedEventArgs> RecordingStatusChanged
- {
- add
- {
- if (_recordingStatusChanged == null)
- {
- RegisterRecordingStatusChangedEvent();
- }
- _recordingStatusChanged += value;
- }
- remove
- {
- _recordingStatusChanged -= value;
- if (_recordingStatusChanged == null)
- {
- UnregisterRecordingStatusChangedEvent();
- }
+ throw new NotSupportedException("StreamRecorder is not supported.");
}
- }
- /// <summary>
- /// Event that occurs when recording limit is reached.
- /// </summary>
- public event EventHandler<StreamRecordingLimitReachedEventArgs> RecordingLimitReached
- {
- add
- {
- if (_recordingLimitReached == null)
- {
- RegisterRecordingLimitReachedEvent();
- }
- _recordingLimitReached += value;
- }
- remove
- {
- _recordingLimitReached -= value;
- if (_recordingLimitReached == null)
- {
- UnregisterRecordingLimitReachedEvent();
- }
- }
- }
+ LoadCapabilities();
- /// <summary>
- /// Event that occurs when an error occured during recorder operation.
- /// </summary>
- public event EventHandler<StreamRecordingErrorOccurredEventArgs> RecordingErrorOccurred
- {
- add
- {
- if (_recordingErrorOccurred == null)
- {
- RegisterRecordingErrorOccurredEvent();
- }
- _recordingErrorOccurred += value;
- }
- remove
- {
- _recordingErrorOccurred -= value;
- if (_recordingErrorOccurred == null)
- {
- UnregisterRecordingErrorOccurredEvent();
- }
- }
+ RegisterStreamRecorderNotifiedEvent();
+ RegisterBufferConsumedEvent();
+ RegisterRecordingStatusChangedEvent();
+ RegisterRecordingErrorOccurredEvent();
+ RegisterRecordingLimitReachedEvent();
}
- /// <summary>
- /// The file path to record.
- /// </summary>
- /// <remarks>
- /// If the same file already exists in the file system, then old file
- /// will be overwritten.
- /// </remarks>
- public string FilePath
+ internal NativeHandle Handle
{
get
{
- IntPtr val;
- int ret = Native.GetFileName(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
+ if (_disposed)
{
- Log.Error(StreamRecorderLog.Tag, "Failed to get filepath, " + (StreamRecorderError)ret);
+ throw new ObjectDisposedException(nameof(StreamRecorder));
}
- string result = Marshal.PtrToStringAnsi(val);
- LibcSupport.Free(val);
- return result;
- }
- set
- {
- int ret = Native.SetFileName(_handle, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set filepath, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set filepath");
- }
- }
- }
-
- /// <summary>
- /// Get the current state of the stream recorder.
- /// </summary>
- /// <value> The current state of stream recorder.
- public StreamRecorderState State
- {
- get
- {
- int val = 0;
- int ret = Native.GetState(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get stream recorder state, " + (StreamRecorderError)ret);
- }
- return (StreamRecorderState)val;
+ return _handle;
}
}
/// <summary>
- /// Get/Set the file format for recording media stream.
+ /// Gets the current state of the stream recorder.
/// </summary>
- /// <remarks>
- /// Must set <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>.
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// </remarks>
- /// <exception cref="ArgumentException">The format does not valid.</exception>
- /// <seealso cref="SupportedFileFormats"/>
- public StreamRecorderFileFormat FileFormat
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
+ public RecorderState State
{
get
{
- int val = 0;
-
- int ret = Native.GetFileFormat(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get file format, " + (StreamRecorderError)ret);
- }
- return (StreamRecorderFileFormat)val;
- }
- set
- {
- int ret = Native.SetFileFormat(_handle, (int)value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set file format, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret);
- }
- }
- }
+ Native.GetState(Handle, out var val).ThrowIfError("Failed to get the stream recorder state.");
- /// <summary>
- /// The audio codec for encoding an audio stream.
- /// </summary>
- /// <remarks>
- /// Must set <see cref="StreamRecorderSourceType.Audio"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
- /// </remarks>
- /// <exception cref="ArgumentException">The codec does not valid.</exception>
- /// <seealso cref="SupportedAudioEncodings"/>
- public StreamRecorderAudioCodec AudioCodec
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetAudioEncoder(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get audio codec, " + (StreamRecorderError)ret);
- }
- return (StreamRecorderAudioCodec)val;
- }
- set
- {
- int ret = Native.SetAudioEncoder(_handle, (int)value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set audio codec, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret);
- }
- }
- }
-
- /// <summary>
- /// The video codec for encoding video stream.
- /// </summary>
- /// <remarks>
- /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
- /// </remarks>
- /// <exception cref="ArgumentException">The codec does not valid.</exception>
- /// <seealso cref="SupportedVideoEncodings"/>
- public StreamRecorderVideoCodec VideoCodec
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetVideoEncoder(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get video codec, " + (StreamRecorderError)ret);
- }
- return (StreamRecorderVideoCodec)val;
- }
- set
- {
- int ret = Native.SetVideoEncoder(_handle, (int)value);
-
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set video codec, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret);
- }
- }
- }
-
- /// <summary>
- /// The maximum size of a recording file in KB(kilobytes). If 0, means
- /// unlimited recording size.
- /// </summary>
- /// <remarks>
- /// After reaching the limitation, the data which is being recorded will
- /// be discarded and not written to the file.
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to below 0.</exception>
- /// <seealso cref="StreamRecordingLimitReachedEventArgs"/>
- public int SizeLimit
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetRecordingLimit(_handle, 1, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get size limit, " + (StreamRecorderError)ret);
- }
return val;
}
- set
- {
- int ret = Native.SetRecordingLimit(_handle, 1, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set sizelimit, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set size limit");
- }
- }
}
- /// <summary>
- /// The time limit of a recording file in Seconds. If 0, means unlimited recording
- /// time.
- /// </summary>
- /// <remarks>
- /// After reaching the limitation, the data which is being recorded will
- /// be discarded and not written to the file.
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to below 0.</exception>
- /// <seealso cref="StreamRecordingLimitReachedEventArgs"/>
- public int TimeLimit
+ private void ValidateState(params RecorderState[] required)
{
- get
- {
- int val = 0;
+ Debug.Assert(required.Length > 0);
- int ret = Native.GetRecordingLimit(_handle, 0, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get time limit, " + (StreamRecorderError)ret);
- }
- return val;
- }
- set
+ var curState = State;
+ if (!required.Contains(curState))
{
- int ret = Native.SetRecordingLimit(_handle, 0, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set timelimit, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set time limit");
- }
+ throw new InvalidOperationException($"The stream recorder is not in a valid state. " +
+ $"Current State : { curState }, Valid State : { string.Join(", ", required) }.");
}
}
+ #region Operation methods
/// <summary>
- /// The sampling rate of an audio stream in hertz.
+ /// Prepares the stream recorder with the specified options.
/// </summary>
- /// <remarks>
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// Must set <see cref="StreamRecorderSourceType.Audio"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>.
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to below 0.</exception>
- public int AudioSampleRate
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetAudioSampleRate(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get audio samplerate, " + (StreamRecorderError)ret);
- }
- return val;
- }
- set
- {
- int ret = Native.SetAudioSampleRate(_handle, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set audio samplerate, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set audio samplerate");
- }
- }
- }
-
- /// <summary>
- /// The bitrate of an audio encoder in bits per second.
- /// </summary>
- /// <remarks>
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// Must set <see cref="StreamRecorderSourceType.Audio"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to below 0.</exception>
- public int AudioBitRate
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetAudioEncoderBitrate(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get audio bitrate, " + (StreamRecorderError)ret);
- }
- return val;
- }
- set
- {
- int ret = Native.SetAudioEncoderBitrate(_handle, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set audio bitrate, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set audio bitrate");
- }
- }
- }
-
- /// <summary>
- /// The bitrate of an video encoder in bits per second.
- /// </summary>
- /// <remarks>
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to below 0.</exception>
- public int VideoBitRate
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetVideoEncoderBitrate(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get video bitrate, " + (StreamRecorderError)ret);
- }
- return val;
- }
- set
- {
- int ret = Native.SetVideoEncoderBitrate(_handle, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set video bitrate, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set video bitrate");
- }
- }
- }
-
- /// <summary>
- /// The video frame rate for recording media stream.
- /// </summary>
- /// <remarks>
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
- /// </remarks>
- /// <exception cref="NotSupportedException">The value set to below 0.</exception>
- public int VideoFrameRate
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetVideoFramerate(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get video framerate, " + (StreamRecorderError)ret);
- }
- return val;
- }
- set
- {
- int ret = Native.SetVideoFramerate(_handle, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set video framerate, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret);
- }
- }
- }
-
- /// <summary>
- /// Get or Set the video source format for recording media stream.
- /// </summary>
- /// <exception cref="ArgumentException">The value set to a invalid value.</exception>
- /// <seealso cref="StreamRecorderVideoSourceFormat"/>
- public StreamRecorderVideoSourceFormat VideoSourceFormat
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetVideoSourceFormat(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get video framerate, " + (StreamRecorderError)ret);
- }
- return (StreamRecorderVideoSourceFormat)val;
- }
- set
- {
- int ret = Native.SetVideoSourceFormat(_handle, (int)value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set video framerate, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret);
- }
- }
- }
-
- /// <summary>
- /// The number of audio channel.
- /// </summary>
- /// <remarks>
- /// The attribute is applied only in Created state.
- /// For mono recording, set channel to 1.
- /// For stereo recording, set channel to 2.
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to a invalid value.</exception>
- public int AudioChannel
- {
- get
- {
- int val = 0;
-
- int ret = Native.GetAudioChannel(_handle, out val);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to get audio channel, " + (StreamRecorderError)ret);
- }
- return val;
- }
- set
- {
- int ret = Native.SetAudioChannel(_handle, value);
- if ((StreamRecorderError)ret != StreamRecorderError.None)
- {
- Log.Error(StreamRecorderLog.Tag, "Failed to set audio channel, " + (StreamRecorderError)ret);
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set audio channel");
- }
- }
- }
-
- /// <summary>
- /// Video resolution of the video recording.
- /// </summary>
- /// <remarks>
- /// Must set <see cref="StreamRecorderSourceType.Video"/> or <see cref="StreamRecorderSourceType.VideoAudio"/>
- /// by <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>
- /// The recorder state must be <see cref="StreamRecorderState.Created"/> state.
- /// </remarks>
- /// <exception cref="ArgumentException">The value set to a invalid value.</exception>
- /// <seealso cref="SupportedVideoResolutions"/>
- public StreamRecorderVideoResolution Resolution
+ /// <remarks>The recorder must be <see cref="RecorderState.Idle"/>.</remarks>
+ /// <param name="options">The options for recording.</param>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ArgumentException">Both <see cref="StreamRecorderOptions.Audio"/> and
+ /// <see cref="StreamRecorderOptions.Video"/> are null.
+ /// </exception>
+ /// <exception cref="NotSupportedException"><paramref name="options"/> contains a value which is not supported.</exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
+ /// <seealso cref="Unprepare"/>
+ /// <seealso cref="Start"/>
+ /// <seealso cref="StreamRecorderOptions"/>
+ /// <seealso cref="StreamRecorderAudioOptions"/>
+ /// <seealso cref="StreamRecorderVideoOptions"/>
+ public void Prepare(StreamRecorderOptions options)
{
- get
+ if (options == null)
{
- return _videoResolution;
+ throw new ArgumentNullException(nameof(options));
}
- }
- /// <summary>
- /// Retrieves all the file formats supported by the stream recorder.
- /// </summary>
- /// <returns>
- /// It returns a list containing all the supported file
- /// formats by Stream recorder.
- /// </returns>
- /// <seealso cref="StreamRecorderFileFormat"/>
- public IEnumerable<StreamRecorderFileFormat> SupportedFileFormats
- {
- get
- {
- if (_formats.Count == 0)
- {
- Native.FileFormatCallback callback = (StreamRecorderFileFormat format, IntPtr userData) =>
- {
- _formats.Add(format);
- return true;
- };
- int ret = Native.FileFormats(_handle, callback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported fileformats");
- }
- }
- return _formats;
- }
- }
+ ValidateState(RecorderState.Idle);
- /// <summary>
- /// Retrieves all the audio encoders supported by the recorder.
- /// </summary>
- /// <returns>
- /// It returns a list containing all the supported audio encoders
- /// by recorder.
- /// </returns>
- /// <seealso cref="StreamRecorderAudioCodec"/>
- public IEnumerable<StreamRecorderAudioCodec> SupportedAudioEncodings
- {
- get
- {
- if (_audioCodec.Count == 0)
- {
- Native.AudioEncoderCallback callback = (StreamRecorderAudioCodec codec, IntPtr userData) =>
- {
- _audioCodec.Add(codec);
- return true;
- };
- int ret = Native.AudioEncoders(_handle, callback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported audio encoders");
- }
- }
- return _audioCodec;
- }
- }
+ options.Apply(this);
- /// <summary>
- /// Retrieves all the video encoders supported by the recorder.
- /// </summary>
- /// <returns>
- /// It returns a list containing all the supported video encoders
- /// by recorder.
- /// </returns>
- /// <seealso cref="StreamRecorderVideoCodec"/>
- public IEnumerable<StreamRecorderVideoCodec> SupportedVideoEncodings
- {
- get
- {
- if (_videoCodec.Count == 0)
- {
- Native.VideoEncoderCallback callback = (StreamRecorderVideoCodec codec, IntPtr userData) =>
- {
- _videoCodec.Add(codec);
- return true;
- };
- int ret = Native.VideoEncoders(_handle, callback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported video encoders");
- }
- }
- return _videoCodec;
- }
- }
+ Native.Prepare(Handle).ThrowIfError("Failed to prepare stream recorder.");
- /// <summary>
- /// Retrieves all the video resolutions supported by the recorder.
- /// </summary>
- /// <returns>
- /// It returns videoresolution list containing the width and height of
- /// different resolutions supported by recorder.
- /// </returns>
- /// <seealso cref="StreamRecorderVideoResolution"/>
- public IEnumerable<StreamRecorderVideoResolution> SupportedVideoResolutions
- {
- get
- {
- if (_resolutions.Count == 0)
- {
- Native.VideoResolutionCallback callback = (int width, int height, IntPtr userData) =>
- {
- StreamRecorderVideoResolution temp = new StreamRecorderVideoResolution(width, height);
- _resolutions.Add(temp);
- return true;
- };
- int ret = Native.VideoResolution(_handle, callback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to get the supported video resolutions");
- }
- }
- return _resolutions;
- }
- }
+ _audioEnabled = options.Audio != null;
+ _videoEnabled = options.Video != null;
- /// <summary>
- /// Prepare the stream recorder.
- /// </summary>
- /// <remarks>
- /// Before calling the function, it is required to set <see cref="StreamRecorder.EnableSourceBuffer(StreamRecorderSourceType)"/>,
- /// <see cref="StreamRecorderAudioCodec"/>, <see cref="StreamRecorderVideoCodec"/> and <see cref="StreamRecorderFileFormat"/> properties of recorder.
- /// </remarks>
- /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- /// <seealso cref="Unprepare"/>
- public void Prepare()
- {
- int ret = Native.Prepare(_handle);
- if (ret != (int)StreamRecorderError.None)
+ if (options.Video != null)
{
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to prepare stream recorder");
+ _sourceFormat = options.Video.SourceFormat;
}
}
/// <summary>
- /// Resets the stream recorder.
+ /// Unprepares the stream recorder.
/// </summary>
/// <remarks>
- /// The recorder state must be <see cref="StreamRecorderState.Prepared"/> state by <see cref="Prepare"/>, <see cref="Cancel"/> and <see cref="Commit"/>.
- /// The StreamRecorder state will be <see cref="StreamRecorderState.Created"/>.
+ /// The recorder state must be <see cref="RecorderState.Ready"/> state by
+ /// <see cref="Prepare(StreamRecorderOptions)"/>, <see cref="Cancel"/> and <see cref="Commit"/>.\n
+ /// The recorder state will be <see cref="RecorderState.Idle"/>.\n
+ /// \n
+ /// It has no effect if the recorder is already in the <see cref="RecorderState.Idle"/> state.
/// </remarks>
- /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
/// <seealso cref="Prepare"/>
public void Unprepare()
{
- int ret = Native.Unprepare(_handle);
- if (ret != (int)StreamRecorderError.None)
+ if (State == RecorderState.Idle)
{
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to reset the stream recorder");
+ return;
}
+
+ ValidateState(RecorderState.Ready);
+
+ Native.Unprepare(Handle).ThrowIfError("Failed to reset the stream recorder.");
}
/// <summary>
- /// Starts the recording.
+ /// Starts recording.
/// </summary>
/// <remarks>
- /// If file path has been set to an existing file, this file is removed automatically and updated by new one.
- /// The filename should be set before this function is invoked.
- /// The recorder state must be <see cref="StreamRecorderState.Prepared"/> state by <see cref="Prepare"/> or
- /// <see cref="StreamRecorderState.Paused"/> state by <see cref="Pause"/>.
- /// The filename shuild be set by <see cref="FilePath"/>
+ /// The recorder state must be <see cref="RecorderState.Ready"/> state by
+ /// <see cref="Prepare(StreamRecorderOptions)"/> or
+ /// <see cref="RecorderState.Paused"/> state by <see cref="Pause"/>.\n
+ /// \n
+ /// It has no effect if the recorder is already in the <see cref="RecorderState.Recording"/> state.
/// </remarks>
- /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- /// <exception cref="UnauthorizedAccessException">The access ot the resources can not be granted.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="UnauthorizedAccessException">The access of the resources can not be granted.</exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
/// <seealso cref="Pause"/>
/// <seealso cref="Commit"/>
/// <seealso cref="Cancel"/>
- /// <seealso cref="FilePath"/>
- /// <seealso cref="FileFormat"/>
public void Start()
{
- int ret = Native.Start(_handle);
- if (ret != (int)StreamRecorderError.None)
+ if (State == RecorderState.Recording)
{
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to start the stream recorder");
+ return;
}
+
+ ValidateState(RecorderState.Ready, RecorderState.Paused);
+
+ Native.Start(Handle).ThrowIfError("Failed to start the stream recorder.");
}
/// <summary>
- /// Pause the recording.
+ /// Pauses recording.
/// </summary>
/// <remarks>
- /// Recording can be resumed with <see cref="Start"/>.
+ /// Recording can be resumed with <see cref="Start"/>.\n
+ /// \n
+ /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/> \n
+ /// \n
+ /// It has no effect if the recorder is already in the <see cref="RecorderState.Paused"/> state.
/// </remarks>
- /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
/// <seealso cref="Start"/>
/// <seealso cref="Commit"/>
/// <seealso cref="Cancel"/>
public void Pause()
{
- int ret = Native.Pause(_handle);
- if (ret != (int)StreamRecorderError.None)
+ if (State == RecorderState.Paused)
{
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to pause the stream recorder");
+ return;
}
+
+ ValidateState(RecorderState.Recording);
+
+ Native.Pause(Handle).ThrowIfError("Failed to pause the stream recorder.");
}
/// <summary>
/// Stops recording and saves the result.
/// </summary>
/// <remarks>
- /// The recorder state must be <see cref="StreamRecorderState.Recording"/> state by <see cref="Start"/> or
- /// <see cref="StreamRecorderState.Paused"/> state by <see cref="Pause"/>
- /// When you want to record audio or video file, you need to add privilege according to rules below additionally.
+ /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/> or
+ /// <see cref="RecorderState.Paused"/> state by <see cref="Pause"/>.\n
+ /// \n
+ /// The recorder state will be <see cref="RecorderState.Ready"/> after commit.\n
/// <para>
- /// http://tizen.org/privilege/mediastorage is needed if input or output path are relevant to media storage.
- /// http://tizen.org/privilege/externalstorage is needed if input or output path are relevant to external storage.
+ /// http://tizen.org/privilege/mediastorage is needed if the save path are relevant to media storage.
+ /// http://tizen.org/privilege/externalstorage is needed if the save path are relevant to external storage.
/// </para>
/// </remarks>
- /// <exception cref="InvalidOperationException">The streamrecorder is not in the valid state.</exception>
- /// <exception cref="UnauthorizedAccessException">The access ot the resources can not be granted.</exception>
+ /// <privilege>http://tizen.org/privilege/mediastorage</privilege>
+ /// <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="UnauthorizedAccessException">The access to the resources can not be granted.</exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
/// <seealso cref="Start"/>
/// <seealso cref="Pause"/>
public void Commit()
{
- int ret = Native.Commit(_handle);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to save the recorded content");
- }
+ ValidateState(RecorderState.Paused, RecorderState.Recording);
+
+ Native.Commit(Handle).ThrowIfError("Failed to commit.");
}
/// <summary>
- /// Cancels the recording.
- /// The recording data is discarded and not written in the recording file.
+ /// Cancels recording.
+ /// The recording data is discarded and not written.
/// </summary>
+ /// <remarks>
+ /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/> or
+ /// <see cref="RecorderState.Paused"/> state by <see cref="Pause"/>.
+ /// </remarks>
+ /// <exception cref="InvalidOperationException">The recorder is not in the valid state.</exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
/// <seealso cref="Start"/>
/// <seealso cref="Pause"/>
public void Cancel()
{
- int ret = Native.Cancel(_handle);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to cancel the recording");
- }
- }
-
- /// <summary>
- /// Push stream buffer as recording raw data.
- /// </summary>
- public void PushBuffer(MediaPacket packet)
- {
- IntPtr _packet_h = packet.GetHandle();
+ ValidateState(RecorderState.Paused, RecorderState.Recording);
- Log.Info("Tizen.Multimedia.StreamRecorder", "PUSH stream buffer");
- int ret = Native.PushStreamBuffer(_handle, _packet_h);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to push buffer");
- }
- Log.Info("Tizen.Multimedia.StreamRecorder", "PUSH stream buffer END");
+ Native.Cancel(Handle).ThrowIfError("Failed to cancel recording.");
}
- /// <summary>
- /// Set the source type of pushed data.
- /// </summary>
- public void EnableSourceBuffer(StreamRecorderSourceType type)
+ private static bool AreVideoTypesMatched(StreamRecorderVideoFormat videoFormat, MediaFormatVideoMimeType mimeType)
{
- int ret = Native.EnableSourceBuffer(_handle, (int)type);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Failed to set EnableSourceBuffer");
- }
+ return (videoFormat == StreamRecorderVideoFormat.Nv12 && mimeType == MediaFormatVideoMimeType.NV12) ||
+ (videoFormat == StreamRecorderVideoFormat.Nv21 && mimeType == MediaFormatVideoMimeType.NV21) ||
+ (videoFormat == StreamRecorderVideoFormat.I420 && mimeType == MediaFormatVideoMimeType.I420);
}
/// <summary>
- /// Release any unmanaged resources used by this object.
+ /// Pushes a packet as recording raw data.
/// </summary>
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- protected virtual void Dispose(bool disposing)
+ /// <param name="packet">An audio or video packet to record.</param>
+ /// <remarks>
+ /// The recorder state must be <see cref="RecorderState.Recording"/> state by <see cref="Start"/>.
+ /// </remarks>
+ /// <exception cref="InvalidOperationException">
+ /// The recorder is not in the valid state.\n
+ /// -or-\n
+ /// <paramref name="packet"/> is an audio packet but audio recording is not enabled(See <see cref="StreamRecorderOptions.Audio"/>).\n
+ /// -or-\n
+ /// <paramref name="packet"/> is a video packet but video recording is not enabled(See <see cref="StreamRecorderOptions.Video"/>).\n
+ /// -or-\n
+ /// <paramref name="packet"/> is a video packet but the <see cref="VideoMediaFormat.MimeType"/> does not match the video source format.\n
+ /// -or-\n
+ /// An internal error occurs.
+ /// </exception>
+ /// <exception cref="ObjectDisposedException">The <see cref="StreamRecorder"/> has already been disposed.</exception>
+ /// <see cref="Prepare(StreamRecorderOptions)"/>
+ /// <seealso cref="StreamRecorderOptions.Audio"/>
+ /// <seealso cref="StreamRecorderOptions.Video"/>
+ /// <seealso cref="StreamRecorderVideoOptions.SourceFormat"/>
+ public void PushBuffer(MediaPacket packet)
{
- if (!_disposed)
+ if (packet == null)
{
- if (disposing)
- {
- // to be used if there are any other disposable objects
- }
- if (_handle != IntPtr.Zero)
- {
- Native.Destroy(_handle);
- _handle = IntPtr.Zero;
- }
- _disposed = true;
+ throw new ArgumentNullException(nameof(packet));
}
- }
- private void RegisterStreamRecorderNotifiedEvent()
- {
- _notifiedCallback = (StreamRecorderState previous, StreamRecorderState current, StreamRecorderNotify notify, IntPtr userData) =>
- {
- StreamRecorderNotifiedEventArgs eventArgs = new StreamRecorderNotifiedEventArgs(previous, current, notify);
- _recorderNotified?.Invoke(this, eventArgs);
- };
- int ret = Native.SetNotifiedCallback(_handle, _notifiedCallback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Setting notify callback failed");
- }
- }
+ ValidateState(RecorderState.Recording);
- private void UnregisterStreamRecorderNotifiedEvent()
- {
- int ret = Native.UnsetNotifiedCallback(_handle);
- if (ret != (int)StreamRecorderError.None)
+ switch (packet.Format.Type)
{
- StreamRecorderErrorFactory.ThrowException(ret, "Unsetting notify callback failed");
- }
- }
+ case MediaFormatType.Audio:
+ if (_audioEnabled == false)
+ {
+ throw new InvalidOperationException("Audio option is not set.");
+ }
+ break;
- private void RegisterBufferComsumedEvent()
- {
- _bufferConsumedCallback = (IntPtr buffer, IntPtr userData) =>
- {
- StreamRecordingBufferConsumedEventArgs eventArgs = new StreamRecordingBufferConsumedEventArgs(buffer);
- _bufferConsumed?.Invoke(this, eventArgs);
- };
- int ret = Native.SetBufferConsumedCallback(_handle, _bufferConsumedCallback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Setting buffer consumed callback failed");
- }
- }
+ case MediaFormatType.Video:
+ if (_videoEnabled == false)
+ {
+ throw new InvalidOperationException("Video option is not set.");
+ }
- private void UnregisterBufferComsumedEvent()
- {
- int ret = Native.UnsetBufferConsumedCallback(_handle);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Unsetting buffer consumed callback failed");
- }
- }
+ if (AreVideoTypesMatched(_sourceFormat, (packet.Format as VideoMediaFormat).MimeType) == false)
+ {
+ throw new InvalidOperationException("Video format does not match.");
+ }
- private void RegisterRecordingStatusChangedEvent()
- {
- _recordingStatusCallback = (ulong elapsedTime, ulong fileSize, IntPtr userData) =>
- {
- RecordingStatusChangedEventArgs eventArgs = new RecordingStatusChangedEventArgs((long)elapsedTime, (long)fileSize);
- _recordingStatusChanged?.Invoke(this, eventArgs);
- };
- int ret = Native.SetStatusChangedCallback(_handle, _recordingStatusCallback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Setting status changed callback failed");
- }
- }
+ break;
- private void UnregisterRecordingStatusChangedEvent()
- {
- int ret = Native.UnsetStatusChangedCallback(_handle);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Unsetting status changed callback failed");
+ default:
+ throw new ArgumentException("Packet is not valid.");
}
- }
- private void RegisterRecordingLimitReachedEvent()
- {
- _recordingLimitReachedCallback = (StreamRecordingLimitType type, IntPtr userData) =>
- {
- StreamRecordingLimitReachedEventArgs eventArgs = new StreamRecordingLimitReachedEventArgs(type);
- _recordingLimitReached?.Invoke(this, eventArgs);
- };
- int ret = Native.SetLimitReachedCallback(_handle, _recordingLimitReachedCallback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Setting limit reached callback failed");
- }
+ Native.PushStreamBuffer(Handle, MediaPacket.Lock.Get(packet).GetHandle())
+ .ThrowIfError("Failed to push buffer.");
}
- private void UnregisterRecordingLimitReachedEvent()
- {
- int ret = Native.UnsetLimitReachedCallback(_handle);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Unsetting limit reached callback failed");
- }
- }
+ #endregion
- private void RegisterRecordingErrorOccurredEvent()
+ #region Dispose support
+ /// <summary>
+ /// Release any unmanaged resources used by this object.
+ /// </summary>
+ public void Dispose()
{
- _recorderErrorCallback = (StreamRecorderErrorCode error, StreamRecorderState current, IntPtr userData) =>
- {
- StreamRecordingErrorOccurredEventArgs eventArgs = new StreamRecordingErrorOccurredEventArgs(error, current);
- _recordingErrorOccurred?.Invoke(this, eventArgs);
- };
- int ret = Native.SetErrorCallback(_handle, _recorderErrorCallback, IntPtr.Zero);
- if (ret != (int)StreamRecorderError.None)
- {
- StreamRecorderErrorFactory.ThrowException(ret, "Setting Error callback failed");
- }
+ Dispose(true);
}
- private void UnregisterRecordingErrorOccurredEvent()
+ /// <summary>
+ /// Releases the resources used by the StreamRecorder.
+ /// </summary>
+ /// <param name="disposing">
+ /// true to release both managed and unmanaged resources; false to release only unmanaged resources.
+ /// </param>
+ protected virtual void Dispose(bool disposing)
{
- int ret = Native.UnsetErrorCallback(_handle);
- if (ret != (int)StreamRecorderError.None)
+ if (!_disposed)
{
- StreamRecorderErrorFactory.ThrowException(ret, "Unsetting Error callback failed");
+ _handle?.Dispose();
+
+ _disposed = true;
}
}
+ #endregion
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Specifies the options associated with audio recording.
+ /// </summary>
+ /// <seealso cref="StreamRecorder"/>
+ /// <seealso cref="StreamRecorderOptions"/>
+ /// <seealso cref="StreamRecorderVideoOptions"/>
+ public class StreamRecorderAudioOptions
+ {
+ private const int DefaultSampleRate = 0;
+ private const int DefaultBitRate = 128000;
+ private const int DefaultChannels = 2;
+
+ /// <summary>
+ /// Initialize a new instance of the <see cref="StreamRecorderAudioOptions"/> class with the specified codec.
+ /// </summary>
+ /// <param name="codec">The <see cref="RecorderAudioCodec"/> for encoding audio stream.</param>
+ /// <remarks>
+ /// <see cref="SampleRate"/>, <see cref="BitRate"/> and <see cref="Channels"/> will be set as default.
+ /// </remarks>
+ /// <exception cref="ArgumentException"><paramref name="codec"/> is not valid.</exception>
+ public StreamRecorderAudioOptions(RecorderAudioCodec codec) :
+ this(codec, DefaultSampleRate, DefaultBitRate, DefaultChannels)
+ {
+ }
+
+ /// <summary>
+ /// Initialize a new instance of the <see cref="StreamRecorderAudioOptions"/> class with the specified
+ /// codec, sample rate, bit rate and channel value.
+ /// </summary>
+ /// <param name="codec">The <see cref="RecorderAudioCodec"/> for encoding audio stream.</param>
+ /// <param name="sampleRate">The sample rate for encoding audio stream.</param>
+ /// <param name="bitRate">The bit rate for encoding audio stream.</param>
+ /// <param name="channels">The number of channels for encoding audio stream.</param>
+ /// <exception cref="ArgumentException"><paramref name="codec"/> is not valid.</exception>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// <paramref name="sampleRate"/> is less than zero.\n
+ /// -or-\n
+ /// <paramref name="bitRate"/> is less than or equal to zero.\n
+ /// -or-\n
+ /// <paramref name="channels"/> is less than or equal to zero.
+ /// </exception>
+ public StreamRecorderAudioOptions(RecorderAudioCodec codec, int sampleRate, int bitRate, int channels)
+ {
+ Codec = codec;
+ SampleRate = sampleRate;
+ BitRate = bitRate;
+ Channels = channels;
+ }
+
+ private RecorderAudioCodec _codec;
+
+ /// <summary>
+ /// Gets or sets the audio codec for encoding an audio stream.
+ /// </summary>
+ /// <value>The codec for audio stream recording.</value>
+ /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+ /// <seealso cref="StreamRecorder.GetSupportedAudioCodecs"/>
+ public RecorderAudioCodec Codec
+ {
+ get => _codec;
+ set
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderAudioCodec), value, nameof(value));
+
+ _codec = value;
+ }
+ }
+
+ private int _sampleRate;
+
+ /// <summary>
+ /// Gets or sets the sampling rate of the audio stream in hertz.
+ /// </summary>
+ /// <remarks>If the value is zero, the sample rate will be decided based on input buffers.</remarks>
+ /// <value>The sample rate value for stream recorder. The default is zero.</value>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ public int SampleRate
+ {
+ get => _sampleRate;
+ set
+ {
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Sample rate can't be less than or equal to zero.");
+ }
+
+ _sampleRate = value;
+ }
+ }
+
+ private int _bitRate;
+
+ /// <summary>
+ /// Gets or sets the bit rate of the audio encoder in bits per second.
+ /// </summary>
+ /// <value>The bit rate value for audio stream recording. The default is 128000.</value>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ public int BitRate
+ {
+ get => _bitRate;
+ set
+ {
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Bit rate can't be less than or equal to zero.");
+ }
+
+ _bitRate = value;
+ }
+ }
+
+ private int _channels;
+
+ /// <summary>
+ /// Gets or sets the number of audio channels.
+ /// </summary>
+ /// <value>The number of audio channels for audio stream recording. The default is 2.</value>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ public int Channels
+ {
+ get => _channels;
+ set
+ {
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Channels can't be less than or equal to zero.");
+ }
+
+ _channels = value;
+ }
+ }
+
+ internal void Apply(StreamRecorder recorder)
+ {
+ recorder.ValidateAudioCodec(Codec);
+
+ Native.SetAudioEncoder(recorder.Handle, Codec.ToStreamRecorderEnum()).
+ ThrowIfError("Failed to set audio codec.");
+
+ Native.SetAudioSampleRate(recorder.Handle, SampleRate).
+ ThrowIfError("Failed to set audio sample rate.");
+
+ Native.SetAudioEncoderBitrate(recorder.Handle, BitRate).
+ ThrowIfError("Failed to set audio bit rate.");
+
+ Native.SetAudioChannel(recorder.Handle, Channels).
+ ThrowIfError("Failed to set audio channels.");
+ }
+ }
+
+}
namespace Tizen.Multimedia
{
+
/// <summary>
- /// An extended EventArgs.
+ /// Provides data for the <see cref="StreamRecorder.BufferConsumed"/> event.
/// </summary>
- public class StreamRecordingBufferConsumedEventArgs : EventArgs
+ public class StreamRecorderBufferConsumedEventArgs : EventArgs
{
- private IntPtr _buffer = IntPtr.Zero;
-
- internal StreamRecordingBufferConsumedEventArgs(IntPtr buffer)
+ internal StreamRecorderBufferConsumedEventArgs(MediaPacket packet)
{
- _buffer = buffer;
+ Packet = packet;
}
/// <summary>
- /// Consumed buffer.
+ /// Gets the packet that has consumed.
/// </summary>
- public IntPtr Buffer {
- get {
- return _buffer;
- }
- }
+ public MediaPacket Packet { get; }
}
}
* limitations under the License.
*/
+using System;
+using System.Diagnostics;
+
namespace Tizen.Multimedia
{
+
+ /// <summary>
+ /// Specifies errors for <see cref="StreamRecorder"/>/
+ /// </summary>
+ public enum StreamRecorderError
+ {
+ /// <summary>
+ /// Internal error.
+ /// </summary>
+ InternalError = StreamRecorderErrorCode.InvalidOperation,
+ /// <summary>
+ /// Out of storage.
+ /// </summary>
+ OutOfStorage = StreamRecorderErrorCode.OutOfStorage
+ }
+
+ /// <summary>
+ /// Specifies the video source formats for <see cref="StreamRecorder"/>.
+ /// </summary>
+ public enum StreamRecorderVideoFormat
+ {
+ /// <summary>
+ /// Nv12 format.
+ /// </summary>
+ Nv12,
+ /// <summary>
+ /// Nv21 format.
+ /// </summary>
+ Nv21,
+ /// <summary>
+ /// I420 format.
+ /// </summary>
+ I420
+ }
+
+ #region Internal enums
+
/// <summary>
/// Enumeration for Audio Codec.
/// </summary>
- public enum StreamRecorderAudioCodec
+ internal enum StreamRecorderAudioCodec
{
/// <summary>
/// AMR codec.
/// <summary>
/// Enumeration for the file container format.
/// </summary>
- public enum StreamRecorderFileFormat
+ internal enum StreamRecorderFileFormat
{
/// <summary>
/// 3GP file format.
/// <summary>
/// Enumeration for the recorder notify type.
/// </summary>
- public enum StreamRecorderNotify
+ internal enum StreamRecorderNotify
{
/// <summary>
/// None.
/// </summary>
None = 0,
/// <summary>
- /// State changed noti.
+ /// State changed.
/// </summary>
StateChanged
}
/// <summary>
- /// Enumeration for the recording limit type.
- /// </summary>
- public enum StreamRecordingLimitType
- {
- /// <summary>
- /// Time limit in seconds of recording file
- /// </summary>
- Time,
- /// <summary>
- /// Size limit in KB(KiloBytes) of recording file.
- /// </summary>
- Size
- }
-
- /// <summary>
- /// Enumeration for stream recorder states.
- /// </summary>
- public enum StreamRecorderState
- {
- /// <summary>
- /// Stream recorder is not created.
- /// </summary>
- None,
- /// <summary>
- /// Stream recorder is created, but not prepared.
- /// </summary>
- Created,
- /// <summary>
- /// Stream recorder is ready to record.
- /// </summary>
- Prepared,
- /// <summary>
- /// Stream recorder is recording pushed packet.
- /// </summary>
- Recording,
- /// <summary>
- /// Stream recorder is paused.
- /// </summary>
- Paused
- }
-
- /// <summary>
/// Enumeration for video codec.
/// </summary>
- public enum StreamRecorderVideoCodec
+ internal enum StreamRecorderVideoCodec
{
/// <summary>
/// H263 codec.
/// <summary>
/// Enumeration for source type.
/// </summary>
- public enum StreamRecorderSourceType
+ internal enum StreamRecorderSourceType
{
/// <summary>
/// Video source
VideoAudio
}
- /// <summary>
- /// Enumeration for video source format.
- /// </summary>
- public enum StreamRecorderVideoSourceFormat
+ internal static class StreamRecorderEnumExtensions
{
- /// <summary>
- /// Nv12 Video source format
- /// </summary>
- Nv12,
- /// <summary>
- /// Nv21 video source format
- /// </summary>
- Nv21,
- /// <summary>
- /// I420 video source format
- /// </summary>
- I420
- }
+ internal static RecorderVideoCodec ToRecorderEnum(this StreamRecorderVideoCodec value)
+ {
+ switch (value)
+ {
+ case StreamRecorderVideoCodec.H263:
+ return RecorderVideoCodec.H263;
- /// <summary>
- /// Enumeration for stream recorder failure error.
- /// </summary>
- public enum StreamRecorderErrorCode
- {
- /// <summary>
- /// Sucessful.
- /// </summary>
- None = StreamRecorderError.None,
- /// <summary>
- /// Internal error.
- /// </summary>
- InvalidParameter = StreamRecorderError.InvalidParameter,
- /// <summary>
- /// Internal error.
- /// </summary>
- InvalidOperation = StreamRecorderError.InvalidOperation,
- /// <summary>
- /// Out of memory.
- /// </summary>
- OutOfMemory = StreamRecorderError.OutOfMemory
+ case StreamRecorderVideoCodec.Mpeg4:
+ return RecorderVideoCodec.Mpeg4;
+ }
+
+ Debug.Fail("Unknown video codec value.");
+ return 0;
+ }
+
+ internal static StreamRecorderVideoCodec ToStreamRecorderEnum(this RecorderVideoCodec value)
+ {
+ switch (value)
+ {
+ case RecorderVideoCodec.H263:
+ return StreamRecorderVideoCodec.H263;
+
+ case RecorderVideoCodec.Mpeg4:
+ return StreamRecorderVideoCodec.Mpeg4;
+ }
+
+ throw new NotSupportedException($"{value.ToString()} is not supported.");
+ }
+
+
+ internal static RecorderAudioCodec ToRecorderEnum(this StreamRecorderAudioCodec value)
+ {
+ switch (value)
+ {
+ case StreamRecorderAudioCodec.Aac:
+ return RecorderAudioCodec.Aac;
+
+ case StreamRecorderAudioCodec.Amr:
+ return RecorderAudioCodec.Amr;
+
+ case StreamRecorderAudioCodec.Pcm:
+ return RecorderAudioCodec.Pcm;
+ }
+
+ Debug.Fail("Unknown audio codec value.");
+ return 0;
+ }
+
+
+ internal static StreamRecorderAudioCodec ToStreamRecorderEnum(this RecorderAudioCodec value)
+ {
+ switch (value)
+ {
+ case RecorderAudioCodec.Aac:
+ return StreamRecorderAudioCodec.Aac;
+
+ case RecorderAudioCodec.Amr:
+ return StreamRecorderAudioCodec.Amr;
+
+ case RecorderAudioCodec.Pcm:
+ return StreamRecorderAudioCodec.Pcm;
+ }
+
+ throw new NotSupportedException($"{value.ToString()} is not supported.");
+ }
+
+
+ internal static RecorderFileFormat ToRecorderEnum(this StreamRecorderFileFormat value)
+ {
+ switch (value)
+ {
+ case StreamRecorderFileFormat.ThreeGp:
+ return RecorderFileFormat.ThreeGp;
+
+ case StreamRecorderFileFormat.Mp4:
+ return RecorderFileFormat.Mp4;
+
+ case StreamRecorderFileFormat.Amr:
+ return RecorderFileFormat.Amr;
+
+ case StreamRecorderFileFormat.Adts:
+ return RecorderFileFormat.Adts;
+
+ case StreamRecorderFileFormat.Wav:
+ return RecorderFileFormat.Wav;
+ }
+
+ Debug.Fail("Unknown file format value.");
+ return 0;
+ }
+
+
+ internal static StreamRecorderFileFormat ToStreamRecorderEnum(this RecorderFileFormat value)
+ {
+ switch (value)
+ {
+ case RecorderFileFormat.ThreeGp:
+ return StreamRecorderFileFormat.ThreeGp;
+
+ case RecorderFileFormat.Mp4:
+ return StreamRecorderFileFormat.Mp4;
+
+ case RecorderFileFormat.Amr:
+ return StreamRecorderFileFormat.Amr;
+
+ case RecorderFileFormat.Adts:
+ return StreamRecorderFileFormat.Adts;
+
+ case RecorderFileFormat.Wav:
+ return StreamRecorderFileFormat.Wav;
+ }
+
+ throw new NotSupportedException($"{value.ToString()} is not supported.");
+ }
}
+ #endregion
}
*/
using System;
+using System.IO;
using Tizen.Internals.Errors;
namespace Tizen.Multimedia
{
- internal enum StreamRecorderError
+ internal enum StreamRecorderErrorCode
{
None = ErrorCode.None,
InvalidParameter = ErrorCode.InvalidParameter,
NotSupported = ErrorCode.NotSupported,
}
- internal static class StreamRecorderErrorFactory
+ internal static class StreamRecorderErrorExtensions
{
- internal static void ThrowException(int errorCode, string errorMessage = null, string paramName = null)
+ internal static StreamRecorderErrorCode Ignore(this StreamRecorderErrorCode errorCode, StreamRecorderErrorCode ignore)
{
- StreamRecorderError err = (StreamRecorderError)errorCode;
- if (string.IsNullOrEmpty(errorMessage))
+ return (ignore == errorCode) ? StreamRecorderErrorCode.None : errorCode;
+ }
+
+ internal static void ThrowIfError(this StreamRecorderErrorCode err, string errorMessage)
+ {
+ if (err == StreamRecorderErrorCode.None)
{
- errorMessage = err.ToString();
+ return;
}
- switch ((StreamRecorderError)errorCode)
+
+ switch (err)
{
- case StreamRecorderError.InvalidParameter:
- throw new ArgumentException(errorMessage, paramName);
- case StreamRecorderError.OutOfMemory:
+ case StreamRecorderErrorCode.InvalidParameter:
+ throw new ArgumentException(errorMessage);
+
+ case StreamRecorderErrorCode.OutOfMemory:
throw new OutOfMemoryException(errorMessage);
- case StreamRecorderError.PermissionDenied:
+
+ case StreamRecorderErrorCode.PermissionDenied:
throw new UnauthorizedAccessException(errorMessage);
- case StreamRecorderError.NotSupported:
+
+ case StreamRecorderErrorCode.NotSupported:
throw new NotSupportedException(errorMessage);
- case StreamRecorderError.InvalidState:
- case StreamRecorderError.InvalidOperation:
- case StreamRecorderError.OutOfStorage:
+
+ case StreamRecorderErrorCode.InvalidState:
+ case StreamRecorderErrorCode.InvalidOperation:
throw new InvalidOperationException(errorMessage);
+
+ case StreamRecorderErrorCode.OutOfStorage:
+ throw new IOException(errorMessage);
}
}
}
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended EventArgs class containing details about the recording limit.
+ /// Provides data for the <see cref="StreamRecorder.ErrorOccurred"/> event.
/// </summary>
- public class StreamRecordingLimitReachedEventArgs : EventArgs
+ public class StreamRecorderErrorOccurredEventArgs : EventArgs
{
- private StreamRecordingLimitType _type = StreamRecordingLimitType.Size;
-
- internal StreamRecordingLimitReachedEventArgs(StreamRecordingLimitType type)
+ internal StreamRecorderErrorOccurredEventArgs(StreamRecorderError error, RecorderState state)
{
- _type = type;
+ Error = error;
+ State = state;
}
/// <summary>
- /// The limitation type.
+ /// Gets the error code.
/// </summary>
- public StreamRecordingLimitType Type {
- get {
- return _type;
- }
- }
+ public StreamRecorderError Error { get; }
+
+ /// <summary>
+ /// Gets the state of the recorder.
+ /// </summary>
+ public RecorderState State { get; }
+
}
}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-
-namespace Tizen.Multimedia
-{
- /// <summary>
- /// An extended Eventargs class which contains interrupted policy details, previous and current
- /// state of the recorder.
- /// </summary>
- public class StreamRecorderNotifiedEventArgs : EventArgs
- {
- private StreamRecorderState _previous = StreamRecorderState.None;
- private StreamRecorderState _current = StreamRecorderState.None;
- private StreamRecorderNotify _notify = StreamRecorderNotify.None;
-
- internal StreamRecorderNotifiedEventArgs(StreamRecorderState previous, StreamRecorderState current, StreamRecorderNotify notify)
- {
- _previous = previous;
- _current = current;
- _notify = notify;
- }
-
- /// <summary>
- /// The previous state of the stream recorder.
- /// </summary>
- public StreamRecorderState Previous {
- get {
- return _previous;
- }
- }
-
- /// <summary>
- /// The current state of the stream recorder.
- /// </summary>
- public StreamRecorderState Current {
- get {
- return _current;
- }
- }
-
- /// <summary>
- /// The notify of the event.
- /// </summary>
- public StreamRecorderNotify Notify {
- get {
- return _notify;
- }
- }
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Specifies the options associated with <see cref="StreamRecorder"/>.
+ /// </summary>
+ /// <seealso cref="StreamRecorder"/>
+ /// <seealso cref="StreamRecorder.Prepare(StreamRecorderOptions)"/>
+ /// <seealso cref="StreamRecorderAudioOptions"/>
+ /// <seealso cref="StreamRecorderVideoOptions"/>
+ public class StreamRecorderOptions
+ {
+ /// <summary>
+ /// Initialize a new instance of the <see cref="StreamRecorderOptions"/> class with the specified
+ /// save path and file format.
+ /// </summary>
+ /// <param name="savePath">The path that the recording result is saved.</param>
+ /// <param name="fileFormat">The file format of output file.</param>
+ /// <exception cref="ArgumentNullException"><paramref name="savePath"/>is null.</exception>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="savePath"/>is an empty string.\n
+ /// -or-\n
+ /// <paramref name="fileFormat"/> is not valid.
+ /// </exception>
+ public StreamRecorderOptions(string savePath, RecorderFileFormat fileFormat)
+ {
+ SavePath = savePath;
+ FileFormat = fileFormat;
+ }
+
+ private string _savePath;
+
+ /// <summary>
+ /// Gets or sets the file path to record.
+ /// </summary>
+ /// <remarks>
+ /// If the same file already exists in the file system, then old file will be overwritten.
+ /// </remarks>
+ /// <exception cref="ArgumentNullException"><paramref name="value"/>is null.</exception>
+ /// <exception cref="ArgumentException"><paramref name="value"/>is an empty string.</exception>
+ public string SavePath
+ {
+ get => _savePath;
+ set
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException(nameof(value));
+ }
+
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ throw new ArgumentException("Path can't be an empty string.", nameof(value));
+ }
+
+ _savePath = value;
+ }
+ }
+
+ private RecorderFileFormat _fileFormat;
+
+ /// <summary>
+ /// Gets or sets the file format for recording media stream.
+ /// </summary>
+ /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+ /// <seealso cref="StreamRecorder.GetSupportedFileFormats"/>
+ public RecorderFileFormat FileFormat
+ {
+ get => _fileFormat;
+ set
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderFileFormat), value, nameof(value));
+
+ _fileFormat = value;
+ }
+ }
+
+ private int _timeLimit;
+
+ /// <summary>
+ /// Gets or sets the time limit of recording.
+ /// </summary>
+ /// <value>
+ /// The maximum time of recording in seconds, or 0 for unlimited time.
+ /// </value>
+ /// <remarks>
+ /// After reaching the limitation, the data which is being recorded will
+ /// be discarded and not written to the file.
+ /// The recorder state must be <see cref="RecorderState.Idle"/> state.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ /// <seealso cref="StreamRecorder.RecordingLimitReached"/>
+ /// <seealso cref="SizeLimit"/>
+ public int TimeLimit
+ {
+ get => _timeLimit;
+ set
+ {
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Time limit can't be less than zero.");
+ }
+
+ _timeLimit = value;
+ }
+ }
+
+ private int _sizeLimit;
+
+ /// <summary>
+ /// Gets or sets the maximum size of a recording file.
+ /// </summary>
+ /// <value>
+ /// The maximum size of a recording file in kilobytes, or 0 for unlimited size.
+ /// </value>
+ /// <remarks>
+ /// After reaching the limitation, the data which is being recorded will
+ /// be discarded and not written to the file.
+ /// </remarks>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ /// <seealso cref="StreamRecorder.RecordingLimitReached"/>
+ /// <seealso cref="TimeLimit"/>
+ public int SizeLimit
+ {
+ get => _sizeLimit;
+ set
+ {
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Size limit can't be less than zero.");
+ }
+
+ _sizeLimit = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the options for audio recording.
+ /// </summary>
+ /// <remarks>
+ /// <see cref="Audio"/> or <see cref="Video"/> must be set for recording.
+ /// </remarks>
+ /// <seealso cref="Video"/>
+ public StreamRecorderAudioOptions Audio { get; set; }
+
+ /// <summary>
+ /// Gets or sets the options for video recording.
+ /// </summary>
+ /// <remarks>
+ /// <see cref="Audio"/> or <see cref="Video"/> must be set for recording.
+ /// </remarks>
+ /// <seealso cref="Audio"/>
+ public StreamRecorderVideoOptions Video { get; set; }
+
+ private StreamRecorderSourceType GetSourceType()
+ {
+ Debug.Assert(Audio != null || Video != null);
+
+ if (Audio != null && Video != null)
+ {
+ return StreamRecorderSourceType.VideoAudio;
+ }
+
+ return Audio != null ? StreamRecorderSourceType.Audio : StreamRecorderSourceType.Video;
+ }
+
+ internal void Apply(StreamRecorder recorder)
+ {
+ if (Audio == null && Video == null)
+ {
+ throw new ArgumentException("Both Audio and Video are not set.");
+ }
+
+ Native.EnableSourceBuffer(recorder.Handle, GetSourceType()).ThrowIfError("Failed to apply options.");
+
+ Native.SetFileName(recorder.Handle, SavePath).ThrowIfError("Failed to set save path.");
+
+ recorder.ValidateFileFormat(FileFormat);
+ Native.SetFileFormat(recorder.Handle, FileFormat.ToStreamRecorderEnum())
+ .ThrowIfError("Failed to set file format.");
+
+ Native.SetRecordingLimit(recorder.Handle, RecordingLimitType.Size, SizeLimit).
+ ThrowIfError("Failed to set size limit.");
+
+ Native.SetRecordingLimit(recorder.Handle, RecordingLimitType.Time, TimeLimit).
+ ThrowIfError("Failed to set time limit.");
+
+ Audio?.Apply(recorder);
+
+ Video?.Apply(recorder);
+ }
+ }
+}
namespace Tizen.Multimedia
{
/// <summary>
- /// An extended EventArgs class which contains details about error status and
- /// state of the recorder when it failed.
+ /// Provides data for the <see cref="StreamRecorder.StateChanged"/> event.
/// </summary>
- public class StreamRecordingErrorOccurredEventArgs : EventArgs
+ public class StreamRecorderStateChangedEventArgs : EventArgs
{
- private StreamRecorderErrorCode _error = StreamRecorderErrorCode.InvalidOperation;
- private StreamRecorderState _state = StreamRecorderState.None;
-
- internal StreamRecordingErrorOccurredEventArgs(StreamRecorderErrorCode error, StreamRecorderState state)
+ internal StreamRecorderStateChangedEventArgs(RecorderState previous, RecorderState current)
{
- _error = error;
- _state = state;
+ Previous = previous;
+ Current = current;
}
/// <summary>
- /// The error code.
+ /// Gets the previous state of the stream recorder.
/// </summary>
- public StreamRecorderErrorCode Error {
- get {
- return _error;
- }
- }
+ public RecorderState Previous { get; }
/// <summary>
- /// The state of the recorder.
+ /// Gets the current state of the stream recorder.
/// </summary>
- public StreamRecorderState State {
- get {
- return _state;
- }
- }
-
+ public RecorderState Current { get; }
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Native = Interop.StreamRecorder;
+
+namespace Tizen.Multimedia
+{
+ /// <summary>
+ /// Specifies the options associated with video recording.
+ /// </summary>
+ /// <seealso cref="StreamRecorder"/>
+ /// <seealso cref="StreamRecorderOptions"/>
+ /// <seealso cref="StreamRecorderAudioOptions"/>
+ public class StreamRecorderVideoOptions
+ {
+ private const int DefaultBitRate = 0;
+
+ /// <summary>
+ /// Initialize a new instance of the <see cref="StreamRecorderVideoOptions"/> class with the specified
+ /// codec, resolution, source format and frame rate.
+ /// </summary>
+ /// <param name="codec">The <see cref="RecorderVideoCodec"/> for encoding video stream.</param>
+ /// <param name="resolution">The resolution of video recording.</param>
+ /// <param name="sourceFormat">The format of source stream.</param>
+ /// <param name="frameRate">The frame rate for encoding video stream.</param>
+ /// <remarks>
+ /// <see cref="BitRate"/> will be set as default.
+ /// </remarks>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="codec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="sourceFormat"/> is not valid.\n
+ /// </exception>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// Width or height of <paramref name="resolution"/> is less than or equal to zero.\n
+ /// -or-\n
+ /// <paramref name="frameRate"/> is less than or equal to zero.\n
+ /// </exception>
+ public StreamRecorderVideoOptions(RecorderVideoCodec codec, Size resolution,
+ StreamRecorderVideoFormat sourceFormat, int frameRate) :
+ this(codec, resolution, sourceFormat, frameRate, DefaultBitRate)
+ {
+ }
+
+ /// <summary>
+ /// Initialize a new instance of the <see cref="StreamRecorderVideoOptions"/> class with the specified
+ /// codec, resolution, source format, frame rate and bit rate.
+ /// </summary>
+ /// <param name="codec">The <see cref="RecorderVideoCodec"/> for encoding video stream.</param>
+ /// <param name="resolution">The resolution of video recording.</param>
+ /// <param name="sourceFormat">The format of source stream.</param>
+ /// <param name="frameRate">The frame rate for encoding video stream.</param>
+ /// <param name="bitRate">The bit rate for encoding video stream.</param>
+ /// <exception cref="ArgumentException">
+ /// <paramref name="codec"/> is not valid.\n
+ /// -or-\n
+ /// <paramref name="sourceFormat"/> is not valid.\n
+ /// </exception>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// Width or height of <paramref name="resolution"/> is less than or equal to zero.\n
+ /// -or-\n
+ /// <paramref name="frameRate"/> is less than or equal to zero.\n
+ /// -or-\n
+ /// <paramref name="bitRate"/> is less than zero.
+ /// </exception>
+ public StreamRecorderVideoOptions(RecorderVideoCodec codec, Size resolution,
+ StreamRecorderVideoFormat sourceFormat, int frameRate, int bitRate)
+ {
+ Codec = codec;
+ Resolution = resolution;
+ SourceFormat = sourceFormat;
+ FrameRate = frameRate;
+ BitRate = bitRate;
+ }
+
+ private RecorderVideoCodec _codec;
+
+ /// <summary>
+ /// Gets or sets the video codec for encoding video stream.
+ /// </summary>
+ /// <value>The codec for video stream recording.</value>
+ /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+ /// <seealso cref="StreamRecorder.GetSupportedVideoCodecs"/>
+ public RecorderVideoCodec Codec
+ {
+ get => _codec;
+ set
+ {
+ ValidationUtil.ValidateEnum(typeof(RecorderVideoCodec), value, nameof(value));
+
+ _codec = value;
+ }
+ }
+
+ private Size _resolution;
+
+ /// <summary>
+ /// Gets or sets the resolution of the video recording.
+ /// </summary>
+ /// <value>The output resolution for video stream recording.</value>
+ /// <exception cref="ArgumentOutOfRangeException">
+ /// Width or height of <paramref name="value"/> is less than or equal to zero.
+ /// </exception>
+ /// <seealso cref="StreamRecorder.GetSupportedVideoResolutions"/>
+ public Size Resolution
+ {
+ get => _resolution;
+ set
+ {
+ if (value.Width <= 0 || value.Height <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Resolution can't be less than or equal to zero.");
+ }
+
+ _resolution = value;
+ }
+ }
+
+ private int _frameRate;
+
+ /// <summary>
+ /// Gets or sets the frame rate for recording media stream.
+ /// </summary>
+ /// <value>The frame rate value for video stream recording.</value>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or equal to zero.</exception>
+ public int FrameRate
+ {
+ get => _frameRate;
+ set
+ {
+ if (value <= 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Frame rate can't be less than or equal to zero.");
+ }
+ _frameRate = value;
+ }
+ }
+
+ private StreamRecorderVideoFormat _sourceFormat;
+
+ /// <summary>
+ /// Gets or sets the video source format for recording media stream.
+ /// </summary>
+ /// <value>The source format of buffers for video stream recording.</value>
+ /// <exception cref="ArgumentException"><paramref name="value"/> is not valid.</exception>
+ public StreamRecorderVideoFormat SourceFormat
+ {
+ get => _sourceFormat;
+ set
+ {
+ ValidationUtil.ValidateEnum(typeof(StreamRecorderVideoFormat), value, nameof(value));
+
+ _sourceFormat = value;
+ }
+ }
+
+ private int _bitRate;
+
+ /// <summary>
+ /// The bit rate of the video encoder in bits per second.
+ /// </summary>
+ /// <value>The bit rate value for video stream recording. The default is 0.</value>
+ /// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than zero.</exception>
+ public int BitRate
+ {
+ get => _bitRate;
+ set
+ {
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value), value,
+ "Bit rate can't be less than or equal to zero.");
+ }
+ _bitRate = value;
+ }
+ }
+
+ internal void Apply(StreamRecorder recorder)
+ {
+ recorder.ValidateVideoCodec(Codec);
+
+ Native.SetVideoEncoder(recorder.Handle, Codec.ToStreamRecorderEnum()).
+ ThrowIfError("Failed to set video codec.");
+
+ recorder.ValidateVideoResolution(Resolution);
+
+ Native.SetVideoResolution(recorder.Handle, Resolution.Width, Resolution.Height).
+ ThrowIfError("Failed to set video resolution.");
+
+ Native.SetVideoFrameRate(recorder.Handle, FrameRate).
+ ThrowIfError("Failed to set video frame rate.");
+
+ Native.SetVideoEncoderBitRate(recorder.Handle, BitRate).
+ ThrowIfError("Failed to set video bit rate.");
+
+ Native.SetVideoSourceFormat(recorder.Handle, SourceFormat).
+ ThrowIfError("Failed to set video source format.");
+ }
+ }
+
+}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using Native = Interop.StreamRecorder;
-
-namespace Tizen.Multimedia
-{
- /// <summary>
- /// Resolution for stream recorder.
- /// </summary>
- public class StreamRecorderVideoResolution
- {
- private int _width, _height;
- private bool _interopFlag;
- internal IntPtr _Handle;
-
- internal StreamRecorderVideoResolution(IntPtr handle)
- {
- _Handle = handle;
- _interopFlag = true;
- int ret = Native.GetVideoResolution(_Handle, out _width, out _height);
- StreamRecorderError err = (StreamRecorderError)ret;
- Log.Info(StreamRecorderLog.Tag, "width " + _width + " height " + _height + "return " + err.ToString());
- }
-
- internal StreamRecorderVideoResolution(int width, int height)
- {
- _interopFlag = false;
- _width = width;
- _height = height;
- }
-
- /// <summary>
- /// The video width.
- /// </summary>
- /// <value>The width.</value>
- public int Width {
- get {
- if(_interopFlag == true)
- Native.GetVideoResolution(_Handle, out _width, out _height);
- return _width;
- }
- set {
- _width = value;
- if(_interopFlag == true) {
- int ret = Native.SetVideoResolution(_Handle, _width, _height);
- StreamRecorderError err = (StreamRecorderError)ret;
- Log.Info(StreamRecorderLog.Tag, " set width " + _width + " height " + _height + "set return " + err.ToString());
- }
- }
- }
-
- /// <summary>
- /// The video height.
- /// </summary>
- /// <value>The height.</value>
- public int Height {
- get {
- if(_interopFlag == true)
- Native.GetVideoResolution(_Handle, out _width, out _height);
- return _height;
- }
- set {
- _height = value;
- if(_interopFlag == true) {
- int ret = Native.SetVideoResolution(_Handle, _width, _height);
- StreamRecorderError err = (StreamRecorderError)ret;
- Log.Info(StreamRecorderLog.Tag, " set width " + _width + " height " + _height + "set return " + err.ToString());
- }
- }
- }
- }
-}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+ internal class AppSignalType : global::System.IDisposable
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal AppSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+ {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AppSignalType obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ //A Flag to check who called Dispose(). (By User or DisposeQueue)
+ private bool isDisposeQueued = false;
+ //A Flat to check if it is already disposed.
+ protected bool disposed = false;
+
+ ~AppSignalType()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ System.GC.SuppressFinalize(this);
+ }
+ }
+
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_AppSignalType(swigCPtr);
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ disposed = true;
+ }
+
+ public bool Empty()
+ {
+ bool ret = NDalicManualPINVOKE.AppSignalType_Empty(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public uint GetConnectionCount()
+ {
+ uint ret = NDalicManualPINVOKE.AppSignalType_GetConnectionCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public void Connect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.AppSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Disconnect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.AppSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Emit(WidgetApplication arg)
+ {
+ NDalicManualPINVOKE.AppSignalType_Emit(swigCPtr, WidgetApplication.getCPtr(arg));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ public AppSignalType() : this(NDalicManualPINVOKE.new_AppSignalType(), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+}
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_applicationInitEventCallbackDelegate != null)
+ {
+ this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
+ }
+
+ if (_applicationTerminateEventCallbackDelegate != null)
+ {
+ this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
+ }
+
+ if (_applicationPauseEventCallbackDelegate != null)
+ {
+ this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
+ }
+
+ if (_applicationResumeEventCallbackDelegate != null)
+ {
+ this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
+ }
+
+ if (_applicationResetEventCallbackDelegate != null)
+ {
+ this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
+ }
+
+ if (_applicationResizeEventCallbackDelegate != null)
+ {
+ this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
+ }
+
+ if (_applicationLanguageChangedEventCallbackDelegate != null)
+ {
+ this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
+ }
+
+ if (_applicationRegionChangedEventCallbackDelegate != null)
+ {
+ this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
+ }
+
+ if (_applicationBatteryLowEventCallbackDelegate != null)
+ {
+ this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
+ }
+
+ if (_applicationMemoryLowEventCallbackDelegate != null)
+ {
+ this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
+ }
+
+ if (_applicationAppControlEventCallbackDelegate != null)
+ {
+ this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
return ret;
}
- //Removed from v0.2.33
- /*public bool AddIdle(System.Delegate func)
+
+ public static Application NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode)
+ {
+ NUILog.Debug(" NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode) is called! ");
+
+ Application ret = New(args, stylesheet, (Application.WindowMode)windowMode);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+ // we've got an application now connect the signals
+ ret.SetupDelegates();
+ // set the singleton
+ _instance = ret;
+ return _instance;
+ }
+
+ /// <summary>
+ /// Ensures that the function passed in is called from the main loop when it is idle.
+ /// </summary>
+ /// <param name="func">The function to call</param>
+ /// <returns>true if added successfully, false otherwise</returns>
+ public bool AddIdle(System.Delegate func)
{
System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
System.IntPtr ip2 = NDalicManualPINVOKE.MakeCallback(new System.Runtime.InteropServices.HandleRef(this, ip));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
- }*/
-
-
+ }
/**
* Outer::outer_method(int)
return ret;
}
+ public static Application New(string[] args, string stylesheet, Application.WindowMode windowMode)
+ {
+ NUILog.Debug("New(string[] args) is called!");
+ int argc = args.Length;
+ string argvStr = string.Join(" ", args);
+
+ Application ret = new Application(NDalicPINVOKE.Application_New__MANUAL_4(argc, argvStr, stylesheet, (int)windowMode), true);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
public static Application New(int argc, string stylesheet, Application.WindowMode windowMode, Rectangle positionSize)
{
Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_4(argc, stylesheet, (int)windowMode, Rectangle.getCPtr(positionSize)), true);
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Tizen.NUI.Extension.Test, PublicKey=00240000048000009400000006020000002400005253413100040000010001004d7c7c03a196ecb8e7cc5056750e1f40ee2bbe99f0e53a07f2538f2b0f450bd731b9dca3706503a0378baca74a09cf3af6261b330c031f44817ab6ed64189460765a402279d3e0c1fa7295ae1dccb2e3ff329705fd85b58d66ae7cb7e95ba06e0d847c3e3ba918798f579e5caeb1c6149955e6baf24236eec46227a623e494b1")]
-[assembly: InternalsVisibleTo("Tizen.Multimedia, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
+[assembly: InternalsVisibleTo("Tizen.Multimedia, PublicKey=0024000004800000940000000602000000240000525341310004000001000100bd36a93b6d224759632d08a501b9dcb99a533e8ff0c3a1fc7044f5b05e176c005e5a7fc4d1dfa54da4d4cad4868c4518aa1f661380fb90685dc699d5e48dcc697b33c1e38b70845f405612d6827e7337c191ddd0a0aa35fdad654efe4c54881fdaa82ce35dce18ea918953e448c7aa284a47ed6fe3aa9404930b2b973a28cddf")]
[assembly: InternalsVisibleTo("Tizen.TV.NUI, PublicKey=0024000004800000940000000602000000240000525341310004000001000100ed445c2a988d35b99e5766f42eef33d89d1f67225db051f011abcfce47a4788875c39750a2e5695f1ec117f41d96610419811762669f98131db30a6e64c6bb8fde3731f373f6cda4c0087d121f5108559f216dc015807dc46ec5a4d1b63f5deff64c01754a0db0dc849bc300672572cbd2697432ab6c193ebf9fade6bf0f2aad")]
namespace Tizen.NUI
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Window_GetPosition")]
public static extern global::System.IntPtr GetPosition(global::System.Runtime.InteropServices.HandleRef jarg1);
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Adaptor_FeedKeyEvent")]
+ public static extern void Window_FeedKeyEvent(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint = "CSharp_Dali_MakeCallback")]
+ public static extern global::System.IntPtr MakeCallback(global::System.Runtime.InteropServices.HandleRef jarg1);
+
//for widget view
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetView_Property_WIDGET_ID_get")]
public static extern int WidgetView_Property_WIDGET_ID_get();
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetViewManager_SWIGUpcast")]
public static extern global::System.IntPtr WidgetViewManager_SWIGUpcast(global::System.IntPtr jarg1);
+
//For Adaptor
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Adaptor_New__SWIG_0")]
public static extern global::System.IntPtr Adaptor_New__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1);
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_AdaptorSignalType")]
public static extern void delete_AdaptorSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+ //For widget
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_New")]
+ public static extern global::System.IntPtr Widget_New(string jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_Widget__SWIG_0")]
+ public static extern global::System.IntPtr new_Widget__SWIG_0();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_Widget__SWIG_1")]
+ public static extern global::System.IntPtr new_Widget__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_Assign")]
+ public static extern global::System.IntPtr Widget_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_Widget")]
+ public static extern void delete_Widget(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_CreateSignal")]
+ public static extern global::System.IntPtr Widget_CreateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_TerminateSignal")]
+ public static extern global::System.IntPtr Widget_TerminateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_PauseSignal")]
+ public static extern global::System.IntPtr Widget_PauseSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_ResumeSignal")]
+ public static extern global::System.IntPtr Widget_ResumeSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_ResizeSignal")]
+ public static extern global::System.IntPtr Widget_ResizeSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_UpdateSignal")]
+ public static extern global::System.IntPtr Widget_UpdateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_New")]
+ public static extern global::System.IntPtr WidgetApplication_New(int jarg1, string jarg2, string jarg3);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetApplication__SWIG_0")]
+ public static extern global::System.IntPtr new_WidgetApplication__SWIG_0();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetApplication__SWIG_1")]
+ public static extern global::System.IntPtr new_WidgetApplication__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_Assign")]
+ public static extern global::System.IntPtr WidgetApplication_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetApplication")]
+ public static extern void delete_WidgetApplication(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_MainLoop")]
+ public static extern void WidgetApplication_MainLoop(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_Quit")]
+ public static extern void WidgetApplication_Quit(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_GetWindow")]
+ public static extern global::System.IntPtr WidgetApplication_GetWindow(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_GetResourcePath")]
+ public static extern string WidgetApplication_GetResourcePath();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_InitSignal")]
+ public static extern global::System.IntPtr WidgetApplication_InitSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_TerminateSignal")]
+ public static extern global::System.IntPtr WidgetApplication_TerminateSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_LanguageChangedSignal")]
+ public static extern global::System.IntPtr WidgetApplication_LanguageChangedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_RegionChangedSignal")]
+ public static extern global::System.IntPtr WidgetApplication_RegionChangedSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_BatteryLowSignal")]
+ public static extern global::System.IntPtr WidgetApplication_BatteryLowSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_MemoryLowSignal")]
+ public static extern global::System.IntPtr WidgetApplication_MemoryLowSignal(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_New")]
+ public static extern global::System.IntPtr WidgetData_New(string jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, string jarg3);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetData__SWIG_0")]
+ public static extern global::System.IntPtr new_WidgetData__SWIG_0();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetData__SWIG_1")]
+ public static extern global::System.IntPtr new_WidgetData__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_Assign")]
+ public static extern global::System.IntPtr WidgetData_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetData")]
+ public static extern void delete_WidgetData(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetInstanceId")]
+ public static extern string WidgetData_GetInstanceId(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetArgs")]
+ public static extern global::System.IntPtr WidgetData_GetArgs(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetContent")]
+ public static extern string WidgetData_GetContent(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_GetWindow")]
+ public static extern global::System.IntPtr WidgetData_GetWindow(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SetArgs")]
+ public static extern void WidgetData_SetArgs(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SetContent")]
+ public static extern void WidgetData_SetContent(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SetWindow")]
+ public static extern void WidgetData_SetWindow(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Empty")]
+ public static extern bool WidgetInstanceCreateSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_GetConnectionCount")]
+ public static extern uint WidgetInstanceCreateSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Connect")]
+ public static extern void WidgetInstanceCreateSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Disconnect")]
+ public static extern void WidgetInstanceCreateSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceCreateSignalType_Emit")]
+ public static extern void WidgetInstanceCreateSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceCreateSignalType")]
+ public static extern global::System.IntPtr new_WidgetInstanceCreateSignalType();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceCreateSignalType")]
+ public static extern void delete_WidgetInstanceCreateSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Empty")]
+ public static extern bool WidgetInstanceTerminateSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_GetConnectionCount")]
+ public static extern uint WidgetInstanceTerminateSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Connect")]
+ public static extern void WidgetInstanceTerminateSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Disconnect")]
+ public static extern void WidgetInstanceTerminateSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceTerminateSignalType_Emit")]
+ public static extern void WidgetInstanceTerminateSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, int jarg4);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceTerminateSignalType")]
+ public static extern global::System.IntPtr new_WidgetInstanceTerminateSignalType();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceTerminateSignalType")]
+ public static extern void delete_WidgetInstanceTerminateSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Empty")]
+ public static extern bool WidgetInstancePauseOrResumeSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_GetConnectionCount")]
+ public static extern uint WidgetInstancePauseOrResumeSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Connect")]
+ public static extern void WidgetInstancePauseOrResumeSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Disconnect")]
+ public static extern void WidgetInstancePauseOrResumeSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstancePauseOrResumeSignalType_Emit")]
+ public static extern void WidgetInstancePauseOrResumeSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstancePauseOrResumeSignalType")]
+ public static extern global::System.IntPtr new_WidgetInstancePauseOrResumeSignalType();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstancePauseOrResumeSignalType")]
+ public static extern void delete_WidgetInstancePauseOrResumeSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Empty")]
+ public static extern bool WidgetInstanceResizeSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_GetConnectionCount")]
+ public static extern uint WidgetInstanceResizeSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Connect")]
+ public static extern void WidgetInstanceResizeSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Disconnect")]
+ public static extern void WidgetInstanceResizeSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceResizeSignalType_Emit")]
+ public static extern void WidgetInstanceResizeSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceResizeSignalType")]
+ public static extern global::System.IntPtr new_WidgetInstanceResizeSignalType();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceResizeSignalType")]
+ public static extern void delete_WidgetInstanceResizeSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Empty")]
+ public static extern bool WidgetInstanceUpdateSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_GetConnectionCount")]
+ public static extern uint WidgetInstanceUpdateSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Connect")]
+ public static extern void WidgetInstanceUpdateSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Disconnect")]
+ public static extern void WidgetInstanceUpdateSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetInstanceUpdateSignalType_Emit")]
+ public static extern void WidgetInstanceUpdateSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, int jarg4);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_WidgetInstanceUpdateSignalType")]
+ public static extern global::System.IntPtr new_WidgetInstanceUpdateSignalType();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_WidgetInstanceUpdateSignalType")]
+ public static extern void delete_WidgetInstanceUpdateSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Empty")]
+ public static extern bool AppSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_GetConnectionCount")]
+ public static extern uint AppSignalType_GetConnectionCount(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Connect")]
+ public static extern void AppSignalType_Connect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Disconnect")]
+ public static extern void AppSignalType_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_AppSignalType_Emit")]
+ public static extern void AppSignalType_Emit(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_AppSignalType")]
+ public static extern global::System.IntPtr new_AppSignalType();
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_delete_AppSignalType")]
+ public static extern void delete_AppSignalType(global::System.Runtime.InteropServices.HandleRef jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Widget_SWIGUpcast")]
+ public static extern global::System.IntPtr Widget_SWIGUpcast(global::System.IntPtr jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetApplication_SWIGUpcast")]
+ public static extern global::System.IntPtr WidgetApplication_SWIGUpcast(global::System.IntPtr jarg1);
+
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_WidgetData_SWIGUpcast")]
+ public static extern global::System.IntPtr WidgetData_SWIGUpcast(global::System.IntPtr jarg1);
}
}
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Application_New__SWIG_3")]
public static extern global::System.IntPtr Application_New__SWIG_3(int jarg1, string jarg3, int jarg4);
+ [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_Application_New__MANUAL_4")]
+ public static extern global::System.IntPtr Application_New__MANUAL_4(int jarg1, string jarg2, string jarg3, int jarg4);
+
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_new_Application__SWIG_0")]
public static extern global::System.IntPtr new_Application__SWIG_0();
[global::System.Runtime.InteropServices.DllImport("NDalic", EntryPoint="CSharp_Dali_Application_New__SWIG_4")]
public static extern global::System.IntPtr Application_New__SWIG_4(int jarg1, string jarg3, int jarg4, global::System.Runtime.InteropServices.HandleRef jarg5);
-
[global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint="CSharp_Dali_TimerSignalType_Empty")]
public static extern bool TimerSignalType_Empty(global::System.Runtime.InteropServices.HandleRef jarg1);
/// Application instance to connect event.
/// </summary>
protected Application _application;
+ private string _stylesheet = "";
+ private NUIApplication.WindowMode _windowMode = NUIApplication.WindowMode.Opaque;
/// <summary>
/// Dictionary to contain each type of event callback.
/// </summary>
public NUICoreBackend()
{
- _application = Application.NewApplication();
}
/// <summary>
/// </summary>
public NUICoreBackend(string stylesheet)
{
- _application = Application.NewApplication(stylesheet);
+ _stylesheet = stylesheet;
}
/// <summary>
/// </summary>
public NUICoreBackend(string stylesheet, NUIApplication.WindowMode windowMode)
{
- _application = Application.NewApplication(stylesheet, (Application.WindowMode)windowMode );
+ _stylesheet = stylesheet;
+ _windowMode = windowMode;
}
/// <summary>
/// </summary>
public void Dispose()
{
- _application.Dispose();
+ if(_application != null)
+ {
+ _application.Dispose();
+ }
}
/// <summary>
/// </summary>
public void Exit()
{
- _application.Quit();
+ if(_application != null)
+ {
+ _application.Quit();
+ }
+ }
+
+ /// <summary>
+ /// Ensures that the function passed in is called from the main loop when it is idle.
+ /// </summary>
+ /// <param name="func">The function to call</param>
+ /// <returns>true if added successfully, false otherwise</returns>
+ public bool AddIdle(System.Delegate func)
+ {
+ return _application.AddIdle(func);
}
/// <summary>
public void Run(string[] args)
{
TizenSynchronizationContext.Initialize();
+
+ args[0] = Tizen.Applications.Application.Current.ApplicationInfo.ExecutablePath;
+ if (args.Length == 1)
+ {
+ _application = Application.NewApplication();
+ }
+ else if (args.Length > 1)
+ {
+ _application = Application.NewApplication(args, _stylesheet, (Application.WindowMode)_windowMode);
+ }
+
_application.BatteryLow += OnBatteryLow;
_application.LanguageChanged += OnLanguageChanged;
_application.MemoryLow += OnMemoryLow;
private void OnAppControl(object source, NUIApplicationAppControlEventArgs e)
{
Log.Debug("NUI", "NUICorebackend OnAppControl Called");
- /* can invoke after making new api which getting control handle at application.
var handler = Handlers[EventType.AppControlReceived] as Action<AppControlReceivedEventArgs>;
- handler?.Invoke();
- */
+ SafeAppControlHandle handle = new SafeAppControlHandle(e.VoidP,false);
+ handler?.Invoke( new AppControlReceivedEventArgs(new ReceivedAppControl(handle)) );
}
/// <summary>
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+
+using Tizen.Applications.CoreBackend;
+using Tizen.Applications;
+
+namespace Tizen.NUI
+{
+ class NUIWidgetCoreBackend : ICoreBackend
+ {
+ /// <summary>
+ /// Application instance to connect event.
+ /// </summary>
+ protected WidgetApplication _application;
+ private string _stylesheet = "";
+
+ /// <summary>
+ /// Dictionary to contain each type of event callback.
+ /// </summary>
+ protected IDictionary<EventType, object> Handlers = new Dictionary<EventType, object>();
+
+ /// <summary>
+ /// The default Constructor.
+ /// </summary>
+ public NUIWidgetCoreBackend()
+ {
+ //Tizen.Log.Fatal("NUI", "### NUIWidgetCoreBackend called");
+ //_application = WidgetApplication.NewWidgetApplication();
+ }
+
+ /// <summary>
+ /// The constructor with stylesheet.
+ /// </summary>
+ public NUIWidgetCoreBackend(string stylesheet)
+ {
+ _stylesheet = stylesheet;
+ //_application = WidgetApplication.NewWidgetApplication(stylesheet);
+ }
+
+ /// <summary>
+ /// Add NUIWidgetApplication event to Application.
+ /// Put each type of event callback in Dictionary.
+ /// </summary>
+ /// <param name="evType">Type of event</param>
+ /// <param name="handler">Event callback</param>
+ public void AddEventHandler(EventType evType, Action handler)
+ {
+ Handlers.Add(evType, handler);
+ }
+
+ /// <summary>
+ /// Add NUIWidgetApplication event to Application.
+ /// Put each type of event callback in Dictionary.
+ /// </summary>
+ /// <typeparam name="TEventArgs">Argument type for the event</typeparam>
+ /// <param name="evType">Type of event</param>
+ /// <param name="handler">Event callback</param>
+ public void AddEventHandler<TEventArgs>(EventType evType, Action<TEventArgs> handler) where TEventArgs : EventArgs
+ {
+ Handlers.Add(evType, handler);
+ }
+
+
+ /// <summary>
+ /// Dispose function.
+ /// </summary>
+ public void Dispose()
+ {
+ Tizen.Log.Fatal("NUI", "### NUIWidgetCoreBackend Dispose called");
+ if (_application != null)
+ {
+ _application.Dispose();
+ }
+ }
+
+ /// <summary>
+ /// Exit Application.
+ /// </summary>
+ public void Exit()
+ {
+ Tizen.Log.Fatal("NUI", "### NUIWidgetCoreBackend Exit called");
+ if (_application != null)
+ {
+ _application.Quit();
+ }
+ }
+
+ /// <summary>
+ /// Run Application.
+ /// </summary>
+ /// <param name="args">Arguments from commandline.</param>
+ public void Run(string[] args)
+ {
+ args[0] = Tizen.Applications.Application.Current.ApplicationInfo.ExecutablePath;
+ _application = WidgetApplication.NewWidgetApplication(args, _stylesheet);
+
+ TizenSynchronizationContext.Initialize();
+ _application.BatteryLow += OnBatteryLow;
+ _application.LanguageChanged += OnLanguageChanged;
+ _application.MemoryLow += OnMemoryLow;
+ _application.RegionChanged += OnRegionChanged; ;
+
+ _application.Init += OnInit;
+ _application.Terminate += OnTerminate;
+
+ _application.MainLoop();
+ }
+
+ private void OnInit(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+ {
+ Log.Fatal("NUI", "NUIWidgetApplication OnPreCreated Called");
+ var preCreateHandler = Handlers[EventType.PreCreated] as Action;
+ preCreateHandler?.Invoke();
+
+ Log.Fatal("NUI", "NUIWidgetApplication OnCreate Called");
+ var createHandler = Handlers[EventType.Created] as Action;
+ createHandler?.Invoke();
+
+ }
+
+ private void OnTerminate(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+ {
+ Log.Fatal("NUI", "NUIWidgetApplication OnTerminated Called");
+ var handler = Handlers[EventType.Terminated] as Action;
+ handler?.Invoke();
+ }
+
+ /// <summary>
+ /// Region changed event callback function.
+ /// </summary>
+ /// <param name="source">Application instance</param>
+ /// <param name="e">Event argument for RegionChanged</param>
+ private void OnRegionChanged(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+ {
+ Log.Fatal("NUI", "NUIWidgetApplication OnRegionChanged Called");
+ var handler = Handlers[EventType.RegionFormatChanged] as Action<RegionFormatChangedEventArgs>;
+ // Need to make new signal return in native to return right value.
+ handler?.Invoke(new RegionFormatChangedEventArgs(""));
+ }
+
+ /// <summary>
+ /// Memory Low event callback function.
+ /// </summary>
+ /// <param name="source">Application instance</param>
+ /// <param name="e">Event argument for MemoryLow</param>
+ private void OnMemoryLow(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+ {
+ Log.Fatal("NUI", "NUIWidgetApplication OnMemoryLow Called");
+ var handler = Handlers[EventType.LowMemory] as Action<LowMemoryEventArgs>;
+ // Need to make new signal return in native to return right value.
+ handler?.Invoke(new LowMemoryEventArgs(LowMemoryStatus.None));
+ }
+
+ /// <summary>
+ /// Language changed event callback function.
+ /// </summary>
+ /// <param name="source">Application instance</param>
+ /// <param name="e">Event argument for LanguageChanged</param>
+ private void OnLanguageChanged(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+ {
+
+ Log.Fatal("NUI", "NUIWidgetApplication OnLanguageChanged Called");
+ var handler = Handlers[EventType.LocaleChanged] as Action<LocaleChangedEventArgs>;
+ // Need to make new signal return in native to return right value.
+ handler?.Invoke(new LocaleChangedEventArgs(""));
+
+ }
+
+ /// <summary>
+ /// Battery low event callback function.
+ /// </summary>
+ /// <param name="source">Application instance</param>
+ /// <param name="e">Event argument for BatteryLow</param>
+ private void OnBatteryLow(object sender, WidgetApplication.WidgetApplicationEventArgs e)
+ {
+ Log.Fatal("NUI", "NUIWidgetApplication OnBatteryLow Called");
+ var handler = Handlers[EventType.LowBattery] as Action<LowBatteryEventArgs>;
+ // Need to make new signal return in native to return right value.
+ handler?.Invoke(new LowBatteryEventArgs(LowBatteryStatus.None));
+
+ }
+
+ internal WidgetApplication WidgetApplicationHandle
+ {
+ get
+ {
+ return _application;
+ }
+ }
+ }
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+ public class SWIGTYPE_p_bundle
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+ internal SWIGTYPE_p_bundle(global::System.IntPtr cPtr, bool futureUse)
+ {
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ protected SWIGTYPE_p_bundle()
+ {
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SWIGTYPE_p_bundle obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+ }
+
+}
get
{
global::System.IntPtr cPtr = NDalicPINVOKE.TouchPoint_hitActor_get(swigCPtr);
- View ret = (cPtr == global::System.IntPtr.Zero) ? null : Registry.GetManagedBaseHandleFromRefObject(cPtr) as View;
+ View ret = (cPtr == global::System.IntPtr.Zero) ? null : Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
public VisualBase GetVisual(int index)
{
System.IntPtr cPtr = NDalicManualPINVOKE.ViewWrapperImpl_GetVisual(swigCPtr, index);
- VisualBase ret = Registry.GetManagedBaseHandleFromRefObject(cPtr) as VisualBase;
+ VisualBase ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as VisualBase;
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+using System;
+using System.Runtime.InteropServices;
+
+namespace Tizen.NUI
+{
+ /// <summary>
+ /// Widget application
+ /// </summary>
+ internal class WidgetApplication : BaseHandle
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+ internal WidgetApplication(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.WidgetApplication_SWIGUpcast(cPtr), cMemoryOwn)
+ {
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetApplication obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ /// <summary>
+ /// To make Window instance be disposed.
+ /// </summary>
+ protected override void Dispose(DisposeTypes type)
+ {
+ if(disposed)
+ {
+ return;
+ }
+
+ if(type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (_initCallback != null)
+ {
+ this.InitSignal().Disconnect(_initCallback);
+ }
+ if (_terminateCallback != null)
+ {
+ this.TerminateSignal().Disconnect(_terminateCallback);
+ }
+ if (_languageChangedCallback != null)
+ {
+ this.LanguageChangedSignal().Disconnect(_languageChangedCallback);;
+ }
+ if (_regionChangedCallback != null)
+ {
+ this.RegionChangedSignal().Disconnect(_regionChangedCallback);
+ }
+ if (_batteryLowCallback != null)
+ {
+ this.BatteryLowSignal().Disconnect(_batteryLowCallback);
+ }
+ if (_memoryLowCallback != null)
+ {
+ this.MemoryLowSignal().Disconnect(_memoryLowCallback);
+ }
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ if (swigCMemOwn)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetApplication(swigCPtr);
+ }
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ base.Dispose(type);
+ }
+
+ internal static WidgetApplication GetWidgetApplicationFromPtr(global::System.IntPtr cPtr)
+ {
+ WidgetApplication ret = new WidgetApplication(cPtr, false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public static WidgetApplication instance
+ {
+ get
+ {
+ return _instance;
+ }
+ }
+
+ internal void SetupDelegates()
+ {
+ InitDelegateInternal initializeCallback = new InitDelegateInternal(Initialization);
+
+ NUILog.Debug("InitSignal connection count");
+ this.InitSignal().Connect(initializeCallback);
+
+ NUILog.Debug("InitSignal connection count = " + InitSignal().GetConnectionCount());
+ }
+
+ public static WidgetApplication NewWidgetApplication(string[] args, string stylesheet)
+ {
+ WidgetApplication ret = New(args, stylesheet);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+ // we've got an application now connect the signals
+ ret.SetupDelegates();
+ _instance = ret;
+ return ret;
+ }
+
+ public static WidgetApplication New(string[] args, string stylesheet)
+ {
+ int argc = args.Length;
+ string argvStr = string.Join(" ", args);
+
+ WidgetApplication ret = new WidgetApplication(NDalicManualPINVOKE.WidgetApplication_New(argc, argvStr, stylesheet), true);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ internal WidgetApplication(WidgetApplication widgetApplication) : this(NDalicManualPINVOKE.new_WidgetApplication__SWIG_1(WidgetApplication.getCPtr(widgetApplication)), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ internal WidgetApplication Assign(WidgetApplication widgetApplication)
+ {
+ WidgetApplication ret = new WidgetApplication(NDalicManualPINVOKE.WidgetApplication_Assign(swigCPtr, WidgetApplication.getCPtr(widgetApplication)), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// This starts the application.
+ /// </summary>
+ public void MainLoop()
+ {
+ NDalicManualPINVOKE.WidgetApplication_MainLoop(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ {
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ /// <summary>
+ /// This quits the application.
+ /// Tizen applications should use Lower to improve re-start performance unless they need to Quit completely.
+ /// </summary>
+ public void Quit()
+ {
+ NDalicManualPINVOKE.WidgetApplication_Quit(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Get window.
+ /// </summary>
+ /// <returns> The window for widget instance.</returns>
+ public Window GetWindow()
+ {
+ Window ret = new Window(NDalicManualPINVOKE.WidgetApplication_GetWindow(swigCPtr), true);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Get path application resources are stored at.
+ /// </summary>
+ /// <returns>The full path of the resources</returns>
+ public static string GetResourcePath()
+ {
+ string ret = NDalicManualPINVOKE.WidgetApplication_GetResourcePath();
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via widget app event signal.
+ /// </summary>
+ public class WidgetApplicationEventArgs : EventArgs
+ {
+ /// <summary>
+ /// Widget application.
+ /// </summary>
+ public WidgetApplication WidgetApplication
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void InitCallbackType(IntPtr widgetApplication);
+ private InitCallbackType _initCallback;
+ private DaliEventHandler<object,WidgetApplicationEventArgs> _initEventHandler;
+
+ /// <summary>
+ /// Init event.
+ /// </summary>
+ public event DaliEventHandler<object, WidgetApplicationEventArgs> Init
+ {
+ add
+ {
+ if (_initEventHandler == null)
+ {
+ _initCallback = new InitCallbackType( OnInit);
+ InitSignal().Connect(_initCallback);
+ }
+
+ _initEventHandler += value;
+ }
+
+ remove
+ {
+ _initEventHandler -= value;
+
+ if (_initEventHandler == null && InitSignal().Empty() == false)
+ {
+ InitSignal().Disconnect(_initCallback);
+ }
+ }
+ }
+
+ private void OnInit(IntPtr widgetApplication)
+ {
+ WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+ if (widgetApplication != null)
+ {
+ e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+ }
+
+ if (_initEventHandler != null)
+ {
+ _initEventHandler(this, e);
+ }
+ }
+
+ internal AppSignalType InitSignal()
+ {
+ AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_InitSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void TerminateCallbackType(IntPtr widgetApplication);
+ private TerminateCallbackType _terminateCallback;
+ private DaliEventHandler<object, WidgetApplicationEventArgs> _terminateEventHandler;
+
+ /// <summary>
+ /// Terminate event.
+ /// </summary>
+ public event DaliEventHandler<object, WidgetApplicationEventArgs> Terminate
+ {
+ add
+ {
+ if (_terminateEventHandler == null)
+ {
+ _terminateCallback = new TerminateCallbackType( OnTerminate);
+ TerminateSignal().Connect(_terminateCallback);
+ }
+
+ _terminateEventHandler += value;
+ }
+
+ remove
+ {
+ _terminateEventHandler -= value;
+
+ if (_terminateEventHandler == null && TerminateSignal().Empty() == false)
+ {
+ TerminateSignal().Disconnect(_terminateCallback);
+ }
+ }
+ }
+
+ private void OnTerminate(IntPtr widgetApplication)
+ {
+ WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+ if (widgetApplication != null)
+ {
+ e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+ }
+
+ if (_terminateEventHandler != null)
+ {
+ _terminateEventHandler(this, e);
+ }
+ }
+
+ internal AppSignalType TerminateSignal()
+ {
+ AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_TerminateSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void LanguageChangedCallbackType(IntPtr widgetApplication);
+ private LanguageChangedCallbackType _languageChangedCallback;
+ private DaliEventHandler<object, WidgetApplicationEventArgs> _languageChangedEventHandler;
+
+ /// <summary>
+ /// LanguageChanged event.
+ /// </summary>
+ public event DaliEventHandler<object, WidgetApplicationEventArgs> LanguageChanged
+ {
+ add
+ {
+ if (_languageChangedEventHandler == null)
+ {
+ _languageChangedCallback = new LanguageChangedCallbackType( OnLanguageChanged);
+ LanguageChangedSignal().Connect(_languageChangedCallback);
+ }
+
+ _languageChangedEventHandler += value;
+ }
+
+ remove
+ {
+ _languageChangedEventHandler -= value;
+
+ if (_languageChangedEventHandler == null && LanguageChangedSignal().Empty() == false)
+ {
+ LanguageChangedSignal().Disconnect(_languageChangedCallback);
+ }
+ }
+ }
+
+ private void OnLanguageChanged(IntPtr widgetApplication)
+ {
+ WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+ if (widgetApplication != null)
+ {
+ e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+ }
+
+ if (_languageChangedEventHandler != null)
+ {
+ _languageChangedEventHandler(this, e);
+ }
+ }
+
+ internal AppSignalType LanguageChangedSignal()
+ {
+ AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_LanguageChangedSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void RegionChangedCallbackType(IntPtr widgetApplication);
+ private RegionChangedCallbackType _regionChangedCallback;
+ private DaliEventHandler<object, WidgetApplicationEventArgs> _regionChangedEventHandler;
+
+ /// <summary>
+ /// RegionChanged event.
+ /// </summary>
+ public event DaliEventHandler<object, WidgetApplicationEventArgs> RegionChanged
+ {
+ add
+ {
+ if (_regionChangedEventHandler == null)
+ {
+ _regionChangedCallback = new RegionChangedCallbackType( OnRegionChanged );
+ RegionChangedSignal().Connect(_regionChangedCallback);
+ }
+
+ _regionChangedEventHandler += value;
+ }
+
+ remove
+ {
+ _regionChangedEventHandler -= value;
+
+ if (_regionChangedEventHandler == null && RegionChangedSignal().Empty() == false)
+ {
+ RegionChangedSignal().Disconnect(_regionChangedCallback);
+ }
+ }
+ }
+
+ private void OnRegionChanged(IntPtr widgetApplication)
+ {
+ WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+ if (widgetApplication != null)
+ {
+ e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+ }
+
+ if (_regionChangedEventHandler != null)
+ {
+ _regionChangedEventHandler(this, e);
+ }
+ }
+
+ internal AppSignalType RegionChangedSignal()
+ {
+ AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_RegionChangedSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void BatteryLowCallbackType(IntPtr widgetApplication);
+ private BatteryLowCallbackType _batteryLowCallback;
+ private DaliEventHandler<object, WidgetApplicationEventArgs> _batteryLowEventHandler;
+
+ /// <summary>
+ /// BatteryLow event.
+ /// </summary>
+ public event DaliEventHandler<object, WidgetApplicationEventArgs> BatteryLow
+ {
+ add
+ {
+ if (_batteryLowEventHandler == null)
+ {
+ _batteryLowCallback = new BatteryLowCallbackType( OnBatteryLow );
+ BatteryLowSignal().Connect(_batteryLowCallback);
+ }
+
+ _batteryLowEventHandler += value;
+ }
+
+ remove
+ {
+ _batteryLowEventHandler -= value;
+
+ if (_batteryLowEventHandler == null && BatteryLowSignal().Empty() == false)
+ {
+ BatteryLowSignal().Disconnect(_batteryLowCallback);
+ }
+ }
+ }
+
+ private void OnBatteryLow(IntPtr widgetApplication)
+ {
+ WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+ if (widgetApplication != null)
+ {
+ e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+ }
+
+ if (_batteryLowEventHandler != null)
+ {
+ _batteryLowEventHandler(this, e);
+ }
+ }
+
+ internal AppSignalType BatteryLowSignal()
+ {
+ AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_BatteryLowSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void MemoryLowCallbackType(IntPtr widgetApplication);
+ private MemoryLowCallbackType _memoryLowCallback;
+ private DaliEventHandler<object, WidgetApplicationEventArgs> _memoryLowEventHandler;
+
+ /// <summary>
+ /// MemoryLow event.
+ /// </summary>
+ public event DaliEventHandler<object, WidgetApplicationEventArgs> MemoryLow
+ {
+ add
+ {
+ if (_memoryLowEventHandler == null)
+ {
+ _memoryLowCallback = new MemoryLowCallbackType (OnMemoryLow);
+ MemoryLowSignal().Connect(_memoryLowCallback);
+ }
+
+ _memoryLowEventHandler += value;
+ }
+
+ remove
+ {
+ _memoryLowEventHandler -= value;
+
+ if (_memoryLowEventHandler == null && MemoryLowSignal().Empty() == false)
+ {
+ MemoryLowSignal().Disconnect(_memoryLowCallback);
+ }
+ }
+ }
+
+ private void OnMemoryLow(IntPtr widgetApplication)
+ {
+ WidgetApplicationEventArgs e = new WidgetApplicationEventArgs();
+
+ if (widgetApplication != null)
+ {
+ e.WidgetApplication = WidgetApplication.GetWidgetApplicationFromPtr(widgetApplication);
+ }
+
+ if (_memoryLowEventHandler != null)
+ {
+ _memoryLowEventHandler(this, e);
+ }
+ }
+
+ internal AppSignalType MemoryLowSignal()
+ {
+ AppSignalType ret = new AppSignalType(NDalicManualPINVOKE.WidgetApplication_MemoryLowSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public delegate void InitDelegate();
+
+ public delegate void TerminateDelegate();
+
+ public delegate void LanguageChangedDelegate();
+
+ public delegate void RegionChangedDelegate();
+
+ public delegate void BatteryLowDelegate();
+
+ public delegate void MemoryLowDelegate();
+
+ [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+ internal delegate void InitDelegateInternal();
+
+ [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+ internal delegate void TerminateDelegateInternal();
+
+ [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+ internal delegate void LanguageChangedDelegateInternal();
+
+ [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+ internal delegate void RegionChangedDelegateInternal();
+
+ [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+ internal delegate void BatteryLowDelegateInternal();
+
+ [System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)]
+ internal delegate void MemoryLowDelegateInternal();
+
+ static void Initialization()
+ {
+ // instance.InitDelegate();
+ }
+
+ private static WidgetApplication _instance; //singleton
+
+ }
+
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+ internal class WidgetInstanceCreateSignalType : global::System.IDisposable
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal WidgetInstanceCreateSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+ {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceCreateSignalType obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ //A Flag to check who called Dispose(). (By User or DisposeQueue)
+ private bool isDisposeQueued = false;
+ //A Flat to check if it is already disposed.
+ protected bool disposed = false;
+
+ ~WidgetInstanceCreateSignalType()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ System.GC.SuppressFinalize(this);
+ }
+ }
+
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetInstanceCreateSignalType(swigCPtr);
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ disposed = true;
+ }
+
+ public bool Empty()
+ {
+ bool ret = NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Empty(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public uint GetConnectionCount()
+ {
+ uint ret = NDalicManualPINVOKE.WidgetInstanceCreateSignalType_GetConnectionCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public void Connect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Disconnect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Emit(WidgetData arg1, SWIGTYPE_p_bundle arg2, Uint16Pair arg3)
+ {
+ NDalicManualPINVOKE.WidgetInstanceCreateSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), SWIGTYPE_p_bundle.getCPtr(arg2), Uint16Pair.getCPtr(arg3));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ public WidgetInstanceCreateSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceCreateSignalType(), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ }
+
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+ internal class WidgetInstancePauseOrResumeSignalType : global::System.IDisposable
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal WidgetInstancePauseOrResumeSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+ {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstancePauseOrResumeSignalType obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ //A Flag to check who called Dispose(). (By User or DisposeQueue)
+ private bool isDisposeQueued = false;
+ //A Flat to check if it is already disposed.
+ protected bool disposed = false;
+
+ ~WidgetInstancePauseOrResumeSignalType()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ System.GC.SuppressFinalize(this);
+ }
+ }
+
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetInstancePauseOrResumeSignalType(swigCPtr);
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ disposed = true;
+ }
+
+ public bool Empty()
+ {
+ bool ret = NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Empty(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public uint GetConnectionCount()
+ {
+ uint ret = NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_GetConnectionCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public void Connect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Disconnect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Emit(WidgetData arg)
+ {
+ NDalicManualPINVOKE.WidgetInstancePauseOrResumeSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ public WidgetInstancePauseOrResumeSignalType() : this(NDalicManualPINVOKE.new_WidgetInstancePauseOrResumeSignalType(), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ }
+
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+ internal class WidgetInstanceResizeSignalType : global::System.IDisposable
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal WidgetInstanceResizeSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+ {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceResizeSignalType obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ //A Flag to check who called Dispose(). (By User or DisposeQueue)
+ private bool isDisposeQueued = false;
+ //A Flat to check if it is already disposed.
+ protected bool disposed = false;
+
+ ~WidgetInstanceResizeSignalType()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ System.GC.SuppressFinalize(this);
+ }
+ }
+
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetInstanceResizeSignalType(swigCPtr);
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ disposed = true;
+ }
+
+ public bool Empty()
+ {
+ bool ret = NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Empty(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public uint GetConnectionCount()
+ {
+ uint ret = NDalicManualPINVOKE.WidgetInstanceResizeSignalType_GetConnectionCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public void Connect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Disconnect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Emit(WidgetData arg1, Uint16Pair arg2)
+ {
+ NDalicManualPINVOKE.WidgetInstanceResizeSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), Uint16Pair.getCPtr(arg2));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ public WidgetInstanceResizeSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceResizeSignalType(), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ }
+
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+namespace Tizen.NUI
+{
+
+ internal class WidgetInstanceTerminateSignalType : global::System.IDisposable
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal WidgetInstanceTerminateSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+ {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceTerminateSignalType obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ //A Flag to check who called Dispose(). (By User or DisposeQueue)
+ private bool isDisposeQueued = false;
+ //A Flat to check if it is already disposed.
+ protected bool disposed = false;
+
+ ~WidgetInstanceTerminateSignalType()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ System.GC.SuppressFinalize(this);
+ }
+ }
+
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetInstanceTerminateSignalType(swigCPtr);
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ disposed = true;
+ }
+
+ public bool Empty()
+ {
+ bool ret = NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Empty(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public uint GetConnectionCount()
+ {
+ uint ret = NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_GetConnectionCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public void Connect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Disconnect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Emit(WidgetData arg1, SWIGTYPE_p_bundle arg2, Widget.WidgetTerminateType arg3)
+ {
+ NDalicManualPINVOKE.WidgetInstanceTerminateSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), SWIGTYPE_p_bundle.getCPtr(arg2), (int)arg3);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ public WidgetInstanceTerminateSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceTerminateSignalType(), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ }
+
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+
+ internal class WidgetInstanceUpdateSignalType : global::System.IDisposable
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+ protected bool swigCMemOwn;
+
+ internal WidgetInstanceUpdateSignalType(global::System.IntPtr cPtr, bool cMemoryOwn)
+ {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetInstanceUpdateSignalType obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ //A Flag to check who called Dispose(). (By User or DisposeQueue)
+ private bool isDisposeQueued = false;
+ //A Flat to check if it is already disposed.
+ protected bool disposed = false;
+
+ ~WidgetInstanceUpdateSignalType()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ System.GC.SuppressFinalize(this);
+ }
+ }
+
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetInstanceUpdateSignalType(swigCPtr);
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ disposed = true;
+ }
+
+ public bool Empty()
+ {
+ bool ret = NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Empty(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public uint GetConnectionCount()
+ {
+ uint ret = NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_GetConnectionCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ public void Connect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Connect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Disconnect(System.Delegate func)
+ {
+ System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(func);
+ {
+ NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Disconnect(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+
+ public void Emit(WidgetData arg1, SWIGTYPE_p_bundle arg2, int arg3)
+ {
+ NDalicManualPINVOKE.WidgetInstanceUpdateSignalType_Emit(swigCPtr, WidgetData.getCPtr(arg1), SWIGTYPE_p_bundle.getCPtr(arg2), arg3);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ public WidgetInstanceUpdateSignalType() : this(NDalicManualPINVOKE.new_WidgetInstanceUpdateSignalType(), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ }
+
+}
{
public class ApplicationException : Exception
{
- public ApplicationException()
+ public ApplicationException(): base()
{
- new global::System.ApplicationException();
+ //add anything required
}
- public ApplicationException(string message)
+ public ApplicationException(string message): base(message)
{
- new global::System.ApplicationException(message);
+ //add anything required
}
- public ApplicationException(string message, Exception innerException)
+ public ApplicationException(string message, Exception innerException): base(message, innerException)
{
- new global::System.ApplicationException(message, innerException);
+ //add anything required
}
}
public class SystemException : Exception
{
- public SystemException()
+ public SystemException(): base()
{
- new global::System.SystemException();
+ //add anything required
}
- public SystemException(string message)
+ public SystemException(string message): base(message)
{
- new global::System.SystemException(message);
+ //add anything required
}
- public SystemException(string message, Exception innerException)
+ public SystemException(string message, Exception innerException): base(message, innerException)
{
- new global::System.SystemException(message, innerException);
+ //add anything required
}
}
}
}
+ if (_animationFinishedEventCallback != null)
+ {
+ FinishedSignal().Disconnect(_animationFinishedEventCallback);
+ }
+
+ if (_animationProgressReachedEventCallback != null)
+ {
+
+ ProgressReachedSignal().Disconnect(_animationProgressReachedEventCallback);
+ }
+
if(this)
{
this.Clear();
//throw new System.InvalidOperationException("Animation Instance should not be disposed until getting Finished event. Should be a global variable");
}
-
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
if (_animationProgressReachedEventHandler == null && ProgressReachedSignal().Empty() == false)
{
NUILog.Debug("[remove before]ProgressReachedSignal().Empty=" + FinishedSignal().Empty() + " GetConnectionCount=" + FinishedSignal().GetConnectionCount());
- ProgressReachedSignal().Disconnect(_animationProgressReachedEventHandler);
+ ProgressReachedSignal().Disconnect(_animationProgressReachedEventCallback);
NUILog.Debug("[remove after]ProgressReachedSignal().Empty=" + FinishedSignal().Empty() + " GetConnectionCount=" + FinishedSignal().GetConnectionCount());
}
}
return ret;
}
+ private static bool? disableAnimation = null;
+ private bool DisableAnimation
+ {
+ get
+ {
+ if (disableAnimation.HasValue == false)
+ {
+ string type = Environment.GetEnvironmentVariable("PlatformSmartType");
+ if (type == "Entry")
+ disableAnimation = true;
+ else
+ disableAnimation = false;
+ }
+ return disableAnimation.Value;
+ }
+ }
+
/// <summary>
/// Plays the animation.
/// </summary>
{
NDalicPINVOKE.Animation_Play(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-#if DISABLE_ANIMATION
- Stop(EndActions.StopFinal);
-#endif
+
+ if (DisableAnimation == true)
+ Stop(EndActions.StopFinal);
}
/// <summary>
/// The delay time is not included in the looping time.<br/>
/// When the delay time is negative value, it would treat as play immediately.<br/>
/// </summary>
- /// <param name="delayMiliSeconds">The delay time</param>
- public void PlayAfter(int delayMiliSeconds)
+ /// <param name="delayMilliseconds">The delay time</param>
+ public void PlayAfter(int delayMilliseconds)
{
- NDalicPINVOKE.Animation_PlayAfter(swigCPtr, MilliSecondsToSeconds(delayMiliSeconds));
+ NDalicPINVOKE.Animation_PlayAfter(swigCPtr, MilliSecondsToSeconds(delayMilliseconds));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ DisConnectFromSignals();
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
base.Dispose(type);
}
+ private void DisConnectFromSignals()
+ {
+ // Save current CPtr.
+ global::System.Runtime.InteropServices.HandleRef currentCPtr = swigCPtr;
+
+ // Use BaseHandle CPtr as current might have been deleted already in derived classes.
+ swigCPtr = GetBaseHandleCPtrHandleRef;
+
+ if (_scrollableCompletedCallbackDelegate != null)
+ {
+ this.ScrollCompletedSignal().Disconnect(_scrollableCompletedCallbackDelegate);
+ }
+
+ if (_scrollableUpdatedCallbackDelegate != null)
+ {
+ this.ScrollUpdatedSignal().Disconnect(_scrollableUpdatedCallbackDelegate);
+ }
+
+ if (_scrollableStartedCallbackDelegate != null)
+ {
+ this.ScrollStartedSignal().Disconnect(_scrollableStartedCallbackDelegate);
+ }
+
+ // BaseHandle CPtr is used in Registry and there is danger of deletion if we keep using it here.
+ // Restore current CPtr.
+ swigCPtr = currentCPtr;
+ }
+
public class StartedEventArgs : EventArgs
{
private Vector2 _vector2;
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_textEditorTextChangedCallbackDelegate != null)
+ {
+ TextChangedSignal().Disconnect(_textEditorTextChangedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
}
switch (temp)
{
- case "WORD":
+ case "WRAP_MODE_WORD":
return LineWrapMode.Word;
- case "CHARACTER":
+ case "WRAP_MODE_CHARACTER":
return LineWrapMode.Character;
default:
return LineWrapMode.Word;
{
case LineWrapMode.Word:
{
- temp = "WORD";
+ temp = "WRAP_MODE_WORD";
break;
}
case LineWrapMode.Character:
{
- temp = "CHARACTER";
+ temp = "WRAP_MODE_CHARACTER";
break;
}
}
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_textFieldMaxLengthReachedCallbackDelegate != null)
+ {
+ this.MaxLengthReachedSignal().Disconnect(_textFieldMaxLengthReachedCallbackDelegate);
+ }
+
+ if (_textFieldTextChangedCallbackDelegate != null)
+ {
+ TextChangedSignal().Disconnect(_textFieldTextChangedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
}
/// <summary>
+ /// TextColorAnimatable property.<br>
+ /// The color of the text that can be animatated.<br>
+ /// Animation framework can be used to change the color of the text when not using mark up.<br>
+ /// Not possible when text is auto scrolling. <br>
+ /// </summary>
+ public Color TextColorAnimatable
+ {
+ get
+ {
+ Color animatableColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);
+ GetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE).Get(animatableColor);
+ return animatableColor;
+ }
+ set
+ {
+ SetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE, new Tizen.NUI.PropertyValue(value));
+ }
+ }
+
/// The line count of text.
/// </summary>
public int LineCount
}
switch (temp)
{
- case "WORD":
+ case "WRAP_MODE_WORD":
return LineWrapMode.Word;
- case "CHARACTER":
+ case "WRAP_MODE_CHARACTER":
return LineWrapMode.Character;
default:
return LineWrapMode.Word;
SetProperty(TextLabel.Property.LINE_WRAP_MODE, new Tizen.NUI.PropertyValue(temp));
}
}
-
- /// TextColorAnimatable property.<br>
- /// The color of the text that can be animatated.<br>
- /// Animation framework can be used to change the color of the text when not using mark up.<br>
- /// Not possible when text is auto scrolling. <br>
- /// </summary>
- public Color TextColorAnimatable
- {
- get
- {
- Color animatableColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);
- GetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE).Get(animatableColor);
- return animatableColor;
- }
- set
- {
- SetProperty(TextLabel.Property.TEXT_COLOR_ANIMATABLE, new Tizen.NUI.PropertyValue(value));
- }
- }
-
}
}
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_videoViewFinishedCallbackDelegate != null)
+ {
+ FinishedSignal().Disconnect(_videoViewFinishedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
using System;
using System.Runtime.InteropServices;
-
-
/// <summary>
/// View is the base class for all views.
/// </summary>
- public class View : Animatable //CustomActor => Animatable
+ public class View : Container
{
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
}
+ // From Container Base class
+
+ /// <summary>
+ /// Adds a child view to this View.
+ /// </summary>
+ /// <seealso cref="Container::Add()">
+ /// </seealso>
+ public override void Add(View child)
+ {
+ NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Removes a child View from this View. If the view was not a child of this view, this is a no-op.
+ /// </summary>
+ /// <seealso cref="Container::Remove()">
+ /// </seealso>
+ public override void Remove(View child)
+ {
+ NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Retrieves child view by index.
+ /// </summary>
+ /// <seealso cref="Container::GetChildAt()">
+ /// </seealso>
+ public override View GetChildAt(uint index)
+ {
+ IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
+
+ View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
+
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret ?? null;
+ }
+
+ /// <summary>
+ /// Retrieves the number of children held by the view.
+ /// </summary>
+ /// <seealso cref="Container::GetChildCount()">
+ /// </seealso>
+ protected override uint GetChildCount()
+ {
+ uint ret = NDalicPINVOKE.Actor_GetChildCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Get the Views parent
+ /// </summary>
+ /// <seealso cref="Container::GetParent()">
+ protected override Container GetParent()
+ {
+ Container ret;
+ IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
+
+ BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
+
+ if(basehandle is Layer)
+ {
+ ret = basehandle as Layer;
+ }
+ else
+ {
+ ret = basehandle as View;
+ }
+
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ ///
+
// you can override it to clean-up your own resources.
protected override void Dispose(DisposeTypes type)
{
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ DisConnectFromSignals();
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
base.Dispose(type);
}
+ private void DisConnectFromSignals()
+ {
+ // Save current CPtr.
+ global::System.Runtime.InteropServices.HandleRef currentCPtr = swigCPtr;
+
+ // Use BaseHandle CPtr as current might have been deleted already in derived classes.
+ swigCPtr = GetBaseHandleCPtrHandleRef;
+
+ if (_onRelayoutEventCallback != null)
+ {
+ this.OnRelayoutSignal().Disconnect(_onRelayoutEventCallback);
+ }
+
+ if (_offWindowEventCallback != null)
+ {
+ this.OffWindowSignal().Disconnect(_offWindowEventCallback);
+ }
+
+ if (_onWindowEventCallback != null)
+ {
+ this.OnWindowSignal().Disconnect(_onWindowEventCallback);
+ }
+
+ if (_wheelEventCallback != null)
+ {
+ this.WheelEventSignal().Disconnect(_wheelEventCallback);
+ }
+
+ if (_hoverEventCallback != null)
+ {
+ this.HoveredSignal().Disconnect(_hoverEventCallback);
+ }
+
+ if (_touchDataCallback != null)
+ {
+ this.TouchSignal().Disconnect(_touchDataCallback);
+ }
+
+ if (_ResourcesLoadedCallback != null)
+ {
+ this.ResourcesLoadedSignal().Disconnect(_ResourcesLoadedCallback);
+ }
+
+ if (_offWindowEventCallback != null)
+ {
+ this.OffWindowSignal().Disconnect(_offWindowEventCallback);
+ }
+
+ if (_onWindowEventCallback != null)
+ {
+ this.OnWindowSignal().Disconnect(_onWindowEventCallback);
+ }
+
+ if (_wheelEventCallback != null)
+ {
+ this.WheelEventSignal().Disconnect(_wheelEventCallback);
+ }
+
+ if (_hoverEventCallback != null)
+ {
+ this.HoveredSignal().Disconnect(_hoverEventCallback);
+ }
+
+ if (_touchDataCallback != null)
+ {
+ this.TouchSignal().Disconnect(_touchDataCallback);
+ }
+
+ if (_onRelayoutEventCallback != null)
+ {
+ this.OnRelayoutSignal().Disconnect(_onRelayoutEventCallback);
+ }
+
+ if (_keyCallback != null)
+ {
+ this.KeyEventSignal().Disconnect(_keyCallback);
+ }
+
+ if (_keyInputFocusLostCallback != null)
+ {
+ this.KeyInputFocusLostSignal().Disconnect(_keyInputFocusLostCallback);
+ }
+
+ if (_keyInputFocusGainedCallback != null)
+ {
+ this.KeyInputFocusGainedSignal().Disconnect(_keyInputFocusGainedCallback);
+ }
+
+ // BaseHandle CPtr is used in Registry and there is danger of deletion if we keep using it here.
+ // Restore current CPtr.
+ swigCPtr = currentCPtr;
+ }
+
private EventHandler _keyInputFocusGainedEventHandler;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate void KeyInputFocusGainedCallbackType(IntPtr control);
{
View view = null;
- if (Parent)
+ if (Parent is View)
{
- view = Parent.FindChildById(id);
+ View parentView = Parent as View;
+ view = parentView.FindChildById(id);
}
if (!view)
}
}
- /// <summary>
- /// Retrieves the view's parent.<br>
- /// </summary>
- public View Parent
- {
- get
- {
- return GetParent();
- }
- }
-
[Obsolete("Please do not use! this will be deprecated. Please use Visibility instead.")]
public bool Visible
{
}
/// <summary>
- /// Adds a child view to this View.
- /// </summary>
- /// <pre>This View(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent view.</pre>
- /// <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
- /// <remarks>If the child already has a parent, it will be removed from old parent and reparented to this view. This may change child's position, color, scale etc as it now inherits them from this view.</remarks>
- /// <param name="child">The child</param>
- public void Add(View child)
- {
- NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- }
-
- /// <summary>
- /// Removes a child View from this View. If the view was not a child of this view, this is a no-op.
- /// </summary>
- /// <pre>This View(the parent) has been initialized. The child view is not the same as the parent view.</pre>
- /// <param name="child">The child</param>
- public void Remove(View child)
- {
- NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- }
-
- /// <summary>
/// Removes a View from its Parent View / Layer. If the View has no parent, this method does nothing.
/// </summary>
/// <pre>The (child) View has been initialized. </pre>
}
/// <summary>
- /// Retrieves the number of children held by the view.
- /// </summary>
- /// <pre>The View has been initialized.</pre>
- /// <returns>The number of children</returns>
- internal uint GetChildCount()
- {
- uint ret = NDalicPINVOKE.Actor_GetChildCount(swigCPtr);
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- return ret;
- }
-
- /// <summary>
- /// Retrieves child view by index.
- /// </summary>
- /// <pre>The View has been initialized.</pre>
- /// <param name="index">The index of the child to retrieve</param>
- /// <returns>The view for the given index or empty handle if children not initialized</returns>
- public View GetChildAt(uint index)
- {
- IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
-
- View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
-
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- return ret ?? null;
- }
-
- /// <summary>
/// Search through this view's hierarchy for an view with the given name.
/// The view itself is also considered in the search.
/// </summary>
return ret;
}
- /*internal View GetParent()
- {
- View ret;
- IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
-
- BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
-
- if(basehandle is Layer)
- {
- ret = new View(cPtr,false);
- }
- else
- {
- ret = basehandle as View;
- }
-
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- return ret;
- }*/
-
- internal View GetParent()
- {
- View ret;
- IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
-
- BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
-
- if(basehandle is Layer)
- {
- View ret2 = new View(cPtr,false);
- return ret2;
- }
-
- ret = basehandle as View;
-
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- return ret;
- }
-
internal void SetParentOrigin(Vector3 origin)
{
NDalicPINVOKE.Actor_SetParentOrigin(swigCPtr, Vector3.getCPtr(origin));
}
}
+ [Obsolete("Please DO NOT use! This will be deprecated! Please use 'Container GetParent()' instead!")]
+ public View Parent
+ {
+ get
+ {
+ View ret;
+ IntPtr cPtr = NDalicPINVOKE.Actor_GetParent(swigCPtr);
+
+ BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(cPtr);
+
+ if (basehandle is Layer)
+ {
+ ret = new View(cPtr, false);
+ }
+ else
+ {
+ ret = basehandle as View;
+ }
+
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+ }
+
+
CustomViewRegistry.Instance.Register(CreateInstance, typeof(VisualView));
}
- public VisualView() : base(typeof(VisualView).Name, CustomViewBehaviour.ViewBehaviourDefault)
+ public VisualView() : base(typeof(VisualView).FullName, CustomViewBehaviour.ViewBehaviourDefault)
{
}
internal BaseHandle(global::System.IntPtr cPtr, bool cMemoryOwn)
{
+ //to catch derived classes dali native exceptions
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
_registerMe = swigCMemOwn = cMemoryOwn;
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
// using copy constructor to create another native handle so Registry.Unregister works fine.
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, NDalicPINVOKE.new_BaseHandle__SWIG_2(swigCPtr));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
if (_registerMe)
{
// using copy constructor to create another native handle so Registry.Unregister works fine.
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, NDalicPINVOKE.new_BaseHandle__SWIG_2(swigCPtr));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
if (_registerMe)
{
return ret;
}
+ internal global::System.Runtime.InteropServices.HandleRef GetBaseHandleCPtrHandleRef
+ {
+ get
+ {
+ return swigCPtr;
+ }
+ }
+
}
}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+using System;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI
+{
+ /// <summary>
+ ///
+ /// Container is an abstract class to be inherited from by classes that desire to have Views
+ /// added to them.
+ ///
+ /// </summary>
+
+ public abstract class Container : Animatable
+ {
+
+ internal Container(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
+ {
+ // No un-managed data hence no need to store a native ptr
+ }
+
+ protected override void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ base.Dispose(type);
+ }
+
+
+ /// <summary>
+ /// Adds a child view to this Container.
+ /// </summary>
+ /// <pre>This Container(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent view.</pre>
+ /// <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
+ /// <remarks>If the child already has a parent, it will be removed from old parent and reparented to this view. This may change child's position, color, scale etc as it now inherits them from this view.</remarks>
+ /// <param name="view">The child view to add</param>
+ public abstract void Add( View view );
+
+ /// <summary>
+ /// Removes a child View from this View. If the view was not a child of this view, this is a no-op.
+ /// </summary>
+ /// <pre>This View(the parent) has been initialized. The child view is not the same as the parent view.</pre>
+ /// <param name="child">The child</param>
+ public abstract void Remove( View view );
+
+ /// <summary>
+ /// Retrieves child view by index.
+ /// </summary>
+ /// <pre>The View has been initialized.</pre>
+ /// <param name="index">The index of the child to retrieve</param>
+ /// <returns>The view for the given index or empty handle if children not initialized</returns>
+ public abstract View GetChildAt( uint index );
+
+ /// <summary>
+ /// Get the parent of this container
+ /// </summary>
+ /// <pre>The child container has been initialized.</pre>
+ /// <returns>The parent container</returns>
+ protected abstract Container GetParent();
+
+ /// <summary>
+ /// Get the number of children for this container
+ /// </summary>
+ /// <pre>The container has been initialized.</pre>
+ /// <returns>number of children</returns>
+ protected abstract UInt32 GetChildCount();
+
+ /// <summary>
+ /// Get the parent Container
+ /// Read only
+ /// </summary>
+ /// <pre>The child container has been initialized.</pre>
+ /// <returns>The parent container</returns>
+ public Container Parent
+ {
+ get
+ {
+ return GetParent();
+ }
+ }
+
+ /// <summary>
+ /// Get the number of children for this container
+ /// Read only
+ /// </summary>
+ /// <pre>The container has been initialized.</pre>
+ /// <returns>number of children</returns>
+ public uint ChildCount
+ {
+ get
+ {
+ return GetChildCount();
+ }
+ }
+ }
+} // namespace Tizen.NUI
\ No newline at end of file
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_focusedViewEnterKeyEventCallback2 != null)
+ {
+ FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback2);
+ }
+
+ if (_focusedViewEnterKeyEventCallback != null)
+ {
+ FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback);
+ }
+
+ if (_focusGroupChangedEventCallback != null)
+ {
+ FocusGroupChangedSignal().Disconnect(_focusGroupChangedEventCallback);
+ }
+
+ if (_focusChangedEventCallback != null)
+ {
+ FocusChangedSignal().Disconnect(_focusChangedEventCallback);
+ }
+
+ if (_preFocusChangeCallback != null)
+ {
+ PreFocusChangeSignal().Disconnect(_preFocusChangeCallback);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
{
_focusedViewEnterKeyEventHandler -= value;
- if (_focusedViewEnterKeyEventCallback == null && FocusedViewEnterKeySignal().Empty() == false)
+ if (_focusedViewEnterKeyEventCallback != null && FocusedViewEnterKeySignal().Empty() == false)
{
FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback);
}
{
_focusedViewEnterKeyEventHandler2 -= value;
- if (_focusedViewEnterKeyEventCallback2 == null && FocusedViewEnterKeySignal().Empty() == false)
+ if (_focusedViewEnterKeyEventCallback2 != null && FocusedViewEnterKeySignal().Empty() == false)
{
FocusedViewEnterKeySignal().Disconnect(_focusedViewEnterKeyEventCallback2);
}
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
- if (swigCPtr.Handle != IntPtr.Zero)
+ if (_keyboardTypeChangedEventCallback != null)
+ {
+ KeyboardTypeChangedSignal().Disconnect(_keyboardTypeChangedEventCallback);
+ }
+
+ if (_imfManagerLanguageChangedEventCallback != null)
+ {
+ LanguageChangedSignal().Disconnect(_imfManagerLanguageChangedEventCallback);
+ }
+
+ if (_imfManagerResizedEventCallback != null)
+ {
+ ResizedSignal().Disconnect(_imfManagerResizedEventCallback);
+ }
+
+ if (_imfManagerStatusChangedEventCallback != null)
+ {
+ StatusChangedSignal().Disconnect(_imfManagerStatusChangedEventCallback);
+ }
+
+ if (_imfManagerEventReceivedEventCallback != null)
+ {
+ EventReceivedSignal().Disconnect(_imfManagerEventReceivedEventCallback);
+ }
+
+ if (_imfManagerActivatedEventCallback != null)
+ {
+ ActivatedSignal().Disconnect(_imfManagerActivatedEventCallback);
+ }
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
{
/// <summary>
/// Layers provide a mechanism for overlaying groups of actors on top of each other.
/// </summary>
- public class Layer : Animatable
+ public class Layer : Container
{
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
}
+ /// from Container base class
+
+ /// <summary>
+ /// Adds a child view to this layer.
+ /// </summary>
+ /// <seealso cref="Container::Add()">
+ /// </seealso>
+ public override void Add(View child)
+ {
+ NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Removes a child View from this layer. If the view was not a child of this layer, this is a no-op.
+ /// </summary>
+ /// <seealso cref="Container::Add()">
+ /// </seealso>
+ public override void Remove(View child)
+ {
+ NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Retrieves child view by index.
+ /// </summary>
+ /// <pre>The View has been initialized.</pre>
+ /// <param name="index">The index of the child to retrieve</param>
+ /// <returns>The view for the given index or empty handle if children not initialized</returns>
+ public override View GetChildAt(uint index)
+ {
+ System.IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
+
+ View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
+
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+
+ return ret ?? null;
+ }
+
+
+ protected override Container GetParent()
+ {
+ return null;
+ }
+
+ protected override uint GetChildCount()
+ {
+ uint ret = NDalicPINVOKE.Actor_GetChildCount(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
protected override void Dispose(DisposeTypes type)
{
if(disposed)
}
/// <summary>
- /// Adds a child view to this layer.
- /// </summary>
- /// <pre>This layer(the parent) has been initialized. The child view has been initialized. The child view is not the same as the parent layer.</pre>
- /// <post>The child will be referenced by its parent. This means that the child will be kept alive, even if the handle passed into this method is reset or destroyed.</post>
- /// <remarks>If the child already has a parent, it will be removed from old parent and reparented to this layer. This may change child's position, color, scale etc as it now inherits them from this layer.</remarks>
- /// <param name="child">The child</param>
- public void Add(View child)
- {
- NDalicPINVOKE.Actor_Add(swigCPtr, View.getCPtr(child));
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- }
-
- /// <summary>
- /// Removes a child View from this layer. If the view was not a child of this layer, this is a no-op.
- /// </summary>
- /// <pre>This layer(the parent) has been initialized. The child view is not the same as the parent view.</pre>
- /// <param name="child">The child</param>
- public void Remove(View child)
- {
- NDalicPINVOKE.Actor_Remove(swigCPtr, View.getCPtr(child));
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
- }
-
- /// <summary>
/// Queries the depth of the layer.<br>
/// 0 is the bottom most layer, higher number is on top.<br>
/// </summary>
}
/// <summary>
- /// Retrieves child view by index.
- /// </summary>
- /// <pre>The View has been initialized.</pre>
- /// <param name="index">The index of the child to retrieve</param>
- /// <returns>The view for the given index or empty handle if children not initialized</returns>
- public View GetChildAt(uint index)
- {
- System.IntPtr cPtr = NDalicPINVOKE.Actor_GetChildAt(swigCPtr, index);
-
- View ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as View;
-
- if (NDalicPINVOKE.SWIGPendingException.Pending)
- throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-
- return ret ?? null;
- }
-
- /// <summary>
/// Enumeration for the behavior of the layer.
/// </summary>
public enum LayerBehavior
if (NDalicPINVOKE.SWIGPendingException.Pending)
throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
+
}
}
}
/// <summary>
+ /// Ensures that the function passed in is called from the main loop when it is idle.
+ /// </summary>
+ /// <param name="func">The function to call</param>
+ /// <returns>true if added successfully, false otherwise</returns>
+ public bool AddIdle(System.Delegate func)
+ {
+ return ((NUICoreBackend)this.Backend).AddIdle(func);
+ }
+
+ /// <summary>
/// Enumeration for deciding whether a NUI application window is opaque or transparent.
/// </summary>
public enum WindowMode
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using Tizen.Applications;
+using Tizen.Applications.CoreBackend;
+using Tizen.NUI;
+
+namespace Tizen.NUI
+{
+
+ /// <summary>
+ /// Represents an application that have UI screen. The NUIWidgetApplication class has a default stage.
+ /// </summary>
+ public class NUIWidgetApplication : CoreApplication
+ {
+
+ /// <summary>
+ /// The default constructor.
+ /// </summary>
+ public NUIWidgetApplication() : base(new NUIWidgetCoreBackend())
+ {
+ Tizen.Log.Fatal("NUI", "### NUIWidgetApplication called");
+ }
+
+ /// <summary>
+ /// The constructor with stylesheet.
+ /// </summary>
+ public NUIWidgetApplication(string stylesheet) : base(new NUIWidgetCoreBackend(stylesheet))
+ {
+ Tizen.Log.Fatal("NUI", "### NUIWidgetApplication(string) called");
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected override void OnLocaleChanged(LocaleChangedEventArgs e)
+ {
+ Log.Fatal("NUI", "OnLocaleChanged() is called!");
+ base.OnLocaleChanged(e);
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected override void OnLowBattery(LowBatteryEventArgs e)
+ {
+ Log.Fatal("NUI", "OnLowBattery() is called!");
+ base.OnLowBattery(e);
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected override void OnLowMemory(LowMemoryEventArgs e)
+ {
+ Log.Fatal("NUI", "OnLowMemory() is called!");
+ base.OnLowMemory(e);
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)
+ {
+ Log.Fatal("NUI", "OnRegionFormatChanged() is called!");
+ base.OnRegionFormatChanged(e);
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected override void OnTerminate()
+ {
+ Log.Fatal("NUI", "OnTerminate() is called!");
+ base.OnTerminate();
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected virtual void OnPreCreate()
+ {
+ Log.Fatal("NUI", "OnPreCreate() is called!");
+ }
+
+ /// <summary>
+ /// Overrides this method if want to handle behavior.
+ /// </summary>
+ protected override void OnCreate()
+ {
+ // This is also required to create DisposeQueue on main thread.
+ DisposeQueue disposeQ = DisposeQueue.Instance;
+ disposeQ.Initialize();
+ Log.Fatal("NUI","OnCreate() is called!");
+ base.OnCreate();
+ }
+
+ /// <summary>
+ /// Run NUIWidgetApplication.
+ /// </summary>
+ /// <param name="args">Arguments from commandline.</param>
+ public override void Run(string[] args)
+ {
+ Backend.AddEventHandler(EventType.PreCreated, OnPreCreate);
+ base.Run(args);
+ }
+
+ /// <summary>
+ /// Exit NUIWidgetApplication.
+ /// </summary>
+ public override void Exit()
+ {
+ Tizen.Log.Fatal("NUI", "### NUIWidgetApplication Exit called");
+ base.Exit();
+ }
+
+ internal WidgetApplication ApplicationHandle
+ {
+ get
+ {
+ return ((NUIWidgetCoreBackend)this.Backend).WidgetApplicationHandle;
+ }
+ }
+
+ /// <summary>
+ /// Get the window instance.
+ /// </summary>
+ public Window Window
+ {
+ get
+ {
+ //return Window.Instance;
+ return ApplicationHandle.GetWindow();
+ }
+ }
+ }
+}
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_styleManagerStyleChangedCallbackDelegate != null)
+ {
+ StyleChangedSignal().Disconnect(_styleManagerStyleChangedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_stateChangedEventCallback != null)
+ {
+ StateChangedSignal().Disconnect(_stateChangedEventCallback);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_timerTickCallbackDelegate != null)
+ {
+ TickSignal().Disconnect(_timerTickCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ DisConnectFromSignals();
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
base.Dispose(type);
}
+ private void DisConnectFromSignals()
+ {
+ // Save current CPtr.
+ global::System.Runtime.InteropServices.HandleRef currentCPtr = swigCPtr;
+
+ // Use BaseHandle CPtr as current might have been deleted already in derived classes.
+ swigCPtr = GetBaseHandleCPtrHandleRef;
+
+ if (_stateChangedCallback != null)
+ {
+ StateChangedSignal().Disconnect(_stateChangedCallback);
+ }
+
+ if (_releasedCallback != null)
+ {
+ ReleasedSignal().Disconnect(_releasedCallback);
+ }
+
+ if (_pressedCallback != null)
+ {
+ this.PressedSignal().Disconnect(_pressedCallback);
+ }
+
+ if (_clickedCallback != null)
+ {
+ ClickedSignal().Disconnect(_clickedCallback);
+ }
+
+ // BaseHandle CPtr is used in Registry and there is danger of deletion if we keep using it here.
+ // Restore current CPtr.
+ swigCPtr = currentCPtr;
+ }
+
private EventHandlerWithReturnType<object, EventArgs, bool> _clickedEventHandler;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_popUpHiddenEventCallbackDelegate != null)
+ {
+ HiddenSignal().Disconnect(_popUpHiddenEventCallbackDelegate);
+ }
+
+ if (_popUpHidingEventCallbackDelegate != null)
+ {
+ HidingSignal().Disconnect(_popUpHidingEventCallbackDelegate);
+ }
+
+ if (_popUpShownEventCallbackDelegate != null)
+ {
+ ShownSignal().Disconnect(_popUpShownEventCallbackDelegate);
+ }
+
+ if (_popUpShowingEventCallbackDelegate != null)
+ {
+ ShowingSignal().Disconnect(_popUpShowingEventCallbackDelegate);
+ }
+
+ if (_popUpOutsideTouchedEventCallbackDelegate != null)
+ {
+ this.OutsideTouchedSignal().Disconnect(_popUpOutsideTouchedEventCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_progressBarValueChangedCallbackDelegate != null)
+ {
+ ValueChangedSignal().Disconnect(_progressBarValueChangedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_scrollBarScrollPositionIntervalReachedEventCallbackDelegate != null)
+ {
+ ScrollPositionIntervalReachedSignal().Disconnect(_scrollBarScrollPositionIntervalReachedEventCallbackDelegate);
+ }
+
+ if (_scrollBarPanFinishedEventCallbackDelegate != null)
+ {
+ PanFinishedSignal().Disconnect(_scrollBarPanFinishedEventCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_scrollViewSnapStartedCallbackDelegate != null)
+ {
+ this.SnapStartedSignal().Disconnect(_scrollViewSnapStartedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_sliderValueChangedCallbackDelegate != null)
+ {
+ ValueChangedSignal().Disconnect(_sliderValueChangedCallbackDelegate);
+ }
+
+ if (_sliderSlidingFinishedCallbackDelegate != null)
+ {
+ SlidingFinishedSignal().Disconnect(_sliderSlidingFinishedCallbackDelegate);
+ }
+
+ if (_sliderMarkReachedCallbackDelegate != null)
+ {
+ MarkReachedSignal().Disconnect(_sliderMarkReachedCallbackDelegate);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
_visualSize = value;
if (_visualSizePolicy == null)
{
- _visualSizePolicy = new Vector2(0.0f, 0.0f);
+ _visualSizePolicy = new Vector2(1.0f, 1.0f);
}
UpdateVisual();
}
_visualOffset = value;
if (_visualOffsetPolicy == null)
{
- _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
+ _visualOffsetPolicy = new Vector2(1.0f, 1.0f);
}
UpdateVisual();
}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+using System;
+using System.Runtime.InteropServices;
+using Tizen.Applications;
+
+namespace Tizen.NUI
+{
+ /// <summary>
+ /// Widget object should be created by WidgetApplication.
+ /// </summary>
+ public class Widget : BaseHandle
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+ internal Widget(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.Widget_SWIGUpcast(cPtr), cMemoryOwn)
+ {
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Widget obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ /// <summary>
+ /// To make Widget instance be disposed.
+ /// </summary>
+ protected override void Dispose(DisposeTypes type)
+ {
+ if(disposed)
+ {
+ return;
+ }
+
+ if(type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ if (swigCMemOwn)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_Widget(swigCPtr);
+ }
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ base.Dispose(type);
+ }
+
+ /// <summary>
+ /// This is the constructor for Widget.
+ /// </summary>
+ /// <param name="id">for widget instance</param>
+ public Widget(string id) : this(NDalicManualPINVOKE.Widget_New(id), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ internal Widget(Widget widget) : this(NDalicManualPINVOKE.new_Widget__SWIG_1(Widget.getCPtr(widget)), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ internal Widget Assign(Widget widget)
+ {
+ Widget ret = new Widget(NDalicManualPINVOKE.Widget_Assign(swigCPtr, Widget.getCPtr(widget)), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via KeyEvent signal.
+ /// </summary>
+ public class CreateEventArgs : EventArgs
+ {
+ /// <summary>
+ /// widget data.
+ /// </summary>
+ public WidgetData WidgetData
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// a bundle.
+ /// </summary>
+ public SWIGTYPE_p_bundle Bundle
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// window size.
+ /// </summary>
+ public Size2D WindowSize
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void CreateCallbackType(IntPtr widgetData, IntPtr bundle, IntPtr windowSize);
+ private CreateCallbackType _createCallback;
+ private EventHandler<CreateEventArgs> _createEventHandler;
+
+ /// <summary>
+ /// Create event.
+ /// </summary>
+ public event EventHandler<CreateEventArgs> Create
+ {
+ add
+ {
+ if (_createEventHandler == null)
+ {
+ _createCallback = OnCreate;
+ CreateSignal().Connect(_createCallback);
+ }
+
+ _createEventHandler += value;
+ }
+
+ remove
+ {
+ _createEventHandler -= value;
+
+ if (_createEventHandler == null && CreateSignal().Empty() == false)
+ {
+ CreateSignal().Disconnect(_createCallback);
+ }
+ }
+ }
+
+ private void OnCreate(IntPtr widgetData, IntPtr bundle, IntPtr windowSize)
+ {
+ CreateEventArgs e = new CreateEventArgs();
+ if (widgetData != null)
+ {
+ e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+ }
+ if (bundle != null)
+ {
+ e.Bundle = new SWIGTYPE_p_bundle(bundle, false);
+ }
+ if (windowSize != null)
+ {
+ var val = new Uint16Pair(windowSize, false);
+ e.WindowSize = val;
+ val.Dispose();
+ }
+
+ _createEventHandler?.Invoke(this, e);
+ }
+
+ internal WidgetInstanceCreateSignalType CreateSignal()
+ {
+ WidgetInstanceCreateSignalType ret = new WidgetInstanceCreateSignalType(NDalicManualPINVOKE.Widget_CreateSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via terminate event signal.
+ /// </summary>
+ public class TerminateEventArgs : EventArgs
+ {
+ /// <summary>
+ /// widget data.
+ /// </summary>
+ public WidgetData WidgetData
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// a bundle.
+ /// </summary>
+ public SWIGTYPE_p_bundle Bundle
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// widget terminate type.
+ /// </summary>
+ public WidgetTerminateType WidgetTerminateType
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void TerminateCallbackType(IntPtr widgetData, IntPtr bundle, WidgetTerminateType widgetTerminateType);
+ private TerminateCallbackType _terminateCallback;
+ private EventHandler<TerminateEventArgs> _terminateEventHandler;
+
+ /// <summary>
+ /// Terminate event.
+ /// </summary>
+ public event EventHandler<TerminateEventArgs> Terminate
+ {
+ add
+ {
+ if (_terminateEventHandler == null)
+ {
+ _terminateCallback = OnTerminate;
+ TerminateSignal().Connect(_terminateCallback);
+ }
+
+ _terminateEventHandler += value;
+ }
+
+ remove
+ {
+ _terminateEventHandler -= value;
+
+ if (_terminateEventHandler == null && TerminateSignal().Empty() == false)
+ {
+ TerminateSignal().Disconnect(_terminateCallback);
+ }
+ }
+ }
+
+ private void OnTerminate(IntPtr widgetData, IntPtr bundle, WidgetTerminateType widgetTerminateType)
+ {
+ TerminateEventArgs e = new TerminateEventArgs();
+ if (widgetData != null)
+ {
+ e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+ }
+ if (bundle != null)
+ {
+ e.Bundle = new SWIGTYPE_p_bundle(bundle, false);
+ }
+
+ e.WidgetTerminateType = widgetTerminateType;
+ _terminateEventHandler?.Invoke(this, e);
+ }
+
+ internal WidgetInstanceTerminateSignalType TerminateSignal()
+ {
+ WidgetInstanceTerminateSignalType ret = new WidgetInstanceTerminateSignalType(NDalicManualPINVOKE.Widget_TerminateSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via pause event signal.
+ /// </summary>
+ public class PauseEventArgs : EventArgs
+ {
+ /// <summary>
+ /// widget data.
+ /// </summary>
+ public WidgetData WidgetData
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void PauseCallbackType(IntPtr widgetData);
+ private PauseCallbackType _pauseCallback;
+ private EventHandler<PauseEventArgs> _pauseEventHandler;
+
+ /// <summary>
+ /// Pause event.
+ /// </summary>
+ public event EventHandler<PauseEventArgs> Pause
+ {
+ add
+ {
+ if (_pauseEventHandler == null)
+ {
+ _pauseCallback = OnPause;
+ PauseSignal().Connect(_pauseCallback);
+ }
+
+ _pauseEventHandler += value;
+ }
+
+ remove
+ {
+ _pauseEventHandler -= value;
+
+ if (_pauseEventHandler == null && PauseSignal().Empty() == false)
+ {
+ PauseSignal().Disconnect(_pauseCallback);
+ }
+ }
+ }
+
+ private void OnPause(IntPtr widgetData)
+ {
+ PauseEventArgs e = new PauseEventArgs();
+ if (widgetData != null)
+ {
+ e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+ }
+
+ _pauseEventHandler?.Invoke(this, e);
+ }
+
+ internal WidgetInstancePauseOrResumeSignalType PauseSignal()
+ {
+ WidgetInstancePauseOrResumeSignalType ret = new WidgetInstancePauseOrResumeSignalType(NDalicManualPINVOKE.Widget_PauseSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via pause event signal.
+ /// </summary>
+ public class ResumeEventArgs : EventArgs
+ {
+ /// <summary>
+ /// widget data.
+ /// </summary>
+ public WidgetData WidgetData
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void ResumeCallbackType(IntPtr widgetData);
+ private ResumeCallbackType _resumeCallback;
+ private EventHandler<ResumeEventArgs> _resumeEventHandler;
+
+ /// <summary>
+ /// Resume event.
+ /// </summary>
+ public event EventHandler<ResumeEventArgs> Resume
+ {
+ add
+ {
+ if (_resumeEventHandler == null)
+ {
+ _resumeCallback = OnResume;
+ ResumeSignal().Connect(_resumeCallback);
+ }
+
+ _resumeEventHandler += value;
+ }
+
+ remove
+ {
+ _resumeEventHandler -= value;
+
+ if (_resumeEventHandler == null && ResumeSignal().Empty() == false)
+ {
+ ResumeSignal().Disconnect(_resumeCallback);
+ }
+ }
+ }
+
+ private void OnResume(IntPtr widgetData)
+ {
+ ResumeEventArgs e = new ResumeEventArgs();
+ if (widgetData != null)
+ {
+ e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+ }
+
+ _resumeEventHandler?.Invoke(this, e);
+ }
+
+ internal WidgetInstancePauseOrResumeSignalType ResumeSignal()
+ {
+ WidgetInstancePauseOrResumeSignalType ret = new WidgetInstancePauseOrResumeSignalType(NDalicManualPINVOKE.Widget_ResumeSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via resize signal.
+ /// </summary>
+ public class ResizeEventArgs : EventArgs
+ {
+ /// <summary>
+ /// widget data.
+ /// </summary>
+ public WidgetData WidgetData
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// window size.
+ /// </summary>
+ public Size2D WindowSize
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void ResizeCallbackType(IntPtr widgetData, IntPtr windowSize);
+ private ResizeCallbackType _resizeCallback;
+ private EventHandler<ResizeEventArgs> _resizeEventHandler;
+
+ /// <summary>
+ /// Resize event.
+ /// </summary>
+ public event EventHandler<ResizeEventArgs> Resize
+ {
+ add
+ {
+ if (_resizeEventHandler == null)
+ {
+ _resizeCallback = OnResize;
+ ResizeSignal().Connect(_resizeCallback);
+ }
+
+ _resizeEventHandler += value;
+ }
+
+ remove
+ {
+ _resizeEventHandler -= value;
+
+ if (_resizeEventHandler == null && ResizeSignal().Empty() == false)
+ {
+ ResizeSignal().Disconnect(_resizeCallback);
+ }
+ }
+ }
+
+ private void OnResize(IntPtr widgetData, IntPtr windowSize)
+ {
+ ResizeEventArgs e = new ResizeEventArgs();
+ if (widgetData != null)
+ {
+ e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+ }
+ if (windowSize != null)
+ {
+ var val = new Uint16Pair(windowSize, false);
+ e.WindowSize = val;
+ val.Dispose();
+ }
+
+ _resizeEventHandler?.Invoke(this, e);
+ }
+
+ internal WidgetInstanceResizeSignalType ResizeSignal()
+ {
+ WidgetInstanceResizeSignalType ret = new WidgetInstanceResizeSignalType(NDalicManualPINVOKE.Widget_ResizeSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Event arguments that passed via update event signal.
+ /// </summary>
+ public class UpdateEventArgs : EventArgs
+ {
+ /// <summary>
+ /// widget data.
+ /// </summary>
+ public WidgetData WidgetData
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// A bundle.
+ /// </summary>
+ public SWIGTYPE_p_bundle Bundle
+ {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// It means several steps.
+ /// </summary>
+ /// <remark>
+ /// 0 -> no force
+ /// 1 -> force but do someting
+ /// 2 -> force
+ /// </remark>
+ public int Force
+ {
+ get;
+ set;
+ }
+ }
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate void UpdateCallbackType(IntPtr widgetData, IntPtr bundle, int force);
+ private UpdateCallbackType _updateCallback;
+ private EventHandler<UpdateEventArgs> _updateEventHandler;
+
+ /// <summary>
+ /// Update event.
+ /// </summary>
+ public event EventHandler<UpdateEventArgs> Update
+ {
+ add
+ {
+ if (_updateEventHandler == null)
+ {
+ _updateCallback = OnUpdate;
+ UpdateSignal().Connect(_updateCallback);
+ }
+
+ _updateEventHandler += value;
+ }
+
+ remove
+ {
+ _updateEventHandler -= value;
+
+ if (_updateEventHandler == null && UpdateSignal().Empty() == false)
+ {
+ UpdateSignal().Disconnect(_updateCallback);
+ }
+ }
+ }
+
+ private void OnUpdate(IntPtr widgetData, IntPtr bundle, int force)
+ {
+ UpdateEventArgs e = new UpdateEventArgs();
+ if (widgetData != null)
+ {
+ e.WidgetData = WidgetData.GetWidgetDataFromPtr(widgetData);
+ }
+ if (bundle != null)
+ {
+ e.Bundle = new SWIGTYPE_p_bundle(bundle, false);
+ }
+ e.Force = force;
+
+ _updateEventHandler?.Invoke(this, e);
+ }
+
+ internal WidgetInstanceUpdateSignalType UpdateSignal()
+ {
+ WidgetInstanceUpdateSignalType ret = new WidgetInstanceUpdateSignalType(NDalicManualPINVOKE.Widget_UpdateSignal(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Enumeration for terminate type of widget instance.
+ /// </summary>
+ public enum WidgetTerminateType
+ {
+ /// <summary>
+ /// User deleted this widget from the viewer
+ /// </summary>
+ Permanent,
+ /// <summary>
+ /// Widget is deleted because of other reasons (e.g. widget process is terminated temporarily by the system)
+ /// </summary>
+ Temporary
+ }
+
+ /// <summary>
+ /// Enumeration for lifecycle event type of widget instance.
+ /// </summary>
+ public enum WidgetLifecycleEventType
+ {
+ /// <summary>
+ /// The widget is dead.
+ /// </summary>
+ AppDead = 0,
+ /// <summary>
+ /// The widget is dead.
+ /// </summary>
+ Create = 1,
+ /// <summary>
+ /// The widget is destroyed.
+ /// </summary>
+ Destroy = 2,
+ /// <summary>
+ /// The widget is paused.
+ /// </summary>
+ Pause = 3,
+ /// <summary>
+ /// The widget is resumed.
+ /// </summary>
+ Resume = 4
+ }
+ }
+}
--- /dev/null
+/** Copyright (c) 2017 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+namespace Tizen.NUI
+{
+ /// <summary>
+ /// Widget data.
+ /// </summary>
+ public class WidgetData : BaseHandle
+ {
+ private global::System.Runtime.InteropServices.HandleRef swigCPtr;
+
+ internal WidgetData(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicManualPINVOKE.WidgetData_SWIGUpcast(cPtr), cMemoryOwn)
+ {
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
+ }
+
+ internal static global::System.Runtime.InteropServices.HandleRef getCPtr(WidgetData obj)
+ {
+ return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
+ }
+
+ /// <summary>
+ /// To make Window instance be disposed.
+ /// </summary>
+ protected override void Dispose(DisposeTypes type)
+ {
+ if(disposed)
+ {
+ return;
+ }
+
+ if(type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+ }
+
+ //Release your own unmanaged resources here.
+ //You should not access any managed member here except static instance.
+ //because the execution order of Finalizes is non-deterministic.
+
+ if (swigCPtr.Handle != global::System.IntPtr.Zero)
+ {
+ if (swigCMemOwn)
+ {
+ swigCMemOwn = false;
+ NDalicManualPINVOKE.delete_WidgetData(swigCPtr);
+ }
+ swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
+ }
+
+ base.Dispose(type);
+ }
+
+ internal static WidgetData GetWidgetDataFromPtr(global::System.IntPtr cPtr)
+ {
+ WidgetData ret = new WidgetData(cPtr, false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ internal WidgetData(string instanceId, SWIGTYPE_p_bundle args, string content) : this(NDalicManualPINVOKE.WidgetData_New(instanceId, SWIGTYPE_p_bundle.getCPtr(args), content), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ internal WidgetData(WidgetData widgetData) : this(NDalicManualPINVOKE.new_WidgetData__SWIG_1(WidgetData.getCPtr(widgetData)), true)
+ {
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ internal WidgetData Assign(WidgetData widgetData)
+ {
+ WidgetData ret = new WidgetData(NDalicManualPINVOKE.WidgetData_Assign(swigCPtr, WidgetData.getCPtr(widgetData)), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Get widget instance id.
+ /// </summary>
+ /// <returns>Id of widget instance.</returns>
+ public string GetInstanceId()
+ {
+ string ret = NDalicManualPINVOKE.WidgetData_GetInstanceId(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ internal SWIGTYPE_p_bundle GetArgs()
+ {
+ global::System.IntPtr cPtr = NDalicManualPINVOKE.WidgetData_GetArgs(swigCPtr);
+ SWIGTYPE_p_bundle ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_bundle(cPtr, false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Get widget instance content.
+ /// </summary>
+ /// <returns>Content of widget instance.</returns>
+ public string GetContent()
+ {
+ string ret = NDalicManualPINVOKE.WidgetData_GetContent(swigCPtr);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ /// <summary>
+ /// Get widget instance Window.
+ /// </summary>
+ /// <returns>Window of widget instance</returns>
+ public Window GetWindow()
+ {
+ Window ret = new Window(NDalicManualPINVOKE.WidgetData_GetWindow(swigCPtr), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
+ internal void SetArgs(SWIGTYPE_p_bundle args)
+ {
+ NDalicManualPINVOKE.WidgetData_SetArgs(swigCPtr, SWIGTYPE_p_bundle.getCPtr(args));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Set widget instance arguments.
+ /// </summary>
+ /// <param name="content">Content of widget instance</param>
+ public void SetContent(string content)
+ {
+ NDalicManualPINVOKE.WidgetData_SetContent(swigCPtr, content);
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+
+ /// <summary>
+ /// Set widget instance arguments.
+ /// </summary>
+ /// <param name="window">Window of widget instance.</param>
+ public void SetWindow(Window window)
+ {
+ NDalicManualPINVOKE.WidgetData_SetWindow(swigCPtr, Window.getCPtr(window));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
+ }
+}
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
private global::System.Runtime.InteropServices.HandleRef stageCPtr;
private Layer _rootLayer;
+ private string _windowTitle;
internal Window(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Window_SWIGUpcast(cPtr), cMemoryOwn)
{
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
+ if (_windowFocusChangedEventCallback != null)
+ {
+ WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback);
+ }
+
+ if (_stageTouchCallbackDelegate != null)
+ {
+ TouchSignal().Disconnect(_stageTouchCallbackDelegate);
+ }
+
+ if (_stageWheelCallbackDelegate != null)
+ {
+ WheelEventSignal().Disconnect(_stageWheelCallbackDelegate);
+ }
+
+ if (_stageKeyCallbackDelegate != null)
+ {
+ KeyEventSignal().Disconnect(_stageKeyCallbackDelegate);
+ }
+
+ if (_stageEventProcessingFinishedEventCallbackDelegate != null)
+ {
+ EventProcessingFinishedSignal().Disconnect(_stageEventProcessingFinishedEventCallbackDelegate);
+ }
+
+ if (_stageContextLostEventCallbackDelegate != null)
+ {
+ ContextLostSignal().Disconnect(_stageContextLostEventCallbackDelegate);
+ }
+
+ if (_stageContextRegainedEventCallbackDelegate != null)
+ {
+ this.ContextRegainedSignal().Disconnect(_stageContextRegainedEventCallbackDelegate);
+ }
+
+ if (_stageSceneCreatedEventCallbackDelegate != null)
+ {
+ SceneCreatedSignal().Disconnect(_stageSceneCreatedEventCallbackDelegate);
+ }
+
+ if (_windowResizedEventCallback != null)
+ {
+ ResizedSignal().Disconnect(_windowResizedEventCallback);
+ }
+
+ if (_windowFocusChangedEventCallback2 != null)
+ {
+ WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback2);
+ }
+
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
}
}
+ /// <summary>
+ /// Gets/Sets a window title.
+ /// </summary>
+ public string Title
+ {
+ get
+ {
+ return _windowTitle;
+ }
+ set
+ {
+ _windowTitle = value;
+ SetClass( _windowTitle, "" );
+ }
+ }
+
internal WindowFocusSignalType WindowFocusChangedSignal()
{
WindowFocusSignalType ret = new WindowFocusSignalType(NDalicPINVOKE.FocusChangedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
- internal void SetClass(string name, string klass)
+ /// <summary>
+ /// Sets the window name and class string.
+ /// </summary>
+ /// <param name="name">The name of the window</param>
+ /// <param name="klass">The class of the window</param>
+ public void SetClass(string name, string klass)
{
NDalicPINVOKE.Window_SetClass(swigCPtr, name, klass);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
- internal System.IntPtr GetNativeWindowHandler()
+ public System.IntPtr GetNativeWindowHandler()
{
System.IntPtr ret = NDalicManualPINVOKE.GetNativeWindowHandler(HandleRef.ToIntPtr(this.swigCPtr));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
}
+ public static void FeedKeyEvent(Key keyEvent)
+ {
+ NDalicManualPINVOKE.Window_FeedKeyEvent(Key.getCPtr(keyEvent));
+ if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ }
}
}
/// </summary>
/// <param name="serviceType">The DNSSD service type</param>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="ArgumentException">Thrown when serviceType is null.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
public DnssdBrowser(string serviceType)
/// </remarks>
/// <since_tizen> 4 </since_tizen>
/// <privilege>http://tizen.org/privilege/internet</privilege>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
/// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
/// Stops browsing the DNSSD remote service.
/// </summary>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
public void StopDiscovery()
/// <param name="serviceType">The DNSSD service type. It is expressed as type followed by protocol, separated by a dot(e.g. "_ftp._tcp").
/// It must begin with an underscore, followed by 1-15 characters which may be letters, digits or hyphens.
/// </param>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when serviceType is set to null.</exception>
public DnssdService(string serviceType)
/// In case of error, null will be returned during get and exception will be thrown during set.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when Name value is set to null.</exception>
/// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
/// In case of error, -1 will be returned during get and exception will be thrown during set.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="NotSupportedException">Thrown while setting this property when DNSSD is not supported.</exception>
/// <exception cref="ArgumentException">Thrown if value of Port is set to less than 0 or more than 65535.</exception>
/// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
/// <since_tizen> 4 </since_tizen>
/// <param name="key">The key of the TXT record. It must be a null-terminated string with 9 characters or fewer excluding null. It is case insensitive.</param>
/// <param name="value">The value of the TXT record.If null, then "key" will be added with no value. If non-null but value_length is zero, then "key=" will be added with empty value.</param>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when value of key is null.</exception>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// </summary>
/// <since_tizen> 4 </since_tizen>
/// <param name="key">The key of the TXT record to be removed.</param>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when value of key is null.</exception>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// Name of the service must be set.
/// <since_tizen> 4 </since_tizen>
/// <privilege>http://tizen.org/privilege/internet</privilege>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
/// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
/// A local service registered using RegisterService() must be passed.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD is not supported.</exception>
public void DeregisterService()
/// </remarks>
/// <since_tizen> 4 </since_tizen>
/// <privilege>http://tizen.org/privilege/internet</privilege>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
/// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
/// Stops browsing the DNSSD/SSDP remote service.
/// </summary>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
void StopDiscovery();
/// </remarks>
/// <since_tizen> 4 </since_tizen>
/// <privilege>http://tizen.org/privilege/internet</privilege>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
/// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
/// A local service registered using RegisterService() must be passed.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.dnssd</feature>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.dnssd</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when DNSSD/SSDP is not supported.</exception>
void DeregisterService();
</para>
<h2>Related Features</h2>
<para>To use DNS-SD, declare the following feature requirements in the config file:<br/>
-http://tizen.org/feature/network.dnssd
+http://tizen.org/feature/network.service_discovery.dnssd
</para>
<para>To use SSDP, declare the following feature requirements in the config file:<br/>
-http://tizen.org/feature/network.ssdp
+http://tizen.org/feature/network.service_discovery.ssdp
</para>
</remarks>
/// </summary>
/// <since_tizen> 4 </since_tizen>
/// <param name="target">The target to browse for the service.</param>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="ArgumentException">Thrown when target is null.</exception>
/// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
public SsdpBrowser(string target)
/// Application will keep browsing for available/unavailable services until it calls StopDiscovery().
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
/// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
public void StartDiscovery()
/// </summary>
/// <since_tizen> 4 </since_tizen>
/// <privilege>http://tizen.org/privilege/internet</privilege>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occured.</exception>
/// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
/// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
/// </summary>
/// <since_tizen> 4 </since_tizen>
/// <param name="target">The SSDP local service's target. It may be a device type or a service type.</param>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when target is set to null.</exception>
public SsdpService(string target)
/// In case of error, null will be returned during get and exception will be thrown during set.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when Usn value is set to null.</exception>
/// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
/// In case of error, null will be returned during get and exception will be thrown during set.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="NotSupportedException">Thrown while setting this property when SSDP is not supported.</exception>
/// <exception cref="ArgumentException">Thrown when Url value is set to null.</exception>
/// <exception cref="InvalidOperationException">Thrown while setting this property when any other error occurred.</exception>
/// </remarks>
/// <since_tizen> 4 </since_tizen>
/// <privilege>http://tizen.org/privilege/internet</privilege>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
/// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
/// A local service registered using RegisterService() must be passed.
/// </remarks>
/// <since_tizen> 4 </since_tizen>
- /// <feature>http://tizen.org/feature/network.ssdp</feature>
+ /// <feature>http://tizen.org/feature/network.service_discovery.ssdp</feature>
/// <exception cref="InvalidOperationException">Thrown when any other error occurred.</exception>
/// <exception cref="NotSupportedException">Thrown when SSDP is not supported.</exception>
public void DeregisterService()
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26430.12
+VisualStudioVersion = 15.0.26430.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Pims.Contacts", "Tizen.Pims.Contacts.csproj", "{5B40ACBE-A9D5-492B-AB98-11DD8581941E}"
EndProject
private Object thisLock = new Object();
private Interop.Database.ContactsDBStatusChangedCallback _contactsDBStatusChangedCallback;
private EventHandler<DBStatusChangedEventArgs> _dbStatusChanged;
- private Dictionary<string, EventHandler<DBChangedEventArgs>> _delegateMap = new Dictionary<string, EventHandler<DBChangedEventArgs>>();
+ private Dictionary<string, EventHandler<DBChangedEventArgs>> _eventHandlerMap = new Dictionary<string, EventHandler<DBChangedEventArgs>>();
private Dictionary<string, Interop.Database.ContactsDBChangedCallback> _callbackMap = new Dictionary<string, Interop.Database.ContactsDBChangedCallback>();
private Interop.Database.ContactsDBChangedCallback _dbChangedDelegate;
}
/// <summary>
- /// Registers a callback function to be invoked when a record changes.
+ /// Registers a EventHandler to be invoked when a record changes.
/// </summary>
/// <param name="viewUri">The view URI of records whose changes are monitored</param>
/// <param name="DBChanged">The EventHandler to register</param>
[SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void AddDBChangedDelegate(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
+ public void AddDBChangedEventHandler(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
{
- if (_callbackMap[viewUri] == null)
+ if (!_callbackMap.ContainsKey(viewUri))
{
_callbackMap[viewUri] = (string uri, IntPtr userData) =>
{
DBChangedEventArgs args = new DBChangedEventArgs(uri);
- _delegateMap[uri]?.Invoke(this, args);
+ _eventHandlerMap[uri]?.Invoke(this, args);
};
int error = Interop.Database.AddChangedCb(viewUri, _callbackMap[viewUri], IntPtr.Zero);
if ((int)ContactsError.None != error)
{
- Log.Error(Globals.LogTag, "AddDBChangedDelegate Failed with error " + error);
+ Log.Error(Globals.LogTag, "AddDBChangedEventHandler Failed with error " + error);
throw ContactsErrorFactory.CheckAndCreateException(error);
}
}
- _delegateMap[viewUri] += DBChanged;
+ EventHandler<DBChangedEventArgs> handler = null;
+ if (!_eventHandlerMap.TryGetValue(viewUri, out handler))
+ _eventHandlerMap.Add(viewUri, null);
+
+ _eventHandlerMap[viewUri] = handler + DBChanged;
}
/// <summary>
- /// Deregisters a callback function.
+ /// Deregisters a EventHandler.
/// </summary>
/// <param name="viewUri">The view URI of records whose changes are monitored</param>
/// <param name="DBChanged">The EventHandler to deregister</param>
[SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings")]
- public void RemoveDBChangedDelegate(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
+ public void RemoveDBChangedEventHandler(string viewUri, EventHandler<DBChangedEventArgs> DBChanged)
{
- _delegateMap[viewUri] -= DBChanged;
+ EventHandler<DBChangedEventArgs> handler = null;
+ if (!_eventHandlerMap.TryGetValue(viewUri, out handler))
+ _eventHandlerMap.Add(viewUri, null);
+ else
+ _eventHandlerMap[viewUri] = handler - DBChanged;
- if (_delegateMap[viewUri] == null)
+ if (_eventHandlerMap[viewUri] == null)
{
int error = Interop.Database.RemoveChangedCb(viewUri, _callbackMap[viewUri], IntPtr.Zero);
if ((int)ContactsError.None != error)
{
- Log.Error(Globals.LogTag, "RemoveDBChangedDelegate Failed with error " + error);
+ Log.Error(Globals.LogTag, "RemoveDBChangedEventHandler Failed with error " + error);
throw ContactsErrorFactory.CheckAndCreateException(error);
}
_callbackMap.Remove(viewUri);