Pārlūkot izejas kodu

Rearranged control layout.

pull/2/head
veronie pirms 5 gadiem
vecāks
revīzija
7c0f9aeecc
9 mainītis faili ar 189 papildinājumiem un 86 dzēšanām
  1. +12
    -10
      xyz.veronie.bgg.ui/Application.e4xmi
  2. +16
    -0
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/result/ResultConfig.java
  3. +17
    -13
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/result/ThingMetaData.java
  4. +1
    -0
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/types/EventConstants.java
  5. +4
    -4
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/types/ResultAction.java
  6. +10
    -0
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/GeeklistSourceFilter.java
  7. +1
    -1
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/BggResultPart.java
  8. +88
    -58
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/LoadFromBggPart.java
  9. +40
    -0
      xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/StatusBar.java

+ 12
- 10
xyz.veronie.bgg.ui/Application.e4xmi Parādīt failu

@@ -1,28 +1,30 @@
<?xml version="1.0" encoding="ASCII"?>
<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:advanced="http://www.eclipse.org/ui/2010/UIModel/application/ui/advanced" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmi:id="_Lw_ZsEqSEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.application">
<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_Lw_ZsEqSEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.application">
<children xsi:type="basic:TrimmedWindow" xmi:id="_QDxdgEqSEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.trimmedwindow.main" label="BGG Tool Another" width="1200" height="800">
<children xsi:type="basic:PartSashContainer" xmi:id="_B_h_UEqVEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.0">
<children xsi:type="basic:PartSashContainer" xmi:id="_tbnr0EqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.main" horizontal="true">
<children xsi:type="basic:PartSashContainer" xmi:id="_4NsHQEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.bggload">
<children xsi:type="basic:PartStack" xmi:id="_7KNiwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggloadconf" containerData="1000">
<children xsi:type="basic:Part" xmi:id="_9ocfwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resultconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadFromBggPart" label="Load IDs from BGG"/>
<children xsi:type="basic:PartStack" xmi:id="_7KNiwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggloadconf" containerData="1400">
<children xsi:type="basic:Part" xmi:id="_9ocfwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resultconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadFromBggPart" label="Prepare"/>
</children>
<children xsi:type="basic:PartStack" xmi:id="_7hQw0EqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggresult" containerData="1000">
<children xsi:type="basic:Part" xmi:id="_97XbwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resulttable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.BggResultPart" label="BGG Result"/>
<children xsi:type="basic:PartStack" xmi:id="_7hQw0EqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggresult" containerData="600">
<children xsi:type="basic:Part" xmi:id="_-Mdy0EqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamesconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadThingDetailsPart" label="Load game details"/>
</children>
</children>
<children xsi:type="basic:PartSashContainer" xmi:id="_AF1vQEqUEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.gamelist">
<children xsi:type="basic:PartStack" xmi:id="_0MbRQEqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.partstack.gameslistconf">
<children xsi:type="basic:Part" xmi:id="_-Mdy0EqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamesconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadThingDetailsPart" label="Load game details"/>
</children>
<children xsi:type="basic:PartStack" xmi:id="_CS1yUEqUEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.partstack.gameslist">
<children xsi:type="basic:PartStack" xmi:id="_0MbRQEqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.partstack.gameslist" containerData="300">
<children xsi:type="basic:Part" xmi:id="_97XbwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resulttable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.BggResultPart" label="BGG Result"/>
<children xsi:type="basic:Part" xmi:id="_Ckm3wEqUEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamestable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.ThingListPart" label="Games list"/>
</children>
</children>
</children>
<children xsi:type="advanced:Area" xmi:id="_8nEs4EqUEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.area.status" containerData="100" label="Status"/>
</children>
<mainMenu xmi:id="_wtXeQEs0EeqGDvPDavxXPQ" elementId="org.eclipse.ui.main.menu"/>
<trimBars xmi:id="_1nq0UFu3Eeq4377K74W4EQ" elementId="xyz.veronie.bgg.ui.status" side="Bottom">
<children xsi:type="menu:ToolBar" xmi:id="_JFF2UFu4Eeq4377K74W4EQ" elementId="xyz.veronie.bgg.ui.toolbar.0">
<children xsi:type="menu:ToolControl" xmi:id="_xUKiUFu4Eeq4377K74W4EQ" elementId="xyz.veronie.bgg.ui.toolcontrol.status" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.StatusBar"/>
</children>
</trimBars>
</children>
<addons xmi:id="_Lw_ZsUqSEeqT5sxfmvJ5Tg" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
<addons xmi:id="_Lw_ZskqSEeqT5sxfmvJ5Tg" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>


