Example #1
0
static menuSound_t Activate(menuCommon_t *self)
{
    demoEntry_t *e;

    if (!m_demos.list.numItems) {
        return QMS_BEEP;
    }

    e = m_demos.list.items[m_demos.list.curvalue];
    switch (e->type) {
    case ENTRY_UP:
        return LeaveDirectory();
    case ENTRY_DN:
        return EnterDirectory(e);
    case ENTRY_DEMO:
        return PlayDemo(e);
    }

    return QMS_NOTHANDLED;
}
////////////////////////////////////////////////////////////////////////
// When the user pressed the Enter or double-clicked...
void PanelView::Execute(CustomListItem *item)
////////////////////////////////////////////////////////////////////////
{
	BString execute;

	switch (item->m_Type)
	{
		case FT_DISKITEM:
			SetPanelMode(PM_NORMAL);
			ChangePath(item->m_DiskPath.String());			
			break;
		case FT_DISKBACK:
			SetPanelMode(PM_NORMAL);
			ChangePath(m_Path.String());
			break;
		case FT_PARENT:
			GotoParent();
			break;
		case FT_DIRECTORY:
			EnterDirectory(item->m_FileName.String());
			break;
		case FT_SYMLINKDIR:
		case FT_SYMLINKFILE:	// TODO: ha mar ugyis tudjuk elore....
			{
				BEntry symlinkentry;
				entry_ref ref;

				execute.SetTo(m_Path.String());
				execute+="/";
				execute+=item->m_FileName;

				BEntry entry(execute.String());
				entry.GetRef(&ref);
				symlinkentry.SetTo(&ref, true);
				if (symlinkentry.IsDirectory())		// Is it a directory?
				{
					BPath symlinkpath;
					symlinkentry.GetPath(&symlinkpath);
					ChangePath(symlinkpath.Path());
				}
				else	// No, it is a standard file....
				{
					// Launch the selected file or document...
					if (entry.GetRef(&ref) == B_OK)
						be_roster->Launch(&ref);
				}
			}
			break;
		case FT_FILE:
			{
				// Launch the selected file or document...
				entry_ref ref;

				execute.SetTo(m_Path.String());
				execute+="/";
				execute+=item->m_FileName;

				BEntry entry(execute.String());
				if (entry.GetRef(&ref) == B_OK)
					be_roster->Launch(&ref);
			}
			break;
	}
}