@Override public void onClick(View v) { if (v instanceof DayView) { DayView dayView = (DayView) v; mcv.onDateClicked(dayView.getDate(), !dayView.isChecked()); } }
public MonthView(@NonNull MaterialCalendarView view, CalendarDay month, int firstDayOfWeek) { super(view.getContext()); this.mcv = view; this.month = month; this.firstDayOfWeek = firstDayOfWeek; setClipChildren(false); setClipToPadding(false); Calendar calendar = resetAndGetWorkingCalendar(); for (int i = 0; i < DEFAULT_DAYS_IN_WEEK; i++) { WeekDayView weekDayView = new WeekDayView(getContext(), CalendarUtils.getDayOfWeek(calendar)); weekDayViews.add(weekDayView); addView(weekDayView); calendar.add(DATE, 1); } calendar = resetAndGetWorkingCalendar(); for (int r = 0; r < DEFAULT_MAX_WEEKS; r++) { for (int i = 0; i < DEFAULT_DAYS_IN_WEEK; i++) { CalendarDay day = CalendarDay.from(calendar); DayView dayView = new DayView(getContext(), day); dayView.setOnClickListener(this); monthDayViews.add(dayView); addView(dayView, new LayoutParams()); calendar.add(DATE, 1); } } }
public void setSelectedDates(Collection<CalendarDay> dates) { for (DayView dayView : monthDayViews) { CalendarDay day = dayView.getDate(); dayView.setChecked(dates != null && dates.contains(day)); } postInvalidate(); }
public View makeView() { DayView view = new DayView(this); view.setId(VIEW_ID); view.setLayoutParams( new ViewSwitcher.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); view.setSelectedDay(mSelectedDay); return view; }
private void updateUi() { int ourMonth = month.getMonth(); for (DayView dayView : monthDayViews) { CalendarDay day = dayView.getDate(); dayView.setupSelection( showOtherDates, day.isInRange(minDate, maxDate), day.getMonth() == ourMonth); } postInvalidate(); }
private void invalidateDecorators() { final DayViewFacade facadeAccumulator = new DayViewFacade(); for (DayView dayView : monthDayViews) { facadeAccumulator.reset(); for (DecoratorResult result : decoratorResults) { if (result.decorator.shouldDecorate(dayView.getDate())) { result.result.applyTo(facadeAccumulator); } } dayView.applyFacade(facadeAccumulator); } }
/** * Called when there is a mouse event. Updates the mini-calendar. * * @param e The mouse event generated. */ public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2 && !e.getComponent().getName().trim().equals("")) { viewChanger.show(center, DAY); int s = Integer.parseInt(e.getComponent().getName()); mview.updateSelectedDay(s); dayView.updateDay(); highlightToday(s); } if (!e.getComponent().getName().trim().equals("")) { int s = Integer.parseInt(e.getComponent().getName()); mview.updateSelectedDay(s); dayView.updateDay(); highlightToday(s); } }
/** * A method to update the current month. Sets the variable that controls the month and updates the * text. * * @param newMonth an integer value between 0 and 11. */ public void updateMonth(int newMonth) { pastMonthOffset = currentMonthOffset; currentMonthOffset = CakeCal.getDayOfWeek(new SimpleDate((newMonth), 1, currentYear)); miniDays[(currentDay - 1) + pastMonthOffset].setForeground(Color.black); currentMonth = newMonth; miniCalTitle.setText(curMonths[currentMonth - 1] + ", " + currentYear); events = calendar.getEvents( Period.parse( currentYear + "." + currentMonth + ".1:00.00-" + currentYear + "." + currentMonth + "." + curMonths[currentMonth - 1] + ":24.00")); panelEvent.update(); if (currentDay > (CakeCal.getMonths(currentYear))[currentMonth - 1]) { currentDay = (CakeCal.getMonths(currentYear))[currentMonth - 1]; } updateDays(); mview.updateMonth(); dayView.updateDay(); weekView.updateWeek(); this.updateDays(); }
public void setFirstDayOfWeek(int dayOfWeek) { this.firstDayOfWeek = dayOfWeek; Calendar calendar = resetAndGetWorkingCalendar(); calendar.set(DAY_OF_WEEK, dayOfWeek); for (WeekDayView dayView : weekDayViews) { dayView.setDayOfWeek(calendar); calendar.add(DATE, 1); } calendar = resetAndGetWorkingCalendar(); for (DayView dayView : monthDayViews) { CalendarDay day = CalendarDay.from(calendar); dayView.setDay(day); calendar.add(DATE, 1); } updateUi(); }
/** Open a file. Called when user goes to File -> Open */ public void openFile() { openState = true; JFileChooser chooser = new JFileChooser(); chooser.addChoosableFileFilter(new CakeFileChooser()); chooser.showOpenDialog(window); File f = chooser.getSelectedFile(); if (f == null) { return; } calendar.loadCal(f.getPath()); calendar.getSettings().setFilename(f.getPath()); this.updateCurrentEvents(); this.updateDays(); mview.updateDays(); dayView.updateDay(); }
public void setDayFormatter(DayFormatter formatter) { for (DayView dayView : monthDayViews) { dayView.setDayFormatter(formatter); } }
/** * Listens for an action. Takes the appropriate action depending on what was generated. * * @param e The action event that is generated */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand() == ">>") { updateYear(currentYear + 1); mview.updateYear(); dayView.updateDay(); } else if (e.getActionCommand() == "<<") { if (currentYear <= 1) { JOptionPane.showMessageDialog(window, "Sorry, you can't go back that far!"); return; } updateYear(currentYear - 1); mview.updateYear(); dayView.updateDay(); } else if (e.getActionCommand() == ">") { if (currentMonth == 12) updateMonth(1); else updateMonth(currentMonth + 1); mview.updateMonth(); dayView.updateDay(); } else if (e.getActionCommand() == "<") { if (currentMonth == 1) updateMonth(12); else updateMonth(currentMonth - 1); mview.updateMonth(); dayView.updateDay(); } else if (e.getActionCommand() == "Today") { updateMonth(TODAYMONTH); updateYear(TODAYYEAR); mview.updateMonth(); mview.updateYear(); mview.updateSelectedDay(TODAYDAY); dayView.updateDay(); highlightToday(TODAYDAY); } else if (e.getActionCommand() == "Day") { dayView.updateDay(); } else if (e.getActionCommand() == "YYYY") { String yearString = yearField.getText(); int year = 0; try { // Getting the text field input and checking if it's integer! year = Integer.parseInt(yearString); } catch (NumberFormatException ex) { System.err.println(ex); } // If the user's input is not if (year == 0) { JOptionPane.showMessageDialog( window, "Your input value is incorrect! Please, enter an integer value between 1 and 9999!"); return; } else { updateYear(year); mview.updateYear(); dayView.updateDay(); } } else switchTopRightCard("Add Event"); viewChanger.show(center, (String) e.getActionCommand()); }
public void setSelectionEnabled(boolean selectionEnabled) { for (DayView dayView : monthDayViews) { dayView.setOnClickListener(selectionEnabled ? this : null); dayView.setClickable(selectionEnabled); } }
public void updateDayView() { dayView.updateDay(); day.setFocusable(true); }
/** Updates the days, and how they are viewed. */ public void updateDays() { curMonths = CakeCal.getMonths(currentYear); // create the days in the particular month for (int i = 0; i < 42; i++) { if (i >= currentMonthOffset && i < curMonths[currentMonth - 1] + currentMonthOffset) { miniDays[i].setText(i - currentMonthOffset + 1 + ""); miniDays[i].setName(i - currentMonthOffset + 1 + ""); if (mview.hasEvents(new SimpleDate(currentMonth, i, currentYear)) == true) { miniDays[i].setToolTipText("You have events scheduled here."); } else { miniDays[i].setToolTipText("No events have been scheduled"); } Border line = BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK); TitledBorder title = BorderFactory.createTitledBorder(line); miniDays[currentDay + (currentMonthOffset - 1)].setBorder(title); miniDays[currentDay + (currentMonthOffset - 1)].setFont(new Font("Verdana", Font.BOLD, 12)); } else { miniDays[i].setToolTipText(null); miniDays[i].setText(" "); miniDays[i].setName(" "); } if (i == currentDay + currentMonthOffset - 1) { miniDays[i].setForeground(Color.red); } // Setting properly (one-digit) alignment in the mini calendar if (miniDays[i].getText().length() == 1) { String s = " " + miniDays[i].getText(); miniDays[i].setText(s); } float[] n = new float[3]; Color.RGBtoHSB(212, 208, 200, n); miniDays[i].setOpaque(true); miniDays[i].setBackground(Color.WHITE); miniDays[i].setForeground(Color.BLACK); miniDays[i].setFont(null); Border line = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); TitledBorder title = BorderFactory.createTitledBorder(line); miniDays[i].setBorder(title); if (currentMonth == TODAYMONTH && currentYear == TODAYYEAR) { miniDays[(TODAYDAY - 1) + currentMonthOffset].setForeground(Color.RED); miniDays[(TODAYDAY - 1) + currentMonthOffset].setFont(new Font("Verdana", Font.BOLD, 12)); } } if (DayToErase > 0) { miniDays[DayToErase].setForeground(Color.black); DayToErase = -1; } // This var holds the number of dates of the previous month int previousMonthDates = curMonths[((currentMonth - 2) + 12) % 12]; float[] n = new float[3]; Color.RGBtoHSB(200, 200, 200, n); for (int k = currentMonthOffset - 1; k >= 0; k--) { miniDays[k].setText(previousMonthDates + ""); miniDays[k].setForeground(Color.GRAY); miniDays[k].setBackground(Color.getHSBColor(n[0], n[1], n[2])); previousMonthDates--; } int count = 1; for (int k = (curMonths[currentMonth - 1] + currentMonthOffset); k < 42; k++) { miniDays[k].setText(count + ""); miniDays[k].setForeground(Color.GRAY); miniDays[k].setBackground(Color.getHSBColor(n[0], n[1], n[2])); count++; } String shortDate = " " + Cakeday.MONTHS[currentMonth - 1]; title.setTitle(shortDate); bottomRight.setBorder(title); bottomRight.repaint(); // ------------END OF---TITLED BORDER------------- // -------Updates the year in the JTextField in the mini calendar------// yearField.setText("" + currentYear); // -------Updates the year in the JTextField in the mini calendar------// smallMonth.repaint(); weekView.updateWeek(); dayView.updateDay(); miniMonth.repaint(); }
public void setSelectionColor(int color) { for (DayView dayView : monthDayViews) { dayView.setSelectionColor(color); } }
public void setDateTextAppearance(int taId) { for (DayView dayView : monthDayViews) { dayView.setTextAppearance(getContext(), taId); } }
/** Initialize the three panels which will switch out in the center */ private void initializeCenter() { viewChanger = new CardLayout(); // initialize the 3 different JPanels which go in the center center = new JPanel(viewChanger); month = new JPanel(); mview.addComponentsToPane(month); // JPanel weekTitles = new JPanel( new GridLayout(7,7)); smallMonth = new JPanel(new GridLayout(7, 7)); String weekDay[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; JLabel label = new JLabel(); for (int i = 0; i < 7; i++) { label = new JLabel(weekDay[i]); label.setHorizontalAlignment(JLabel.CENTER); label.setFont(new Font("Verdana", Font.BOLD, 12)); smallMonth.add(label); } // smallMonth = new JPanel( new GridLayout( 6, 7 )); for (int i = 0; i < 42; i++) { if (i >= currentMonthOffset && i < curMonths[currentMonth - 1] + currentMonthOffset) { miniDays[i] = new JLabel(i - currentMonthOffset + 1 + ""); miniDays[i].setName(i - currentMonthOffset + 1 + ""); miniDays[i].addMouseListener((MouseListener) this); miniDays[i].setHorizontalAlignment(JLabel.CENTER); if (mview.hasEvents(new SimpleDate(currentMonth, i, currentYear)) == true) { miniDays[i].setToolTipText("You have events scheduled here."); } else { miniDays[i].setToolTipText("No Events have been scheduled."); } if (i == currentDay + currentMonthOffset - 1) { miniDays[i].setFont(new Font("Verdana", Font.BOLD, 12)); miniDays[i].setOpaque(true); Border line = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); TitledBorder title = BorderFactory.createTitledBorder(line); miniDays[i].setBorder(title); } } else { miniDays[i] = new JLabel(""); miniDays[i].setName(""); miniDays[i].addMouseListener((MouseListener) this); miniDays[i].setHorizontalAlignment(JLabel.CENTER); } smallMonth.add(miniDays[i]); smallMonth.setBorder(miniTitle); } for (int j = 0; j < 42; j++) { Border line = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); TitledBorder title = BorderFactory.createTitledBorder(line); miniDays[j].setBorder(title); } int count = 1; for (int k = curMonths[currentMonth - 1]; k < 42; k++) { miniDays[k].setName(count++ + ""); } week = weekView.getPanel(); day = dayView.getPane(); day.setFocusable(true); center.add(week, WEEK); center.add(day, DAY); center.add(month, MONTH); }