2024-04-10 03:35:27 -04:00
/ *
* Firestar Mod Manager
* Copyright ( C ) 2024 bonkmaykr
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see https : //www.gnu.org/licenses/.
* /
2024-04-10 04:49:21 -04:00
import javax.swing.* ;
2024-04-12 00:26:26 -04:00
import java.awt.* ;
2024-04-12 11:21:51 -04:00
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;
2024-04-12 00:26:26 -04:00
import static javax.swing.WindowConstants.EXIT_ON_CLOSE ;
2024-04-10 04:49:21 -04:00
2024-04-12 11:21:51 -04:00
public class MissPiggy implements ActionListener {
2024-04-12 00:26:26 -04:00
JFrame frame = new JFrame ( ) ;
JPanel frameContainer ;
JPanel actionsContainer ;
JPanel descriptionContainer ;
2024-04-12 11:21:51 -04:00
//JPanel menuBarContainerPanel = new JPanel();
public JMenuBar menuBar ;
public JMenu fileMenu ;
public JMenu toolsMenu ;
public JMenu helpMenu ;
//JMenuItem menuItem;
2024-04-12 00:26:26 -04:00
JScrollPane modListScrollContainer ;
2024-04-19 18:00:20 -04:00
public JList < String /*JLabel*/ > modList ;
2024-04-12 00:26:26 -04:00
private JButton toggleButton ;
private JButton moveUpButton ;
private JButton deleteButton1 ;
private JButton moveDownButton ;
private JButton optionsButton ;
private JButton importButton ;
2024-04-12 11:21:51 -04:00
private JButton deployButton ;
2024-04-12 00:26:26 -04:00
private int selectedItem ;
// Initialize the main window
public void Action ( /*Main entryPoint*/ ) {
2024-04-10 03:35:27 -04:00
// todo construct contents
// todo display modlist
2024-04-10 04:49:21 -04:00
2024-04-12 00:26:26 -04:00
/// DEBUG ///
Main . Mod testModEntry = /*entryPoint*/ new Main ( ) . new Mod ( ) ; //this is retarded? we're making a new object of a certain type, why the fuck do you care where it comes from? static or regardless??
testModEntry . friendlyName = " Example Mod " ;
testModEntry . game = " 2048 " ;
testModEntry . path = " unused " ;
testModEntry . version = 1 ;
testModEntry . priority = 0 ; //might discard this in favor of the list index for simplicity
testModEntry . loaderversion = 0 ;
Main . Mods . add ( testModEntry ) ;
Main . Mods . add ( testModEntry ) ;
Main . Mods . add ( testModEntry ) ;
///-/////-///
2024-04-12 11:21:51 -04:00
// populate menu bar
menuBar = new JMenuBar ( ) ;
fileMenu = new JMenu ( " File " ) ;
toolsMenu = new JMenu ( " Tools " ) ;
helpMenu = new JMenu ( " Help " ) ;
fileMenu . add ( new JMenuItem ( " Deploy All Mods " ) ) ;
fileMenu . add ( new JMenuItem ( " Import Mod... " ) ) ;
fileMenu . add ( new JMenuItem ( " Remove All " ) ) ;
fileMenu . add ( new JSeparator ( ) ) ;
fileMenu . add ( new JMenuItem ( " Options " ) ) ;
fileMenu . add ( new JMenuItem ( " Quit " ) ) ;
toolsMenu . add ( new JMenuItem ( " Edit Metadata " ) ) ; // disabled if a mod is not selected from the list
toolsMenu . add ( new JMenuItem ( " Generate New Mod from Folder... " ) ) ;
helpMenu . add ( new JMenuItem ( " About Firestar " ) ) ;
menuBar . add ( fileMenu ) ;
menuBar . add ( toolsMenu ) ;
menuBar . add ( helpMenu ) ;
menuBar . setVisible ( true ) ;
frame . setJMenuBar ( menuBar ) ;
2024-04-12 00:26:26 -04:00
frame . add ( frameContainer ) ; // initialize window contents -- will be handled by IntelliJ IDEA
2024-04-12 11:21:51 -04:00
InitializeModListInGUI ( ) ; // present mod list
2024-04-12 11:31:38 -04:00
fileMenu . getItem ( 0 ) . addActionListener ( this ) ;
fileMenu . getItem ( 1 ) . addActionListener ( this ) ;
fileMenu . getItem ( 2 ) . addActionListener ( this ) ;
fileMenu . getItem ( 4 ) . addActionListener ( this ) ;
2024-04-12 11:21:51 -04:00
fileMenu . getItem ( 5 ) . addActionListener ( this ) ;
2024-04-12 11:31:38 -04:00
toolsMenu . getItem ( 0 ) . addActionListener ( this ) ;
toolsMenu . getItem ( 1 ) . addActionListener ( this ) ;
helpMenu . getItem ( 0 ) . addActionListener ( this ) ;
2024-04-12 11:21:51 -04:00
// display window
2024-04-12 00:26:26 -04:00
frame . setSize ( 800 , 600 ) ; // 1280 800
frame . setTitle ( " Firestar Mod Manager " ) ;
frame . setResizable ( true ) ;
frame . setDefaultCloseOperation ( EXIT_ON_CLOSE ) ;
frame . setLayout ( new GridLayout ( ) ) ;
2024-04-13 11:04:35 -04:00
frame . setLocationRelativeTo ( null ) ;
2024-04-12 00:26:26 -04:00
frame . setVisible ( true ) ;
}
public void InitializeModListInGUI ( ) { // i really wanted this to be "lights, camera, action" but the code organizing kept getting stupider and stupider so i gave up
// cleanup
modList . clearSelection ( ) ;
modList . removeAll ( ) ;
2024-04-19 18:00:20 -04:00
modList . setVisibleRowCount ( Main . Mods . size ( ) ) ;
modList . setSelectionMode ( ListSelectionModel . SINGLE_SELECTION ) ;
2024-04-12 00:26:26 -04:00
2024-04-12 11:31:38 -04:00
// todo this needs fixing before we can map it to Main.Mods and finish the other functionality around it
2024-04-12 00:26:26 -04:00
// add text entry for each
int i = 0 ;
2024-04-19 18:00:20 -04:00
/*JLabel[]*/ String [ ] contents = new String [ Main . Mods . size ( ) ] ;
2024-04-12 00:26:26 -04:00
System . out . println ( " Initializing modList to GUI with length of " + Main . Mods . size ( ) + " units " ) ; //debug
while ( i < Main . Mods . size ( ) ) {
2024-04-19 18:00:20 -04:00
//JLabel label = new JLabel(Main.Mods.get(i).friendlyName);
//label.setVisible(true);
//contents[i] = label; //modList.add(label);
contents [ i ] = Main . Mods . get ( i ) . friendlyName ;
2024-04-12 00:26:26 -04:00
//debug
if ( Main . Mods . get ( i ) . author = = null ) { Main . Mods . get ( i ) . author = " Anonymous " ; }
System . out . println ( " Added " + Main . Mods . get ( i ) . friendlyName + " by " + Main . Mods . get ( i ) . author ) ;
2024-04-10 04:49:21 -04:00
2024-04-12 00:26:26 -04:00
i + + ;
}
2024-04-19 18:00:20 -04:00
modList . setListData ( contents ) ;
2024-04-10 03:35:27 -04:00
}
2024-04-12 11:21:51 -04:00
@Override
public void actionPerformed ( ActionEvent actionEvent ) {
2024-04-12 11:31:38 -04:00
if ( actionEvent . getSource ( ) = = fileMenu . getItem ( 5 ) ) { System . exit ( 0 ) ; } else
if ( actionEvent . getSource ( ) = = fileMenu . getItem ( 0 ) ) { deployModGUI ( ) ; } else
if ( actionEvent . getSource ( ) = = fileMenu . getItem ( 1 ) ) { importModGUI ( ) ; } else
if ( actionEvent . getSource ( ) = = fileMenu . getItem ( 2 ) ) { removeAllGUI ( ) ; } else
2024-04-13 11:04:35 -04:00
if ( actionEvent . getSource ( ) = = fileMenu . getItem ( 4 ) ) { optionsGUI ( ) ; } else
if ( actionEvent . getSource ( ) = = helpMenu . getItem ( 0 ) ) { new Rowlf ( ) . displayAboutScreen ( ) ; }
2024-04-12 11:31:38 -04:00
}
// Will likely split the below functions into separate classes to work with intellij GUI designer.
public void deployModGUI ( ) {
// todo dialog that monitors psarc progress, handles file transfers, etc
// could prevent closing program during this process? (may also be unnecessary)
}
public void importModGUI ( ) {
// todo call system shell to request file picker
}
public void removeAllGUI ( ) {
// todo warning dialog that nukes list when Yes is clicked
}
public void optionsGUI ( ) {
// todo settings page w/ reset switch
}
public void generatorGUI ( ) {
// todo mod packer
}
public void metaEditorGUI ( ) {
// todo tag editor
}
public void aboutGUI ( ) {
// todo about page
2024-04-12 11:21:51 -04:00
}
2024-04-10 03:35:27 -04:00
}