2005-07-12 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c: Add a definition for scroll_to

2005-03-18 Iain <iaingnome@gmail.com>

	* marlin-program.[ch] (marlin_program_get_clip_source): Function to
	retrieve the source of the clipboard.
	(marlin_program_set_clipboard): Take the name of the source sample.

2005-03-16 Iain <iaingnome@gmail.com>

	* marlin-marker-view.c (marker_removed): Actually redraw the missing
	marker.

	* marlin-sample-view.c (motion_notify_event): Treat y as signed.

	* marlin-sample.c (clear_range_undo): Dirty the sample.
	(clear_range_destroy): Free closure.
	(marlin_sample_clear_range): Hook up a custom undo handler.
	(adjust_volume_undo): Dirty sample.
	(adjust_volume_destroy): Free closure.
	(marlin_sample_adjust_volume_range): Hook up custom undo handler.
	(invert_range_undo): Dirty the sample.
	(invert_range_destroy): Free closure.
	(marlin_sample_invert_range): Hook up custom undo handler.

	* marlin-channel.c (lockless_channel_multiply): Make it work.

2005-03-15 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c (button_release_event): Cancel the undo and
	selection if the button press and release happened on the same point.
	(real_move_cursor): Cast position as gint64 before checking < 0

	* marlin-undo-manager.c: Made MarlinUndoContext threadsafe

	* marlin-overview-bar.[ch]: (real_move_page): Move page around.
	(add_move_binding): Add the binding
	(class_init): Add key bindings to move the page around.

2004-10-30 Iain <iaingnome@gmail.com>

	* 
2004-10-18 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.c: Fix a NULL warning.

	* marlin-marker-view.c: Start to allow other numbering schemes.

	* marlin-marshal.list: Fun DOUBLE_INT_DOUBLE_DOUBLE_DOUBLE callback

	* marlin-record-pipeline.c (connect_pipeline): Connect the src and 
	level.
	(class_init): Create a signal.
	(do_level): Fire signal.
	(level_cb): Pass level signal to GUI thread.
	(init): Add a level meter plugin.

2004-10-10 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c: Make clearing the sample by clicking on the
	view undoable.

2004-10-08 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.c: Make the vorbis encoder pipeline use the correct
	one.

2004-10-05 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c (button_press_event): Create custom undo
	(button_release_event): Ditto.

2004-10-05 Iain <iaingnome@gmail.com>

	* marlin-sample-selection.c (selection_undo_redo): Undo or redo the
	selection change.
	(selection_destroy): Free data.
	(marlin_sample_selection_clear): Implement as a wrapper to _set.
	(marlin_sample_selection_set): Implement undo/redo.

2004-10-03 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.c: Add speex to the encoders

2004-09-20 Iain <iaingnome@gmail.com>

	* marlin-overview-bar.c (can_page_move): Just check if the page can
	be moved.
	(motion_notify_event): Only turn on the hand cursor if the page can be
	moved.

2004-09-19 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c (set_selection): Complete rewrite so that shrink
	selection works.
	(real_move_cursor): Ditto.

2004-09-17 Iain <iaingnome@gmail.com>

	* marlin-sample-selection.[ch]: Rewrite to make much simpler.

	* marlin-sample-view.c:
	* marlin-overview-bar.c: Rewrite for new selectionstuff

2004-09-16 Iain <iaingnome@gmail.com>

	* marlin-sample.c (finalize): Unref the undo manager.
	(init): Only create one undo manager.

	* marlin-play-pipeline.c (init): Initalize the tick.

	* marlin-sample-element.c (src_dispose): Chain up the parents dispose.

2004-09-16 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c (expose_event): Free the regions.

2004-09-15 Iain <iaingnome@gmail.com>

	* marlin-marker-view.c (draw_ticks): Correctly calculate the increments.

2004-09-13 Iain <iaingnome@gmail.com>

	* marlin-sample-view.h: compile fixes from Christophe Fergeau

2004-09-11 Iain <iaingnome@gmail.com>

	* marlin-channel.c (insert_data_undo): Undo the insert.
	(insert_data_redo): Put the data back.
	(insert_data_destroy): Free resources.
	(lockless_insert_data): Create an undoable.

	* marlin-sample.c (insert_silence_undo): Fix...

2004-09-10 Iain <iaingnome@gmail.com>

	* marlin-channel.c (unlink_undo): Handle case where the block is the
	first block.

	* marlin-sample.c (marlin_sample_crop_range): Add two undoables to
	hack around an issue with sample/channel interaction.
	(crop_undo): Undo.
	(crop_destroy): Destroy.

2004-09-10 Iain <iaingnome@gmail.com>

	* marlin-sample.c (marlin_sample_delete_range): Reverse the order that
	the undoable is added.

	* marlin-channel.c (lockless_unlink_range): Create a undo context.
	(unlink_undo): Link everything back up.
	(unlink_redo): Unlink again.
	(unlink_destroy): Free resources.

2004-09-10 Iain <iaingnome@gmail.com>

	* marlin-sample.c (marlin_sample_add_channel): Implement undo/redo.
	[NB: Not cloning channel is not imlpemented yet]
	(add_channel_undo): undo the add channel action.
	(add_channel_redo): redo.
	(add_channel_destroy): Free undo resources.

2004-09-10 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_copy_data): Fix crash if end frame
	is the last frame in the sample.

	* marlin-sample.c (marlin_sample_remove_channel): Implement undo/redo
	[NB: Mixing option is not implemented yet]
	(remove_channel_undo): undo the remove channel.
	(remove_channel_redo): Redo
	(remove_channel_destroy): Free undo resources.
	
2004-09-09 Iain <iaingnome@gmail.com>

	* marlin-sample.c (marlin_sample_swap_channels): Implement undo/redo
	(swap_channels_undo): A function for undoing channel swap.
	(swap_channels_destroy): Destroy data.

2004-09-09 Iain <iaingnome@gmail.com>

	* marlin-marker-model.c (marker_free): Free a marker
	(marker_copy): Copy a marker.
	(marlin_find): Find a marker.
	Added undo/redo functions for all functions.

2004-09-09 Iain <iaingnome@gmail.com>

	* marlin-block.h: Add some more function prototypes.

	* marlin-channel.c (lockless_unlink_range):
	(lockless_delete_range): 
	(lockless_insert_data):
	(marlin_channel_insert_data):
	(marlin_channel_insert_block):
	(marlin_channel_delete_range):
	(lockless_insert_silence):
	(marlin_channel_insert_silence):
	(marlin_channel_clear_range):
	(marlin_channel_insert):
	(marlin_channel_crop_range):
	(marlin_channel_mix):
	(lockless_channel_multiply):
	(marlin_channel_invert):
	(marlin_channel_adjust_volume): Take Undo contexts.

	* marlin-marker-model.c (marlin_marker_model_add_marker):
	(marlin_marker_model_remove_marker):
	(marlin_marker_model_move_marker):
	(marlin_marker_rename_marker):
	(marlin_marker_model_clear):
	(marlin_marker_model_move_markers_after):
	(marlin_marker_model_remove_markers_in_range): Take Undo contexts.

	* marlin-marker-view.c (finalize): Remove the undo.
	(set_property): Get the undo.
	(button_release_event): Create a context.
	(add_marker_response): Ditto.
	(marker_add): Ditto,
	(marker_remove): Ditto.
	(edit_marker_response): ditto.
	
	* marlin-sample.c (marlin_sample_delete_range):
	(marlin_sample_clear_range):
	(marlin_sample_crop_range):
	(marlin_sample_swap_channels):
	(marlin_sample_mix):
	(marlin_sample_insert):
	(marlin_sample_invert_range):
	(marlin_sample_adjust_volume_range): Take contexts.
	(insert_silence_undo): Stub
	(insert_silence_redo): Stub
	(insert_silence_destroy): Destroy silence.
	(marlin_sample_insert_silence):
	(marlin_sample_remove_channel):
	(marlin_sample_add_channel): Take undo context.

2004-09-09 Iain <iaingnome@gmail.com>

	* marlin-undoable.[ch]: Make proper function typedef.

2004-09-09 Iain <iaingnome@gmail.com>

	* marlin-channel.c (lockless_insert_data): Handle case where insert
	frame is 0 correctly. And return TRUE.

	* marlin-sample.c: Include gnome-i18n.h
	(marlin_sample_delete_range):
	(marlin_sample_clear_range):
	(marlin_sample_crop_range):
	(marlin_sample_swap_channels):
	(marlin_sample_mix):
	(marlin_sample_inserT):
	(marlin_sample_invert_range):
	(marlin_sample_adjust_volume):
	(marlin_sample_insert_silence):
	(marlin_sample_remove_channel):
	(marlin_sample_add_channel): Add undo framework stuff.

	* marlin-undo-manager.c (context_undo): Stub.
	(context_redo): Stub.
	(marlin_undo_manager_context_begin): Return the working context.
	(marlin_undo_manager_context_end): Only do stuff if the count is 0.
	Free the context.
	(marlin_undo_manager_context_cancel): Free the context.
	(marlin_undo_manager_undo): Undo the context, move the position and
	emit.
	(marlin_undo_manager_redo): Redo context, move position and emit.

2004-09-09 Iain <iaingnome@gmail.com>

	* marlin-undoable.[ch]: An action that can be undone.

	* marlin-undo-manager.c (context_free): Free a MarlinUndoContext.
	(context_new): Create a new MarlinUndoContext.
	(finalize): Free the contexts.
	(marlin_undo_manager_context_begin): Create a context.
	(marlin_undo_manager_context_end): Put the context into the undo list.
	Emit the changed signal.

2004-09-08 Iain <iaingnome@gmail.com>

	* marlin-undo-manager.c (class_init): Create a changed signal.

2004-09-08 Iain <iaingnome@gmail.com>

	* marlin-sample.c (get_property): Return the undo manager.
	(class_init): Create the undo manager property.
	(init): Create the undo manager. Check MARLIN_TMP_DIR for the tmp dir
	before using the system one.
	(finalize): Free undo manager.
	
2004-09-08 Iain <iaingnome@gmail.com>

	* marlin-undo-manager.[ch]: Oh, an undo manager...wonder what thats for

2004-09-06 Iain <iaingnome@gmail.com>

	* marlin-channel.c (write_data): ENOSPC not -ENOSPC and use %s not %
	
	* marlin-load-pipeline.c (load_eos_reached): Check errors when mmapping
	and making peaks.
	
	* marlin-marshal.list: New funny VOID__BOXED_STRING marshal.

	* marlin-operation.c (class_init): New error signal.
	(do_error): Emit error signal.
	(free_error): Unref and free error op.
	(marlin_operation_set_error): Create an error op and fire it to the
	GUI thread.
	
	* marlin-pipeline.c (class_init): Remove error signal.
	(do_error): Remove
	(free_error): Remove
	(marlin_pipeline_set_error): Set the error on the operation.

	* marlin-sample-element.c (sink_finalize): Free the no space error.
	(store_block): Take the sink. Count the number of frames written.
	If there's an error just set the error, but if there's no space then
	store the frames and start the no-space stuff.
	(marlin_sample_element_sink_loop): Only go EOS if there's no error,
	otherwise calculate the space required, and the space available and set
	the error.
	(sink_init): Init the new stuff.

2004-09-06 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_error_quark): Get the quark.
	(marlin_channel_new): Create an error.
	(write_data): Create an error.
	(mmap_section): Create an error.
	(generate_peak_for_block): Ditto.

2004-09-04 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_crop_range): Use lockless versions.
	(lockless_generate_peaks): A lockless version.
	(marlin_channel_generate_peaks): Call lockless.
	(marlin_channel_copy_data): Lock the dest channel. Use lockless versions
	of all the functions.

2004-09-04 Iain <iaingnome@gmail.com>

	* marlin-channel.c: Everything is now documented !!!!!
	And everything handles every possible error (I think?).

	* marlin-sample.c: Updated everything to handle the errors that
	the marlin_channel_* functions can return.

2004-09-04 Iain <iaingnome@gmail.com>

	* marlin-sample.[ch]: Everything now returns TRUE or FALSE (if 
	applicable) and takes a GError for reporting.

	* marlin-channel.c: Return errors.

2004-09-03 Iain <iaingnome@gmail.com>

	* marlin-sample.[ch] (marlin_sample_read_lock): Lock for reading.
	(marlin_sample_read_unlock): Unlock read lock.

	* marlin-sample-element.c (marlin_sample_element_src_event): Don't set
	the current block here.
	(marlin_sample_element_src_state_change): When going PAUSED->PLAYING
	lock the sample, and set up the channels and current blocks.
	When PLAYING->PAUSED unlock the sample.

2004-09-03 Iain <iaingnome@gmail.com>

	* marlin-sample-element.c (sample_notify): Relink_filtered is not to be
	used by elements. Use try_get_caps instead.
	(create_channel): Get around the state_change hack by setting caps
	explicitly.
	(explicit_link): Return OK
	(explicit_getcaps): Returns our explicit caps.
	(marlin_sample_element_src_change_state): Don't set the caps.

2004-09-02 Iain <iaingnome@gmail.com>

	* marlin-sample.c (marlin_sample_add_channel): Don't lock the sample
	before setting the channels. Fix the end point of the copy data.
	(marlin_sample_remove_channel): Mix two channels together at 0db

2004-09-02 Iain <iaingnome@gmail.com>

	* marlin-channel.c (lockless_unlink_range): Unlink the data, but don't
	destroy the blocks.
	(lockless_delete_range): Unlink, then destroy.
	(marlin_channel_mix): Rewrite to use new techniques. Non-destructive.
	
2004-09-02 Iain <iaingnome@gmail.com>

	* marlin-channel.c (lockless_insert_data): Fix lockless_insert_data
	and write up what its supposed to do.

2004-09-02 Iain <iaingnome@gmail.com>

	* marlin-channel.c (lockless_channel_multiply): Multiply each frame
	by a value.
	(marlin_channel_invert): Call above function with value -1.0
	(marlin_channel_adjust_volume): Call lockless_channel_multiply with
	the db value.

2004-09-01 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_adjust_volume): Rewrite using
	existing functions so its non-destructive.

2004-09-01 Iain <iaingnome@gmail.com>

	* marlin-channel.c (c_ensure_mmaped): Rename to lockless_ensure...

2004-08-30 Iain <iaingnome@gmail.com>

	* marlin-file-utils.c (marlin_file_copy): Pass a mode to the open call.

2004-08-29 Iain <iaingnome@gmail.com>

	* marlin-sample.c (get_property): Only return the name from the taglist
	if the name is not blank.

2004-08-27 Iain <iaingnome@gmail.com>

	* marlin-file-utils.c (marlin_file_copy): Copies one file to another.

	* marlin-save-pipeline.c (ipad_unlinked): Comment out this function.
	(disconnect_pipeline): Ditto.

2004-08-27 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_copy_data): Fix an off by one error
	that meant we were looking for the next block.

2004-08-27 Iain <iaingnome@gmail.com>

	* marlin-sample.c (set_property): Only emit the notify if the value
	for frames or sample rate actually changed.

	* marlin-sample-view.c (set_property): Don't choose 1 fpp if there's 
	no frames.

2004-08-27 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_new): Add some error handling.
	
	* marlin-overview-bar.c (set_property): Remove a disconnect for a
	signal that was never connected.

	* marlin-sample-element.c (set_property): Ditto.

	* marlin-sample-view.c (set_property): Gratuitious view-> removal.

2004-08-26 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_insert): Lock once.

2004-08-25 Iain <iaingnome@gmail.com>

	* marlin-channel.c (write_data_full): Pass buffer to write_data instead
	of data. Fixed a major bug.
	(marlin_channel_write_data): Use write_data_full
	(copy_data_into_channel): Ditto.

