示例#1
0
// Display a buffer in a lister
// Called from LISTER PROCESS
void lister_show_buffer(Lister *lister,DirBuffer *buffer,int show,BOOL active)
{
	// Different to current buffer?
	if (lister->cur_buffer!=buffer)
	{
		// End a direct edit
		lister_end_edit(lister,0);

		// Clear lock pointer in current buffer
		buffer_clear_lock(lister->cur_buffer,0);

		// Free icons
		backdrop_free_list(lister->backdrop_info);

		// Store new buffer pointer
		lister->cur_buffer=buffer;
		buffer->buf_CurrentLister=lister;

		// Remove buffer and add to head of list
		Remove(&buffer->node);
		AddHead(&GUI->buffer_list.list,&buffer->node);

		// See if buffer needs to be resorted
		lister_resort(lister,0);

		// Clear save status flag
		lister->flags&=~LISTERF_SAVE_STATUS;

		// Does new buffer have a custom handler?
		if (lister->cur_buffer->buf_CustomHandler[0] && active)
		{
			// Send active message
			buffer_active(lister->cur_buffer,0);
		}

		// Add to history list
		lister_add_history(lister);
	}

	// Initialise path field
	if (show && lister_valid_window(lister))
	{
		// Is volume present?
		if (!lister->cur_buffer->buf_CustomHandler[0] &&
			VolumePresent(buffer))
		{
			BPTR lock;
			struct FileInfoBlock __aligned fib;

			// Lock path
			if (lock=Lock(buffer->buf_Path,ACCESS_READ))
			{
				// Store full path
				NameFromLock(lock,buffer->buf_ExpandedPath,512);
				AddPart(buffer->buf_ExpandedPath,"",512);

				// Examine object
				Examine(lock,&fib);
				UnLock(lock);

				// Save object name
				if (fib.fib_FileName[0])
					strcpy(buffer->buf_ObjectName,fib.fib_FileName);
				else
				{
					if (buffer->flags&DWF_ROOT)
					{
						char *ptr;

						stccpy(buffer->buf_ObjectName,buffer->buf_ExpandedPath,GUI->def_filename_length-1);
						if (ptr=strchr(buffer->buf_ObjectName,':')) *ptr=0;
					}
					else stccpy(buffer->buf_ObjectName,FilePart(buffer->buf_ExpandedPath),GUI->def_filename_length-1);
				}
			}

			// Failed to lock
			else strcpy(buffer->buf_ExpandedPath,buffer->buf_Path);

			// Update disk name and size
			lister_update_name(lister);
		}

		// No, refresh disk name from buffer
		else lister_show_name(lister);

		// Not showing icons?
		if (!(lister->flags&LISTERF_VIEW_ICONS) || lister->flags&LISTERF_ICON_ACTION)
		{
			// Update path field
			lister_update_pathfield(lister);

			// Refresh window
			lister_refresh_display(lister,REFRESHF_SLIDERS|REFRESHF_STATUS|REFRESHF_CLEAR_ICONS);

			// Show selection information
			select_show_info(lister,1);
		}
	}
}
示例#2
0
void lister_close_window(Lister *lister,BOOL run_script)
{
	short a;

	// If busy, hide progress window
	if (lister->progress_window)
		HideProgressWindow(lister->progress_window);

	// Fix current directory
	UnLock(CurrentDir(0));

	// Free icon remapping
	backdrop_free_remap(lister->backdrop_info,lister->window);

	// Close window
	if (lister->window)
	{
		// Cancel edit
		lister_end_edit(lister,EDITF_CANCEL|EDITF_NOREFRESH);

		// Remove 'hot name' requester
		lister_rem_hotname(lister);

		// Run script?
		if (run_script)
		{
			char buf[16];

			// Build handle string
			lsprintf(buf,"%ld",lister);

			// Run script
			RunScript(SCRIPT_CLOSE_LISTER,buf);
		}

		// Remove AppWindow
		RemoveAppWindow(lister->appwindow);
		lister->appwindow=0;

		// Remember window coordinates
		StoreWindowDims(lister->window,&lister->dimensions);
		if (lister->more_flags&LISTERF_TITLEBARRED)
		{
			lister->dimensions.wd_Normal.Width=lister->restore_dims.Width;
			lister->dimensions.wd_Normal.Height=lister->restore_dims.Height;
		}

		// If window was busy, abort timer
		if (lister->flags&LISTERF_BUSY)
			StopTimer(lister->busy_timer);

		// Clear menus
		display_free_menu(lister->window);

		// Free DrawInfo
		if (lister->drawinfo)
		{
			FreeScreenDrawInfo(lister->window->WScreen,lister->drawinfo);
			lister->drawinfo=0;
		}

		// Have we got a buffer?
		if (lister->cur_buffer)
		{
			// Store dimensions of window in buffer
			lister->cur_buffer->dimensions=*((struct IBox *)&lister->window->LeftEdge);
			lister->cur_buffer->dim_valid=1;
		}

		// Got Drag info?
		if (lister->drag_info)
		{
			// Free it
			FreeDragInfo(lister->drag_info);
			lister->drag_info=0;
		}

		// Close window
		CloseWindow(lister->window);
		lister->window=0;

		// Free edit hook
		FreeEditHook(lister->path_edit_hook);
		lister->path_edit_hook=0;
	}

	// Free render bitmap
	DisposeBitMap(lister->render_bitmap);
	lister->render_bitmap=0;

	// Free backdrop stuff
	backdrop_free_info(lister->backdrop_info);

	// Free gauge gadget 
	if (lister->gauge_gadget)
	{
		DisposeObject((Object *)lister->gauge_gadget);
		lister->gauge_gadget=0;
	}

	// Free pens
	for (a=0;a<ENVCOL_MAX;a++)
		lister_init_colour(lister,a,TRUE);

	// Remember flags
	lister->old_flags=lister->flags;

	// Clear flags
	lister->flags&=	LISTERF_LOCK_POS|
					LISTERF_ICONIFIED|
					LISTERF_BUSY|
					LISTERF_VIEW_ICONS|
					LISTERF_ICON_ACTION|
					LISTERF_SHOW_ALL;

	// Store source/destination status
	if (lister->old_flags&LISTERF_SOURCE) lister->flags|=LISTERF_STORED_SOURCE;
	else if (lister->old_flags&LISTERF_DEST) lister->flags|=LISTERF_STORED_DEST;
}