⚠ This page is served via a proxy. Original site: https://github.com
This service does not collect credentials or authentication data.
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions CloudCoder/src/org/cloudcoder/app/client/CloudCoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import org.cloudcoder.app.client.model.Session;
import org.cloudcoder.app.client.model.StatusMessage;
import org.cloudcoder.app.client.page.CloudCoderPage;
import org.cloudcoder.app.client.page.CoursesAndProblemsPage2;
import org.cloudcoder.app.client.page.CoursesAndProblemsPage3;
import org.cloudcoder.app.client.page.DevelopmentPage;
import org.cloudcoder.app.client.page.EditProblemPage;
Expand Down Expand Up @@ -174,7 +173,7 @@ public void onSuccess(User result) {
changePage(page);
} else {
// Default behavior: navigate to the home page
changePage(new CoursesAndProblemsPage2());
changePage(createPageForPageId(PageId.COURSES_AND_PROBLEMS, ""));
}
}
}
Expand Down Expand Up @@ -271,7 +270,7 @@ private CloudCoderPage createPageForPageId(PageId pageId) {
// This shouldn't happen (can't find page for Activity),
// but if it does, go to the courses and problems page.
GWT.log("Don't know what kind of page to create for " + pageId);
page = new CoursesAndProblemsPage2();
page = new CoursesAndProblemsPage3();
break;
}
return page;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@
import org.cloudcoder.app.client.model.PageId;
import org.cloudcoder.app.client.model.PageStack;
import org.cloudcoder.app.client.model.Session;
import org.cloudcoder.app.client.model.StatusMessage;
import org.cloudcoder.app.client.model.StatusMessage;
import org.cloudcoder.app.client.rpc.RPC;
import org.cloudcoder.app.client.view.ChoiceDialogBox;
import org.cloudcoder.app.client.view.EditBooleanField;
import org.cloudcoder.app.client.view.EditDateField;
import org.cloudcoder.app.client.view.EditDateTimeField;
import org.cloudcoder.app.client.view.EditDummyButton;
import org.cloudcoder.app.client.view.EditEnumField;
import org.cloudcoder.app.client.view.EditModelObjectField;
import org.cloudcoder.app.client.view.EditOptionalStringFieldWithAceEditor;
import org.cloudcoder.app.client.view.EditStringField;
import org.cloudcoder.app.client.view.EditStringFieldWithAceEditor;
import org.cloudcoder.app.client.view.PageNavPanel;
Expand All @@ -50,6 +52,7 @@
import org.cloudcoder.app.shared.model.ProblemLicense;
import org.cloudcoder.app.shared.model.ProblemType;
import org.cloudcoder.app.shared.model.TestCase;
import org.cloudcoder.app.shared.util.EvaluatorUtil;
import org.cloudcoder.app.shared.util.SubscriptionRegistrar;

