Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
unit BreadcrumbDemoUnit;

// Mock fields for our breadcrumb flow views
string multiView1a;
string multiView2a;
string multiView3a;
string multiView4a;

string multiView1b;
string multiView2b;
string multiView3b;
string multiView4b;

// For us to keep track of the breadcrumbs
Breadcrumb selectedBreadcrumb;
Breadcrumb[] allBreadCrumbs;
Breadcrumb[] currentBreadCrumbs;

// Current navigation state and available views
DSL_VIEWS currentView;
int currentViewIndex;
DSL_VIEWS[] views;
bool inited;
int maxViewIndex;

// The init constructs our available views, 
// breadcrumbs and initial breadcrumbs to display
void init() {
    if(inited == null || inited == false) {
    
	initMockFields();

	currentView = DSL_VIEWS.BreadcrumbDemoMultiView1;
	currentViewIndex = 0;
	maxViewIndex = 0;

	// The destination views for our flow
	views.clear();
	views.append(DSL_VIEWS.BreadcrumbDemoMultiView1);
	views.append(DSL_VIEWS.BreadcrumbDemoMultiView2);
	views.append(DSL_VIEWS.BreadcrumbDemoMultiView3);
	views.append(DSL_VIEWS.BreadcrumbDemoMultiView4);

	// Breadcrumbs matching the destination views above
	Breadcrumb breadCrumb1 = createBreadCrumb("View 1", null, false, null, null, false);
	Breadcrumb breadCrumb2 = createBreadCrumb("View 2", null, false, null, null, false);
	Breadcrumb breadCrumb3 = createBreadCrumb("View 3", null, false, null, null, false);
	Breadcrumb breadCrumb4 = createBreadCrumb("View 4", null, false, null, null, false);

	allBreadCrumbs.clear();
	allBreadCrumbs.append(breadCrumb1);
	allBreadCrumbs.append(breadCrumb2);
	allBreadCrumbs.append(breadCrumb3);
	allBreadCrumbs.append(breadCrumb4);

	// Breadcrumbs to display on init
	currentBreadCrumbs.clear();
	currentBreadCrumbs.append(breadCrumb1);

	inited = true;
    }
}

void initMockFields() {
    multiView1a = null;
    multiView2a = null;
    multiView3a = null;
    multiView4a = null;

    multiView1b = null;
    multiView2b = null;
    multiView3b = null;
    multiView4b = null;
}

Breadcrumb[] getCurrentBreadCrumbs() {
    return currentBreadCrumbs;
}

DSL_VIEWS proceedAction() {

    // Leave a breadcrumb if we go to the view for the first time
    if(currentViewIndex >= currentBreadCrumbs.length() - 1) {
    	currentBreadCrumbs.append(allBreadCrumbs.get(currentViewIndex + 1));
    }
    
    // Find the next view and go to it
    setViewIndex(currentViewIndex + 1);

    DSL_VIEWS nextView = views.get(currentViewIndex);
    currentView = nextView;
    return currentView;
}

// Find the previous view and go to it
DSL_VIEWS backAction() {
    setViewIndex(currentViewIndex - 1);
    DSL_VIEWS prevView = views.get(currentViewIndex);
    currentView = prevView;
    return currentView;
}

// Go to the view associated with the selected breadcrumb
DSL_VIEWS breadcrumbAction() {
    int index = findIndexForSelectedBreadcrumb();
    setViewIndex(index);
    Mez:log(currentViewIndex);
    currentView = views.get(currentViewIndex);
    return currentView;
}

// Finish the flow and reset
DSL_VIEWS finishAction() {
    inited = false;
    return views.get(0);
}

// Utility method: Find the view and breadcrumb index from the selected breadcrumb
int findIndexForSelectedBreadcrumb() {
    for(int i = 0; i < allBreadCrumbs.length(); i++) {
	Breadcrumb current = allBreadCrumbs.get(i);
	if(selectedBreadcrumb.label == current.label) {
	    return i;
	}
    }
}

// Utility method: Create a breadcrumb
Breadcrumb createBreadCrumb(string label, string tooltip, bool requiresConfirm, string confirmSubj, string confirmBody, bool isBack) {
    Breadcrumb breadCrumb = Breadcrumb:new();
    breadCrumb.label = label;
    breadCrumb.tooltip = tooltip;
    breadCrumb.requiresConfirmation = requiresConfirm;
    breadCrumb.confirmationMessageSubject = confirmSubj;
    breadCrumb.confirmationMessageBody = confirmBody;
    breadCrumb.isBack = isBack;
    return breadCrumb;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DSL_VIEWS goToView1() {
    return navigateToViewForIndex(0);
}

DSL_VIEWS goToView2() {
    return navigateToViewForIndex(1);
}

DSL_VIEWS goToView3() {
    return navigateToViewForIndex(2);
}

DSL_VIEWS goToView4() {
    return navigateToViewForIndex(3);
}

DSL_VIEWS navigateToViewForIndex(int index) {
    setViewIndex(index);
    currentView = views.get(index);
    return currentView;
}

bool showView1() {
    return true;
}

bool showView2() {
    return showViewBreadcrumb(1);
}

bool showView3() {
    return showViewBreadcrumb(2);
}

bool showView4() {
    return showViewBreadcrumb(3);
}

bool showViewBreadcrumb(int viewIndex) {
    if(currentViewIndex >= viewIndex) {
	return true;
    }
    return false;
}

void setViewIndex(int index) {
    currentViewIndex = index;
    if(currentViewIndex > maxViewIndex) {
	maxViewIndex = currentViewIndex;
    }
}

DSL_APPEARANCE disabledAppearance() {
    return DSL_APPEARANCE.Disable;
}

...