supporting developers’ coordination in the ide #cscw2015

63
Supporting Developers’ Coordination in The IDE Guzzi, Bacchelli, Riche, van Deursen

Upload: alberto-bacchelli

Post on 14-Jul-2015

115 views

Category:

Science


0 download

TRANSCRIPT

Supporting Developers’ Coordination in The IDE

Guzzi, Bacchelli, Riche, van Deursen

Supporting Developers’ Coordination in The IDE

Supporting Developers’ Coordination in The IDE

Investigating how developers experience teamwork and identify problems they face when working in team.

Investigating how developers experience teamwork and identify problems they face when working in team.

Supporting Developers’ Coordination in The IDE

Devising and evaluating an IDE extension to support teamwork.

Investigating how developers experience teamwork and identify problems they face when working in team.

Exploratory Investigation

Exploratory Investigation: Methodology

brainstorming(9 experts)

interviews (11 professional developers)

analysis of transcripts and memos with card sorting

themes’ analysis with affinity diagram

working situation

working situation

How developers experience teamwork

1. They spend most the time doing individual work

2. Most of their interaction is to coordinate (e.g., through daily stand-ups)

3. Collaboration happens infrequently and on a need basis (e.g., sprint meetings)

4. Their intention for collaboration is mostly coordination, leading to individual work

Exploratory Investigation: Findings

individual work

coordination

collaboration

interactionlevel

Exploratory Investigation: Findings

individual work

coordination

collaboration

interactionlevel

information

How developers experience teamwork: role of information

1. They spend most the time doing individual work

2. Most of their interaction is to coordinate (e.g., through daily stand-ups)

3. Collaboration happens infrequently and on a need basis (e.g., sprint meetings)

4. Their intention for collaboration is mostly coordination, leading to individual work

Exploratory Investigation: Findings

Three problematic scenarios

inefficient task assignment

simultaneous conflicting changes

breaking changes

Needed information

ProblematicCommunicated Visible

✔ ✔ ✘

✘ ✔ ✘

✘ ✘ ﹅Exploratory Investigation: Findings

Three problematic scenarios: role of information

inefficient task assignment

simultaneous conflicting changes

breaking changes

Exploratory Investigation: Selected implications

support for coordination has more potential

literature must be tested on current practices

receiving internal changes is experienced as painful

Supporting Developers’ Coordination in The IDE

Devising and evaluating an IDE extension to support teamwork.

support for coordination has more potential

literature must be tested on current practices

receiving internal changes is experienced as painful

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Current IDEs’ support for receiving changes

Current IDEs’ support for receiving changesh"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Current IDEs’ support for receiving changes

no support for:- recognition over recall

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Recognition over recall “Memory for recognizing things is better than memory for recalling things” —Nielsen 1995

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Visibility of system status “The system should always keep users informed about what is going on” —Nielsen 1995

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Clearly marked exits “A system should never capture users in situations that have no visible escape” — Molich & Nielsen 1990

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits- help and documentation

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Help and documentation “[Documentation should] be easy to search, focused on the user’s task, list concrete steps to be carried out, and not be too large” — Nielsen 1995

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits- help and documentation- help recognize, diagnose, and recover

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Help users recognize, diagnose, and recover from errors — Nielsen 1995

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits- help and documentation- help recognize, diagnose, and recover

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Design requirements:

- recognition over recall - visibility of system status - clearly marked exits - help and documentation - help recognize, diagnose, and recover

Designing and evaluating Bellevue: Methodology

RITE(9 participants)

feedback’s analysis

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

Bellevue prototypeas slide deck

early feedback(several UX experts)

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

FINALBellevue design

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

Bellevue initial ideaas slide deck

Let’s see the walkthrough

The story… James works on the Paint project with other 4 people. It’s morning and James has just got to work. James starts the day by updating his codebase to the latest version.

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

Pending Outgoing ! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs

edited edited

edited edited

added edited

edited

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

Pending Outgoing ! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

James accepts all the changes; his local code gets updated.

James builds and runs the Paint project. He plays around with the program to test the new version.

He notices that the UNDO function is not working.

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint # bin

# obj

# Properties

app.config [ ] App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml

Window1.xaml.cs [ ]

Latest changes only [7 files]

James immediately notices the files that have changed.

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint # bin

# obj

# Properties

app.config [ ] App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml

