📄 main.java
字号:
} ); calMenu.add ( item ); item = new JMenuItem ( "Subscribe to Remote..." ); item.setAccelerator ( KeyStroke.getKeyStroke ( 'S', Toolkit .getDefaultToolkit ().getMenuShortcutKeyMask () ) ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { new EditRemoteCalendarWindow ( parent, dataRepository, null, getDataDirectory () ); } } ); calMenu.add ( item ); calMenu.addSeparator (); JMenu sharedCalMenu = new JMenu ( "Find Shared Calendars" ); SharedCalendars.updateSharedCalendars ( sharedCalMenu ); calMenu.add ( sharedCalMenu ); bar.add ( calMenu ); // Add help bar to right end of menubar bar.add ( Box.createHorizontalGlue () ); JMenu helpMenu = new JMenu ( "Help" ); item = new JMenuItem ( "About..." ); item.setAccelerator ( KeyStroke.getKeyStroke ( 'A', Toolkit .getDefaultToolkit ().getMenuShortcutKeyMask () ) ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { showAbout (); } } ); helpMenu.add ( item ); item = new JMenuItem ( "View ChangeLog..." ); item.setAccelerator ( KeyStroke.getKeyStroke ( 'C', Toolkit .getDefaultToolkit ().getMenuShortcutKeyMask () ) ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { viewChangeLog (); } } ); helpMenu.add ( item ); item = new JMenuItem ( "View License..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { viewLicense (); } } ); helpMenu.add ( item ); item = new JMenuItem ( "Go to k5nCal Home Page..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { try { BrowserLauncher bl = new BrowserLauncher (); bl.openURLinBrowser ( APP_URL ); } catch ( Exception e1 ) { System.err.println ( "Error starting web browser" + ": " + e1.getMessage () ); e1.printStackTrace (); } } } ); helpMenu.add ( item ); item = new JMenuItem ( "Donate to Support k5nCal..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { try { BrowserLauncher bl = new BrowserLauncher (); bl.openURLinBrowser ( DONATE_URL ); } catch ( Exception e1 ) { System.err.println ( "Error starting web browser" + ": " + e1.getMessage () ); e1.printStackTrace (); } } } ); helpMenu.add ( item ); item = new JMenuItem ( "Report Bug..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { try { BrowserLauncher bl = new BrowserLauncher (); bl.openURLinBrowser ( REPORT_BUG_URL ); } catch ( Exception e1 ) { System.err.println ( "Error starting web browser" + ": " + e1.getMessage () ); e1.printStackTrace (); } } } ); helpMenu.add ( item ); item = new JMenuItem ( "Get Support..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { try { BrowserLauncher bl = new BrowserLauncher (); bl.openURLinBrowser ( SUPPORT_REQUEST_URL ); } catch ( Exception e1 ) { System.err.println ( "Error starting web browser" + ": " + e1.getMessage () ); e1.printStackTrace (); } } } ); helpMenu.add ( item ); item = new JMenuItem ( "Request Feature..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { try { BrowserLauncher bl = new BrowserLauncher (); bl.openURLinBrowser ( REQUEST_FEATURE_URL ); } catch ( Exception e1 ) { System.err.println ( "Error starting web browser" + ": " + e1.getMessage () ); e1.printStackTrace (); } } } ); helpMenu.add ( item ); helpMenu.addSeparator (); item = new JMenuItem ( "3rd Party Components..." ); item.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { new ThirdPartyDialog ( parent ); } } ); helpMenu.add ( item ); bar.add ( helpMenu ); return bar; } /** * Quit the k5nCal application (and save the current calendar states). */ public void quit () { saveCalendars ( getDataDirectory () ); System.exit ( 0 ); } /** * Show the application preferences dialog window. */ public void showPreferences () { // Note: we can re-use this same JDialog window. However, the hidden window // will not receive the L&F updates while the app is running. So, we just // create a new one to avoid this issue. new PreferencesWindow ( parent, dataRepository ); } /** * Show the k5nCal About dialog. */ public void showAbout () { // Get application icon URL url = getResource ( APP_ICON ); ImageIcon icon = new ImageIcon ( url, "k5nCal" ); // Get java version String javaVersion = System.getProperty ( "java.version" ); if ( javaVersion == null ) javaVersion = "Unknown"; JOptionPane.showMessageDialog ( parent, "k5nCal " + ( version == null ? "Unknown Version" : version ) + "\n\n" + "Java Version" + ": " + javaVersion + "\n\n" + "Developed by k5n.us" + "\n\nhttp://www.k5n.us", "About k5nCal", JOptionPane.INFORMATION_MESSAGE, icon ); } JToolBar createToolBar () { JToolBar toolbar = new JToolBar (); newButton = makeNavigationButton ( "New24.gif", "new", "Add new event", ADD_EVENT_LABEL ); newButton.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { // Make sure there is at least one local calendar. boolean foundLocal = false; for ( int i = 0; i < dataRepository.getCalendars ().size (); i++ ) { Calendar c = dataRepository.getCalendars ().elementAt ( i ); if ( c.getType () == Calendar.LOCAL_CALENDAR ) foundLocal = true; } if ( !foundLocal ) { showError ( "You must create a local\ncalendar to add a\nnew event." ); } else { // See if they have selected a local calendar from the // calendar list Calendar selectedCalendar = null; int selCalInd = calendarJList.getSelectedIndex (); if ( selCalInd >= 0 ) { selectedCalendar = dataRepository.getCalendars ().elementAt ( selCalInd ); if ( selectedCalendar.getType () != Calendar.LOCAL_CALENDAR ) selectedCalendar = null; // don't allow adding to // remote cals } Date now = Date.getCurrentDateTime ( "DTSTART" ); now.setMinute ( 0 ); new EditEventWindow ( parent, dataRepository, now, selectedCalendar ); } } } ); toolbar.add ( newButton ); editButton = makeNavigationButton ( "Edit24.gif", "edit", "Edit selected event", EDIT_EVENT_LABEL ); toolbar.add ( editButton ); editButton.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { // Get selected item and open edit window EventInstance eventInstance = calendarPanel.getSelectedEvent (); if ( eventInstance != null ) { // NOTE: edit window does not yet support complicated // recurrence // rules. SingleEvent se = (SingleEvent) eventInstance; if ( se.getEvent ().getRrule () != null ) { new EditEventWindow ( parent, dataRepository, se.getEvent (), se .getCalendar () ); } else { new EditEventWindow ( parent, dataRepository, se.getEvent (), se .getCalendar () ); } } } } ); deleteButton = makeNavigationButton ( "Delete24.gif", "delete", "Delete selected event", DELETE_EVENT_LABEL ); toolbar.add ( deleteButton ); deleteButton.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { // Get selected item and open edit window EventInstance eventInstance = calendarPanel.getSelectedEvent (); if ( eventInstance != null ) { SingleEvent se = (SingleEvent) eventInstance; if ( se.getEvent ().getRrule () != null ) { // TODO: support deleting single occurrence, which will // add an // exception to the RRULE in the event. if ( JOptionPane.showConfirmDialog ( parent, "Are you sure you want\nto delete all occurreces of the\n" + "following repeating event?" + "\n\n" + se.getTitle () + "\n\n" + "This will delete ALL events\nin this series.", "Confirm Delete", JOptionPane.YES_NO_OPTION ) == 0 ) { try { dataRepository.deleteEvent ( se.getCalendar (), se.getEvent () ); } catch ( IOException e1 ) { showError ( "Error deleting." ); e1.printStackTrace (); } } } else { if ( JOptionPane.showConfirmDialog ( parent, "Are you sure you want\nto delete the following event?" + "\n\n" + se.getTitle (), "Confirm Delete", JOptionPane.YES_NO_OPTION ) == 0 ) { try { dataRepository.deleteEvent ( se.getCalendar (), se.getEvent () ); } catch ( IOException e1 ) { showError ( "Error deleting." ); e1.printStackTrace (); } } } } } } ); toolbar.addSeparator (); largerButton = makeNavigationButton ( "LargerFont24.png", "Increase Font Size", "Increase font size", LARGER_FONT_LABEL ); toolbar.add ( largerButton ); largerButton.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { int oldOffset = prefs.getDisplayFontSize (); if ( oldOffset < 4 ) prefs.setDisplayFontSize ( oldOffset + 2 ); displaySettingsChanged (); } } ); smallerButton = makeNavigationButton ( "SmallerFont24.png", "Decrease font size", "Decrease font size", SMALLER_FONT_LABEL ); toolbar.add ( smallerButton ); smallerButton.addActionListener ( new ActionListener () { public void actionPerformed ( ActionEvent event ) { int oldOffset = prefs.getDisplayFontSize (); if ( oldOffset > -4 ) prefs.setDisplayFontSize ( oldOffset - 2 ); displaySettingsChanged (); } } ); return toolbar; } /** * Update the toolbar. You can only modify local calendars (for now, at * least), so unless an event from a local calendar was selected, the edit and * delete buttons should be disabled. */ void updateToolbar () { boolean canEdit = false; boolean selected = false; EventInstance eventInstance = calendarPanel.getSelectedEvent (); selected = ( eventInstance != null ); if ( selected && eventInstance instanceof SingleEvent ) { SingleEvent se = (SingleEvent) eventInstance; canEdit = ( se.getCalendar ().getType () == Calendar.LOCAL_CALENDAR ) || ( se.getCalendar ().getType () == Calendar.REMOTE_ICAL_CALENDAR && se .getCalendar ().getCanWrite () ); } editButton.setEnabled ( selected && canEdit ); deleteButton.setEnabled ( selected && canEdit ); smallerButton.setEnabled ( prefs.getDisplayFontSize () > -4 ); largerButton.setEnabled ( prefs.getDisplayFontSize () < 4 ); // Show text? if ( prefs.getToolbarIconText () ) { this.newButton.setText ( ADD_EVENT_LABEL ); this.editButton.setText ( EDIT_EVENT_LABEL ); this.deleteButton.setText ( DELETE_EVENT_LABEL ); this.largerButton.setText ( LARGER_FONT_LABEL ); this.smallerButton.setText ( SMALLER_FONT_LABEL ); } else { this.newButton.setText ( null ); this.editButton.setText ( null ); this.deleteButton.setText ( null ); this.largerButton.setText ( null ); this.smallerButton.setText ( null ); } } /** * Create the file selection area on the top side of the window. This will * include a split pane where the left will allow navigation and selection of * dates and the right will allow the selection of a specific entry. * * @return */ protected JPanel createCalendarSelectionPanel ( Vector calendars ) { JPanel topPanel = new JPanel (); topPanel.setLayout ( new BorderLayout () ); this.calendarJList = new JListWithCheckBoxes ( new Vector<Object> () ); updateCalendarJList (); this.calendarJList .addListItemChangeListener ( new ListItemChangeListener () { public void itemSelected ( int ind ) { dataRepository.getCalendars ().elementAt ( ind ) .setSelected ( true );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -