35
35
#include <gtk/gtk.h>
41
39
ApvlvWindow *ApvlvWindow::m_curWindow = NULL;
43
ApvlvWindow::ApvlvWindow (ApvlvCore * doc)
41
ApvlvWindow::ApvlvWindow (ApvlvCore * doc)
50
mCore = new ApvlvDoc (0, 0, gParams->values ("zoom"));
48
mCore = new ApvlvDoc (0, 0, gParams->values ("zoom"));
56
54
m_son = m_daughter = m_parent = NULL;
70
68
if (m_parent != NULL)
72
if (m_parent->m_son == this)
74
m_parent->m_son = NULL;
76
else if (m_parent->m_daughter == this)
78
m_parent->m_daughter = NULL;
70
if (m_parent->m_son == this)
72
m_parent->m_son = NULL;
74
else if (m_parent->m_daughter == this)
76
m_parent->m_daughter = NULL;
82
80
if (type == AW_CORE)
87
85
else if (type == AW_SP || type == AW_VSP)
91
ApvlvWindow *win = m_son;
95
if (m_daughter != NULL)
97
ApvlvWindow *win = m_daughter;
89
ApvlvWindow *win = m_son;
93
if (m_daughter != NULL)
95
ApvlvWindow *win = m_daughter;
102
g_object_unref (mPaned);
100
g_object_unref (mPaned);
125
123
if (pre != NULL && pre->type == AW_CORE)
127
pre->mCore->setactive (false);
125
pre->mCore->setactive (false);
130
128
if (win->type == AW_CORE)
132
win->mCore->setactive (true);
130
win->mCore->setactive (true);
135
133
m_curWindow = win;
168
nwin = getneighbor (ct, key);
171
setcurrentWindow (this, nwin);
166
nwin = getneighbor (ct, key);
169
setcurrentWindow (this, nwin);
215
213
asst (this && type == AW_CORE);
216
214
for (cw = fw = NULL, w = this; w != NULL; cw = w, w = w->m_parent)
218
if (w->type == AW_SP)
220
if ((cw == w->m_daughter && down == true)
221
|| (cw == w->m_son && down == false))
227
fw = down ? w->m_daughter : w->m_son;
231
else if (w->type == AW_VSP)
233
if (cw != NULL && cw == w->m_daughter)
216
if (w->type == AW_SP)
218
if ((cw == w->m_daughter && down == true)
219
|| (cw == w->m_son && down == false))
225
fw = down ? w->m_daughter : w->m_son;
229
else if (w->type == AW_VSP)
231
if (cw != NULL && cw == w->m_daughter)
244
242
for (nw = w = fw; w != NULL;)
246
if (w->type == AW_CORE)
251
else if (w->type == AW_SP)
253
w = down ? w->m_son : w->m_daughter;
255
else if (w->type == AW_VSP)
257
w = right ? w->m_daughter : w->m_son;
261
debug ("error type: %d", w->type);
244
if (w->type == AW_CORE)
249
else if (w->type == AW_SP)
251
w = down ? w->m_son : w->m_daughter;
253
else if (w->type == AW_VSP)
255
w = right ? w->m_daughter : w->m_son;
259
debug ("error type: %d", w->type);
274
272
asst (this && type == AW_CORE);
275
273
for (cw = fw = NULL, w = this; w != NULL; cw = w, w = w->m_parent)
277
if (w->type == AW_VSP)
279
if ((cw == w->m_daughter && right == true)
280
|| (cw == w->m_son && right == false))
286
fw = right ? w->m_daughter : w->m_son;
290
else if (w->type == AW_SP)
292
if (cw != NULL && cw == w->m_daughter)
275
if (w->type == AW_VSP)
277
if ((cw == w->m_daughter && right == true)
278
|| (cw == w->m_son && right == false))
284
fw = right ? w->m_daughter : w->m_son;
288
else if (w->type == AW_SP)
290
if (cw != NULL && cw == w->m_daughter)
303
301
for (nw = w = fw; w != NULL;)
305
if (w->type == AW_CORE)
310
else if (w->type == AW_VSP)
312
w = right ? w->m_son : w->m_daughter;
314
else if (w->type == AW_SP)
316
w = down ? w->m_daughter : w->m_son;
320
debug ("error type: %d", w->type);
303
if (w->type == AW_CORE)
308
else if (w->type == AW_VSP)
310
w = right ? w->m_son : w->m_daughter;
312
else if (w->type == AW_SP)
314
w = down ? w->m_daughter : w->m_son;
318
debug ("error type: %d", w->type);
350
348
if (doc == mCore)
352
debug ("can't birth with orign doc, copy it");
358
doc = mCore->copy ();
359
gView->regloaded (doc);
364
gView->errormessage ("can't split");
350
debug ("can't birth with orign doc, copy it");
356
doc = mCore->copy ();
357
gView->regloaded (doc);
362
gView->errormessage ("can't split");
368
366
ApvlvWindow *nwindow = new ApvlvWindow (doc);
376
374
mPaned = vsp == false ? gtk_vpaned_new () : gtk_hpaned_new ();
377
375
g_object_ref (mPaned);
378
376
g_signal_connect (G_OBJECT (mPaned), "button-release-event",
379
G_CALLBACK (apvlv_window_paned_resized_cb), this);
377
G_CALLBACK (apvlv_window_paned_resized_cb), this);
383
void (*panedcb) (GtkPaned *, GtkWidget *);
384
GtkWidget *parent = m_parent->mPaned;
385
if (gtk_paned_get_child1 (GTK_PANED (parent)) == widget ())
387
panedcb = gtk_paned_add1;
391
panedcb = gtk_paned_add2;
381
void (*panedcb) (GtkPaned *, GtkWidget *);
382
GtkWidget *parent = m_parent->mPaned;
383
if (gtk_paned_get_child1 (GTK_PANED (parent)) == widget ())
385
panedcb = gtk_paned_add1;
389
panedcb = gtk_paned_add2;
394
gtk_container_remove (GTK_CONTAINER (parent), widget ());
395
panedcb (GTK_PANED (parent), mPaned);
392
gtk_container_remove (GTK_CONTAINER (parent), widget ());
393
panedcb (GTK_PANED (parent), mPaned);
399
replace_widget (widget (), mPaned);
397
replace_widget (widget (), mPaned);
402
400
gtk_paned_pack1 (GTK_PANED (mPaned), nwindow->widget (), TRUE, TRUE);
405
403
type = vsp == false ? AW_SP : AW_VSP;
406
404
if (type == AW_SP)
408
nwindow->setsize (mWidth, mHeight / 2);
409
nwindow2->setsize (mWidth, mHeight / 2);
406
nwindow->setsize (mWidth, mHeight / 2);
407
nwindow2->setsize (mWidth, mHeight / 2);
411
409
else if (type == AW_VSP)
413
nwindow->setsize (mWidth / 2, mHeight);
414
nwindow2->setsize (mWidth / 2, mHeight);
411
nwindow->setsize (mWidth / 2, mHeight);
412
nwindow2->setsize (mWidth / 2, mHeight);
417
415
gtk_widget_show_all (mPaned);
433
void (*panedcb) (GtkPaned *, GtkWidget *);
434
GtkWidget *parent = m_parent->mPaned;
435
if (gtk_paned_get_child1 (GTK_PANED (parent)) == mPaned)
437
panedcb = gtk_paned_add1;
441
panedcb = gtk_paned_add2;
431
void (*panedcb) (GtkPaned *, GtkWidget *);
432
GtkWidget *parent = m_parent->mPaned;
433
if (gtk_paned_get_child1 (GTK_PANED (parent)) == mPaned)
435
panedcb = gtk_paned_add1;
439
panedcb = gtk_paned_add2;
444
gtk_container_remove (GTK_CONTAINER (mPaned), child->widget ());
445
gtk_container_remove (GTK_CONTAINER (parent), mPaned);
446
panedcb (GTK_PANED (parent), child->widget ());
442
gtk_container_remove (GTK_CONTAINER (mPaned), child->widget ());
443
gtk_container_remove (GTK_CONTAINER (parent), mPaned);
444
panedcb (GTK_PANED (parent), child->widget ());
450
gtk_container_remove (GTK_CONTAINER (mPaned), child->widget ());
451
replace_widget (mPaned, child->widget ());
448
gtk_container_remove (GTK_CONTAINER (mPaned), child->widget ());
449
replace_widget (mPaned, child->widget ());
454
452
if (child->type == AW_CORE)
456
ApvlvCore *doc = child->getCore ();
454
ApvlvCore *doc = child->getCore ();
460
458
else if (child->type == AW_SP || child->type == AW_VSP)
463
mPaned = child->mPaned;
464
m_son = child->m_son;
465
m_son->m_parent = this;
466
m_daughter = child->m_daughter;
467
m_daughter->m_parent = this;
468
child->type = AW_NONE;
461
mPaned = child->mPaned;
462
m_son = child->m_son;
463
m_son->m_parent = this;
464
m_daughter = child->m_daughter;
465
m_daughter->m_parent = this;
466
child->type = AW_NONE;
471
469
gtk_widget_show_all (widget ());
507
505
if (type == AW_CORE)
509
mCore->setsize (mWidth, mHeight);
507
mCore->setsize (mWidth, mHeight);
511
509
else if (type == AW_SP || type == AW_VSP)
513
g_timeout_add (50, apvlv_window_resize_children_cb, this);
511
g_timeout_add (50, apvlv_window_resize_children_cb, this);
579
577
int ms = ma - mi;
584
mh1 = (mHeight * (mv - mi)) / ms - 1;
585
mh2 = mHeight - mh1 - 1;
587
else if (type == AW_VSP)
589
mw1 = (mWidth * (mv - mi)) / ms - 1;
590
mw2 = mWidth - mw1 - 1;
593
m_son->setsize (mw1, mh1);
594
m_daughter->setsize (mw2, mh2);
582
mh1 = (mHeight * (mv - mi)) / ms - 1;
583
mh2 = mHeight - mh1 - 1;
585
else if (type == AW_VSP)
587
mw1 = (mWidth * (mv - mi)) / ms - 1;
588
mw2 = mWidth - mw1 - 1;
591
m_son->setsize (mw1, mh1);
592
m_daughter->setsize (mw2, mh2);