2004-08-25 Iain <iaingnome@gmail.com>

	* marlin-channel.c: Split functions into a lockless version and a
	wrapper version which first locks the channel and then calls the
	lockless version. Make all exported functions have the same calling
	semantics - Don't hold the lock.

2004-08-24 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_clear_range): Clearing a range is
	just the same as deleting the range, and then reinserting silence.
	I'm a genius...

2004-08-23 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.c (create_bin_from_pipeline): Given a pipeline
	fragment, create a plugable bin for it.
	(get_encoder_for_mime): Create an encoder bin for a mimetype

	* marlin-save-pipeline.c (set_property): Use the new functions above.

2004-08-22 Iain <iaingnome@gmail.com>

	* marlin-sample.c (init): Create an initial taglist so there's always
	one available.

2004-08-21 Iain <iaingnome@gmail.com>

	* marlin-sample-drawing.c (get_min_max_peaks): Limit the range to the
	number of frames left.

	* marlin-channel.c (marlin_channel_insert_silence): Use the 
	lockless_insert_data function.

2004-08-21 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_free): Use the new marlin_block_free_list function.

2004-08-20 Iain <iaingnome@gmail.com>

	* marlin-sample.c
	(marlin_sample_remove_channel): Lock the sample first.
	(marlin_sample_add_channel): Ditto.

2004-08-18 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_insert_silence): Just return if
	num_frames is 0.

	* marlin-sample.c (marlin_sample_add_channel): Don't dirty the sample
	if there's no data.
	(marlin_sample_remove_channel): Ditto.
	(marlin_sample_swap_channels): Ditto.

2004-08-18 Iain <iaingnome@gmail.com>

	* marlin-channel.c (lockless_insert_data): Just insert the list if the
	channel is empty.

2004-08-17 Iain <iaingnome@gmail.com>

	* marlin-channel.c (marlin_channel_split_block): First should never be
	NULL.
	(marlin_channel_copy_data): Remove a printf.
	(marlin_channel_insert_silence): Just insert the list if there are
	no blocks in the channel.

	* marlin-sample-element.c (marlin_sample_element_src_get): Remove 
	something I don't think is needed anymore.

	* marlin-sample.c (marlin_sample_remove_channel): Use src->frames length
	as dest->frames is 0.
	(marlin_sample_add_channel): Ditto and fill the new channel with 0.

2004-08-17 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.c: Added flac encoding.

2004-08-09 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.c: Added wav encoding.

2004-08-09 Iain <iaingnome@gmail.com>

	* marlin-gst-extras.[ch] (marlin_gst_can_encode): Check if we can
	encode to a mimetype.

2004-08-07 Iain <iaingnome@gmail.com>

	* marlin-sample.c (finalize): Only free the taglist is != NULL.

	* marlin-overview-bar.c (finalize): Unref the sample.

2004-08-07 Iain <iaingnome@gmail.com>

	* marlin-sample-view.c (motion_notify_event): Only change to the hand
	cursor when we need to. It eliminates flickering hand.
	(init): Init the new bool.

2004-08-06 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_add_channel): Add channel.

2004-08-05 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_remove_channel): Remove channels.

2004-08-02 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c: Remove more spew.

	* marlin-sample-view.c (sample_frames_changed): Ditto.

2004-08-01 Iain <iain@prettypeople.org>

	* marlin-load-pipeline.c (set_property): Remove the using spider spew.

2004-08-01 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_edit): Add a label to the position 
	spinner.
	(marker_add): Ditto.
	
2004-07-26 Iain <iain@prettypeople.org>

	* marlin-save-pipeline.c (set_property): Add the encoder to the pipeline
	DUH!.

2004-07-21 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (create_channel): Don't set the caps here
	(marlin_sample_element_src_change_state): Set them here instead.

2004-07-21 Iain <iain@prettypeople.org>

	* marlin-save-pipeline.c: Make sure the pipeline connects correctly.

	* marlin-play-pipeline.c: Ditto.

2004-04-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (motion_notify_event): Only setup the scroll if
	we can scroll the window.

2004-04-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (move_selection): Drag the selection around.
	(motion_notify_event): Move selection.
	(button_press_event): Grab the selection.

2004-04-23 Iain <iain@prettypeople.org>

	* marlin-record-pipeline.c (init): Actually add the new element to the
	bin.

2004-04-23 Iain <iain@prettypeople.org>

	* marlin-record-pipeline.c: Update to use new elements.

2004-04-22 Iain <iain@prettypeople.org>

	* marlin-sample-selection.c (marlin_sample_selection_add): Switch the
	values for start and end so that start always comes before end.

2004-04-22 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (move_cursor): Add some more casts.

2004-04-21 Iain <iain@prettypeople.org>

	* marlin-position-spinner.[ch] (set_property): Emit display-changed 
	signal.
	(class_init): Create signal.
	(display_changed): Change the label text.
	(marlin_position_spinner_label): Create a label for use with the
	spinner.

2004-04-18 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (leave_notify_event): Don't remove the current
	marker.
	(marker_edit): Enter in text entry activates default.

2004-04-18 Iain <iain@prettypeople.org>

	* marlin-cross-fader.c: Make the xfade 432 pixels wide.

2004-04-17 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (dispose): Disconnect all the signal handlers
	(ipad_unlinked): Remove the link from the list.
	(sample_src_new_pad): Store the info so we can remove the links later.
	(class_init): Connect the dispose callback.

	* marlin-sample-element.c (sink_dispose): Remove the unlink signals.
	(request_new_pad): Store the unlink id

2004-04-16 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (init): Don't connect to the state-change 
	signal. Get the tick by the iterate signal.

	* marlin-pipeline.c (marlin_pipeline_set_iterate_func): Connect a func
	to the iterate signal of the bin.

2004-04-16 Iain <iain@prettypeople.org>

	* marlin-save-pipeline.c: Misc fixes

2004-04-16 Iain <iain@prettypeople.org>

	* marlin-file-chooser.c (get_metadata): Move from selection_changed so
	we can use it as a generic non-callback function.
	(selection_changed): Split into generic function.
	(build_info_contents): Make a nice info label.
	(marlin_file_open_dialog_new): Allow remote filenames and check the
	previewability of the first selected file.

2004-04-16 Iain <iain@prettypeople.org>

	* marlin-load-pipeline.c (init): Use gnomevfssrc instead of filesrc.
	Now we can load remote files.

2004-04-16 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (create_channel): Use explicit caps so Marlin
	will play correctly again.

2004-04-15 Iain <iain@prettypeople.org>

	* marlin-sample-drawing.c (marlin_sample_draw): Fix redrawing bug.

	* marlin-stock.[ch]: Add new icon.

2003-03-24 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (set_property): Don't connect the pipeline, 
	it'll get connected in the new-pad callback.

2003-02-26 Iain <iain@prettypeople.org>

	* marlin-cross-fader.c (draw_fader_line): Use the height define.

2003-02-26 Iain <iain@prettypeople.org>

	* marlin-file-chooser.c (marlin_file_open_dialog_new): Remove the size
	setter.
	(selection_changed): Return if the filename is NULL.

2003-02-25 Iain <iain@prettypeople.org>

	* marlin-load-pipeline.c (set_property): Connect the audioconvert and
	the deinterleave elements.
	(init): Set up the new elements.
	(oneton_new_pad): Remove all the stuff needed to put an intfloat in.

2003-02-25 Iain <iain@prettypeople.org>

	* marlin-overview-bar.c (sample_notify): Handle the notify when the
	number of channels changes.

2003-02-11 Iain <iain@prettypeople.org>

	* marlin-sample-element.c: Update for some changes.

2004-01-13 Iain <iain@prettypeople.org>

	* marlin-load-pipeline.c (set_property): Use spider again...yey.
	Add the typefinder to make it all work.

2003-12-24 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_get_block_for_frame): Remove the
	erroneous return_if_fail check at the start.

2003-12-08 Iain <iain@prettypeople.org>

	* marlin-save-pipeline.c (set_property): Don't do anything with the 
	metadata stuff.

	* marlin-sample-element.c (sink_parse_tag): Use the correct functions.
	(marlin_sample_element_src_get): Pass a tag event down at the start.

2003-12-07 Iain <iain@prettypeople.org>

	* marlin-sample.c (finalize): Remove the metadata stuff, and free the
	taglist.
	(set_property): Remove the metadata and streaminfo stuff, add the tag
	list stuff.
	(get_property): Ditto.
	(class_init): Ditto.

	* marlin-pipeline.[ch] (finalize): Remove the deep notify stuff.
	(class_init): Remove the metadata stuff.

	* marlin-load-pipeline.c (class_init): Remove the metadata stuff.

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Hook up
	to tag events.

2003-12-05 Iain <iain@prettypeople.org>

	* marlin-gst-extras.c (get_decoder_for_mime): Don't try to make a 
	mini pipeline...just stick with single elements for now.

2003-12-05 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (marlin_sample_view_set_vzoom): Limit the max
	delta to 2.

2003-12-05 Iain <iain@prettypeople.org>

	* marlin-overview-bar.c (set_property): Limit the frames per page to
	the total number of frames.
	(motion_notify_event): Convert things to gint64 before subtracting.

2003-12-05 Iain <iain@prettypeople.org>

	* marlin-sample-drawing.c (marlin_sample_draw): Work out the channel
	height correctly. What was I thinking?

2003-12-05 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_channel): Take into account the vzoom.
	(draw_dead_area): Ditto.
	(scroll_event): If shift is held down while scrolling, vzoom in or out
	(class_init): Create a signal for vzoom change.
	(init): Set the vmax and vmin.
	(marlin_sample_view_can_vzoom_out): Can we vzoom out?
	(marlin_sample_view_can_vzoom_in): Can we vzoom in?
	(marlin_sample_view_set_vzoom): Set the vertical range and emit signal.
	(marlin_sample_view_vzoom_in): VZoom in.
	(marlin_sample_view_vzoom_out): VZoom out.

	* marlin-marshal.list: Add new VOID__FLOAT_FLOAT marshal.

	* marlin-sample-drawing.c (marlin_sample_draw): Take the vmax and vmin
	and use the vzoom for scaling.

	* marlin-overview-bar.c (_marlin_overview_bar_paint): Use 1 and -1 as
	vmax and vmin.

	* marlin-stock.[ch]: Add VZoom in and out icons.

2003-12-03 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_copy_data): Check for >= when 
	changing blocks.

2003-12-02 Iain <iain@prettypeople.org>

	* marlin-overview-bar.c (class_init): New signal.
	(button_press_event): Emit the play request signal.

2003-12-01 Iain <iain@prettypeople.org>

	* marlin-overview-bar.c (button_press_event): Don't calculate if the 
	pointer is in the page. just use the boolean.

2003-12-01 Iain <iain@prettypeople.org>

	* marlin-overview-bar.c (realize): Add other event masks.
	(button_press_event): Grab the pointer.
	(button_release_event): Ungrab.
	(motion_notify_event): Move the page if its grabbed. Set the cursor to
	the hand thing.

2003-12-01 Iain <iain@prettypeople.org>

	* marlin-load-pipeline.c (set_property): Generate silly error messages.

	* marlin-pipeline.c (init): Hook up to the error signal.
	(do_error): Emit the error signal.
	(free_error): Free the message.
	(marlin_pipeline_set_error): Queue the error signal to be emited in the
	GUI thread.
	(pipeline_error): Marshal onwards.

2003-11-28 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_delete_range): Delete the markers,
	and move the rest into the right place.
	(marlin_sample_crop_range): Ditto.

	* marlin-marker-model.c (marlin_marker_model_remove_markers_in_range):
	Remove markers that are between two end points.

2003-11-27 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_insert_silence): Remove a large memory
	leak.

2003-11-27 Iain <iain@prettypeople.org>

	* marlin-marker-model.[ch] (marlin_marker_model_move_markers_after):
	Move markers after a point X frames in either direction

	* marlin-sample.c (marlin_sample_insert_silence): Move the markers.

2003-11-27 Iain <iain@prettypeople.org>

	* marlin-gst-extras.c (get_decoder_factory_for_mime): Add faad to the
	list of known decoders.

2003-11-21 Iain <iain@prettypeople.org>

	* marlin-utils.c (marlin_ms_to_pretty_time): Use ngettext.

2003-11-16 Iain <iain@prettypeople.org>

	* marlin-file-chooser.c (free_open_data): Free the context.
	(clear_info):
	(set_info):
	(get_media_info): 
	(selection_changed):
	(play_iterate):
	(eos_reached):
	(start_playing):
	(stop_playing):
	(build_info_contents): Functions copied from file-selection.c and 
	modified to use the new GtkFileChooser functions.
	(marlin_file_open_dialog_new): Create context, build the info and
	connect to appropriate signals.

2003-11-15 Iain <iain@prettypeople.org>

	* marlin-file-chooser.[ch]: Use the new file chooser for stuff.

	* Makefile.am: Compile new file chooser.

2003-11-15 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (find_marker): Cast to gint64 so that things at
	the edge don't get lost.
	(draw_markers): Fix the <= to a <, so that the markers at 0 get drawn.

2003-11-14 Iain <iain@prettypeople.org>

	* marlin-sample.c (parse_metadata): Remove spew.

	* marlin-pipeline.c (get_progress): Add a warning
	(got_metadata): Ditto.
	(got_streaminfo): Ditto

	* marlin-marker-model.c (marlin_marker_model_clear): Increment the list
	pointer before removing the marker.

2003-11-07 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Remove the
	error setting for when the loop is called before inputs are created.

	* marlin-gst-extras.c: Update for some new GStreamer changes.

2003-10-20 Iain <iain@prettypeople.org>

	* marlin-sample.c (set_property): Parse the metadata when it comes in
	(parse_metadata): Order the cue points and associate them with their
	ltxts, notes and labels.
	
	* marlin-gst-extras.c (get_glist_from_caps): Get a GList from the caps.

	* marlin-marker-model.[ch] (marlin_marker_model_clear): Remove all the
	markers from a model.

2003-10-19 Iain <iain@prettypeople.org>

	* marlin-sample.c (set_property): Check if the file is read only.
	(get_property): Return new WRITABLE property.
	(class_init): Create writable property.

2003-10-17 Iain <iain@prettypeople.org>

	* marlin-gst-extras.c (get_string_from_caps): Don't be picky about case
	(get_int_from_caps): Ditto.

2003-10-15 Iain <iain@prettypeople.org>

	* marlin-file-selection.c (build_info_contents): Add some a11y stuff

2003-10-15 Iain <iain@prettypeople.org>

	* marlin-file-selection.c (set_property): Connect the signal to the
	selection when info is shown, disconnect it when its not.
	(get_property): Get the property
	(class_init): Add the new properties.
	(build_info_contents): Add a mimetype label.
	(clear_info): Clear the mimetype.
	(set_info) :Set the mimetype.

	* marlin-gst-extras.c: Add a vorbis map.

2003-10-15 Iain <iain@prettypeople.org>

	* marlin-pipeline.[ch] (got_metadata): Stub.
	(got_streaminfo): Stub.
	(class_init): Set the dummy stub functions.
	(deep_notify): Listen for the metadata and streaminfo properties and
	call the class methods.
	(init): Hook to the deep_notify callback.
	(finalize): Unhook from it.

	* marlin-load-pipeline.c (got_metadata): Set the metadata on the sample
	(got_streaminfo): Set streaminfo on the sample.
	(class_init): Override the got_* methods.

	* marlin-sample.c (get_property): Get the real name from the metadata.

2003-10-13 Iain <iain@prettypeople.org>

	* marlin-sample.c (set_property): Support the metadata and streaminfo
	properties.
	(get_property): Ditto.
	(class_init): Add the metadata and streaminfo properties.

