| 64 } |
64 } |
| 65 |
65 |
| 66 // ============================================================================= |
66 // ============================================================================= |
| 67 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
67 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| 68 // ============================================================================= |
68 // ============================================================================= |
| 69 void doSave (bool saveAs) { |
69 MAKE_ACTION( save, "&Save", "file-save", "Save the part model.", CTRL( S )) |
| 70 str path = g_curfile->name (); |
70 { |
| 71 |
71 g_win->save( g_curfile, false ); |
| 72 if (path.length () == 0 || saveAs) { |
72 } |
| 73 path = QFileDialog::getSaveFileName (g_win, "Save As", |
73 |
| 74 g_curfile->name (), "LDraw files (*.dat *.ldr)"); |
74 // ============================================================================= |
| 75 |
75 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| 76 if (path.length () == 0) { |
76 // ============================================================================= |
| 77 // User didn't give a file name. This happens if the user cancelled |
77 MAKE_ACTION( saveAs, "Save &As", "file-save-as", "Save the part model to a specific file.", CTRL_SHIFT( S )) |
| 78 // saving in the save file dialog. Abort. |
78 { |
| 79 return; |
79 g_win->save( g_curfile, true ); |
| 80 } |
|
| 81 } |
|
| 82 |
|
| 83 if (g_curfile->save (path)) { |
|
| 84 g_curfile->setName (path); |
|
| 85 g_win->updateTitle (); |
|
| 86 } else { |
|
| 87 setlocale (LC_ALL, "C"); |
|
| 88 |
|
| 89 // Tell the user the save failed, and give the option for saving as with it. |
|
| 90 QMessageBox dlg (QMessageBox::Critical, "Save Failure", |
|
| 91 fmt ("Failed to save to %1\nReason: %2", path, strerror (errno)), |
|
| 92 QMessageBox::Close, g_win); |
|
| 93 |
|
| 94 QPushButton* saveAsBtn = new QPushButton ("Save As"); |
|
| 95 saveAsBtn->setIcon (getIcon ("file-save-as")); |
|
| 96 dlg.addButton (saveAsBtn, QMessageBox::ActionRole); |
|
| 97 dlg.setDefaultButton (QMessageBox::Close); |
|
| 98 dlg.exec (); |
|
| 99 |
|
| 100 if (dlg.clickedButton () == saveAsBtn) |
|
| 101 doSave (true); // yay recursion! |
|
| 102 } |
|
| 103 } |
|
| 104 |
|
| 105 // ============================================================================= |
|
| 106 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|
| 107 // ============================================================================= |
|
| 108 MAKE_ACTION (save, "&Save", "file-save", "Save the part model.", CTRL (S)) { |
|
| 109 doSave (false); |
|
| 110 } |
|
| 111 |
|
| 112 // ============================================================================= |
|
| 113 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|
| 114 // ============================================================================= |
|
| 115 MAKE_ACTION (saveAs, "Save &As", "file-save-as", "Save the part model to a specific file.", CTRL_SHIFT (S)) { |
|
| 116 doSave (true); |
|
| 117 } |
80 } |
| 118 |
81 |
| 119 // ============================================================================= |
82 // ============================================================================= |
| 120 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
83 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| 121 // ============================================================================= |
84 // ============================================================================= |
| 168 |
131 |
| 169 MAKE_ACTION (newVertex, "New Vertex", "add-vertex", "Creates a new vertex.", 0) { |
132 MAKE_ACTION (newVertex, "New Vertex", "add-vertex", "Creates a new vertex.", 0) { |
| 170 AddObjectDialog::staticDialog (LDObject::Vertex, null); |
133 AddObjectDialog::staticDialog (LDObject::Vertex, null); |
| 171 } |
134 } |
| 172 |
135 |
| 173 MAKE_ACTION (newRadial, "New Radial", "add-radial", "Creates a new radial.", 0) { |
136 MAKE_ACTION( makePrimitive, "Make a Primitive", "radial", "Generate a new circular primitive.", 0 ) |
| 174 AddObjectDialog::staticDialog (LDObject::Radial, null); |
137 { |
| |
138 generatePrimitive(); |
| 175 } |
139 } |
| 176 |
140 |
| 177 MAKE_ACTION (editObject, "Edit Object", "edit-object", "Edits this object.", 0) { |
141 MAKE_ACTION (editObject, "Edit Object", "edit-object", "Edits this object.", 0) { |
| 178 if (g_win->sel ().size () != 1) |
142 if (g_win->sel ().size () != 1) |
| 179 return; |
143 return; |