11
11
#include < QHBoxLayout>
12
12
#include < QGraphicsRectItem>
13
13
#include < QPushButton>
14
+ #include < QStackedWidget>
14
15
15
16
#include < iostream>
16
17
using namespace std ;
17
18
18
19
AlignFrame::AlignFrame (QWidget *parent): QFrame(parent) {
19
- QVBoxLayout *content = new QVBoxLayout (this );
20
-
21
- content->addSpacing (10 );
22
- QPushButton *new_align = new QPushButton (" New alignment..." );
23
- new_align->setProperty (" class" , " large" );
24
- content->addWidget (new_align);
25
- new_align->setMinimumWidth (200 );
26
- new_align->setMaximumWidth (300 );
27
-
28
- QFrame *aligns_frame = new QFrame;
29
- content->addWidget (aligns_frame, 0 );
30
- aligns = new QVBoxLayout (aligns_frame);
31
-
32
- content->addStretch (1 );
33
- // content->addStretch();
34
- connect (new_align, SIGNAL (clicked ()), this , SLOT (newAlign ()));
20
+
21
+ stack = new QStackedWidget;
22
+
23
+ {
24
+ QFrame *align_rows = new QFrame;
25
+ QVBoxLayout *content = new QVBoxLayout (align_rows);
26
+ content->addSpacing (10 );
27
+ {
28
+ QPushButton *new_align = new QPushButton (" New alignment..." );
29
+ new_align->setProperty (" class" , " large" );
30
+ new_align->setMinimumWidth (200 );
31
+ new_align->setMaximumWidth (300 );
32
+ connect (new_align, SIGNAL (clicked ()), this , SLOT (newAlign ()));
33
+ content->addWidget (new_align);
34
+ }
35
+ {
36
+ QFrame *aligns_frame = new QFrame;
37
+ content->addWidget (aligns_frame, 0 );
38
+ aligns = new QVBoxLayout (aligns_frame);
39
+ }
40
+ content->addStretch (1 );
41
+
42
+ stack->addWidget (align_rows);
43
+ }
44
+
45
+ {
46
+ marker_dialog = new MarkerDialog (MarkerDialog::ALIGN, this );
47
+ marker_dialog->setWindowFlags (Qt::Widget);
48
+ connect (marker_dialog, SIGNAL (accepted ()), this , SLOT (okMarker ()));
49
+ connect (marker_dialog, SIGNAL (rejected ()), this , SLOT (cancelMarker ()));
50
+ stack->addWidget (marker_dialog);
51
+ }
52
+
53
+ QVBoxLayout *layout = new QVBoxLayout (this );
54
+ layout->addWidget (stack);
35
55
}
36
56
37
57
void AlignFrame::clear () {
@@ -50,39 +70,61 @@ void AlignFrame::init() {
50
70
}
51
71
}
52
72
53
- /* on user button press */
54
- void AlignFrame::newAlign () {
55
- if (!marker_dialog)
56
- marker_dialog = new MarkerDialog (MarkerDialog::ALIGN, this );
73
+ void AlignFrame::okMarker () {
74
+
75
+ AlignRow *row = findRow (provisional_align);
57
76
58
- Align *align = new Align (qRelightApp-> project (). images . size () );
59
- marker_dialog-> setAlign (align);
60
- int answer = marker_dialog-> exec ( );
61
- if (answer == QDialog::Rejected) {
62
- delete align;
63
- return ;
77
+ provisional_align-> rect = marker_dialog-> getAlign ( );
78
+ if (!row) { // new align
79
+ qRelightApp-> project (). aligns . push_back (provisional_align );
80
+ row = addAlign (provisional_align);
81
+ } else {
82
+ row-> setRect (provisional_align-> rect ) ;
64
83
}
65
- qRelightApp->project ().aligns .push_back (align);
66
- AlignRow *row = addAlign (align);
67
84
row->findAlignment ();
85
+
86
+ provisional_align = nullptr ;
87
+ stack->setCurrentIndex (0 );
88
+
89
+ }
90
+
91
+ void AlignFrame::cancelMarker () {
92
+ AlignRow *row = findRow (provisional_align);
93
+
94
+ if (!row) // this was a new align cancelled
95
+ delete provisional_align;
96
+
97
+ provisional_align = nullptr ;
98
+ stack->setCurrentIndex (0 );
99
+ }
100
+
101
+
102
+ /* on user button press */
103
+ void AlignFrame::newAlign () {
104
+ stack->setCurrentIndex (1 );
105
+ provisional_align = new Align (qRelightApp->project ().images .size ());
106
+ marker_dialog->setAlign (provisional_align);
107
+ }
108
+
109
+
110
+ void AlignFrame::editAlign (AlignRow *row) {
111
+ stack->setCurrentIndex (1 ); // needs to be called before setAlign, for correct resize.
112
+ provisional_align = row->align ;
113
+ marker_dialog->setAlign (provisional_align);
68
114
}
69
115
70
116
void AlignFrame::projectUpdate () {
71
117
auto &project = qRelightApp->project ();
72
118
project.computeOffsets ();
73
-
74
- auto offsets = qRelightApp->project ().offsets ;
75
- for (auto &o: offsets) {
76
- o -= project.offsets [0 ];
77
- cout << o.x () << " " << o.y () << endl;
78
- }
79
-
80
119
}
81
120
82
121
AlignRow *AlignFrame::addAlign (Align *align) {
83
122
AlignRow *row = new AlignRow (align);
84
123
aligns->addWidget (row);
85
124
125
+ cout << aligns->children ().size () << endl;
126
+
127
+ connect (row, SIGNAL (edit (AlignRow *)), this , SLOT (editAlign (AlignRow *)));
86
128
connect (row, SIGNAL (removeme (AlignRow *)), this , SLOT (removeAlign (AlignRow *)));
87
129
connect (row, SIGNAL (updated ()), this , SLOT (projectUpdate ()));
88
130
return row;
@@ -105,3 +147,12 @@ void AlignFrame::removeAlign(AlignRow *row) {
105
147
delete row;
106
148
projectUpdate ();
107
149
}
150
+
151
+ AlignRow *AlignFrame::findRow (Align *align) {
152
+ for (int i = 0 ; i < aligns->count (); i++) {
153
+ AlignRow *r = static_cast <AlignRow *>(aligns->itemAt (i)->widget ());
154
+ if (r->align == align)
155
+ return r;
156
+ }
157
+ return nullptr ;
158
+ }
0 commit comments