2003-10-13 Iain <iain@prettypeople.org>

	* marlin-file-selection.c (finalize): Destroy the player pipeline.
	(play_iterate): An idle loop to iterate the player pipeline.
	(eos_reached): Hide/Show the right buttons.
	(start_playing): Destroy any existing play pipeline, build a new one
	and play her.
	(stop_playing): Duh, stop playing, remove timeout, show/hide buttons.
	(selection_changed): Stop playing, remove timeout, show/hide buttons.

2003-10-13 Iain <iain@prettypeople.org>

	* marlin-channel.c (generate_peak_for_block): Remove the clip spew.

	* marlin-gst-extras.c (get_decoder_factory_for_mime): Add some vorbis
	mimetypes.

2003-10-13 Iain <iain@prettypeople.org>

	* marlin-utils.c (marlin_ms_to_pretty_time): Only put milliseconds on 
	the string if there is more than 0.

	* marlin-file-selection.c (finalize): Destroy the media info stuff.
	(dummy_cb): Does nothing.
	(build_info_contents): Builds the info pane.
	(caps_print): Prints the caps.
	(info_print): Prints the info.
	(clear_info): Resets the text to Unknown.
	(get_string_from_caps): Search for a property and return its value as
	a string.
	(get_int_from_caps): Ditto but returns an int.
	(set_info): Set the info from the stream.
	(get_media_info): An idle function to get metadata.
	(selection_changed): Stop the previous metadatas, start a new one.
	(init): Hook into the file list selection change signal.

2003-10-11 Iain <iain@prettypeople.org>

	* marlin-stock.[ch]: Add a new CDDA extract icon, taken from Sound
	Juicer.

2003-10-11 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Handle double click as 
	selecting between markers and triple click as selecting all.
	(get_closest_markers): Search through the list of markers finding the
	two closest markers either side of the position.

	* marlin-sample-selection.c (marlin_sample_selection_add): Return the
	sub-selection.

2003-10-11 Iain <iain@prettypeople.org>

	* marlin-sample-drawing.c (marlin_sample_draw): Check the channel is
	ready to be drawn on.

	* marlin-channel.[ch] (marlin_channel_is_ready): Check if there's a 
	peak channel.

	* marlin-overview-bar.c (set_property): Listen to the safe-notify
	signal.
	(sample_notify): Redraw the overview bar when the sample frames changes

2003-10-10 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (make_marker_popup): Ref and sink the menu.

2003-10-10 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (sample_notify): Use the safe-notify.
	(set_property): Use safe notify signal.

2003-10-10 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Use the 
	buffer_frames property.
	(marlin_sample_element_sink_connect): Get the buffer-frames property.
	(marlin_sample_element_src_get): Set the buffer-frames.
	(marlin_sample_element_src_connect): Set the endianess, width and
	buffer-frames properties.
	(src_factory): Ditto.

2003-10-05 Iain <iain@prettypeople.org>

	* marlin-gst-extra.c: Hardcode some decoder elements.

	* marlin-load-pipeline.c (set_property): Create and link the decoder
	when we know the type.
	(init): Don't create a decoder.

2003-10-03 Iain <iain@pp.o>

	* marlin-x-utils.[ch] (marlin_add_button_to_dialog): Add a button with
	stock image and custom text to a dialog.

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-marker-view.[ch] (class_init): Create a move-cursor signal
	(marker_goto): Emit signal.

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (key_press_event): Correctly get the next marker
	in the focus chain

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-sample.c (set_property): Set the marker model.
	(class_init): Allow the marker model to be set.

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (edit_marker_response): Change the marker.
	(marker_edit): Fix the button label, initialise the position spinner
	to the position of the marker.

	* marlin-marker-model.c (marlin_marker_model_add_marker): Check for NULL
	(marlin_marker_model_remove_marker): Check for NULL
	(marlin_marker_model_move_marker): Check for NULL
	(marlin_marker_model_rename_marker): Check for NULL

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (motion_notify_event): Set the popup items 
	sensitive.

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-x-utils.[ch]: Split out the X related stuff from marlin-utils

2003-10-03 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (add_marker): Use the private, and subtract the
	xofs.
	(remove_marker): Ditto.

	* marlin-marker-view.c (change_focus_marker): Remove the xofs before
	invalidating the rectangle.

	* marlin-utils.[ch] (marlin_ms_to_pretty_time): Print the time pretty.

2003-09-30 Iain <iain@prettypeople.org>

	* marlin-overview-bar.c (set_property): Check if the new sample is the
	same as the old and don't change it if it is.
	(_marlin_overview_bar_paint): Pass the right xofs to the drawing code

	* marlin-load-pipeline.c (init): Swap spider for mad until we can fix
	the spider bug.

2003-09-25 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_menu_position_under_widget): Code from 
	epiphany to put a menu under a widget.

2003-09-23 Iain <iain@prettypeople.org>

	* marlin-pipeline.[ch] (marlin_pipeline_set_error): Emit an error.

2003-09-22 Iain <iain@prettypeople.org>

	* marlin-pipeline.[ch] (class_init): Add a new signal for reporting
	pipeline errors to the main program.

2003-09-22 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (compare_markers): Compare two markers.
	(marker_added): Sort the markers as they're added.
	(key_press_event): Make it do something.

2003-09-22 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (key_press_event): HAndle the left and right
	arrow keys. Doesn't do anything yet...
	(class_init): Hook up the key press event handler

2003-09-21 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (realize): Pass the allocation width and height
	to make_pixmap.
	(make_pixmap): Make pixmap based on passed in width/height
	(size_allocation): Pass in width/height

2003-09-19 Iain <iain@prettypeople.org>

	* marlin-sample-element.c: Revert the GStreamer error stuff

	* marlin-marker-view.c (marker_add): Set up the spinner
	(marker_remove): Remove the marker.
	(edit_marker_response): Stub
	(marker_edit): Open a dialog, set the current details.

2003-09-18 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (add_marker_response): Open the "help".

2003-09-17 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (finalize): If the add window is still open
	close it and free it
	(add_marker_response): Free the window data.
	(marker_add): Create a new data struct, store all useful widgets in it

2003-09-15 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_add): Free string

2003-09-15 Iain <iain@prettypeople.org>
	
	* marlin-marker-view.c (marker_add): Display a dialog.
	(add_marker_response): Close the dialog.

2003-09-15 Iain <iain@prettypeople.org>

	* marlin-object.[ch]: New file, base object for objects that are to
	be used between threads. Implements a notify system that only notifies
	in the GUI thread.

	* marlin-sample.h: Move definition of marlin_object_notify to the right
	place.

	* Makefile.am: Add files.

2003-09-12 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (set_popup_sensitive): Set the popup menu
	sensitive depending on whether we're over a marker or not.
	(set_property): Set the Add Marker
	(make_marker_popup): Set them all.

2003-09-12 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (finalize): Destroy the menu.
	(make_marker_popup): Store the items.

2003-09-11 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (init): Create a popup menu
	(make_marker_popup): Create the menu
	(marker_add):
	(marker_remove):
	(marker_goto):
	(marker_edit): Stub functions.
	(button_release_event): Add a switch for the button number
	(button_press_event): Add a switch, popup the menu on button 3

2003-09-11 Iain <iain@prettypeople.org>

	* marlin-overview-bar.[ch]: Kinda like the timeline, but draws the
	sample...maybe.

	* Makefile.am: Compile the overview bar

2003-09-05 Iain <iain@prettypeople.org>

	* marlin-file-selection.c: Fix warnings.

	* marlin-marker-view.c: Ditto

	* marlin-play-pipeline.c: Ditto

	* marlin-position-spinner.c: Ditto

	* marlin-load-pipeline.c: ""

	* marlin-record-pipeline.c: And again

	* marlin-marker-model.h: Fix typo

	* marlin-sample-element.c: Warnings go byebye

2003-08-12 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (set_property): Added a NULL check.

2003-07-30 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_markers): Split this code into its own
	function.
	(_marlin_sample_view_paint): Paint the markers over the whole area
	so that the text is still visible on the dead area.

2003-07-30 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (redraw_floating_marker): Limit the marker to the
	number of frames.
	(button_release_event): Ditto

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (redraw_floating_marker): Redraw the virtual
	floating marker.
	(button_press_event): Listen for BUTTON1_MOTION_MASK and draw the float
	marker.
	(button_release_event): Don't delete the marker.
	(motion_notify_event): Move the drag marker. Fix some cursor change
	issues.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_set_hidden): Set the hidden flag.
	(marker_added): Ditto
	(add_markers): Ditto
	(draw_markers): Skip marker if it is hidden.
	(button_press_event): Hide marker.
	(button_release_event): Show marker.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_moved): Redraw the old and new markers
	(button_release_event): Move the marker if its being dragged.

	* marlin-sample-view.c (marker_moved): Redraw the markers.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (button_press_event): Grab the pointer.
	(button_release_event): If grabbing the pointer, release it. If pointer
	is outside the window, remove the marker.

	* marlin-sample-view.c (remove_marker): Redraw the marker gone.
	(set_property): Fix the mismatching callbacks.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (button_press_event): If you click on a marker
	it becomes focussed.
	(button_release_event): Don't add a new marker if you clicked on an
	existing one.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (change_focus_marker): Change the focus marker
	and redraw them both.
	(marker_added): Call above.
	(marker_removed): Ditto.
	(draw_markers): Draw the focus.
	(button_press_event): Grab the widget focus
	(focus_in_event): Change the focus marker.
	(focus_out_event): Change the focus marker to NULL
	(class_init): Hook up new events.
	(init): Allow widget to be focusable.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-a11y-helper.[ch]: Add some functions to allow a11y relations
	to be set up.

	* Makefile.am: Compile

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (motion_notify_event): Draw the marker as 
	PRELIGHT.
	(realize): Handle LEAVE_NOTIFY
	(draW_markers): Check if we need to draw a marker as PRELIGHT
	(leave_notify_event): Redraw the current marker.

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-cursors.c: Make the hotspot of the hand's the middle

2003-07-28 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (find_marker): Find the marker at a position.
	(motion_notify_event): If the cursor is over a marker change to the
	grab indicator.
	(class_init): Hook up the motion_notify

2003-07-27 Iain <iain@prettypeople.org>

	* marlin-cursors.[ch]: Add the hand-closed and hand-open cursors.

	* cursors/Makefile.am: Add the new cursors to the dist

2003-07-24 Iain <iain@prettypeople.org>

	* marlin-gst-extras.c: Change all audio/raw to audio/x-raw-int

	* marlin-record-pipeline.c: Ditto

	* marlin-sample-element.c: audio/raw -> audio/x-raw-float
	
2003-06-29 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (button_release_event): Only add a marker if
	the left mouse button is pressed.

2003-06-29 Iain <iain@prettypeople.org>

	* marlin-marker-view.[ch] (set_property): Set the sample.
	(get_property): Get the sample.
	(finalize): Free the sample.
	(class_init): Add a sample property.
	(marlin_marker_view_new): Take a sample.
	(button_release_event): Check that the position is inside the sample.

2003-06-29 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: Set the clip rectangle, store stuff in the
	main struct and draw the line and label when the marker is added.

2003-06-29 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_sample_area): Redraw the text label.

2003-06-28 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_sample_area): Draw the name of the marker

2003-06-28 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (set_property): Use the right property name and
	the right signal names.
	(draw_sample_area): Draw all the markers as dotted red lines.

2003-06-26 Iain <iain@prettypeople.org>

	* marlin-channel.h: Add define.

	* marlin-sample-view.c (clear_markers): Clear the markers and the
	hash tables.
	(add_markers): Fill in the markers and the hash tables.
	(add_marker): Add a new marker.
	(remove_marker): Remove a marker.
	(move_marker): Fill in a bit.
	(set_property): Clear the markers, then fill them in again.
	(init): Make the hash tables.
	(misc): Warning clean ups.

2003-06-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (finalize): Disconnect all the signals.
	(add_marker): Stub
	(move_marker): Stub;
	(remove_marker): Stub
	(set_property): Unhook from any signals before changing the sample.
	Get the marker model from the sample and hook to the signals on it too

2003-06-26 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_removed): Redraw.

2003-06-26 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_added): Redraw the area around the 
	marker.
	(draw_markers): Draw the markers.
	(expose_event): Ditto
	(class_init): Add a widget style property for the expander size

2003-06-25 Iain <iain@prettypeople.org>

	* marlin-marker-model.c (marlin_maker_model_add_marker): If the name is
	NULL, use a default name.

	* marlin-marker-view.c (button_release_event): Add a marker at the point

2003-06-23 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (clear_markers): Destroy the new hashtable.
	(add_markers): Make the new hash table.
	(button_press_event): Stub.
	(button_release_event): Stub.
	(class_init): Hook up the stubs. Fill them out later.
	(init): Make the new hash table.

2003-06-23 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (make_pixmap): Make a pixmap and GC.
	(size_allocate): Make the pixmap.
	(realize): Make the pixmap.
	(unrealize): Destroy the pixmap and GC.
	(draw_ticks): Use the pixmap instead of the window.
	(_marlin_marker_view_paint): Remove.
	(expose_event): Draw the ticks and then copy the view.
	(scroll_to): Don't scroll, just set xofs and redraw.
	(class_init): Hook up unrealize.

2003-06-23 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (class_init): Create the set_scroll_adjustments
	signal.

2003-06-22 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (draw_ticks): Draw the smaller marks correctly

2003-06-22 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (size_request): Get the size of the font.
	(draw_ticks): Lay out the text better.
	(class_init): Connect the size_request
	(init): Don't hard code the size.

2003-06-22 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (clear_markers): Set pointer to NULL
	(finalize): Don't destroy hash table.
	(set_property): Get the fpp correctly, redraw the view.
	(size_allocate): Chain up.
	(draw_ticks): Draw the ticks and the marks and all.
	(_marlin_marker_view_paint): Draw the ticks.
	(class_init): Expand the fpp name
	(init): Set the allocation.

2003-06-18 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (clear_markers): Destroy the hash table.
	(finalize): Call clear_markers
	(marker_added): Create a new _ViewMarker.
	(marker_removed): Remove the _ViewMarker.
	(marker_moved): Something.
	(add_markers): Add the markers to the hash table.
	(init): Create a hash table.
	(size_allocate): Set the size.
	(class_init): Hook up size_allocate.

2003-06-18 Iain <iain@prettypeople.org>

	* marlin-marker-view.[ch] (set_property): Add some more properties.
	(realize): Create a GDK window for the widget.
	(_marlin_marker_view_paint): Stub for painting.
	(expose_event): Handle the expose event.
	(scroll_to): Scroll to a certain point.
	(adjustment_changed_cb): Scroll.
	(set_scroll_adjustments): Hook up to the adjustments for scrolling.
	(class_init): Add properties, and new methods.

2003-06-18 Iain <iain@prettypeople.org>

	* marlin-marker-model.[ch] (set_property): Add default case.
	(get_property): Return the marker list.
	(class_init): Add property.
	(marlin_marker_model_move_marker): Move a marker.

	* marlin-marker-view.c (finalize): Disconnect from the signals.
	(marker_moved): Stub.
	(clear_markers): Free the list of markers.
	(add_markers): Create a list of markers.
	(set_property): Clear and rebuild the list of markers.

2003-06-18 Iain <iain@prettypeople.org>

	* marlin-marker-view.c (marker_added): stub.
	(marker_removed): stub.
	(set_property): Set the model.
	(get_property): GET the model.
	(class_init): Add a property for the model.
	(marlin_marker_view_new): Create a view.

2003-06-18 Iain <iain@prettypeople.org>

	* marlin-marker-view.[ch]: New file.

	* Makefile.am: Compile new files

