@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);
   }
 }
Example #7
0
 /**
  * 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);
   }
 }
Example #8
0
  /**
   * 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();
  }
Example #10
0
  /** 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);
   }
 }
Example #12
0
  /**
   * 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);
   }
 }
Example #14
0
 public void updateDayView() {
   dayView.updateDay();
   day.setFocusable(true);
 }
Example #15
0
  /** 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);
   }
 }
Example #18
0
  /** 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);
  }