Ticket #2226: 2226.patch
File 2226.patch, 11.4 KB (added by diana, 15 years ago) |
---|
-
modules/org.sophie2.main.func.text/src/main/java/org/sophie2/main/func/text/view/TextLinkColorHud.java
### Eclipse Workspace Patch 1.0 #P sophie
330 330 oldText.removeAttachment(interval).addAttachment(interval, newLink); 331 331 332 332 LogicR3.fire(frameView.textView().get(), null, null, event, 333 TextView.EventIds.SET_TEXT, newText, "Change normal link color" );333 TextView.EventIds.SET_TEXT, newText, "Change normal link color", true); 334 334 } 335 335 } 336 336 } -
modules/org.sophie2.base.model.text/src/main/java/org/sophie2/base/model/text/mvc/TextView.java
249 249 /** 250 250 * Set the text to the model. 251 251 */ 252 @EventParams({ImmHotText.class, String.class })252 @EventParams({ImmHotText.class, String.class, Boolean.class}) 253 253 SET_TEXT, 254 254 255 255 /** … … 277 277 * Index of the attribute value in the APPLY_STYLE operation. 278 278 */ 279 279 public static final int ATTR_VALUE_PARAM_INDEX = 1; 280 /** 281 * Index for the input text of a SET_TEXT operation 282 */ 283 public static final int UNDO_SIGNIFICANCE_INDEX = 2; 280 284 } 281 285 282 286 /** -
modules/org.sophie2.main.func.text/src/main/java/org/sophie2/main/func/text/view/TextLinksHud.java
238 238 } 239 239 240 240 LogicR3.fire(frameView.textView().get(), null, null, event, 241 TextView.EventIds.SET_TEXT, newText, description );241 TextView.EventIds.SET_TEXT, newText, description, true); 242 242 243 243 return true; 244 244 } -
modules/org.sophie2.main.func.text/src/main/java/org/sophie2/main/func/text/view/TextFrameLogic.java
277 277 textRes.getText().removeAttachment(interval).addAttachment(interval, newAtt); 278 278 279 279 LogicR3.fire(headView.textView().get(), null, null, cause, 280 TextView.EventIds.SET_TEXT, newText, "Link visited" );280 TextView.EventIds.SET_TEXT, newText, "Link visited", true); 281 281 } 282 282 } 283 283 } -
modules/org.sophie2.main.func.text/src/main/java/org/sophie2/main/func/text/view/HotTextLogic.java
56 56 * Note that this will be done even if the text view is not editable. 57 57 */ 58 58 ON_SET_TEXT { 59 59 60 60 long lastSignificantTime = 0; 61 61 62 62 public void defineFilter(EventFilterBuilder filter) { … … 70 70 if (bookView == null) { 71 71 return false; 72 72 } 73 73 Boolean undoSignificance = event.getEventParam(TextView.EventIds.UNDO_SIGNIFICANCE_INDEX, 74 Boolean.class); 74 75 HotTextResourceH model = view.getModel(); 75 76 final ImmHotText text = event.getEventParam(TextView.EventIds.TEXT_PARAM_INDEX, 76 77 ImmHotText.class); 78 boolean significant = false; 79 if(undoSignificance) { 80 long currentTime = System.currentTimeMillis(); 81 if (currentTime - this.lastSignificantTime > 500) { 82 significant = true; 83 } 84 this.lastSignificantTime = currentTime; 85 } else { 86 //TODO: very dirty fix!!!!!! 87 final ImmHotText oldText = model.getText(); 88 new AutoAction("Set old text", true) { 77 89 78 boolean significant = false; 79 long currentTime = System.currentTimeMillis(); 80 if (currentTime - this.lastSignificantTime > 500) { 90 @Override 91 public void performAuto() { 92 getChanger().setRaw(HotTextResourceR4.KEY_TEXT, oldText); 93 } 94 }.register(model.getAccess()); 81 95 significant = true; 82 96 } 83 this.lastSignificantTime = currentTime; 84 97 // System.out.println("significant: "+significant); 85 98 new AutoAction("Set text", significant) { 86 99 87 100 @Override … … 113 126 114 127 PageWorkArea pageWorkArea = docView.workArea().get(); 115 128 String word = event 116 129 .getEventParam(QuickSearchPanel.EventIds.WORD_PARAM_ID, String.class); 117 130 boolean isNext = event.getEventParam(QuickSearchPanel.EventIds.DIRECTION_PARAM_ID, 118 131 Boolean.class); 119 132 findText(word, pageWorkArea, isNext); … … 218 231 return false; 219 232 } 220 233 }, 221 234 222 235 /** 223 236 * Interaction with the keyboard. 224 237 * Supports the pasting of the copied text. … … 235 248 236 249 ClipboardManager manager = ClipboardManager.get(); 237 250 DndTransferable transferable = manager.getContents(); 238 251 239 252 if (transferable != null) { 240 253 boolean handled = pasteText(event, transferable); 241 254 return handled; 242 255 } 243 256 244 257 return false; 245 258 } 246 259 }, 247 260 248 261 /** 249 262 * Handles "copy" regarding text. 250 263 */ … … 268 281 return LogicR3.fire(textView, null, null, event, TextView.EventIds.COPY); 269 282 } 270 283 } 271 284 272 285 return false; 273 286 } 274 287 275 288 }, 276 289 277 290 /** 278 291 * Handles "Cut" regarding text 279 292 */ … … 297 310 return LogicR3.fire(textView, null, null, event, TextView.EventIds.CUT); 298 311 } 299 312 } 300 313 301 314 return false; 302 315 } 303 304 316 317 305 318 }, 306 319 307 320 /** 308 321 * Handles pasting of text. 309 322 */ … … 323 336 LogicR3.fire(textView, null, null, event, TextView.EventIds.PASTE); 324 337 return true; 325 338 } 326 339 327 340 return false; 328 341 } 329 330 342 343 331 344 }; 332 345 333 346 /** 334 347 * The color used to higlight search results. 335 348 */ … … 347 360 * Whether the event has been handled. 348 361 */ 349 362 private static boolean pasteText(EventR3 event, DndTransferable transferable) { 350 363 351 364 ImmHotText textToInsert = getText(transferable); 352 365 if (textToInsert == null) { 353 366 return false; 354 367 } 355 368 356 369 TextView source = event.getSource(TextView.class); 357 370 TextViewFlow flow = source.textFlow().get(); 358 371 359 372 if (flow.isEditable()) { 360 373 361 374 ImmHotText text = flow.getText(); 362 375 363 376 HotInterval interval = getSelectionEnds(flow); 364 377 assert interval != null; 365 378 366 ImmHotText newText = text.replace(interval, textToInsert); 379 380 ImmHotText newText = text.replace(interval, ImmHotText.empty()); 381 newText = newText.replace(new HotInterval(interval.getBegin(), 382 interval.getBegin()), textToInsert); 367 383 boolean handled = LogicR3.fire(TextFlowLogic.createSetTextEvent(newText, 368 "Insert text", event ));384 "Insert text", event, false)); 369 385 370 386 if (handled) { 371 387 HotPos newPos = newText.advance(interval.getBegin(), textToInsert.getLength()); … … 373 389 } 374 390 return handled; 375 391 } 376 392 377 393 return false; 378 394 } 379 395 380 396 /** 381 397 * Creates an {@link ImmHotText} instance from the contents of the given 382 398 * transferable if possible. … … 388 404 */ 389 405 private static ImmHotText getText(DndTransferable transferable) { 390 406 assert transferable != null; 391 407 392 408 if (transferable.getDndData(HotTextData.class) != null) { 393 409 return transferable.getDndData(HotTextData.class).getContent(); 394 410 } 395 411 396 412 if (transferable.getDndData(RtfData.class) != null) { 397 413 RtfTextImportManager rtfManager = new RtfTextImportManager(); 398 414 return rtfManager.getResourceData(transferable); 399 415 } 400 416 401 417 if (transferable.getDndData(StringData.class) != null) { 402 418 String text = transferable.getDndData(StringData.class).getContent(); 403 419 return ImmHotText.createPlain(text); 404 420 } 405 421 406 422 return null; 407 423 } 408 424 -
modules/org.sophie2.base.model.text/src/main/java/org/sophie2/base/model/text/mvc/TextFlowLogic.java
230 230 } 231 231 232 232 boolean handled = LogicR3.fire( 233 createSetTextEvent(newText, "Delete characters", event ));233 createSetTextEvent(newText, "Delete characters", event, true)); 234 234 235 235 if (handled) { 236 236 setSelection(flow, new HotInterval(interval.getBegin(), … … 298 298 interval.getBegin(),interval.getEnd()); 299 299 ClipboardManager.get().setContents(contents, Operation.CUT); 300 300 boolean handled = LogicR3.fire( 301 createSetTextEvent(newText, "Delete characters", event ));301 createSetTextEvent(newText, "Delete characters", event, true)); 302 302 if (handled) { 303 303 flow.markPos().set(flow.caretPos().get()); 304 304 } … … 338 338 text = text.applyStyle(selection, style); 339 339 340 340 return LogicR3.fire( 341 createSetTextEvent(text, "Apply style", event ));341 createSetTextEvent(text, "Apply style", event, false)); 342 342 } 343 343 344 344 }, … … 382 382 ImmHotText text = flow.getText(); 383 383 text = text.applyStyle(selection, style); 384 384 385 return LogicR3.fire(createSetTextEvent(text, "Apply paragraph style", event ));385 return LogicR3.fire(createSetTextEvent(text, "Apply paragraph style", event, false)); 386 386 } 387 387 }, 388 388 … … 456 456 457 457 HotInterval interval = getSelectionEnds(flow); 458 458 assert interval != null; 459 460 459 ImmHotText newText = immHotText.replace(interval, ImmHotText 461 460 .createPlain(text)); 462 461 463 462 boolean handled = LogicR3.fire(createSetTextEvent(newText, 464 "Insert a character", event ));463 "Insert a character", event, true)); 465 464 466 465 if (handled) { 467 466 int offset = text.length(); … … 485 484 * Description of the event. 486 485 * @param cause 487 486 * The cause of the event. 487 * @param undoSignificance 488 * If true - the undo considers the fastness of typing 489 * (when undo all the changes applied in some time interval are undo) 490 * If false - the undo considers only the last change. 488 491 * @return 489 492 * The newly created event. 490 493 */ 491 public static EventR3 createSetTextEvent(ImmHotText text, String description, EventR3 cause) { 494 public static EventR3 createSetTextEvent(ImmHotText text, String description, EventR3 cause, 495 boolean undoSignificance) { 492 496 List<Object> fields = new ArrayList<Object>(cause.getFields()); 493 497 494 498 fields.set(EventR3.ID_INDEX, TextView.EventIds.SET_TEXT); … … 496 500 497 501 addEventParam(EventR3.PARAMS_INDEX + TextView.EventIds.TEXT_PARAM_INDEX, text, fields); 498 502 addEventParam(EventR3.PARAMS_INDEX + TextView.EventIds.DESCRIPTION_PARAM_INDEX, description, fields); 499 503 addEventParam(EventR3.PARAMS_INDEX + TextView.EventIds.UNDO_SIGNIFICANCE_INDEX, undoSignificance, fields); 504 500 505 return new EventR3(fields); 501 506 } 502 507