1 19 20 package org.lucane.applications.todolist.gui; 21 22 import java.awt.BorderLayout ; 23 import java.awt.Dimension ; 24 import java.awt.event.ActionEvent ; 25 import java.awt.event.ActionListener ; 26 import java.awt.event.MouseAdapter ; 27 import java.awt.event.MouseEvent ; 28 import java.util.ArrayList ; 29 import java.util.HashMap ; 30 import java.util.Iterator ; 31 32 import javax.swing.JButton ; 33 import javax.swing.JLabel ; 34 import javax.swing.JPanel ; 35 import javax.swing.JScrollPane ; 36 import javax.swing.JSplitPane ; 37 import javax.swing.JToolBar ; 38 import javax.swing.event.ListSelectionEvent ; 39 import javax.swing.event.ListSelectionListener ; 40 41 import org.lucane.applications.todolist.Todolist; 42 import org.lucane.applications.todolist.TodolistItem; 43 import org.lucane.applications.todolist.TodolistPlugin; 44 import org.lucane.applications.todolist.io.IO; 45 import org.lucane.client.Client; 46 import org.lucane.client.acl.AclEditor; 47 import org.lucane.client.widgets.DialogBox; 48 import org.lucane.client.widgets.HTMLEditor; 49 import org.lucane.client.widgets.ManagedWindow; 50 51 public class MainFrame extends ManagedWindow { 52 private JToolBar jtbToolBar; 53 54 private TodolistTable jtTodolists; 55 private JSplitPane jspList; 56 private HTMLEditor htmledListComment; 57 private JPanel jpListView; 58 59 private TodolistItemTable jtTodolistItems; 60 private JSplitPane jspItem; 61 private HTMLEditor htmledListItemComment; 62 private JPanel jpItemView; 63 64 private JSplitPane jspMain; 65 66 private JButton jbCreateTodolist; 67 private JButton jbEditTodolist; 68 private JButton jbEditAcl; 69 private JButton jbDeleteTodolist; 70 private JButton jbCreateItem; 71 private JButton jbEditItem; 72 private JButton jbDeleteItem; 73 74 private MainFrame mainFrame; 75 76 private TodolistPlugin plugin; 77 78 public MainFrame(TodolistPlugin plugin) { 79 super(plugin, plugin.tr("MainInterface.title")); 80 this.setExitPluginOnClose(true); 81 this.plugin=plugin; 82 this.setName("MainFrame"); 83 mainFrame=this; 84 TodolistItemTableModel.setColumnsNames(new String [] { 85 plugin.tr("MainInterface.items.name"), 86 plugin.tr("MainInterface.items.priority"), 87 plugin.tr("MainInterface.items.complete"), 88 plugin.tr("MainInterface.items.estimatedStart"), 89 plugin.tr("MainInterface.items.estimatedEnd"), 90 plugin.tr("MainInterface.items.start"), 91 plugin.tr("MainInterface.items.end") }); 92 TodolistTableModel.setColumnsNames(new String [] { 93 plugin.tr("MainInterface.lists.name") }); 94 HashMap tmphm = new HashMap (); 95 tmphm.put("view_all", plugin.tr("MainInterface.lists.view_all")); 96 TodolistRenderer.setFiltersNames(tmphm); 97 TodolistItem.setPriorityLabels(new String [] { 98 plugin.tr("TodoListItem.priority.low"), 99 plugin.tr("TodoListItem.priority.medium"), 100 plugin.tr("TodoListItem.priority.high") }); 101 TodolistItem.setCompleteLabels(new String [] { 102 plugin.tr("TodoListItem.complete.false"), 103 plugin.tr("TodoListItem.complete.true") }); 104 init(); 105 } 106 107 private void init(){ 108 setPreferredSize(new Dimension (780,560)); 109 110 jtTodolists = new TodolistTable(); 111 jtTodolists.addListSelectionListener(new ListSelectionListener () { 112 public void valueChanged(ListSelectionEvent lse) { 113 refreshListToolbar(); 114 refreshTodolistItems(); 115 } 116 }); 117 jtTodolists.addMouseListener(new MouseAdapter () { 118 public void mouseClicked(MouseEvent e) { 119 int row = jtTodolists.rowAtPoint(e.getPoint()); 120 if(e.getClickCount()==2 && row>=0) { 121 Object obj = ((TodolistTableModel)jtTodolists.getModel()).getValueAt(row); 122 if (obj instanceof Todolist) { 123 Todolist tl = (Todolist)obj; 124 if (tl==null) { 125 htmledListComment.clear(); 126 } else if(!tl.isReadOnly()){ 127 new TodolistDialog(plugin, mainFrame, tl).show(); 128 } 129 } 130 } 131 } 132 }); 133 134 htmledListComment = new HTMLEditor(); 135 htmledListComment.setEditable(false); 136 htmledListComment.setToolbarVisible(false); 137 jpListView = new JPanel (new BorderLayout ()); 138 jpListView.add(new JLabel (plugin.tr("MainInterface.comment")), BorderLayout.NORTH); 139 jpListView.add(htmledListComment, BorderLayout.CENTER); 140 jspList = new JSplitPane (JSplitPane.VERTICAL_SPLIT, new JScrollPane (jtTodolists), jpListView); 141 jspList.setResizeWeight(.60); 142 jspList.setName("jspList"); 143 144 jtTodolistItems = new TodolistItemTable(); 145 146 jtTodolistItems.addListSelectionListener(new ListSelectionListener () { 147 public void valueChanged(ListSelectionEvent lse) { 148 TodolistItem tli = jtTodolistItems.getSelectedTodolistItem(); 149 refreshItemToolbar(); 150 if (tli!=null) { 151 htmledListItemComment.setText(tli.getComment()); 152 } else { 153 htmledListItemComment.clear(); 154 } 155 } 156 }); 157 158 jtTodolistItems.addMouseListener(new MouseAdapter () { 159 public void mouseClicked(MouseEvent e) { 160 int row = jtTodolistItems.rowAtPoint(e.getPoint()); 161 if(e.getClickCount()==2 && row>=0) { 162 TodolistItem tli = (TodolistItem)((TodolistItemTableModel)jtTodolistItems.getModel()).getValueAt(row); 163 if (tli!=null) { 164 Object obj = jtTodolists.getSelectedTodolist(); 165 if (obj instanceof Todolist) { 166 Todolist tl = (Todolist)obj; 167 if(tl != null && !tl.isReadOnly()){ 168 new TodolistItemDialog(plugin, mainFrame, tli).show(); 169 } 170 } 171 } else { 172 htmledListItemComment.clear(); 173 } 174 } 175 } 176 }); 177 178 jpItemView = new JPanel (); 179 jpItemView.setLayout(new BorderLayout ()); 180 jpItemView.add(new JLabel (plugin.tr("MainInterface.comment")), BorderLayout.NORTH); 181 htmledListItemComment = new HTMLEditor(); 182 htmledListItemComment.setEditable(false); 183 htmledListItemComment.setToolbarVisible(false); 184 jpItemView.add(htmledListItemComment, BorderLayout.CENTER); 185 186 jspItem = new JSplitPane (JSplitPane.VERTICAL_SPLIT, new JScrollPane (jtTodolistItems), jpItemView); 187 jspItem.setResizeWeight(.60); 188 jspItem.setName("jspItem"); 189 190 jspMain = new JSplitPane (JSplitPane.HORIZONTAL_SPLIT, jspList, jspItem); 191 jspMain.setResizeWeight(.20); 192 jspMain.setName("jspMain"); 193 getContentPane().setLayout(new BorderLayout ()); 194 getContentPane().add(jspMain, BorderLayout.CENTER); 195 196 jtbToolBar = new JToolBar (); 197 198 jbCreateTodolist = new JButton (); 199 jbCreateTodolist.setToolTipText(plugin.tr("MainInterface.createList")); 200 jbCreateTodolist.setIcon(plugin.getImageIcon("create_list.png")); 201 202 jbDeleteTodolist = new JButton (); 203 jbDeleteTodolist.setToolTipText(plugin.tr("MainInterface.deleteList")); 204 jbDeleteTodolist.setIcon(plugin.getImageIcon("delete_list.png")); 205 206 jbEditTodolist = new JButton (); 207 jbEditTodolist.setToolTipText(plugin.tr("MainInterface.editList")); 208 jbEditTodolist.setIcon(plugin.getImageIcon("edit_list.png")); 209 210 jbEditAcl = new JButton (); 211 jbEditAcl.setToolTipText(plugin.tr("MainInterface.editAcl")); 212 jbEditAcl.setIcon(plugin.getImageIcon("edit_acl.png")); 213 214 jbCreateItem = new JButton (); 215 jbCreateItem.setToolTipText(plugin.tr("MainInterface.createItem")); 216 jbCreateItem.setIcon(plugin.getImageIcon("create_item.png")); 217 218 jbDeleteItem = new JButton (); 219 jbDeleteItem.setToolTipText(plugin.tr("MainInterface.deleteItem")); 220 jbDeleteItem.setIcon(plugin.getImageIcon("delete_item.png")); 221 222 jbEditItem = new JButton (); 223 jbEditItem.setToolTipText(plugin.tr("MainInterface.editItem")); 224 jbEditItem.setIcon(plugin.getImageIcon("edit_item.png")); 225 226 jbCreateTodolist.addActionListener(new ActionListener () { 227 public void actionPerformed(ActionEvent ae) { 228 new TodolistDialog(plugin, mainFrame).show(); 230 } 231 }); 232 jtbToolBar.add(jbCreateTodolist); 233 234 jbDeleteTodolist.addActionListener(new ActionListener () { 235 public void actionPerformed(ActionEvent ae) { 236 Object obj = jtTodolists.getSelectedTodolist(); 237 if (obj instanceof Todolist) { 238 Todolist tl = (Todolist)obj; 239 if (tl!=null) { 240 if (DialogBox.question(plugin.tr("MainInterface.confirmDeleteListDialog.title"), plugin.tr("MainInterface.confirmDeleteListDialog.question"))) 241 mainFrame.deleteTodolist(tl); 242 } 243 } 244 } 245 }); 246 jtbToolBar.add(jbDeleteTodolist); 247 248 jbEditTodolist.addActionListener(new ActionListener () { 249 public void actionPerformed(ActionEvent ae) { 250 Object obj = jtTodolists.getSelectedTodolist(); 252 if (obj instanceof Todolist) { 253 Todolist tl = (Todolist)obj; 254 if (tl!=null) { 255 new TodolistDialog(plugin, mainFrame, tl).show(); 256 } 257 } 258 } 259 }); 260 jtbToolBar.add(jbEditTodolist); 261 262 jbEditAcl.addActionListener(new ActionListener () { 263 public void actionPerformed(ActionEvent ae) { 264 Object obj = jtTodolists.getSelectedTodolist(); 265 if (obj instanceof Todolist) { 266 Todolist tl = (Todolist)obj; 267 if (tl!=null) { 268 IO io = IO.getInstance(plugin); 269 try { 270 new AclEditor(plugin, io, String.valueOf(tl.getId())).show(); 271 } catch (Exception e) { 272 DialogBox.error(plugin.tr("err.unableToEditAcl")); 273 e.printStackTrace(); 274 } 275 } 276 } 277 } 278 }); 279 jtbToolBar.add(jbEditAcl); 280 281 jtbToolBar.add(new JToolBar.Separator ()); 282 283 jbCreateItem.addActionListener(new ActionListener () { 284 public void actionPerformed(ActionEvent ae) { 285 Object obj = jtTodolists.getSelectedTodolist(); 287 if (obj instanceof Todolist) { 288 Todolist tl = (Todolist)obj; 289 if (tl!=null) { 290 new TodolistItemDialog(plugin, mainFrame, tl.getId()).show(); 291 } 292 } 293 } 294 }); 295 jtbToolBar.add(jbCreateItem); 296 297 jbDeleteItem.addActionListener(new ActionListener () { 298 public void actionPerformed(ActionEvent ae) { 299 TodolistItem tli = jtTodolistItems.getSelectedTodolistItem(); 300 if (tli!=null) { 301 if (DialogBox.question(plugin.tr("MainInterface.confirmDeleteItemDialog.title"), plugin.tr("MainInterface.confirmDeleteItemDialog.question"))) 302 mainFrame.deleteTodolistItem(tli); 303 } 304 } 305 }); 306 jtbToolBar.add(jbDeleteItem); 307 308 jbEditItem.addActionListener(new ActionListener () { 309 public void actionPerformed(ActionEvent ae) { 310 TodolistItem tli = (TodolistItem)jtTodolistItems.getSelectedTodolistItem(); 313 if (tli!=null) { 314 new TodolistItemDialog(plugin, mainFrame, tli).show(); 315 } else { 316 htmledListItemComment.clear(); 317 } 318 } 319 }); 320 jtbToolBar.add(jbEditItem); 321 getContentPane().add(jtbToolBar, BorderLayout.NORTH); 322 323 manageWidget(jspMain); 324 manageWidget(jspItem); 325 manageWidget(jspList); 326 327 refreshListToolbar(); 328 refreshTodolists(); 329 } 330 331 private void refreshTodolists() { 332 ArrayList todolists = IO.getInstance(plugin).getTodolists(); 333 jtTodolists.clear(); 334 Iterator it = todolists.iterator(); 335 while (it.hasNext()) 336 jtTodolists.add((Todolist)it.next()); 337 jtTodolists.add("view_all"); 338 } 339 340 private void refreshTodolistItems() { 341 Object obj = jtTodolists.getSelectedTodolist(); 342 if (obj instanceof Todolist) { 343 Todolist tl = (Todolist)obj; 344 if (tl!=null) { 345 htmledListComment.setText(tl.getComment()); 346 347 ArrayList todolistItems = IO.getInstance(plugin).getTodolistItems(tl.getId()); 348 jtTodolistItems.clear(); 349 Iterator it = todolistItems.iterator(); 350 while (it.hasNext()) 351 jtTodolistItems.add((TodolistItem)it.next()); 352 } 353 else { 354 htmledListComment.clear(); 355 jtTodolistItems.clear(); 356 } 357 } else if (obj instanceof String ) { 358 if (obj.equals("view_all")) { 359 htmledListComment.setText(""); 360 ArrayList todolistItems = IO.getInstance(plugin).getTodolistItems(((TodolistTableModel)jtTodolists.getModel()).getValues()); 361 jtTodolistItems.clear(); 362 Iterator it = todolistItems.iterator(); 363 while (it.hasNext()) 364 jtTodolistItems.add((TodolistItem)it.next()); 365 } 366 } 367 } 368 369 protected void addTodolist(Todolist newTodolist) { 370 int id = IO.getInstance(plugin).addTodolist(newTodolist); 371 if (id<0) 372 return; 373 newTodolist.setId(id); 374 jtTodolists.add(newTodolist); 375 } 376 377 protected void modifyTodolist(Todolist oldTodolist, Todolist newTodolist) { 378 if (!IO.getInstance(plugin).modifyTodolist(oldTodolist, newTodolist)) 379 return; 380 jtTodolists.remove(oldTodolist); 381 jtTodolists.add(newTodolist); 382 } 383 384 protected void deleteTodolist(Todolist defunctTodolist) { 385 if (!IO.getInstance(plugin).deleteTodolist(defunctTodolist)) 386 return; 387 jtTodolists.remove(defunctTodolist); 388 } 389 390 protected void addTodolistItem(TodolistItem newTodolistItem) { 391 int id = IO.getInstance(plugin).addTodolistItem(newTodolistItem); 392 if (id<0) 393 return; 394 newTodolistItem.setId(id); 395 jtTodolistItems.add(newTodolistItem); 396 } 397 398 protected void modifyTodolistItem(TodolistItem oldTodolistItem, TodolistItem newTodolistItem) { 399 if (!IO.getInstance(plugin).modifyTodolistItem(oldTodolistItem, newTodolistItem)) 400 return; 401 jtTodolistItems.remove(oldTodolistItem); 402 jtTodolistItems.add(newTodolistItem); 403 } 404 405 protected void deleteTodolistItem(TodolistItem defunctTodolistItem) { 406 if (!IO.getInstance(plugin).deleteTodolistItem(defunctTodolistItem)) 407 return; 408 jtTodolistItems.remove(defunctTodolistItem); 409 } 410 411 private void refreshListToolbar() 412 { 413 Object obj = jtTodolists.getSelectedTodolist(); 414 if (obj instanceof Todolist) { 415 Todolist tl = (Todolist)obj; 416 boolean writeable = (tl != null && !tl.isReadOnly()); 417 boolean owner = (writeable && tl.getUserName().equals(Client.getInstance().getMyInfos().getName())); 418 jbEditTodolist.setEnabled(owner); 419 jbDeleteTodolist.setEnabled(owner); 420 jbEditAcl.setEnabled(owner); 421 jbCreateItem.setEnabled(writeable); 422 } else { 423 jbEditTodolist.setEnabled(false); 424 jbDeleteTodolist.setEnabled(false); 425 jbEditAcl.setEnabled(false); 426 jbCreateItem.setEnabled(false); 427 } 428 refreshItemToolbar(); 429 } 430 431 private void refreshItemToolbar() 432 { 433 TodolistItem tli = (TodolistItem)jtTodolistItems.getSelectedTodolistItem(); 434 if (tli!=null) { 435 jbEditItem.setEnabled(jbCreateItem.isEnabled()); 436 jbDeleteItem.setEnabled(jbCreateItem.isEnabled()); 437 } else { 438 jbEditItem.setEnabled(false); 439 jbDeleteItem.setEnabled(false); 440 } 441 } 442 } 443 | Popular Tags |