2003-06-17 Iain <iain@prettypeople.org>

	* marlin-marker-model.[ch] (marlin_marker_model_add_marker): Add a new
	marker and emit a signal.
	(marlin_marker_model_remove_marker): Remove the marker, emit signal.

2003-06-17 Iain <iain@prettypeople.org>

	* marlin-marker-model.c (marlin_marker_model_new): Make one.

	* marlin-sample.c (get_property): Set the marker model.
	(class_init): Make a new property.
	(init): Make a marker model

2003-06-09 Iain <iain@prettypeople.org>

	* marlin-marker-model.[ch] (class_init): Add signals.

2003-06-08 Iain <iain@prettypeople.org>

	* marlin-marker-model.[ch]: A model for storing info on markers.

	* Makefile.am: Compile new files

2003-06-06 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_mix): Add the clip range and	
	clip the mix by that.

	* marlin-sample.[ch] (marlin_sample_mix): Pass the clip range to the
	channel function.

2003-06-05 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_set_volume_digits): A callback for any
	GtkScale that shows dB, that will show it as a nice text format.

2003-06-02 Iain <iain@prettypeople.org>

	* marlin-record-pipeline.c (get_real_src): Get the src element out of
	a bin.
	(init): Use above function to get the real src.

2003-06-02 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (marlin_play_pipeline_seek_range): Update for
	new API

2003-05-28 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: Move the move cursor dialog out of this file.

2003-05-27 Iain <iain@prettypeople.org>

	* marlin-channel.c (recalculate_block_ranges): Move up a bit.
	(copy_block_into_channel): Rename to copy_data_into_channel.
	(lockless_insert_data): Insert the data without locking.
	(marlin_channel_insert_silence): Insert a silent area.

	* marlin-sample.[ch] (marlin_sample_insert_silence): Insert silence to
	the channels.

2004-05-23 Iain <iain@prettypeople.org>

	* marlin-gst-extras.c (get_encoder_factory_for_mime): Check the list
	of encoders for a hardwired encoder.
	(get_default_encoder_factory_for_mime): Find the first encoder.

2004-05-21 Iain <iain@prettypeople.org>

	* marlin-pipeline.[ch] (marlin_pipeline_get_element_by_name): Get an
	element out of the pipeline.

2004-05-20 Iain <iain@prettypeople.org>

	* marlin-pipeline.c (finalize): Set the state to NULL before destruction

2004-05-20 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (real_redraw_cursor): Take the code that queues
	the cursor for a redraw out into its own function.
	(redraw_cursor): Call real_redraw_cursor.
	(focus_in_event): Show the cursor again and start her blinking.
	(focus_out_event): Stop the cursor blinking and hide her.
	(class_init): Hook up to the focus_in and focus_out events.

2004-05-20 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (set_property): Actually set the max

2004-05-19 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (spin_input): Parse the time long format

	* marlin-utils.[ch] (marlin_ms_to_time_string): 2 chars for minutes.
	(marlin_time_string_to_ms): Parse a time string into ms.

2004-05-19 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (spin_input): Parse some of the text and
	convert it into frames.

2003-05-18 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (set_property_: Remove the redraw.
	Set the page increments when the display changes.
	(display_toggled): Change the display when the item is toggled.
	(populate_popup): Connect to the display_toggled
	(spin_input): Set the value in the spinner.
	(class_init): Hook to the input signal

2003-05-17 Iain <iain@prettypeople.org>

	* marlin-utils.c (marlin_ms_to_time_string): 2 chars for the seconds

	* marlin-position-spinner.c (spinner_display_get_type): Register the
	enum.
	(set_property): Set PROP_RATE and PROP_DISPLAY
	(get_property): Get PROP_RATE and PROP_DISPLAY
	(spin_output): Override what is written in the GtkEntry.
	(class_init): Create our new properties.
	(insert_text): Filter the input so that only digits and : and . are
	allowed.
	(editable_init): Override the interface.
	(marlin_position_spinner_get_type): Add a GtkEditable interface.

2003-05-16 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (populate_popup): Add the view as items.
	(class_init): Hook up to the populate_popup signal.

2003-05-15 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (set_property): Handle property.
	(get_property): Ditto.
	(init): Create an adjustment

2003-05-15 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (class_init): Make a max_frames property,

2003-05-14 Iain <iain@prettypeople.org>

	* marlin-position-spinner.c (set_property): Set the property.
	(get_property): Get.
	(class_init): Init the properties.

2003-05-14 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_gconf_get_string): String.
	(marlin_gconf_set_string): Collect the whole set.

2003-05-14 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_gconf_get_float): Get a float.
	(marlin_gconf_set_float): Set it

2003-05-12 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_gconf_get_int): Get an int from the default
	client.
	(marlin_gconf_set_int): Set int.
	(marlin_gconf_get_default): Get the default client.

2003-05-12 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_display_help): Display help or an error.

2003-05-12 Iain <iain@prettypeople.org>

	* marlin-sample.c (set_property): Handle real name.
	(get_property): Handle realname
	(class_init): Create real name
	(init): Initialise real name.

2003-05-11 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_adjust_volume): Make it work.
	(marlin_channel_mix): Use MARLIN_INFINITE_DB

2003-05-11 Iain <iain@prettypeople.org>

	* marlin-util.h: Define MARLIN_INFINITE_DB as -43.1 to remove some
	magic numbers.

2003-05-11 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (marlin_sample_adjust_volume_range): Adjust the
	volume over a range.

	* marlin-channel.[ch] (marlin_channel_adjust_volume): Adjust the volume
	on the channel.

2003-05-10 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_make_info_label): Make a selectable label.

2003-05-09 Iain <iain@prettypeople.org>

	* marlin-sample.c (init): Use g_get_tmp_dir.

2003-05-09 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_invert): Invert the frequencys of 
	the channel over a specified range.

	* marlin-sample.[ch] (marlin_sample_invert_range): Invert the range.

2003-05-09 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (set_selection): Limit the position to the
	number of frames in the sample.

2003-05-09 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (marlin_sample_clear_range): Apply to the coverage

2003-05-08 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_copy_data): Rewrite to handle
	cases where there's more than one block of data required to fill the
	region.

2003-05-06 Iain <iain@prettypeople.org>

	* marlin-channel.c (recalculate_block_ranges): Calculate block ends 
	correctly.
	(marlin_channel_insert_block): Set the correct block, calculate the
	ranges for everything, calculate the peak ranges.

	* marlin-sample-view.c (get_min_max_peaks): Do this stuff better.

	* marlin-sample.c (marlin_sample_insert): Lock the samples, and set the
	new length and dirty bit.

2003-05-05 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (marlin_sample_insert): Do a rough paste...

	* marlin-channel.[ch] (marlin_channel_insert): Do a slow and nasty
	insert.

2003-05-05 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (marlin_sample_insert): Stub.

2003-05-05 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (coverage_get_type): Register the enum.
	(class_init): Add the new property.
	(set_property): Add a case for it...should it be settable?
	(get_property): Return the value.

2003-05-02 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Once one
	channel goes EOS, thats us done.

2003-04-21 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (motion_notify_event): Fix the selection position

2003-04-21 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Don't move the cursor if
	we're expanding the selection or dragging the selection.

2003-04-20 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (sink_finalize): Move the free stuff here.
	(sink_dispose): Remove the free stuff from here, and dispose the parent
	(class_init): Connect the finalize

	* marlin-sample-view.c (set_selection): Set the selection. Taken from
	the motion event callback.
	(motion_notify_event): Return after we've scrolled.
	Make x positive.
	Remove the selection setting code.
	
2003-04-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (scroll_timeout_cb): Scroll the view depending 
	where the cursor is.
	(setup_scroll_timeout): Start scrolling.
	(remove_scroll_timeout): Remove scrolling.
	(motion_notify_event): Do the scrolly thing.

2003-04-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (class_init): Remove the text from the props

2003-04-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (scroll_to): Use gdk_window_scroll.

2003-04-14 Iain <iain@prettypeople.org>

	* marlin-channel.c (write_data_full): Split large amounts of data
	into acceptable sizes.
	(copy_block_into_channel): Copy a block into a channel, and return the
	list of blocks.
	(marlin_channel_insert_block): Insert a block into the channel at the
	frame.

	* marlin-block.[ch] (marlin_block_get_last): Return the last block in
	a list of blocks.

2003-04-14 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_new): Put the creation of the
	peak file here.
	(mmap_section): Take a file descriptor instead of a Channel.
	(c_ensure_mmapped): Pass the mmap_fd.
	(marlin_channel_get_block_for_frame): Special case the 0 frame.
	(marlin_channel_get_peak_for_frame): Ditto.
	(generate_peak_for_block): Given a block, generate a peak block for it
	(marlin_channel_generate_peaks): Rewrite using generate_peak_for_block.
	(marlin_channel_mix): Generate a peak block for the extra bit.

	* marlin-sample-view.c (get_min_max_peaks): Assert on the block.
	Make the peak code work for blocks that don't start at 0

2003-04-07 Iain <iain@prettypeople.org>

	* marlin-channel.c (c_ensure_mmapped): Set the block start and finish
	correctly.
	(marlin_channel_mix): Don't need to recalculate the block limits.

2003-04-07 Iain <iain@prettypeople.org>

	* marlin-channel.c (c_ensure_mmapped): Mmap the data without locking.
	(marlin_channel_ensure_mmapped): Lock channel, call c_ensure_mmapped.
	(marlin_channel_mix): Use lock free version.

2003-04-07 Iain <iain@prettypeople.org>

	* marlin-channel.c (write_data): Write the data without locking.
	(marlin_channel_write_data): Lock the channel and call write_data.
	(marlin_channel_mix): Use the lock free version, as we already hold the 
	lock.

2003-04-07 Iain <iain@prettypeople.org>

	* marlin-channel.c (mmap_section): Take an offset, and use it instead
	of calculating it ourselves.
	(marlin_channel_ensure_mmapped): Pass in offset and increase it as we
	go around.
	(marlin_channel_mix): Put the mix code at the end.
	Insert the extra block at the end.
	
	* marlin-sample-view.c (get_min_max_peaks): Set up some code to turn
	the peak file on and off.

2003-04-03 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_write_data): Continuing the editting
	of the way stuff has always been done, we seek from the end.
	(marlin_channel_ensure_mmapped): Clear the file region once we have
	mmapped everything.

2003-04-02 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_ensure_mmapped): Set the correct 
	number of frames in a block rather than calculating it from the amount
	of space written.

2003-04-02 Iain <iain@prettypeople.org>

	* marlin-channel.c: math.h must be included for pow to work.
	(marlin_channel_mix): Calculate the ratio better

2003-04-02 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_mix): Count the range correctly.
	Work out peaknum differently.

2003-04-01 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_mix): Mix the peaks too.

2003-03-23 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_generate_peaks): Clear the peaks 
	at the start.
	(marlin_channel_mix): Mix the two channels together. Still needs to 
	append the extra frames and to update the peak file.

	* marlin-sample.c (class_init): Remove the crap text descriptions from
	the properties because we don't ever need them, and they take up memory
	(marlin_sample_mix): Mix the channels together. Needs to handle 
	different options.

	* marlin-utils.[ch] (marlin_db_to_percent): Convert DB to percentage.

2003-03-18 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (marlin_sample_swap_channels): Swap the two 
	channels of a stereo sample.
	(set_property): Emit the dirty notification.

	* marlin-sample-view.c (sample_notify): Listen for the dirty notify
	and redraw the sample view.

2003-03-17 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_generate_peaks): Fix the region 
	length.

2003-03-17 Iain <iain@prettypeople.org>

	* marlin-program.[ch] (marlin_program_destroy_default): Free the default

	* marlin-channel.c (marlin_channel_free): Unlink and free the peak data
	too.

2003-03-16 Iain <iain@prettypeople.org>

	* marlin-utils.[ch] (marlin_make_title_label): Function to make a bold
	label.

2003-03-16 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (marlin_sample_new_from_sample_with_range): Just
	use the private structure here.
	(marlin_sample_new_from_sample): Copy the whole sample.

2003-03-15 IAin <iain@prettypeople.org>
	
	* marlin-play-pipeline.c (init): Use gstgconf to make the sink

	* marlin-record-pipeline.c (init): Use gstgconf to make the src

2003-03-12 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (marlin_sample_view_open_move_cursor_dialog): Set
	the default.

2003-03-12 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch] (dialog_response_cb): Set the cursor position
	(marlin_sample_view_open_move_cursor_dialog): Open dialog to move the
	cursor.

2003-03-07 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (realize): Doh, turn the cursor blink back on

2003-03-07 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_channel): Set the clip rectangle for 
	proper redrawing.
	(draw_sample_area): Ditto.
	(draw_dead_area): Ditto.

2003-03-07 Iain <iain@prettypeople.org>

	* Makefile.am: Add DATADIR

	* marlin-file-utils.[ch] (marlin_file): Check more locations.
	(marlin_dot_dir): Get the .marlin dir.
	(marlin_ensure_dir_exists): Check if the dir exists, create it if it 
	doesn't

2003-02-27 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_copy_data): Send data to the mmap
	file in the right block size.

2003-02-27 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_copy_data): Copy the data from the
	correct position.

2003-02-24 Iain <iain@prettypeople.org>

	* marlin-program.c (marlin_program_get_clipboard): Return the clipboard
	(marlin_program_set_clipboard): Set the clipboard.

2003-02-24 Iain <iain@prettypeople.org>

	* marlin-program.c (dispose): Write a dispose handler to unref the
	clipboard.
	(finalize): Free the private data.
	(init): Initialize the private data.

2003-02-24 Iain <iain@prettypeople.org>

	* marlin-program.[ch] (class_init): Add a clipboard-changed signal.

2003-02-24 Iain <iain@prettypeople.org>

	* marlin-program.[ch] (class_init): Add a new-window signal.

2003-02-24 Iain <iain@prettypeople.org>

	* marlin-program.[ch]: A new object to be the base of Marlin's
	application.

2003-02-23 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_new_from_sample_with_range): Set the
	length of the sample.

2003-02-20 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_generate_peaks): Only perform ops
	on the operation if it exists.

	* marlin-sample.c (marlin_sample_new_from_sample_with_range): Set the
	filename on the new sample.
	Set the channels in the new sample to the number of channels in the old.

2003-02-19 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_new): Initialise the file_region.
	(marlin_channel_write_data): Set the file region stuff.
	(marlin_channel_ensure_mmapped): Add locking. Work out what sections
	need to be mmapped from the file_region data.
	(marlin_channel_copy_data): A function to copy data from one channel
	into another.

	* marlin-sample.[ch] (marlin_sample_new): Return a MarlinSample.
	(marlin_sample_new_from_sample_with_range): Create a new sample out
	of an old one.
	
2003-02-12 Iain <iain@prettypeople.org>

	* marlin-stock.[ch]: Add the new pixmaps.

2003-02-10 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_get_block_for_frame): Handle the 
	final frame.
	(marlin_channel_get_peak_for_frame): Ditto.
	(marlin_channel_crop_range): Crop the area around the selection.

	* marlin-sample.c (marlin_sample_crop_range): Crop the selection.

2003-02-10 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_generate_peaks): Only write peaks out
	in blocks of 128 which will speed up the writes.

