Holiday coding log :)
[blender.git] / source / blender / editors / space_text / text_ops.c
index 53e731bf2c4afa829132660029b8da5b42099ed5..83a1bfee0d81d33be7ea27a11d44301e2eea95cc 100644 (file)
@@ -615,6 +615,8 @@ static int text_run_script(bContext *C, ReportList *reports)
                }
 
                BKE_report(reports, RPT_ERROR, "Python script fail, look in the console for now...");
+
+               return OPERATOR_FINISHED;
        }
 #else
        (void)C;
@@ -1135,7 +1137,8 @@ static int text_convert_whitespace_exec(bContext *C, wmOperator *op)
        
        tmp = text->lines.first;
        
-       //first convert to all space, this make it a lot easier to convert to tabs because there is no mixtures of ' ' && '\t'
+       /* first convert to all space, this make it a lot easier to convert to tabs
+        * because there is no mixtures of ' ' && '\t' */
        while (tmp) {
                text_check_line = tmp->line;
                number = flatten_string(st, &fs, text_check_line) + 1;
@@ -1376,104 +1379,6 @@ void TEXT_OT_move_lines(wmOperatorType *ot)
        RNA_def_enum(ot->srna, "direction", direction_items, 1, "Direction", "");
 }
 
-/******************* previous marker operator *********************/
-
-static int text_previous_marker_exec(bContext *C, wmOperator *UNUSED(op))
-{
-       Text *text = CTX_data_edit_text(C);
-       TextMarker *mrk;
-       int lineno;
-
-       lineno = txt_get_span(text->lines.first, text->curl);
-       mrk = text->markers.last;
-       while (mrk && (mrk->lineno > lineno || (mrk->lineno == lineno && mrk->end > text->curc)))
-               mrk = mrk->prev;
-       if (!mrk) mrk = text->markers.last;
-       if (mrk) {
-               txt_move_to(text, mrk->lineno, mrk->start, 0);
-               txt_move_to(text, mrk->lineno, mrk->end, 1);
-       }
-
-       text_update_cursor_moved(C);
-       WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
-
-       return OPERATOR_FINISHED;
-}
-
-void TEXT_OT_previous_marker(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name = "Previous Marker";
-       ot->idname = "TEXT_OT_previous_marker";
-       ot->description = "Move to previous marker";
-       
-       /* api callbacks */
-       ot->exec = text_previous_marker_exec;
-       ot->poll = text_edit_poll;
-}
-
-/******************* next marker operator *********************/
-
-static int text_next_marker_exec(bContext *C, wmOperator *UNUSED(op))
-{
-       Text *text = CTX_data_edit_text(C);
-       TextMarker *mrk;
-       int lineno;
-
-       lineno = txt_get_span(text->lines.first, text->curl);
-       mrk = text->markers.first;
-       while (mrk && (mrk->lineno < lineno || (mrk->lineno == lineno && mrk->start <= text->curc)))
-               mrk = mrk->next;
-       if (!mrk) mrk = text->markers.first;
-       if (mrk) {
-               txt_move_to(text, mrk->lineno, mrk->start, 0);
-               txt_move_to(text, mrk->lineno, mrk->end, 1);
-       }
-
-       text_update_cursor_moved(C);
-       WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
-
-       return OPERATOR_FINISHED;
-}
-
-void TEXT_OT_next_marker(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name = "Next Marker";
-       ot->idname = "TEXT_OT_next_marker";
-       ot->description = "Move to next marker";
-       
-       /* api callbacks */
-       ot->exec = text_next_marker_exec;
-       ot->poll = text_edit_poll;
-}
-
-/******************* clear all markers operator *********************/
-
-static int text_clear_all_markers_exec(bContext *C, wmOperator *UNUSED(op))
-{
-       Text *text = CTX_data_edit_text(C);
-
-       txt_clear_markers(text, 0, 0);
-
-       text_update_cursor_moved(C);
-       WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
-
-       return OPERATOR_FINISHED;
-}
-
-void TEXT_OT_markers_clear(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name = "Clear All Markers";
-       ot->idname = "TEXT_OT_markers_clear";
-       ot->description = "Clear all markers";
-       
-       /* api callbacks */
-       ot->exec = text_clear_all_markers_exec;
-       ot->poll = text_edit_poll;
-}
-
 /************************ move operator ************************/
 
 static EnumPropertyItem move_type_items[] = {
@@ -1669,8 +1574,8 @@ static void txt_wrap_move_bol(SpaceText *st, ARegion *ar, short sel)
 
        text_update_character_width(st);
 
-       if (sel) linep = &text->sell, charp = &text->selc;
-       else linep = &text->curl, charp = &text->curc;
+       if (sel) { linep = &text->sell; charp = &text->selc; }
+       else     { linep = &text->curl; charp = &text->curc; }
 
        oldc = *charp;
 
@@ -1735,8 +1640,8 @@ static void txt_wrap_move_eol(SpaceText *st, ARegion *ar, short sel)
 
        text_update_character_width(st);
 
-       if (sel) linep = &text->sell, charp = &text->selc;
-       else linep = &text->curl, charp = &text->curc;
+       if (sel) { linep = &text->sell; charp = &text->selc; }
+       else     { linep = &text->curl; charp = &text->curc; }
 
        oldc = *charp;
 
@@ -1798,8 +1703,8 @@ static void txt_wrap_move_up(SpaceText *st, ARegion *ar, short sel)
 
        text_update_character_width(st);
 
-       if (sel) linep = &text->sell, charp = &text->selc;
-       else linep = &text->curl, charp = &text->curc;
+       if (sel) { linep = &text->sell; charp = &text->selc; }
+       else     { linep = &text->curl; charp = &text->curc; }
 
        wrap_offset_in_line(st, ar, *linep, *charp, &offl, &offc);
        col = text_get_char_pos(st, (*linep)->line, *charp) + offc;
@@ -1825,12 +1730,12 @@ static void txt_wrap_move_down(SpaceText *st, ARegion *ar, short sel)
        Text *text = st->text;
        TextLine **linep;
        int *charp;
-       int offl, offc, col, newl, visible_lines;
+       int offl, offc, col, visible_lines;
 
        text_update_character_width(st);
 
-       if (sel) linep = &text->sell, charp = &text->selc;
-       else linep = &text->curl, charp = &text->curc;
+       if (sel) { linep = &text->sell; charp = &text->selc; }
+       else     { linep = &text->curl; charp = &text->curc; }
 
        wrap_offset_in_line(st, ar, *linep, *charp, &offl, &offc);
        col = text_get_char_pos(st, (*linep)->line, *charp) + offc;
@@ -1860,8 +1765,8 @@ static void cursor_skip(SpaceText *st, ARegion *ar, Text *text, int lines, int s
        TextLine **linep;
        int *charp;
        
-       if (sel) linep = &text->sell, charp = &text->selc;
-       else linep = &text->curl, charp = &text->curc;
+       if (sel) { linep = &text->sell; charp = &text->selc; }
+       else     { linep = &text->curl; charp = &text->curc; }
 
        if (st && ar && st->wordwrap) {
                int rell, relc;
@@ -2201,10 +2106,10 @@ static void text_scroll_apply(bContext *C, wmOperator *op, wmEvent *event)
 
        if (!tsc->scrollbar) {
                txtdelta[0] = -tsc->delta[0] / st->cwidth;
-               txtdelta[1] = tsc->delta[1] / st->lheight;
+               txtdelta[1] = tsc->delta[1] / (st->lheight_dpi + TXT_LINE_SPACING);
 
                tsc->delta[0] %= st->cwidth;
-               tsc->delta[1] %= st->lheight;
+               tsc->delta[1] %= (st->lheight_dpi + TXT_LINE_SPACING);
        }
        else {
                txtdelta[1] = -tsc->delta[1] * st->pix_per_line;
@@ -2299,7 +2204,7 @@ static int text_scroll_invoke(bContext *C, wmOperator *op, wmEvent *event)
                tsc->old[1] = event->y;
                /* Sensitivity of scroll set to 4pix per line/char */
                tsc->delta[0] = (event->x - event->prevx) * st->cwidth / 4;
-               tsc->delta[1] = (event->y - event->prevy) * st->lheight / 4;
+               tsc->delta[1] = (event->y - event->prevy) * st->lheight_dpi / 4;
                tsc->first = 0;
                tsc->scrollbar = 0;
                text_scroll_apply(C, op, event);
@@ -2590,7 +2495,7 @@ static void text_cursor_set_to_pos_wrapped(SpaceText *st, ARegion *ar, int x, in
 
        if (linep && charp != -1) {
                if (sel) { text->sell = linep; text->selc = charp; }
-               else { text->curl = linep; text->curc = charp; }
+               else     { text->curl = linep; text->curc = charp; }
        }
 }
 
@@ -2598,7 +2503,7 @@ static void text_cursor_set_to_pos(SpaceText *st, ARegion *ar, int x, int y, int
 {
        Text *text = st->text;
        text_update_character_width(st);
-       y = (ar->winy - 2 - y) / st->lheight;
+       y = (ar->winy - 2 - y) / (st->lheight_dpi + TXT_LINE_SPACING);
 
        if (st->showlinenrs) x -= TXT_OFFSET + TEXTXLOC;
        else x -= TXT_OFFSET;
@@ -2615,7 +2520,7 @@ static void text_cursor_set_to_pos(SpaceText *st, ARegion *ar, int x, int y, int
                int w;
                
                if (sel) { linep = &text->sell; charp = &text->selc; }
-               else { linep = &text->curl; charp = &text->curc; }
+               else     { linep = &text->curl; charp = &text->curc; }
                
                y -= txt_get_span(text->lines.first, *linep) - st->top;
                
@@ -2955,14 +2860,13 @@ void TEXT_OT_insert(wmOperatorType *ot)
 /* mode */
 #define TEXT_FIND       0
 #define TEXT_REPLACE    1
-#define TEXT_MARK_ALL   2
 
 static int text_find_and_replace(bContext *C, wmOperator *op, short mode)
 {
        Main *bmain = CTX_data_main(C);
        SpaceText *st = CTX_wm_space_text(C);
-       Text *start = NULL, *text = st->text;
-       int flags, first = 1;
+       Text *text = st->text;
+       int flags;
        int found = 0;
        char *tmp;
 
@@ -2971,79 +2875,48 @@ static int text_find_and_replace(bContext *C, wmOperator *op, short mode)
 
        flags = st->flags;
        if (flags & ST_FIND_ALL)
-               flags ^= ST_FIND_WRAP;
-
-       do {
-               int proceed = 0;
-
-               if (first) {
-                       if (text->markers.first)
-                               WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
-
-                       txt_clear_markers(text, TMARK_GRP_FINDALL, 0);
-               }
+               flags &= ~ST_FIND_WRAP;
 
-               first = 0;
-               
-               /* Replace current */
-               if (mode != TEXT_FIND && txt_has_sel(text)) {
-                       tmp = txt_sel_to_buf(text);
-
-                       if (flags & ST_MATCH_CASE) proceed = strcmp(st->findstr, tmp) == 0;
-                       else proceed = BLI_strcasecmp(st->findstr, tmp) == 0;
-
-                       if (proceed) {
-                               if (mode == TEXT_REPLACE) {
-                                       txt_insert_buf(text, st->replacestr);
-                                       if (text->curl && text->curl->format) {
-                                               MEM_freeN(text->curl->format);
-                                               text->curl->format = NULL;
-                                       }
-                                       text_update_cursor_moved(C);
-                                       WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
-                                       text_drawcache_tag_update(CTX_wm_space_text(C), 1);
-                               }
-                               else if (mode == TEXT_MARK_ALL) {
-                                       unsigned char color[4];
-                                       UI_GetThemeColor4ubv(TH_SHADE2, color);
+       /* Replace current */
+       if (mode != TEXT_FIND && txt_has_sel(text)) {
+               tmp = txt_sel_to_buf(text);
 
-                                       if (txt_find_marker(text, text->curl, text->selc, TMARK_GRP_FINDALL, 0)) {
-                                               if (tmp) MEM_freeN(tmp), tmp = NULL;
-                                               break;
-                                       }
+               if (flags & ST_MATCH_CASE) found = strcmp(st->findstr, tmp) == 0;
+               else found = BLI_strcasecmp(st->findstr, tmp) == 0;
 
-                                       txt_add_marker(text, text->curl, text->curc, text->selc, color, TMARK_GRP_FINDALL, TMARK_EDITALL);
-                                       text_update_cursor_moved(C);
-                                       WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
+               if (found) {
+                       if (mode == TEXT_REPLACE) {
+                               txt_insert_buf(text, st->replacestr);
+                               if (text->curl && text->curl->format) {
+                                       MEM_freeN(text->curl->format);
+                                       text->curl->format = NULL;
                                }
+                               text_update_cursor_moved(C);
+                               WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
+                               text_drawcache_tag_update(CTX_wm_space_text(C), 1);
                        }
-                       MEM_freeN(tmp);
-                       tmp = NULL;
                }
+               MEM_freeN(tmp);
+               tmp = NULL;
+       }
 
-               /* Find next */
-               if (txt_find_string(text, st->findstr, flags & ST_FIND_WRAP, flags & ST_MATCH_CASE)) {
-                       text_update_cursor_moved(C);
-                       WM_event_add_notifier(C, NC_TEXT | ND_CURSOR, text);
-               }
-               else if (flags & ST_FIND_ALL) {
-                       if (text == start) break;
-                       if (!start) start = text;
-                       if (text->id.next)
-                               text = st->text = text->id.next;
-                       else
-                               text = st->text = bmain->text.first;
-                       txt_move_toline(text, 0, 0);
-                       text_update_cursor_moved(C);
-                       WM_event_add_notifier(C, NC_TEXT | ND_CURSOR, text);
-                       first = 1;
-               }
-               else {
-                       if (!found && !proceed) BKE_reportf(op->reports, RPT_ERROR, "Text not found: %s", st->findstr);
-                       break;
-               }
-               found = 1;
-       } while (mode == TEXT_MARK_ALL);
+       /* Find next */
+       if (txt_find_string(text, st->findstr, flags & ST_FIND_WRAP, flags & ST_MATCH_CASE)) {
+               text_update_cursor_moved(C);
+               WM_event_add_notifier(C, NC_TEXT | ND_CURSOR, text);
+       }
+       else if (flags & ST_FIND_ALL) {
+               if (text->id.next)
+                       text = st->text = text->id.next;
+               else
+                       text = st->text = bmain->text.first;
+               txt_move_toline(text, 0, 0);
+               text_update_cursor_moved(C);
+               WM_event_add_notifier(C, NC_TEXT | ND_CURSOR, text);
+       }
+       else {
+               if (!found) BKE_reportf(op->reports, RPT_ERROR, "Text not found: %s", st->findstr);
+       }
 
        return OPERATOR_FINISHED;
 }
@@ -3084,25 +2957,6 @@ void TEXT_OT_replace(wmOperatorType *ot)
        ot->poll = text_space_edit_poll;
 }
 
-/******************* mark all operator *********************/
-
-static int text_mark_all_exec(bContext *C, wmOperator *op)
-{
-       return text_find_and_replace(C, op, TEXT_MARK_ALL);
-}
-
-void TEXT_OT_mark_all(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name = "Mark All";
-       ot->idname = "TEXT_OT_mark_all";
-       ot->description = "Mark all specified text";
-       
-       /* api callbacks */
-       ot->exec = text_mark_all_exec;
-       ot->poll = text_space_edit_poll;
-}
-
 /******************* find set selected *********************/
 
 static int text_find_set_selected_exec(bContext *C, wmOperator *op)