Changeset 13094 for lang/java

Show
Ignore:
Timestamp:
06/03/08 01:52:05 (7 years ago)
Author:
daisuke_m
Message:

更新頻度設定を自動調整

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/java/sabotter/trunk/src/jp/xet/eclipse/sabotter/preferences/SabotterPreferencePage.java

    r13078 r13094  
    77import org.eclipse.jface.preference.PreferencePage; 
    88import org.eclipse.swt.SWT; 
    9 import org.eclipse.swt.events.ModifyEvent; 
    10 import org.eclipse.swt.events.ModifyListener; 
    119import org.eclipse.swt.events.SelectionAdapter; 
    1210import org.eclipse.swt.events.SelectionEvent; 
     11import org.eclipse.swt.events.SelectionListener; 
    1312import org.eclipse.swt.layout.GridData; 
    1413import org.eclipse.swt.layout.GridLayout; 
     
    6059        private Spinner spnDirectMessagesInterval; 
    6160         
    62         private ModifyListener intervalListener = new ModifyListener() { 
    63                  
    64                 public void modifyText(ModifyEvent e) { 
    65 //                      double limit = spnAPILimitRate.getSelection(); 
    66 //                      double f = spnTimeLineInterval.getSelection(); 
    67 //                      double r = spnRepliesInterval.getSelection(); 
    68 //                      double d = spnDirectMessagesInterval.getSelection(); 
    69 //                      if (valid(limit, f, r, d)) { 
    70 //                              return; 
    71 //                      } 
    72 //                      Spinner fixed = (Spinner) e.getSource(); 
    73 //                      while (valid(limit, f, r, d) == false) { 
    74 //                              if (fixed.equals(spnAPILimitRate)) { 
    75 //                                      f += 1; 
    76 //                                      r += 1; 
    77 //                                      d += 1; 
    78 //                              } else if (fixed.equals(spnTimeLineInterval)) { 
    79 //                                      r += 1; 
    80 //                                      d += 1; 
    81 //                              } else if (fixed.equals(spnRepliesInterval)) { 
    82 //                                      f += 1; 
    83 //                                      d += 1; 
    84 //                              } else if (fixed.equals(spnDirectMessagesInterval)) { 
    85 //                                      f += 1; 
    86 //                                      r += 1; 
    87 //                              } 
    88 //                      } 
    89 //                       
    90 //                      spnAPILimitRate.setSelection((int) limit); 
    91 //                      spnTimeLineInterval.setSelection((int) f); 
    92 //                      spnRepliesInterval.setSelection((int) r); 
    93 //                      spnDirectMessagesInterval.setSelection((int) d); 
    94                 } 
    95                  
    96                 private boolean valid(double limit, double f, double r, double d) { 
    97                         return limit > calcRate(new double[] { 
    98                                 f, 
    99                                 r, 
    100                                 d 
    101                         }); 
    102                 } 
    103                  
    104                 private double calcRate(double[] intervals) { 
     61        private SelectionListener intervalListener = new SelectionListener() { 
     62                 
     63                public void widgetDefaultSelected(SelectionEvent e) { 
     64                        widgetSelected(e); 
     65                } 
     66                 
     67                public void widgetSelected(SelectionEvent e) { 
     68                        int limit = spnAPILimitRate.getSelection(); 
     69                        int f = spnTimeLineInterval.getSelection(); 
     70                        int r = spnRepliesInterval.getSelection(); 
     71                        int d = spnDirectMessagesInterval.getSelection(); 
     72                        if (valid(limit, f, r, d)) { 
     73                                return; 
     74                        } 
     75                        Spinner fixed = (Spinner) e.getSource(); 
     76                        while (valid(limit, f, r, d) == false) { 
     77                                if (fixed.equals(spnAPILimitRate)) { 
     78                                        if (f < r && f < d) { 
     79                                                f++; 
     80                                        } else if (r < d) { 
     81                                                r++; 
     82                                        } else { 
     83                                                d++; 
     84                                        } 
     85                                } else if (fixed.equals(spnTimeLineInterval)) { 
     86                                        if (60 / f >= limit) { 
     87                                                f++; 
     88                                        } else if (r < d) { 
     89                                                r++; 
     90                                        } else { 
     91                                                d++; 
     92                                        } 
     93                                } else if (fixed.equals(spnRepliesInterval)) { 
     94                                        if (60 / r >= limit) { 
     95                                                r++; 
     96                                        } else if (f < d) { 
     97                                                f++; 
     98                                        } else { 
     99                                                d++; 
     100                                        } 
     101                                } else if (fixed.equals(spnDirectMessagesInterval)) { 
     102                                        if (60 / d >= limit) { 
     103                                                d++; 
     104                                        } else if (f < r) { 
     105                                                f++; 
     106                                        } else { 
     107                                                r++; 
     108                                        } 
     109                                } else { 
     110                                        System.err.println("!!"); 
     111                                } 
     112                        } 
     113                         
     114                        spnAPILimitRate.setSelection(limit); 
     115                        spnTimeLineInterval.setSelection(f); 
     116                        spnRepliesInterval.setSelection(r); 
     117                        spnDirectMessagesInterval.setSelection(d); 
     118                } 
     119                 
     120                private boolean valid(int limit, int... values) { 
     121                        return limit > calcRate(values); 
     122                } 
     123                 
     124                private double calcRate(int[] intervals) { 
    105125                        double result = 0; 
    106                         for (double interval : intervals) { 
     126                        for (int interval : intervals) { 
    107127                                result += 60 / interval; 
    108128                        } 
    109                         System.out.println(intervals.toString() + " " + result); 
    110129                        return result; 
    111130                } 
     
    157176                // TODO 外部化など 
    158177                Group interval = new Group(composite, SWT.NONE); 
    159                 interval.setText("Access Interval (times/min)"); 
    160                 interval.setLayout(new GridLayout(2, false)); 
     178                interval.setText("Access Interval"); 
     179                interval.setLayout(new GridLayout(3, false)); 
    161180                interval.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
    162181                 
    163182                label = new Label(interval, SWT.NONE); 
    164                 label.setText("API Limit Acces Rate"); 
     183                label.setText("API Limit Acces Rate:"); 
    165184                spnAPILimitRate = new Spinner(interval, SWT.BORDER); 
    166185                spnAPILimitRate.setMinimum(10); 
    167                  
    168                 label = new Label(interval, SWT.NONE); 
    169                 label.setText("FriendTimeLine"); 
     186                spnAPILimitRate.setMaximum(99); 
     187                spnAPILimitRate.setIncrement(1); 
     188                label = new Label(interval, SWT.NONE); 
     189                label.setText("time(s) / hour."); 
     190                 
     191                label = new Label(interval, SWT.NONE); 
     192                label.setText("FriendTimeLine: every"); 
    170193                spnTimeLineInterval = new Spinner(interval, SWT.BORDER); 
    171194                spnTimeLineInterval.setMinimum(1); 
    172                  
    173                 label = new Label(interval, SWT.NONE); 
    174                 label.setText("Reply"); 
     195                spnAPILimitRate.setMaximum(99); 
     196                spnAPILimitRate.setIncrement(1); 
     197                label = new Label(interval, SWT.NONE); 
     198                label.setText("min."); 
     199                 
     200                label = new Label(interval, SWT.NONE); 
     201                label.setText("Replies: every"); 
    175202                spnRepliesInterval = new Spinner(interval, SWT.BORDER); 
    176203                spnRepliesInterval.setMinimum(1); 
    177                  
    178                 label = new Label(interval, SWT.NONE); 
    179                 label.setText("DM"); 
     204                spnAPILimitRate.setMaximum(99); 
     205                spnAPILimitRate.setIncrement(1); 
     206                label = new Label(interval, SWT.NONE); 
     207                label.setText("min."); 
     208                 
     209                label = new Label(interval, SWT.NONE); 
     210                label.setText("DirectMessages: every"); 
    180211                spnDirectMessagesInterval = new Spinner(interval, SWT.BORDER); 
    181212                spnDirectMessagesInterval.setMinimum(1); 
     213                spnAPILimitRate.setMaximum(99); 
     214                spnAPILimitRate.setIncrement(1); 
     215                label = new Label(interval, SWT.NONE); 
     216                label.setText("min."); 
    182217                 
    183218                Group other = new Group(composite, SWT.NONE); 
     
    309344                 
    310345                spnAPILimitRate.setSelection(ps.getInt(PreferenceKeys.API_LIMIT_RATE)); 
    311                 spnAPILimitRate.addModifyListener(intervalListener); 
     346                spnAPILimitRate.addSelectionListener(intervalListener); 
    312347                spnTimeLineInterval.setSelection(ps.getInt(PreferenceKeys.INTERVAL_FRIEND_TIMELINE)); 
    313                 spnTimeLineInterval.addModifyListener(intervalListener); 
     348                spnTimeLineInterval.addSelectionListener(intervalListener); 
    314349                spnRepliesInterval.setSelection(ps.getInt(PreferenceKeys.INTERVAL_REPLIES)); 
    315                 spnRepliesInterval.addModifyListener(intervalListener); 
     350                spnRepliesInterval.addSelectionListener(intervalListener); 
    316351                spnDirectMessagesInterval.setSelection(ps.getInt(PreferenceKeys.INTERVAL_DIRECT_MESSAGES)); 
    317                 spnDirectMessagesInterval.addModifyListener(intervalListener); 
     352                spnDirectMessagesInterval.addSelectionListener(intervalListener); 
    318353        } 
    319354