2003-02-10 Iain <iain@prettypeople.org>

	* marlin-block.c: Remove the lock debug stuff.
	(marlin_block_new_from_data): take a frame size.
	(everything): Fix lock usage.
	(marlin_block_split): Use the frame size correctly.

	* marlin-channel.c (marlin_channel_ensure_mmapped): Pass in the frame
	size.
	(marlin_channel_generate_peaks): Ditto.
	(marlin_channel_split_block): Only check if the start frame is the same
	(marlin_channel_clear_range): Clear the range.

	* marlin-sample-view.c (get_min_max_peaks): Get the right peaks.
	(draw_channel): Remove the start_block_frame.
	Calculate the end check correctly.

	* marlin-sample.c: Remove the lock debug macros and fix their usage.
	(marlin_sample_clear_range): Clear the range.

2003-02-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): If the
	offset is greater than the segment end, don't try to get the next block

2003-02-07 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (get_min_max_peaks): Use debug macros. Make the
	peak code work again.

2003-02-07 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_free): Use the lock macros.
	(marlin_channel_write_data): Use lock macros.
	(marlin_channel_get_block_for_frame): Ditto.
	(marlin_channel_get_peak_for_frame): Ditto.
	(marlin_channel_generate_peaks): Add locking. Calculate the progress
	of the operation and set it.
	(marlin_channel_delete_range): Use lock macros.

	* marlin-operation.c (set_property): notify a custom name...
	(do_set_op_progress): Do locking.
	(marlin_operation_progress): Lock.

	* marlin-read-write-lock.h: Add locking macros.

	* marlin-sample-element.c (marlin_sample_element_src_get): Remove the
	fixed thing.

2003-01-29 Iain <iain@prettypeople.org>

	* marlin-operation.c (set_property): Strdup the property.

	* marlin-sample.c (marlin_sample_generate_peaks): Pass in the operation
	(marlin_sample_ensure_mmapped): Ditto.

	* marlin-channelc (marlin_channel_generate_peaks): Set the description
	on the operation.

2003-01-28 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_generate_peaks): Take an operation
	and an error.
	(marlin_sample_ensure_mmapped): Ditto.
	(marlin_sample_delete_range): Ditto.

	* marlin-load-pipeline.c (load_eos_reached): Update for the above.

	* marlin-record-pipeline.c (record_eos_reached): Actually mmap and 
	generate peaks.

2003-01-28 Iain <iain@prettypeople.org>

	* marlin-sample.h: Remove a load of unused crap

	* marlin-operation.c (set_property): Emit a notify

2003-01-27 Iain <iain@prettypeople.org>

	* marlin-sample.[ch]: (set_property): Update.
	(do_set_notify): Update for object.
	(do_free_notify): Ditto.
	(marlin_object_notify): Rename marlin_sample_notify and make generic
	for a GObject.

2003-01-27 Iain <iain@prettypeople.org>

	* marlin-operation.c (finalize): Free the description.
	(set_property): Set the description.
	(get_property): Get the description.
	(class_init): Add a property.
	(init): Initialise description.

2003-01-24 Iain <iain@prettypeople.org>

	* marlin-block.c (marlin_block_new_from_data): Take a scale_factor.
	(marlin_block_split): Calculate the split frame taking the scale factor
	into account. Set the start/end/frames correctly.

	* marlin-block.h: Add scale factor.

	* marlin-channel.c (marlin_channel_ensure_mapped): Set scale factor.
	(get_for_frame): Remove useless bits. Return once we find it, NULL if
	we can't.
	(marlin_channel_generate_peaks): Use scale_factor.
	(marlin_channel_split_block): Lose the locking.
	(recalculate_block_ranges): Calculate the new start and finishes.
	(marlin_channel_delete_range): Split the blocks at the right place
	and delete them.

	* marlin-sample-element.c (marlin_sample_element_src_event): Clamp the
	end of the seek range to the end of the sample.

	* marlin-sample-view.c (get_min_max_peaks): Turn off use of peak files
	- again - until I can get deleting right. Get the right frame once the
	block has changed.
	(button_press_event): Record the position the mouse pointer goes down at
	(button_release_event): Check if the pointer has moved.

	* marlin-sample.c (marlin_sample_delete_range): Delete a range.
	
2003-01-20 Iain <iain@prettypeople.org>

	* marlin-channel.c (marlin_channel_split_block): Split the peaks 
	correctly.

2003-01-10 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_split_block): Split a block in two
	or if the split frame is already a block boundary, don't do anything.

2003-01-10 Iain <iain@prettypeople.org>

	* marlin-block.[ch] (marlin_block_split): Split a block in 2

2003-01-10 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (sample_notify): s/connect/link/

2003-01-08 Iain <iain@prettypeople.org>

	* marlin-channel.c (mmap_section): MMap the section and return the
	region.
	(marlin_channel_ensure_mmapped): Mmap in 128meg sections, so that the
	mmap doesn't exceed the maximum allowed mappings.
	(marlin_channel_generate_peaks): Don't mmap large sizes, don't run over
	areas.

2003-01-08 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_generate_peaks): Calculate the
	average peaks correctly.

2003-01-08 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (get_min_max_values): Get the values for when
	fpp == 1.
	(draw_channel): Move the fpp == 1 code to get_min_max_values. Use it.

2003-01-08 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_get_for_frame): Given the start
	of a block list, find the block that has a frame in it.
	(marlin_channel_get_block_for_frame): Get the block.
	(marlin_channel_get_peak_for_frame): Get the peak.

	* marlin-sample-view.c (get_max_min_peaks): Reenable the peak code.
	(draw_channel): Disable the fpp == 1 code.
	Don't use the start_block_frame stuff.

2003-01-08 Iain <iain@prettypeople.org>

	* marlin-block.[ch] (marlin_block_new_from_data): Take a generic 
	gpointer for the data.

	* marlin-channel.[ch] (marlin_channel_new): Move the basename.
	(marlin_channel_ensure_mmapped): Move the last pointer...
	(marlin_channel_generate_peaks): return a gboolean and take a GError.
	Generate the peaks, store them on disk, mmap the file, make a new block
	store it all.

	* marlin-sample-element.c (marlin_sample_element_src_get): Cast the 
	block data to float *
	
	* marlin-sample-view.c (get_max_min_peaks): Ditto.
	(draw_channel): Ditto.

	* marlin-sample.c (marlin_sample_generate_peaks): Pass a NULL GError.

2003-01-06 Iain <iain@prettypeople.org>

	* marlin-block.c (calculate_peaks): Removed.
	(free_peaks): Removed.
	(marlin_block_new_from_data): Don't calculate peaks.
	(marlin_block_free): Removed unneeded stuff.

	* marlin-channel.c: Add loads of system headers.
	(marlin_channel_new): Take in the parent sample and the filename.
	Calculate a mmap file and set it up.
	(marlin_channel_free): Free the blocks, unmap the mmapped regions, 
	unlink the file.
	(marlin_channel_write_data): Write the data into the mmap file.
	(marlin_channel_ensure_mmapped): Mmap the data.
	(marlin_channel_get_block_for_frame): Find the block the frame is in.
	(marlin_channel_generate_peaks): Calculate the number of peaks...doesn't
	do anything yet.

	* marlin-load-pipeline.c (load_eos_reached): MMap the loaded data,
	generate the peaks.

	* marlin-sample-element.c (store_block): Write the data into the channel	Don't mmap anything yet.
	(marlin_sample_element_src_get): Calculate the offsets into the block
	based on the number of frames in the block.

	* marlin-sample-view.c (get_min_max_peaks): Always calculate from the
	frame data...we don't have a peak cache anymore.
	(draw_channel): Don't base calculations on a fixed block size.
	
	* marlin-sample.c: Remove unneeded stuff from the Private.
	(finalize): Don't need to unlink file.
	(set_property): Don't need to open a mmap file.
	(marlin_sample_write_and_mmap_data): Remove.
	(marlin_sample_generate_peaks): Generate peaks for each channel.
	(marlin_sample_ensure_mmapped): MMap each channel.

2003-01-04 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (store_block): Update for changes in 
	marlin-sample.c

	* marlin-sample.c (marlin_sample_write_and_mmap_data): Take in the
	number of frames to be stored. Means we don't need to mmap entire blocks

	* marlin-channel.h: Store the number of frames in the channel.

	* marlin-block.h: Store the position this block is.

2003-01-03 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch] (marlin_sample_view_can_zoom_in): 
	(marlin_sample_view_can_zoom_out): Functions to check if the view can
	be zoomed in or out.

2003-01-02 Iain <iain@prettypeople.org>

	* marlin-operation.[ch] (class_init): Create a cancelled signal.
	(do_op_cancel): Emit signal.
	(free_op_cancel): Clean up.
	(marlin_operation_cancel): Cancel the operation.

2003-01-02 Iain <iain@prettypeople.org>

	* marlin-sample.c: Remove unused things

2003-01-01 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Don'tdo anything if we dont
	have a sample.
	(button_release_event): Ditto.

2003-01-01 Iain <iain@prettypeople.org>

	* marlin-time-line.c (set_property):
	(get_property):
	(class_init): Add a selection property.
	(finalize): Unref the selection.
	(marlin_time_line_set_selection): Remove.

2003-01-01 Iain <iain@prettypeople.org>

	* marlin-load-pipeline.c (get_progress): Update.

	* marlin-pipeline.c (marlin_pipeline_get_state): Function to aid in
	debugging.

	* marlin-sample-element.c (get_percent_from_element): Update.
	(marlin_sample_element_src_query): Update.
	
	* marlin-save-pipeline.c (get_progress): Update.

	* Makefile.am: Remove gstoneton.

2002-12-31 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (move_cursor): Don't emit the signal if dx is 0
	(real_move_cursor): Cast to an int so the cursor goes to the right place

2002-12-30 Iain <iain@prettypeople.org>

	* gstoneton.c (gst_oneton_connect): Add the element to the sample before
	trying to set the caps.
	(init): Set the width to 0.

2002-12-27 Iain <iain@prettypeople.org>

	* marlin-sample-view (motion_notify_event): Don't do anything if theres
	no sample.

	* Makefile.am: Add the test-save-pipeline program

	* test-save-pipeline.c: Test the save pipeline.

2002-12-27 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_query): Remove the
	check for the format.
	
	* marlin-save-pipeline.c (get_progress): Get the src0 pad.
	(save_handoff): Tell the pipeline the progress has changed.
	(init): Connect to the handoff signal.

2002-12-26 Iain@prettypeople.org

	* Makefile.am: Add the load and save pipelines to the compile.

	* marlin-operation.c: Add lock debugging.
	(finalize): Free the locks.
	(init): Create a lock.
	(do_op): Emit the signal.
 	(free_op): Free the struct.
	(marlin_operation_do): Do the operation.
	(marlin_operation_start): Wrapper.
	(marlin_operation_finish): Wrapper.
	(do_set_op_progress): Emit the progress signal.
	(do_free_op_progress): Free the struct.
	(marlin_operation_progress): Change the progress.

	* marlin-pipeline.[ch]: Use operations.
	(finalize): Unref the operation.
	(set_property): Set the operation.
	(get_property): Get the operation.
	(get_progress): Default method.
	(class_init): Setup the set and get methods and the get_progress
	Add an Operation property.
	(marlin_pipeline_set_state): Start the operation.
	(do_eos): End the operation.
	(marlin_pipeline_remove): Remove an element from the pipeline.
	(marlin_pipeline_progress_changed): Tell the operation the progress has
	changed.

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Comment out
	the progress stuff. This is now handled automatically.
	(marlin_sample_element_src_get): Ditto.

	* marlin-sample-view.c (sample_op_finished): Remove.
	(set_property): Don't do the funny operation thing. Calculate the best
	fit and redraw the widget.
	(init): Set the default number of channels.
	(marlin_sample_view_new): Don't take a sample.

	* marlin-sample.c: Remove the signals.
	(class_init): Remove the signals.
	(eos_callback): Remove.
	(oneton_new_pad): Gone.
	(pipeline_destroyed): Ditto.
	(shutdown_load_pipeline): Vanished.
	(marlin_sample_load_file): Piff paff poof.
	(marlin_sample_new_from_file): Away for good.
	(save_eos_callback): AWOL.
	(save_shutdown): Disappeared.
	(marlin_sample_save_file_as): Unrecognised.
	(marlin_sample_save_file): On holiday.
	(do_op): Moved to MarlinOperation
	(free_op): Ditto.
	(marlin_sample_do_op): """"""
	(do_set_op_progress): Moved.
	(do_free_op_progress): Away.
	(marlin_sample_op_progresS): Removed.
	(marlin_sample_start_save): Deleted.
	(marlin_sample_finish_save): Removed.
	(marlin_sample_start_load): Removed.
	(marlin_sample_finish_load): Gone.

	* test-play-pipeline.c (idle_func): Setup a load pipeline and operation.
	
	* test-sample-view.c (load_started): Say hello.
	(idle_func): Set up an operation and load pipeline.
	
	* test-sample.c (idle_func): Set up an operation and load pipeline.

2002-12-23 Iain <iain@prettypeople.org>

	* marlin-operation.c (class_init): Add signals.

2002-12-23 Iain <iain@prettypeople.org>

	* marlin-operation.[ch]: New object.

2002-12-22 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (set_property): Don't try to reconnect the
	pipeline if the sample is set to NULL

2002-12-22 Iain <iain@prettypeople.org>

	* Don't compile the plugin stuff.

2002-12-13 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (f2ipad_disconnected): Remove the pad from the
	f2i when it's disconnected.
	(oneton_new_pad): Connect to the disconnected signal.

	* marlin-sample-element.c (marlin_sample_element_src_get): Set the caps
	if none are set.
	(marlin_sample_element_src_connect): Set new caps.
	(create_channel): Hook up to the connect function.
	(sample_notify): use reconnect instead of disconnect/reconnect.

	* marlin-sample.c: Remove debugging.

2002-12-11 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (sample_notify): Handle when the number of 
	channels in the sample changes.

2002-12-07 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (get_percent_from_element): Do a query on the
	element to work out the percentage complete.

2002-12-06 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (sample_notify): Handle more than just total 
	frames.
	
	* marlin-time-line.c (get_property): Get the FPP value.
	(class_init): Add a frames per pixel property.

2002-12-06 Iain <iain@prettypeople.org>

	* marlin-sample.c (set_property): Handle channel property changing by
	removing the correct number of channels, rather than constantly adding
	more and more channels, until we end up with 60 allocated channels for
	a stereo sample.

2002-12-05 Iain <iain@prettypeople.org>

	* gstoneton.c (gst_oneton_connect): Disconnect the pads if they're
	connected.
	
	* marlin-pipeline.c (marlin_pipeline_eos): Set the eos on the pipeline.

	* marlin-record-pipeline.c (connect_pipeline): Make this generic.
	(set_property): Get the sample rate and channels instead of set them.
	Connect the pipeline.
	(oneton_new_pad): Get the intsink pad.
	(record_eos_reached): Set the pipeline eos
	(init): Get the audiosrc's src pad. Connect to the sink's eos.
	Don't connect the pipeline yet.
	(marlin_record_pipeline_set_eos): Send an EOS to the src element.

	* marlin-sample-element.c (pad_disconnected): Remove the pad from the
	pad list.
	(request_new_pad): Hook up to the disconnected signal.

	* test-record-pipeline: Update to work.

2002-12-02 Iain <iain@prettypeople.org>

	* marlin-record-pipeline.c (init): Use Gconf

2002-11-30 Iain <iain@prettypeople.org>

	* marlin-time-line.c (_marlin_time_line_paint): Special case when there
	are 0 frames.

2002-11-29 Iain <iain@prettypeople.org>

	* marlin-sample-element (notify_callback): Disconnect the pipeline, 
	change the caps, then reconnect.

2002-11-29 Iain <iain@prettypeople.org>

	* marlin-sample-element (marlin_sample_element_sin_connect): Only change
	the sample rate if it's really different.
	(create_channel): Make this functionality a seperate function

	* marlin-sample-view.c: Fix typo

	* test-sample-view.c: Fix typo.

