Skip to content

Commit 52ec1b2

Browse files
Merge pull request #61 from CSC207-2022F-UofT/8-feature-main-home-page
8 feature main home page
2 parents 0c936ab + 9ff1748 commit 52ec1b2

26 files changed

+509
-260
lines changed

src/data/FlashcardSets.csv

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
title,description,isPrivate,flashcardSetId,ownerUsername,flashcardIds
2-
test set 1,for testing study use case,true,0,testUser,0,1,2,3
2+
test set 1,for testing study use case,false,0,testUser,0,1,2,3
33
empty test set,for testing study use case with empty set,true,1,testUser
4-
test set,test set 1,true,2,testUser

src/data/Users.csv

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
username,password,isAdmin,flashcardSetsIds
2-
testUser,456r2t17yuihjn@,false,0,1
3-
jempio,ilovejempio,false,1,2,
1+
username,password,isAdmin,flashcardSetIds
2+
jempio,ilovejempio,false
3+
ducas,badpassword,false
4+
testUser,password,false,0,1

src/main/java/EditorMainPage/EditorMainPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ public EditorMainPage(int flashcardSetId){
4141
this.setTitle("Edit Set \"" + flashcardSet.getTitle() + "\"");
4242
this.setSize(1000, 800);
4343
this.setVisible(true);
44-
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
44+
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
4545
}
4646
}

src/main/java/EditorMainPage/ListOfFlashcardsDataPanel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public class ListOfFlashcardsDataPanel extends JPanel implements ActionListener,
2222

2323
JPanel flashcardPanels;
2424

25-
public ListOfFlashcardsDataPanel(DBGateway dbGateway, List<FlashcardDsRequestModel> flashcardData, FlashcardSetDsRequestModel flashcardSet, JFrame frame) {
25+
public ListOfFlashcardsDataPanel(DBGateway dbGateway, List<FlashcardDsRequestModel> flashcardData,
26+
FlashcardSetDsRequestModel flashcardSet, JFrame frame) {
2627
this.dbGateway = dbGateway;
2728
this.frame = frame;
2829
this.flashcardSet = flashcardSet;

src/main/java/Main.java

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
import com.formdev.flatlaf.FlatDarculaLaf;
33

44
import loginAndSignupUseCase.loginAndSignupUseCaseScreens.WelcomeScreen;
5-
import quizUseCase.*;
6-
import dataAccess.*;
7-
import quizUseCase.screens.QuizSettingsScreen;
8-
9-
import javax.swing.*;
10-
import java.awt.*;
115
import java.io.IOException;
126

137
/**
@@ -18,23 +12,6 @@ public static void main(String[] args) throws IOException {
1812
// ONLY UNCOMMENT ONE THEME!!
1913
// FlatIntelliJLaf.setup(); // light mode
2014
FlatDarculaLaf.setup(); // dark mode
21-
22-
// DATABASE
23-
IFlashcardDataAccess flashcardGateway = new FlashcardDataAccess(DBGateway.getFlashcardPath());
24-
IFlashcardSetDataAccess flashcardSetGateway = new FlashcardSetDataAccess(DBGateway.getFlashcardSetPath());
25-
IUserDataAccess userGateway = new CommonUserDataAccess(DBGateway.getUserPath());
26-
27-
DBGateway gateway = new DBGateway(flashcardGateway, flashcardSetGateway, userGateway);
28-
29-
// WELCOME SCREEN
30-
JFrame application = new JFrame("Welcome");
31-
CardLayout cardLayout = new CardLayout();
32-
JPanel screens = new JPanel(cardLayout);
33-
application.add(screens);
34-
WelcomeScreen welcome = new WelcomeScreen();
35-
screens.add(welcome, "Welcome");
36-
cardLayout.show(screens, "Welcome");
37-
application.pack();
38-
application.setVisible(true);
15+
new WelcomeScreen();
3916
}
4017
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package MainPage;
2+
3+
import EditorMainPage.EditorMainPage;
4+
import dataAccess.DBGateway;
5+
import delete_flashcardset_use_case.*;
6+
import loginAndSignupUseCase.UserLoginResponseModel;
7+
import quizUseCase.*;
8+
import quizUseCase.screens.QuizSettingsScreen;
9+
import studyMode.*;
10+
import studyMode.screens.StudySettingsScreen;
11+
12+
import javax.swing.*;
13+
import javax.swing.border.Border;
14+
15+
public class FlashcardSetDataPanel extends JPanel {
16+
17+
public FlashcardSetDataPanel(String title, String description,
18+
int flashcardSetId, DBGateway gateway,
19+
UserLoginResponseModel user) {
20+
Border border = BorderFactory.createTitledBorder(title);
21+
22+
23+
JLabel descriptionLabel = new JLabel(description);
24+
this.add(descriptionLabel);
25+
26+
JPanel buttons = new JPanel();
27+
28+
JButton study = new JButton("Study");
29+
buttons.add(study);
30+
JButton test = new JButton("Test");
31+
buttons.add(test);
32+
JButton edit = new JButton("Edit");
33+
JButton delete = new JButton("Delete");
34+
35+
36+
buttons.add(edit);
37+
buttons.add(delete);
38+
39+
edit.addActionListener((e) -> new EditorMainPage(flashcardSetId));
40+
study.addActionListener(e -> {
41+
StudySessionOutputBoundary presenter = new StudySessionPresenter();
42+
StudySessionInputBoundary interactor = new StudySessionInteractor(gateway, presenter);
43+
StudySessionController controller = new StudySessionController(interactor);
44+
new StudySettingsScreen(controller, flashcardSetId);
45+
});
46+
test.addActionListener(e -> {
47+
QuizOutputBoundary presenter = new QuizPresenter();
48+
QuizInputBoundary interactor = new QuizInteractor(gateway, presenter);
49+
QuizController controller = new QuizController(interactor);
50+
51+
new QuizSettingsScreen(controller, flashcardSetId);
52+
});
53+
delete.addActionListener(e -> {
54+
DelFlashcardSetOutputBoundary presenter = new DelFlashcardSetPresenter();
55+
DelFlashcardSetInputBoundary interactor = new DelFlashcardSetInteractor(gateway, presenter);
56+
DelFlashcardSetController controller = new DelFlashcardSetController(interactor);
57+
new DeletionScreen(flashcardSetId, controller, user);
58+
});
59+
60+
this.add(buttons);
61+
this.setBorder(border);
62+
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
63+
}
64+
65+
66+
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package MainPage;
2+
3+
import create_flashcardset_use_case.*;
4+
import dataAccess.*;
5+
import entities.FlashcardSetFactory;
6+
import loginAndSignupUseCase.UserLoginResponseModel;
7+
import loginAndSignupUseCase.loginAndSignupUseCaseScreens.WelcomeScreen;
8+
import search_use_case.*;
9+
10+
import javax.swing.*;
11+
import java.awt.*;
12+
import java.io.IOException;
13+
import java.util.HashMap;
14+
import java.util.Map;
15+
16+
public class HomePage extends JFrame {
17+
18+
UserLoginResponseModel user;
19+
DBGateway gateway;
20+
21+
public HomePage(UserLoginResponseModel user) throws IOException {
22+
super(user.getSignedInUsername() + "'s home page");
23+
24+
this.user = user;
25+
// home page layout
26+
getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
27+
28+
// initialize DBGateway
29+
IFlashcardSetDataAccess flashcardSetDataAccess = new FlashcardSetDataAccess(DBGateway.getFlashcardSetPath());
30+
IFlashcardDataAccess flashcardDataAccess = new FlashcardDataAccess(DBGateway.getFlashcardPath());
31+
IUserDataAccess userDataAccess = new CommonUserDataAccess(DBGateway.getUserPath());
32+
DBGateway gateway = new DBGateway(flashcardDataAccess,
33+
flashcardSetDataAccess, userDataAccess);
34+
35+
// top bar
36+
JPanel topBar = new JPanel();
37+
topBar.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
38+
39+
JButton searchButton = new JButton("Search");
40+
JButton addFlashcardSetButton = new JButton("Add Flashcard Set");
41+
JButton logOff = new JButton("Log Off");
42+
43+
searchButton.addActionListener(e -> {
44+
SearchOutputBoundary presenter = new SearchPresenter();
45+
SearchInteractor interactor = new SearchInteractor(presenter, gateway);
46+
SearchController controller = new SearchController(interactor);
47+
new SearchScreen(controller, gateway, user);
48+
});
49+
50+
addFlashcardSetButton.addActionListener(e -> {
51+
FlashcardSetOutputBoundary presenter = new FlashcardSetPresenter();
52+
FlashcardSetFactory setFactory = new FlashcardSetFactory();
53+
FlashcardSetInteractor interactor = new FlashcardSetInteractor(gateway, presenter,
54+
setFactory);
55+
FlashcardSetController controller = new FlashcardSetController(interactor);
56+
new CreationScreen(controller, user);
57+
58+
});
59+
60+
logOff.addActionListener(e -> {
61+
this.setVisible(false);
62+
this.dispose();
63+
try {
64+
new WelcomeScreen();
65+
} catch (IOException ex) {
66+
throw new RuntimeException(ex);
67+
}
68+
});
69+
70+
topBar.add(searchButton);
71+
topBar.add(addFlashcardSetButton);
72+
topBar.add(logOff);
73+
topBar.setSize(1000,20);
74+
this.add(topBar);
75+
76+
Map<Integer, String[]> idsToFlashcardSetData = user.getFlashcardSets();
77+
78+
int numSets = idsToFlashcardSetData.size();
79+
System.out.println(numSets);
80+
if (numSets==0){
81+
JLabel label = new JLabel("You have no Flashcard Sets!");
82+
label.setHorizontalAlignment(SwingConstants.CENTER);
83+
label.setVerticalAlignment(SwingConstants.TOP);
84+
JPanel labelPanel = new JPanel();
85+
labelPanel.add(label);
86+
this.add(labelPanel);
87+
}
88+
else {
89+
this.add(new ListOfFlashcardSetsDataPanel(idsToFlashcardSetData, gateway, user));
90+
}
91+
this.setSize(1000, 800);
92+
this.setVisible(true);
93+
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
94+
}
95+
96+
97+
private void refresh() {
98+
try {
99+
// UserLoginOutputBoundary presenter = new UserLoginPresenter();
100+
// UserLoginInputBoundary interactor = new UserLoginInteractor(
101+
// gateway, presenter);
102+
// UserLoginController userLoginController = new UserLoginController(interactor);
103+
// setVisible(false);
104+
// dispose();
105+
// new LoginScreen(userLoginController).setVisible(true);
106+
//
107+
// UserLoginResponseModel user = userLoginController.create(user.getSignedInUsername(),
108+
// user.getPassword());
109+
// this.dispose();
110+
new HomePage(user);
111+
} catch (Exception e) {
112+
JOptionPane.showMessageDialog(this, e.getMessage());
113+
}
114+
}
115+
public static void main(String[] args) throws IOException {
116+
Map<Integer, String[]> map = new HashMap<>();
117+
for (int i = 1; i < 4; i++) {
118+
map.put(i, new String[]{"test set " + i, "test description " + i});
119+
}
120+
UserLoginResponseModel user = new UserLoginResponseModel("Lucas", false, map);
121+
new HomePage(user);
122+
}
123+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package MainPage;
2+
3+
4+
import dataAccess.DBGateway;
5+
import loginAndSignupUseCase.UserLoginResponseModel;
6+
7+
import javax.swing.*;
8+
import java.awt.*;
9+
import java.io.IOException;
10+
import java.util.Map;
11+
import java.util.Set;
12+
13+
public class ListOfFlashcardSetsDataPanel extends JPanel {
14+
15+
public ListOfFlashcardSetsDataPanel(Map<Integer, String[]> idsToFlashcardSetData,
16+
DBGateway gateway, UserLoginResponseModel user) {
17+
Set<Integer> flashcardSetIds = idsToFlashcardSetData.keySet();
18+
19+
for (int flashcardSetId : flashcardSetIds) {
20+
String[] data = idsToFlashcardSetData.get(flashcardSetId);
21+
String title = data[0];
22+
String description = data[1];
23+
24+
this.add(new FlashcardSetDataPanel(title, description, flashcardSetId, gateway, user));
25+
}
26+
27+
this.setLayout(new FlowLayout());
28+
this.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
29+
this.setPreferredSize(new Dimension(500, 1000));
30+
}
31+
32+
public static void main(String[] args) throws IOException {
33+
// JFrame f = new JFrame();
34+
//
35+
// Map<Integer, String[]> map = new HashMap<>();
36+
// map.put(0, new String[] {"test set", "for testing study use case"});
37+
// map.put(1, new String[] {"empty test set", "for testing study use case with empty set"});
38+
// DBGateway gateway = new DBGateway(new FlashcardDataAccess(DBGateway.getFlashcardPath()),
39+
// new FlashcardSetDataAccess(DBGateway.getFlashcardSetPath()),
40+
// null);
41+
//
42+
// f.add(new ListOfFlashcardSetsDataPanel(map, gateway, user));
43+
// f.setVisible(true);
44+
// f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
45+
}
46+
}

0 commit comments

Comments
 (0)