Window1.xaml.cs [ ]

Latest changes only [7 files]

Also, he can apply some filtering to just see the latest changes.

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvasCommands.cs [ ]

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows.Input;"

"namespace"Paint"{""""""public"static"class"PaintCanvasCommands"

""""{"""""""""static"PaintCanvasCommands()"""""""""{"""""""""""""ClearCanvas"="new"RoutedUICommand("""""""""""""""""Clear"Canvas",""ClearCanvas",""""""""""""""""typeof(PaintCanvasCommands));"

"""""""""""""UndoCanvas"="new"RoutedUICommand("""""""""""""""""Undo"my"last"stroke",""UndoCanvas",""""""""""""""""typeof(PaintCanvasCommands));""

""""""""""""ChangeToPencil"="new"RoutedUICommand(""""""""""""""""""Pencil",""ChangeToPencil","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToEraser"="new"RoutedUICommand("

"""""""""""""""""Eraser",""ChangeToEraser","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToLine"="new"RoutedUICommand(""""""""""""""""""Line",""ChangeToLine","

""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToRect"="new"RoutedUICommand(""""""""""""""""""Rect",""ChangeToRect","""""""""""""""""typeof(PaintCanvasCommands));"

""""""""}"""""""""//"getters"and"setters"from"here"on:""""""""""

""""""""public"static"RoutedUICommand"ClearCanvas"""""""""{"""""""""""""get;"""""""""""""set;"""""""""}"""""""""Latest changes only [7 files]

390

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows.Input;"

"namespace"Paint"{""""""public"static"class"PaintCanvasCommands"

""""{"""""""""static"PaintCanvasCommands()"""""""""{"""""""""""""ClearCanvas"="new"RoutedUICommand("""""""""""""""""Clear"Canvas",""ClearCanvas",""""""""""""""""typeof(PaintCanvasCommands));"

"""""""""""""UndoCanvas"="new"RoutedUICommand("""""""""""""""""Undo"my"last"stroke",""UndoCanvas",""""""""""""""""typeof(PaintCanvasCommands));""

""""""""""""ChangeToPencil"="new"RoutedUICommand(""""""""""""""""""Pencil",""ChangeToPencil","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToEraser"="new"RoutedUICommand("

"""""""""""""""""Eraser",""ChangeToEraser","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToLine"="new"RoutedUICommand(""""""""""""""""""Line",""ChangeToLine","

""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToRect"="new"RoutedUICommand(""""""""""""""""""Rect",""ChangeToRect","""""""""""""""""typeof(PaintCanvasCommands));"

""""""""}"""""""""//"getters"and"setters"from"here"on:""""""""""

""""""""public"static"RoutedUICommand"ClearCanvas"""""""""{"""""""""""""get;"""""""""""""set;"""""""""}"""""""""Latest changes only [7 files]

"""""""""//"getters"and"setters"from"here"on:"390

PaintCanvasCommands.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows.Input;"

"namespace"Paint"{""""""public"static"class"PaintCanvasCommands"

""""{"""""""""static"PaintCanvasCommands()"""""""""{"""""""""""""ClearCanvas"="new"RoutedUICommand("""""""""""""""""Clear"Canvas",""ClearCanvas",""""""""""""""""typeof(PaintCanvasCommands));"

"""""""""""""UndoCanvas"="new"RoutedUICommand("""""""""""""""""Undo"my"last"stroke",""UndoCanvas",""""""""""""""""typeof(PaintCanvasCommands));""

""""""""""""ChangeToPencil"="new"RoutedUICommand(""""""""""""""""""Pencil",""ChangeToPencil","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToEraser"="new"RoutedUICommand("

"""""""""""""""""Eraser",""ChangeToEraser","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToLine"="new"RoutedUICommand(""""""""""""""""""Line",""ChangeToLine","

""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToRect"="new"RoutedUICommand(""""""""""""""""""Rect",""ChangeToRect","""""""""""""""""typeof(PaintCanvasCommands));"

""""""""}"""""""""//"getters"and"setters"from"here"on:""""""""""

""""""""public"static"RoutedUICommand"ClearCanvas"""""""""{"""""""""""""get;"""""""""""""set;"""""""""}"""""""""

390

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

PaintCanvasCommands.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Media;"using"System.Windows.Shapes;""namespace"Paint"{"

""""public"class"PaintCanvas":"System.Windows.Controls.Canvas"""""{"""""""""private"List<List<PaintObject>>"history;"""""""""private"List<PaintObject>"paintObjects;""""""""""private"PaintObject"temporaryObject;"

""""""""private"PaintObject"hoveringObject;"""""""""private"Rectangle"hoveringRender;""""""""""private"bool"currentlyDrawing;""

""""""""public"PaintCanvas()":"base()"""""""""{"""""""""""""history"="new"List<List<PaintObject>>();"""""""""""""paintObjects"="new"List<PaintObject>();""

""""""""""""hoveringRender"="new"Rectangle();"""""""""""""hoveringRender.StrokeThickness"="1;"""""""""""""hoveringRender.Stroke"="Brushes.DarkGray;"""""""""""""hoveringRender.Visibility"="Visibility.Hidden;"""""""""""""this.Children.Add(hoveringRender);"

"""""""""""""currentlyDrawing"="false;"""""""""}""""""""""public"void"Repaint()"

""""""""{"""""""""""""this.Children.Clear();"""""""""""""foreach"(PaintObject"po"in"paintObjects)"""""""""""""{"

""""""""""""""""this.Children.Add(po.getRendering());"""""""""""""}""""""""""""""this.Children.Add(hoveringRender);"""""""""}"

""""""""""

280

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Media;"using"System.Windows.Shapes;""namespace"Paint"{"

""""public"class"PaintCanvas":"System.Windows.Controls.Canvas"""""{"""""""""private"List<List<PaintObject>>"history;"""""""""private"List<PaintObject>"paintObjects;""""""""""private"PaintObject"temporaryObject;"

""""""""private"PaintObject"hoveringObject;"""""""""private"Rectangle"hoveringRender;""""""""""private"bool"currentlyDrawing;""

""""""""public"PaintCanvas()":"base()"""""""""{"""""""""""""history"="new"List<List<PaintObject>>();"""""""""""""paintObjects"="new"List<PaintObject>();""

""""""""""""hoveringRender"="new"Rectangle();"""""""""""""hoveringRender.StrokeThickness"="1;"""""""""""""hoveringRender.Stroke"="Brushes.DarkGray;"""""""""""""hoveringRender.Visibility"="Visibility.Hidden;"""""""""""""this.Children.Add(hoveringRender);"

"""""""""""""currentlyDrawing"="false;"""""""""}""""""""""public"void"Repaint()"

""""""""{"""""""""""""this.Children.Clear();"""""""""""""foreach"(PaintObject"po"in"paintObjects)"""""""""""""{"

""""""""""""""""this.Children.Add(po.getRendering());"""""""""""""}""""""""""""""this.Children.Add(hoveringRender);"""""""""}"

""""""""""

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""hoveringRender.StrokeThickness"="1;"280

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151"

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151"

142"143"

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""int"lastItemIndex"="history.Count"–"1;"1400

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

click0

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

x

Latest changes only [7 files]

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

“Cleaned up the code and fixed some of the missing comments (mostly the auto-generated ones).”

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

x

Latest changes only [7 files]

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

142"143"

1400

paint

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

James runs the code and verifies that UNDO is now working.

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability” 10 hours ago

[email protected]

#9044

“Cleaned up the code…” 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

[email protected]

[email protected]

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability” 10 hours ago

[email protected]

#9044

“Cleaned up the code…” 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

[email protected]

[email protected]

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

*PaintCanvas.cs [1]

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint # bin

# obj

# Properties

app.config [ ] App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Repaint();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

1400

PaintCanvas.cs [ ]

142"143"

What we saw..

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Colored blocks help find changed lines of code

1400142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Hovering over any colored block reveals the latest changes

1400"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Historical details are accessible by clicking on any colored block

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

142"143"

1400

paint

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Code is editable while seeing the historical details

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability” 10 hours ago

[email protected]

#9044

“Cleaned up the code…” 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

[email protected]

[email protected]

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

Contacting the author of a particular change is easy

[email protected]

[email protected]

PaintCanvas.cs [ ]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"

10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151"

"""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files] Designing and evaluating Bellevue: A screenshot

Supporting Developers’ Coordination in The IDE

Guzzi, Bacchelli, Riche, van Deursen