2002-11-29 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (remove_srcpads): Disconnect the pads.
	(sample_notify): Check for the total frames notify.
	
	* marlin-sample-view.c (sample_frames_changed): Make this a helper
	function not a callback.
	(sample_notify): The notify callback.
	(sample_op_finished): Call the helper, connect to the notify signal.
	(set_property): Connect to the notify signal.

	* marlin-sample.c (set_property): Call the notify.
	(class_init): Remove the total-frames-changed signal.
 	(marlin_sample_notify): Emit the notify signal.

	* marlin-sample.h: Remove the callback entries.
	
	* test-sample-view.c: Update for notify changes.
	
	* test-sample.c: Ditto.
	
2002-11-27 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Grab the focus.

2002-11-18 Iain <iain@prettypeople.org>

	* Changes...

	* marlin-sample.c (marlin_load_ample): Use spider instead of mucking
	around with type finds and caches.

	* marlin-stock.[ch]: add the new icon.

2002-11-04 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): Debug.
	
	* test-record-pipeline.c (eos_reached): Play the recorded sample.

2002-11-03 Iain <iain@prettypeople.org>

	* marlin-record-pipeline.c: More work.

	* Makefile.am: Compile the test program.

	* test-record-pipeline.c: New test program

2002-10-17 Iain <iain@prettypeople.org>

	* marlin-record-pipeline.[ch]: New record pipeline.

	* Makefile.am: Compile the above.

2002-10-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (class_init): Make the cursor_moved signal
	RUN_FIRST

2002-10-16 Iain <iain@prettypeople.org>

	* marlin-utils.h: Add a define to set the border width on dialogs

2002-10-16 Iain <iain@prettypeople.org>

	* marlin-utils.[ch]: Some utility functions that everything will need

	* Makefile.am: Compile.

2002-10-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_subselection): Change the colour of the
	selection depending on whether the widget has focus

2002-10-15 Iain <iain@prettypeople.org>

	* marlin-pipeline.[ch]: Add the rest of the signals to the generic
	pipeline.

	* marlin-play-pipeline.[ch]: Remove the signals and just invoke the
	parent objects ones instead :)

2002-10-14 Iain <iain@prettypeople.org>

	* marlin-pipeline.[ch]: New generic pipeline.

	* marlin-play-pipeline.[ch]: Derive from the generic pipeline.

	* test-play-pipeline.c: Use new functions.

	* Makefile.am: Compile new files

2002-10-05 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Remove
	the filesrc stuff

2002-10-04 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Use the
	new marlin_sample_get_percent function.

	* marlin-sample.[ch] (marlin_sample_do_op): Add a callback for the 
	percentage.
	(load_op_get_percent): Function to get the loadpercent.
	(marlin_sample_get_percent): Get the percentage complete.

2002-10-02 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (all_pads_eos): Fix typo

2002-10-02 Iain <iain@prettypeople.org>

	* gstoneton.c (gst_oneton_connect): Remove debugging.

	* marlin-sample-element.c (marlin_sample_element_sink_loop): On EOS
	event return to the start of the loop.
	On completion, reset the list of channels.
	(sink_set_property): Clear the data.
	(all_pads_eos): Fix major bug. = is not the same as ==
	
2002-09-30 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (frames_changed): Set the new frames.
	(set_property): Disconnect signals already listening, connect a new
	one.
	: Add SEEK_SEGMENT as an allowable event.

2002-09-29 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (set_property): Replace the loaded check with a
	check for the number of samples.

	* marlin-sample.c (get_property): Remove the loaded property.
	(class_init): Remove the loaded property.

2002-09-29 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_new): Allow a
	NULL sample.

2002-09-29 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_new): Set a name
	(marlin_sample_element_src_new): Set a name.

2002-09-27 Iain <iain@prettypeople.org>

	* gstoneton.c (gst_oneton_connect): Add debug.

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Put the
	correct number of frames into the sample.

2002-09-23 Iain <iain@prettypeople.org>

	* marlin-sample-element.c: Warnings free :)
	(marlin_sample_element_sink_change_state): Reset the state.
	(sink_class_init): Hoook up the change state.

2002-09-23 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (sink_dispose): Free up all the resources.
	(marlin_sample_element_sink_connect): Store the rate.
	(sink_set_property): Set the sample as a property.
	(sink_get_property): Get data...
	(class_init): Set up the properties.
	(init): Initialise the rate.
	(marlin_sample_element_sink_new): Use the sink property.
	(marlin_sample_element_src_dispose): Free the list of channels.

	* test-sample.c (load_finished): Fire off a timeout function to do
	the shutdown so that the pipeline has a chance to be destroyed and
	the sample is properly unreffed.

2002-09-22 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_release_event): If a selection that has
	been added starts and finishes on the same frame, remove it.

2002-09-22 Iain <iain@prettypeople.org>

	* marlin-sample.c (finalize): Destroy the pipelines if they exist.
	(do_set_frames): Emit the signal in the gui thread.
	(do_free_frameS): unref.
	(marlin_sample_frames_changed): Queue the signal to be sent in the GUI
	thread.

2002-09-22 Iain <iain@prettypeople.org>

	* marlin-plugin.c (marlin_plugin_initialise): Ifdef'd the whole thing
	so it doesn't do anything.

	* marlin-sample.c (save_shutdown): Destroy the save pipeline.
	(marlin_sample_save_file_as): Hook up the the shutdown signal.
	(do_op): Emit the started or finished signal.
	(free_op): Unref the sample.
	(marlin_sample_do_op): Start or finish an op.
	(do_set_op_progress): Emit the progress.
	(do_free_op_progress): Unref the progress.
	(marlin_sample_op_progress): Set the op progress.
	(marlin_sample_start_save): Just a wrapper for do_op
	(marlin_sample_finish_save): Ditto.
	(marlin_sample_start_load): Ditto.
	(marlin_sample_finish_load): Ditto.

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Set the
	total number of frames in the sample.

2002-09-21 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (finalize): Disconnect the shutdown signal
	and set the pipeline state to NULL.
	(init): Store the shutdown signal.

2002-09-21 Iain <iain@prettypeople.org>

	* marlin-sample-element.c: Add some asserts.

	* test-play-pipeline.c: Make repeat work. Needs newest GStreamer.

2002-09-20 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (class_init): Add a SHUTDOWN signal.
	(finalize): Don't set the pipeline to NULL.
	(do_shutdown): Emit shutdown signal.
	(shutdown): Emit signal.

	* marlin-sample-element.c (marlin_sample_element_src_get): Do segments
	correctly.
	(marlin_sample_element_src_event): Add debugging crap.

	* marlin-sample.c (pipeline_destroyed): Unused.
	(shutdown_load_pipeline): Destroy load pipeline.
	(marlin_sample_load_file): Connect to the shutdown signal.

	* test-play-pipeline.c (eos): Move
	(shutdown): Destroy and quit.
	(play_clicked): Create a pipeline if one doesn't exist.
	(stop_clicked): Return if pipeline is NULL.
	(pause_clicked): Return if pipeline is NULL.
	(repeat_clicked): Nothing.
	
2002-09-19 Iain <iain@prettypeople.org>

	* Makefile.am: Compile a pipeline tester.

	* gstoneton.c: Add a license to the details.

	* marlin-sample-element.c (marlin_sample_element_src_event): Handle
	DISCONTINUOUS events.
	(marlin_sample_element_src_get): Generate a timestamp.
	(marlin_sample_element_src_state_change): Reset the timestamp.
	(src_set_property): Set the end of the range to the total number of
	samples.

	* marlin-sample-view.c (sample_load_finished): Update for new code.
	(destroy_cursor): Free the other 2 cursors.
	(draw_sample_area): Don't keep the GC around.

	* marlin-sample.[ch]: Combine LOAD_STARTED and SAVE_STARTED into
	OP_STARTED. Ditto LOAD/SAVE_FINISHED.

	* test-sample-view.c: Update for new signals.

	* test-sample.c: Ditto.

	* test-play-pipeline.c: Ditto.
	
2002-09-18 Iain <iain@prettypeople.org>

	* test-sample-view.c (load_finished): Free filename.

2002-09-18 Iain <iain@prettypeople.org>

	* test-sample-view.c (total_frames_changed): Free filename.
	(load_started): Free filename.

2002-09-18 Iain <iain@prettypeople.org>

	* gstoneton.c (gst_oneton_chain): Optimise for sink being mono.

2002-09-17 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (marlin_play_pipeline_seek_range): Set the
	format to units.

	* marlin-sample-element.c (marlin_sample_element_src_event): Handle
	seek segments correctly.

2002-09-17 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (marlin_play_pipeline_seek): Fix.
	(marlin_play_pipeline_seek_range): Seek a range.

	* marlin-sample-element.c: Fix compile errors.
	
2002-09-17 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_event): Handle
	segment events.
	(marlin_sample_element_src_get): Handle the start stop event.
	(marlin_sample_element_src_query): Get the start and finish.
	(marlin_sample_element_src_seek_range): Do a range seek.

2002-09-17 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): Remove
	debugging spew.
	(marlin_sample_element_src_change_state): Reset to the start.
	(class_init): Connect.

	* marlin-sample-view.c (set_scroll_values): Cast to guint64
	(scroll_to): Ditto.

	* marlin-time-line.c (set_property): Ditto.

2002-09-17 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_query): Get the
	query functions.

	* Makefile.am: Compile a test-gst-alsa program that demonstrates a 
	crash.

	* test-gst-alsa.c: Demonstrate a crash in alsasink.

2002-09-16 Iain <iain@prettypeople.org>

	* marlin-channel.[ch] (marlin_channel_get_block_for_frame): Take a
	guint64

	* marlin-marshal.list: Add UINT64 marshals.

	* marlin-play-pipeline.[ch] (class_init): Use guint64 for signals.
	(pipeline_tick): Ditto. Remove the source on state change.
	(marlin_play_pipeline_seek): Seek the src element.
	
	* marlin-sample-element.[ch]: Use 64bit uints.
	(marlin_sample_element_src_seek): Use a simplier seek.

	* marlin-sample-selection.[ch]: Use 64bit uints.

	* marlin-sample-view.[ch]: Use 64bit uints.

	* marlin-sample.[ch]: Use 64bit uints.

	* marlin-time-line.[ch]: Use 64bit uints.

	* test-sample-view.c (total_frames_changed): Update for new signal.
	(progress_changed): New signal handler.
	(main): Connect to progress signal.

	* test-sample.c: Add some seeking tests.

	* test-time-line.c: Add some guint64 checks.
	
2002-09-16 Iain <iain@prettypeople.org>

	* marlin-time-line.c (_marlin_time_line_paint): Don't create a new GC.
	It's a memory leak

2002-09-15 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (do_eos): Remove debug.
	(do_position): Emit the position signal.
	(position_changed): Start the new op.
	(pipeline_tick): Get the tick from the clock and get the position.
	(state_change): When the state changes, start the timeout.
	(init): Connect to the state change signal.

2002-09-14 Iain <iain@prettypeople.org>

	* Makefile.am: Don't link against -lbytestream

2002-09-14 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (finalize): Set the pipeline state to NULL
	before destroying.
	(class_init): Add some signals.
	(do_eos): Emit the signal in the gui thread.
	(eos_reached): Tell the GUI thread to emit a signal.
	(init): Hook up the signal.

2002-09-14 Iain <iain@prettypeople.org>

	* marlin-play-pipeline.c (init): Get the gconf key to get the
	audiosink

2002-09-14 Iain <iain@prettypeople.org>

	* Makefile.am: Remove JACK stuff.

	* marlin-play-pipeline.c (finalize): Only unref the sample if it's not
	NULL. Free the priv struct.
	(init): Allocate the correct structure.

	* marlin-sample-element.c (src_dispose): Unref and disconnect only if
	not NULL.
	(marlin_sample_element_src_event): Get a new block when needed.
	(create_srcpads): Store the channel sample.

2002-09-14 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (sample_notify): Something in the sample has
	changed.
	(dispose): Disconnect the signal ID.
	(set_property): Disconnect the old signal and connect  the new one.

2002-09-14 Iain <iain@prettypeople.org>

	* Makefile.am: Compile the new code.

	* marlin-sample-element.c (sink_init): Remove empty if.
	(src_dispose): Destroy the src.
	(marlin_sample_element_src_get): Return if the sample is NULL.
	(marlin_sample_element_src_event): Return if the sample is NULL.
	(create_srcpads): Move.
	(remove_srcpads): Remove all the srcpads on the element.
	(set_property): Handle property changes.
	(get_property): 
	(src_class_init): Setup all the new methods.
	(src_init): Initalise everything to 0.
	(marlin_sample_element_src_new): Use the propertys.

	* test-sample.c: Play the sample once it's loaded.

	* marlin-play-pipeline.[ch]: New code to play a sample through GST.

2002-09-13 Iain <iain@prettypeople.org>

	* marlin-gst-extras.c (get_encoder_mime_types_for_raw): Get factories
	that can accept audio/raw data.

	* test-mime.c: Test program for above function.

	* Makefile.am: Compile test-mime

2002-09-13 Iain <iain@prettypeople.org>

	* marlin-sample.c (found_type): Make a spider instead of the evil
	autoplugger.
	(cache_empty): Change to handle autoplugger changes.

	* marlin-gst-extras.[ch]: File to have utility functions for GST.
	
2002-09-12 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): Work out
	the percentage and set it.

	* marlin-sample.[ch] (class_init): Add a new progress signal.
	(do_set_load_progress): Emit signal.
	(marlin_sample_save_progress): Set progress.
	(do_set_save_progress): Emit signal.
	
2002-09-12 Iain <iain@prettypeople.org>

	* .cvsignore: Ignore other crappy files.

2002-09-12 Iain <iain@prettypeople.org>

	* marlin-sample.c (save_eos_callback): Don't destroy the pipeline.
	(marlin_sample_save_file_as): On failure say the save has finished.
	(marlin_sample_save_file): don't free uninitialised memory, it makes
	things crash.
	(set_property): Don't write out info.

2002-09-11 Iain <iain@prettypeople.org>

	* marlin-sample.c (start_save_op): Fix typo.

2002-09-11 Iain <iain@prettypeople.org>

	* marlin-sample.c (get_encoder_factory_for_mime): Fix the code so it
	doesn't dereference NULLs.
	(marlin_sample_save_file_as): Error out if factory is null.

2002-09-11 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): Remove 
	debugging spewage.

	* marlin-sample.c (get_encoder_factory_for_mime): Get an encoder for
	a given mimetype.
	(save_eos_callback): Emit the finished signal and clean up the
	pipeline
	(marlin_sample_save_file_as): Do the autoplugging ourselves.
	(do_start_save): Emit the signal in the GUI thread.
	(free_start_save): Unref the sample.
	(marlin_sample_start_save): Start the save.
	(do_finish_save): Emit the finished signal.
	(free_finish_save): Unref the sample.
	(marlin_sample_finish_save): Emit the signal in the other thread.

	* test-sample.c (load_finished): Save the sample.
	(save_started): Inform user.
	(save_finished): Clean up and quit.
	(main): Save the new filename and mimetype.

2002-09-11 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (store_block): Store the correct data.

	* marlin-sample.[ch] (class_init): Add save signals.
	(marlin_sample_save_file_as): Hook up the autoplugger again.

2002-09-09 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): Remove
	debugging spew.
	Make offset_in_block correctly.
	(create_srcpads): Get the current buffer.
	(marlin_sample_element_src_new): Get the total number of frames.

	* marlin-sample.c (marlin_sample_save_file_as): Remove use of 
	ntoone as float2int will combine channels as needed.
	Temp hookup output to osssink so that we can hear if it's working.

2002-09-09 Iain <iain@prettypeople.org>

	* gstntoone.c (gst_ntoone_connect): Comment out half this function.
	(request_new_pad): Function to create a pad.
	(gst_ntoone_class_init): Hook up request_new_pad.

	* marlin-sample-element.c (marlin_sample_element_src_get_event_mask):
	Function to get the event mask.
	(marlin_sample_element_src_get): Print debugs and fix typo.
	(marlin_sample_element_src_connect): REmove.
	(create_srcpads): Don't need to re-set the caps.

	* marlin-sample.c (marlin_sample_save_file_as): Create the save file
	pipeline. And try to run it...
	(marlin_sample_save_file): Save the file.

	* test-sample.c: Save the file out once it's loaded...doesn't work.

2002-09-09 Iain <iain@prettypeople.org>

	* gstntoone.c: Allow the pads to take 4000 to 96000 rates.
	(gst_ntoone_fast_16bit_chain): Combine multiple channels into one.
	(gst_ntoone_fast_8bit_chain): Ditto.
	(plugin_init): GST stuff.

	* gstoneton.c: Allow the pads to take 4000 to 96000 rates.

	* Makefile.am: Compile the ntoone plugin

2002-09-08 Iain <iain@prettypeople.org>

	* gstntoone.c: An N to One combiner.

2002-09-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_event): Handle
	events.
	(create_srcpads): Hook up the event function

2002-09-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_src_get): Duh. Return
	the buffer dummy

2002-09-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (get_channel_for_pad): Given a pad, find
	it's channel.
	(marlin_sample_element_src_get): Get the next buffer load.
	(marlin_sample_element_src_connect): Return delayed if caps isn't
	fixed.
	(create_srcpads): Create all the src pads and their channels.
	(marlin_sample_element_src_new): Get the channels and rate of the
	sample and create the pads.

2002-09-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.[ch] (sink_class_init): Make the function name
	unique.
	(sink_init): Ditto.
	(sink_factory): Sink pads can only take mono data.
	(marlin_sample_element_sink_get_type): Use new names.
	(marlin_sample_element_src_loop): Stub function.
	(marlin_sample_element_src_connect): Stub function.
	(src_factory): Return a pad template for the src pads.
	(src_class_init): Setup class.
	(src_init): Set up instance
	(marlin_sample_element_src_get_type): Get type.
	(marlin_sample_element_src_new): New...

2002-09-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Do the
	progress correctly.

2002-09-08 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_sink_loop): Use
	GstBuffers instead of GstByteStreams.

2002-09-08 Iain <iain@prettypeople.org>

	* Makefile.am: Add the gstbytestream to the link line.

	* gstoneton.c (gst_oneton_connect): Get the channels the right way,
	return DELAYED if channels == 0. Get the channel width.
	Add the pad to the element.

	* marlin-sample-element.[ch] (marlin_sample_element_dec_pull): Remove.
	(deinterlace_and_convert_to_float): Remove.
	(store_block): Shrink function so it only needs to do one channel.
	(all_pads_eos): Check if all the pads are EOS.
	(marlin_sample_element_sink_loop): Rewrite to use the new mono
	channels.
	(marlin_sample_element_sink_connect): Don't get the channels here.
	(request_new_pad): Create a new pad, set the number of channels.
	(sink_factory): Create a pad template for the request pads.
	(class_init): Add the request pad function. Add a pad template to the
	class.
	(init): Remove all the crap :) Simplify.
	(marlin_sample_element_dec_tidy_up): Remove. Whoopee.

	* marlin-sample.c: (eos_callback): Remove the tidy up thing, don't
	set EOS.
	(oneton_new_pad): When the oneton makes a new pad, make an i2f and
	connect them all to the sample sink.
	(found_type): Don't use autoplug_to_renderers.
	
2002-09-06 Iain <iain@prettypeople.org>

	* gstoneton.c: A multi channel de-interlacer.

	* Makefile.am: Compile the gst plugin.

2002-09-05 Iain <iain@prettypeople.org>

	* marlin-cursors.[ch]: Added the new cursors.

	* marlin-sample-view.c: Hook up the new cursors and set them when
	buttons are pressed.

2002-09-05 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_dec_connect): Used my
	newly aquired gstreamer understanding to fix this function.
	(marlin_sample_element_dec_loop): Remove the need for the ready
	member.

2002-09-04 Iain <iain@prettypeople.org>

	* marlin-sample-selection.[ch] (marlin_sample_selection_remove):
	Remove a subselection from the selection.

	* marlin-sample-view.c (sample_selection_changed): Just redraw the
	whole window.
	(button_press_event): When we grab the cursor set the is_grabbed
	member.
	(button_release_event): If the Ctrl key is depressed, delete the
	selection. If is_grabbed is set, ungrab the cursor.

2002-09-04 Iain <iain@prettypeople.org>

	* marlin-stock.[ch]: Add the repeat icon.
	
2002-09-04 Iain <iain@prettypeople.org>

	* marlin-sample-selection.c (compress_selection): Handle the cases
	where the overlapping selections do not have the same coverage.
	(marlin_sample_selection_add): Don't compress the selection here.

2002-09-03 Iain <iain@prettypeople.org>

	* marlin-sample-selection.c (compress_selection): A partly made
	function that looks for overlapping selections and compresses them
	into one.
	(marlin_sample_selection_add): Add the selection sorted.
	(marlin_sample_selection_changed): Take a boolean to say whether to
	compress the selections or not.

	* marlin-sample-view.c (real_move_cursor): Compress the selection.
	(button_release_event): Compress the selection.
	(motion_notify_event): Don't compress the selection.

2002-09-03 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): If the shift button is
	pressed while creating a new selection, don't clear the previous
	selections.

2002-09-03 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_dec_loop): Loop
	around yielding to Gstreamer until we're ready to decode correctly.
	(init): Set the ready to false.

	* marlin-sample-element.h: Add a ready boolean member.

	* marlin-sample-view.c (button_press_event): Set coverage to BOTH if
	there's only one channel.
	(motion_notify_event): Only change the cursor to show L and R if
	there's multiple channels.

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (can_expand_selection): Worked out why the
	threshold didn't work (Reason: I'm a dumbass). Made it work. A simple
	printf would have told me...
	(button_press_event): Check the can expand condition before the in
	selection.
	
2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Don't handle a button
	click in the dead area.

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample.c (eos_callback): Revert.
	(marlin_sample_get_filesrc): Get the filesrc.

	* marlin-sample-element.c (marlin_sample_element_dec_loop): calculate
	the percentage correctly.

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample.c (eos_callback): Destroy the pipeline.
	(marlin_sample_load_file): Store the filesrc.

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: remove some debugging spew

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample.c (class_init): Make a selection property.
	(get_property): Return the selection.
	(marlin_sample_get_selection): Remove.

	* marlin-sample-view.c (set_property): Get the selection property.

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_dec_loop): Remove
	debugging spewage.
	(marlin_sample_element_dec_tidy_up): Ditto.

2002-09-02 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (marlin_sample_element_dec_tidy_up): The
	most hideous hack ever. The EOS seems to come from somewhere else
	other than the loop function, so the loop function quits and never
	gets a chance to tidy up. So as a hack, have the tidy up here, and
	call it from our EOS callback. I've probably done something REALLY
	REALLY dumb but it's 2am and I'm too tired to look into it. This
	works, so I'm happy :) Please fix this and I'll be forever in your
	debt.

	* marlin-sample.c (eos_callback): Call the tidyup hack.

2002-09-01 Iain <iain@prettypeople.org>

	* marlin-sample-element.c: Remove crap functions that just showed I
	had no clue about this GStreamer stuff.

2002-09-01 Iain <iain@prettypeople.org>

	* marlin-sample-element.c (get_caps): Function to search for desired
	caps.
	(deinterlace_and_convert_to_float): Function to deinterlace a 
	GstBuffer and convert the data to floats.
	(store_block): MMap the data and append it to the channel.
	(marlin_sample_element_dec_loop): Get the number of channels.
	Make buffers to store partial blocks. Build blocks out of the
	deinterlaced data, and mmap them when full.
	(marlin_sample_element_dec_connect): Get the info from the caps.
	(init): Set the connection function.

	* marlin-sample.c: Include gst.h and add some pipeline stuff.
	(finalize): Lock stuff.
	Change the way stuff is loaded so that it uses GStreamer instead of
	the crappy plugins :)
	
	* test-sample-view.c: Include gst.h
	(main): Initialise GST.

	* test-sample.c: Include gst.h
	(main): Initialise GST.
	
2002-08-26 Iain <iain@prettypeople.org>

	* marlin-sample-element.[ch]: Code for a GStreamer element.

	* Makefile.am: Compile new files

2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Dumbass typo meant that
	I was adding instead of *

	* marlin-time-line.c (_marlin_time_line_paint): Draw the selection
	coverage in the timeline.
	
2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Got annoyed typing view.
	(button_release_event): Ditto.

2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-selection.[ch] (marlin_sample_selection_add): Add a
	coverage parameter.
	(marlin_sample_selection_frame_in_selection): Report the subselection
	to the user. and check the coverage.
	(marlin_sample_selection_get_sub_for_frame): Removed. 
	marlin_sample_selection_frame_in_selection does the same.
	
	* marlin-sample-view.c (real_move_cursor): Update to handle coverage.
	(draw_selections): Only draw the selection if the coverage is correct.
	(can_expand_selection): Handle coverage.
	(button_press_event): Handle coverage.
	(motion_notify_event): Change the cursors coverage. Handle coverage
	elsewhere. Handle changes in coverage.
	
2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (motion_notify_event): Limit X to the bounds of
	the widget. Emit the selection changed signal.

	* marlin-time-line.c (_marlin_time_line_paint): Draw the decels after
	everything else, so that the selection painting doesn't obscure them.
	Calculate the width of the selection correctly. Doing the subtraction
	first leaves rounding errors.
	(selection_changed): Don't try and be smart, just draw the whole area.

2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_selections): Don't need to draw the extra
	(button_press_event): Make the inital button press the same as the
	expansion button press, but set the in_selection flag.
	(button_release_event): Don't need to handle the in_selection
	situation.
	(motion_notify_event): Special case the in_selection adjustments.

	* marlin-time-line.c: Add a Selection object.
	(_marlin_time_line_paint): Draw the selections.
	(selection_changed): Draw the whole widget.
	(marlin_time_line_set_selection): Set the selection and connect to the
	changed event.

2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (motion_notify_mask): If we're expanding the
	selection, lock it.

2002-08-17 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: Add a flag to say if we're expanding or not.
	(can_expand_selection): Move function as it's useful in more places.
	(button_press_event): Check if we can expand the selection, if so,
	just reference the subselection.
	(motion_notify_mask): If we're expanding the selection, don't reset
	the edges to the inital point, and if we're in the middle of the 
	selection then calculate the ends from the difference in distance to 
	the point.

2002-08-17 Iain <iain@prettypeople.org>

	* marlin-cursors.c: Allow a cursor to be the standard type.
	(marlin_cursor_get): Check if its a standard cursor, or a custom one.

	* marlin-sample-selection.h: Add some prototypes.

	* marlin-sample-view.c (button_press_event): Get the leftright arrow
	and set it as the cursor while moving.
	(can_expand_selection): Check if the cursor is on the end points of
	a selection to see if we can expand it.
	(motion_notify_event): Check if we can expand the selection, if so 
	change the cursor.

2002-08-16 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (sample_selection_changed): Calculate the
	window area correctly.
	(real_move_cursor): Calculate the window area correctly.
	(motion_notify_event): Ditto.

2002-08-16 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (real_move_cursor): Redraw the selection so
	that it all gets redrawn.

2002-08-16 Iain <iain@prettypeople.org>

	* test-sample-view.c (cursor_move): Remove spew.

	* marlin-sample-view.c (real_move_cursor): Calculate the selection
	correctly.
	(motion_notify_event): Ditto.

2002-08-16 Iain <iain@prettypeople.org>

	* marlin-sample-selection.[ch] (marlin_sample_selection_add): Store
	the initial start.
	(marlin_sample_selection_get_sub_for_frame): Given a frame, find the
	selection that it's in.
	(marlin_sample_selection_changed): Emit the changed signal.

	* marlin-sample-view.c (real_move_cursor): If extend selection is on
	extend the selection.

2002-08-15 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (button_press_event): Switch on the event->type
	to see if its a single click or a double click. Select all if it's 
	double.
	(button_release_event): Don't add a selection if the start and end are
	the same point.

2002-08-15 Iain <iain@prettypeople.org>

	* marlin-sample-selection.h: Add a MarlinCoverage.

	* marlin-sample-view.c: Replace MarlinCursorCoverage with
	MarlinCoverage.

	* marlin-sample.h: Create MarlinCoverage enum

2002-08-15 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: Store the original start of the subselection.
	(motion_notify_event): Use the original start to determine whether we
	need to set the start or end of the subselection.
	(button_press_event): Store the initial position.

2002-08-15 Iain <iain@prettypeople.org>

	* marlin-sample-selection.c (marlin_sample_selection_add): Add a new 
	subselection.
	(marlin_sample_selection_frame_in_selection): Check if a frame is
	in a selected area.
	(marlin_sample_selection_clear): Clear a selection.

	* marlin-sample-view.c: Add Selection stuff to the private struct.
	Add a move_cursor prototype at the top to prevent warnings.
	(sample_selection_changed): Queue the selected areas for a redraw, or
	if there's nothing selected, redraw the whole window.
	(set_property): Retrieve the selection when a sample is added.
	(draw_sub_selection): Draw a subselection.
	(draw_selections): Loop through the selections list drawing them
	Also draw the pending selection if we're creating a new one.
	(draw_channel): Draw the selections.
	(button_press_event): Start selection stuff. Grab the pointer.
	(button_release_event): Release the pointer. Add the new selection.
	(motion_notify_event): Create the selection, and queue a redraw.
	
	* marlin-sample.c (marlin_sample_get_selection): Bad bad function,
	should be a property.

2002-08-14 Iain <iain@prettypeople.org> 

	* marlin-sample-selection.[ch]: Made MarlinSampleSelection into a
	GObject.

	* marlin-sample.c (finalize): Just unref the selection.

2002-08-14 Iain <iain@prettypeople.org>

	* marlin-sample.c (finalize): Destroy the selection.
	(init): Create a new selection.

2002-08-14 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (set_property): Reverted.
	(marlin_sample_view_new): Reverted.
	(finalize): Reverted.

2002-08-14 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (set_property): Create a new selection store
	when the sample is changed.

2002-08-13 Iain <iain@prettypeople.org>

	* Makefile.am: Added the newfiles to the build.

	* marlin-sample-view.c (finalize): Destroy the selection.
	(marlin_sample_view_new): Create the selection.

	* marlin-sample-selection.[ch]: Code to handle selections.

2002-08-13 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (motion_notify_event): Don't set the coverage
	here.
	(button_press_event): Set the coverage here.
	(draw_sample_area): Calculate how much of the cursor to draw and draw
	it.

2002-08-13 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (realize): Create the cursors we need.
	(motion_notify_event): Calculate where the cursor is in the window
	and change the mouse pointer accordingly.
	(class_init): Connect the motion_notify_event

	* marlin-cursors.[ch]: New files to handle creating cursors.

	* Makefile.am: Add the cursors dir

2002-08-11 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (initialise_cursor): Create a MarlinCursorInfo
	(destroy_cursor): Destroy it.
	(finalize): Call destroy_cursor.
	(init): Call initialise_cursor.

2002-08-11 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (sample_load_finished): Remove debugging spew

2002-08-10 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (sample_load_finished): Calculate the best
	frames per pixel, so that the user doesn't need to do a silly zoom
	to see small samples.

