Credit Andrew - improve in-tree documentation
[goodguy/cinelerra.git] / cinelerra / confirmsave.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #include "asset.h"
23 #include "confirmsave.h"
24 #include "language.h"
25 #include "mwindow.h"
26 #include "mwindowgui.h"
27
28
29
30
31 ConfirmSave::ConfirmSave()
32 {
33 }
34
35 ConfirmSave::~ConfirmSave()
36 {
37 }
38
39 int ConfirmSave::test_file(MWindow *mwindow, char *path)
40 {
41         ArrayList<char*> paths;
42         paths.append(path);
43         int result = test_files(mwindow, &paths);
44         paths.remove_all();
45         return result;
46 }
47
48 int ConfirmSave::test_files(MWindow *mwindow, ArrayList<char*> *paths)
49 {
50         ArrayList<BC_ListBoxItem*> list;
51         int result = 0;
52
53         for(int i = 0; i < paths->size(); i++) {
54                 char *path = paths->values[i];
55                 if( !access(path, F_OK) ) {
56                         list.append(new BC_ListBoxItem(path));
57                 }
58         }
59
60         if(list.total) {
61                 if(mwindow) {
62                         ConfirmSaveWindow window(mwindow, &list);
63                         window.create_objects();
64                         window.raise_window();
65                         result = window.run_window();
66                 }
67                 else {
68                         printf(_("The following files exist:\n"));
69                         for(int i = 0; i < list.total; i++) {
70                                 printf("    %s\n", list.values[i]->get_text());
71                         }
72                         printf(_("Won't overwrite existing files.\n"));
73                         result = 1;
74                 }
75                 list.remove_all_objects();
76                 return result;
77         }
78         else {
79                 list.remove_all_objects();
80                 return 0;
81         }
82
83         return result;
84 }
85
86
87
88
89
90
91
92
93
94 ConfirmSaveWindow::ConfirmSaveWindow(MWindow *mwindow,
95         ArrayList<BC_ListBoxItem*> *list)
96  : BC_Window(_(PROGRAM_NAME ": File Exists"),
97                 mwindow->gui->get_abs_cursor_x(1) - 160,
98                 mwindow->gui->get_abs_cursor_y(1) - 120,
99                 320,
100                 320)
101 {
102         this->list = list;
103 }
104
105 ConfirmSaveWindow::~ConfirmSaveWindow()
106 {
107 }
108
109
110 void ConfirmSaveWindow::create_objects()
111 {
112         int x = 10, y = 10;
113         lock_window("ConfirmSaveWindow::create_objects");
114         add_subwindow(new BC_OKButton(this));
115         add_subwindow(new BC_CancelButton(this));
116
117         add_subwindow(title = new BC_Title(x,
118                 y,
119                 _("The following files exist.  Overwrite them?")));
120         y += 30;
121         add_subwindow(listbox = new BC_ListBox(x,
122                 y,
123                 get_w() - x - 10,
124                 get_h() - y - BC_OKButton::calculate_h() - 10,
125                 LISTBOX_TEXT,
126                 list));
127         y = get_h() - 40;
128         add_subwindow(new BC_OKButton(this));
129         x = get_w() - 100;
130         add_subwindow(new BC_CancelButton(this));
131         show_window(1);
132         unlock_window();
133 }
134
135 int ConfirmSaveWindow::resize_event(int w, int h)
136 {
137         int x = 10, y = 10;
138         title->reposition_window(x, y);
139         y += 30;
140         listbox->reposition_window(x,
141                 y,
142                 w - x - 10,
143                 h - y - 50);
144         return 1;
145 }
146
147
148
149
150
151