import com.google.gwt.core.shared.GWT;
Expand Down Expand Up @@ -95,6 +98,7 @@ private class UI extends ResizeComposite implements SessionObserver {
private Button addTestCaseButton;
private FlowPanel addTestCaseButtonPanel;
private ProblemAndTestCaseList problemAndTestCaseListOrig;
EditOptionalStringFieldWithAceEditor<IProblem> evaluatorEditor;

public UI() {
this.dockLayoutPanel = new DockLayoutPanel(Unit.PX);
Expand Down Expand Up @@ -278,6 +282,63 @@ private void setLanguage() {
skeletonEditor.setEditorTheme(AceEditorTheme.VIBRANT_INK);
problemFieldEditorList.add(skeletonEditor);

// In the editor for the evaluator, we keep the editor mode in sync
// with the problem type, like for the skeleton.
evaluatorEditor =
new EditOptionalStringFieldWithAceEditor<IProblem>("Evaluator code (only Python)", "Use custom evaluator", ProblemData.EVALUATOR) {
@Override
public void update() {
super.update();
setLanguage();
}
@Override
public void onModelObjectChange() {
setLanguage();
}
private void setLanguage() {
AceEditorMode editorMode = ViewUtil.getModeForLanguage(getModelObject().getProblemType().getLanguage());
setEditorMode(editorMode);

if(EvaluatorUtil.isEvaluatorUsedForProblemType(getModelObject().getProblemType())) {
setEnabled(true);
} else {
setEnabled(false);
}
}

};
evaluatorEditor.setEditorThemes(AceEditorTheme.VIBRANT_INK, AceEditorTheme.SOLARIZED_DARK);
problemFieldEditorList.add(evaluatorEditor);

EditDummyButton<IProblem, String> defaultEvaluatorButton =
new EditDummyButton<IProblem, String>("Reset to default evaluator", ProblemData.EVALUATOR) {
@Override
public void onButtonClick() {
setField(EvaluatorUtil.getDefaultEvaluator(getModelObject()));
evaluatorEditor.update();
}

@Override
public void update() {
super.update();
setLanguage();
}

@Override
public void onModelObjectChange() {
setLanguage();
}

private void setLanguage() {
if(EvaluatorUtil.isEvaluatorUsedForProblemType(getModelObject().getProblemType())) {
setEnabled(true);
} else {
setEnabled(false);
}
}
};

problemFieldEditorList.add(defaultEvaluatorButton);
// We don't need an editor for schema version - problems/testcases are
// automatically converted to the latest version when they are imported.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public void setPubTextInstitution(String result) {

/**
* Default constructor.
* Will take the user to the {@link CoursesAndProblemsPage2}
* Will take the user to the {@link CoursesAndProblemsPage3}
* upon a successful login.
*/
public LoginPage() {
Expand Down
118 changes: 118 additions & 0 deletions CloudCoder/src/org/cloudcoder/app/client/view/EditDummyButton.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
// CloudCoder - a web-based pedagogical programming environment
// Copyright (C) 2015, Andras Eisenberger
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package org.cloudcoder.app.client.view;

import org.cloudcoder.app.client.page.EditProblemPage;
import org.cloudcoder.app.shared.model.ModelObjectField;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.IsWidget;

/**
* Implementation of {@link EditModelObjectField} which does not edit any
* field. It extends {@link EditModelObjectField}, because only these can be
* on the {@link EditProblemPage} UI.
*
* @author Andras Eisenberger
*/
public abstract class EditDummyButton<ModelObjectType, FieldType>
extends EditModelObjectField<ModelObjectType, FieldType> {

private class UI extends Composite {
private Button button;

public UI() {
FlowPanel panel = new FlowPanel();
panel.setStyleName("cc-fieldEditor");

this.button = new Button(getDescription(), new ClickHandler() {
public void onClick(ClickEvent event) {
onButtonClick();
}
});
button.setStyleName("cc-emphButton");
panel.add(button);

initWidget(panel);
}

public void setEnabled(boolean enabled) {
button.setEnabled(enabled);
}
}

private UI ui;

/**
* Constructor.
*
* @param desc the human-readable description of the field, which is also
* the text of the button
* @param field any of the fields, it doesn't touch it by default
*/
public EditDummyButton(String desc, ModelObjectField<? super ModelObjectType, FieldType> field) {
super(desc, field);
ui = new UI();
}

/* (non-Javadoc)
* @see org.cloudcoder.app.client.view.EditModelObjectField#getUI()
*/
@Override
public IsWidget getUI() {
return ui;
}

/* (non-Javadoc)
* @see org.cloudcoder.app.client.view.EditModelObjectField#commit()
*/
@Override
public void commit() {
}

/* (non-Javadoc)
* @see org.cloudcoder.app.client.view.EditModelObjectField#update()
*/
@Override
public void update() {
}

/* (non-Javadoc)
* @see org.cloudcoder.app.client.view.EditModelObjectField#isCommitError()
*/
@Override
public boolean isCommitError() {
// It's connected to no field, so no
return false;
}

/**
* Do this when the button is clicked
*/
public abstract void onButtonClick();

/**
* @param enabled whether the button should be enabled
*/
public void setEnabled(boolean enabled) {
ui.setEnabled(enabled);
}
}
Loading