Shifting to make application compatible with latest libKonogonka. Small UI enhancements: adding more colors to NCA Headers to simplify navigation.
continuous-integration/drone/push Build is failing Details

master
Dmitry Isaenko 2022-09-19 23:18:42 +03:00
parent 3634a8c98d
commit 32b8b8fc90
12 changed files with 221 additions and 176 deletions

View File

@ -1,6 +1,6 @@
# konogonka # konogonka
[![Build Status](https://ci.redrise.ru/api/badges/desu/konogonka/status.svg)](https://ci.redrise.ru/desu/konogonka) ![License](https://img.shields.io/badge/License-GPLv3-blue.svg) [![Build Status](https://ci.redrise.ru/api/badges/desu/konogonka/status.svg)](https://ci.redrise.ru/desu/konogonka)
GitHub mirror. [Click here to get it from independent source code location](https://git.redrise.ru/desu/konogonka) GitHub mirror. [Click here to get it from independent source code location](https://git.redrise.ru/desu/konogonka)

View File

@ -23,6 +23,7 @@ import javafx.fxml.Initializable;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import konogonka.AppPreferences; import konogonka.AppPreferences;
@ -32,6 +33,7 @@ import libKonogonka.Converter;
import konogonka.MediatorControl; import konogonka.MediatorControl;
import libKonogonka.Tools.NCA.NCAContent; import libKonogonka.Tools.NCA.NCAContent;
import konogonka.Workers.DumbNCA3ContentExtractor; import konogonka.Workers.DumbNCA3ContentExtractor;
import libKonogonka.Tools.PFS0.IPFS0Provider;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
@ -44,25 +46,27 @@ public class NCASectionContentController implements Initializable {
private int sectionNumber; private int sectionNumber;
@FXML @FXML
private Button extractRawConentBtn; private Button extractRawContentBtn;
@FXML @FXML
private NSPController SectionPFS0Controller; private NSPController SectionPFS0Controller;
@FXML @FXML
private RomFsController SectionRomFsController; private RomFsController SectionRomFsController;
@FXML @FXML
private VBox sha256pane; private VBox sha256pane;
@FXML
private TitledPane pfs0TitledPane, RomFsTitledPane;
@Override @Override
public void initialize(URL url, ResourceBundle resourceBundle) { public void initialize(URL url, ResourceBundle resourceBundle) {
extractRawConentBtn.setDisable(true); extractRawContentBtn.setDisable(true);
extractRawConentBtn.setOnAction(event -> this.extractFiles()); extractRawContentBtn.setOnAction(event -> this.extractFiles());
} }
public void resetTab() { public void resetTab() {
SectionPFS0Controller.resetTab(); SectionPFS0Controller.resetTab();
SectionRomFsController.resetTab(); SectionRomFsController.resetTab();
sha256pane.getChildren().clear(); sha256pane.getChildren().clear();
extractRawConentBtn.setDisable(true); extractRawContentBtn.setDisable(true);
} }
public void populateFields(NCAContent ncaContent, int sectionNumber) { public void populateFields(NCAContent ncaContent, int sectionNumber) {
@ -73,7 +77,7 @@ public class NCASectionContentController implements Initializable {
this.ncaContent = ncaContent; this.ncaContent = ncaContent;
this.sectionNumber = sectionNumber; this.sectionNumber = sectionNumber;
this.extractRawConentBtn.setDisable(false); this.extractRawContentBtn.setDisable(false);
setPFS0Content(); setPFS0Content();
setRomFsContent(); setRomFsContent();
@ -82,10 +86,16 @@ public class NCASectionContentController implements Initializable {
if (ncaContent.getPfs0() != null) if (ncaContent.getPfs0() != null)
SectionPFS0Controller.setData(ncaContent.getPfs0(), null);; SectionPFS0Controller.setData(ncaContent.getPfs0(), null);;
LinkedList<byte[]> sha256hashList = ncaContent.getPfs0SHA256hashes(); IPFS0Provider ipfs0Provider = ncaContent.getPfs0();
if (ipfs0Provider == null)
return;
LinkedList<byte[]> sha256hashList = ipfs0Provider.getPfs0SHA256hashes();
if (sha256hashList == null) if (sha256hashList == null)
return; return;
for (int i = 0; i < sha256hashList.size(); i++){ for (int i = 0; i < sha256hashList.size(); i++){
Label numberLblTmp = new Label(String.format("%10d", i)); Label numberLblTmp = new Label(String.format("%10d", i));
numberLblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0)); numberLblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
@ -94,10 +104,13 @@ public class NCASectionContentController implements Initializable {
sha256pane.getChildren().add(new HBox(numberLblTmp, sha256LblTmp)); sha256pane.getChildren().add(new HBox(numberLblTmp, sha256LblTmp));
} }
pfs0TitledPane.setExpanded(true);
} }
private void setRomFsContent(){ private void setRomFsContent(){
if (ncaContent.getRomfs() != null) if (ncaContent.getRomfs() == null)
SectionRomFsController.setData(ncaContent.getRomfs()); return;
SectionRomFsController.setData(ncaContent.getRomfs());
RomFsTitledPane.setExpanded(true);
} }
private void extractFiles(){ private void extractFiles(){
@ -114,11 +127,11 @@ public class NCASectionContentController implements Initializable {
if (!dir.exists()) if (!dir.exists())
return; return;
extractRawConentBtn.setDisable(true); extractRawContentBtn.setDisable(true);
DumbNCA3ContentExtractor extractor = new DumbNCA3ContentExtractor(ncaContent, sectionNumber, dir.getAbsolutePath()+File.separator); DumbNCA3ContentExtractor extractor = new DumbNCA3ContentExtractor(ncaContent, sectionNumber, dir.getAbsolutePath()+File.separator);
extractor.setOnSucceeded(e->{ extractor.setOnSucceeded(e->{
extractRawConentBtn.setDisable(false); extractRawContentBtn.setDisable(false);
}); });
Thread workThread = new Thread(extractor); Thread workThread = new Thread(extractor);
workThread.setDaemon(true); workThread.setDaemon(true);

View File

@ -50,10 +50,10 @@ public class RFSModelEntry implements IRowModel {
public String getFileName() { return fileSystemEntry.getName(); } public String getFileName() { return fileSystemEntry.getName(); }
@Override @Override
public long getFileSize() { return fileSystemEntry.getFileSize(); } public long getFileSize() { return fileSystemEntry.getSize(); }
@Override @Override
public long getFileOffset() { return fileSystemEntry.getFileOffset(); } public long getFileOffset() { return fileSystemEntry.getOffset(); }
@Override @Override
public boolean isMarkSelected() { return check; } public boolean isMarkSelected() { return check; }

View File

@ -35,6 +35,8 @@ import java.net.URL;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import static libKonogonka.Converter.byteArrToHexString;
public class HFSBlockController implements Initializable { public class HFSBlockController implements Initializable {
@FXML @FXML
private TitledPane currentTitledPane; private TitledPane currentTitledPane;
@ -91,13 +93,13 @@ public class HFSBlockController implements Initializable {
public void populateTab(HFS0Provider hfs0Provider){ public void populateTab(HFS0Provider hfs0Provider){
if (hfs0Provider != null){ if (hfs0Provider != null){
bodySize = hfs0Provider.getRawFileDataStart(); bodySize = hfs0Provider.getRawFileDataStart();
hfs0mainMagicNumLbl.setText(Boolean.toString(hfs0Provider.isMagicHFS0())); hfs0mainMagicNumLbl.setText(hfs0Provider.getMagic());
hfs0mainFileCntLbl.setText(Integer.toString(hfs0Provider.getFilesCnt())); hfs0mainFileCntLbl.setText(Integer.toString(hfs0Provider.getFilesCount()));
hfs0mainStrTblSizeLbl.setText(Integer.toString(hfs0Provider.getStringTableSize())); hfs0mainStrTblSizeLbl.setText(Integer.toString(hfs0Provider.getStringTableSize()));
hfs0mainPaddingLbl.setText(Boolean.toString(hfs0Provider.isPaddingHfs0())); hfs0mainPaddingLbl.setText(byteArrToHexString(hfs0Provider.getPadding()));
hfs0mainRawFileDataStartLbl.setText(Long.toString(hfs0Provider.getRawFileDataStart())); hfs0mainRawFileDataStartLbl.setText(Long.toString(hfs0Provider.getRawFileDataStart()));
hfs0tableFilesListMainController.setContentToTable(hfs0Provider); hfs0tableFilesListMainController.setContentToTable(hfs0Provider);
if (hfs0Provider.getFilesCnt() > 0) if (hfs0Provider.getFilesCount() > 0)
extractMainBtn.setDisable(false); extractMainBtn.setDisable(false);
} }
else { else {

View File

@ -215,7 +215,7 @@ public class Hfs0TableViewController implements Initializable {
return; return;
} }
// Note: 'i' in here is extra important to be stored in sequence items added. // Note: 'i' in here is extra important to be stored in sequence items added.
for (int i = 0; i < hfs0.getFilesCnt(); i++){ for (int i = 0; i < hfs0.getFilesCount(); i++){
rowsObsLst.add(new Hfs0RowModel( rowsObsLst.add(new Hfs0RowModel(
hfs0.getHfs0Files()[i].getName(), hfs0.getHfs0Files()[i].getName(),
hfs0.getHfs0Files()[i].getSize(), hfs0.getHfs0Files()[i].getSize(),

View File

@ -5,22 +5,17 @@ import konogonka.ModelControllers.EMsgType;
import konogonka.ModelControllers.LogPrinter; import konogonka.ModelControllers.LogPrinter;
import libKonogonka.Tools.NCA.NCAContent; import libKonogonka.Tools.NCA.NCAContent;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PipedInputStream;
public class DumbNCA3ContentExtractor extends Task<Void> { public class DumbNCA3ContentExtractor extends Task<Void> {
private NCAContent ncaContent; private final NCAContent ncaContent;
private int ncaNumberInFile; private final int ncaNumberInFile;
private LogPrinter logPrinter; private final LogPrinter logPrinter;
private String filesDestPath; private final String filesDestinationPath;
public DumbNCA3ContentExtractor(NCAContent ncaContent, int ncaNumberInFile, String filesDestPath){ public DumbNCA3ContentExtractor(NCAContent ncaContent, int ncaNumberInFile, String filesDestinationPath){
this.ncaContent = ncaContent; this.ncaContent = ncaContent;
this.ncaNumberInFile = ncaNumberInFile; this.ncaNumberInFile = ncaNumberInFile;
this.filesDestPath = filesDestPath; this.filesDestinationPath = filesDestinationPath;
this.logPrinter = new LogPrinter(); this.logPrinter = new LogPrinter();
} }
@ -30,42 +25,10 @@ public class DumbNCA3ContentExtractor extends Task<Void> {
if (ncaContent.getRomfs() != null){ if (ncaContent.getRomfs() != null){
lv6mark = " [lv6 "+ncaContent.getRomfs().getLevel6Offset()+"]"; lv6mark = " [lv6 "+ncaContent.getRomfs().getLevel6Offset()+"]";
} }
logPrinter.print("\tStart dummy extracting: \n"+filesDestPath+"NCAContent_"+ncaNumberInFile+lv6mark+".bin", EMsgType.INFO); logPrinter.print("\tStart dummy extracting: \n"+ filesDestinationPath +"NCAContent_"+ncaNumberInFile+lv6mark+".bin", EMsgType.INFO);
File contentFile = new File(filesDestPath + "NCAContent_"+ncaNumberInFile+lv6mark+".bin"); ncaContent.exportMediaBlock(filesDestinationPath + "NCAContent_"+ncaNumberInFile+lv6mark+".bin");
try { logPrinter.print("\tEnd dummy extracting", EMsgType.INFO);
BufferedOutputStream extractedFileBOS = new BufferedOutputStream(new FileOutputStream(contentFile)); logPrinter.close();
PipedInputStream pis = ncaContent.getRawDataContentPipedInpStream();
byte[] readBuf = new byte[0x200]; // 8mb NOTE: consider switching to 1mb 1048576
int readSize;
//*** PROGRESS BAR VARS START
long progressHandleFSize = ncaContent.getRawDataContentSize();
int progressHandleFRead = 0;
//*** PROGRESS BAR VARS END
while ((readSize = pis.read(readBuf)) > -1) {
extractedFileBOS.write(readBuf, 0, readSize);
readBuf = new byte[0x200];
//*** PROGRESS BAR DECORCATIONS START
progressHandleFRead += readSize;
//System.out.println(readSize);
try {
logPrinter.updateProgress((progressHandleFRead)/(progressHandleFSize/100.0) / 100.0);
}catch (InterruptedException ignore){}
//*** PROGRESS BAR DECORCATIONS END
}
try {
logPrinter.updateProgress(1.0);
}
catch (InterruptedException ignored){}
extractedFileBOS.close();
} catch (Exception ioe) {
logPrinter.print("\tExtracting dummy issue\n\t" + ioe.getMessage(), EMsgType.INFO);
return null;
} finally {
logPrinter.print("\tEnd dummy extracting", EMsgType.INFO);
logPrinter.close();
}
return null; return null;
} }
} }

View File

@ -10,6 +10,7 @@ import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.PipedInputStream; import java.io.PipedInputStream;
import java.nio.file.Files;
import java.util.List; import java.util.List;
public class DumbRomFsExtractor extends Task<Void> { public class DumbRomFsExtractor extends Task<Void> {
@ -63,17 +64,17 @@ public class DumbRomFsExtractor extends Task<Void> {
} }
return null; return null;
} }
// TODO: Update # backend and then here
private void exportSingleFile(FileSystemEntry entry, String saveToLocation) throws Exception{ private void exportSingleFile(FileSystemEntry entry, String saveToLocation) throws Exception{
File contentFile = new File(saveToLocation + entry.getName()); File contentFile = new File(saveToLocation + entry.getName());
BufferedOutputStream extractedFileBOS = new BufferedOutputStream(new FileOutputStream(contentFile)); BufferedOutputStream extractedFileBOS = new BufferedOutputStream(Files.newOutputStream(contentFile.toPath()));
PipedInputStream pis = provider.getContent(entry); PipedInputStream pis = provider.getContent(entry);
byte[] readBuf = new byte[0x200]; // 8mb NOTE: consider switching to 1mb 1048576 byte[] readBuf = new byte[0x200]; // 8mb NOTE: consider switching to 1mb 1048576
int readSize; int readSize;
//*** PROGRESS BAR VARS START //*** PROGRESS BAR VARS START
long progressHandleFSize = entry.getFileSize(); long progressHandleFSize = entry.getSize();
int progressHandleFRead = 0; int progressHandleFRead = 0;
//*** PROGRESS BAR VARS END //*** PROGRESS BAR VARS END
while ((readSize = pis.read(readBuf)) > -1) { while ((readSize = pis.read(readBuf)) > -1) {

View File

@ -15,8 +15,8 @@
<GridPane prefWidth="860.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAFsHeaderController"> <GridPane prefWidth="860.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAFsHeaderController">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="200.0" minWidth="150.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="175.0" minWidth="160.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="850.0" minWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="850.0" minWidth="100.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
@ -28,7 +28,7 @@
<RowConstraints maxHeight="30.0" minHeight="30.0" /> <RowConstraints maxHeight="30.0" minHeight="30.0" />
<RowConstraints maxHeight="30.0" minHeight="30.0" /> <RowConstraints maxHeight="30.0" minHeight="30.0" />
<RowConstraints vgrow="SOMETIMES" /> <RowConstraints vgrow="SOMETIMES" />
<RowConstraints vgrow="SOMETIMES" /> <RowConstraints minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="30.0" /> <RowConstraints minHeight="30.0" />
@ -300,11 +300,11 @@
<font> <font>
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
</font></Label> </font></Label>
<TitledPane fx:id="romFsTitlePanel" animated="false" expanded="false" text="RomFS SuperBlock"> <TitledPane fx:id="romFsTitlePanel" contentDisplay="CENTER" expanded="false" styleClass="romFsSuperblock" text="RomFS SuperBlock">
<content> <content>
<VBox spacing="5.0"> <VBox spacing="5.0" style="-fx-background-color: #aadff3;">
<children> <children>
<GridPane gridLinesVisible="true"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -472,7 +472,7 @@
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
</font> </font>
</Label> </Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #aea6f3;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #b6aeff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -576,7 +576,7 @@
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
</font> </font>
</Label> </Label>
<GridPane gridLinesVisible="true" style="romFsReservedTailLbl6: #bfb2ff;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #d7bdff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -784,7 +784,7 @@
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
</font> </font>
</Label> </Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #d7c4ff;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #eddaff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -888,7 +888,7 @@
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
</font> </font>
</Label> </Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #91c3f6;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #eaeaff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -992,7 +992,7 @@
<Font name="System Bold" size="13.0" /> <Font name="System Bold" size="13.0" />
</font> </font>
</Label> </Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #a4c8ef;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffecec;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -1091,7 +1091,7 @@
<Insets /> <Insets />
</opaqueInsets> </opaqueInsets>
</GridPane> </GridPane>
<GridPane gridLinesVisible="true"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -1165,11 +1165,11 @@
</VBox> </VBox>
</content> </content>
</TitledPane> </TitledPane>
<TitledPane fx:id="pfs0TitlePanel" expanded="false" text="PFS0 SuperBlock"> <TitledPane fx:id="pfs0TitlePanel" styleClass="pfs0Superblock" text="PFS0 SuperBlock">
<content> <content>
<VBox spacing="5.0"> <VBox spacing="5.0" style="-fx-background-color: #ffc5c6;">
<children> <children>
<GridPane gridLinesVisible="true"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -1299,9 +1299,6 @@
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<Label text="0x28"> <Label text="0x28">
@ -1314,7 +1311,7 @@
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label text="Offset of hash-table. Normally zero?" GridPane.columnIndex="2"> <Label text="Offset Hash-table (Normally zero?)" GridPane.columnIndex="2">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -1329,57 +1326,12 @@
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label text="0x38" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x40" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x48" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="1"> <Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="2"> <Label text="Size Hash-table" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xb0" GridPane.columnIndex="1" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Size of hash-table" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="PFS0 header offset (relative to section-start)" GridPane.columnIndex="2" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="PFS0 filesystem size (in bytes) relative to the PFS0 header" GridPane.columnIndex="2" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Normally zeros" GridPane.columnIndex="2" GridPane.rowIndex="4">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -1389,17 +1341,89 @@
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label fx:id="pfs0relativeToSectionStartOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="2"> </children>
</GridPane>
<GridPane gridLinesVisible="true" style="-fx-background-color: #d5d5d5;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="0x38">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label fx:id="pfs0sizePfs0Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="3"> <Label text="0x40" GridPane.rowIndex="1">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<TextField fx:id="pfs0zeroesTf" editable="false" text="-" GridPane.columnIndex="3" GridPane.rowIndex="4" /> <Label text="0x8" GridPane.columnIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Offset PFS0 (header, relative to section-start)" GridPane.columnIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Size PFS0 (in bytes, relative to the PFS0 header)" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="pfs0relativeToSectionStartOffsetLbl" text="-" GridPane.columnIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="pfs0sizePfs0Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</GridPane>
<GridPane gridLinesVisible="true" style="-fx-background-color: #d5d5d5;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="0x48">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xb0" GridPane.columnIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Normally zeros" GridPane.columnIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<TextField fx:id="pfs0zeroesTf" editable="false" text="-" GridPane.columnIndex="3" />
</children> </children>
</GridPane> </GridPane>
</children> </children>
@ -1419,11 +1443,11 @@
</Label> </Label>
</children> </children>
</AnchorPane> </AnchorPane>
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="8" GridPane.vgrow="ALWAYS"> <ScrollPane fitToWidth="true" style="-fx-border-color: #000000; -fx-background-color: #ffee70;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="8" GridPane.vgrow="ALWAYS">
<content> <content>
<TitledPane text="PatchInfo"> <TitledPane expanded="false" styleClass="patchInfo" text="Patch Info">
<content> <content>
<VBox spacing="5.0" style="-fx-background-color: #ffee70;"> <VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #ffee70;">
<children> <children>
<Label text="Indirect Info"> <Label text="Indirect Info">
<font> <font>
@ -1435,7 +1459,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1538,7 +1562,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1639,7 +1663,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1693,7 +1717,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1787,6 +1811,9 @@
</children> </children>
</VBox> </VBox>
</content> </content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane> </TitledPane>
</content> </content>
</ScrollPane> </ScrollPane>
@ -1941,16 +1968,16 @@
</AnchorPane> </AnchorPane>
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="11"> <ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="11">
<content> <content>
<TitledPane text="Sparse Info"> <TitledPane expanded="false" styleClass="sparseInfo" text="Sparse Info">
<content> <content>
<VBox spacing="5.0" style="-fx-background-color: #c5dbff;"> <VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #c5dbff;">
<children> <children>
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2053,7 +2080,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2149,7 +2176,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2222,6 +2249,9 @@
</children> </children>
</VBox> </VBox>
</content> </content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane> </TitledPane>
</content> </content>
</ScrollPane> </ScrollPane>
@ -2263,16 +2293,16 @@
</AnchorPane> </AnchorPane>
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="12"> <ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="12">
<content> <content>
<TitledPane text="Compression Info"> <TitledPane expanded="false" styleClass="compressionInfo" text="Compression Info">
<content> <content>
<VBox spacing="5.0" style="-fx-background-color: #99ff66;"> <VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #99ff66;">
<children> <children>
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2375,7 +2405,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2471,7 +2501,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2502,6 +2532,9 @@
</children> </children>
</VBox> </VBox>
</content> </content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane> </TitledPane>
</content> </content>
</ScrollPane> </ScrollPane>
@ -2517,16 +2550,16 @@
<AnchorPane style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="3" GridPane.rowIndex="13" /> <AnchorPane style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="3" GridPane.rowIndex="13" />
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="13"> <ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="13">
<content> <content>
<TitledPane text="Meta Data Hash Data Info"> <TitledPane expanded="false" styleClass="metaDataHashDataInfo" text="Meta Data Hash Data Info">
<content> <content>
<VBox spacing="5.0" style="-fx-background-color: #ffb380;"> <VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #ffb380;">
<children> <children>
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="180.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2623,12 +2656,12 @@
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label text="0x8" GridPane.rowIndex="3"> <Label text="0x10" GridPane.rowIndex="3">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
</Label> </Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="3"> <Label text="0x20" GridPane.columnIndex="1" GridPane.rowIndex="3">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -2648,6 +2681,9 @@
</children> </children>
</VBox> </VBox>
</content> </content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane> </TitledPane>
</content> </content>
</ScrollPane> </ScrollPane>

View File

@ -10,11 +10,11 @@
<?import javafx.scene.shape.SVGPath?> <?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCASectionContentController"> <VBox spacing="5.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCASectionContentController">
<children> <children>
<HBox alignment="TOP_CENTER" spacing="5.0"> <HBox alignment="TOP_CENTER" spacing="5.0">
<children> <children>
<Button fx:id="extractRawConentBtn" disable="true" mnemonicParsing="false" text="%btnExtract"> <Button fx:id="extractRawContentBtn" disable="true" mnemonicParsing="false" text="%btnExtract">
<graphic> <graphic>
<SVGPath content="M2,10.96C1.5,10.68 1.35,10.07 1.63,9.59L3.13,7C3.24,6.8 3.41,6.66 3.6,6.58L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.66,6.72 20.82,6.88 20.91,7.08L22.36,9.6C22.64,10.08 22.47,10.69 22,10.96L21,11.54V16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V10.96C2.7,11.13 2.32,11.14 2,10.96M12,4.15V4.15L12,10.85V10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V12.69L14,15.59C13.67,15.77 13.3,15.76 13,15.6V19.29L19,15.91M13.85,13.36L20.13,9.73L19.55,8.72L13.27,12.35L13.85,13.36Z" /> <SVGPath content="M2,10.96C1.5,10.68 1.35,10.07 1.63,9.59L3.13,7C3.24,6.8 3.41,6.66 3.6,6.58L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.66,6.72 20.82,6.88 20.91,7.08L22.36,9.6C22.64,10.08 22.47,10.69 22,10.96L21,11.54V16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V10.96C2.7,11.13 2.32,11.14 2,10.96M12,4.15V4.15L12,10.85V10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V12.69L14,15.59C13.67,15.77 13.3,15.76 13,15.6V19.29L19,15.91M13.85,13.36L20.13,9.73L19.55,8.72L13.27,12.35L13.85,13.36Z" />
</graphic> </graphic>
@ -24,7 +24,7 @@
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding> </padding>
</HBox> </HBox>
<TitledPane expanded="false" text="PFS0"> <TitledPane fx:id="pfs0TitledPane" expanded="false" text="PFS0">
<content> <content>
<VBox spacing="5.0"> <VBox spacing="5.0">
<TitledPane expanded="false" text="SHA256 hashes"> <TitledPane expanded="false" text="SHA256 hashes">
@ -60,7 +60,7 @@
<fx:include fx:id="SectionPFS0" source="../NSP/NSPTab.fxml" /> <fx:include fx:id="SectionPFS0" source="../NSP/NSPTab.fxml" />
</VBox> </VBox>
</content></TitledPane> </content></TitledPane>
<TitledPane text="'RomFS'" VBox.vgrow="ALWAYS"> <TitledPane fx:id="RomFsTitledPane" expanded="false" text="'RomFS'" VBox.vgrow="ALWAYS">
<content> <content>
<fx:include fx:id="SectionRomFs" source="../RomFS/RFSTab.fxml" /> <fx:include fx:id="SectionRomFs" source="../RomFS/RFSTab.fxml" />
</content> </content>

View File

@ -12,7 +12,7 @@
<?import javafx.scene.layout.VBox?> <?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAController"> <ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAController">
<VBox spacing="5.0"> <VBox spacing="5.0">
<children> <children>
<TitledPane animated="false" expanded="false" text="Header"> <TitledPane animated="false" expanded="false" text="Header">
@ -22,7 +22,7 @@
<GridPane> <GridPane>
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="130.0" minWidth="125.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="450.0" prefWidth="500.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="450.0" prefWidth="500.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
</columnConstraints> </columnConstraints>
@ -248,7 +248,7 @@
</AnchorPane> </AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="18"> <AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="18">
<children> <children>
<Label text="0x10*0x4(0x40)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <Label text="0x40" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -257,7 +257,7 @@
</AnchorPane> </AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="17"> <AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="17">
<children> <children>
<Label text="0x20*0x4(0x80)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <Label text="0x80" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -266,7 +266,7 @@
</AnchorPane> </AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="16"> <AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="16">
<children> <children>
<Label text="0x10*0x4(0x40)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <Label text="0x40" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -442,7 +442,7 @@
</AnchorPane> </AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="2" GridPane.rowIndex="17"> <AnchorPane styleClass="customGrid" GridPane.columnIndex="2" GridPane.rowIndex="17">
<children> <children>
<Label text="Table of SHA256 hashes, over each 0x200-byte Section Header Block." AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <Label text="Table of SHA256 hashes, over each 0x200-byte Section Header Block (0x20*0x4)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -451,7 +451,7 @@
</AnchorPane> </AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="2" GridPane.rowIndex="18"> <AnchorPane styleClass="customGrid" GridPane.columnIndex="2" GridPane.rowIndex="18">
<children> <children>
<Label text="Key area" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <Label text="Key area (0x10 * 0x4)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding> <padding>
<Insets left="5.0" right="5.0" /> <Insets left="5.0" right="5.0" />
</padding> </padding>
@ -592,12 +592,12 @@
<Label text="Encrypted" /> <Label text="Encrypted" />
<TextField fx:id="keyAreaEnKey0TF" editable="false" /> <TextField fx:id="keyAreaEnKey0TF" editable="false" />
<TextField fx:id="keyAreaEnKey1TF" editable="false" /> <TextField fx:id="keyAreaEnKey1TF" editable="false" />
<TextField fx:id="keyAreaEnKey2TF" editable="false" /> <TextField fx:id="keyAreaEnKey2TF" editable="false" style="-fx-background-color: #ffc2f2;" />
<TextField fx:id="keyAreaEnKey3TF" editable="false" /> <TextField fx:id="keyAreaEnKey3TF" editable="false" />
<Label text="Decrypted" /> <Label text="Decrypted" />
<TextField fx:id="keyAreaDecKey0TF" editable="false" /> <TextField fx:id="keyAreaDecKey0TF" editable="false" />
<TextField fx:id="keyAreaDecKey1TF" editable="false" /> <TextField fx:id="keyAreaDecKey1TF" editable="false" />
<TextField fx:id="keyAreaDecKey2TF" editable="false" /> <TextField fx:id="keyAreaDecKey2TF" editable="false" style="-fx-background-color: #ffc2f2;" />
<TextField fx:id="keyAreaDecKey3TF" editable="false" /> <TextField fx:id="keyAreaDecKey3TF" editable="false" />
</children> </children>
</VBox> </VBox>

View File

@ -8,7 +8,7 @@
<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<GridPane gridLinesVisible="true" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCATableController"> <GridPane gridLinesVisible="true" style="-fx-background-color: #ffe3b4;" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCATableController">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" /> <ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />

View File

@ -384,10 +384,10 @@
{ {
-fx-background-color: #efebe6; -fx-background-color: #efebe6;
-fx-background-insets: 0, 1, 2; -fx-background-insets: 0, 1, 2;
-fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; -fx-background-radius: 2 2 2 2;
-fx-padding: 3 11 5 11; -fx-padding: 3 11 5 11;
-fx-border-width: 1; -fx-border-width: 1;
-fx-border-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; -fx-border-radius: 2 2 2 2;
-fx-border-color: #c8c8c8; -fx-border-color: #c8c8c8;
} }
@ -395,10 +395,10 @@
{ {
-fx-background-color: #d5713f; -fx-background-color: #d5713f;
-fx-background-insets: 0, 1, 2; -fx-background-insets: 0, 1, 2;
-fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; -fx-background-radius: 2 2 2 2;
-fx-padding: 3 11 5 11; -fx-padding: 3 11 5 11;
-fx-border-width: 1; -fx-border-width: 1;
-fx-border-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0; -fx-border-radius: 2 2 2 2;
-fx-border-color: #c8c8c8; -fx-border-color: #c8c8c8;
} }
@ -428,6 +428,36 @@
-fx-background-color: white, white; -fx-background-color: white, white;
} }
.patchInfo > .title
{
-fx-background-color: #fed850;
}
.sparseInfo > .title
{
-fx-background-color: #a6cdff;
}
.compressionInfo > .title
{
-fx-background-color: #8eec5e;
}
.metaDataHashDataInfo > .title
{
-fx-background-color: #eca576;
}
.romFsSuperblock > .title
{
-fx-background-color: #9ed0e2;
}
.pfs0Superblock > .title
{
-fx-background-color: #f4bdbd;
}
.regionFolder { .regionFolder {
-fx-shape: "M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z"; -fx-shape: "M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z";
-fx-background-color: #ffbf00; -fx-background-color: #ffbf00;