+ 16
- 0
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/result/ResultConfig.java Parādīt failu

@@ -32,6 +32,22 @@ public class ResultConfig {
public Integer geeklistId = null;
public Integer familyId = null;
// TODO: add others
@Override
public String toString() {
switch(source) {
case BGG_USER:
return "user = " + user;
case GEEKLIST:
return "Geeklist #" + geeklistId;
case FAMILY:
return "Family #" + familyId;
default:
return "";
}
}
}

+ 17
- 13
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/result/ThingMetaData.java Parādīt failu

@@ -12,7 +12,7 @@ public class ThingMetaData {
private String comment;
private Integer numPlays;
private static String[] titles = { "Id", "Name", "Image", "Thumb", "comment", "# plays"};
private static String[] titles = { "Id", "Name" }; //, "Image", "Thumb", "comment", "# plays"};
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
@@ -55,18 +55,22 @@ public class ThingMetaData {
case 1:
returnStr = this.name;
break;
case 2:
returnStr = this.imgURL;
break;
case 3:
returnStr = this.thumbURL;
break;
case 4:
returnStr = this.comment;
break;
case 5:
returnStr = String.valueOf(this.numPlays);
break;
// case 2:
// returnStr = this.imgURL;
// break;
// case 3:
// returnStr = this.thumbURL;
// break;
// case 4:
// returnStr = this.comment;
// break;
// case 5:
// if (this.numPlays == null) {
// returnStr = "";
// } else {
// returnStr = String.valueOf(this.numPlays);
// }
// break;
default:
throw new ArrayIndexOutOfBoundsException(
"idx " + String.valueOf(idx) + " must be in [0," + (titles.length-1) + "]");


+ 1
- 0
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/types/EventConstants.java Parādīt failu

@@ -20,5 +20,6 @@ public interface EventConstants {
String TOPIC_RESULT_CHANGED = "RESULT_CHANGED";
String TOPIC_STATUS = "STATUS";
}

+ 4
- 4
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/types/ResultAction.java Parādīt failu

@@ -1,11 +1,11 @@
package xyz.veronie.bgg.types;
public enum ResultAction {
ADD("add"),
ADD("add to"),
REP("replace"),
SUB("subtract"),
AND("and"),
MIS("mis");
SUB("subtract from"),
AND("intercept with");
//MIS("mis");
private String name;


+ 10
- 0
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/filters/GeeklistSourceFilter.java Parādīt failu

@@ -26,6 +26,8 @@ public class GeeklistSourceFilter {
@Inject private IEventBroker eventBroker;
@Inject private ResultConfigManager configManager;
private Label confLabel;
public void create(Composite parent, int style) {
GridLayout filterLayout = new GridLayout(2, false);
parent.setLayout(filterLayout);
@@ -66,12 +68,20 @@ public class GeeklistSourceFilter {
// nothing
}
});
confLabel = new Label(parent, SWT.LEFT);
confLabel.setText("");
GridData gd = new GridData(SWT.FILL, SWT.FILL, false, false);
gd.horizontalSpan = 2;
confLabel.setLayoutData(gd);
parent.layout();
}
public void setGeeklistId(Integer geeklistId) {
if(eventBroker != null) {
eventBroker.post(EventConstants.TOPIC_GEEKLIST_CHANGED, geeklistId);
confLabel.setText("Geeklist #" + geeklistId);
} else {
System.out.println("setGeeklistId: eventBroker is null.");
}


+ 1
- 1
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/BggResultPart.java Parādīt failu

@@ -66,7 +66,7 @@ public class BggResultPart {
// This will create the columns for the table
private void createColumns(final Composite parent, final TableViewer viewer) {
String[] titles = ThingMetaData.getTitles();
int[] bounds = { 100, 100, 100, 100, 100, 100 };
int[] bounds = { 100, 500 }; // , 100, 100, 100, 100 };
for(int i = 0; i < titles.length; ++i) {
TableViewerColumn col = createTableViewerColumn(titles[i], bounds[i], i);


+ 88
- 58
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/LoadFromBggPart.java Parādīt failu

@@ -7,6 +7,7 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -16,7 +17,6 @@ import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
@@ -65,44 +65,44 @@ public class LoadFromBggPart {
Composite main = new Composite(parent, SWT.FILL);
main.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
GridLayout layout = new GridLayout(2, false);
GridLayout layout = new GridLayout(5, false);
main.setLayout(layout);
// contains configuration options for download of the bgg thing ID list
Group dlConfigGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
GridData configGrid = new GridData(SWT.FILL, SWT.FILL, true, true);
dlConfigGroup.setText("Configure download...");
dlConfigGroup.setLayoutData(configGrid);
// // contains configuration options for download of the bgg thing ID list
// Group dlConfigGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
// GridData configGrid = new GridData(SWT.FILL, SWT.FILL, true, true);
// dlConfigGroup.setText("Configure filters...");
// dlConfigGroup.setLayoutData(configGrid);
// GridLayout layoutG = new GridLayout(2, false);
// dlConfigGroup.setLayout(layoutG);
GridLayout layoutG = new GridLayout(2, false);
dlConfigGroup.setLayout(layoutG);
Label lblSource = new Label(dlConfigGroup, SWT.LEFT);
Label lblSource = new Label(main, SWT.LEFT);
lblSource.setText("Source: ");
lblSource.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
lblSource.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false));
// choose the bgg data source
ComboViewer cbSource = new ComboViewer(dlConfigGroup, SWT.READ_ONLY);
ComboViewer cbSource = new ComboViewer(main, SWT.READ_ONLY);
cbSource.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
cbSource.setContentProvider(ArrayContentProvider.getInstance());
List<SourceFilter> sources = new ArrayList<SourceFilter>();
for(SourceFilter sf : SourceFilter.values()) {
sources.add(sf);
}
cbSource.setInput(sources);
// TODO: implement all the sources
cbSource.setSelection(new StructuredSelection(configManager.getResultConfig().source));
// listener is configured further below
makeEmptySpace(main, 1);
// choose the thing sub-type
Label lblSubtype = new Label(dlConfigGroup, SWT.LEFT);
Label lblSubtype = new Label(main, SWT.LEFT);
lblSubtype.setText("Subtypes: ");
lblSubtype.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
ComboViewer cbSubtypes = new ComboViewer(dlConfigGroup, SWT.READ_ONLY);
ComboViewer cbSubtypes = new ComboViewer(main, SWT.READ_ONLY);
cbSubtypes.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
cbSubtypes.setContentProvider(ArrayContentProvider.getInstance());
List<Subtype> subtypes = new ArrayList<Subtype>();
for (Subtype st : Subtype.values()) {
@@ -117,32 +117,17 @@ public class LoadFromBggPart {
eventBroker.send(EventConstants.TOPIC_SUBTYPE_CHANGED, selection.getFirstElement());
}
});
// choose action on result list
Label lblAct = new Label(dlConfigGroup, SWT.LEFT);
lblAct.setText("Action on result: ");
lblAct.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
ComboViewer cbAct = new ComboViewer(dlConfigGroup, SWT.READ_ONLY);
cbAct.setContentProvider(ArrayContentProvider.getInstance());
List<ResultAction> actions = new ArrayList<ResultAction>();
for(ResultAction act : ResultAction.values()) {
actions.add(act);
}
cbAct.setInput(actions);
cbAct.setSelection(new StructuredSelection(configManager.getResultConfig().action));
cbAct.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
eventBroker.send(EventConstants.TOPIC_ACTION_CHANGED, selection.getFirstElement());
}
});
// area to display filter controls in
// next row:
// area to display filter controls in
Group gFilters = new Group(main, SWT.SHADOW_ETCHED_IN);
gFilters.setText("");
gFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
GridData gdf = new GridData(SWT.FILL, SWT.FILL, false, false);
gdf.horizontalSpan = 5;
gFilters.setLayoutData(gdf);
showFilter(gFilters, (IStructuredSelection)cbSource.getSelection()); // set content to initial selection
cbSource.addSelectionChangedListener(new ISelectionChangedListener() { // later, its content will be set via the dropdown
@@ -156,26 +141,23 @@ public class LoadFromBggPart {
});
// next row:
makeEmptySpace(main, 5);
// next row
Label empty = new Label(main, SWT.LEFT);
empty.setText("");
empty.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
// Start retrieval when download button is pushed
// choose action on result list
Button btDownload = new Button(main, SWT.PUSH);
// TODO: how do I locate icons?
try {
Image dlIcon = new Image(getDisplay(),
getClass().getResourceAsStream("C:\\Users/goya/workspace/icons/icons/material_design/png/download-button.png"));
btDownload.setImage(dlIcon);
}
catch(Exception ex) {
btDownload.setText("Download now");
}
GridData gd = new GridData(SWT.LEFT, SWT.FILL, false, false);
gd.horizontalSpan = 2;
btDownload.setLayoutData(gd);
btDownload.setText("Fetch");
btDownload.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Downloading " + cbSource.getSelection().toString());
eventBroker.send(EventConstants.TOPIC_STATUS, "Fetching " + cbSource.getSelection().toString());
ResultConfig resultConfig = configManager.getResultConfig();
IStructuredSelection selection = (IStructuredSelection) cbSource.getSelection();
@@ -184,7 +166,7 @@ public class LoadFromBggPart {
if(selection.getFirstElement() == SourceFilter.BGG_USER) {
String user = resultConfig.user;
if(user == null || user.isEmpty()) {
System.out.println("Please enter a user name.");
MessageDialog.openError(main.getShell(), "", "Please enter a user name.");
return;
} else {
System.out.println("...for user '" + user + "'");
@@ -196,7 +178,7 @@ public class LoadFromBggPart {
} else if(selection.getFirstElement() == SourceFilter.GEEKLIST) {
Integer geeklistId = resultConfig.geeklistId;
if(geeklistId == null) {
System.out.println("Please enter a geeklist id.");
MessageDialog.openError(main.getShell(), "", "Please enter a geeklist id.");
return;
} else {
System.out.println("...for geeklist id '" + geeklistId + "'");
@@ -218,7 +200,46 @@ public class LoadFromBggPart {
}
}
});
btDownload.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
Label lblAct = new Label(main, SWT.LEFT);
lblAct.setText("and");
lblAct.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, false, false));
ComboViewer cbAct = new ComboViewer(main, SWT.READ_ONLY);
GridData gdact = new GridData(SWT.FILL, SWT.FILL, false, false);
cbSubtypes.getCombo().setLayoutData(gdact);
cbAct.setContentProvider(ArrayContentProvider.getInstance());
List<ResultAction> actions = new ArrayList<ResultAction>();
for(ResultAction act : ResultAction.values()) {
actions.add(act);
}
cbAct.setInput(actions);
cbAct.setSelection(new StructuredSelection(configManager.getResultConfig().action));
cbAct.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
eventBroker.send(EventConstants.TOPIC_ACTION_CHANGED, selection.getFirstElement());
}
});
Label toResultLabel = new Label(main, SWT.LEFT);
toResultLabel.setText("result");
toResultLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
// // Start retrieval when download button is pushed
// // TODO: how do I locate icons?
// Button btDownload = new Button(main, SWT.PUSH);
// try {
// Image dlIcon = new Image(getDisplay(),
// getClass().getResourceAsStream("C:\\Users/goya/workspace/icons/icons/material_design/png/download-button.png"));
// btDownload.setImage(dlIcon);
// }
// catch(Exception ex) {
// btDownload.setText("Download now");
// }
main.pack();
@@ -275,6 +296,15 @@ public class LoadFromBggPart {
return display;
}
public void makeEmptySpace(Composite parent, int span) {
Label empty = new Label(parent, SWT.LEFT);
empty.setText("");
GridData gde = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
if(span > 1) {
gde.horizontalSpan = span;
}
empty.setLayoutData(gde);
}
// DISPOSE images!
}

+ 40
- 0
xyz.veronie.bgg.ui/src/xyz/veronie/bgg/ui/parts/StatusBar.java Parādīt failu

@@ -0,0 +1,40 @@
package xyz.veronie.bgg.ui.parts;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.e4.core.di.annotations.Creatable;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import xyz.veronie.bgg.types.EventConstants;
@Creatable
public class StatusBar {
private Label statusLabel;
private Composite main;
@PostConstruct
public void createControls(Composite parent) {
main = new Composite(parent, SWT.FILL);
statusLabel = new Label(main, SWT.FILL);
statusLabel.setText("ASDF");
}
@Inject
@Optional
private void subscribeTopicSourceChanged
(@UIEventTopic(EventConstants.TOPIC_STATUS)
String text) {
statusLabel.setText(text);
main.layout();
System.out.println("Status: " + text);
}
}

Notiek ielāde…
Atcelt
Saglabāt