@startuml state
[*] --> 鼠标左键按下


鼠标左键按下 --> 创建模式 : 在工具栏选择了一个图形
state 创建模式{
创建图形中鼠标移动 --> 创建图形中鼠标弹起
创建图形中鼠标弹起 --> [*]
创建图形中鼠标弹起 : 记录操作命令
}


state 矩形选择模式{
鼠标左键按下 : 记录鼠标位置
鼠标左键按下 --> 矩形选择起始 : 原先没有选择图形，这次也没有


矩形选择起始 --> 矩形选择中鼠标移动
矩形选择中鼠标移动 --> 矩形选择中鼠标弹起
矩形选择中鼠标弹起 : 记录操作命令
矩形选择中鼠标弹起 --> [*]
}

鼠标左键按下 --> 修改模式 : 原先选择了一个图形，且这次在这个图形上
state 修改模式{
    移动状态 --> 鼠标移动
    更改大小状态 --> 鼠标移动
    鼠标移动 --> 鼠标弹起
}
鼠标左键按下 --> 选择模式 : 原先没有选择，现在选择一个
state 选择模式{
    选择图形后鼠标弹起 --> [*]
}

鼠标弹起 --> [*]
鼠标弹起 : 这个要保存命令记录


state 放大缩小模式{
    放大2倍 --> [*]
}
鼠标左键按下 --> 放大缩小模式

@enduml