2002-08-02 Iain <iain@prettypeople.org>

	* marlin-channel.h: Include glib.h

2002-08-02 Iain <iain@prettypeople.org>

	* test-sample-view.c (destroy_window): Unref the sample.

2002-08-02 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (get_max_min_peaks): Lock the block before 
	accessing it.
	(draw_channel): Lock the blocks and use the locking methods.

	* marlin-block.[ch] (marlin_block_previous): Locking method to get
	the previous block.

2002-08-02 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (finalize): Turn off the timeout before
	destroying the view.

	* marlin-sample.c: Add LOCK_DEBUG defines and use them to lock things.

2002-08-02 Iain <iain@prettypeople.org>

	* test-sample.c (load_finished): Quit the main loop.

	* marlin-channel.c (marlin_channel_free): Free the channel, and all
	the blocks.

	* marlin-channel.c: Add all the new prototypes.

	* marlin-block.[ch] (free_peaks): Free the peak data.
	(marlin_block_free): Free the block.
	
	* marlin-sample.c (finalize): Free all the channels.

2002-08-02 Iain <iain@prettypeople.org>

	* test-sample.c (load_finished): Print the length of the sample in 
	seconds, and destroy it.

	* marlin-block.[ch]: Add a lock. Define some debugging lock primitives
	(marlin_block_new_from_data): Create the lock.
	(marlin_block_append): Lock the blocks.
	(marlin_block_next): Get the next block with locking.

	* marlin-channel.[ch]: Add a lock.
	(marlin_channel_new): Create the lock.
	(marlin_channel_free): Lock the lock before destroying the block data.
	(marlin_channel_append_data): Lock before adding the block.
	(marlin_channel_get_block_for_frame): Lock.

	* marlin-read-write-lock.c (marlin_read_write_lock_new): Zero the
	data...ARGH!
	
2002-08-02 Iain <iain@prettypeople.org>

	* marlin-sample.c: Add a MarlinReadWriteLock to the private info.
	(finalize): Lock the data before destroying it.
	(set_property): Lock the data before changing it.
	(get_property): Lock the data.
	(init): Create a readwrite lock.
	(done_load_sample): Lock data.
	(marlin_sample_load): Lock data.
	(marlin_sample_load_file): Lock data.
	(marlin_sample_get_channel): Lock data.
	(do_set_load_progress): Guess...

2002-08-01 Iain <iain@prettypeople.org>

	* Makefile.am: Add the new files.

	* marlin-read-write-lock.[ch]: Files for implementing RWLocks

2002-07-28 Iain <iain@prettypeople.org>

	* Makefile.am: Add the new files to the compile.

	* marlin-sample-view.[ch] (marlin_sample_view_remove_cursor): Removed.
	Duplicated the Property.

	* marlin-stock.[ch]: New file for registering stock icons.

	* marlin-file-utils.[ch]: New file with some file stuff.

2002-07-27 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch] (marlin_sample_view_move_cursor): Move the
	cursor.

2002-07-27 Iain <iain@prettypeople.org>

	* marlin-time-line.c (get_property): Implement the frames_per_page
	property getter.

2002-07-27 Iain <iain@prettypeople.org>

	* marlin-time-line.c (get_property): Fix typo.

2002-07-27 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: Add new property.
	(set_property): Handle the PROP_CURSOR_POSITION property.
	(get_property): Ditto.
	(class_init): Create the new property.

2002-07-27 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (real_move_cursor): Limit the position to be in 
	the sample. Forcably redraw the invalidated areas before scrolling. 
	If the cursor is outside the window, scroll it back in.
	(class_init): Add more bindings, and make some others work like
	Soundforge.
	
2002-07-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (real_move_cursor): Handle all the other cases.

2002-07-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (move_cursor): Calculate dx in pixels.
	(real_move_cursor): count is in pixels not frames.
	(class_init): Add lots and lots of key bindings.
	(init): Set GTK_CAN_FOCUS on the widget.

2002-07-26 Iain <iain@prettypeople.org>

	* test-sample-view.c (cursor_move): Update for new signal handler.

	* marlin-sample-view.c (move_cursor): Function that calculates
	the dx and emits the signal.
	(real_move_cursor): Actually moves the cursor.
	(class_init): Hook up the real_move_cursor method.
	(add_move_binding): Function stolen from gtkentry.c.
	
2002-07-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (realize): Use the ON_MULTIPLIER.
	(redraw_cursor): Remove the timeout, and then readd it so that the
	on blink is longer than the off one.
	(move_cursor): Use the ON_MULTIPLIER.

2002-07-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (redraw_cursor): Take the xofs into account.
	(get_time): Utility function to get the cursor blink time.
	(move_cursor): Stop the timeout, then restart it. Take xofs into
	account.
	(draw_sample_area): Take xofs into account.

2002-07-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch] (class_init): Add a move-cursor signal.
	(move_cursor): Emit the signal.

	* test-sample-view (cursor_move): Test new signal.
	(main): connect signal.

2002-07-26 Iain <iain@prettypeople.org>

	* marlin-sample-view.c: Add a structure containing information about
	the cursor.
	(finalize): Free the cursor structure.
	(redraw_cursor): A timeout that turns the cursor on or off, and 
	invalidates the cursor area.
	(move_cursor): Set the cursor to a new position, and invalidate the
	old and new positions.
	(realize): Add GDK_BUTTON_RELEASE_MASK to the mask.
	Start the cursor timeout.
	(draw_sample_area): If the cursor is visible, draw it.
	(button_press_event): Move the cursor to the new position.
	(button_release_event): Stub.
	(class_init): Hook up the release event function.

2002-06-26 Iain <iain@prettypeople.org>

	* marlin-file-selection.[ch]: A subclass of GtkFileSelection that adds
	an info frame on the left and an options frame below.

	* Makefile.am: Build the marlin-file-selection files

2002-06-24 Iain <iain@prettypeople.org>

	* marlin-time-line.c (_marlin_time_line_paint): Don't use
	widget->allocation.[xy]
	(set_property): ditto.

2002-06-23 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch] (marlin_sample_view_scroll_to): New function
	to scroll the sampleview to a specified frame.

2002-06-23 Iain <iain@prettypeople.org>

	* Makefile.am: Remove the -lsndfile from everything.

	* marlin-sample-view.c (load_finished): Set the number of channels
	correctly.

	* marlin-time-line.c (set_property): If frames_per_pixel == 0, set it
	to 1.
	(size_allocate): Ditto.

2002-06-22 Iain <iain@prettypeople.org>

	* marlin-jack.c (marlin_jack_initialise): Don't dereference a
	potentially NULL pointer.

2002-06-21 Iain <iain@prettypeople.org>

	* marlin-marshal.list: Add a new UINT,INT marshaller.

	* marlin-sample.c (set_property): Emit the progress with the TFC
	signal.
	(class_init): Add an INT arg to total-frames-changed.
	(init): Initialise progress to 100%
	(do_set_load_progress): Set the progress.
	(marlin_sample_load_progress): Use an int rather than a float for the
	percentage.

	* test-sample-view.c (destroy_window): Remove the unref of the view.
	(load_started): Create a window with a label and a progress bar.
	(total_frames_changed): Update the label and the bar.
	(load_finished): Close the progress window.

	* test-sample.c (frames_changed): Add the progress parameter

2002-06-19 Iain <iain@prettypeople.org>

	* marlin-msgport.c (marlinthread_destroy): Fix spacing.
	Calculate busy correctly for threads of MARLIN_THREAD_NEW type.

	* marlin-mt.c (marlin_mt_msg_initialise): Change function name to
	marlin_mt_initialise.

	* marlin-sample-view.c (set_scroll_values): If the number of frames
	is 0, set the upper limit of the hadj to be the width of the widget.
	(sample_frames_changed): A function to redraw the view when the
	number of frames in the sample changes.
	(sample_load_finished): When the sample is loaded, we can set the
	total number of frames, and start listening for total-frames-changed
	signals. 
	(set_property): Delay connecting to the total-frames-changed signal so
	that we avoid lots of updates as the sample is loading.

	* marlin-sample.c: Include marlin-mt.h and marlin-msgport.h
	Add the LOAD_STARTED and LOAD_FINISHED signals. Add the PROP_LOADING
	property.
	(get_property): Handle PROP_LOADING.
	(class_init): Create the new property and the new signals.
	(init): Initalise the loading_msg_id and loaded to the initial values.
	(do_describe_load): Describe the loading process.
	(do_load_sample): Call the plugin's load method in a new thread.
	(done_load_sample): Emit the LOAD_FINISHED signal to the GTK thread.
	(free_load_sample): Empty.
	(marlin_sample_load): Load a sample in a new thread.
	(marlin_sample_load_file): Use the new threaded loader.
	(do_describe_load_progress): Describe the load progress.
	(do_se_load_progress): Set the total_frames property on the GObject in
	the GTK thread so that GTK doesn't lock up.
	(marlin_sample_load_progress): Tell the GTK thread how the sample is
	loading.

	* marlin-sample.h: Add the new signal prototypes.

	* test-jack.c (main): Initialise the GThread and Marlin MT stuff.

	* test-sample-view.c (load_started): Empty.
	(load_finished): Print some info about the sample now it's loaded.
	(idle_func): Start loading the sample now we're in the GTK main loop.
	(main): Only create an empty sample. Connect to the load-started and
	load-finished signals. Add an idle function to load the data.

	* test-sample.c (frames_changed): Empty.
	(load_started): Empty.
	(load_finished): Print some info about the sample.
	(idle_func): Start loading the sample now we're in GTK main loop.
	(main): Only create an empty sample and connect to it's signals.
	
2002-06-18 Iain <iain@prettypeople.org>

	* Makefile.am: Add marlin-types.h to the list of headers.

	* marlin-block.h: Include marlin-types.h, and remove the typedef.

	* marlin-channel.c: Include marlin-block.h
	(marlin_channel_free): Free a channel.

	* marlin-channel.h: Include marlin-block.h and marlin-types.h. Remove
	the typedef.

	* marlin-sample-view.c: Include marlin-block.h and marlin-channel.h

	* marlin-sample.c (marlin_sample_write_and_mmap_data): Add some notes.
	(marlin_sample_new): Create the sample with some defaults.
	(marlin_sample_load_file): Move the sample loading code into a
	seperate function.
	(marlin_sample_new_from_file): Make this function just a wrapper for
	marlin_sample_new and marlin_sample_load_file.

	* marlin-sample.h: Include marlin-types.h. Remove the typedef.

	* test-jack.c: Include marlin-block.h and marlin-channel.h

	* test-sample.c (frames_changed): Callback to print the number of 
	frames.
	(idle_func): Function to load the sample.
	(main): Create a window and label to test the synchronisity of
	loading.
	
2002-06-17 Iain <iain@prettypeople.org>

	* marlin-mt.[ch]: More of the Evolution thread code set up for Marlin.

	* Makefile.am: Compile it

2002-06-16 Iain <iain@prettypeople.org>

	* marlin-msgport.[ch]: Ported e-msgport.[ch] from Evolution to Marlin.
	Well, I s/e-/marlin-/g'd it. This code is GPL and (C) Ximian,Inc. But
	I did fix some bugs :)

	* Makefile.am: Compile the msgport code.
	
2002-06-15 Iain <iain@prettypeople.org>

	* marlin-sample.[ch] (set_property): Emit the total frames changed signal
	(class_init): Create the signal.

2002-06-15 Iain <iain@prettypeople.org>

	* marlin-block.c (calculate_peaks): Initalise the peak struct to 0.
	Check that the value doesn't go outside [-1,1].

2002-06-15 Iain <iain@prettypeople.org>

	* marlin-sample.c (marlin_sample_write_and_mmap_data): Check the
	number of bytes that write wrote and error if they're not what was
	requested.

2002-06-15 Iain <iain@prettypeople.org>

	* test-jack.c (process): Deactivate JACK.

2002-06-15 Iain <iain@prettypeople.org>

	* test-jack.c: Remove debugging spew.

	* test-sample.c: Quit if sample doesn't load.

2002-06-12 Iain <iain@prettypeople.org>

	* Makefile.am: define the plugin dir.
	Create the test-plugins program.
	Compile marlin-plugin.c

	* marlin-sample.c: Remove the sndfile.h include and add the
	marlin-plugins.h one.
	Move all the sample info into a MarlinSampleHeader struct
	(finalize): Free the header struct.
	(set_property): Set all values in the header instead of the priv.
	(get_property): Ditto.
	(init): Create a MarlinSampleHeader.
	(deinterlace_block): Remove.
	(load_sample): Remove.
	(marlin_sample_write_and_mmap_data): Write the data to the mmap file
	and then mmap it.
	(marlin_sample_new_from_file): Find a plugin to load the file instead
	of being hardcoded to use libsndfile

	* marlin-sample.h: Remove unused enums.

	* test-jack.c (main): Initialise the plugins.

	* test-sample-view.c (main): Initialise the plugins.

	* test-sample.c (main): Initialise the plugins.

	* marlin-plugin.[ch]: Routines to handle plugins.

	* test-plugin.c: Test program for plugins.

2002-06-08 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_channel): Take into account the black
	line between channels when drawing.
	(draw_sample_area): Draw a black line between channels to divide them
	up.
	(draw_dead_area): Take into account the black line, and draw it.

2002-06-08 Iain <iain@prettypeople.org>

	* marlin-time-line.c (set_property): Calculate the area of redraw 
	correctly when changing the page_start.

	* marlin-sample-view.h: Add a page_start_changed callback to the
	class.

	* marlin-sample-view.c (set_scroll_values): Emit a page_start_changed
	signal.
	(scroll_to): Ditto. Remove unneeded variables.
	(class_init): Create the page_start_changed signal.
	
2002-06-08 Iain <iain@prettypeople.org>

	* marlin-time-line.c (set_property): Calculate the area of redraw 
	correctly when the pixels_per_page changes.

	* marlin-sample.c (deinterlace_block): Handle errors gracefully.
	(load_sample): Pass a GError to deinterlace_block and handle errors.
	(marlin_sample_new_from_file): Handle errors.

	* marlin-sample-view.c (set_property): Don't use the allocation.[xy]
	(get_max_min_peaks): Remove the special case for fpp == 1.
	(_marlin_sample_view_paint): Don't use allocation.[xy].

2002-06-05 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_channel): Special case drawing 1fpp and
	fix a redraw bug when moving a window vertically over the view.

2002-06-04 Iain <iain@prettypeople.org>

	* marlin-sample-view.c (draw_dead_area): Draw all the lines in the
	dead area.

2002-06-04 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch] (class_init): Create a
	frames_per_pixel_changed signal.
	(set_property): Emit this signal.

2002-06-04 Iain <iain@prettypeople.org>

	* Makefile.am: Build test-jack and add the jack files.

	* marlin-block.[ch] (calculate_peaks): Take floats instead of doubles.
	(marlin_block_new_from_data): Ditto.

	* marlin-channel.c (marlin_channel_append_data): Take floats.

	* marlin-sample-view.c: Take floats.

	* marlin-sample.c (deinterlace_block): Return floats instead of
	doubles.

	* marlin-jack.[ch]: Code to do some JACK stuff.

	* test-jack.c: Code to play a sample through JACK.

2002-05-24 Iain <iain@prettypeople.org>

	* marlin-sample-view.[ch]: Implementation of a sample viewer.

2002-05-21 Iain <iain@prettypeople.org>

	* marlin-time-line.c (_marlin_time_line_paint): Use the text_gc
	instead of black_gc to draw the decals.

2002-05-19 Iain <iain@prettypeople.org>

	* marlin-time-line.[ch]: Implementation of a timeline widget.
